From 2894695fa248f96cb81fd4f24266372d4412ed69 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Thu, 23 Apr 2026 20:19:54 -0400 Subject: [PATCH 01/53] added missing rules from en to default.yaml --- Rules/Languages/fr/SharedRules/default.yaml | 198 ++++++++++++++++++++ 1 file changed, 198 insertions(+) diff --git a/Rules/Languages/fr/SharedRules/default.yaml b/Rules/Languages/fr/SharedRules/default.yaml index 7f38a389c..d3547e592 100644 --- a/Rules/Languages/fr/SharedRules/default.yaml +++ b/Rules/Languages/fr/SharedRules/default.yaml @@ -315,6 +315,204 @@ - x: "$PostSuperscript" - x: "$Postscripts[2]" +- name: default + tag: mtable + variables: + - IsColumnSilent: "false()" + - NumColumns: "count(*[1]/*) - IfThenElse(*/self::m:mlabeledtr, 1, 0)" + match: "." + replace: + - t: "table avec" # phrase(the 'table with' 3 rows) + - x: count(*) + - test: + if: count(*)=1 + then: [t: "rangée"] # phrase(the table with 1 'row') + else: [t: "rangées"] # phrase(the table with 3 'rows') + - t: "et" # phrase(the table with 3 rows 'and' 4 columns) + - x: "$NumColumns" + - test: + if: "NumColumns=1" + then: [t: "colonne"] # phrase(the table with 3 rows and 1 'column') + else: [t: "colonnes"] # phrase(the table with 3 rows and 4 'columns') + - pause: long + - x: "*" + +- name: default + # callers/context should do that. + # this may get called from navigation -- in that case, there is no context to speak the row #, so don't do it + tag: [mtr, mlabeledtr] + match: "." + replace: + - pause: medium + - t: "rangée" # phrase(the first 'row' of a matrix) + - x: "count(preceding-sibling::*)+1" + - test: + if: "self::m:mlabeledtr" + then: + - t: "avec nom" # phrase(the line 'with label' first equation) + - x: "*[1]/*" + - pause: short + - pause: medium + - test: + if: "self::m:mlabeledtr" + then: [x: "*[position()>1]"] + else: [x: "*"] + +- name: default + tag: mtd + match: "." + replace: + - test: + # ClearSpeak normally speaks "column 1" even though it says the row number, which is a waste... + # The following is commented out but the count(...)!=0 probably belongs in other rule sets + # if: not($IsColumnSilent) and ($ClearSpeak_Matrix = 'SpeakColNum' or count(preceding-sibling::*) != 0) + if: "not($IsColumnSilent)" + then: + - t: "colonne" # phrase(the first 'column' of the matrix) + - x: "count(preceding-sibling::*)+IfThenElse(parent::m:mlabeledtr, 0, 1)" + - pause: medium + - x: "*" + - test: + # short pause after each element; medium pause if last element in a row; long pause for last element in matrix + - if: count(following-sibling::*) > 0 + then: [pause: short] + - else_if: count(../following-sibling::*) > 0 + then: [pause: medium] + else: [pause: long] + +- name: empty-box + # The ordering below is the order in which words come out when there is more than one value + # Note: @notation can contain more than one value + tag: menclose + match: "@notation='box' and *[self::m:mtext and .=' ']" + replace: + - t: "Case vide" # phrase(the 'empty box' contains no values) + +- name: default + # The ordering below is the order in which words come out when there is more than one value + # Note: @notation can contain more than one value + tag: menclose + match: "." + replace: + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' box ')]" + then: [t: "case", pause: short] # phrase(the 'box' around the expression) + - test: + if: ".[contains(@notation,'roundedbox')]" + then: [t: "case arrondie", pause: short] # phrase(the 'round box' around the expression) + - test: + if: ".[contains(@notation,'circle')]" + then: [t: "rond", pause: short] # phrase(the 'circle' around the expression) + - test: + if: ".[ contains(concat(' ', normalize-space(@notation), ' '), ' left ') or contains(concat(' ', normalize-space(@notation), ' '), ' right ') or contains(@notation,'top') or contains(@notation,'bottom') ]" + then: + - t: "line on" # phrase(draw a straight 'line' on the page) + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' left ')]" + then: [t: "gauche", pause: short] # phrase(line on 'left' of the expression) + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' right ')]" + then: [t: "droite", pause: short] # phrase(line on 'right' of the expression) + - test: + if: ".[contains(@notation,'top')]" + then: [t: "dessus", pause: short] # phrase(line on 'top' of the expression) + - test: + if: ".[contains(@notation,'bottom')]" + then: [t: "dessous", pause: short] # phrase(line on the 'bottom' of the expression) + - test: + if: ".[ contains(@notation,'updiagonalstrike') or contains(@notation,'downdiagonalstrike') or contains(@notation,'verticalstrike') or contains(@notation,'horizontalstrike') ]" + then: + - test: + if: ".[contains(@notation,'updiagonalstrike') and contains(@notation,'downdiagonalstrike')]" + then: [spell: "'x'", pause: short] # seems better to say 'x cross out' than 'up diagonal, down diagonal cross out' + else: + - test: + if: ".[contains(@notation,'updiagonalstrike')]" + then: [t: "diagonale vers le haut", pause: short] # phrase(the line runs 'up diagonal') + - test: + if: ".[contains(@notation,'downdiagonalstrike')]" + then: [t: "diagonale vers le bas", pause: short] # phrase(the line runs 'down diagonal') + - test: + if: ".[contains(@notation,'verticalstrike')]" + then: [t: "verticale", pause: short] # phrase(the line is 'vertical') + - test: + if: ".[contains(@notation,'horizontalstrike')]" + then: [t: "horizontale", pause: short] # phrase(the line is 'horizontal') + - t: "cross out" # phrase(please 'cross out' the incorrect answer) + - pause: short + - test: + if: ".[contains(@notation,'uparrow')]" + then: [t: "flèche vers le haut", pause: short] # phrase(direction is shown by the 'up arrow') + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' downarrow ')]" + then: [t: "flèche vers le bas", pause: short] # phrase(the trend is shown by the 'down arrow') + - test: + if: ".[contains(@notation,'leftarrow')]" + then: [t: "flèche vers la gauche", pause: short] # phrase(the 'left arrow' indicates going back) + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' rightarrow ')]" + then: [t: "flèche vers la droite", pause: short] # phrase(the 'right arrow' indicates moving forward) + - test: + if: ".[contains(@notation,'northeastarrow')]" + then: [t: "flèche nord-est", pause: short] # phrase(direction is indicated by the 'northeast arrow') + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' southeastarrow ')]" + then: [t: "flèche sud-est", pause: short] # phrase(direction is shown by the 'southeast arrow') + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' southwestarrow ')]" + then: [t: "flèche sud-ouest", pause: short] # phrase(direction is shown by the 'southwest arrow') + - test: + if: ".[contains(@notation,'northwestarrow')]" + then: [t: "flèche nord-ouest", pause: short] # phrase(direction is shown by the 'northwest arrow') + - test: + if: ".[contains(@notation,'updownarrow')]" + then: [t: "flèche verticale à double extrémité", pause: short] # phrase(upward movement is indicated by the 'double ended vertical arrow') + - test: + if: ".[contains(@notation,'leftrightarrow')]" + then: [t: "flèche horizontale à double extrémité", pause: short] # phrase(progress is indicated by the 'double ended horizontal arrow') + - test: + if: ".[contains(@notation,'northeastsouthwestarrow')]" + then: [t: "flèche diagonale vers le haut à double extrémité", pause: short] # phrase(trend is indicated by the 'double ended up diagonal arrow') + - test: + if: ".[contains(@notation,'northwestsoutheastarrow')]" + then: [t: "flèche diagonale vers le bas à double extrémité", pause: short] # phrase(trend is indicated by the 'double ended down diagonal arrow') + - test: + if: ".[contains(@notation,'actuarial')]" + then: [t: "symbole actuariel", pause: short] # phrase(the 'actuarial symbol' represents a specific quantity) + - test: + if: ".[contains(@notation,'madrub')]" + then: [t: "symbole factoriel arabe", pause: short] # phrase(the 'arabic factorial symbol' represents a factorial operation) + - test: + if: ".[contains(@notation,'phasorangle')]" + then: [t: "angle de phaseur", pause: short] # phrase(the 'phasor angle' is used to measure electrical current) + - test: + if: ".[contains(@notation,'longdiv') or not(@notation) or normalize-space(@notation) ='']" # default + then: [t: "symbole de division longue", pause: short] # phrase(the 'long division symbol' indicates a long division calculation) + - test: + if: ".[contains(@notation,'radical')]" + then: [t: "racine carrée", pause: short] # phrase(5 is the 'square root' of 25) + - t: "enclosing" # phrase(parentheses are 'enclosing' part of the equation) + - test: + if: "*[self::m:mtext and .=' ']" + then: [t: "espace"] # 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: "fin d'encadrement"] # phrase(reached the 'end enclosure' point) + - pause: short + +- name: semantics + tag: "semantics" + match: "*[@encoding='MathML-Presentation']" + replace: + - x: "*[@encoding='MathML-Presentation']/*[1]" + +- name: semantics-default + tag: "semantics" + match: . + replace: + - x: "*[1]" + - name: apply-function tag: "apply-function" match: . From 5060b1b36ed8cd6413366396a3330e0b7f3f56b3 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Thu, 23 Apr 2026 21:17:15 -0400 Subject: [PATCH 02/53] added missing rules from en to general.yaml --- Rules/Languages/fr/SharedRules/general.yaml | 934 ++++++++++++++++++++ 1 file changed, 934 insertions(+) diff --git a/Rules/Languages/fr/SharedRules/general.yaml b/Rules/Languages/fr/SharedRules/general.yaml index 1c2e155f7..244c0a376 100644 --- a/Rules/Languages/fr/SharedRules/general.yaml +++ b/Rules/Languages/fr/SharedRules/general.yaml @@ -1,4 +1,343 @@ --- + +# number-sets are a little messy in that the base was converted to a number-set, so we have to match that (simple) case last +- name: pos-neg-number-sets + tag: number-sets + match: "count(*)=2 and *[2][.='+' or .='-']" + replace: + - test: + if: "$Verbosity!='Terse'" + then: + - t: "la" # phrase('the' square root of 25 equals 5) + - bookmark: "*[2]/@id" + - test: + - if: "*[2][.='+']" + then: [t: "positive"] # phrase(set of all 'positive' integers less than 10) + else: [t: "negative"] # phrase(set of all 'negative' integers less than minus 10) + - bookmark: "*[1]/@id" + - test: + - if: "*[1][.='ℂ']" + then: [t: "nombre complexe"] # phrase('complex numbers' consist of two parts) + - else_if: "*[1][.='ℕ']" + then: [t: "nombre naturel"] # phrase('natural numbers' are numbers from 1 to infinity) + - else_if: "*[1][.='ℚ']" + then: [t: "nombre rationel"] # phrase('rational numbers' are the fraction of 2 integers) + - else_if: "*[1][.='ℝ']" + then: [t: "nombre réel"] # phrase('real numbers' can be both positive and negative) + - else_if: "*[1][.='ℤ']" + then: [t: "nombre entier"] # phrase(positive 'integers' are natural numbers above 0) + else: [x: "*[1][text()]"] # shouldn't happen + +- name: dimension-number-sets + # should be single digit integer at this point (e.g, R^3) + tag: number-sets + match: "count(*)=2" + replace: + - bookmark: "*[1]/@id" + - test: + - if: "*[1][.='ℂ']" + then: [t: "C"] # phrase(the letter 'C' used to represent complex number) + - else_if: "*[1][.='ℕ']" + then: [t: "N"] # phrase(the letter 'N' may represent natural numbers) + - else_if: "*[1][.='ℚ']" + then: [t: "Q"] # phrase(the letter 'Q' may represent rational numbers) + - else_if: "*[1][.='ℝ']" + then: [t: "R"] # phrase(the letter 'R' may represent real numbers) + - else_if: "*[1][.='ℤ']" + then: [t: "Z"] # phrase(the letter 'Z' may represent integers) + else: [x: "*[1][text()]"] # shouldn't happen + - bookmark: "*[2]/@id" + - x: "*[2]" + +- name: simple-number-sets + tag: number-sets + match: "count(*)=0" + replace: + - bookmark: "@id" + - test: + - if: ".='ℂ'" + then: [t: "les nombres complexes"] # phrase('the complex numbers' include 2 parts) + - else_if: ".='ℕ'" + then: [t: "les nombres naturels"] # phrase('the natural numbers' begin at 1) + - else_if: ".='ℚ'" + then: [t: "les nombres rationels"] # phrase('the rational numbers' are the fraction of 2 integers) + - else_if: ".='ℝ'" + then: [t: "les nombres réels"] # phrase('the real numbers' can be both positive and negative) + - else_if: ".='ℤ'" + then: [t: "les nombres entiers"] # phrase('the integers' are natural numbers above 0) + else: [x: "text()"] # shouldn't happen + +- name: real-part + tag: real-part + match: "." + replace: + - bookmark: "@id" + - t: "la partie réelle" # phrase('the real part' of a complex number does not include the imaginary part) + +- name: imaginary-part + tag: imaginary-part + match: "." + replace: + - bookmark: "@id" + - t: "la partie imaginaire" # phrase('the imaginary part' is part of a complex number) + +# rules on scripted vertical bars ('evaluated at') +- name: evaluated-at-2 + tag: evaluate + match: "count(*)=2" + replace: + - x: "*[1]" + - pause: auto + - t: "évalués à" # phrase(results were 'evaluated at' a given point) + - pause: auto + - x: "*[2]" + +- name: evaluated-at-3 + tag: evaluate + match: "count(*)=3" + replace: + - x: "*[1]" + - pause: auto + - t: "évalués à" # phrase(results were 'evaluated at' this point) + - pause: auto + - x: "*[3]" + - t: "moins la même expression évaluée à" # phrase(this result is 'minus the same expression evaluated at' an earlier point) + - x: "*[2]" + +- name: permutation + # Not a default because the order of the args is reversed + tag: pochhammer + match: "count(*)=2 and contains(@data-intent-property, ':infix:')" + replace: + - x: "*[2]" + - t: "permutations de" # phrase(the solution involves several 'permutations of' values) + - x: "*[1]" + +- name: intervals + tag: [open-interval, open-closed-interval, closed-interval, closed-open-interval] + match: "count(*)=2" + replace: + - test: + if: "$Verbosity!='Terse'" + then: + - t: "la" # phrase('the' square root of 25 equals 5) + - x: "translate(name(.),'-', ' ')" + - test: + if: "$Verbosity!='Terse'" + then: + - t: "de" # phrase(subtracting 5 'from' 10 gives 5) + - x: "*[1]" + - t: "à" # phrase(adding 6 'to' 6 equals 12) + - x: "*[2]" + else: + - x: "*[1]" + - t: "virgule" # phrase(use a 'comma' to divide large numbers or as a decimal point) + - x: "*[2]" + +- name: default-point + tag: point + match: "count(*)=2" + replace: + - test: + if: "$Verbosity!='Terse'" + then: + - t: "la" # phrase('the' square root of 25 equals 5) + - t: "point" # phrase(a decimal 'point' indicates the fraction component of a number) + - x: "*[1]" + - t: "virgule" # phrase(use a 'comma' to divide large numbers or as a decimal point) + - x: "*[2]" + +- name: bigop-both + tag: large-op + match: "count(*) = 3" + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "la"] # phrase('the' square root of 25 equals 5) + - x: "*[1]" + - t: "de" # phrase(subtracting 5 'from' 10 gives 5) + - x: "*[2]" + - pause: short + - t: "à" # phrase(adding 6 'to' 6 equals 12) + - x: "*[3]" + - test: + if: "following-sibling::*" + then: [t: "de"] # phrase(the square root 'of' 25 equals 5) + +- name: bigop-under + tag: large-op + match: "count(*)=2" + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "la"] # phrase('the' square root of 25 equals 5) + - x: "*[1]" + - t: "sur" # phrase(2 'over' 3 equals two thirds) + - x: "*[2]" + - test: + if: "following-sibling::*" + then: [t: "de"] # phrase(the square root 'of' 25 equals 5) + +- name: largeop + tag: mrow + match: "count(*)=2 and IsInDefinition(*[1], 'LargeOperators')" + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "la"] # phrase('the' square root of 25 equals 5) + - x: "*[1]" + - t: "de" # phrase(the square root 'of' 25 equals 5) + - x: "*[2]" + +- name: repeating-decimal + tag: repeating-decimal + match: "." + replace: + - x: "*[1]" + - t: "avec des chiffres répétitifs" # phrase('with repeating digits') + - spell: "*[2]" + +- name: msubsup-skip-super + # handles single, double, etc., prime + tag: [skip-super, say-super] + match: "count(*)=3" + replace: + - x: "*[1]" + - test: + if: "$Verbosity='Verbose'" + then: [t: "indice"] # phrase(a 'subscript' may be used to indicate an index) + else: [t: "sous"] # phrase(the result is 'sub' optimal) + - x: "*[2]" + - test: + if: "not(IsNode(*[2],'leaf') and $Impairment = 'Blindness')" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "fin de l'indice"] # phrase(this is the 'end subscript' position) + else: [t: "fin d'indice"] # phrase(this is the 'end sub' position) + - pause: short + else_test: + if: "*[2][self::m:mi]" # need a pause in "x sub k prime" so the prime is not associated with the 'k' + then: [pause: short] + - test: + if: "name(.)='say-super'" + then_test: + if: "$Verbosity='Verbose'" + then: [t: "exposant"] # phrase(a 'superscript' number indicates raised to a power) + else: [t: "super"] # phrase(this is a 'super' set of numbers) + - x: "*[3]" + - pause: short + +# in terse mode, we just say "m" or "s", etc., not meters or seconds +- name: unit-terse + tag: unit + match: "$Verbosity = 'Terse' and string-length(.)=1" + replace: + - bookmark: "@id" + - spell: "text()" + + +# the order of matching is +# 1. does it match the base of an SI unit +# 2. does it match an English unit (if in an English language) +# 3. does it match an SI prefix followed by an SI that accepts SI prefixes +# Due to this order, some things like "ft" and "cd" mean "feet" vs "femto-tonnes" and "pints" vs "pico-tonnes" +- name: unit + tag: unit + match: "." + variables: + # If the coefficient is singular, we don't add the plural ending. Finding the coefficient is tricky + # Normal case (A) "3m" (parents is mrow), but could also be (B) "3 m^2" (etc.) (parent is power/mrow) + # But it might be in a fraction as (C) "3 m/s" (parent is fraction/mrow) or (D) "3 m^2/s^2" (parent is power/fraction/mrow) + # or even (E) {3 m^2}/s (parent is power/mrow) + # If in a fraction, only look in the numerator to find the coefficient + # Note: we have a special case for pseudo-scripts like "°" (degrees) which are not powers -- they are essentially "1^°" + # The following "IfThenElse" logic returns the mrow that potentially contains the coefficient, if it exists + # The tests are in the order A, B & E, C, D + - MRowForCoefficient: "IfThenElse(parent::m:mrow, parent::m:mrow, + IfThenElse(parent::m:power, ancestor::*[2][self::m:mrow], + IfThenElse(parent::m:fraction and not(preceding-sibling::*), ancestor::*[2][self::m:mrow], + IfThenElse(parent::m:power[parent::m:fraction and not(preceding-sibling::*)], ancestor::*[3][self::m:mrow], false()) ) ) )" + - IsSingular: "(not($MRowForCoefficient) and parent::*[name(.)!='skip-super' or *[1][.=1]]) or + ($MRowForCoefficient and $MRowForCoefficient[(count(*) = 3 and *[1][self::m:mn and .=1] and *[2]='\u2062')])" + - Prefix: "''" + - Word: "''" + replace: + - bookmark: "@id" + - test: + # is the whole string match a SI Unit without a prefix? + - if: "DefinitionValue(., 'Speech', 'SIUnits') != ''" + then: + - set_variables: [Word: "DefinitionValue(., 'Speech', 'SIUnits')"] + - else_if: "DefinitionValue(., 'Speech', 'UnitsWithoutPrefixes') != ''" + then: + - set_variables: [Word: "DefinitionValue(., 'Speech', 'UnitsWithoutPrefixes')"] + - else_if: "DefinitionValue(., 'Speech', 'EnglishUnits') != ''" + then: + - set_variables: [Word: "DefinitionValue(., 'Speech', 'EnglishUnits')"] + + # do the first two chars match "da" and the remainder match an SIUnit + - else_if: "string-length(.) >= 3 and + substring(., 1, 2) = 'da' and + DefinitionValue(substring(., 3), 'Speech', 'SIUnits') != ''" + then: + - set_variables: + - Prefix: "DefinitionValue('da', 'Speech', 'SIPrefixes')" + - Word: "DefinitionValue(substring(., 3), 'Speech', 'SIUnits')" + + # does the first char match a prefix and the remainder match an SIUnit + - else_if: "string-length(.) >= 2 and + DefinitionValue(substring(., 1, 1), 'Speech', 'SIPrefixes') != '' and + DefinitionValue(substring(., 2), 'Speech', 'SIUnits') != ''" + then: + - set_variables: + - Prefix: "DefinitionValue(substring(., 1, 1), 'Speech', 'SIPrefixes')" + - Word: "DefinitionValue(substring(., 2), 'Speech', 'SIUnits')" + + # not a known unit -- just speak the text, possibly as a plural + - else: + - set_variables: + - Word: "text()" + + # somewhat complicated logic to avoid spaces around "-" as in "centi-grams" vs "centi - grams" -- probably doesn't matter + - test: + if: "$Prefix = ''" + then: + - test: + - if: "$IsSingular" + # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets the prefix concatenated to the base + then: [x: "$Word"] + - else_if: "DefinitionValue($Word, 'Speech', 'PluralForms') != ''" + then: [x: "DefinitionValue($Word, 'Speech', 'PluralForms')"] + else: [x: "$Word", ct: "s"] + else: + - x: "$Prefix" + - ct: "-" + - test: + - if: "$IsSingular" + # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets the prefix concatenated to the base + then: [x: "concat('\uF8FE', $Word)"] + - else_if: "DefinitionValue($Word, 'Speech', 'PluralForms') != ''" + then: [x: "concat('\uF8FE', DefinitionValue($Word, 'Speech', 'PluralForms'))"] + else: [x: "concat('\uF8FE', $Word)", ct: "s"] + +# need to reverse the order of speech: $ 3 -> 3 dollars +- name: currency + tag: mrow + match: "count(*)=3 and DefinitionValue(*[1], 'Speech', 'CurrencySymbols') != ''" + variables: + # If the amount is singular, we don't add the plural ending. + - IsSingular: "*[3][self::m:mn and .=1] and *[2]='\u2062'" + replace: + - bookmark: "*[3]/@id" + - x: "*[3]" + - test: + - if: "$IsSingular" + then: [x: "DefinitionValue(*[1], 'Speech', 'CurrencySymbols')"] + - else_if: "DefinitionValue(*[1], 'Speech', 'PluralForms') != ''" + then: [x: "DefinitionValue(*[1], 'Speech', 'PluralForms')"] + else: [x: "DefinitionValue(*[1], 'Speech', 'CurrencySymbols')", ct: "s"] + - name: sin tag: mi match: ".='sin'" @@ -150,3 +489,598 @@ - else_if: "$Verbosity='Terse'" then: [spell: "'ln'"] else: [t: "logarithme naturel"] + +- name: multi-line + # that eliminates the need for the if: else_if: ... + # IDEA: set a variable with the word to say for the row (e.g., RowLabel = Row/Case/Line/...) + tag: [piecewise, system-of-equations, lines] + match: "." + variables: + # Wikipedia has some tables where all the entire first column is empty (e.g., https://en.wikipedia.org/wiki/List_of_trigonometric_identities) + - LineCount: "count(*[not(contains(@data-intent-property, ':continued-row:'))])" + - NextLineIsContinuedRow: "false()" # default value + - IsColumnSilent: true() + replace: + - x: "$LineCount" + - test: + - if: "self::m:piecewise" + then: [t: "case"] # phrase(this is the first 'case' of three cases) + - else_if: "self::m:system-of-equations" + then: [t: "équation"] # phrase(this is the first 'equation' of three equations) + else: [t: "ligne"] # phrase(this is the first 'line' of three lines) + - test: + - if: "$LineCount != 1" + then: [ct: "s"] # plural + - pause: short + - x: "*" + - pause: long + +- name: default-multiline + tag: [mtr, mlabeledtr] + match: "parent::m:piecewise or parent::m:system-of-equations or parent::m:lines" + variables: [NextLineIsContinuedRow: "following-sibling::*[1][contains(@data-intent-property, ':continued-row:')]"] + replace: + - test: + if: "not($LineCount=1 or contains(@data-intent-property, ':continued-row:'))" + then: + - pause: medium + - test: + - if: "parent::m:piecewise" + then: [t: "case"] # phrase('case' 1 of 10 cases) + - else_if: "parent::m:system-of-equations" + then: [t: "équation"] # phrase('equation' 1 of 10 equations) + else: [t: "ligne"] # 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: "avec étiquette" # phrase(the diagram is complete 'with label') + - x: "*[1]/*" + - test: + if: "not(contains(@data-intent-property, ':continued-row:'))" + then: [pause: medium] + - test: + if: "self::m:mlabeledtr" + then: [x: "*[position()>1]"] + else: [x: "*"] + +- name: default-multiline + tag: mtd + match: "parent::*[parent::m:piecewise or parent::m:system-of-equations or parent::m:lines]" + variables: [LongPause: "$SpeechStyle = 'ClearSpeak' and $ClearSpeak_MultiLinePausesBetweenColumns = 'Long'"] + replace: + - test: + if: "IsInDefinition(*[1], 'ComparisonOperators')" + then: [pause: short] + - test: + if: "*[1][@data-added!='missing-content']" + then: [x: "*"] + - test: + # no pause after each element; medium pause if last element in a row; long pause for last element in matrix unless ClearSpeak override + - if: "count(following-sibling::*) = 0 and not($NextLineIsContinuedRow)" + then_test: + if: "count(../following-sibling::*) > 0" + then_test: + if: "$LongPause" + then: [pause: long] + else: [pause: medium] + else_test: + if: "IsInDefinition(*[1], 'ComparisonOperators')" + then: [pause: short] + else: [pause: auto] + +# Matrix/Determinant rules +# matrix and determinant are the same other than "matrix"/"determinant" based on the bracketing chars +# the pausing logic is pushed down to the +# the rules either speak the s (to get "row n") or the s. "column n" spoken if $IsColumnSilent is false +- name: 1x1-matrix + tag: [matrix, determinant] + variables: [IsColumnSilent: true()] + match: "count(*)=1 and *[self::m:mtr][count(*) = 1]" + replace: + - ot: "the" # phrase('the' 1 by 1 matrix M) + - t: "une par une" # 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: "déterminant"] # phrase(the 2 by 2 'determinant')) + else: [t: "matrice"] # phrase(the 2 by 2 'matrix') + + - t: "avec entrée" # phrase(the 2 by 2 matrix 'with entry' x) + - x: "*[1]/*" + +# simpler reading methods for special case matrices +- name: zero-matrix + tag: matrix + # select all the non-zero entries -- if there are none of them, then it is a zero matrix + match: "not( */*/*[not(self::m:mn and .= 0)] )" + replace: + - t: "la" # phrase('the' 1 by 2 matrix M) + - x: count(*) + - t: "par" # phrase(the 1 'by' 2 matrix) + - x: count(*[self::m:mtr][1]/*) + - t: "matrice zéro" # phrase(the 2 by 2 'zero matrix') + - pause: long + +- name: identity-matrix + tag: matrix + # every diagonal entry must be a literal 1, and every off-diagonal entry must be a literal 0 + match: + - "count(*) = count(*[1]/*) and " # matrix is square + - "not( */*[count(preceding-sibling::*) = count(../preceding-sibling::*)]/*[not(self::m:mn and .= 1)] ) and " # on-diagonal + - "not( */*[count(preceding-sibling::*) != count(../preceding-sibling::*)]/*[not(self::m:mn and .= 0)] )" # off-diagonal + replace: + - t: "la" # phrase('the' 1 by 2 matrix M) + - x: count(*) + - t: "par" # phrase(the 1 'by' 2 matrix) + - x: count(*[self::m:mtr][1]/*) + - t: "matrice identitée" # phrase(the 2 by 2 'identity matrix') + - pause: long + +- name: diagonal-matrix + tag: matrix + # select all the non-zero entries...if they are not on the diagonal + # if there are any of them, then this isn't an identity matrix + match: + - "count(*) = count(*[1]/*) and " + - "not( */*/*[not(self::m:mn and .= 0)]" + - " [count(../preceding-sibling::*)!=count(../../preceding-sibling::*)]" + - " )" + replace: + - t: "la" # phrase('the' 1 by 2 matrix) + - x: count(*) + - t: "par" # phrase(the 1 'by' 2 matrix) + - x: count(*[self::m:mtr][1]/*) + - t: "matrice diagonale" # phrase(the 2 by 2 'diagonal matrix') + - pause: long + - insert: + # this lists the diagonal 'mtd's to be read, and they say "column nnn" before reading the contents + # there seems to be an xpath bug -- without the parens, the match fails for the + # test Languages::en::mtable::diagonal_matrix due to match failure (the third matching element seems to be missing) + nodes: "(*/*/*[not(self::m:mn and .= 0)]/..)" + replace: [pause: auto] + - pause: long + +# simpler reading methods for smaller matrices if the entries are simple +- name: 2-or-3x1-matrix + tag: matrix + variables: [IsColumnSilent: true()] + match: + - "$ClearSpeak_Matrix != 'SpeakColNum' and " # "simple" isn't used for this preference + - "*[self::m:mtr][count(*) = 1] and " # one column + - count(*)<=3 and # at least two rows + - IsNode(*/*/*,'simple') # IsNode() returns true if all the nodes are simple + replace: + - t: "la" # phrase('the' 2 by 2 matrix M) + - x: count(*) + - t: "par une colonne" # phrase(the 2 'by 1 column' matrix) + - test: + if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" + then: [t: "vecteur"] # phrase(the 2 by 2 'vector') + else: [t: "matrice"] # phrase(the 2 by 2 'matrix') + - pause: long + - x: "*/*" + - test: + if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" + then: + - t: "fin" # phrase('end' of matrix) + - test: + if: $ClearSpeak_Matrix = 'EndVector' + then: [t: "vecteur"] # phrase(the 2 column 'vector') + else: [t: "matrice"] # phrase(the 2 by 2 'matrix') + +- name: default-column-matrix + tag: matrix + variables: [IsColumnSilent: true()] + match: "*[self::m:mtr][count(*) = 1]" + replace: + - t: "la" # phrase('the' 2 by 2 matrix M) + - x: "count(*)" + - t: "par 1 colonne" # phrase(the 2 'by 1 column' matrix) + - test: + if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" + then: [t: "vecteur"] # phrase(the 2 column 'vector') + else: [t: "matrice"] # phrase(the 2 by 2 'matrix') + - pause: long + - x: "*" # select the rows (mtr) + - test: + if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" + then: [t: "fin de la matrice"] # phrase(the 'end of matrix' has been reached) + +- name: 1x2-or-3-matrix + tag: matrix + variables: [IsColumnSilent: "$SpeechStyle = 'SimpleSpeak' or ($SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix != 'SpeakColNum')"] + match: + - "$ClearSpeak_Matrix != 'SpeakColNum' and " # "simple" isn't used for this preference + - count(*)=1 and # one row + - count(*[1]/*)<=3 and # at least two cols + - IsNode(*/*/*,'simple') # IsNode() returns true if all the nodes are simple + replace: + - t: "la 1 par" # phrase('the 1 by' 2 matrix) + - x: count(*/*) + - t: "rangée" # phrase(the 1 by 4 'row' matrix) + - test: + if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" + then: [t: "vecteur"] # phrase('the 1 by' 2 row 'vector') + else: [t: "matrice"] # phrase('the 1 by' 2 'matrix') + - pause: long + - x: "*/*" + - test: + if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" + then: + - t: "fin" # phrase(the 'end' of matrix has been reached) + - test: + if: $ClearSpeak_Matrix = 'EndMatrix' + then: [t: "matrice"] # phrase(the 2 by 2 'matrix') + else: [t: "vecteur"] # phrase(the 2 by 1 'vector') + +- name: default-row-matrix + tag: matrix + variables: [IsColumnSilent: "$SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix = 'SilentColNum'"] + match: "count(*)=1" # one row + replace: + - t: "la 1 par" # phrase('the 1 by' 2 matrix) + - x: "count(*/*)" + - t: "rangée" # phrase(the 1 by 2 'row' matrix) + - test: + if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" + then: [t: "vecteur"] # phrase(the 2 by 1 'vector') + else: [t: "matrice"] # phrase(the 2 by 2 'matrix') + - pause: long + - pause: medium + - x: "*/*" # select the cols (mtd) + - test: + if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" + then: + - t: "fin" # phrase(the 'end' of matrix has been reached) + - test: + if: $ClearSpeak_Matrix = 'EndMatrix' + then: [t: "matrice"] # phrase(the 2 by 2 'matrix') + else: [t: "vecteur"] # phrase(the 2 by 1 'vector') + +- name: simple-small-matrix + tag: [matrix, determinant] + match: + - "$ClearSpeak_Matrix != 'SpeakColNum' and " # "simple" isn't used for this preference + - (count(*)<=3 and count(*[1]/*)<=3) and # no bigger than a 3x3 matrix + - IsNode(*/*/*,'simple') # IsNode() returns true if all the nodes are simple + variables: [IsColumnSilent: "$SpeechStyle = 'SimpleSpeak' or ($SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix != 'SpeakColNum')"] + replace: + - t: "la" # phrase('the' 1 by 2 matrix M) + - x: count(*) + - t: "par" # phrase(the 1 'by' 2 matrix) + - x: count(*[self::m:mtr][1]/*) + - test: + if: "self::m:determinant" + then: [t: "determinant"] # phrase(the 2 by 2 'determinant') + else: [t: "matrix"] # phrase(the 2 by 2 'matrix') + - pause: long + - x: "*" + - test: + if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" + then: + - t: "fin" # phrase(the 'end' of matrix has been reached) + - test: + if: "self::m:determinant" + then: [t: "déterminant"] # phrase(the 2 by 2 'determinant') + else: [t: "matrice"] # phrase(the 2 by 2 'matrix') + +- name: default-matrix + tag: [matrix, determinant] + variables: [IsColumnSilent: "$SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix = 'SilentColNum'"] + match: "." + replace: + - t: "the" # phrase('the' 1 by 2 matrix M) + - x: "count(*)" + - t: "par" # phrase(the 1 'by' 2 matrix) + - x: "count(*[self::m:mtr][1]/*)" + - test: + if: "self::m:determinant" + then: [t: "déterminant"] # phrase(the 2 by 2 'determinant') + else: [t: "matrice"] # phrase(the 2 by 2 'matrix') + - pause: long + - x: "*" + - test: + if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" + then: + - t: "fin" # phrase(the 'end' of matrix has been reached) + - test: + if: "self::m:determinant" + then: [t: "déterminant"] # phrase(the 2 by 2 'determinant') + else: [t: "matrice"] # phrase(the 2 by 2 'matrix's) + +- name: chemistry-msub + tag: [chemical-formula] + match: "*[1][.='msub']" + replace: + - x: "*[2]" + - test: + if: "$Verbosity='Verbose'" + then: [t: "indice"] # phrase(H 'subscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sous"] # phrase(H 'sub' 2) + - x: "*[3]" + +- name: dimension-by + tag: mrow + match: dimension-product + replace: + - insert: + nodes: "*" + replace: [t: "par", pause: auto] # phrase(3 'by' 5 matrix) + +- name: chemistry-msup + tag: [chemical-formula] + match: "count(*)=3 and *[1][.='msup']" + replace: + - x: "*[2]" + - test: + if: "$Verbosity='Verbose'" + then: [t: "exposant"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "super"] # phrase(H 'super' 2) + - x: "*[3]" + - test: + if: "following-sibling::*[1][.='+' or .='-']" # a little lazy -- assumes chemistry superscripts end with + or - + then: [pause: medium] + +- + # There currently is no way to do sub/super for n-ary number of args + # Instead, we just deal with up to two prescripts and up to four postscripts (repeating blocks of similar code [UGLY!]) + # This hopefully covers all reasonable cases... + name: chemistry-scripts + tag: [chemical-formula, chemical-nuclide] + variables: + # computing the number of postscripts is messy because of being optionally present -- we use "mod" to get the count right + - Prescripts: "m:mprescripts/following-sibling::*" + - NumChildren: "count(*)" # need to stash this since the count is wrong inside '*[...]' below + - Postscripts: "*[position()>1 and position() < (last() + ($NumChildren mod 2) -count($Prescripts))]" + match: . # should only be msubsup or mmultiscripts at this point + replace: + - test: + if: "$Prescripts" # we have at least one pre sub/super + then: + # nuclide: speak the superscript first + - test: + if: "not($Prescripts[2][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "exposant"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "super"] # phrase(H 'super' 2) + - x: "$Prescripts[2]" + - pause: "short" + - test: + if: "not($Prescripts[1][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "exposant"] # phrase(a 'subscript' may be used to indicate an index) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sous"] # phrase(here is a 'sub' total) + - x: "$Prescripts[1]" + - pause: "short" + - test: + if: "count($Prescripts) > 2" # can this happen for chemistry??? we allow for one *extra* pre sub/super pair + then: + - test: + if: "not($Prescripts[4][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "exposant"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "super"] # phrase(H 'super' 2) + - x: "$Prescripts[4]" + - pause: "short" + - test: + if: "not($Prescripts[3][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "indice"] # phrase(H 'subscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sous"] # phrase(H 'sub' 2) + - x: "$Prescripts[3]" + - pause: "short" + - x: "*[1]" # base + - test: + if: "$Postscripts" + then: + - test: + if: "not($Postscripts[1][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "subscript"] # phrase(phrase(H 'subscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sous"] # phrase(phrase(H 'sub' 2) + - x: "$Postscripts[1]" + - pause: "short" + - test: + if: "not($Postscripts[2][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "exposant"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "super"] # phrase(H 'super' 2) + - x: "$Postscripts[2]" + - pause: "short" + - test: + if: "count($Postscripts) > 2" + then: + - test: + if: "not($Postscripts[3][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "exposant"] # phrase(H 'subscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sous"] # phrase(H 'sub' 2) + - x: "$Postscripts[3]" + - pause: "short" + - test: + if: "not($Postscripts[4][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "exposant"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "super"] # phrase(H 'super' 2) + - x: "$Postscripts[4]" + - pause: "short" + - test: + if: "count($Postscripts) > 4" + then: + - test: + if: "not($Postscripts[5][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "exposant"] # phrase(H 'subscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sous"] # phrase(H 'sub' 2) + - x: "$Postscripts[5]" + - pause: "short" + - test: + if: "not($Postscripts[6][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "exposant"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sous"] # phrase(H 'super' 2) + - x: "$Postscripts[6]" + - pause: "short" + - test: + if: "count($Postscripts) > 6" + then: + - test: + if: "not($Postscripts[7][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "exposant"] # phrase(H 'subscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sous"] # phrase(H 'sub' 2) + - x: "$Postscripts[7]" + - pause: "short" + - test: + if: "not($Postscripts[8][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "exposant"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sous"] # phrase(H 'super' 2) + - x: "$Postscripts[8]" + - pause: "short" + - test: + if: "$Postscripts[last()][not(self::m:none)] and following-sibling::*[1][.='+' or .='-']" + then: [pause: medium] + +- name: chemistry + tag: chemical-equation + match: "." + replace: + - x: "*" + +- name: chemical-element + tag: chemical-element + match: "." + replace: + - bookmark: "@id" + - spell: text() + - pause: short + +- name: chemical-state + tag: chemical-state + match: "count(*)=1" + replace: + - bookmark: "*[1]/@id" + - test: + - if: ".='s'" + then: [t: "solide"] # phrase(Boron is a 'solid' in its natural state) + - else_if: ".='l'" + then: [t: "liquide"] # phrase(water is a 'liquid') + - else_if: ".='g'" + then: [t: "gaz"] # phrase(hydrogen is a 'gas' ) + else: [t: "acqueuse"] # phrase(an 'aqueous' solution is contained in water) + - pause: short + +- name: chemical-formula-operator-bond + tag: chemical-formula-operator + match: "@data-chemical-bond" + replace: + # FIX: this might be better/more efficient if in unicode.yaml + - bookmark: "@id" + - test: + - if: ".='-' or .=':'" + then: [t: "liaison simple"] # phrase(a 'single bond' is formed when two atoms share one pair of electrons) + - else_if: ".='=' or .='∷'" + then: [t: "liaison double"] # phrase(a 'double bond' may occur when two atoms share two pairs of electrons) + - else_if: ".='≡'" + then: [t: "liaison triple"] # phrase(a 'triple bond' occurs when two atoms share three pairs of electrons) + - else_if: ".='≣'" + then: [t: "liaison quadruple"] # phrase(a 'quadruple bond' occurs when two atoms share four pairs of electrons) + else: [x: "text()"] + +- name: chemical-formula-operator + tag: chemical-formula-operator + match: "." + replace: + x: "text()" + +- name: chemical-arrow-operator + tag: chemical-arrow-operator + match: "." + replace: + # FIX: this might be better/more efficient if in unicode.yaml + - bookmark: "@id" + - test: + - if: ".='→' or .='⟶'" + then_test: + if: "$Verbosity='Terse'" + then: [t: "forment"] # phrase(hydrogen and oxygen 'forms' water ) + else: [t: "réagissent pour former"] # phrase(hydrogen and oxygen 'reacts to form' water) + - else_if: ".='⇌' or .='🣑'" # U+01F8D1 + then: [t: "est en équilibre avec"] # phrase(a reactant 'is in equilibrium with' a product) + - else_if: ".='🣓'" # U+1F8D3 + then: [t: "est en équilibre biaisé vers la gauche avec"] # phrase(the reactant 'is in equilibrium biased to the left with' the product) + - else_if: ".='🣒'" # U+1F8D2 + then: [t: "est en équilibre biaisé vers la droite avec"] # phrase(the reactant 'is in equilibrium biased to the right with' the product) + else: [x: "*"] + +- name: chemical-equation-operator + tag: chemical-equation-operator + match: "." + replace: + - bookmark: "@id" + - x: "text()" + +- name: none + tag: none + match: "../../*[self::m:chemical-formula or self::m:chemical-nuclide]" + replace: + - t: "" # don't say anything + +- name: ignore-intent-wrapper + tag: intent-wrapper + match: "." + replace: + - x: "*" \ No newline at end of file From 4c9fc2b4ef38b80648651019161af40bf06237fb Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Sat, 25 Apr 2026 09:56:56 -0400 Subject: [PATCH 03/53] minor corrections to definitions.yaml --- Rules/Languages/fr/definitions.yaml | 68 ++++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 10 deletions(-) diff --git a/Rules/Languages/fr/definitions.yaml b/Rules/Languages/fr/definitions.yaml index 8feea1791..8be98268f 100644 --- a/Rules/Languages/fr/definitions.yaml +++ b/Rules/Languages/fr/definitions.yaml @@ -4,6 +4,15 @@ # French overrides for language-dependent speech definitions. Anything omitted # here continues to fall back to the shared English defaults. +# If an "intent" is used, the 'terse:medium:verbose' speech for the intent name is given here for a prefix||infix||postfix||function fixity +# If only one ":" is used, the first part is used for 'terse' and the second part is used for 'medium' and 'verbose' +# If no ":"s are used, the same speech is used for all forms +# If bracketing words make sense, they are separated with ";"s +# Intent mappings must specify whether they are "prefix", "infix", "postfix", or "function" with an "=" sign +# If there are multiple fixities (e.g., see transpose), they are separated with "||" +# for readability, spaces can be used around any of the delimiter characters +# Note: if there are multiple fixities, the first one is used if the fixity is not given in the intent + - IntentMappings: { "indexed-by": "infix= ; indice; fin d'indice: fin d'indice: fin d'indice", "modified-variable": "silent= ", @@ -43,10 +52,12 @@ "chemistry-concentration": "function= ; concentration: concentration de: la concentration de; fin de concentration", } +# Names of functions that in terse mode don't say "of" (or it's equivalent in other languages) - TerseFunctionNames: { "divergence", "gradient", "curl" } +# These are the parts of a formula that can be navigated to - NavigationParts: { "large-op": "base; borne inférieure; borne supérieure", "mfrac": "numérateur; dénominateur", @@ -68,6 +79,8 @@ "mover": "base; borne supérieure", "munderover": "base; borne inférieure; borne supérieure", + # 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": "dans", "out": "hors de", } @@ -78,7 +91,12 @@ "n": "nano", "p": "pico", "f": "femto", "a": "atto", "z": "zepto", "y": "yocto", "r": "ronto", "q": "quecto" } +# this is a list of all units that accept SIPrefixes +# from www.bipm.org/documents/20126/41483022/SI-Brochure-9-EN.pdf +# Prefixes may be used with any of the 29 SI units with special names +# The SI prefixes can be used with several of accepted units, but not, for example, with the non-SI units of time. - SIUnits: { + # base units "A": "ampère", "cd": "candela", "K": "kelvin", "K": "kelvin", @@ -87,6 +105,7 @@ "mol": "mole", "s": "seconde", "sec": "seconde", + # derived units "Bq": "becquerel", "C": "coulomb", "°C": "degré Celsius", "℃": "degré Celsius", @@ -108,6 +127,7 @@ "W": "watt", "Wb": "weber", + # accepted (plus a few variants) that take SI prefixes "l": "litre", "L": "litre", "ℓ": "litre", "t": "tonne métrique", "Da": "dalton", @@ -117,9 +137,11 @@ "rad": "radian", "sr": "stéradian", + # others that take a prefix "a": "année", "as": "seconde d'arc", + # technically wrong, but used in practice with SI Units "b": "bit", "B": "octet", "Bd": "baud", @@ -170,6 +192,7 @@ - EnglishUnits: { "in": "pouce", "ft": "pied", + "yd": verge, "mi": "mille", "rd": "perche", "li": "chaînon", @@ -177,19 +200,19 @@ "sq in": "pouce carré", "sq. in": "pouce carré", "sq. in.": "pouce carré", "sq ft": "pied carré", "sq. ft": "pied carré", "sq. ft.": "pied carré", - "sq yd": "yard carré", "sq. yd": "yard carré", "sq. yd.": "yard carré", + "sq yd": "verge carré", "sq. yd": "verge carré", "sq. yd.": "verge carré", "sq mi": "mille carré", "sq. mi": "mille carré", "sq. mi.": "mille carré", "ac": "acre", "FBM": "board foot", "cu in": "pouce cube", "cu. in": "pouce cube", "cu. in.": "pouce cube", "cu ft": "pied cube", "cu. ft": "pied cube", "cu. ft.": "pied cube", - "cu yd": "yard cube", "cu. yd": "yard cube", "cu. yd.": "yard cube", + "cu yd": "verge cube", "cu. yd": "verge cube", "cu. yd.": "verge cube", "bbl": "baril", "BBL": "baril", "pk": "peck", "bu": "boisseau", "tsp": "cuillère à café", - "tbl": "cuillère à soupe", + "tbl": "cuillère à table", "fl dr": "dram liquide", "fl oz": "once liquide", @@ -203,7 +226,7 @@ "dr": "dram", "oz": "once", "℥": "once", "lb": "livre", - "cwt": "hundredweight", + "cwt": "quintal", "dwt": "pennyweight", "oz t": "once troy", "lb t": "livre troy", @@ -235,35 +258,59 @@ "tour par minute": "tours par minute", "pouce carré": "pouces carrés", "pied carré": "pieds carrés", - "yard carré": "yards carrés", + "yard carré": "verges carrés", "mille carré": "milles carrés", "pouce cube": "pouces cubes", "pied cube": "pieds cubes", - "yard cube": "yards cubes", + "yard cube": "verges cubes", "once liquide": "onces liquides", "cuillère à café": "cuillères à café", - "cuillère à soupe": "cuillères à soupe", + "cuillère à soupe": "cuillères à table", "degré": "degrés", "mille par heure": "milles par heure", "mille par gallon": "milles par gallon" } +# ---------------- Cardinal and Ordinal Numbers -------------------------- +# The following definitions are used to convert numbers to words +# The are mainly used for ordinals, of which there are two cases: +# 1. Regular ordinals: first, second, third, ... +# 2. Ordinals used in the denominator of fractions (e.g, one half, one third) +# When used in the denominator of fractions, a plural version might be +# used (e.g., two halves, two thirds) +# Although a lot of languages are regular after a few entries, for generality, +# the following lists should be filled out even though they are the same +# or easily derived from others in many languages (e.g, an 's' is added for plurals). +# The larger ordinal numbers (e.g, millionth) is used when there are only +# '0's after that decimal place (e.g., 23000000).:w + +# All definitions start 0, 10, 100, etc. + +# TODO: does that belong here? (vingt-et-un, trente-et-un, etc.) - NumbersOnes: [ "zéro", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize", - "dix-sept", "dix-huit", "dix-neuf" + "dix-sept", "dix-huit", "dix-neuf", + "vingt-et-un", "trente-et-un", "quarante-et-un", "cinquante-et-un", "soixante-et-un", + "soixante-et-onze", "quatre-vingt-un", "quatre-vingt-onze" ] +# TODO: does that belong here? (vingt-et-unième, trente-et-unième, etc.) - NumbersOrdinalOnes: [ "zéroième", "premier", "deuxième", "troisième", "quatrième", "cinquième", "sixième", "septième", "huitième", "neuvième", "dixième", "onzième", "douzième", "treizième", "quatorzième", "quinzième", "seizième", - "dix-septième", "dix-huitième", "dix-neuvième" + "dix-septième", "dix-huitième", "dix-neuvième", + "vingt-et-unième", "trente-et-unième", "quarante-et-unième", "cinquante-et-unième", "soixante-et-unième", + "soixante-et-onzième", "quatre-vingt-unième", "quatre-vingt-onzième" ] +# TODO: does that belong here? (vingt-et-unièmes, trente-et-unièmes, etc.) - NumbersOrdinalPluralOnes: [ "zéroièmes", "premiers", "deuxièmes", "troisièmes", "quatrièmes", "cinquièmes", "sixièmes", "septièmes", "huitièmes", "neuvièmes", "dixièmes", "onzièmes", "douzièmes", "treizièmes", "quatorzièmes", "quinzièmes", "seizièmes", - "dix-septièmes", "dix-huitièmes", "dix-neuvièmes" + "dix-septièmes", "dix-huitièmes", "dix-neuvièmes", + "vingt-et-unièmes", "trente-et-unièmes", "quarante-et-unièmes", "cinquante-et-unièmes", "soixante-et-unièmes", + "soixante-et-onzièmes", "quatre-vingt-unièmes", "quatre-vingt-onzièmes" ] - NumbersOrdinalFractionalOnes: [ @@ -274,6 +321,7 @@ "zéros", "premiers", "demis", "tiers", "quarts", "cinquièmes", "sixièmes", "septièmes", "huitièmes", "neuvièmes", "dixièmes" ] +# TODO: make a special case for belgian french (fr-BE) where soixante-dix -> septante, quatre-vingt -> octante, quatre-vingt-dix -> nonante - NumbersTens: [ "", "dix", "vingt", "trente", "quarante", "cinquante", "soixante", "soixante-dix", "quatre-vingt", "quatre-vingt-dix" ] From b80ce11d9b244ee127ea5e16fd861161b4e3941a Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Sat, 25 Apr 2026 10:05:19 -0400 Subject: [PATCH 04/53] added comment to overview.yaml --- Rules/Languages/fr/overview.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Rules/Languages/fr/overview.yaml b/Rules/Languages/fr/overview.yaml index 306b74f27..b077f447a 100644 --- a/Rules/Languages/fr/overview.yaml +++ b/Rules/Languages/fr/overview.yaml @@ -1,5 +1,18 @@ --- +# Provide an overview/outline/description of the math +# MathPlayer just tried to shorten things like "mfrac" by just saying "fraction" +# For mrow, it say up to 5 operands and just say "and n more things" for the rest +# This results in strings of varying length. Given human memory is about 7 words long, +# it would be better to aim for 7 words (maybe aim for a range of 6-10 words). +# Idea: +# Start by generating a terse form of the speech +# At every step when the strings are being joined +# a) if the #words <= 7, return the joined string +# b) otherwise, set verbosity to 'overview' and regenerate the expression and use that +# There is a balance that you want to maximize the info given, so 10 words is likely better then 3. +# That might mean that at the top level, we may want to allow the first few children to expand + - name: overview-default tag: [mfrac, fraction] match: "." From 1ee0736071f6360dce047f9effc2a2e8cce1571a Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Wed, 6 May 2026 22:05:33 -0400 Subject: [PATCH 05/53] first pass in unicode.yaml --- Rules/Languages/fr/unicode.yaml | 66 ++++++++++++++++----------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/Rules/Languages/fr/unicode.yaml b/Rules/Languages/fr/unicode.yaml index 807078568..46374ffff 100644 --- a/Rules/Languages/fr/unicode.yaml +++ b/Rules/Languages/fr/unicode.yaml @@ -42,12 +42,12 @@ then_test: if: "$Verbosity = 'Terse'" then: [t: "bang"] # 0x21 (DeepL translation) - else: [t: "factorielle"] # 0x21 (en: 'exclamation point') + else: [t: "point d'exclamation"] # 0x21 (en: 'exclamation point') else: [t: "factorielle"] # 0x21 (en: 'factorial') - - "\"": [t: "barre oblique inversée"] # 0x22 (en: 'quotation mark') + - "\"": [t: "guillemet"] # 0x22 (en: 'quotation mark') - "#": [t: "dièse"] # 0x23 (en: 'number') - - "$": [t: "dollars"] # 0x24 + - "$": [t: "dollar"] # 0x24 - "%": [t: "pourcent"] # 0x25 (en: 'percent') - "&": [t: "esperluette"] # 0x26 (en: 'ampersand') - "'": [t: "apostrophe"] # 0x27 (SRE: 'prime') @@ -71,8 +71,8 @@ - "*": # 0x2a test: if: "parent::*[name(.)='msup' or name(.)='msubsup' or name(.)='skip-super']" - then: [t: "étoile"] # 0x2a (en: 'star', DeepL translation) - else: [t: "astérisque"] # 0x2a (en: 'times') + then: [t: "astérisque"] # 0x2a (en: 'star', DeepL translation) + else: [t: "fois"] # 0x2a (en: 'times') - "+": [t: "plus"] # 0x2b (MathPlayer: 'pluce') - ",": # 0x2c # the following deals with the interaction of "," with "…" which sometimes wants the ',' to be silent @@ -86,7 +86,7 @@ # except if expression starts with '…' - "../*[1][.='…'] " then: - - T: "comma" # (en: 'comma', google translation) + - t: "virgule" # (en: 'comma') - test: if: "$Verbosity != Terse" then: [pause: short] @@ -102,7 +102,7 @@ - test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" then: [t: "barre oblique"] # 0x2f (en: 'slash', DeepL translation) - else: [t: "barre oblique"] # 0x2f (en: 'divided by') + else: [t: "divisé par"] # 0x2f (en: 'divided by') - ":": [t: "deux points"] # 0x3a (en: 'colon') - ";": [t: "point virgule"] # 0x3b (en: 'semicolon') @@ -127,19 +127,19 @@ - "[": # 0x5b - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [t: "parenthèse ouverte"] # (en: 'open bracket', DeepL translation) + then: [t: "crochet ouvrant"] # (en: 'open bracket') else: [t: "crochet gauche"] # (en: 'left bracket', MathPlayer: 'crochet ouvrant', DeepL: 'parenthèse gauche') - "\\": [t: "crochet gauche"] # 0x5c (en: 'back slash', MathPlayer: 'crochet ouvrant', DeepL: 'barre oblique arrière') - "]": # 0x5d - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [t: "parenthèse fermée"] # (en: 'close bracket', DeepL translation) + then: [t: "crochet fermant"] # (en: 'close bracket') else: [t: "crochet droit"] # (en: 'right bracket', MathPlayer: 'crochet fermant', DeepL: 'parenthèse droite') - "^": # 0x5e - test: if: "parent::m:modified-variable or parent::m:mover" - then: [t: "chapeau"] # (en: 'hat', DeepL translation) - else: [t: "circonflexe"] # (en: 'caret') + then: [t: "accent circonflexe"] # (en: 'hat') + else: [t: "accent circonflexe"] # (en: 'caret') - "_": [t: "tiret bas"] # 0x5f (en: 'under bar') - "`": [t: "accent grave"] # 0x60 (en: 'grave') - "{": # 0x7b @@ -162,19 +162,19 @@ - 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: "divise"] # (en: 'divides', DeepL translation) - else: [t: "barre verticale"] # (en: 'vertical line') + else: [t: "ligne verticale"] # (en: 'vertical line') - else_if: "not(preceding-sibling::*) or not(following-sibling::*)" then: [t: "ligne verticale"] # (en: 'vertical line', DeepL translation) - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" then: [t: "tel que"] # (en: 'such that', DeepL translation) - else_if: "$ClearSpeak_VerticalLine = 'Given' or $DefaultToGiven" then: [t: "donné"] # (en: 'given', DeepL translation) - - else: [t: "barre verticale"] # (en: 'divides') + - else: [t: "divise"] # (en: 'divides') - "}": # 0x7d - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [t: "accolade"] # (en: 'close brace', DeepL translation) + then: [t: "accolade fermée"] # (en: 'close brace') else: [t: "accolade droite"] # (en: 'right brace', MathPlayer: 'accolade fermante') - "~": [t: "tilde"] # 0x7e @@ -185,7 +185,7 @@ then: [t: "vide"] # want to say something for fraction (etc) with empty child (en: 'empty', DeepL translation) else: [t: ""] - - "¬": [t: "négation"] # 0xac (en: 'not') + - "¬": [t: "non"] # 0xac (en: 'not') - "°": [t: "degrés"] # 0xb0 (en: 'degrees') - "±": [t: "plus ou moins"] # 0xb1 (en: 'plus or minus') - "´": [t: "accent aigu"] # 0xb4 (en: 'acute') @@ -193,7 +193,7 @@ - test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')] or not($SpeechStyle = 'ClearSpeak' and $ClearSpeak_MultSymbolDot = 'Auto')" then: [t: "point"] # (en: 'dot', DeepL translation) - else: [t: "point médian"] # (en: 'times') + else: [t: "fois"] # (en: 'times') - "×": # 0xd7 - test: if: "$SpeechStyle = 'ClearSpeak'" @@ -205,7 +205,7 @@ else: [t: "multiplié par"] # (en: 'cross') else_test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" - then: [t: "croix"] # (en: 'cross', DeepL translation) + then: [t: "multiplié par"] # (en: 'cross', DeepL translation) else: [t: "multiplié par"] # (en: 'times') - "÷": [t: "divisé par"] # 0xf7 (en: 'divided by') @@ -255,7 +255,7 @@ - "ξ": [t: "xi"] # 0x3be (en: 'zai', DeepL: 'zai') - "ο": [t: "omicron"] # 0x3bf - "π": [t: "pi"] # 0x3c0 - - "ρ": [t: "rho"] # 0x3c1 + - "ρ": [t: "rhô"] # 0x3c1 - "ς": [t: "sigma final"] # 0x3c2 (en: 'final sigma') - "σ": [t: "sigma"] # 0x3c3 - "τ": [t: "tau"] # 0x3c4 @@ -264,13 +264,13 @@ - "χ": [t: "chi"] # 0x3c7 - "ψ": [t: "psi"] # 0x3c8 - "ω": [t: "oméga"] # 0x3c9 (en: 'omega') - - "ϕ": [t: "phi droit"] # 0x3d5 (en: 'phi', DeepL: 'phi') - - "ϖ": [t: "pi cursif"] # 0x3d6 (en: 'pi', DeepL: 'pi') + - "ϕ": [t: "phi"] # 0x3d5 (en: 'phi', DeepL: 'phi') + - "ϖ": [t: "pi"] # 0x3d6 (en: 'pi', DeepL: 'pi') - "ϵ": [t: "epsilon"] # 0x3f5 - - "϶": [t: "epsilon lunaire réfléchi"] # 0x3f6 (en: 'reversed epsilon') + - "϶": [t: "epsilon inversé"] # 0x3f6 (en: 'reversed epsilon') - - "–": [t: "trait d'union insécable"] # 0x2013 (en: 'en dash') - - "—": [t: "tiret numérique"] # 0x2014 (en: 'em dash') + - "–": [t: "tirait demi-cadratin"] # 0x2013 (en: 'en dash') + - "—": [t: "tiret cadratin"] # 0x2014 (en: 'em dash') - "―": [t: "barre horizontalle"] # 0x2015 (en: 'horizontal bar') - "‖": [t: "double ligne verticale"] # 0x2016 (en: 'double vertical line') - "…": # 0x2026 @@ -298,13 +298,13 @@ preceding-sibling::*[1][IsInDefinition(., 'GeometryShapes')] or (@data-changed='added' and ancestor-or-self::*[contains(@data-intent-property, ':literal:')]) )" - then: [t: "de"] # (en: 'of', DeepL translation) + then: [t: "de"] # (en: 'of', DeepL translation) - "⁢": [t: ""] # 0x2062 - "⁣": [t: ""] # 0x2063 - - "⁤": [t: "plus"] # 0x2064 (en: 'and', DeepL: 'et') - - "′": [t: "prime"] # 0x2032 - - "″": [t: "double prime"] # 0x2033 - - "‴": [t: "triple prime"] # 0x2034 + - "⁤": [t: "et"] # 0x2064 (en: 'and', DeepL: 'et') + - "′": [t: "prime"] # 0x2032 + - "″": [t: "double prime"] # 0x2033 + - "‴": [t: "triple prime"] # 0x2034 - "ℂℕℚℝℤ": # here we rely on this running through the table again to speak "cap xxx" - t: "triple prime" # (en: 'double-struck') @@ -313,7 +313,7 @@ - "℃": [t: "degré celsius"] # 0x2103 (en: 'degrees celsius', DeepL: 'degrés celsius') - "℉": [t: "degré fahrenheit"] # 0x2109 (en: 'degrees fahrenheit', DeepL: 'degrés fahrenheit') - "ℋℛℓ": # 0x210b - - t: "degré fahrenheit" # (en: 'script', DeepL: 'script') + - t: "script" # (en: 'script', DeepL: 'script') - spell: "translate('.', 'ℋℛℓ', 'HRl')" - "ℎ": [t: "constante de planck"] # 0x210e (en: 'planck constant') - "ℜ": # 0x211c @@ -332,11 +332,11 @@ - "→": # 0x2192 - test: if: "ancestor::*[2][self::m:limit]" - then: [t: "approche"] # (en: 'approaches', DeepL translation) - else: [t: "flèche droite"] # (en: 'right arrow', MathPlayer: 'flèche vers la droite') + then: [t: "approches"] # (en: 'approaches', DeepL translation) + else: [t: "flèche vers la droite"] # (en: 'right arrow', MathPlayer: 'flèche vers la droite') - "↓": [t: "flèche vers le bas"] # 0x2193 (en: 'downwards arrow') - - "⇒": [t: "double flèche vers la droite"] # 0x21d2 (en: 'rightwards double arrow', SRE: 'double flèche droite') + - "⇒": [t: "double flèche vers la droite"] # 0x21d2 (en: 'rightwards double arrow', SRE: 'double flèche droite') - "∀": [t: "pour tous"] # 0x2200 (en: 'for all') - "∂": # 0x2202 - test: @@ -350,7 +350,7 @@ - test: if: "$Verbosity!='Terse'" then: [t: "le"] # (en: 'the', DeepL translation) - - t: "incrément" # (en: 'laplacian of') + - t: "laplacien de" # (en: 'laplacian of') - "∈": # 0x2208 - test: if: "$SpeechStyle != 'ClearSpeak'" From 788a748f5ee3a854d1e817f1463fdfb166dbfc01 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Fri, 8 May 2026 11:02:11 -0400 Subject: [PATCH 06/53] modifications to unicode.yaml --- Rules/Languages/fr/unicode.yaml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Rules/Languages/fr/unicode.yaml b/Rules/Languages/fr/unicode.yaml index 46374ffff..c940095bc 100644 --- a/Rules/Languages/fr/unicode.yaml +++ b/Rules/Languages/fr/unicode.yaml @@ -438,12 +438,12 @@ - "∑": [t: "sommation"] # 0x2211 (en: 'sum') - "−": [t: "moins"] # 0x2212 (en: 'minus') - "∓": [t: "moins ou plus"] # 0x2213 (en: 'minus or plus', MathPlayer: 'moins-ou-plus') - - "∗": [t: "opérateur astérisque"] # 0x2217 (en: 'times') - - "∘": [t: "opérateur rond"] # 0x2218 (en: 'composed with') + - "∗": [t: "fois"] # 0x2217 (en: 'times') + - "∘": [t: "composé avec"] # 0x2218 (en: 'composed with') - "√": # 0x221a - test: if: "$Verbosity!='Terse'" - then: [t: "le"] # (en: 'the', DeepL translation) + then: [t: "la"] # (en: 'the', DeepL translation) - t: "racine carrée" # (en: 'square root of') - "∝": # 0x221d - test: @@ -468,8 +468,8 @@ - "∦": # 0x2226 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "non parallèle à" # (en: 'not parallel to') + then: [t: "n'est"] # (en: 'is', DeepL translation) + - t: "pas parallèle à" # (en: 'not parallel to') - "∧": [t: "et logique"] # 0x2227 (en: 'and') - "∨": [t: "ou logique"] # 0x2228 (en: 'or') - "∩": [t: "intersection"] # 0x2229 @@ -484,8 +484,8 @@ then: [t: "est"] # (en: 'is', DeepL translation) - t: "rapport" # (en: 'to') - "∷": [t: "proportion"] # 0x2237 (en: 'as') - - "∼": [t: "opérateur tilde"] # 0x223c (en: 'varies with') - - "∽": [t: "opérateur tilde renversé"] # 0x223d (en: 'reversed tilde') + - "∼": [t: "varie avec"] # 0x223c (en: 'varies with') + - "∽": [t: "tilde renversé"] # 0x223d (en: 'reversed tilde') - "∾": # 0x223e - test: if: "$Verbosity!='Terse'" @@ -495,7 +495,7 @@ - "≠": # 0x2260 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [t: "n'est"] # (en: 'is', DeepL translation) - t: "pas égal à" # (en: 'not equal to') - "≡": # 0x2261 - test: @@ -512,8 +512,8 @@ if: "$Verbosity!='Terse'" then: [t: "est"] # (en: 'is', DeepL translation) - t: "plus grand ou égal à" # (en: 'greater than or equal to') - - "≦": [t: "plus petit que par dessus égal à"] # 0x2266 (en: 'less than over equal to', MathPlayer: 'plus petit que par-dessus égal à', DeepL: 'inférieur à supérieur à égal à') - - "≧": [t: "plus grand que par dessus égal à"] # 0x2267 (en: 'greater than over equal to', MathPlayer: 'plus grand que par-dessus égal à', DeepL: 'supérieur à égal à') + - "≦": [t: "plus petit que par-dessus égal à"] # 0x2266 (en: 'less than over equal to', MathPlayer: 'plus petit que par-dessus égal à', DeepL: 'inférieur à supérieur à égal à') + - "≧": [t: "plus grand que par-dessus égal à"] # 0x2267 (en: 'greater than over equal to', MathPlayer: 'plus grand que par-dessus égal à', DeepL: 'supérieur à égal à') - "≺": [t: "précède"] # 0x227a (en: 'precedes') - "≻": [t: "suit"] # 0x227b (en: 'succeeds') - "⊂": # 0x2282 @@ -529,12 +529,12 @@ - "⊄": # 0x2284 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [t: "n'est"] # (en: 'is', DeepL translation) - t: "pas un sous-ensemble de" # (en: 'not a subset of', SRE: 'pas un sous ensemble de') - "⊅": # 0x2285 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [t: "n'est"] # (en: 'is', DeepL translation) - t: "pas un sur ensemble de" # (en: 'not a superset of', MathPlayer: 'pas un sur-ensemble de', DeepL: 'n'est pas un super-ensemble de') - "⊆": # 0x2286 - test: From fb34d78ee9a0977ef6663d0e4172205f74547bbf Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Fri, 8 May 2026 12:44:58 -0400 Subject: [PATCH 07/53] started test adjustments for functions.rs --- Rules/Languages/fr/definitions.yaml | 2 +- tests/Languages/fr/SimpleSpeak/functions.rs | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Rules/Languages/fr/definitions.yaml b/Rules/Languages/fr/definitions.yaml index 8be98268f..2f0584875 100644 --- a/Rules/Languages/fr/definitions.yaml +++ b/Rules/Languages/fr/definitions.yaml @@ -30,7 +30,7 @@ "lim-inf": "prefix=lim inf quand: la limite inférieure quand: la limite inférieure quand", "logarithm-with-base": "prefix=log en base: le log en base: le log en base", "natural-logarithm": "function=l n: logarithme naturel: logarithme naturel", - "minus": "infix=moins || prefix=négatif", + "minus": "infix=moins || prefix=moins", "plus": "infix=plus || prefix=positif", "real-part": "function=la partie réelle", diff --git a/tests/Languages/fr/SimpleSpeak/functions.rs b/tests/Languages/fr/SimpleSpeak/functions.rs index a2c821b05..fb48592c8 100644 --- a/tests/Languages/fr/SimpleSpeak/functions.rs +++ b/tests/Languages/fr/SimpleSpeak/functions.rs @@ -17,7 +17,7 @@ fn trig_names() -> Result<()> { cscϕ+ cotφ "; - test("fr", "SimpleSpeak", expr, "sinus de x plus cosinus de y plus tangente de z plus sécante de alpha, plus cosécante de phi droit, plus cotangente de phi")?; + test("fr", "SimpleSpeak", expr, "sinus de x plus cosinus de y plus tangente de z plus sécante de alpha, plus cosécante de phi, plus cotangente de phi")?; Ok(()) } @@ -32,7 +32,7 @@ fn hyperbolic_trig_names() -> Result<()> { cschϕ+ cothφ "; - test("fr", "SimpleSpeak", expr, "sinus hyperbolique de x, plus cosinus hyperbolique de y, plus tangente hyperbolique de z, plus, sécante hyperbolique de alpha, plus, cosécante hyperbolique de phi droit; plus, cotangente hyperbolique de phi")?; + test("fr", "SimpleSpeak", expr, "sinus hyperbolique de x, plus cosinus hyperbolique de y, plus tangente hyperbolique de z, plus, sécante hyperbolique de alpha, plus, cosécante hyperbolique de phi, plus, cotangente hyperbolique de phi")?; Ok(()) } @@ -261,7 +261,7 @@ fn no_times_sqrt() -> Result<()> { 2 ) "; - test("fr", "SimpleSpeak", expr, "2 plus négatif 2")?; + test("fr", "SimpleSpeak", expr, "2 plus moins 2")?; Ok(()) } @@ -275,7 +275,7 @@ fn no_times_sqrt() -> Result<()> { ) +1 "; - test("fr", "SimpleSpeak", expr, "négatif 2 x, plus 1")?; + test("fr", "SimpleSpeak", expr, "moins 2 x, plus 1")?; Ok(()) } @@ -322,7 +322,7 @@ fn no_times_sqrt() -> Result<()> { (c,d) ) "; - test("fr", "SimpleSpeak", expr, "open interval de c comma, d")?; + test("fr", "SimpleSpeak", expr, "l'interval ouvert de c à d")?; Ok(()) } From 70d9289a13dd958bbd412a8006944bacb744d7a7 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Mon, 11 May 2026 17:27:51 -0400 Subject: [PATCH 08/53] added ClearSpeak_Rules.yaml --- Rules/Languages/fr/ClearSpeak_Rules.yaml | 766 +++++++++++++++++++++++ 1 file changed, 766 insertions(+) create mode 100644 Rules/Languages/fr/ClearSpeak_Rules.yaml diff --git a/Rules/Languages/fr/ClearSpeak_Rules.yaml b/Rules/Languages/fr/ClearSpeak_Rules.yaml new file mode 100644 index 000000000..133fce420 --- /dev/null +++ b/Rules/Languages/fr/ClearSpeak_Rules.yaml @@ -0,0 +1,766 @@ +--- +- name: pause + tag: "!*" + match: "not(self::m:math) and not($MatchingPause) and @data-intent-property[contains(., ':pause')]" + replace: + - with: + variables: [MatchingPause: "true()"] + replace: + - test: + - if: "contains(@data-intent-property, ':pause-long')" + then: [pause: long] + - else_if: "contains(@data-intent-property, ':pause-short')" + then: [pause: short] + else: [pause: medium] + - x: "." + +- name: intent-literal-silent + tag: [mi, mo, mn] + match: "contains(@data-intent-property, ':silent:')" + # say nothing + replace: [] + +# handling of negative numbers that come from 'intent' is hard -- we do something that is close to right here +- name: intent-literal-negative-number + tag: mn + match: "starts-with(text(), '-')" + replace: + - t: "moins" # phrase(10 'minus' 4 equals 6) + - x: "translate(text(), '-_', '')" + +- name: default + tag: square-root + match: "." + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "la"] # phrase('the' square root of 25) + - test: + if: "$ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" + then: + - bookmark: "*[1]/@id" + - test: + if: "parent::*[self::m:minus and count(*)=1]" + then: [t: "négatif"] # phrase(minus 4 is a 'negative' number) + else: [t: "positif"] # phrase(10 is a 'positive' number) + - t: "racine carrée" # phrase(8 is the 'square root' of 64) + - test: + if: "$Verbosity!='Terse'" + then: [t: "de"] # phrase(the square root 'of' 5) + else: [pause: short] + - x: "*[1]" + - test: + - if: "$ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" + then: + - pause: short + - t: "fin de racine" # phrase(the square root of x 'end root') + - pause: medium + - else_if: "IsNode(*[1], 'simple')" + then: [pause: short] + else: [pause: long] + +- name: default + tag: root + match: "." + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "la"] # phrase(6 is 'the' square root of 36) + - test: + if: "$ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" + then: + - test: + if: "parent::*[(self::m:minus or self::m:plus) and count(*)=1]" + then: [bookmark: "parent/@id"] + - test: + if: "parent::m:minus" + then: [t: "négatif"] # phrase(minus 6 is a 'negative' number) + else: [t: "positif"] # phrase(10 is a 'positive' number) + - test: + if: "*[2][self::m:mn and not(contains(., '.'))]" + then_test: + - if: "*[2][.='2']" + then: [t: "racine carrée"] # phrase(5 is the 'square root' of 25) + - else_if: "*[2][.='3']" + then: [t: "racine cubique"] # phrase(5 is the 'cube root' of 625) + - else: [x: "ToOrdinal(*[2])", t: "racine"] # phrase(the square 'root' of 25) + else: + - test: + if: "*[2][self::m:mi][string-length(.)=1]" + then: + - x: "*[2]" + - pronounce: [text: "-ième", ipa: "jɛm", sapi5: "ieme", eloquence: "ieme"] + else: [x: "*[2]"] + - t: "racine" # phrase(the square 'root' of 36) + - test: + if: "$Verbosity!='Terse'" + then: [t: "de"] # phrase(the square root 'of' 36) + - x: "*[1]" + - test: + if: "$ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" + then: + - pause: short + - t: "fin de racine" # phrase(start the fifth root of x 'end root') + - pause: medium + else_test: + if: "IsNode(*[1], 'simple')" + then: [pause: short] + else: [pause: long] + +# The 'negative' rule interacts with the msqrt/mroot rules as those might pick off this case ("the negative square root of x") +- name: negative_and_positive + tag: [plus, minus] + match: "count(*)=1 and contains(@data-intent-property, ':prefix:')" + replace: + - test: + if: + - "*[1][self::m:square-root or self::m:root] and" + - "($ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd')" + then: [t: ""] + else: + - bookmark: "@id" + - test: + if: "self::m:minus" + then: [t: "négatif"] # phrase(minus 5 is a 'negative' number) + else: [t: "positif"] # phrase(7 is a 'positive' number) + - x: "*[1]" + +# Fraction rules +# Mixed numbers mostly "just work" because the invisible char reads as "and" and other parts read properly on their own + +# Units (e.g., meters per second) +- name: per-fraction + tag: fraction + match: + - "$ClearSpeak_Fractions='Per' or" + - "(BaseNode(*[1])[contains(@data-intent-property, ':unit') or" + - " ( self::m:mrow and count(*)=3 and" # maybe a bit paranoid checking the structure... + - " *[1][self::m:mn] and *[2][.='\u2062'] and BaseNode(*[3])[contains(@data-intent-property, ':unit')] ) ] and" + - " BaseNode(*[2])[contains(@data-intent-property, ':unit')] )" + replace: + - x: "*[1]" + - t: "par" # phrase('5 meters 'per' second) + - x: "*[2]" + +- name: common-fraction + tag: fraction + match: + - "($ClearSpeak_Fractions='Auto' or $ClearSpeak_Fractions='Ordinal' or $ClearSpeak_Fractions='EndFrac') and" + - "*[1][self::m:mn][not(contains(., $DecimalSeparators)) and ($ClearSpeak_Fractions='Ordinal' or text()<20)] and" + - "*[2][self::m:mn][not(contains(., $DecimalSeparators)) and ($ClearSpeak_Fractions='Ordinal' or (2<= text() and text()<=10))]" + variables: [IsPlural: "*[1]!=1"] + replace: + - x: "*[1]" + - x: "ToOrdinal(*[2], true(), $IsPlural)" # extra args specify fractional ordinal and whether it is plural + +- name: fraction-over-simple + tag: fraction + match: + - "($ClearSpeak_Fractions='Over' or $ClearSpeak_Fractions='FracOver' or $ClearSpeak_Fractions='OverEndFrac') or" + - "( not($ClearSpeak_Fractions='General' or $ClearSpeak_Fractions='GeneralEndFrac') and" + - " (IsNode(*[1],'simple') and IsNode(*[2],'simple')) )" # simple fraction in ClearSpeak spec + replace: + - test: + if: "$ClearSpeak_Fractions='FracOver'" + then: + - test: + if: "$Verbosity!='Terse'" + then: [ot: "la"] + - t: "fraction" # phrase(the 'fraction' with 3 over 4) + - x: "*[1]" + - t: "sur" # phrase(the fraction 3 'over' 4) + - x: "*[2]" + - test: + # very ugly!!! -- replicate nested ordinal fraction as they are an exception + if: "$ClearSpeak_Fractions='OverEndFrac' or ($ClearSpeak_Fractions='EndFrac' and not( ($ClearSpeak_Fractions='Auto' or $ClearSpeak_Fractions='Ordinal' or $ClearSpeak_Fractions='EndFrac') and *[1][*[1][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or text()<20)] and *[2][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or (2<= text() and text()<=10))] ] and *[2][*[1][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or text()<20)] and *[2][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or (2<= text() and text()<=10))] ] ) )" + then: + - pause: short + - t: "fin de fraction" # phrase(7 over 8 'end fraction') + - pause: short + +- # fraction with text or numbers followed by text in both numerator and denominator + name: fraction-over-text + tag: fraction + match: + - "not($ClearSpeak_Fractions='General' or $ClearSpeak_Fractions='GeneralEndFrac') and" + - "( " + - " ((*[1][self::m:mi or self::m:mtext][string-length(.)>1]) or " # fractions with text + - " (*[1][self::m:mrow][count(*)=3][ " + - " *[1][self::m:mn] and " + - " *[2][self::m:mo][.='⁢'] and " # invisible times + - " *[3][self::m:mi or self::m:mtext][string-length(.)>1] ]) ) and" + - " ((*[2][self::m:mi or self::m:mtext][string-length(.)>1]) or " # fractions with text + - " (*[2][self::m:mrow][count(*)=3][ " + - " *[1][self::m:mn] and " + - " *[2][self::m:mo][.='⁢'] and " # invisible times + - " *[3][self::m:mi or self::m:mtext][string-length(.)>1] ]) )" + - ")" + replace: + - x: "*[1]" + - t: "sur" # phrase(the fraction 3 'over' 4) + - x: "*[2]" + - test: + if: "$ClearSpeak_Fractions='EndFrac' or $ClearSpeak_Fractions='OverEndFrac'" + then: + - pause: short + - t: "fin de fraction" # phrase(7 over 8 'end fraction') + - pause: short + +- name: default + tag: fraction + match: "." + replace: + - ot: "la" # phrase(5 is 'the' square root of 25) + - t: "fraction avec numérateur" # phrase(the 'fraction with numerator' 6) + - test: + if: "not(IsNode(*[1], 'simple'))" + then: [pause: medium] + - x: "*[1]" + - pause: medium + - t: "et dénominateur" # phrase(the fraction with numerator 5 'and denominator' 8) + - x: "*[2]" + - pause: long + - test: + if: "$ClearSpeak_Fractions='EndFrac' or $ClearSpeak_Fractions='GeneralEndFrac'" + then: + - pause: short + - t: "fin de fraction" # phrase(the fraction with 3 over 4 'end fraction') + - pause: short + +# rules for functions raised to a power +# these could have been written on 'mrow' but putting them on msup seems more specific +# to see if it is a function, we look right to see if the following sibling is apply-function +- name: ClearSpeak-function-inverse + tag: inverse-function + match: "." + replace: + - test: + if: "$ClearSpeak_Trig = 'TrigInverse'" + then: [x: "*[1]", bookmark: "*[2]/@id", t: "l'inverse"] # phrase(8 over 5 is the 'inverse' of 5 over 8) + else_test: + if: "$ClearSpeak_Trig = 'ArcTrig'" + then: [bookmark: "*[2]/@id", t: "arc", x: "*[1]"] # phrase(the 'arc' of a circle) + else: [bookmark: "*[2]/@id", t: "l'inverse", x: "*[1]"] # default/Auto # phrase(8 over 5 is the 'inverse' of 5 over 8) + +- name: function-squared-or-cubed + tag: power + match: + - "*[2][self::m:mn][.='2' or .='3'] and" + - "following-sibling::*[1][self::m:mo][.='⁡']" #invisible function apply + replace: + - x: "*[1]" + - bookmark: "*[2]/@id" + - test: + if: "*[2][.='2']" + then: [t: "au carré"] # phrase(25 equals 5 'squared') + else: [t: "au cube"] # phrase(625 equals 5 'cubed') + +- name: function-power + tag: power + match: + - "following-sibling::*[1][self::m:mo][.='⁡']" #invisible function apply + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "la"] # phrase('the' third power of 2) + - bookmark: "*[2]/@id" + - test: + if: "*[2][self::m:mn][not(contains(., '.'))]" + then: [x: "ToOrdinal(*[2])"] + else: [x: "*[2]"] + - t: "puissance de" # phrase(the third 'power of' 6) + - pause: short + - x: "*[1]" + +- name: AfterPower-nested + tag: power + match: # directly a superscript or an mrow that contains a superscript + - "$ClearSpeak_Exponents = 'AfterPower' and" + - "*[2][self::m:power or self::m:power or self::m:mrow[m:power]]" + replace: + - x: "*[1]" + - t: "à la puissance de" # phrase(5 'raised to the exponent' x plus 1) + - pause: short + - x: "*[2]" + - pause: short + - t: "fin de l'exposant" # phrase(5 raised to the exponent x plus 1 'end exponent') + +- name: AfterPower-default + tag: power + match: "$ClearSpeak_Exponents = 'AfterPower'" + replace: + - x: "*[1]" + - t: "à la puissance de" # phrase(x is 'raised to the power' 4) + - x: "*[2]" + - pause: short + +- name: squared + tag: power + match: "*[2][self::m:mn][.='2'] and $ClearSpeak_Exponents = 'Auto'" + replace: + - x: "*[1]" + - bookmark: "*[2]/@id" + - t: "au carré" # phrase(7 'squared' equals 49) + +- name: cubed + tag: power + match: "*[2][self::m:mn][.='3'] and $ClearSpeak_Exponents = 'Auto'" + replace: + - x: "*[1]" + - bookmark: "*[2]/@id" + - t: "au cube" # phrase(5 'cubed' equals 125) + +- name: simple-integer + tag: power + match: "*[2][self::m:mn][not(contains(., '.'))]" + replace: + - x: "*[1]" + - t: "à la" # phrase(2 raised 'to the' power 7) + - test: + if: "*[2][.>0]" + then: [x: "ToOrdinal(*[2])"] + else: [x: "*[2]"] + - test: + if: "$ClearSpeak_Exponents != 'Ordinal'" + then: [t: "puissance"] # phrase(2 raised to the 'power' 7) + +- name: simple-negative-integer + tag: power + match: + - "*[2][self::m:minus and count(*)=1 and " + - " *[1][self::m:mn][not(contains(., '.'))]" + - " ]" + replace: + - x: "*[1]" + - t: "à la" # phrase(2 raised 'to the' power 7) + - x: "*[2]" + - test: + if: "$ClearSpeak_Exponents != 'Ordinal'" + then: [t: "puissance"] # phrase(2 raised to the 'power' 7) + +- name: simple-var + tag: power + match: "*[2][self::m:mi][string-length(.)=1]" + replace: + - x: "*[1]" + - t: "à la" # phrase(3 raised 'to the' power 7) + - x: "*[2]" + - pronounce: [text: "-ième", ipa: "jɛm", sapi5: "ieme", eloquence: "ieme"] + - test: + if: "$ClearSpeak_Exponents != 'Ordinal'" + then: [t: "puissance"] # phrase(2 raised to the 'power' 7) + +# match nested exponent, where the nested exponent is has the power 2 or 3 (n below) +# [xxx]^n, - [xxx]^n, [xxx] var^n, -[xxx] var^n +# where xxx is a number or common fraction (or a var in the first two forms) +# short of creating a specialized built-in function, I don't see a way to eliminate a lot of repetition in the matches +# also really bad is that the test of a common fraction is replicated here (four times!) +# Note: the ClearSpeak doc doesn't say these only apply when the pref is "Auto", +# but the test cases all fall back to "raised to the exponent" when not "Auto" +# If these are allowed for non-Auto values, then you end up with "...power power...". +- # [xxx]^n + name: nested-squared-or-cubed + tag: power + match: + - "$ClearSpeak_Exponents = 'Auto' and" + - "*[2][self::m:power][" + - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3 + # base is mn, mi, common fraction ([xxx] case) + - " *[1][self::m:mn or self::m:mi or " + - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" + - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" + - " ]" + - " ]" + replace: + - x: "*[1]" + - t: "élevé à la" # phrase(x 'raised to the' second power) + - x: "*[2]" + - t: "puissance" # phrase(x raised to the second 'power') + +- # - [xxx]^n + name: nested-negative-squared-or-cubed + tag: power + match: + - "$ClearSpeak_Exponents = 'Auto' and" + - " *[2][self::m:minus and count(*)=1 and " + - " *[1]/*[1][self::m:power][" + - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3" + # base is mn, mi, common fraction ([xxx] case) + - " *[1][self::m:mn or self::m:mi or " + - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" + - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" + - " ]" + - " ]" + - " ]" + replace: + - x: "*[1]" + - t: "élevé à la" # phrase(x 'raised to the' second power) + - x: "*[2]" + - t: "puissance" # phrase(x raised to the second 'power') + +- # [xxx] var^n + name: nested-var-squared-or-cubed + tag: power + match: + - "$ClearSpeak_Exponents = 'Auto' and" + - " *[2][self::m:mrow][count(*)=3][ " + - " *[3][self::m:power][" + - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3 + - " *[1][self::m:mi]" + - " ] and " + - " *[2][self::m:mo][.='⁢'] and " # invisible times + # base is mn, or common fraction ([xxx] case) + - " *[1][self::m:mn or " + - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" + - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" + - " ]" + - " ]" + replace: + - x: "*[1]" + - t: "élevé à la" # phrase(x 'raised to the' second power) + - x: "*[2]" + - t: "puissance" # phrase(x raised to the second 'power') + +- # -[xxx] var^n + name: nested-negative-var-squared-or-cubed + tag: power + match: + - "$ClearSpeak_Exponents = 'Auto' and" + - " *[2][self::m:mrow][count(*)=3][ " + - " *[3][self::m:power][" + - " *[2][self::m:mn][.='2' or .='3'] and " # exp is 2 or 3 + - " *[1][self::m:mi]" + - " ] and " + - " *[2][self::m:mo][.='⁢'] and " # invisible times + - " *[1][self::m:minus and count(*)=1 and " + # base is mn, or common fraction ([xxx] case) + - " *[1][self::m:mn or " + - " self::m:fraction[*[1][self::m:mn][not(contains(., '.')) and text()<20] and" + - " *[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]]" + - " ]" + - " ]" + - " ]" + replace: + - x: "*[1]" + - t: "élevé à la" # phrase(x 'raised to the' second power) + - x: "*[2]" + - t: "puissance" # phrase(x raised to the second 'power') + +- name: default-exponent-power + tag: power + match: # directly a superscript or an mrow that contains a superscript + - "*[2][self::m:power or self::m:power or self::m:mrow[m:power]]" + replace: + - x: "*[1]" + - t: "élevé à l'exposant" # phrase(x is 'raised to the exponent') + - pause: short + - x: "*[2]" + - pause: short + - t: "fin de l'exposant" # phrase(and now 'end exponent' has been reached) + +- name: default + tag: power + match: "." + replace: + - x: "*[1]" + - t: "élevé à la" # phrase(x 'raised to the' second power) + - x: "*[2]" + - t: "puissance" # phrase(x raised to the second 'power') + +# +# Some rules on mrows +# +- # the inference rules lump absolute value and cardinality together, so those rules are implemented here + name: ClearSpeak-absolute-value + tag: absolute-value + match: "." + variables: [WordToSay: "IfThenElse($ClearSpeak_AbsoluteValue = 'Cardinality', 'cardinality', 'absolute value')"] + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "la"] # phrase('the' absolute value of 25) + - x: "$WordToSay" + - t: "de" # phrase(the absolute value 'of' 25) + - x: "*[1]" + - test: + if: "$ClearSpeak_AbsoluteValue = 'AbsEnd'" + then: + - pause: short + - t: "fin" # phrase('end' absolute value) + - x: "$WordToSay" + - pause: short + +- name: set + tag: set + match: "." + replace: + - test: + - if: "count(*)=0" + then: [t: "l'ensemble vide"] # phrase('the empty set') + - else_if: "count(*)=2" + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "l'"] # phrase('the' empty set) + - t: "ensemble vide" # phrase(the 'empty set') + - else_if: "count(*[1]/*)=3 and *[1]/*[2][self::m:mo][.=':' or .='|' or .='∣']" + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "l'"] # phrase('the' set of all integers) + - t: "ensemble de" # phrase(this is a 'set of' numbers) + - test: + if: "$ClearSpeak_Sets != 'woAll'" + then: [t: "tous"] # phrase(the set of 'all' integers) + - x: "*[1]/*[1]" + - t: "tel que" # phrase(the set S 'such that' x is less than y) + - x: "*[1]/*[3]" + else: + - test: + if: "$ClearSpeak_Sets != 'SilentBracket'" + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "l'"] # phrase('the' set of integers) + - t: "ensemble" # phrase(this is a 'set' of integers) + - x: "*[1]" + +- # intervals are controlled by a ClearSpeak Preference -- parens/brackets don't have to match, so we avoid IsBracketed + # alternatively, we could have four (or ten) rules, but there is a lot of duplication if we do that + # this one rule handles all ten cases listed as part $ClearSpeak_Paren = 'Interval' + # note that *[2] is an mrow with X, ",", Y, so getting X or Y is a double index + name: ClearSpeak-intervals # avoid overriding with default "intervals" name + variables: + - is_intervals_start_infinity: "*[1][self::m:minus and count(*)=1 and *[1][.='∞']]" + - is_intervals_end_infinity: "*[2][.='∞'or (self::m:plus and count(*)=1 and *[1][.='∞'])]" + tag: [open-interval, open-closed-interval, closed-interval, closed-open-interval] + match: "." + replace: + - t: "l'invervalle de" # phrase('the interval from' a to b) + - x: "*[1]" + - t: "à" # phrase(the interval from a 'to' b) + - x: "*[2]" + - pause: short + - test: + if: "not($is_intervals_start_infinity)" + then: + - test: + if: "starts-with(name(.), 'open')" + then: [t: "sans"] # phrase(the interval from a to b 'not' including b) + - t: "inclure" # phrase(the interval from a to b not 'including' b) + - x: "*[1]" + # logic to deal with [not] arg #1 + - test: + if: "not($is_intervals_start_infinity or $is_intervals_end_infinity)" + then_test: + - if: "name(.)='open-interval'" + then: [t: "ou"] # phrase(the interval including a 'or' b ) + - else_if: "name(.)='closed-interval'" + then: [t: "et"] # phrase(the interval including a 'and' b) + else: [t: "mais"] # phrase(the interval including a 'but' not b) + # some ugly logic dealing with connectives: or, but, but, and (cleaner to be part of next clause?) + - test: + if: "not($is_intervals_end_infinity)" + then: + - test: + # there is some asymmetry to the test because of the and/or/but logic above + if: "not( name(.)='open-interval' or name(.)='closed-interval' ) or $is_intervals_start_infinity" + then: + - test: + if: "name(.) = 'open-interval' or name(.) = 'closed-open-interval'" + then: [t: "n'"] # phrase(the interval 'not' including a) + - t: "incluant pas" # phrase(the interval not 'including' a) + - x: "*[2]" + + # onto the [not] [including]... part +- name: binomial-frac-vector + tag: matrix + match: + - "$ClearSpeak_Matrix = 'Combinatorics' and " + - "count(*[1]/*)=1 and count(*)=2" + replace: + - x: "*[1]/*[1]/*" # mtable/mtr/mtd + - t: "parmi" # phrase(the binomial coefficient n 'choose' m) + - x: "*[2]/*[1]/*" + +- name: ClearSpeak-default + tag: [mtr, mlabeledtr] + match: "parent::m:matrix or parent::m:determinant" + variables: [NextLineIsContinuedRow: "following-sibling::*[1][contains(@data-intent-property, ':continued-row:')]"] + replace: + - pause: medium + - t: "rangée" # phrase(the first 'row' of a matrix) + - x: "count(preceding-sibling::*)+1" + - test: + if: ".[self::m:mlabeledtr]" + then: + - t: "avec l'étiquette" # phrase(the line 'with label' first equation) + - x: "*[1]/*" + - pause: short + - pause: medium + - test: + if: ".[self::m:mlabeledtr]" + then: [x: "*[position()>1]"] + else: [x: "*"] + +- # handle both log and ln + name: ClearSpeak-log + tag: mi + match: ".='log' or .='ln'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity!='Terse' and not(IsNode(following-sibling::*[2],'simple'))" + then: [t: "la"] # phrase('the' square root of 25) + - test: + - if: ".='log'" + then: [t: "logarithme"] + - else_if: "$ClearSpeak_Log = 'LnAsNaturalLog'" + then: [t: "logarithme naturel"] # phrase(the 'natural log' of x) + else: [spell: "'ln'"] + +- name: ClearSpeak-multi-line + tag: [piecewise, system-of-equations, lines] # these are ignored in favor of the ClearSpeak prefs + match: "." + variables: + # Wikipedia has some tables where all the entire first column is empty (e.g., https://en.wikipedia.org/wiki/List_of_trigonometric_identities) + - LineCount: "count(*[not(contains(@data-intent-property, ':continued-row:'))])" + - NextLineIsContinuedRow: "false()" # default value + - IsColumnSilent: true() + replace: + - test: + - if: "$ClearSpeak_MultiLineOverview = 'Auto'" + then: + - x: "$LineCount" + - test: + - if: "($ClearSpeak_MultiLineLabel = 'Auto' and self::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case'" + then: [t: "cas"] # phrase(this is the first 'case' of three cases) + - else_if: "$ClearSpeak_MultiLineLabel = 'Auto' or $ClearSpeak_MultiLineLabel = 'Line' or $ClearSpeak_MultiLineLabel = 'None'" # already dealt with Auto/Case + then: [t: "ligne"] # phrase(this is the first 'line' of three lines) + - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" + then: [t: "contrainte"] # phrase(this is the first 'constraint' of three constraints) + - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" + then: [t: "équation"] # phrase(this is the first 'equation' of three equations) + - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" + then: [t: "rangée"] # phrase(this is the first 'row' of three rows) + - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" + then: [t: "étape"] # phrase(this is the first 'step' of three steps) + # else 'None -- don't say anything' + - test: + - if: "$LineCount != 1" + then: [ct: "s"] # plural # phrase(shown by the letter 's') + - pause: short + - x: "*" + - pause: long + +- name: ClearSpeak-default-multiline + tag: [mtr, mlabeledtr] + match: "parent::m:piecewise or parent::m:system-of-equations or parent::m:lines" + variables: [NextLineIsContinuedRow: "following-sibling::*[1][contains(@data-intent-property, ':continued-row:')]"] + replace: + - test: + if: "not($LineCount=1 or $ClearSpeak_MultiLineLabel='None' or contains(@data-intent-property, ':continued-row:'))" + then: + - pause: medium + - test: + - if: "($ClearSpeak_MultiLineLabel = 'Auto' and parent::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case'" + then: [t: "cas"] # 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: "ligne"] # phrase(the straight 'line' between x and y) + - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" + then: [t: "contrainte"] # phrase(there is a 'constraint' on possible values) + - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" + then: [t: "équation"] # phrase(the 'equation' pi r squared gives the area of a circle) + - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" + then: [t: "rangée"] # phrase(the values on the top 'row' are relevant) + - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" + then: [t: "étape"] # phrase(this is a 'step' by step process) + # else 'None -- don't say anything' + - x: "count(preceding-sibling::*[not(contains(@data-intent-property, ':continued-row:'))]) + 1" + - test: + if: "self::m:mlabeledtr" + then: + - t: "avec étiquette" # phrase(the diagram is complete 'with label') + - x: "*[1]/*" + - test: + - if: "$ClearSpeak_MultiLineLabel='None'" + then: [pause: xlong] # need a very long pause with no line labels + - else_if: "not(contains(@data-intent-property, ':continued-row:'))" + then: [pause: medium] + - test: + if: "self::m:mlabeledtr" + then: [x: "*[position()>1]"] + else: [x: "*"] + +- name: ClearSpeak_Functions_None + tag: mo + match: + - ".='⁡' and $ClearSpeak_Functions = 'None' and" + - "not(preceding-sibling::*[1][IsInDefinition(., 'TrigFunctionNames')])" # Functions=None does not apply to "trig" functions + replace: + test: + if: "$ClearSpeak_ImpliedTimes = 'None'" + then: [t: ""] + else: [t: "fois"] # phrase(5 'times' 3 equals 15) + +- name: no-times + tag: mo + match: + # Note: this rule is also part of the paren rule so that the parens speak + - ".='⁢' and $ClearSpeak_ImpliedTimes = 'None'" + replace: + - t: "" + +- name: ClearSpeak-times + tag: mo + match: + # say "times" when invisible times is followed by parens or a superscript that has a base with parens or "|"s + # if we aren't sure if it is times or not, don't say anything + - ".='⁢' and (not(@data-function-guess) or $ClearSpeak_Functions = 'None') and" + - "not(ancestor-or-self::*[contains(@data-intent-property, ':literal:')]) and (" + - " $ClearSpeak_ImpliedTimes = 'MoreImpliedTimes'" + - " or " + - " following-sibling::*[1][" + - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|') or " + # most of these aren't mentioned in ClearSpeak spec, but are (I think) expected uses of "times" + - " self::m:matrix or self::m:determinant or self::m:binomial or" # followed by parens + - " self::m:square-root or self::m:msqrt or self::m:root or self::m:mroot or" + - " (self::m:msub or self::m:msubsup or" + - " ((self::m:msup or self::m:power) and not(IsNode(*[1], 'leaf') and *[2][self::m:mn and (.=2 or '.=3')]))) and " # followed by msup, etc. + - " (*[1][self::m:mrow[IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')] or " + - " self::m:matrix or self::m:determinant] or" # base has parens + - " not(IsNode(*[2], 'simple')) or " + - " (self::m:msubsup and not(IsNode(*[3], 'simple')))" + - " )" + - " ]" + # other possibility is the preceding element has parens (but not the following) + # this is not mentioned in the ClearSpeak rules or examples but seems like it should say "times". E.g, |x| y + - " or " + - " preceding-sibling::*[1][" + - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')]" # followed by parens + - " )" + replace: + - t: "fois" # phrase(5 'times' 3 equals 15) + +- name: no-say-parens + tag: mrow + match: + - "parent::*[not(self::m:msup) and not(self::m:msub) and not(self::m:msubsup) and not(self::m:power) and" + - " not(self::m:math) ] and " # rule out [x] standing alone + - "( IsBracketed(., '(', ')') or IsBracketed(., '[', ']') ) and " + - "not( $ClearSpeak_Functions = 'None' and " + - " (preceding-sibling::*[1][.='⁡'] or following-sibling::*[1][.='⁡']) ) and " + - "not( $ClearSpeak_ImpliedTimes = 'None' and " + - " (preceding-sibling::*[1][.='⁢'] or following-sibling::*[1][.='⁢']) ) and " + - "IsNode(*[2], 'simple') and" + - "not(preceding-sibling::*[1][.='\u2062' and @data-function-guess]) and" + - "not(ancestor-or-self::*[contains(@data-intent-property, ':literal:')])" + # missing clause: 'a positive fraction that is spoken as an ordinal + # (either by the Ordinal preference or by the default rules)' + replace: + - x: "*[2]" + +- include: "SharedRules/geometry.yaml" +- include: "SharedRules/linear-algebra.yaml" +- include: "SharedRules/general.yaml" +- include: "SharedRules/default.yaml" From 5889a023f9f6e5579f0dadb678acd642a54a5c4b Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Mon, 11 May 2026 18:38:06 -0400 Subject: [PATCH 09/53] fixed rules and tests for intervals --- Rules/Languages/fr/SharedRules/general.yaml | 38 +++++++++++++-------- tests/Languages/fr/SimpleSpeak/functions.rs | 16 ++++----- 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/Rules/Languages/fr/SharedRules/general.yaml b/Rules/Languages/fr/SharedRules/general.yaml index 244c0a376..d0170f7e4 100644 --- a/Rules/Languages/fr/SharedRules/general.yaml +++ b/Rules/Languages/fr/SharedRules/general.yaml @@ -118,21 +118,29 @@ match: "count(*)=2" replace: - test: - if: "$Verbosity!='Terse'" - then: - - t: "la" # phrase('the' square root of 25 equals 5) - - x: "translate(name(.),'-', ' ')" - - test: - if: "$Verbosity!='Terse'" - then: - - t: "de" # phrase(subtracting 5 'from' 10 gives 5) - - x: "*[1]" - - t: "à" # phrase(adding 6 'to' 6 equals 12) - - x: "*[2]" - else: - - x: "*[1]" - - t: "virgule" # phrase(use a 'comma' to divide large numbers or as a decimal point) - - x: "*[2]" + - if: "self::m:open-interval" + then_test: + if: "$Verbosity!='Terse'" + then: [t: "l'intervalle ouvert"] + else: [t: "intervalle ouvert"] + - else_if: "self::m:open-closed-interval" + then_test: + if: "$Verbosity!='Terse'" + then: [t: "l'intervalle ouvert fermé"] + else: [t: "intervalle ouvert fermé"] + - else_if: "self::m:closed-interval" + then_test: + if: "$Verbosity!='Terse'" + then: [t: "l'intervalle fermé"] + else: [t: "intervalle fermé"] + else_test: + if: "$Verbosity!='Terse'" + then: [t: "l'intervalle fermé ouvert"] # closed-open-interval + else: [t: "intervalle fermé ouvert"] + - t: "de" # phrase(the interval 'from' c to d) + - x: "*[1]" + - t: "à" # phrase(the interval from c 'to' d) + - x: "*[2]" - name: default-point tag: point diff --git a/tests/Languages/fr/SimpleSpeak/functions.rs b/tests/Languages/fr/SimpleSpeak/functions.rs index fb48592c8..cd7d6cbc8 100644 --- a/tests/Languages/fr/SimpleSpeak/functions.rs +++ b/tests/Languages/fr/SimpleSpeak/functions.rs @@ -312,7 +312,6 @@ fn no_times_sqrt() -> Result<()> { Ok(()) } - // Tests for the four types of intervals in SimpleSpeak // AI generated #[test] @@ -322,8 +321,9 @@ fn no_times_sqrt() -> Result<()> { (c,d) ) "; - test("fr", "SimpleSpeak", expr, "l'interval ouvert de c à d")?; - Ok(()) + test("fr", "SimpleSpeak",expr, "l'intervalle ouvert de c à d")?; + return Ok(()); + } // AI generated @@ -334,7 +334,7 @@ fn no_times_sqrt() -> Result<()> { [(]c,d) ) "; - test("fr", "SimpleSpeak", expr, "closed open interval de c comma, d")?; + test("fr", "SimpleSpeak", expr, "l'invervalle fermé ouvert fermé de c à d")?; Ok(()) } @@ -347,7 +347,7 @@ fn parens_interval_open_closed() -> Result<()> { (c,d] ] "; - test("fr", "SimpleSpeak", expr, "open closed interval de c comma, d")?; + test("fr", "SimpleSpeak", expr, "l'intervalle ouvert fermé de c à d")?; Ok(()) } @@ -360,7 +360,7 @@ fn parens_interval_closed_closed() -> Result<()> { [(]c,d] ] "; - test("fr", "SimpleSpeak", expr, "closed interval de c comma, d")?; + test("fr", "SimpleSpeak", expr, "l'intervalle fermé de c à d")?; Ok(()) } @@ -372,7 +372,7 @@ fn parens_interval_closed_closed() -> Result<()> { - ,d) ) "; - test("fr", "SimpleSpeak", expr, "open interval de négatif infini comma, d")?; + test("fr", "SimpleSpeak", expr, "l'intervalle ouvert de moins infini à d")?; Ok(()) } @@ -384,7 +384,7 @@ fn parens_interval_closed_closed() -> Result<()> { - ,d] ] "; - test("fr", "SimpleSpeak", expr, "open closed interval de négatif infini comma, d")?; + test("fr", "SimpleSpeak", expr, "l'intervalle ouvert fermé de moins infini à d")?; Ok(()) } From ba7088d1fb93649d192141c7965d31c447039ddc Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Wed, 13 May 2026 21:11:30 -0400 Subject: [PATCH 10/53] added SimpleSpeak/geometry.rs tests --- tests/Languages/fr.rs | 1 + tests/Languages/fr/SimpleSpeak/geometry.rs | 36 ++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 tests/Languages/fr/SimpleSpeak/geometry.rs diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index e63ef8f88..3c67646bb 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -2,6 +2,7 @@ mod SimpleSpeak { mod functions; + mod geometry; } mod shared; diff --git a/tests/Languages/fr/SimpleSpeak/geometry.rs b/tests/Languages/fr/SimpleSpeak/geometry.rs new file mode 100644 index 000000000..e841df9c9 --- /dev/null +++ b/tests/Languages/fr/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("fr", "SimpleSpeak", expr, "arc majuscule b majuscule c")?; + return Ok(()); + +} + +#[test] +fn ray() -> Result<()> { + let expr = " XY¯ "; + test("fr", "SimpleSpeak", expr, "segment majuscule x majuscule y")?; + return Ok(()); + +} + +#[test] +fn arc_mtext() -> Result<()> { + let expr = " BC "; + test("fr", "SimpleSpeak", expr, "arc majuscule b majuscule c")?; + return Ok(()); + +} + +#[test] +fn ray_mtext() -> Result<()> { + let expr = " XY "; + test("fr", "SimpleSpeak", expr, "demi-droite majuscule x majuscule y")?; + return Ok(()); + +} From af3ea0604c80995f7c735ad9c65610f25f5d685c Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Thu, 14 May 2026 18:02:45 -0400 Subject: [PATCH 11/53] completed changes and tests for large_ops --- Rules/Languages/fr/SharedRules/general.yaml | 21 +- Rules/Languages/fr/unicode-full.yaml | 32 +-- Rules/Languages/fr/unicode.yaml | 10 +- tests/Languages/fr.rs | 1 + tests/Languages/fr/SimpleSpeak/large_ops.rs | 235 ++++++++++++++++++++ 5 files changed, 275 insertions(+), 24 deletions(-) create mode 100644 tests/Languages/fr/SimpleSpeak/large_ops.rs diff --git a/Rules/Languages/fr/SharedRules/general.yaml b/Rules/Languages/fr/SharedRules/general.yaml index d0170f7e4..7a249a35c 100644 --- a/Rules/Languages/fr/SharedRules/general.yaml +++ b/Rules/Languages/fr/SharedRules/general.yaml @@ -161,7 +161,12 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "la"] # phrase('the' square root of 25 equals 5) + then_test: + - if: "*[1][.='∏']" + then: [t: "le"] # phrase('the' product) - masculine starting with consonant + - else_if: "*[1][contains('⋂∩⋃∪∫∬∭∮∯∰∱∲∳', .)]" # phrase('the' union/intersection/integral) - starting with vowel + then: [t: "l'"] + - else: [t: "la"] # phrase('the' sum) - feminine starting with consonant - x: "*[1]" - t: "de" # phrase(subtracting 5 'from' 10 gives 5) - x: "*[2]" @@ -178,7 +183,12 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "la"] # phrase('the' square root of 25 equals 5) + then_test: + - if: "*[1][.='∏']" + then: [t: "le"] # phrase('the' product) - masculine starting with consonant + - else_if: "*[1][contains('⋂∩⋃∪∫∬∭∮∯∰∱∲∳', .)]" # phrase('the' union/intersection/integral) - starting with vowel + then: [t: "l'"] + - else: [t: "la"] # phrase('the' sum) - feminine starting with consonant - x: "*[1]" - t: "sur" # phrase(2 'over' 3 equals two thirds) - x: "*[2]" @@ -192,7 +202,12 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "la"] # phrase('the' square root of 25 equals 5) + then_test: + - if: "*[1][.='∏']" + then: [t: "le"] # phrase('the' product) - masculine starting with consonant + - else_if: "*[1][contains('⋂∩⋃∪∫∬∭∮∯∰∱∲∳', .)]" # phrase('the' union/intersection/integral) - starting with vowel + then: [t: "l'"] + - else: [t: "la"] # phrase('the' sum) - feminine starting with consonant - x: "*[1]" - t: "de" # phrase(the square root 'of' 25 equals 5) - x: "*[2]" diff --git a/Rules/Languages/fr/unicode-full.yaml b/Rules/Languages/fr/unicode-full.yaml index 569463afa..8eb936fbd 100644 --- a/Rules/Languages/fr/unicode-full.yaml +++ b/Rules/Languages/fr/unicode-full.yaml @@ -498,7 +498,7 @@ - "ℸ": [t: "dalèt"] # 0x2138 (en: 'fourth transfinite cardinal') - "ℼ": [t: "pi ajouré"] # 0x213c (en: 'double struck pi', DeepL: 'double pi frappé') - "ℽ": [t: "gamma ajouré"] # 0x213d (en: 'double struck gamma', DeepL: 'double gamma frappé') - - "⅀": [t: "sommation de la famille ajouré"] # 0x2140 (en: 'double struck n-ary summation', DeepL: 'somme n-aire doublement frappée') + - "⅀": [t: "sommation"] # 0x2140 (en: 'double struck n-ary summation', DeepL: 'somme n-aire doublement frappée') - "⅋": [t: "perluète culbutée"] # 0x214b (en: 'turned ampersand', DeepL: 'esperluette tournée') - "⅌": [t: "symbole per"] # 0x214c (en: 'per', DeepL: 'per') - "ⅎ": [t: "minuscule f culbuté"] # 0x214e (en: 'turned F', DeepL: 'tourné f') @@ -800,17 +800,17 @@ - "∤": [t: "n'est pas un diviseur de"] # 0x2224 (en: 'does not divide') - "∧": [t: "et logique"] # 0x2227 (en: 'and') - "∨": [t: "ou logique"] # 0x2228 (en: 'or') - - "∩": [t: "intersection"] # 0x2229 - - "∪": [t: "union"] # 0x222a - - "∫": [t: "intégrale"] # 0x222b (en: 'integral') - - "∬": [t: "intégrale double"] # 0x222c (en: 'double integral') - - "∭": [t: "intégrale triple"] # 0x222d (en: 'triple integral') - - "∮": [t: "intégrale de contour"] # 0x222e (en: 'contour integral') - - "∯": [t: "intégrale de surface"] # 0x222f (en: 'surface integral') - - "∰": [t: "intégrale de volume"] # 0x2230 (en: 'volume integral') - - "∱": [t: "intégrale en sens négatif"] # 0x2231 (en: 'clockwise integral') - - "∲": [t: "intégrale de contour en sens négatif"] # 0x2232 (en: 'clockwise contour integral') - - "∳": [t: "intégrale de contour en sens positif"] # 0x2233 (en: 'anticlockwise contour integral') + - "∩": [t: "\uF8FEintersection"] # 0x2229 + - "∪": [t: "\uF8FEunion"] # 0x222a + - "∫": [t: "\uF8FEintégrale"] # 0x222b (en: 'integral') + - "∬": [t: "\uF8FEintégrale double"] # 0x222c (en: 'double integral') + - "∭": [t: "\uF8FEintégrale triple"] # 0x222d (en: 'triple integral') + - "∮": [t: "\uF8FEintégrale de contour"] # 0x222e (en: 'contour integral') + - "∯": [t: "\uF8FEintégrale de surface"] # 0x222f (en: 'surface integral') + - "∰": [t: "\uF8FEintégrale de volume"] # 0x2230 (en: 'volume integral') + - "∱": [t: "\uF8FEintégrale en sens négatif"] # 0x2231 (en: 'clockwise integral') + - "∲": [t: "\uF8FEintégrale de contour en sens négatif"] # 0x2232 (en: 'clockwise contour integral') + - "∳": [t: "\uF8FEintégrale de contour en sens positif"] # 0x2233 (en: 'anticlockwise contour integral') - "∴": [t: "par conséquent"] # 0x2234 (en: 'therefore') - "∵": [t: "parce que"] # 0x2235 (en: 'because') - "∶": # 0x2236 @@ -1181,10 +1181,10 @@ - "⊽": [t: "non ou"] # 0x22bd (en: 'nor') - "⊾": [t: "angle droit avec arc"] # 0x22be (en: 'right angle with arc') - "⊿": [t: "triangle rectangle"] # 0x22bf (en: 'right triangle') - - "⋀": [t: "et logique de la famille"] # 0x22c0 (en: 'logical and') - - "⋁": [t: "ou logique de la famille"] # 0x22c1 (en: 'logical or') - - "⋂": [t: "intersection de la famille"] # 0x22c2 (en: 'intersection') - - "⋃": [t: "réunion de la famille"] # 0x22c3 (en: 'union') + - "⋀": [t: "et logique"] # 0x22c0 (en: 'logical and') + - "⋁": [t: "ou logique"] # 0x22c1 (en: 'logical or') + - "⋂": [t: "\uF8FEintersection"] # 0x22c2 (en: 'intersection') + - "⋃": [t: "\uF8FEunion"] # 0x22c3 (en: 'union') - "⋄": [t: "opérateur losange"] # 0x22c4 (en: 'diamond operator') - "⋅": # 0x22c5 - test: diff --git a/Rules/Languages/fr/unicode.yaml b/Rules/Languages/fr/unicode.yaml index c940095bc..1d1120670 100644 --- a/Rules/Languages/fr/unicode.yaml +++ b/Rules/Languages/fr/unicode.yaml @@ -473,11 +473,11 @@ - "∧": [t: "et logique"] # 0x2227 (en: 'and') - "∨": [t: "ou logique"] # 0x2228 (en: 'or') - "∩": [t: "intersection"] # 0x2229 - - "∪": [t: "union"] # 0x222a - - "∫": [t: "intégrale"] # 0x222b (en: 'integral') - - "∬": [t: "intégrale double"] # 0x222c (en: 'double integral') - - "∭": [t: "intégrale triple"] # 0x222d (en: 'triple integral') - - "∮": [t: "intégrale de contour"] # 0x222e (en: 'contour integral') + - "∪": [t: "\uF8FEunion"] # 0x222a + - "∫": [t: "\uF8FEintégrale"] # 0x222b (en: 'integral') + - "∬": [t: "\uF8FEintégrale double"] # 0x222c (en: 'double integral') + - "∭": [t: "\uF8FEintégrale triple"] # 0x222d (en: 'triple integral') + - "∮": [t: "\uF8FEintégrale de contour"] # 0x222e (en: 'contour integral') - "∶": # 0x2236 - test: if: "$Verbosity!='Terse'" diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index 3c67646bb..36c17d88c 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -3,6 +3,7 @@ mod SimpleSpeak { mod functions; mod geometry; + mod large_ops; } mod shared; diff --git a/tests/Languages/fr/SimpleSpeak/large_ops.rs b/tests/Languages/fr/SimpleSpeak/large_ops.rs new file mode 100644 index 000000000..948c8c49f --- /dev/null +++ b/tests/Languages/fr/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("fr", "SimpleSpeak", expr, "la sommation de n est égal à 1, à 10 de n")?; + return Ok(()); + +} + +#[test] +fn sum_under() -> Result<()> { + let expr = " + + + S + + i + "; + test("fr", "SimpleSpeak", expr, "la sommation sur majuscule s de i")?; + return Ok(()); + +} +#[test] +fn sum_both_msubsup() -> Result<()> { + let expr = " + + + n=1 + 10 + + n + "; + test("fr", "SimpleSpeak", expr, "la sommation de n est égal à 1, à 10 de n")?; + return Ok(()); + +} + +#[test] +fn sum_sub() -> Result<()> { + let expr = " + + + S + + i + "; + test("fr", "SimpleSpeak", expr, "la sommation sur majuscule s de i")?; + return Ok(()); + +} + +#[test] +fn sum() -> Result<()> { + let expr = " + + ai + "; + test("fr", "SimpleSpeak", expr, "la sommation de a indice i")?; + return Ok(()); + +} + +#[test] +fn product_both() -> Result<()> { + let expr = " + + + n=1 + 10 + + n + "; + test("fr", "SimpleSpeak", expr, "le produit de n est égal à 1, à 10 de n")?; + return Ok(()); + +} + +#[test] +fn product_under() -> Result<()> { + let expr = " + + + S + + i + "; + test("fr", "SimpleSpeak", expr, "le produit sur majuscule s de i")?; + return Ok(()); + +} + +#[test] +fn product() -> Result<()> { + let expr = " + + ai + "; + test("fr", "SimpleSpeak", expr, "le produit de a indice i")?; + return Ok(()); + +} + +#[test] +fn intersection_both() -> Result<()> { + let expr = " + + + i=1 + 10 + + Si + "; + test("fr", "SimpleSpeak", expr, "l'intersection de i est égal à 1, à 10 de; majuscule s indice i")?; + return Ok(()); + +} + +#[test] +fn intersection_under() -> Result<()> { + let expr = " + + + C + + Si + "; + test("fr", "SimpleSpeak", expr, "l'intersection sur majuscule c de; majuscule s indice i")?; + return Ok(()); + +} + +#[test] +fn intersection() -> Result<()> { + let expr = " + + Si + "; + test("fr", "SimpleSpeak", expr, "l'intersection de majuscule s indice i")?; + return Ok(()); + +} + +#[test] +fn union_both() -> Result<()> { + let expr = " + + + i=1 + 10 + + Si + "; + test("fr", "SimpleSpeak", expr, "l'union de i est égal à 1, à 10 de; majuscule s indice i")?; + return Ok(()); + +} + +#[test] +fn union_under() -> Result<()> { + let expr = " + + + C + + Si + "; + test("fr", "SimpleSpeak", expr, "l'union sur majuscule c de, majuscule s indice i")?; + return Ok(()); + +} + +#[test] +fn union() -> Result<()> { + let expr = " + + Si + "; + test("fr", "SimpleSpeak", expr, "l'union de majuscule s indice i")?; + return Ok(()); + +} + +#[test] +fn integral_both() -> Result<()> { + let expr = " + + + + 0 + 1 + + f(x ) + + dx + "; + test("fr", "SimpleSpeak", expr, "l'intégrale de 0, à 1 de, f de x; d x")?; + return Ok(()); + +} + +#[test] +fn integral_under() -> Result<()> { + let expr = " + + + + + f(x ) + dx + "; + test("fr", "SimpleSpeak", expr, "l'intégrale sur les nombres réels de; f de x d x")?; + return Ok(()); + +} + +#[test] +fn integral() -> Result<()> { + let expr = " + + f(x ) + dx + "; + test("fr", "SimpleSpeak", expr, "l'intégrale de f de x d x")?; + return Ok(()); + +} \ No newline at end of file From d00ec64cc4a612640b760aa7efd188a175fac82e Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Thu, 14 May 2026 18:26:07 -0400 Subject: [PATCH 12/53] fixed grammar rule, majuscule a -> a majuscule --- Rules/Languages/fr/unicode-full.yaml | 42 +++---- Rules/Languages/fr/unicode.yaml | 20 ++-- tests/Languages/fr.rs | 1 + tests/Languages/fr/SimpleSpeak/geometry.rs | 8 +- tests/Languages/fr/SimpleSpeak/large_ops.rs | 18 +-- .../fr/SimpleSpeak/linear_algebra.rs | 111 ++++++++++++++++++ 6 files changed, 156 insertions(+), 44 deletions(-) create mode 100644 tests/Languages/fr/SimpleSpeak/linear_algebra.rs diff --git a/Rules/Languages/fr/unicode-full.yaml b/Rules/Languages/fr/unicode-full.yaml index 8eb936fbd..264e56aef 100644 --- a/Rules/Languages/fr/unicode-full.yaml +++ b/Rules/Languages/fr/unicode-full.yaml @@ -199,6 +199,10 @@ - audio: value: "beep.mp4" replace: [] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [spell: "translate('.', 'ΪΫϏ', 'ιυϗ')"] + - t: "avec dialytika" # (en: 'with dialytika', DeepL translation) - test: if: "$CapitalLetters_UseWord" then_test: @@ -206,11 +210,7 @@ then_test: if: "$Impairment = 'Blindness'" then: [t: "majuscule"] # (en: 'cap', DeepL translation) - else: [x: "$SpeechOverrides_CapitalLetters"] - - pitch: - value: "$CapitalLetters_Pitch" - replace: [spell: "translate('.', 'ΪΫϏ', 'ιυϗ')"] - - t: "avec dialytika" # (en: 'with dialytika', DeepL translation) + else: [x: "$SpeechOverrides_CapitalLetters"] - "ϊ": [t: "iota tréma"] # 0x3ca (en: 'iota with dialytika') - "ϋ": [t: "upsilon tréma"] # 0x3cb (en: 'upsilon with dialytika') - "ό": [t: "omicron accent"] # 0x3cc (en: 'omicron with tonos') @@ -235,6 +235,9 @@ - audio: value: "beep.mp4" replace: [] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [spell: "translate('.', 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', 'абвгдежзийклмнопрстуфхцчшщъыьэюя')"] - test: if: "$CapitalLetters_UseWord" then_test: @@ -242,10 +245,7 @@ then_test: if: "$Impairment = 'Blindness'" then: [t: "majuscule"] # (en: 'cap', DeepL translation) - else: [x: "$SpeechOverrides_CapitalLetters"] - - pitch: - value: "$CapitalLetters_Pitch" - replace: [spell: "translate('.', 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', 'абвгдежзийклмнопрстуфхцчшщъыьэюя')"] + else: [x: "$SpeechOverrides_CapitalLetters"] - "а": [t: "a"] # 0x430 (DeepL: 'а') - "б": [t: "bé"] # 0x431 (en: 'be', DeepL: 'être') - "в": [t: "vé"] # 0x432 (en: 've', DeepL: 've') @@ -3246,6 +3246,9 @@ - audio: value: "beep.mp4" replace: [] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [t: "ligature ae"] # (DeepL translation) - test: if: "$CapitalLetters_UseWord" then_test: @@ -3253,10 +3256,7 @@ then_test: if: "$Impairment = 'Blindness'" then: [t: "majuscule"] # (en: 'cap', DeepL translation) - else: [x: "$SpeechOverrides_CapitalLetters"] - - pitch: - value: "$CapitalLetters_Pitch" - replace: [t: "ligature ae"] # (DeepL translation) + else: [x: "$SpeechOverrides_CapitalLetters"] - "": # 0xf19b - test: if: "$CapitalLetters_Beep" @@ -3264,6 +3264,9 @@ - audio: value: "beep.mp4" replace: [] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [t: "s pointu"] # (en: 'sharp s', DeepL translation) - test: if: "$CapitalLetters_UseWord" then_test: @@ -3271,10 +3274,7 @@ then_test: if: "$Impairment = 'Blindness'" then: [t: "majuscule"] # (en: 'cap', DeepL translation) - else: [x: "$SpeechOverrides_CapitalLetters"] - - pitch: - value: "$CapitalLetters_Pitch" - replace: [t: "s pointu"] # (en: 'sharp s', DeepL translation) + else: [x: "$SpeechOverrides_CapitalLetters"] - "": # 0xf19c - test: if: "$CapitalLetters_Beep" @@ -3282,6 +3282,9 @@ - audio: value: "beep.mp4" replace: [] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [t: "o avec trait"] # (en: 'o with stroke', DeepL translation) - test: if: "$CapitalLetters_UseWord" then_test: @@ -3289,10 +3292,7 @@ then_test: if: "$Impairment = 'Blindness'" then: [t: "majuscule"] # (en: 'cap', DeepL translation) - else: [x: "$SpeechOverrides_CapitalLetters"] - - pitch: - value: "$CapitalLetters_Pitch" - replace: [t: "o avec trait"] # (en: 'o with stroke', DeepL translation) + else: [x: "$SpeechOverrides_CapitalLetters"] # MathType only has a few of the cap Greek letters in PUA - "": # 0xf201 - 0xf209 diff --git a/Rules/Languages/fr/unicode.yaml b/Rules/Languages/fr/unicode.yaml index 1d1120670..4bd31653b 100644 --- a/Rules/Languages/fr/unicode.yaml +++ b/Rules/Languages/fr/unicode.yaml @@ -19,6 +19,10 @@ - audio: value: "beep.mp4" replace: [] + - pitch: + value: "$CapitalLetters_Pitch" + # note: processing of ranges converts '.' into the character, so it needs to be in quotes below + replace: [spell: "translate('.', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')"] - test: if: "$CapitalLetters_UseWord" then_test: @@ -26,11 +30,7 @@ then_test: if: "$Impairment = 'Blindness'" then: [t: "majuscule"] # (en: 'cap', DeepL translation) - else: [x: "$SpeechOverrides_CapitalLetters"] - - pitch: - value: "$CapitalLetters_Pitch" - # note: processing of ranges converts '.' into the character, so it needs to be in quotes below - replace: [spell: "translate('.', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')"] + else: [x: "$SpeechOverrides_CapitalLetters"] - "0-9": [t: "."] # (en: '.', DeepL: 'A') @@ -226,6 +226,10 @@ - audio: value: "beep.mp4" replace: [] + - pitch: + value: "$CapitalLetters_Pitch" + # note: processing of ranges converts '.' into the character, so it needs to be in quotes below + replace: [spell: "translate('.', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ', 'αβγδεζηθικλμνξοπρςστυφχψω')"] - test: if: "$CapitalLetters_UseWord" then_test: @@ -233,11 +237,7 @@ then_test: if: "$Impairment = 'Blindness'" then: [t: "majuscule"] # (en: 'cap', DeepL translation) - else: [x: "$SpeechOverrides_CapitalLetters"] - - pitch: - value: "$CapitalLetters_Pitch" - # note: processing of ranges converts '.' into the character, so it needs to be in quotes below - replace: [spell: "translate('.', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ', 'αβγδεζηθικλμνξοπρςστυφχψω')"] + else: [x: "$SpeechOverrides_CapitalLetters"] - "α": [t: "alpha"] # 0x3b1 - "β": [t: "bêta"] # 0x3b2 (en: 'beta') diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index 36c17d88c..d5398a4cb 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -4,6 +4,7 @@ mod SimpleSpeak { mod functions; mod geometry; mod large_ops; + mod linear_algebra; } mod shared; diff --git a/tests/Languages/fr/SimpleSpeak/geometry.rs b/tests/Languages/fr/SimpleSpeak/geometry.rs index e841df9c9..911a70c35 100644 --- a/tests/Languages/fr/SimpleSpeak/geometry.rs +++ b/tests/Languages/fr/SimpleSpeak/geometry.rs @@ -6,7 +6,7 @@ use anyhow::Result; #[test] fn arc() -> Result<()> { let expr = " BC "; - test("fr", "SimpleSpeak", expr, "arc majuscule b majuscule c")?; + test("fr", "SimpleSpeak", expr, "arc b majuscule c majuscule")?; return Ok(()); } @@ -14,7 +14,7 @@ fn arc() -> Result<()> { #[test] fn ray() -> Result<()> { let expr = " XY¯ "; - test("fr", "SimpleSpeak", expr, "segment majuscule x majuscule y")?; + test("fr", "SimpleSpeak", expr, "segment x majuscule y majuscule")?; return Ok(()); } @@ -22,7 +22,7 @@ fn ray() -> Result<()> { #[test] fn arc_mtext() -> Result<()> { let expr = " BC "; - test("fr", "SimpleSpeak", expr, "arc majuscule b majuscule c")?; + test("fr", "SimpleSpeak", expr, "arc b majuscule c majuscule")?; return Ok(()); } @@ -30,7 +30,7 @@ fn arc_mtext() -> Result<()> { #[test] fn ray_mtext() -> Result<()> { let expr = " XY "; - test("fr", "SimpleSpeak", expr, "demi-droite majuscule x majuscule y")?; + test("fr", "SimpleSpeak", expr, "demi-droite x majuscule y majuscule")?; return Ok(()); } diff --git a/tests/Languages/fr/SimpleSpeak/large_ops.rs b/tests/Languages/fr/SimpleSpeak/large_ops.rs index 948c8c49f..ff978a8ae 100644 --- a/tests/Languages/fr/SimpleSpeak/large_ops.rs +++ b/tests/Languages/fr/SimpleSpeak/large_ops.rs @@ -25,7 +25,7 @@ fn sum_under() -> Result<()> { i "; - test("fr", "SimpleSpeak", expr, "la sommation sur majuscule s de i")?; + test("fr", "SimpleSpeak", expr, "la sommation sur s majuscule de i")?; return Ok(()); } @@ -53,7 +53,7 @@ fn sum_sub() -> Result<()> { i "; - test("fr", "SimpleSpeak", expr, "la sommation sur majuscule s de i")?; + test("fr", "SimpleSpeak", expr, "la sommation sur s majuscule de i")?; return Ok(()); } @@ -93,7 +93,7 @@ fn product_under() -> Result<()> { i "; - test("fr", "SimpleSpeak", expr, "le produit sur majuscule s de i")?; + test("fr", "SimpleSpeak", expr, "le produit sur s majuscule de i")?; return Ok(()); } @@ -119,7 +119,7 @@ fn intersection_both() -> Result<()> { Si "; - test("fr", "SimpleSpeak", expr, "l'intersection de i est égal à 1, à 10 de; majuscule s indice i")?; + test("fr", "SimpleSpeak", expr, "l'intersection de i est égal à 1, à 10 de; s majuscule indice i")?; return Ok(()); } @@ -133,7 +133,7 @@ fn intersection_under() -> Result<()> { Si "; - test("fr", "SimpleSpeak", expr, "l'intersection sur majuscule c de; majuscule s indice i")?; + test("fr", "SimpleSpeak", expr, "l'intersection sur c majuscule de; s majuscule indice i")?; return Ok(()); } @@ -144,7 +144,7 @@ fn intersection() -> Result<()> { Si "; - test("fr", "SimpleSpeak", expr, "l'intersection de majuscule s indice i")?; + test("fr", "SimpleSpeak", expr, "l'intersection de s majuscule indice i")?; return Ok(()); } @@ -159,7 +159,7 @@ fn union_both() -> Result<()> { Si "; - test("fr", "SimpleSpeak", expr, "l'union de i est égal à 1, à 10 de; majuscule s indice i")?; + test("fr", "SimpleSpeak", expr, "l'union de i est égal à 1, à 10 de; s majuscule indice i")?; return Ok(()); } @@ -173,7 +173,7 @@ fn union_under() -> Result<()> { Si "; - test("fr", "SimpleSpeak", expr, "l'union sur majuscule c de, majuscule s indice i")?; + test("fr", "SimpleSpeak", expr, "l'union sur c majuscule de, s majuscule indice i")?; return Ok(()); } @@ -184,7 +184,7 @@ fn union() -> Result<()> { Si "; - test("fr", "SimpleSpeak", expr, "l'union de majuscule s indice i")?; + test("fr", "SimpleSpeak", expr, "l'union de s majuscule indice i")?; return Ok(()); } diff --git a/tests/Languages/fr/SimpleSpeak/linear_algebra.rs b/tests/Languages/fr/SimpleSpeak/linear_algebra.rs new file mode 100644 index 000000000..026564c7b --- /dev/null +++ b/tests/Languages/fr/SimpleSpeak/linear_algebra.rs @@ -0,0 +1,111 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn transpose() -> Result<()> { + let expr = " MT "; + test("fr", "SimpleSpeak", expr, "m majuscule transposée")?; + return Ok(()); + +} + +#[test] +fn trace() -> Result<()> { + let expr = " TrM "; + test("fr", "SimpleSpeak", expr, "trace of cap m")?; + return Ok(()); + +} + +#[test] +fn dimension() -> Result<()> { + let expr = " DimM "; + test("fr", "SimpleSpeak", expr, "dimension of cap m")?; + return Ok(()); + +} + +#[test] +fn homomorphism() -> Result<()> { + let expr = " Hom(M) "; + test("fr", "SimpleSpeak", expr, "homomorphism of cap m")?; + return Ok(()); + +} + +#[test] +fn kernel() -> Result<()> { + let expr = " ker(L) "; + test("fr", "SimpleSpeak", expr, "kernel of cap l")?; + return Ok(()); + +} + +#[test] +fn norm() -> Result<()> { + let expr = " + + + f + + + +"; + test("fr", "SimpleSpeak", expr, "norm of f")?; + return Ok(()); + +} + +#[test] +fn norm_non_simple() -> Result<()> { + let expr = " + + + x + + + y + + + +"; + test("fr", "SimpleSpeak", expr, "norm of x plus y end norm")?; + return Ok(()); + +} + +#[test] +fn norm_subscripted() -> Result<()> { + let expr = " + + + + f + + + p + + +"; + test("fr", "SimpleSpeak", expr, "p norm of 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("fr", "SimpleSpeak", expr, "open paren, b times nahblah, close paren; times eigh")?; + return Ok(()); + +} \ No newline at end of file From 5663cd61d5c105653b4f737044ab0a02399f33ab Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Thu, 14 May 2026 18:42:30 -0400 Subject: [PATCH 13/53] completed changes and tests for linear_algebra --- Rules/Languages/fr/definitions.yaml | 10 +++++----- Rules/Languages/fr/unicode-full.yaml | 2 +- tests/Languages/fr/SimpleSpeak/linear_algebra.rs | 16 ++++++++-------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Rules/Languages/fr/definitions.yaml b/Rules/Languages/fr/definitions.yaml index 2f0584875..6859b7ca6 100644 --- a/Rules/Languages/fr/definitions.yaml +++ b/Rules/Languages/fr/definitions.yaml @@ -35,11 +35,11 @@ "real-part": "function=la partie réelle", "transpose": "postfix=transposée || function=transposée", - "norm": "function= ; norme: norme de: la norme de; fin de norme", - "trace": "function= ; trace : trace de: la trace de; fin de trace", - "dimension": "function= ; dimension : dimension de: la dimension de; fin de dimension", - "homomorphism": "function= ; homomorphisme : homomorphisme de: l'homomorphisme de; fin de l'homomorphisme", - "kernel": "function= ; noyau : noyau de: le noyau de; fin du noyau", + "norm": "function= ; norme: norme: la norme de; fin de norme", + "trace": "function= ; trace : trace: la trace de; fin de trace", + "dimension": "function= ; dimension : dimension: la dimension de; fin de dimension", + "homomorphism": "function= ; homomorphisme : homomorphisme: l'homomorphisme de; fin de l'homomorphisme", + "kernel": "function= ; noyau : noyau: le noyau de; fin du noyau", "vector": "function= ; vecteur || prefix=vecteur", "cross-product": "infix=croix: produit vectoriel: produit vectoriel", "dot-product": "infix=point: produit scalaire: point: produit scalaire", diff --git a/Rules/Languages/fr/unicode-full.yaml b/Rules/Languages/fr/unicode-full.yaml index 264e56aef..19499693d 100644 --- a/Rules/Languages/fr/unicode-full.yaml +++ b/Rules/Languages/fr/unicode-full.yaml @@ -1190,7 +1190,7 @@ - test: if: "@data-chem-formula-op" then: [t: "point"] # (en: 'dot', DeepL translation) - else: [t: "opérateur point"] # (en: 'times') + else: [t: "fois"] # (en: 'times') - "⋆": [t: "opérateur étoile"] # 0x22c6 (en: 'times') - "⋇": [t: "divisé multiplié"] # 0x22c7 (en: 'division times') diff --git a/tests/Languages/fr/SimpleSpeak/linear_algebra.rs b/tests/Languages/fr/SimpleSpeak/linear_algebra.rs index 026564c7b..36260ccfc 100644 --- a/tests/Languages/fr/SimpleSpeak/linear_algebra.rs +++ b/tests/Languages/fr/SimpleSpeak/linear_algebra.rs @@ -12,7 +12,7 @@ fn transpose() -> Result<()> { #[test] fn trace() -> Result<()> { let expr = " TrM "; - test("fr", "SimpleSpeak", expr, "trace of cap m")?; + test("fr", "SimpleSpeak", expr, "trace de m majuscule")?; return Ok(()); } @@ -20,7 +20,7 @@ fn trace() -> Result<()> { #[test] fn dimension() -> Result<()> { let expr = " DimM "; - test("fr", "SimpleSpeak", expr, "dimension of cap m")?; + test("fr", "SimpleSpeak", expr, "dimension de m majuscule")?; return Ok(()); } @@ -28,7 +28,7 @@ fn dimension() -> Result<()> { #[test] fn homomorphism() -> Result<()> { let expr = " Hom(M) "; - test("fr", "SimpleSpeak", expr, "homomorphism of cap m")?; + test("fr", "SimpleSpeak", expr, "homomorphisme de m majuscule")?; return Ok(()); } @@ -36,7 +36,7 @@ fn homomorphism() -> Result<()> { #[test] fn kernel() -> Result<()> { let expr = " ker(L) "; - test("fr", "SimpleSpeak", expr, "kernel of cap l")?; + test("fr", "SimpleSpeak", expr, "noyau de l majuscule")?; return Ok(()); } @@ -51,7 +51,7 @@ fn norm() -> Result<()> { "; - test("fr", "SimpleSpeak", expr, "norm of f")?; + test("fr", "SimpleSpeak", expr, "norme de f")?; return Ok(()); } @@ -68,7 +68,7 @@ fn norm_non_simple() -> Result<()> { "; - test("fr", "SimpleSpeak", expr, "norm of x plus y end norm")?; + test("fr", "SimpleSpeak", expr, "norme de x plus y fin de norme")?; return Ok(()); } @@ -86,7 +86,7 @@ fn norm_subscripted() -> Result<()> { "; - test("fr", "SimpleSpeak", expr, "p norm of f")?; + test("fr", "SimpleSpeak", expr, "p norme de f")?; return Ok(()); } @@ -105,7 +105,7 @@ fn not_gradient() -> Result<()> { a "#; - test("fr", "SimpleSpeak", expr, "open paren, b times nahblah, close paren; times eigh")?; + test("fr", "SimpleSpeak", expr, "parenthèse gauche, b fois nabla, parenthèse droite; fois a")?; return Ok(()); } \ No newline at end of file From 15ec99768afb9e6abe2a7f55281d6bbdacfcf69d Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Fri, 15 May 2026 14:49:01 -0400 Subject: [PATCH 14/53] added tests mfrac.rs --- tests/Languages/fr.rs | 1 + tests/Languages/fr/SimpleSpeak/mfrac.rs | 356 ++++++++++++++++++++++++ 2 files changed, 357 insertions(+) create mode 100644 tests/Languages/fr/SimpleSpeak/mfrac.rs diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index d5398a4cb..29d1a4e27 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -5,6 +5,7 @@ mod SimpleSpeak { mod geometry; mod large_ops; mod linear_algebra; + mod mfrac; } mod shared; diff --git a/tests/Languages/fr/SimpleSpeak/mfrac.rs b/tests/Languages/fr/SimpleSpeak/mfrac.rs new file mode 100644 index 000000000..a2856f338 --- /dev/null +++ b/tests/Languages/fr/SimpleSpeak/mfrac.rs @@ -0,0 +1,356 @@ +/// 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("fr", "SimpleSpeak", expr, "1 demi")?; + return Ok(()); + +} + +#[test] +fn common_fraction_thirds() -> Result<()> { + let expr = " + 2 3 + "; + test("fr", "SimpleSpeak", expr, "2 tiers")?; + return Ok(()); + +} + +#[test] +fn common_fraction_tenths() -> Result<()> { + let expr = " + 17 10 + "; + test("fr", "SimpleSpeak", expr, "17 dixièmes")?; + return Ok(()); + +} + +#[test] +#[allow(non_snake_case)] +fn not_SimpleSpeak_common_fraction_tenths() -> Result<()> { + let expr = " + 89 10 + "; + test("fr", "SimpleSpeak", expr, "89 sur 10")?; + return Ok(()); + +} + +#[test] +fn non_simple_fraction() -> Result<()> { + let expr = " + + + + x+y + + x-y + + + + "; + test("fr", "SimpleSpeak", expr, "fraction, x plus y, sur, x moins y, fin de fraction")?; + return Ok(()); + +} + +#[test] +fn nested_fraction() -> Result<()> { + let expr = " + + + + x+ 1y + + x-y + + + + "; + test("fr", "SimpleSpeak", expr, "fraction, x plus, fraction, 1 sur y, fin de fraction; sur, x moins y, fin de fraction")?; + return Ok(()); + +} + + +#[test] +fn deeply_nested_fraction_msqrt() -> Result<()> { + let expr = " + + + + x+ 1y + + x-y + + + + "; + test("fr", "SimpleSpeak", expr, "fraction, x plus, la racine carrée de 1 sur y; fin de racine; sur, x moins y, fin de fraction")?; + return Ok(()); + +} + +#[test] +fn deeply_nested_fraction_mrow_msqrt() -> Result<()> { + let expr = " + + + + x+ 2+1y + + x-y + + + + "; + test("fr", "SimpleSpeak", expr, "fraction, x plus, la racine carrée de 2 plus 1 sur y; fin de racine; sur, x moins y, fin de fraction")?; + return Ok(()); + +} + +#[test] +fn numerator_simple_fraction() -> Result<()> { + let expr = " + + + + x + + x-y + + + + "; + test("fr", "SimpleSpeak", expr, "fraction, x sur, x moins y, fin de fraction")?; + return Ok(()); + +} + +#[test] +fn denominator_simple_fraction() -> Result<()> { + let expr = " + + + x-y + x + + + "; + test("fr", "SimpleSpeak", expr, "fraction, x moins y, sur x, fin de fraction")?; + return Ok(()); + +} + + +#[test] +fn frac_with_units() -> Result<()> { + let expr = " + + + 62 + + mi + hr + + + "; + test("fr", "SimpleSpeak", expr, "62 milles par heure")?; + return Ok(()); + +} + +#[test] +fn singular_frac_with_units() -> Result<()> { + let expr = " + + + 1 + + gal + mi + + + "; + test("fr", "SimpleSpeak", expr, "1 gallon par mille")?; + return Ok(()); + +} + +#[test] +fn number_in_numerator_with_units() -> Result<()> { + let expr = " + + + + 3 + gal + + mi + + "; + test("fr", "SimpleSpeak", expr, "3 gallons par mille")?; + return Ok(()); + +} + +#[test] +fn units_with_powers() -> Result<()> { + let expr = " + + + 3 m + s2 + + "; + test("fr", "SimpleSpeak", expr, "3 mètres par seconde au carré")?; + return Ok(()); + +} + + +#[test] +fn mixed_number() -> Result<()> { + let expr = " + 3 + 1 2 + "; + test("fr", "SimpleSpeak", expr, "3 et 1 demi")?; + return Ok(()); + +} + +#[test] +fn explicit_mixed_number() -> Result<()> { + let expr = " + 3 + + 1 8 + "; + test("fr", "SimpleSpeak", expr, "3 et 1 huitième")?; + return Ok(()); + +} + +#[test] +fn mixed_number_big() -> Result<()> { + let expr = " + 3 + 7 83 + "; + test("fr", "SimpleSpeak", expr, "3 et 7 quatre-vingt troisièmes")?; + return Ok(()); + +} + +#[test] +fn simple_text() -> Result<()> { + let expr = " + rise run + "; + test("fr", "SimpleSpeak", expr, "rise sur run")?; + return Ok(()); + +} + +#[test] +fn number_and_text() -> Result<()> { + let expr = " + + + 2milles + + 3gallons + + "; + test("fr", "SimpleSpeak", expr, "fraction, 2 milles, sur, 3 gallons, fin de fraction")?; + return Ok(()); + +} + + +#[test] +fn nested_simple_fractions() -> Result<()> { + let expr = " + + + + + 1 + 2 + + + + + 2 + 3 + + + + + "; + test("fr", "SimpleSpeak", expr, "fraction, 1 demi, sur, 2 tiers, fin de fraction")?; + return Ok(()); + +} + +#[test] +fn binomial() -> Result<()> { + let expr = " + 2 + ( + 7 3 + ) + "; + test("fr", "SimpleSpeak", expr, "2 fois 7 parmi 3")?; + return Ok(()); + +} + +#[test] +fn binomial_non_simple_top() -> Result<()> { + let expr = " + 2 + ( + n+7 3 + ) + "; + test("fr", "SimpleSpeak", expr, "2 fois, binôme n plus 7 parmi 3")?; + return Ok(()); + +} + +#[test] +fn binomial_non_simple_bottom() -> Result<()> { + let expr = " + 2 + ( + 7 k+3 + ) + "; + test("fr", "SimpleSpeak", expr, "2 fois, 7 parmi k plus 3 fin du binôme")?; + return Ok(()); + +} + +#[test] +fn binomial_non_simple_top_and_bottom() -> Result<()> { + let expr = " + 2 + ( + n+7 k+3 + ) + "; + test("fr", "SimpleSpeak", expr, "2 fois, binôme n plus 7 parmi k plus 3 fin du binôme")?; + return Ok(()); + +} From 7fea11a60c33bf5e54400ce10304f23362522b85 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Fri, 15 May 2026 15:28:36 -0400 Subject: [PATCH 15/53] added tests and corrections for msup.rs --- Rules/Languages/fr/SimpleSpeak_Rules.yaml | 4 +- tests/Languages/fr.rs | 1 + tests/Languages/fr/SimpleSpeak/msup.rs | 379 ++++++++++++++++++++++ 3 files changed, 381 insertions(+), 3 deletions(-) create mode 100644 tests/Languages/fr/SimpleSpeak/msup.rs diff --git a/Rules/Languages/fr/SimpleSpeak_Rules.yaml b/Rules/Languages/fr/SimpleSpeak_Rules.yaml index 59a8ec542..0bc84e0c9 100644 --- a/Rules/Languages/fr/SimpleSpeak_Rules.yaml +++ b/Rules/Languages/fr/SimpleSpeak_Rules.yaml @@ -242,10 +242,8 @@ match: "." replace: - x: "*[1]" - - t: "élevé à la" + - t: "élevé à la puissance" - x: "*[2]" - - t: "puissance" - - pause: short - name: set tag: set diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index 29d1a4e27..958651cf5 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -6,6 +6,7 @@ mod SimpleSpeak { mod large_ops; mod linear_algebra; mod mfrac; + mod msup; } mod shared; diff --git a/tests/Languages/fr/SimpleSpeak/msup.rs b/tests/Languages/fr/SimpleSpeak/msup.rs new file mode 100644 index 000000000..41d35c314 --- /dev/null +++ b/tests/Languages/fr/SimpleSpeak/msup.rs @@ -0,0 +1,379 @@ +/// Tests for superscripts +/// simple superscripts +/// complex/nested superscripts +use crate::common::*; +use anyhow::Result; + +#[test] +fn squared() -> Result<()> { + let expr = " + x 2 + "; + test("fr", "SimpleSpeak", expr, "x au carré")?; + return Ok(()); + +} + +#[test] +fn cubed() -> Result<()> { + let expr = " + x 3 + "; + test("fr", "SimpleSpeak", expr, "x au cube")?; + return Ok(()); + +} + +#[test] + fn ordinal_power() -> Result<()> { + let expr = " + x 4 + "; + test("fr", "SimpleSpeak", expr, "x à la 4")?; + return Ok(()); + + } + +#[test] +fn simple_mi_power() -> Result<()> { + let expr = " + x n + "; + test("fr", "SimpleSpeak", expr, "x à la n-ième")?; + return Ok(()); + +} + +#[test] +fn zero_power() -> Result<()> { + let expr = " + x 0 + "; + test("fr", "SimpleSpeak", expr, "x à la 0")?; + return Ok(()); + +} + + +#[test] +fn decimal_power() -> Result<()> { + let expr = " + x 2,0 + "; + test("fr", "SimpleSpeak", expr, "x à la 2,0")?; + return Ok(()); + +} + +#[test] +fn non_simple_power() -> Result<()> { + let expr = " + + + 3 + + y+2 + + + "; + test("fr", "SimpleSpeak", expr, "3 élevé à la puissance y plus 2")?; + return Ok(()); + +} + +#[test] +fn negative_power() -> Result<()> { + let expr = " + + x + - 2 + + "; + test("fr", "SimpleSpeak", expr, "x à la moins 2")?; + return Ok(()); + +} + +#[test] +fn simple_fraction_power() -> Result<()> { + let expr = " + + x + 13 + + "; + test("fr", "SimpleSpeak", expr, "x élevé à la puissance 1 tiers")?; + return Ok(()); + +} + +#[test] +fn nested_squared_power_with_coef() -> Result<()> { + let expr = " + + + 3 + + 2 + + x + 2 + + + + + "; + test("fr", "SimpleSpeak", expr, "3 élevé à la puissance 2 x au carré")?; + return Ok(()); + +} + +#[test] +fn nested_squared_power_with_neg_coef() -> Result<()> { + let expr = " + + + 3 + + - + 2 + + x + 2 + + + + + "; + test("fr", "SimpleSpeak", expr, "3 élevé à la puissance moins 2 x au carré")?; + return Ok(()); + +} + + +#[test] +fn nested_cubed_power() -> Result<()> { + let expr = " + + y + + 45 + 3 + + + "; + test("fr", "SimpleSpeak", expr, "y élevé à la puissance 4 cinquièmes au cube")?; + return Ok(()); + +} + +#[test] +fn nested_cubed_power_with_neg_base() -> Result<()> { + let expr = " + + y + + - + + 45 + 3 + + + + "; + test("fr", "SimpleSpeak", expr, "y élevé à la puissance moins 4 cinquièmes au cube")?; + return Ok(()); + +} + +#[test] +fn nested_number_times_squared() -> Result<()> { + let expr = " + + + e + + + 1 + 2 + + + x + 2 + + + + + "; + test("fr", "SimpleSpeak", expr, "e élevé à la puissance 1 demi x au carré")?; + return Ok(()); + +} + +#[test] +fn nested_negative_number_times_squared() -> Result<()> { + let expr = " + + + e + + + 1 + 2 + + + x + 2 + + + + + "; + test("fr", "SimpleSpeak", expr, "e élevé à la puissance moins 1 demi x au carré")?; + return Ok(()); + +} + +#[test] +fn nested_expr_to_tenth() -> Result<()> { + let expr = " + + + 3 + + + 3 + + 10 + + + + + "; + test("fr", "SimpleSpeak", expr, "3 élevé à la puissance 3 à la 10")?; + return Ok(()); + +} + +#[test] +fn nested_non_simple_squared_exp() -> Result<()> { + let expr = " + + + 3 + + + + ( + + x+1 + ) + 2 + + + + + "; + test("fr", "SimpleSpeak", expr, "3 élevé à la puissance parenthèse gauche, x plus 1, parenthèse droite au carré")?; + return Ok(()); + +} + +#[test] +fn nested_simple_power() -> Result<()> { + let expr = " + + t + + 45 + n + + + "; + test("fr", "SimpleSpeak", expr, "t élevé à la puissance 4 cinquièmes à la n-ième")?; + return Ok(()); + +} + +#[test] +fn nested_end_exponent_power() -> Result<()> { + let expr = " + + t + + 45 + n+1 + + + "; + test("fr", "SimpleSpeak", expr, "t élevé à la 4 cinquièmes élevé à la puissance n plus 1, fin d'exposant")?; + test_prefs("fr", "SimpleSpeak", vec![("Impairment", "LearningDisability")], expr, + "t élevé à la 4 cinquièmes élevé à la puissance n plus 1")?; + return Ok(()); + +} + +#[test] +fn nested_end_exponent_neg_power() -> Result<()> { + let expr = " + + t + + 45 + -3 + + + "; + test("fr", "SimpleSpeak", expr, "t élevé à la 4 cinquièmes à la moins 3, fin d'exposant")?; + return Ok(()); + +} + +#[test] +fn nested_complex_power() -> Result<()> { + let expr = " + + + e + + + 1 + 2 + + + + ( + + + + xμ + σ + + + ) + 2 + + + + + "; + test("fr", "SimpleSpeak", expr, "e élevé à la puissance moins 1 demi fois; parenthèse gauche; fraction, x moins mû, sur sigma, fin de fraction; parenthèse droite au carré")?; + return Ok(()); + +} + +#[test] +fn default_power() -> Result<()> { + let expr = " + + t + + b+1 + 3 + + + "; + test("fr", "SimpleSpeak", expr, "t élevé à la puissance fraction, b plus 1, sur 3, fin de fraction")?; + return Ok(()); + +} From 8f990a575540b5bf9f8b9d90e19d52885c6d7911 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Fri, 15 May 2026 15:46:29 -0400 Subject: [PATCH 16/53] added tests and corrections for multiline.rs --- Rules/Languages/fr/SharedRules/general.yaml | 8 +-- tests/Languages/fr.rs | 1 + tests/Languages/fr/SimpleSpeak/multiline.rs | 78 +++++++++++++++++++++ 3 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 tests/Languages/fr/SimpleSpeak/multiline.rs diff --git a/Rules/Languages/fr/SharedRules/general.yaml b/Rules/Languages/fr/SharedRules/general.yaml index 7a249a35c..a3a60efed 100644 --- a/Rules/Languages/fr/SharedRules/general.yaml +++ b/Rules/Languages/fr/SharedRules/general.yaml @@ -527,13 +527,13 @@ - x: "$LineCount" - test: - if: "self::m:piecewise" - then: [t: "case"] # phrase(this is the first 'case' of three cases) + then: [t: "cas"] # phrase(this is the first 'case' of three cases) - else_if: "self::m:system-of-equations" then: [t: "équation"] # phrase(this is the first 'equation' of three equations) else: [t: "ligne"] # phrase(this is the first 'line' of three lines) - test: - - if: "$LineCount != 1" - then: [ct: "s"] # plural + - if: "$LineCount != 1 and not(self::m:piecewise)" # 'cas' already ends with an 's', no need to add one when plural + then: [ct: "s"] # plural (not for 'cas' which is invariant) - pause: short - x: "*" - pause: long @@ -549,7 +549,7 @@ - pause: medium - test: - if: "parent::m:piecewise" - then: [t: "case"] # phrase('case' 1 of 10 cases) + then: [t: "cas"] # phrase('case' 1 of 10 cases) - else_if: "parent::m:system-of-equations" then: [t: "équation"] # phrase('equation' 1 of 10 equations) else: [t: "ligne"] # phrase('line 1 of 10 lines) diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index 958651cf5..7669464e3 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -7,6 +7,7 @@ mod SimpleSpeak { mod linear_algebra; mod mfrac; mod msup; + mod multiline; } mod shared; diff --git a/tests/Languages/fr/SimpleSpeak/multiline.rs b/tests/Languages/fr/SimpleSpeak/multiline.rs new file mode 100644 index 000000000..ef85e1531 --- /dev/null +++ b/tests/Languages/fr/SimpleSpeak/multiline.rs @@ -0,0 +1,78 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn case_1() -> Result<()> { + let expr = " + + f( + x + )={ + + + + + 1 si x<0 + + + + + + 0 si x=0 + + + + + + 1 si x>0 + + + + + "; + test("fr", "SimpleSpeak", expr, "f de x est égal à; 3 cas; \ + cas 1; moins 1 si x; est inférieur à 0; \ + cas 2; 0 si x, est égal à 0; \ + cas 3; 1 si x, est supérieur à 0")?; + return Ok(()); +} + +#[test] +fn equation_1() -> Result<()> { + let expr = " + + + + + + x+y + + + = + + + 7 + + + + + + 2x+3y + + + = + + + + 17 + + + + + + "; + test("fr", "SimpleSpeak", expr, "2 équations; \ + équation 1; x plus y, est égal à 7; \ + équation 2; 2 x plus 3 y; est égal à 17")?; + return Ok(()); +} From 61f6db0000e88194a54efeae1c46f9dcdc338ccd Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Fri, 15 May 2026 17:07:49 -0400 Subject: [PATCH 17/53] draft sets.rs --- Rules/Languages/fr/SharedRules/general.yaml | 24 +- Rules/Languages/fr/unicode.yaml | 8 +- tests/Languages/fr.rs | 1 + tests/Languages/fr/SimpleSpeak/sets.rs | 285 ++++++++++++++++++++ 4 files changed, 302 insertions(+), 16 deletions(-) create mode 100644 tests/Languages/fr/SimpleSpeak/sets.rs diff --git a/Rules/Languages/fr/SharedRules/general.yaml b/Rules/Languages/fr/SharedRules/general.yaml index a3a60efed..3aa8bf124 100644 --- a/Rules/Languages/fr/SharedRules/general.yaml +++ b/Rules/Languages/fr/SharedRules/general.yaml @@ -8,25 +8,25 @@ - test: if: "$Verbosity!='Terse'" then: - - t: "la" # phrase('the' square root of 25 equals 5) - - bookmark: "*[2]/@id" - - test: - - if: "*[2][.='+']" - then: [t: "positive"] # phrase(set of all 'positive' integers less than 10) - else: [t: "negative"] # phrase(set of all 'negative' integers less than minus 10) + - t: "les" # phrase('the' real numbers) - bookmark: "*[1]/@id" - test: - if: "*[1][.='ℂ']" - then: [t: "nombre complexe"] # phrase('complex numbers' consist of two parts) + then: [t: "nombres complexes"] # phrase('complex numbers' consist of two parts) - else_if: "*[1][.='ℕ']" - then: [t: "nombre naturel"] # phrase('natural numbers' are numbers from 1 to infinity) + then: [t: "nombres naturels"] # phrase('natural numbers' are numbers from 1 to infinity) - else_if: "*[1][.='ℚ']" - then: [t: "nombre rationel"] # phrase('rational numbers' are the fraction of 2 integers) + then: [t: "nombres rationnels"] # phrase('rational numbers' are the fraction of 2 integers) - else_if: "*[1][.='ℝ']" - then: [t: "nombre réel"] # phrase('real numbers' can be both positive and negative) + then: [t: "nombres réels"] # phrase('real numbers' can be both positive and negative) - else_if: "*[1][.='ℤ']" - then: [t: "nombre entier"] # phrase(positive 'integers' are natural numbers above 0) + then: [t: "nombres entiers"] # phrase(positive 'integers' are natural numbers above 0) else: [x: "*[1][text()]"] # shouldn't happen + - bookmark: "*[2]/@id" + - test: + - if: "*[2][.='+']" + then: [t: "positifs"] # phrase(set of all 'positive' integers less than 10) + else: [t: "négatifs"] # phrase(set of all 'negative' integers less than minus 10) - name: dimension-number-sets # should be single digit integer at this point (e.g, R^3) @@ -60,7 +60,7 @@ - else_if: ".='ℕ'" then: [t: "les nombres naturels"] # phrase('the natural numbers' begin at 1) - else_if: ".='ℚ'" - then: [t: "les nombres rationels"] # phrase('the rational numbers' are the fraction of 2 integers) + then: [t: "les nombres rationnels"] # phrase('the rational numbers' are the fraction of 2 integers) - else_if: ".='ℝ'" then: [t: "les nombres réels"] # phrase('the real numbers' can be both positive and negative) - else_if: ".='ℤ'" diff --git a/Rules/Languages/fr/unicode.yaml b/Rules/Languages/fr/unicode.yaml index 4bd31653b..631150fd0 100644 --- a/Rules/Languages/fr/unicode.yaml +++ b/Rules/Languages/fr/unicode.yaml @@ -358,7 +358,7 @@ - test: if: "$Verbosity!='Terse' and not(ancestor::*[self::m:set])" # "the set x is an element of ..." sounds bad" then: [t: "est"] # (en: 'is', DeepL translation) - - t: "appartient à" # (en: 'an element of') + - t: "appartenant à" # (en: 'an element of') # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option else_test: if: "../../self::m:set or ../../../self::m:set" # inside a set @@ -383,9 +383,9 @@ - test: if: "$SpeechStyle != 'ClearSpeak'" then: - - test: - if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + # - test: + # if: "$Verbosity!='Terse'" + # then: [t: "est"] # (en: 'is', DeepL translation) - t: "n'appartient pas à" # (en: 'not an element of') # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option else_test: diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index 7669464e3..0ecbf66fb 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -8,6 +8,7 @@ mod SimpleSpeak { mod mfrac; mod msup; mod multiline; + mod sets; } mod shared; diff --git a/tests/Languages/fr/SimpleSpeak/sets.rs b/tests/Languages/fr/SimpleSpeak/sets.rs new file mode 100644 index 000000000..ee51b5739 --- /dev/null +++ b/tests/Languages/fr/SimpleSpeak/sets.rs @@ -0,0 +1,285 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn complex() -> Result<()> { + let expr = " + + "; + test("fr", "SimpleSpeak", expr, "les nombres complexes")?; + return Ok(()); + +} + +#[test] +fn natural() -> Result<()> { + let expr = " + + "; + test("fr", "SimpleSpeak", expr, "les nombres naturels")?; + return Ok(()); + +} + +#[test] +fn rationals() -> Result<()> { + let expr = " + + "; + test("fr", "SimpleSpeak", expr, "les nombres rationnels")?; + return Ok(()); + +} + +#[test] +fn reals() -> Result<()> { + let expr = " + + "; + test("fr", "SimpleSpeak", expr, "les nombres réels")?; + return Ok(()); + +} + +#[test] +fn integers() -> Result<()> { + let expr = " + + "; + test("fr", "SimpleSpeak", expr, "les nombres entiers")?; + return Ok(()); + +} + + + +#[test] +fn msup_complex() -> Result<()> { + let expr = " + + + 2 + + "; + test("fr", "SimpleSpeak", expr, "C 2")?; + return Ok(()); + +} + +#[test] +fn msup_natural() -> Result<()> { + let expr = " + + + 2 + + "; + test("fr", "SimpleSpeak", expr, "N 2")?; + return Ok(()); + +} + +#[test] +fn msup_rationals() -> Result<()> { + let expr = " + + + 2 + + "; + test("fr", "SimpleSpeak", expr, "Q 2")?; + return Ok(()); + +} + +#[test] +fn msup_reals() -> Result<()> { + let expr = " + + + 3 + + "; + test("fr", "SimpleSpeak", expr, "R 3")?; + return Ok(()); + +} + +#[test] +fn msup_integers() -> Result<()> { + let expr = " + + + 4 + + "; + test("fr", "SimpleSpeak", expr, "Z 4")?; + return Ok(()); + +} + +#[test] +fn msup_positive_integers() -> Result<()> { + let expr = " + + + + + + "; + test("fr", "SimpleSpeak", expr, "les nombres entiers positifs")?; + return Ok(()); + +} + +#[test] +fn msup_negative_integers() -> Result<()> { + let expr = " + + + - + + "; + test("fr", "SimpleSpeak", expr, "les nombres entiers négatifs")?; + return Ok(()); + +} + +#[test] +fn msup_positive_rationals() -> Result<()> { + let expr = " + + + + + + "; + test("fr", "SimpleSpeak", expr, "les nombres rationnels positifs")?; + return Ok(()); + +} + +#[test] +fn msup_negative_rationals() -> Result<()> { + let expr = " + + + - + + "; + test("fr", "SimpleSpeak", expr, "les nombres rationnels négatifs")?; + return Ok(()); + +} + +#[test] +fn empty_set() -> Result<()> { + let expr = " + { } + "; + test("fr", "SimpleSpeak", expr, "ensemble vide")?; + return Ok(()); + +} + +#[test] +fn single_element_set() -> Result<()> { + let expr = " + { 12} + "; + test("fr", "SimpleSpeak", expr, "ensemble 12")?; + return Ok(()); + +} + +#[test] +fn multiple_element_set() -> Result<()> { + let expr = " + { 5 , 10 , 15 } + "; + test("fr", "SimpleSpeak", expr, "ensemble 5 virgule, 10 virgule, 15")?; + return Ok(()); + +} + +#[test] +fn set_with_colon() -> Result<()> { + let expr = " + { x:x>2 } + "; + test("fr", "SimpleSpeak", expr, "l'ensemble de tous les x tel que x est supérieur à 2")?; + return Ok(()); + +} + +#[test] +fn set_with_bar() -> Result<()> { + let expr = " + { x|x>2 } + "; + test("fr", "SimpleSpeak", expr, "l'ensemble de tous les x tel que x est supérieur à 2")?; + return Ok(()); + +} + +#[test] +fn element_alone() -> Result<()> { + let expr = " + 3+2i + "; + test("fr", "SimpleSpeak", expr, "3 plus 2 i, n'appartient pas à, les nombres réels")?; + return Ok(()); + +} + +#[test] +fn element_under_sum() -> Result<()> { + let expr = " + + + i + + + 1 + i 2 + + "; + test("fr", "SimpleSpeak", expr, + "the sum over i is an element of the integers of; fraction, 1 over, i squared, end fraction")?; + return Ok(()); + +} + +#[test] +fn complicated_set_with_colon() -> Result<()> { + let expr = " + { + x + + + : + 2 + < + x + < + 7 + } + "; + test("fr", "SimpleSpeak", expr, "ensemble de tous les x appartenant aux nombres entiers tel que 2 est inférieur à x est inférieur à 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  est un nombre pair + } + "; + test("fr", "SimpleSpeak", expr, + "ensemble de tous les x appartenant à, les nombres naturels tel que x est un nombre pair")?; + return Ok(()); + +} From 1f732763c00617850ee0017ae50d310c34bbe055 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Wed, 20 May 2026 16:53:54 -0400 Subject: [PATCH 18/53] completed sets.rs --- Rules/Languages/fr/unicode.yaml | 4 ++-- tests/Languages/fr/SimpleSpeak/sets.rs | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Rules/Languages/fr/unicode.yaml b/Rules/Languages/fr/unicode.yaml index 631150fd0..b12a50781 100644 --- a/Rules/Languages/fr/unicode.yaml +++ b/Rules/Languages/fr/unicode.yaml @@ -358,7 +358,7 @@ - test: if: "$Verbosity!='Terse' and not(ancestor::*[self::m:set])" # "the set x is an element of ..." sounds bad" then: [t: "est"] # (en: 'is', DeepL translation) - - t: "appartenant à" # (en: 'an element of') + - t: "un élément de" # (en: 'an element of') # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option else_test: if: "../../self::m:set or ../../../self::m:set" # inside a set @@ -396,7 +396,7 @@ - else_if: $ClearSpeak_SetMemberSymbol = 'Member' then: [t: "n'est pas membre de"] # (en: 'not member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "pas un élément de"] # (en: 'not element of', DeepL translation) + then: [t: "n'est pas un élément de"] # (en: 'not element of', DeepL translation) - else: [t: "n'appartient pas à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to') else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' diff --git a/tests/Languages/fr/SimpleSpeak/sets.rs b/tests/Languages/fr/SimpleSpeak/sets.rs index ee51b5739..0d26de76e 100644 --- a/tests/Languages/fr/SimpleSpeak/sets.rs +++ b/tests/Languages/fr/SimpleSpeak/sets.rs @@ -205,7 +205,7 @@ fn set_with_colon() -> Result<()> { let expr = " { x:x>2 } "; - test("fr", "SimpleSpeak", expr, "l'ensemble de tous les x tel que x est supérieur à 2")?; + test("fr", "SimpleSpeak", expr, "ensemble de tous les x tel que x est supérieur à 2")?; return Ok(()); } @@ -215,7 +215,7 @@ fn set_with_bar() -> Result<()> { let expr = " { x|x>2 } "; - test("fr", "SimpleSpeak", expr, "l'ensemble de tous les x tel que x est supérieur à 2")?; + test("fr", "SimpleSpeak", expr, "ensemble de tous les x tel que x est supérieur à 2")?; return Ok(()); } @@ -243,7 +243,7 @@ fn element_under_sum() -> Result<()> { "; test("fr", "SimpleSpeak", expr, - "the sum over i is an element of the integers of; fraction, 1 over, i squared, end fraction")?; + "la sommation sur i est un élément de, les nombres entiers de; fraction, 1 sur, i au carré, fin de fraction")?; return Ok(()); } @@ -263,7 +263,7 @@ fn complicated_set_with_colon() -> Result<()> { 7 } "; - test("fr", "SimpleSpeak", expr, "ensemble de tous les x appartenant aux nombres entiers tel que 2 est inférieur à x est inférieur à 7")?; + test("fr", "SimpleSpeak", expr, "ensemble de tous les x un élément de, les nombres entiers tel que 2 est inférieur à x est inférieur à 7")?; return Ok(()); } @@ -279,7 +279,7 @@ fn complicated_set_with_mtext() -> Result<()> { } "; test("fr", "SimpleSpeak", expr, - "ensemble de tous les x appartenant à, les nombres naturels tel que x est un nombre pair")?; + "ensemble de tous les x un élément de, les nombres naturels tel que x est un nombre pair")?; return Ok(()); } From 2093e984b69beb02faded5f3e5527cc7aafff2f3 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Wed, 20 May 2026 17:03:14 -0400 Subject: [PATCH 19/53] added subscripts.rs tests --- tests/Languages/fr.rs | 1 + tests/Languages/fr/SimpleSpeak/subscripts.rs | 64 ++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 tests/Languages/fr/SimpleSpeak/subscripts.rs diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index 0ecbf66fb..9dcdafd9a 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -9,6 +9,7 @@ mod SimpleSpeak { mod msup; mod multiline; mod sets; + mod subscripts; } mod shared; diff --git a/tests/Languages/fr/SimpleSpeak/subscripts.rs b/tests/Languages/fr/SimpleSpeak/subscripts.rs new file mode 100644 index 000000000..10ff0e0e0 --- /dev/null +++ b/tests/Languages/fr/SimpleSpeak/subscripts.rs @@ -0,0 +1,64 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn msub_simple() -> Result<()> { + let expr = " x 1 "; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 1")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, "x indice 1")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x indice 1")?; + return Ok(()); + + } + +#[test] +fn msub_not_simple() -> Result<()> { + let expr = " x 1,2 "; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x indice 1,2")?; + return Ok(()); + + } + +#[test] +fn msubsup_not_simple() -> Result<()> { + let expr = " x 1,2 3 "; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x indice 1,2, au cube")?; + return Ok(()); + + } + +#[test] +fn msub_simple_mi() -> Result<()> { + let expr = " x i "; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x indice i")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x indice i")?; + return Ok(()); + +} + +#[test] +fn msub_simple_number_follows() -> Result<()> { + let expr = " x 1 102 "; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 1, 10 au carré")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x indice 1, 10 au carré")?; + return Ok(()); + +} + +#[test] +fn msub_simple_non_number_follows() -> Result<()> { + let expr = " x 1 2 "; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 1, au carré")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x indice 1, au carré")?; + return Ok(()); + +} + +#[test] +fn msubsup_simple() -> Result<()> { + let expr = " x 1 x,2 "; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "x 1, x au carré")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "x indice 1, x au carré")?; + return Ok(()); + +} \ No newline at end of file From 83cda50ffcbe768186d1df7b39eaa155c9d1abf5 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Wed, 20 May 2026 18:36:01 -0400 Subject: [PATCH 20/53] added test file and modifs for alphabets.rs --- Rules/Languages/fr/unicode-full.yaml | 302 +++++++++++++++------------ tests/Languages/fr/alphabets.rs | 258 ++++++++++++----------- 2 files changed, 297 insertions(+), 263 deletions(-) diff --git a/Rules/Languages/fr/unicode-full.yaml b/Rules/Languages/fr/unicode-full.yaml index 19499693d..0d02115d3 100644 --- a/Rules/Languages/fr/unicode-full.yaml +++ b/Rules/Languages/fr/unicode-full.yaml @@ -48,8 +48,9 @@ - "ʴ": [t: "modificateur petit tourné vers la droite"] # 0x2b4 (en: 'modifier small turned r', DeepL translation) - "ʵ": [t: "modificateur petit r tourné avec crochet"] # 0x2b5 (en: 'modifier small turned r with hook', DeepL translation) - "ʶ": # 0x2b6 - - t: "modificateur petit inversé" # (en: 'modifier small inverted', DeepL translation) - spell: "translate('R', 'R', 'R')" + - t: "modificateur petit inversé" # (en: 'modifier small inverted', DeepL translation) + - "ʷ": [t: "modificateur petit w"] # 0x2b7 (en: 'modifier small w', DeepL translation) - "ʸ": [t: "modificateur petit y"] # 0x2b8 (en: 'modifier small y', DeepL translation) @@ -454,19 +455,20 @@ - "℉": [t: "degré fahrenheit"] # 0x2109 (en: 'degrees fahrenheit', DeepL: 'degrés fahrenheit') - "ℊ": [t: "g ronde minuscule"] # 0x210a (en: 'script g', DeepL: 'script g') - "ℌℑℨℭ": # 0x210c, 0x2111, 0x2128, 0x212d - - t: "g ronde minuscule" # (en: 'fraktur', DeepL: 'fraktur') - spell: "translate('.', 'ℌℑℨℭ', 'HIZC')" + - t: "gothique" # (en: 'fraktur', DeepL: 'fraktur') - "ℍℙℾℿ": # 0x210d, 0x2119, 0x213e, 0x213f - - t: "g ronde minuscule" # (en: 'double struck', DeepL: 'double frappé') - spell: "translate('.', 'ℍℙℾℿ', 'HPΓΠ')" + - t: "double barre" # (en: 'double struck', DeepL: 'double barre') + - "ℎ": [t: "constante de planck"] # 0x210e (en: 'planck constant') - "ℏ": [t: "constante de planck sur deux pi"] # 0x210f (en: 'h bar') - "ℐℒ℘ℬℰℱℳ": # 0x2110, 0x2112, 0x2118, 0x2130, 0x2131, 0x2133 - - t: "constante de planck sur deux pi" # (en: 'script') - spell: "translate('.', 'ℐℒ℘ℬℰℱℳ', 'ILPBEFM')" + - t: "script" # (en: 'script') - "ℓ": [t: "l minuscule en script"] # 0x2113 (en: 'script l', MathPlayer: 'l ronde minuscule', DeepL: 'script l') - "℔": [t: "symbole l b barré"] # 0x2114 (en: 'pounds', DeepL: 'livres') @@ -481,15 +483,15 @@ # coalesced some chars that use cap letters - "Ⅎ℺⅁⅂⅃⅄": # 0x2132, 0x213a, 0x2141, 0x2142, 0x2143, 0x2144 + - spell: "translate('.', 'Ⅎ℺⅁⅂⅃⅄', 'FQGLLY')" - test: - if: "'.' = '℺'" then: [t: "tourné"] # (en: 'rotated', DeepL translation) - else_if: "'.' = 'Ⅎ'" then: [t: "tourné"] # (en: 'turned', DeepL translation) - else_if: "'.' = '⅃'" - then: [t: "sans-serif inversé"] # (en: 'reversed sans-serif', DeepL translation) - else: [t: "e ronde minuscule"] # (en: 'turned sans-serif', DeepL: 'tourné sans empattement') - - spell: "translate('.', 'Ⅎ℺⅁⅂⅃⅄', 'FQGLLY')" + then: [t: "tourné sans-serif"] # (en: 'reversed sans-serif', DeepL translation) + else: [t: "tourné sans-serif"] # (en: 'turned sans-serif', DeepL: 'tourné sans empattement') - "ℴ": [t: "o ronde minuscule"] # 0x2134 (en: 'script o', DeepL: 'script o') - "ℵ": [t: "alef"] # 0x2135 (en: 'first transfinite cardinal') @@ -1415,8 +1417,8 @@ - t: "courant" # (en: 'current', DeepL translation) - "⏧": [t: "intersection électrique"] # 0x23e7 (en: 'electrical intersection', DeepL translation) - "①-⑨": # 0x2460 - 0x2469 - - t: "encerclé" # (en: 'circled', DeepL translation) - spell: "translate('.', '①②③④⑤⑥⑦⑧⑨', '123456789')" + - t: "encerclé" # (en: 'circled', DeepL translation) - "⑩": [t: "encerclé dix"] # 0x2469 (en: 'circled ten', DeepL translation) - "⑪": [t: "encerclé onze"] # 0x246a (en: 'circled eleven', DeepL translation) - "⑫": [t: "encerclé douze"] # 0x246b (en: 'circled twelve', DeepL translation) @@ -1428,8 +1430,8 @@ - "⑱": [t: "ateen encerclé"] # 0x2471 (en: 'circled eighteen', DeepL translation) - "⑳": [t: "encerclé vingt"] # 0x2473 (en: 'circled twenty', DeepL translation) - "⑴-⑼": # 0x2474 - 0x247d - - t: "entre parenthèses" # (en: 'parenthesized', DeepL translation) - spell: "translate('.', '⑴⑵⑶⑷⑸⑹⑺⑻⑼', '123456789')" + - t: "entre parenthèses" # (en: 'parenthesized', DeepL translation) - "⑽": [t: "dix entre parenthèses"] # 0x247d (en: 'parenthesized ten', DeepL translation) - "⑾": [t: "onze entre parenthèses"] # 0x247e (en: 'parenthesized eleven', DeepL translation) - "⑿": [t: "parenthèse-histhésée douze"] # 0x247f (en: 'parenthesized twelve', DeepL translation) @@ -1456,34 +1458,39 @@ - "⒚": [t: "dix-neuf avec point"] # 0x249a (en: 'nineteen with period', DeepL translation) - "⒛": [t: "vingt avec point"] # 0x249b (en: 'twenty with period', DeepL translation) - "⒜-⒵": # 0x249c - 0x24b5 - - t: "entre parenthèses" # (en: 'parenthesized', DeepL translation) - spell: "translate('.', '⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵', 'abcdefghijklmnopqrstuvwxyz')" + - t: "entre parenthèses" # (en: 'parenthesized', DeepL translation) + - "Ⓐ-ⓩ": # 0x24b6 - 0x24cf - - t: "encerclé" # (en: 'circled', DeepL translation) - spell: "translate('.', 'ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - t: "encerclé" # (en: 'circled', DeepL translation) + - "🅐-🅩": # 0x1f150 - 0x1f169 - - t: "encerclé de noir" # (en: 'black circled', DeepL translation) - spell: "translate('.', '🅐🅑🅒🅓🅔🅕🅖🅗🅘🅙🅚🅛🅜🅝🅞🅟🅠🅡🅢🅣🅤🅥🅦🅧🅨🅩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - t: "encerclé de noir" # (en: 'black circled', DeepL translation) + - "ⓐ-ⓩ": # 0x24d0 - 0x24e9 - - t: "encerclé" # (en: 'circled', DeepL translation) - spell: "translate('.', 'ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ', 'abcdefghijklmnopqrstuvwxyz')" - - "⓪": [t: "encerclé zéro"] # 0x24ea (en: 'circled zero', DeepL translation) + - t: "encerclé" # (en: 'circled', DeepL translation) + + - "⓪": [t: "zéro encerclé"] # 0x24ea (en: 'circled zero', DeepL translation) - "⓫": [t: "onze encerclé de noir"] # 0x24eb (en: 'black circled eleven', DeepL translation) - - "⓬": [t: "noir encerclé douze"] # 0x24ec (en: 'black circled twelve', DeepL translation) - - "⓭": [t: "noir encerclé treize"] # 0x24ed (en: 'black circled thirteen', DeepL translation) - - "⓮": [t: "quatorze entouré de noir"] # 0x24ee (en: 'black circled fourteen', DeepL translation) - - "⓯": [t: "quinze encerclés noirs"] # 0x24ef (en: 'black circled fifteen', DeepL translation) - - "⓰": [t: "noir encerclé seize"] # 0x24f0 (en: 'black circled sixteen', DeepL translation) - - "⓱": [t: "dix-sept encerclé noir"] # 0x24f1 (en: 'black circled seventeen', DeepL translation) - - "⓲": [t: "atéroïde noir encerclé"] # 0x24f2 (en: 'black circled eighteen', DeepL translation) - - "⓳": [t: "noir encerclé dix-neuf"] # 0x24f3 (en: 'black circled nineteen', DeepL translation) - - "⓴": [t: "vingt encerclés de noir"] # 0x24f4 (en: 'black circled twenty', DeepL translation) + - "⓬": [t: "douze encerclé de noir"] # 0x24ec (en: 'black circled twelve', DeepL translation) + - "⓭": [t: "treize encerclé de noir"] # 0x24ed (en: 'black circled thirteen', DeepL translation) + - "⓮": [t: "quatorze encerclé de noir"] # 0x24ee (en: 'black circled fourteen', DeepL translation) + - "⓯": [t: "quinze encerclé de noir"] # 0x24ef (en: 'black circled fifteen', DeepL translation) + - "⓰": [t: "seize encerclé de noir"] # 0x24f0 (en: 'black circled sixteen', DeepL translation) + - "⓱": [t: "dix-sept encerclé de noir"] # 0x24f1 (en: 'black circled seventeen', DeepL translation) + - "⓲": [t: "atéroïde encerclé de noir"] # 0x24f2 (en: 'black circled eighteen', DeepL translation) + - "⓳": [t: "dix-neuf encerclé de noir"] # 0x24f3 (en: 'black circled nineteen', DeepL translation) + - "⓴": [t: "vingt encerclé de noir"] # 0x24f4 (en: 'black circled twenty', DeepL translation) - "⓵-⓽": # 0x24f5 - 0x24fe - - t: "double encerclé" # (en: 'double circled', DeepL translation) - spell: "translate('.', '⓵⓶⓷⓸⓹⓺⓻⓼⓽', '123456789')" + - t: "double encerclé" # (en: 'double circled', DeepL translation) + - "⓾": [t: "double cercle de dix"] # 0x24fe (en: 'double circled ten', DeepL translation) - "⓿": [t: "zéro encerclé de noir"] # 0x24ff (en: 'black circled zero', DeepL translation) - "■": [t: "petit carré noir"] # 0x25a0 (en: 'black square') @@ -1644,36 +1651,36 @@ - "❳": [t: "crochet de fantaisie droit maigre en écaille"] # 0x2773 (en: 'light right tortoise shell bracket ornament', DeepL: 'ornement de support en écaille de tortue léger et droit') - "❴": [t: "accolade de fantaisie gauche moyenne"] # 0x2774 (en: 'medium left brace ornament', DeepL: 'ornement d'accolade moyen gauche') - "❵": [t: "accolade de fantaisie droite moyenne"] # 0x2775 (en: 'medium right brace ornament', DeepL: 'accolade moyenne droite ornement') - - "❶": [t: "noir encerclé un"] # 0x2776 (en: 'black circled one', DeepL translation) - - "❷": [t: "deux encerclés de noir"] # 0x2777 (en: 'black circled two', DeepL translation) - - "❸": [t: "noir encerclé trois"] # 0x2778 (en: 'black circled three', DeepL translation) - - "❹": [t: "quatre encerclé noir"] # 0x2779 (en: 'black circled four', DeepL translation) - - "❺": [t: "cinq noir encerclé"] # 0x277a (en: 'black circled five', DeepL translation) - - "❻": [t: "noir encerclé six"] # 0x277b (en: 'black circled six', DeepL translation) - - "❼": [t: "sept encerclé en noir"] # 0x277c (en: 'black circled seven', DeepL translation) - - "❽": [t: "cercle noir avec flèche vers le bas"] # 0x277d (en: 'black circled eight', DeepL translation) - - "❾": [t: "noir encerclé neuf"] # 0x277e (en: 'black circled nine', DeepL translation) - - "❿": [t: "dix encerclé en noir"] # 0x277f (en: 'black circled ten', DeepL translation) - - "➀": [t: "un sans serif encerclé"] # 0x2780 (en: 'circled sans serif one', DeepL translation) - - "➁": [t: "encerclé sans serif deux"] # 0x2781 (en: 'circled sans serif two', DeepL translation) - - "➂": [t: "encerclé sans serif trois"] # 0x2782 (en: 'circled sans serif three', DeepL translation) - - "➃": [t: "quatre sans serif encerclé"] # 0x2783 (en: 'circled sans serif four', DeepL translation) - - "➄": [t: "encerclé sans serif cinq"] # 0x2784 (en: 'circled sans serif five', DeepL translation) - - "➅": [t: "encerclé sans serif six"] # 0x2785 (en: 'circled sans serif six', DeepL translation) - - "➆": [t: "encerclé sans empattement sept"] # 0x2786 (en: 'circled sans serif seven', DeepL translation) - - "➇": [t: "encerclé sans serif à"] # 0x2787 (en: 'circled sans serif eight', DeepL translation) - - "➈": [t: "encerclé sans serif neuf"] # 0x2788 (en: 'circled sans serif nine', DeepL translation) - - "➉": [t: "encerclé sans serif dix"] # 0x2789 (en: 'circled sans serif ten', DeepL translation) - - "➊": [t: "noir encerclé sans serif un"] # 0x278a (en: 'black circled sans serif one', DeepL translation) - - "➋": [t: "noir encerclé sans serif deux"] # 0x278b (en: 'black circled sans serif two', DeepL translation) - - "➌": [t: "noir encerclé sans serif trois"] # 0x278c (en: 'black circled sans serif three', DeepL translation) - - "➍": [t: "noir encerclé sans serif quatre"] # 0x278d (en: 'black circled sans serif four', DeepL translation) - - "➎": [t: "noir encerclé sans serif cinq"] # 0x278e (en: 'black circled sans serif five', DeepL translation) - - "➏": [t: "noir encerclé sans serif six"] # 0x278f (en: 'black circled sans serif six', DeepL translation) - - "➐": [t: "noir encerclé sans serif sept"] # 0x2790 (en: 'black circled sans serif seven', DeepL translation) - - "➑": [t: "sans serif noir encerclé at"] # 0x2791 (en: 'black circled sans serif eight', DeepL translation) - - "➒": [t: "noir encerclé sans empattement neuf"] # 0x2792 (en: 'black circled sans serif nine', DeepL translation) - - "➓": [t: "dix sans empattement cerclé de noir"] # 0x2793 (en: 'black circled sans serif ten', DeepL translation) + - "❶": [t: "un encerclé de noir"] # 0x2776 (en: 'black circled one', DeepL translation) + - "❷": [t: "deux encerclé de noir"] # 0x2777 (en: 'black circled two', DeepL translation) + - "❸": [t: "trois encerclé de noir"] # 0x2778 (en: 'black circled three', DeepL translation) + - "❹": [t: "quatre encerclé de noir"] # 0x2779 (en: 'black circled four', DeepL translation) + - "❺": [t: "cinq encerclé de noir"] # 0x277a (en: 'black circled five', DeepL translation) + - "❻": [t: "six encerclé de noir"] # 0x277b (en: 'black circled six', DeepL translation) + - "❼": [t: "sept encerclé de noir"] # 0x277c (en: 'black circled seven', DeepL translation) + - "❽": [t: "huit encerclé de noir"] # 0x277d (en: 'black circled eight', DeepL translation) + - "❾": [t: "neuf encerclé de noir"] # 0x277e (en: 'black circled nine', DeepL translation) + - "❿": [t: "dix encerclé de noir"] # 0x277f (en: 'black circled ten', DeepL translation) + - "➀": [t: "un encerclé sans serif"] # 0x2780 (en: 'circled sans serif one', DeepL translation) + - "➁": [t: "deux encerclé sans serif"] # 0x2781 (en: 'circled sans serif two', DeepL translation) + - "➂": [t: "trois encerclé sans serif"] # 0x2782 (en: 'circled sans serif three', DeepL translation) + - "➃": [t: "quatre encerclé sans serif"] # 0x2783 (en: 'circled sans serif four', DeepL translation) + - "➄": [t: "cinq encerclé sans serif"] # 0x2784 (en: 'circled sans serif five', DeepL translation) + - "➅": [t: "six encerclé sans serif"] # 0x2785 (en: 'circled sans serif six', DeepL translation) + - "➆": [t: "sept encerclé sans serif"] # 0x2786 (en: 'circled sans serif seven', DeepL translation) + - "➇": [t: "huit encerclé sans serif"] # 0x2787 (en: 'circled sans serif eight', DeepL translation) + - "➈": [t: "neuf encerclé sans serif"] # 0x2788 (en: 'circled sans serif nine', DeepL translation) + - "➉": [t: "dix encerclé sans serif"] # 0x2789 (en: 'circled sans serif ten', DeepL translation) + - "➊": [t: "un encerclé de noir sans serif"] # 0x278a (en: 'black circled sans serif one', DeepL translation) + - "➋": [t: "deux encerclé de nori sans serif"] # 0x278b (en: 'black circled sans serif two', DeepL translation) + - "➌": [t: "trois encerclé de noir sans serif"] # 0x278c (en: 'black circled sans serif three', DeepL translation) + - "➍": [t: "quatre encerclé de noir sans serif"] # 0x278d (en: 'black circled sans serif four', DeepL translation) + - "➎": [t: "cinq encerclé de noir sans serif"] # 0x278e (en: 'black circled sans serif five', DeepL translation) + - "➏": [t: "six encerclé de noir sans serif"] # 0x278f (en: 'black circled sans serif six', DeepL translation) + - "➐": [t: "sept encerclé de noir sans serif"] # 0x2790 (en: 'black circled sans serif seven', DeepL translation) + - "➑": [t: "huit encerclé de noir sans serif"] # 0x2791 (en: 'black circled sans serif eight', DeepL translation) + - "➒": [t: "neuf encerclé de noir sans serif"] # 0x2792 (en: 'black circled sans serif nine', DeepL translation) + - "➓": [t: "dix encerclé de noir sans serif"] # 0x2793 (en: 'black circled sans serif ten', DeepL translation) - "➔": [t: "flèche grasse vers la droite à pointe large"] # 0x2794 (en: 'heavy wide-headed rightwards arrow', DeepL: 'flèche lourde à tête large vers la droite') - "➕": [t: "plus gras"] # 0x2795 (en: 'heavy plus sign', DeepL: 'signe plus lourd') - "➖": [t: "moins gras"] # 0x2796 (en: 'heavy minus sign', DeepL: 'signe moins lourd') @@ -3125,116 +3132,123 @@ # fraktur chars in math alphabetic block and also MathType private use area # Some of these are reserved because they were used in Plane 0 -- that shouldn't be an issue other than causing the other chars to not display - "𝔄-𝔜": # 0x1d504 - 0x1d51d ('z' version is reserved) - - t: "fraktur" # (DeepL translation) - spell: "translate('.', '𝔄𝔅𝔆𝔇𝔈𝔉𝔊𝔋𝔌𝔍𝔎𝔏𝔐𝔑𝔒𝔓𝔔𝔕𝔖𝔗𝔘𝔙𝔚𝔛𝔜', 'ABCDEFGHIJKLMNOPQRSTUVWXY')" + - t: "gothique" # (DeepL translation) - "-": # 0xf000 - 0xf018 - - t: "fraktur" # (DeepL translation) - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXY')" + - t: "gothique" # (DeepL translation) - "𝔞-𝔷": # 0x1d51e - 0x1d537 - - t: "fraktur" # (DeepL translation) - spell: "translate('.', '𝔞𝔟𝔠𝔡𝔢𝔣𝔤𝔥𝔦𝔧𝔨𝔩𝔪𝔫𝔬𝔭𝔮𝔯𝔰𝔱𝔲𝔳𝔴𝔵𝔶𝔷', 'abcdefghijklmnopqrstuvwxyz')" + - t: "gothique" # (DeepL translation) + - "-": # 0xf01a - 0xf033 - - t: "fraktur" # (DeepL translation) - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - t: "gothique" # (DeepL translation) - "𝕬-𝖅": # 0x1D56C - 0x1D585 - - t: "fraktur" # (DeepL translation) + - spell: "translate('.', '𝕬𝕭𝕮𝕯𝕰𝕱𝕲𝕳𝕴𝕵𝕶𝕷𝕸𝕹𝕺𝕻𝕼𝕽𝕾𝕿𝖀𝖁𝖂𝖃𝖄𝖅', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - t: "gothique" # (DeepL translation) - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝕬𝕭𝕮𝕯𝕰𝕱𝕲𝕳𝕴𝕵𝕶𝕷𝕸𝕹𝕺𝕻𝕼𝕽𝕾𝕿𝖀𝖁𝖂𝖃𝖄𝖅', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "-": # 0xf040 - 0xf059 - - t: "fraktur" # (DeepL translation) + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - t: "gothique" # (DeepL translation) - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "𝖆-𝖟": # 0x1d586 - 0x1d59f - - t: "fraktur" # (DeepL translation) + - spell: "translate('.', '𝖆𝖇𝖈𝖉𝖊𝖋𝖌𝖍𝖎𝖏𝖐𝖑𝖒𝖓𝖔𝖕𝖖𝖗𝖘𝖙𝖚𝖛𝖜𝖝𝖞𝖟', 'abcdefghijklmnopqrstuvwxyz')" + - t: "gothique" # (DeepL translation) - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝖆𝖇𝖈𝖉𝖊𝖋𝖌𝖍𝖎𝖏𝖐𝖑𝖒𝖓𝖔𝖕𝖖𝖗𝖘𝖙𝖚𝖛𝖜𝖝𝖞𝖟', 'abcdefghijklmnopqrstuvwxyz')" + - "-": # 0xf05a - 0xf073 - - t: "fraktur" # (DeepL translation) + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - t: "gothique" # (DeepL translation) - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + # double struck (blackboard bold) chars in math alphabetic block and also MathType private use area # Some of these are reserved because they were used in Plane 0 -- that shouldn't be an issue other than causing the other chars to not display - "𝔸-𝕐": # 0x1d504 - 0x1d51d ('z' version is reserved) - - t: "double frappé" # (en: 'double struck', DeepL translation) - spell: "translate('.', '𝔸𝔹𝔺𝔻𝔼𝔽𝔾𝔿𝕀𝕁𝕂𝕃𝕄𝕅𝕆𝕇𝕈𝕉𝕊𝕋𝕌𝕍𝕎𝕏𝕐', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - + - t: "double barre" # (en: 'double struck', DeepL translation) - "-": # 0xf080 - 0xf098 - - t: "double frappé" # (en: 'double struck', DeepL translation) - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "𝕒-𝕫": # 0x1d552 - 0x1d56b - - t: "double frappé" # (en: 'double struck', DeepL translation) + - t: "double barre" # (en: 'double struck', DeepL translation) + - "𝕒-𝕫": # 0x1d552 - 0x1d56b - spell: "translate('.', '𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫', 'abcdefghijklmnopqrstuvwxyz')" + - t: "double barre" # (en: 'double struck', DeepL translation) - "-": # 0xf09a - 0xf0b3 - - t: "double frappé" # (en: 'double struck', DeepL translation) - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - t: "double barre" # (en: 'double struck', DeepL translation) - "𝟘-𝟡": # 0x1d7d8 - 0x1d7e1 - - t: "double frappé" # (en: 'double struck', DeepL translation) - spell: "translate('.', '𝟘𝟙𝟚𝟛𝟜𝟝𝟞𝟟𝟠𝟡', '0123456789')" + - t: "double barre" # (en: 'double struck', DeepL translation) - "-": # 0xf0c0 - 0xf0c9 - - t: "double frappé" # (en: 'double struck', DeepL translation) - spell: "translate('.', '', '0123456789')" + - t: "double barre" # (en: 'double struck', DeepL translation) - - "": [t: "double frappé nahblah"] # 0xf0ca (en: 'double struck nahblah', DeepL translation) + - "": [t: "double barre nahblah"] # 0xf0ca (en: 'double struck nahblah', DeepL translation) - "": [t: "constante d'euler doublement frappée"] # 0xf0cb (en: 'double struck euler constant', DeepL translation) # script chars in math alphabetic block and also MathType private use area - "𝒜-𝒵": # 0x1d49c - 0x1d4b5 - - t: "script" # (DeepL translation) - spell: "translate('.', '𝒜𝒝𝒞𝒟𝒠𝒡𝒢𝒣𝒤𝒥𝒦𝒧𝒨𝒩𝒪𝒫𝒬𝒭𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "-": # 0xf100 - 0xf119 - t: "script" # (DeepL translation) + - "-": # 0xf100 - 0xf119 - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "𝒶-𝓏": # 0x1d4b6 - 0x1d4cf - t: "script" # (DeepL translation) + - "𝒶-𝓏": # 0x1d4b6 - 0x1d4cf - spell: "translate('.', '𝒶𝒷𝒸𝒹𝒺𝒻𝒼𝒽𝒾𝒿𝓀𝓁𝓂𝓃𝓄𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf11a - 0xf133 - t: "script" # (DeepL translation) + - "-": # 0xf11a - 0xf133 - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - t: "script" # (DeepL translation) # bold script chars in math alphabetic block and also MathType private use area - "𝓐-𝓩": # 0x1d4d0 - 0x1d4e9 + - spell: "translate('.', '𝓐𝓑𝓒𝓓𝓔𝓕𝓖𝓗𝓘𝓙𝓚𝓛𝓜𝓝𝓞𝓟𝓠𝓡𝓢𝓣𝓤𝓥𝓦𝓧𝓨𝓩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - t: "script" # (DeepL translation) + - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝓐𝓑𝓒𝓓𝓔𝓕𝓖𝓗𝓘𝓙𝓚𝓛𝓜𝓝𝓞𝓟𝓠𝓡𝓢𝓣𝓤𝓥𝓦𝓧𝓨𝓩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - "-": # 0xf140 - 0xf159 + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - t: "script" # (DeepL translation) + - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - "𝓪-𝔃": # 0x1d4ea - 0x1d503 + - spell: "translate('.', '𝓪𝓫𝓬𝓭𝓮𝓯𝓰𝓱𝓲𝓳𝓴𝓵𝓶𝓷𝓸𝓹𝓺𝓻𝓼𝓽𝓾𝓿𝔀𝔁𝔂𝔃', 'abcdefghijklmnopqrstuvwxyz')" - t: "script" # (DeepL translation) + - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝓪𝓫𝓬𝓭𝓮𝓯𝓰𝓱𝓲𝓳𝓴𝓵𝓶𝓷𝓸𝓹𝓺𝓻𝓼𝓽𝓾𝓿𝔀𝔁𝔂𝔃', 'abcdefghijklmnopqrstuvwxyz')" + - "-": # 0xf15a - 0xf173 + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - t: "script" # (DeepL translation) + - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - "-": # 0xf180 - 0xf199 - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" @@ -3296,39 +3310,41 @@ # MathType only has a few of the cap Greek letters in PUA - "": # 0xf201 - 0xf209 - - t: "double frappé" # (en: 'double struck', DeepL translation) - spell: "translate('.', '', 'ΔΨΛΠΣΘΓΩΥ')" + - t: "double barre" # (en: 'double struck', DeepL translation) - "-": # 0xf220 - 0xf236 - - t: "double frappé" # (en: 'double struck', DeepL translation) - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + - t: "double barre" # (en: 'double struck', DeepL translation) - - "": [t: "double frappé final sigma"] # 0xf237 (en: 'double struck final sigma', DeepL translation) + - "": [t: "double barre final sigma"] # 0xf237 (en: 'double struck final sigma', DeepL translation) - "": [t: "double rho frappé"] # 0xf250 (en: 'double struck rho', DeepL translation) - "": [t: "phi doublement frappé"] # 0xf251 (en: 'double struck phi', DeepL translation) - "𝐀-𝐙": # 0x1d400 - 0x1d419 + - spell: "translate('.', '𝐀𝐁𝐂𝐃𝐄𝐅𝐆𝐇𝐈𝐉𝐊𝐋𝐌𝐍𝐎𝐏𝐐𝐑𝐒𝐓𝐔𝐕𝐖𝐗𝐘𝐙', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝐀𝐁𝐂𝐃𝐄𝐅𝐆𝐇𝐈𝐉𝐊𝐋𝐌𝐍𝐎𝐏𝐐𝐑𝐒𝐓𝐔𝐕𝐖𝐗𝐘𝐙', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "-": # 0xf260 - 0xf279 + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - "𝐚-𝐳": # 0x1d41a - 0x1d433 + - spell: "translate('.', '𝐚𝐛𝐜𝐝𝐞𝐟𝐠𝐡𝐢𝐣𝐤𝐥𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐭𝐮𝐯𝐰𝐱𝐲𝐳', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝐚𝐛𝐜𝐝𝐞𝐟𝐠𝐡𝐢𝐣𝐤𝐥𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐭𝐮𝐯𝐰𝐱𝐲𝐳', 'abcdefghijklmnopqrstuvwxyz')" - "-": # 0xf27a - 0xf293 + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - "𝐴-𝑍": # 0x1d434 - 0x1d44d - spell: "translate('.', '𝐴𝐵𝐶𝐷𝐸𝐹𝐺𝐻𝐼𝐽𝐾𝐿𝑀𝑁𝑂𝑃𝑄𝑅𝑆𝑇𝑈𝑉𝑊𝑋𝑌𝑍', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" @@ -3344,31 +3360,33 @@ - "𝑨-𝒁": # 0x1d468 - 0x1d481 # - t: "bold italic" + - spell: "translate('.', '𝑨𝑩𝑪𝑫𝑬𝑭𝑮𝑯𝑰𝑱𝑲𝑳𝑴𝑵𝑶𝑷𝑸𝑹𝑺𝑻𝑼𝑽𝑾𝑿𝒀𝒁', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝑨𝑩𝑪𝑫𝑬𝑭𝑮𝑯𝑰𝑱𝑲𝑳𝑴𝑵𝑶𝑷𝑸𝑹𝑺𝑻𝑼𝑽𝑾𝑿𝒀𝒁', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "-": # 0xf2c8 - 0xf2e1 # - t: "bold italic" + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - "𝒂-𝒛": # 0x1d482 - 0x1d49b # - t: "bold italic" + - spell: "translate('.', '𝒂𝒃𝒄𝒅𝒆𝒇𝒈𝒉𝒊𝒋𝒌𝒍𝒎𝒏𝒐𝒑𝒒𝒓𝒔𝒕𝒖𝒗𝒘𝒙𝒚𝒛', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝒂𝒃𝒄𝒅𝒆𝒇𝒈𝒉𝒊𝒋𝒌𝒍𝒎𝒏𝒐𝒑𝒒𝒓𝒔𝒕𝒖𝒗𝒘𝒙𝒚𝒛', 'abcdefghijklmnopqrstuvwxyz')" - "-": # 0xf2e2 - 0xf2fb # - t: "bold italic" + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - "𝖠-𝖹": # 0x1d5a0 - 0x1d5b9 - spell: "translate('.', '𝖠𝖡𝖢𝖣𝖤𝖥𝖦𝖧𝖨𝖩𝖪𝖫𝖬𝖭𝖮𝖯𝖰𝖱𝖲𝖳𝖴𝖵𝖶𝖷𝖸𝖹', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" @@ -3383,28 +3401,30 @@ - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - "𝗔-𝗭": # 0x1d5d4 - 0x1d5ed + - spell: "translate('.', '𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬𝗭', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬𝗭', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "-": # 0xf334 - 0xf34d + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - "𝗮-𝘇": # 0x1d5ee - 0x1d607 + - spell: "translate('.', '𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇', 'abcdefghijklmnopqrstuvwxyz')" - "-": # 0xf34e - 0xf367 + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - "𝘈-𝘡": # 0x1d608 - 0x1d621 # - t: "italic" - spell: "translate('.', '𝘈𝘉𝘊𝘋𝘌𝘍𝘎𝘏𝘐𝘑𝘒𝘓𝘔𝘕𝘖𝘗𝘘𝘙𝘚𝘛𝘜𝘝𝘞𝘟𝘠𝘡', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" @@ -3422,31 +3442,33 @@ - "𝘼-𝙕": # 0x1d63c - 0x1d655 # - t: "bold italic" + - spell: "translate('.', '𝘼𝘽𝘾𝘿𝙀𝙁𝙂𝙃𝙄𝙅𝙆𝙇𝙈𝙉𝙊𝙋𝙌𝙍𝙎𝙏𝙐𝙑𝙒𝙓𝙔𝙕', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝘼𝘽𝘾𝘿𝙀𝙁𝙂𝙃𝙄𝙅𝙆𝙇𝙈𝙉𝙊𝙋𝙌𝙍𝙎𝙏𝙐𝙑𝙒𝙓𝙔𝙕', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "-": # 0xf39c - 0xf3b5 # - t: "bold italic" + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - "𝙖-𝙯": # 0x1d656 - 0x1d66f # - t: "bold italic" + - spell: "translate('.', '𝙖𝙗𝙘𝙙𝙚𝙛𝙜𝙝𝙞𝙟𝙠𝙡𝙢𝙣𝙤𝙥𝙦𝙧𝙨𝙩𝙪𝙫𝙬𝙭𝙮𝙯', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝙖𝙗𝙘𝙙𝙚𝙛𝙜𝙝𝙞𝙟𝙠𝙡𝙢𝙣𝙤𝙥𝙦𝙧𝙨𝙩𝙪𝙫𝙬𝙭𝙮𝙯', 'abcdefghijklmnopqrstuvwxyz')" - "-": # 0xf3b6 - 0xf3cf # - t: "bold italic" + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - "𝙰-𝚉": # 0x1d670 - 0x1d689 - spell: "translate('.', '𝙰𝙱𝙲𝙳𝙴𝙵𝙶𝙷𝙸𝙹𝙺𝙻𝙼𝙽𝙾𝙿𝚀𝚁𝚂𝚃𝚄𝚅𝚆𝚇𝚈𝚉', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" @@ -3465,43 +3487,46 @@ - "𝚥": [t: "dotless j"] # 0x1d6a5 - "𝚨-𝛀": # 0x1d6a8 - 0x1d6c0 + - spell: "translate('.', '𝚨𝚩𝚪𝚫𝚬𝚭𝚮𝚯𝚰𝚱𝚲𝚳𝚴𝚵𝚶𝚷𝚸𝚹𝚺𝚻𝚼𝚽𝚾𝚿𝛀', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝚨𝚩𝚪𝚫𝚬𝚭𝚮𝚯𝚰𝚱𝚲𝚳𝚴𝚵𝚶𝚷𝚸𝚹𝚺𝚻𝚼𝚽𝚾𝚿𝛀', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - "-": # 0xf408 - 0xf420 + - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + - "𝛂-𝛚": # 0x1d6c2 - 0x1d6da + - spell: "translate('.', '𝛂𝛃𝛄𝛅𝛆𝛇𝛈𝛉𝛊𝛋𝛌𝛍𝛎𝛏𝛐𝛑𝛒𝛓𝛔𝛕𝛖𝛗𝛘𝛙𝛚', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝛂𝛃𝛄𝛅𝛆𝛇𝛈𝛉𝛊𝛋𝛌𝛍𝛎𝛏𝛐𝛑𝛒𝛓𝛔𝛕𝛖𝛗𝛘𝛙𝛚', 'αβγδεζηθικλμνξοπρςστυφχψω')" - "-": # 0xf422 - 0xf43a + - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" + - "": [t: "gras nahblah"] # 0xf421 (en: 'bold nahblah', DeepL translation) - "𝛁": [t: "symbole mathématique gras nabla"] # 0x1d6c1 (en: 'bold nahblah', DeepL: 'gras nahblah') - "𝛛𝛜𝛝𝛞𝛟𝛠𝛡": # 0x1D6DB - 0x1D6E1 + - spell: "translate('.', '𝛛𝛜𝛝𝛞𝛟𝛠𝛡', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝛛𝛜𝛝𝛞𝛟𝛠𝛡', '∂εθκφρπ')" - "": # 0xF43C - 0xF441 + - spell: "translate('.', '', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', '∂εθκφρπ')" + - "𝛢-𝛺": # 0x1d6e2 - 0x1d6fa # - t: "italic" @@ -3532,155 +3557,166 @@ - "𝜜-𝜴": # 0x1d71c - 0x1d734 # - t: "bold italic" + - spell: "translate('.', '𝜜𝜝𝜞𝜟𝜠𝜡𝜢𝜣𝜤𝜥𝜦𝜧𝜨𝜩𝜪𝜫𝜬𝜭𝜮𝜯𝜰𝜱𝜲𝜳𝜴', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝜜𝜝𝜞𝜟𝜠𝜡𝜢𝜣𝜤𝜥𝜦𝜧𝜨𝜩𝜪𝜫𝜬𝜭𝜮𝜯𝜰𝜱𝜲𝜳𝜴', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - "-": # 0xf47c - 0xf494 # - t: "bold italic" + - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + - "𝜶-𝝎": # 0x1d736 - 0x1d74e # - t: "bold italic" + - spell: "translate('.', '𝜶𝜷𝜸𝜹𝜺𝜻𝜼𝜽𝜾𝜿𝝀𝝁𝝂𝝃𝝄𝝅𝝆𝝇𝝈𝝉𝝊𝝋𝝌𝝍𝝎', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝜶𝜷𝜸𝜹𝜺𝜻𝜼𝜽𝜾𝜿𝝀𝝁𝝂𝝃𝝄𝝅𝝆𝝇𝝈𝝉𝝊𝝋𝝌𝝍𝝎', 'αβγδεζηθικλμνξοπρςστυφχψω')" - "-": # 0xf496 - 0xf4ae # - t: "bold italic" + - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" + - "𝝏𝝐𝝑𝝒𝝓𝝔𝝕": # 0x1d74f - 0x1d755 # - t: "bold italic" + - spell: "translate('.', '𝝏𝝐𝝑𝝒𝝓𝝔𝝕', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝝏𝝐𝝑𝝒𝝓𝝔𝝕', '∂εθκφρπ')" - "": # 0xf422 - 0xf43a # - t: "bold italic" + - spell: "translate('.', '', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', '∂εθκφρπ')" + - "𝜵": [t: "symbole mathématique gras italique nabla"] # 0x1d735 (en: 'bold italic nahblah', DeepL: 'gras italique nahblah') - "": [t: "gras italique nahblah"] # 0xf495 (en: 'bold italic nahblah', DeepL translation) - "𝝖-𝝮": # 0x1d756 - 0x1d76e + - spell: "translate('.', '𝝖𝝗𝝘𝝙𝝚𝝛𝝜𝝝𝝞𝝟𝝠𝝡𝝢𝝣𝝤𝝥𝝦𝝧𝝨𝝩𝝪𝝫𝝬𝝭𝝮', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝝖𝝗𝝘𝝙𝝚𝝛𝝜𝝝𝝞𝝟𝝠𝝡𝝢𝝣𝝤𝝥𝝦𝝧𝝨𝝩𝝪𝝫𝝬𝝭𝝮', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - "-": # 0xf4b6 - 0xf4ce + - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + - "𝝰-𝞈": # 0x1d770 - 0x1d788 + - spell: "translate('.', '𝝰𝝱𝝲𝝳𝝴𝝵𝝶𝝷𝝸𝝹𝝺𝝻𝝼𝝽𝝾𝝿𝞀𝞁𝞂𝞃𝞄𝞅𝞆𝞇𝞈', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝝰𝝱𝝲𝝳𝝴𝝵𝝶𝝷𝝸𝝹𝝺𝝻𝝼𝝽𝝾𝝿𝞀𝞁𝞂𝞃𝞄𝞅𝞆𝞇𝞈', 'αβγδεζηθικλμνξοπρςστυφχψω')" - "-": # 0xf4d0 - 0xf4e8 + - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" + - "𝞉𝞊𝞋𝞌𝞍𝞎𝞏": # 0x1d789 - 0x1d78f + - spell: "translate('.', '𝞉𝞊𝞋𝞌𝞍𝞎𝞏', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝞉𝞊𝞋𝞌𝞍𝞎𝞏', '∂εθκφρπ')" - "": # 0xf4e9 - 0xf4ef + - spell: "translate('.', '', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', '∂εθκφρπ')" + - "": [t: "gras nahblah"] # 0xf4cf (en: 'bold nahblah', DeepL translation) - "𝝯": [t: "symbole mathématique gras sans empattement nabla"] # 0x1d76f (en: 'bold nahblah', DeepL: 'gras nahblah') - "𝞐-𝞨": # 0x1d790 - 0x1d7a8 # - t: "bold italic" + - spell: "translate('.', '𝞐𝞑𝞒𝞓𝞔𝞕𝞖𝞗𝞘𝞙𝞚𝞛𝞜𝞝𝞞𝞟𝞠𝞡𝞢𝞣𝞤𝞥𝞦𝞧𝞨', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝞐𝞑𝞒𝞓𝞔𝞕𝞖𝞗𝞘𝞙𝞚𝞛𝞜𝞝𝞞𝞟𝞠𝞡𝞢𝞣𝞤𝞥𝞦𝞧𝞨', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - "-": # 0xf4f0 - 0xf508 # - t: "bold italic" + - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + - "𝞪-𝟂": # 0x1d7aa - 0x1d7c2 # - t: "bold italic" + - spell: "translate('.', '𝞪𝞫𝞬𝞭𝞮𝞯𝞰𝞱𝞲𝞳𝞴𝞵𝞶𝞷𝞸𝞹𝞺𝞻𝞼𝞽𝞾𝞿𝟀𝟁𝟂', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝞪𝞫𝞬𝞭𝞮𝞯𝞰𝞱𝞲𝞳𝞴𝞵𝞶𝞷𝞸𝞹𝞺𝞻𝞼𝞽𝞾𝞿𝟀𝟁𝟂', 'αβγδεζηθικλμνξοπρςστυφχψω')" - "-": # 0xf50a - 0xf522 # - t: "bold italic" + - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" + - "𝟃𝟄𝟅𝟆𝟇𝟈𝟉": # 0x1d7c3 - 0x1d7c9 # - t: "bold italic" + - spell: "translate('.', '𝟃𝟄𝟅𝟆𝟇𝟈𝟉', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝟃𝟄𝟅𝟆𝟇𝟈𝟉', '∂εθκφρπ')" - "": # 0xf523 - 0xf529 # - t: "bold italic" + - spell: "translate('.', '', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', '∂εθκφρπ')" + - "": [t: "gras nahblah"] # 0xf509 (en: 'bold nahblah', DeepL translation) - "𝞩": [t: "symbole mathématique sans empattement italique gras nabla"] # 0x1d7a9 (en: 'bold nahblah', DeepL: 'gras nahblah') - "-": # 0xf52e - 0xf537 (old MathType) + - spell: "translate('.', '', '0123456789')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', '0123456789')" + - "𝟎-𝟗": # 0x1d7ce - 0x1d7d7 + - spell: "translate('.', '𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗', '0123456789')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗', '0123456789')" - "-": # 0xf52e - 0xf537 (old MathType) + - spell: "translate('.', '', '0123456789')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '', '0123456789')" + - "𝟬-𝟵": # 0x1D7EC - 0x1D7F5 + - spell: "translate('.', '𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵', '0123456789')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - - spell: "translate('.', '𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵', '0123456789')" - "-": # 0xf556 - 0xf55f (old MathType) - spell: "translate('.', '', '0123456789')" diff --git a/tests/Languages/fr/alphabets.rs b/tests/Languages/fr/alphabets.rs index 810cedaa4..b14926fc8 100644 --- a/tests/Languages/fr/alphabets.rs +++ b/tests/Languages/fr/alphabets.rs @@ -4,394 +4,392 @@ use crate::common::*; use anyhow::Result; -// AI generated #[test] fn special_alphabet_chars() -> Result<()> { let expr = " ,"; - test("fr", "SimpleSpeak", expr, "g ronde minuscule majuscule h, comma; g ronde minuscule majuscule c")?; + test("fr", "SimpleSpeak", expr, "h majuscule gothique, virgule, c majuscule gothique")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "g ronde minuscule majuscule h, comma; g ronde minuscule majuscule pi")?; + test("fr", "SimpleSpeak", expr, "h majuscule double barre, virgule; pi majuscule double barre")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "constante de planck sur deux pi majuscule i; comma; constante de planck sur deux pi majuscule m")?; + test("fr", "SimpleSpeak", expr, "i majuscule script, virgule, m majuscule script")?; Ok(()) } -// AI generated + #[test] fn greek() -> Result<()> { let expr = " Α,Ω"; - test("fr", "SimpleSpeak", expr, "majuscule alpha comma, majuscule oméga")?; + test("fr", "SimpleSpeak", expr, "alpha majuscule virgule, oméga majuscule")?; let expr = " α,ω"; - test("fr", "SimpleSpeak", expr, "alpha comma, oméga")?; + test("fr", "SimpleSpeak", expr, "alpha virgule, oméga")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "double frappé majuscule delta, comma; double frappé majuscule upsilon")?; + test("fr", "SimpleSpeak", expr, "delta majuscule double barre, virgule; upsilon majuscule double barre")?; let expr = " α,ω"; - test("fr", "SimpleSpeak", expr, "alpha comma, oméga")?; + test("fr", "SimpleSpeak", expr, "alpha virgule, oméga")?; Ok(()) } -// AI generated + #[test] fn cap_cyrillic() -> Result<()> { let expr = " А,Я"; - test("fr", "SimpleSpeak", expr, "majuscule a comma, majuscule ya")?; + test("fr", "SimpleSpeak", expr, "a majuscule virgule, ya majuscule")?; Ok(()) } -// AI generated + #[test] fn parenthesized() -> Result<()> { let expr = " ,"; - test("fr", "SimpleSpeak", expr, "entre parenthèses a, comma, entre parenthèses z")?; + test("fr", "SimpleSpeak", expr, "a entre parenthèses, virgule, z entre parenthèses")?; Ok(()) } -// AI generated + #[test] fn circled() -> Result<()> { let expr = " ,"; - test("fr", "SimpleSpeak", expr, "encerclé majuscule a, comma, encerclé majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule encerclé, virgule, z majuscule encerclé")?; let expr = " 🅐,🅩"; - test("fr", "SimpleSpeak", expr, "encerclé de noir majuscule a, comma; encerclé de noir majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule encerclé de noir, virgule; z majuscule encerclé de noir")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "encerclé a comma, encerclé z")?; + test("fr", "SimpleSpeak", expr, "a encerclé virgule, z encerclé")?; Ok(()) } -// AI generated + #[test] fn fraktur() -> Result<()> { let expr = " 𝔄,𝔜"; - test("fr", "SimpleSpeak", expr, "fraktur majuscule a, comma, fraktur majuscule y")?; + test("fr", "SimpleSpeak", expr, "a majuscule gothique, virgule, y majuscule gothique")?; let expr = " 𝔞,𝔷"; - test("fr", "SimpleSpeak", expr, "fraktur a comma, fraktur z")?; + test("fr", "SimpleSpeak", expr, "a gothique virgule, z gothique")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "fraktur majuscule a, comma, fraktur majuscule y")?; + test("fr", "SimpleSpeak", expr, "a majuscule gothique, virgule, y majuscule gothique")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "fraktur a comma, fraktur z")?; + test("fr", "SimpleSpeak", expr, "a gothique virgule, z gothique")?; Ok(()) } -// AI generated + #[test] fn bold_fraktur() -> Result<()> { let expr = " 𝕬,𝖅"; - test("fr", "SimpleSpeak", expr, "fraktur gras majuscule a, comma, fraktur gras majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule gothique gras, virgule; z majuscule gothique gras")?; let expr = " 𝖆,𝖟"; - test("fr", "SimpleSpeak", expr, "fraktur gras a comma, fraktur gras z")?; + test("fr", "SimpleSpeak", expr, "a gothique gras virgule, z gothique gras")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "fraktur gras majuscule a, comma, fraktur gras majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule gothique gras, virgule; z majuscule gothique gras")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "fraktur gras a comma, fraktur gras z")?; + test("fr", "SimpleSpeak", expr, "a gothique gras virgule, z gothique gras")?; Ok(()) } -// AI generated + #[test] fn double_struck() -> Result<()> { let expr = " 𝔸,𝕐"; - test("fr", "SimpleSpeak", expr, "double frappé majuscule a, comma, double frappé majuscule y")?; + test("fr", "SimpleSpeak", expr, "a majuscule double barre, virgule; y majuscule double barre")?; let expr = " 𝕒,𝕫"; - test("fr", "SimpleSpeak", expr, "double frappé a comma, double frappé z")?; + test("fr", "SimpleSpeak", expr, "a double barre virgule, z double barre")?; let expr = " 𝟘,𝟡"; - test("fr", "SimpleSpeak", expr, "double frappé 0 comma, double frappé 9")?; + test("fr", "SimpleSpeak", expr, "0 double barre virgule, 9 double barre")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "double frappé majuscule a, comma, double frappé majuscule y")?; + test("fr", "SimpleSpeak", expr, "a majuscule double barre, virgule; y majuscule double barre")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "double frappé a comma, double frappé z")?; + test("fr", "SimpleSpeak", expr, "a double barre virgule, z double barre")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "double frappé 0 comma, double frappé 9")?; + test("fr", "SimpleSpeak", expr, "0 double barre virgule, 9 double barre")?; Ok(()) } -// AI generated + #[test] fn script() -> Result<()> { let expr = " 𝒜,𝒵"; - test("fr", "SimpleSpeak", expr, "script majuscule a, comma, script majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule script, virgule, z majuscule script")?; let expr = " 𝒶,𝓏"; - test("fr", "SimpleSpeak", expr, "script a comma, script z")?; + test("fr", "SimpleSpeak", expr, "a script virgule, z script")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "script majuscule a, comma, script majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule script, virgule, z majuscule script")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "script a comma, script z")?; + test("fr", "SimpleSpeak", expr, "a script virgule, z script")?; Ok(()) } -// AI generated + #[test] fn bold_script() -> Result<()> { let expr = " 𝓐,𝓩"; - test("fr", "SimpleSpeak", expr, "script gras majuscule a, comma, script gras majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule script gras, virgule; z majuscule script gras")?; let expr = " 𝓪,𝔃"; - test("fr", "SimpleSpeak", expr, "script gras a comma, script gras z")?; + test("fr", "SimpleSpeak", expr, "a script gras virgule, z script gras")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "script gras majuscule a, comma, script gras majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule script gras, virgule; z majuscule script gras")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "script gras a comma, script gras z")?; + test("fr", "SimpleSpeak", expr, "a script gras virgule, z script gras")?; Ok(()) } -// AI generated + #[test] fn bold() -> Result<()> { let expr = " 𝐀,𝐙"; - test("fr", "SimpleSpeak", expr, "gras majuscule a comma, gras majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule gras virgule, z majuscule gras")?; let expr = " 𝐚,𝐳"; - test("fr", "SimpleSpeak", expr, "gras a comma, gras z")?; + test("fr", "SimpleSpeak", expr, "a gras virgule, z gras")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "gras majuscule a comma, gras majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule gras virgule, z majuscule gras")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "gras a comma, gras z")?; + test("fr", "SimpleSpeak", expr, "a gras virgule, z gras")?; Ok(()) } -// AI generated + #[test] fn italic() -> Result<()> { let expr = " 𝐴,𝑍"; - test("fr", "SimpleSpeak", expr, "majuscule a comma, majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule virgule, z majuscule")?; let expr = " 𝑎,𝑧"; - test("fr", "SimpleSpeak", expr, "a comma, z")?; + test("fr", "SimpleSpeak", expr, "a virgule, z")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "majuscule a comma, majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule virgule, z majuscule")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "a comma, z")?; + test("fr", "SimpleSpeak", expr, "a virgule, z")?; Ok(()) } -// AI generated + #[test] fn sans_serif() -> Result<()> { let expr = " 𝖠,𝖹"; - test("fr", "SimpleSpeak", expr, "majuscule a comma, majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule virgule, z majuscule")?; let expr = " 𝖺,𝗓"; - test("fr", "SimpleSpeak", expr, "a comma, z")?; + test("fr", "SimpleSpeak", expr, "a virgule, z")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "majuscule a comma, majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule virgule, z majuscule")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "a comma, z")?; + test("fr", "SimpleSpeak", expr, "a virgule, z")?; Ok(()) } -// AI generated + #[test] fn sans_serif_bold() -> Result<()> { let expr = " 𝗔,𝗭"; - test("fr", "SimpleSpeak", expr, "gras majuscule a comma, gras majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule gras virgule, z majuscule gras")?; let expr = " 𝗮,𝘇"; - test("fr", "SimpleSpeak", expr, "gras a comma, gras z")?; + test("fr", "SimpleSpeak", expr, "a gras virgule, z gras")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "gras majuscule a comma, gras majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule gras virgule, z majuscule gras")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "gras a comma, gras z")?; + test("fr", "SimpleSpeak", expr, "a gras virgule, z gras")?; Ok(()) } -// AI generated + #[test] fn sans_serif_italic() -> Result<()> { let expr = " 𝘈,𝘡"; - test("fr", "SimpleSpeak", expr, "majuscule a comma, majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule virgule, z majuscule")?; let expr = " 𝘢,𝘻"; - test("fr", "SimpleSpeak", expr, "a comma, z")?; + test("fr", "SimpleSpeak", expr, "a virgule, z")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "majuscule a comma, majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule virgule, z majuscule")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "a comma, z")?; + test("fr", "SimpleSpeak", expr, "a virgule, z")?; Ok(()) } -// AI generated + #[test] fn sans_serif_bold_italic() -> Result<()> { let expr = " 𝘼,𝙕"; - test("fr", "SimpleSpeak", expr, "gras majuscule a comma, gras majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule gras virgule, z majuscule gras")?; let expr = " 𝙖,𝙯"; - test("fr", "SimpleSpeak", expr, "gras a comma, gras z")?; + test("fr", "SimpleSpeak", expr, "a gras virgule, z gras")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "gras majuscule a comma, gras majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule gras virgule, z majuscule gras")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "gras a comma, gras z")?; + test("fr", "SimpleSpeak", expr, "a gras virgule, z gras")?; Ok(()) } -// AI generated + #[test] fn monospace() -> Result<()> { let expr = " 𝙰,𝚉"; - test("fr", "SimpleSpeak", expr, "majuscule a comma, majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule virgule, z majuscule")?; let expr = " 𝚊,𝚣"; - test("fr", "SimpleSpeak", expr, "a comma, z")?; + test("fr", "SimpleSpeak", expr, "a virgule, z")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "majuscule a comma, majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule virgule, z majuscule")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "a comma, z")?; + test("fr", "SimpleSpeak", expr, "a virgule, z")?; Ok(()) } -// AI generated + #[test] fn bold_greek() -> Result<()> { let expr = " 𝚨,𝛀"; - test("fr", "SimpleSpeak", expr, "gras majuscule alpha, comma, gras majuscule oméga")?; + test("fr", "SimpleSpeak", expr, "alpha majuscule gras, virgule, oméga majuscule gras")?; let expr = " 𝛂,𝛚"; - test("fr", "SimpleSpeak", expr, "gras alpha comma, gras oméga")?; + test("fr", "SimpleSpeak", expr, "alpha gras virgule, oméga gras")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "gras majuscule alpha, comma, gras majuscule oméga")?; + test("fr", "SimpleSpeak", expr, "alpha majuscule gras, virgule, oméga majuscule gras")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "gras alpha comma, gras oméga")?; + test("fr", "SimpleSpeak", expr, "alpha gras virgule, oméga gras")?; Ok(()) } -// AI generated + #[test] fn bold_greek_others() -> Result<()> { let expr = " 𝛛,𝛡"; - test("fr", "SimpleSpeak", expr, "gras dérivée partielle, comma, gras pi")?; + test("fr", "SimpleSpeak", expr, "dérivée partielle gras, virgule, pi gras")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "gras dérivée partielle, comma, gras pi")?; + test("fr", "SimpleSpeak", expr, "dérivée partielle gras, virgule, pi gras")?; Ok(()) } -// AI generated #[test] fn italic_greek() -> Result<()> { let expr = " 𝛢,𝛺"; - test("fr", "SimpleSpeak", expr, "majuscule alpha comma, majuscule oméga")?; + test("fr", "SimpleSpeak", expr, "alpha majuscule virgule, oméga majuscule")?; let expr = " 𝛼,𝜔"; - test("fr", "SimpleSpeak", expr, "alpha comma, oméga")?; + test("fr", "SimpleSpeak", expr, "alpha virgule, oméga")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "majuscule alpha comma, majuscule oméga")?; + test("fr", "SimpleSpeak", expr, "alpha majuscule virgule, oméga majuscule")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "alpha comma, oméga")?; + test("fr", "SimpleSpeak", expr, "alpha virgule, oméga")?; Ok(()) } -// AI generated + #[test] fn italic_greek_others() -> Result<()> { let expr = " 𝜕,𝜛"; - test("fr", "SimpleSpeak", expr, "dérivée partielle, comma, pi")?; + test("fr", "SimpleSpeak", expr, "dérivée partielle, virgule, pi")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "dérivée partielle, comma, pi")?; + test("fr", "SimpleSpeak", expr, "dérivée partielle, virgule, pi")?; Ok(()) } -// AI generated + #[test] fn bold_italic_greek() -> Result<()> { let expr = " 𝜜,𝜴"; - test("fr", "SimpleSpeak", expr, "gras majuscule alpha, comma, gras majuscule oméga")?; + test("fr", "SimpleSpeak", expr, "alpha majuscule gras, virgule, oméga majuscule gras")?; let expr = " 𝜶,𝝎"; - test("fr", "SimpleSpeak", expr, "gras alpha comma, gras oméga")?; + test("fr", "SimpleSpeak", expr, "alpha gras virgule, oméga gras")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "gras majuscule alpha, comma, gras majuscule oméga")?; + test("fr", "SimpleSpeak", expr, "alpha majuscule gras, virgule, oméga majuscule gras")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "gras alpha comma, gras oméga")?; + test("fr", "SimpleSpeak", expr, "alpha gras virgule, oméga gras")?; Ok(()) } -// AI generated + #[test] fn bold_italic_greek_others() -> Result<()> { let expr = " 𝝏,𝝕"; - test("fr", "SimpleSpeak", expr, "gras dérivée partielle, comma, gras pi")?; + test("fr", "SimpleSpeak", expr, "dérivée partielle gras, virgule, pi gras")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "gras dérivée partielle, comma, gras pi")?; + test("fr", "SimpleSpeak", expr, "dérivée partielle gras, virgule, pi gras")?; Ok(()) } -// AI generated + #[test] fn sans_serif_bold_greek() -> Result<()> { let expr = " 𝝖,𝝮"; - test("fr", "SimpleSpeak", expr, "gras majuscule alpha, comma, gras majuscule oméga")?; + test("fr", "SimpleSpeak", expr, "alpha majuscule gras, virgule, oméga majuscule gras")?; let expr = " 𝝰,𝞈"; - test("fr", "SimpleSpeak", expr, "gras alpha comma, gras oméga")?; + test("fr", "SimpleSpeak", expr, "alpha gras virgule, oméga gras")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "gras majuscule alpha, comma, gras majuscule oméga")?; + test("fr", "SimpleSpeak", expr, "alpha majuscule gras, virgule, oméga majuscule gras")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "gras alpha comma, gras oméga")?; + test("fr", "SimpleSpeak", expr, "alpha gras virgule, oméga gras")?; Ok(()) } -// AI generated + #[test] fn sans_serif_bold_greek_others() -> Result<()> { let expr = " 𝞉,𝞏"; - test("fr", "SimpleSpeak", expr, "gras dérivée partielle, comma, gras pi")?; + test("fr", "SimpleSpeak", expr, "dérivée partielle gras, virgule, pi gras")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "gras dérivée partielle, comma, gras pi")?; + test("fr", "SimpleSpeak", expr, "dérivée partielle gras, virgule, pi gras")?; Ok(()) } -// AI generated + #[test] fn sans_serif_bold_italic_greek() -> Result<()> { let expr = " 𝞐,𝞨"; - test("fr", "SimpleSpeak", expr, "gras majuscule alpha, comma, gras majuscule oméga")?; + test("fr", "SimpleSpeak", expr, "alpha majuscule gras, virgule, oméga majuscule gras")?; let expr = " 𝞪,𝟂"; - test("fr", "SimpleSpeak", expr, "gras alpha comma, gras oméga")?; + test("fr", "SimpleSpeak", expr, "alpha gras virgule, oméga gras")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "gras majuscule alpha, comma, gras majuscule oméga")?; + test("fr", "SimpleSpeak", expr, "alpha majuscule gras, virgule, oméga majuscule gras")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "gras alpha comma, gras oméga")?; + test("fr", "SimpleSpeak", expr, "alpha gras virgule, oméga gras")?; Ok(()) } -// AI generated + #[test] fn sans_serif_bold_italic_greek_others() -> Result<()> { let expr = " 𝟃,𝟉"; - test("fr", "SimpleSpeak", expr, "gras dérivée partielle, comma, gras pi")?; + test("fr", "SimpleSpeak", expr, "dérivée partielle gras, virgule, pi gras")?; // MathType private space versions let expr = " ,"; - test("fr", "SimpleSpeak", expr, "gras dérivée partielle, comma, gras pi")?; + test("fr", "SimpleSpeak", expr, "dérivée partielle gras, virgule, pi gras")?; Ok(()) } -// AI generated + #[test] fn pua_regular() -> Result<()> { let expr = " ,"; - test("fr", "SimpleSpeak", expr, "majuscule a comma, majuscule z")?; + test("fr", "SimpleSpeak", expr, "a majuscule virgule, z majuscule")?; Ok(()) } -// AI generated + #[test] fn turned() -> Result<()> { let expr = " ,"; - test("fr", "SimpleSpeak", expr, "tourné majuscule f, comma; e ronde minuscule majuscule y")?; + test("fr", "SimpleSpeak", expr, "f majuscule tourné, virgule; y majuscule tourné sans-serif")?; Ok(()) } -// AI generated + #[test] fn unicode_typo_regressions() -> Result<()> { test("fr", "SimpleSpeak", "", "exposant i")?; @@ -399,18 +397,18 @@ fn unicode_typo_regressions() -> Result<()> { Ok(()) } -// AI generated + #[test] fn enclosed_numbers() -> Result<()> { let expr = " ,"; - test("fr", "SimpleSpeak", expr, "encerclé 1 comma, encerclé 9")?; + test("fr", "SimpleSpeak", expr, "1 encerclé virgule, 9 encerclé")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "noir encerclé un comma, numéro cinquante encerclé")?; + test("fr", "SimpleSpeak", expr, "un encerclé de noir, virgule; numéro cinquante encerclé")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "entre parenthèses 1, comma, entre parenthèses 9")?; + test("fr", "SimpleSpeak", expr, "1 entre parenthèses, virgule, 9 entre parenthèses")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "1 avec point comma, 9 avec point")?; + test("fr", "SimpleSpeak", expr, "1 avec point virgule, 9 avec point")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "double encerclé 1 comma, double encerclé 9")?; + test("fr", "SimpleSpeak", expr, "1 double encerclé, virgule, 9 double encerclé")?; Ok(()) } From 41f7d3d7b95c93d509a7daec2df9f2980666ca13 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Wed, 20 May 2026 22:13:30 -0400 Subject: [PATCH 21/53] wip chemistry.rs --- Rules/Languages/fr/SharedRules/general.yaml | 15 +- tests/Languages/fr.rs | 1 + tests/Languages/fr/chemistry.rs | 769 ++++++++++++++++++++ 3 files changed, 776 insertions(+), 9 deletions(-) create mode 100644 tests/Languages/fr/chemistry.rs diff --git a/Rules/Languages/fr/SharedRules/general.yaml b/Rules/Languages/fr/SharedRules/general.yaml index 3aa8bf124..3c65077aa 100644 --- a/Rules/Languages/fr/SharedRules/general.yaml +++ b/Rules/Languages/fr/SharedRules/general.yaml @@ -817,11 +817,8 @@ replace: - x: "*[2]" - test: - if: "$Verbosity='Verbose'" + if: "$Verbosity='Verbose' or $Verbosity='Medium'" then: [t: "indice"] # phrase(H 'subscript' 2) - else_test: - if: "$Verbosity='Medium'" - then: [t: "sous"] # phrase(H 'sub' 2) - x: "*[3]" - name: dimension-by @@ -838,11 +835,11 @@ replace: - x: "*[2]" - test: - if: "$Verbosity='Verbose'" + if: "$Verbosity='Verbose' or $Verbosity='Medium'" then: [t: "exposant"] # phrase(H 'superscript' 2) - else_test: - if: "$Verbosity='Medium'" - then: [t: "super"] # phrase(H 'super' 2) + # else_test: + # if: "$Verbosity='Medium'" + # then: [t: "super"] # phrase(H 'super' 2) - x: "*[3]" - test: if: "following-sibling::*[1][.='+' or .='-']" # a little lazy -- assumes chemistry superscripts end with + or - @@ -1043,7 +1040,7 @@ then: [t: "liquide"] # phrase(water is a 'liquid') - else_if: ".='g'" then: [t: "gaz"] # phrase(hydrogen is a 'gas' ) - else: [t: "acqueuse"] # phrase(an 'aqueous' solution is contained in water) + else: [t: "aqueux"] # phrase(an 'aqueous' solution is contained in water) - pause: short - name: chemical-formula-operator-bond diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index 9dcdafd9a..73ed530b6 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -14,3 +14,4 @@ mod SimpleSpeak { mod shared; mod alphabets; +mod chemistry; diff --git a/tests/Languages/fr/chemistry.rs b/tests/Languages/fr/chemistry.rs new file mode 100644 index 000000000..e007095f5 --- /dev/null +++ b/tests/Languages/fr/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("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "n majuscule a, c majuscule l")?; + return Ok(()); + +} + +#[test] +fn water() -> Result<()> { + let expr = "H2O"; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Terse")], expr, "h majuscule, 2 o majuscule")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium")], expr, "h majuscule, indice 2, o majuscule")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, "h majuscule, indice 2, o majuscule")?; + return Ok(()); + +} + +#[test] +fn carbon() -> Result<()> { + let expr = "C"; // not enough to trigger recognition + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "c majuscule")?; + return Ok(()); + +} + +#[test] +fn sulfate() -> Result<()> { + let expr = " + [SO4] + 2 + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium")], expr, "crochet ouvrant, s majuscule, o majuscule, indice 4; crochet fermant exposant 2 moins")?; + return Ok(()); + +} + +#[test] +fn aluminum_sulfate() -> Result<()> { + let expr = "Al2 + (SO4)3"; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Terse")], expr, "a majuscule l, 2; ouvert, s majuscule, o majuscule, 4; fermer 3")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium")], expr, "a majuscule l, indice 2; parenthèse gauche, s majuscule, o majuscule, indice 4; parenthèse droite indice 3")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, "a majuscule l, indice 2; parenthèse gauche, s majuscule, o majuscule, indice 4; parenthèse droite indice 3")?; + return Ok(()); + +} + +#[test] +fn ethanol_bonds() -> Result<()> { + let expr = " + + C + H 3 + + C + H 2 + + O + H + + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Terse")], expr, "c majuscule, h majuscule, 3, liaison simple c majuscule, h majuscule, 2, liaison simple o majuscule, h majuscule")?; + + return Ok(()); + +} + +#[test] +fn dichlorine_hexoxide() -> Result<()> { + let expr = " + + [ClO2] + + + + + [ClO4] + - + + "; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "crochet ouvrant, c majuscule l, o majuscule, 2; crochet fermant plus; \ + crochet ouvrant, c majuscule l, o majuscule, 4; crochet fermant moins")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Medium")], + expr, "crochet ouvrant, c majuscule l, o majuscule, indice 2; crochet fermant exposant plus; \ + crochet ouvrant, c majuscule l, o majuscule, indice 4; crochet fermant exposant moins")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], + expr, "crochet ouvrant, c majuscule l, o majuscule, indice 2; crochet fermant exposant plus; \ + crochet ouvrant, c majuscule l, o majuscule, indice 4; crochet fermant exposant moins")?; + return Ok(()); + +} + + +#[test] +fn ethylene_with_bond() -> Result<()> { + let expr = " + H2C + = + CH2 + "; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "h majuscule, 2 c majuscule; liaison double c majuscule, h majuscule, 2")?; + return Ok(()); + +} + +#[test] +fn ferric_chloride_aq() -> Result<()> { + let expr = " + Fe + Cl3 + (aq) + "; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "f majuscule e, c majuscule l, 3, aqueux")?; + return Ok(()); + + } + +#[test] +fn ethylene_with_colon_bond() -> Result<()> { + let expr = " + H2C + :: + CH2 + "; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "cap h, 2 cap c, double bond cap c, cap h, 2")?; + return Ok(()); + +} + +#[test] +fn beta_decay() -> Result<()> { + let expr = " + + C + + 6 + 14 + + + + N + + 7 + 14 + + + + + e + + + + 1 + + 0 + + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Terse")], expr, + "14, 6, cap c; forms, 14, 7, cap n; plus 0, negative 1, e")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium")], expr, + "super 14, sub 6, cap c; reacts to form; super 14, sub 7, cap n; plus super 0, sub negative 1, e")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, + "superscript 14, subscript 6, cap c; reacts to form; superscript 14, subscript 7, cap n; plus, superscript 0, subscript negative 1, e")?; + return Ok(()); + +} + +#[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("fr", "ClearSpeak", vec![("Verbosity", "Terse")], expr, + "14, 6, cap c; forms, 14, 7, cap n; plus 0, negative 1, e")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium")], expr, + "super 14, sub 6, cap c; reacts to form; super 14, sub 7, cap n; plus super 0, sub negative 1, e")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, + "superscript 14, subscript 6, cap c; reacts to form; superscript 14, subscript 7, cap n; plus, superscript 0, subscript negative 1, e")?; + return Ok(()); + +} + +#[test] +fn hcl_na_yields() -> Result<()> { + let expr = " + 2HCl+2Na + + 2NaCl+ + H 2 + + "; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, + "2, cap h, cap c l; plus 2 cap n eigh; reacts to form; 2, cap n eigh, cap c l; plus cap h, subscript 2")?; + return Ok(()); + +} + +#[test] +fn mhchem_so4_2plus() -> Result<()> { + let expr = " + + + SO + + + + + + + A + + + + + + + + 4 + + + + + + + + + + A + + + + + + 2 + + + + + + "; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "cap s; cap o, 4, 2 plus")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, "cap s; cap o, sub 4, super 2 plus")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "cap s; cap o, subscript 4, superscript 2 plus")?; + 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("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "2, cap h, cap c l, aqueous; plus, 2, cap n eigh, solid; forms; 2, cap n eigh, cap c l, aqueous; plus, cap h, 2, gas")?; + + return Ok(()); + +} + + +#[test] +fn mhchem_barbed_equilibrium() -> Result<()> { + let expr = " + + + + H + 2 + + + + + ( + g + ) + + + + + + + + I + 2 + + + + + ( + g + ) + + + + + + + - + + + - + + + + + 2 + + + H + + I + + + ( + g + ) + + + + + "; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "cap h, 2, gas; plus; cap i, 2, gas; is in equilibrium with, 2, cap h, cap i, gas")?; + return Ok(()); + +} + + + +#[test] +fn mhchem_roman_in_superscript() -> Result<()> { + let expr = " + + + Fe + + II + + + + Fe + + III + + + + O + 4 + + + + "; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "cap f e, 2; cap f e, 3; cap o, 4")?; + return Ok(()); + +} + + +#[test] +fn dropped_msubsup_bug_358() -> Result<()> { + let expr = r#" + + + 2 + + + SO + + 2 + + + + + + + + + O + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + SO + + 3 + + + + + + + + "#; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "2, cap s, cap o, 2; plus; cap o, 2 is in equilibrium with, 2, cap s, cap o, 3")?; + return Ok(()); + +} + + From 4f0d7f72dcdb505137f80eb78e3992f5cb156591 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Thu, 21 May 2026 18:47:40 -0400 Subject: [PATCH 22/53] completed corrections for chemistry.rs --- Rules/Languages/fr/SharedRules/default.yaml | 18 ++--- Rules/Languages/fr/SharedRules/general.yaml | 76 ++++++--------------- tests/Languages/fr/chemistry.rs | 30 ++++---- 3 files changed, 44 insertions(+), 80 deletions(-) diff --git a/Rules/Languages/fr/SharedRules/default.yaml b/Rules/Languages/fr/SharedRules/default.yaml index d3547e592..28b737496 100644 --- a/Rules/Languages/fr/SharedRules/default.yaml +++ b/Rules/Languages/fr/SharedRules/default.yaml @@ -191,15 +191,17 @@ if: "not(IsNode(*[last()], 'simple')) or $Impairment = 'Blindness'" then: [t: "fin d'exposant"] else: - - test: - if: "$Verbosity='Verbose'" - then: [t: "exposant"] - else: [t: "super"] + - t: "exposant" + # - test: + # if: "$Verbosity='Verbose'" + # then: [t: "exposant"] + # else: [t: "super"] - x: "*[last()]" - - test: - if: "$Verbosity='Verbose'" - then: [t: "fin d'exposant"] - else: [t: "fin de super"] + - t: "fin d'exposant" + # - test: + # if: "$Verbosity='Verbose'" + # then: [t: "fin d'exposant"] + # else: [t: "fin de super"] - name: default tag: munder diff --git a/Rules/Languages/fr/SharedRules/general.yaml b/Rules/Languages/fr/SharedRules/general.yaml index 3c65077aa..00f30dd1e 100644 --- a/Rules/Languages/fr/SharedRules/general.yaml +++ b/Rules/Languages/fr/SharedRules/general.yaml @@ -244,10 +244,8 @@ then: [pause: short] - test: if: "name(.)='say-super'" - then_test: - if: "$Verbosity='Verbose'" - then: [t: "exposant"] # phrase(a 'superscript' number indicates raised to a power) - else: [t: "super"] # phrase(this is a 'super' set of numbers) + then: + - t: "exposant" - x: "*[3]" - pause: short @@ -866,22 +864,16 @@ if: "not($Prescripts[2][self::m:none])" then: - test: - if: "$Verbosity='Verbose'" + if: "$Verbosity='Medium' or $Verbosity='Verbose'" then: [t: "exposant"] # phrase(H 'superscript' 2) - else_test: - if: "$Verbosity='Medium'" - then: [t: "super"] # phrase(H 'super' 2) - x: "$Prescripts[2]" - pause: "short" - test: if: "not($Prescripts[1][self::m:none])" then: - test: - if: "$Verbosity='Verbose'" - then: [t: "exposant"] # phrase(a 'subscript' may be used to indicate an index) - else_test: - if: "$Verbosity='Medium'" - then: [t: "sous"] # phrase(here is a 'sub' total) + if: "$Verbosity='Medium' or $Verbosity='Verbose'" + then: [t: "indice"] # phrase(a 'subscript' may be used to indicate an index) - x: "$Prescripts[1]" - pause: "short" - test: @@ -891,22 +883,16 @@ if: "not($Prescripts[4][self::m:none])" then: - test: - if: "$Verbosity='Verbose'" + if: "$Verbosity='Medium' or $Verbosity='Verbose'" then: [t: "exposant"] # phrase(H 'superscript' 2) - else_test: - if: "$Verbosity='Medium'" - then: [t: "super"] # phrase(H 'super' 2) - x: "$Prescripts[4]" - pause: "short" - test: if: "not($Prescripts[3][self::m:none])" then: - test: - if: "$Verbosity='Verbose'" + if: "$Verbosity='Medium' or $Verbosity='Verbose'" then: [t: "indice"] # phrase(H 'subscript' 2) - else_test: - if: "$Verbosity='Medium'" - then: [t: "sous"] # phrase(H 'sub' 2) - x: "$Prescripts[3]" - pause: "short" - x: "*[1]" # base @@ -917,22 +903,16 @@ if: "not($Postscripts[1][self::m:none])" then: - test: - if: "$Verbosity='Verbose'" - then: [t: "subscript"] # phrase(phrase(H 'subscript' 2) - else_test: - if: "$Verbosity='Medium'" - then: [t: "sous"] # phrase(phrase(H 'sub' 2) + if: "$Verbosity='Medium' or $Verbosity='Verbose'" + then: [t: "indice"] # phrase(phrase(H 'subscript' 2) - x: "$Postscripts[1]" - pause: "short" - test: if: "not($Postscripts[2][self::m:none])" then: - test: - if: "$Verbosity='Verbose'" + if: "$Verbosity='Medium' or $Verbosity='Verbose'" then: [t: "exposant"] # phrase(H 'superscript' 2) - else_test: - if: "$Verbosity='Medium'" - then: [t: "super"] # phrase(H 'super' 2) - x: "$Postscripts[2]" - pause: "short" - test: @@ -942,22 +922,16 @@ if: "not($Postscripts[3][self::m:none])" then: - test: - if: "$Verbosity='Verbose'" - then: [t: "exposant"] # phrase(H 'subscript' 2) - else_test: - if: "$Verbosity='Medium'" - then: [t: "sous"] # phrase(H 'sub' 2) + if: "$Verbosity='Medium' or $Verbosity='Verbose'" + then: [t: "indice"] # phrase(H 'subscript' 2) - x: "$Postscripts[3]" - pause: "short" - test: if: "not($Postscripts[4][self::m:none])" then: - test: - if: "$Verbosity='Verbose'" + if: "$Verbosity='Medium' or $Verbosity='Verbose'" then: [t: "exposant"] # phrase(H 'superscript' 2) - else_test: - if: "$Verbosity='Medium'" - then: [t: "super"] # phrase(H 'super' 2) - x: "$Postscripts[4]" - pause: "short" - test: @@ -967,22 +941,16 @@ if: "not($Postscripts[5][self::m:none])" then: - test: - if: "$Verbosity='Verbose'" - then: [t: "exposant"] # phrase(H 'subscript' 2) - else_test: - if: "$Verbosity='Medium'" - then: [t: "sous"] # phrase(H 'sub' 2) + if: "$Verbosity='Medium' or $Verbosity='Verbose'" + then: [t: "indice"] # phrase(H 'subscript' 2) - x: "$Postscripts[5]" - pause: "short" - test: if: "not($Postscripts[6][self::m:none])" then: - test: - if: "$Verbosity='Verbose'" + if: "$Verbosity='Medium' or $Verbosity='Verbose'" then: [t: "exposant"] # phrase(H 'superscript' 2) - else_test: - if: "$Verbosity='Medium'" - then: [t: "sous"] # phrase(H 'super' 2) - x: "$Postscripts[6]" - pause: "short" - test: @@ -992,22 +960,16 @@ if: "not($Postscripts[7][self::m:none])" then: - test: - if: "$Verbosity='Verbose'" - then: [t: "exposant"] # phrase(H 'subscript' 2) - else_test: - if: "$Verbosity='Medium'" - then: [t: "sous"] # phrase(H 'sub' 2) + if: "$Verbosity='Medium' or $Verbosity='Verbose'" + then: [t: "indice"] # phrase(H 'subscript' 2) - x: "$Postscripts[7]" - pause: "short" - test: if: "not($Postscripts[8][self::m:none])" then: - test: - if: "$Verbosity='Verbose'" + if: "$Verbosity='Medium' or $Verbosity='Verbose'" then: [t: "exposant"] # phrase(H 'superscript' 2) - else_test: - if: "$Verbosity='Medium'" - then: [t: "sous"] # phrase(H 'super' 2) - x: "$Postscripts[8]" - pause: "short" - test: diff --git a/tests/Languages/fr/chemistry.rs b/tests/Languages/fr/chemistry.rs index e007095f5..401858180 100644 --- a/tests/Languages/fr/chemistry.rs +++ b/tests/Languages/fr/chemistry.rs @@ -128,7 +128,7 @@ fn ethylene_with_colon_bond() -> Result<()> { :: CH2 "; - test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "cap h, 2 cap c, double bond cap c, cap h, 2")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "h majuscule, 2 c majuscule; liaison double c majuscule, h majuscule, 2")?; return Ok(()); } @@ -161,11 +161,11 @@ fn beta_decay() -> Result<()> { "; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Terse")], expr, - "14, 6, cap c; forms, 14, 7, cap n; plus 0, negative 1, e")?; + "14, 6, c majuscule; forment; 14, 7, n majuscule; plus 0, négatif 1, e")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium")], expr, - "super 14, sub 6, cap c; reacts to form; super 14, sub 7, cap n; plus super 0, sub negative 1, e")?; + "exposant 14, indice 6, c majuscule; réagissent pour former; exposant 14, indice 7, n majuscule; plus, exposant 0, indice négatif 1, e")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, - "superscript 14, subscript 6, cap c; reacts to form; superscript 14, subscript 7, cap n; plus, superscript 0, subscript negative 1, e")?; + "exposant 14, indice 6, c majuscule; réagissent pour former; exposant 14, indice 7, n majuscule; plus, exposant 0, indice négatif 1, e")?; return Ok(()); } @@ -427,11 +427,11 @@ fn mhchem_beta_decay() -> Result<()> { "; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Terse")], expr, - "14, 6, cap c; forms, 14, 7, cap n; plus 0, negative 1, e")?; + "14, 6, c majuscule; forment; 14, 7, n majuscule; plus 0, négatif 1, e")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium")], expr, - "super 14, sub 6, cap c; reacts to form; super 14, sub 7, cap n; plus super 0, sub negative 1, e")?; + "exposant 14, indice 6, c majuscule; réagissent pour former; exposant 14, indice 7, n majuscule; plus, exposant 0, indice négatif 1, e")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, - "superscript 14, subscript 6, cap c; reacts to form; superscript 14, subscript 7, cap n; plus, superscript 0, subscript negative 1, e")?; + "exposant 14, indice 6, c majuscule; réagissent pour former; exposant 14, indice 7, n majuscule; plus, exposant 0, indice négatif 1, e")?; return Ok(()); } @@ -446,7 +446,7 @@ fn hcl_na_yields() -> Result<()> { "; test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, - "2, cap h, cap c l; plus 2 cap n eigh; reacts to form; 2, cap n eigh, cap c l; plus cap h, subscript 2")?; + "2, h majuscule, c majuscule l; plus 2 n majuscule a; réagissent pour former; 2, n majuscule a, c majuscule l; plus h majuscule, indice 2")?; return Ok(()); } @@ -493,9 +493,9 @@ fn mhchem_so4_2plus() -> Result<()> { "; - test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "cap s; cap o, 4, 2 plus")?; - test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, "cap s; cap o, sub 4, super 2 plus")?; - test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "cap s; cap o, subscript 4, superscript 2 plus")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "s majuscule; o majuscule, 4, 2 plus")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, "s majuscule; o majuscule, indice 4, exposant 2 plus")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "s majuscule; o majuscule, indice 4, exposant 2 plus")?; return Ok(()); } @@ -585,7 +585,7 @@ fn mhchem_hcl_aq_etc() -> Result<()> { "; test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], - expr, "2, cap h, cap c l, aqueous; plus, 2, cap n eigh, solid; forms; 2, cap n eigh, cap c l, aqueous; plus, cap h, 2, gas")?; + expr, "2, h majuscule, c majuscule l, aqueux; plus, 2, n majuscule a, solide; forment; 2, n majuscule a, c majuscule l, aqueux; plus, h majuscule, 2; gaz")?; return Ok(()); @@ -653,7 +653,7 @@ fn mhchem_barbed_equilibrium() -> Result<()> { "; test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], - expr, "cap h, 2, gas; plus; cap i, 2, gas; is in equilibrium with, 2, cap h, cap i, gas")?; + expr, "h majuscule, 2; gaz; plus; i majuscule, 2; gaz; est en équilibre avec, 2, h majuscule, i majuscule, gaz")?; return Ok(()); } @@ -684,7 +684,7 @@ fn mhchem_roman_in_superscript() -> Result<()> { "; test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], - expr, "cap f e, 2; cap f e, 3; cap o, 4")?; + expr, "f majuscule e, 2; f majuscule e, 3; o majuscule, 4")?; return Ok(()); } @@ -761,7 +761,7 @@ fn dropped_msubsup_bug_358() -> Result<()> { "#; test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], - expr, "2, cap s, cap o, 2; plus; cap o, 2 is in equilibrium with, 2, cap s, cap o, 3")?; + expr, "2, s majuscule, o majuscule, 2; plus; o majuscule, 2 est en équilibre avec, 2, s majuscule, o majuscule, 3")?; return Ok(()); } From 1f45cc0c49f3f4eb1f93c33c9f30b6af9b73ca03 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Thu, 21 May 2026 19:01:29 -0400 Subject: [PATCH 23/53] added tests intent.rs --- tests/Languages/fr.rs | 1 + tests/Languages/fr/intent.rs | 144 +++++++++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 tests/Languages/fr/intent.rs diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index 73ed530b6..0124f33f3 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -15,3 +15,4 @@ mod SimpleSpeak { mod shared; mod alphabets; mod chemistry; +mod intent; diff --git a/tests/Languages/fr/intent.rs b/tests/Languages/fr/intent.rs new file mode 100644 index 000000000..caf2abd10 --- /dev/null +++ b/tests/Languages/fr/intent.rs @@ -0,0 +1,144 @@ +/// 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("fr", "SimpleSpeak", expr, "2 x")?; + test("fr", "LiteralSpeak", expr, "2 x")?; + return Ok(()); + +} + +#[test] +fn prefix_intent() -> Result<()> { + let expr = r#" x T "#; + test("fr", "SimpleSpeak", expr, "teste x")?; + return Ok(()); + +} + +#[test] +fn postfix_intent() -> Result<()> { + let expr = r#" x T "#; + test("fr", "SimpleSpeak", expr, "x teste")?; + return Ok(()); + +} + +#[test] +fn infix_intent() -> Result<()> { + let expr = r#" + x + y + z + "#; + test("fr", "SimpleSpeak", expr, "x teste y teste z teste 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("fr", "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("fr", "SimpleSpeak", expr, "teste x")?; + return Ok(()); + +} + +#[test] +fn function_intent() -> Result<()> { + let expr = r#" + x + y + z + "#; + test("fr", "SimpleSpeak", expr, "teste de x virgule, y virgule, z virgule, 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("fr", "SimpleSpeak", expr, "x")?; + return Ok(()); + +} + +#[test] +fn function_one_arg_intent() -> Result<()> { + let expr = r#" + x + "#; + test("fr", "SimpleSpeak", expr, "teste de x")?; + return Ok(()); + +} + +#[test] +fn silent_intent_mi() -> Result<()> { + let expr = " 2 x"; + test("fr", "SimpleSpeak", expr, "2")?; + test("fr", "ClearSpeak", expr, "2")?; + return Ok(()); + +} + +#[test] +fn silent_intent_msup() -> Result<()> { + let expr = " + + H + 2 + "; + test("fr", "SimpleSpeak", expr, "h majuscule 2")?; + test("fr", "ClearSpeak", expr, "h majuscule 2")?; + return Ok(()); + +} + +#[test] +fn silent_intent_underscore() -> Result<()> { + let expr = " + + H + 2 + "; + test("fr", "SimpleSpeak", expr, "h majuscule 2")?; + test("fr", "ClearSpeak", expr, "h majuscule 2")?; + return Ok(()); + +} + +#[test] +fn intent_prob_x() -> Result<()> { + let expr = " + + x + P + "; + test("fr", "ClearSpeak", expr, "probabilité de x")?; + return Ok(()); + +} From 42b2c7dcf96f9b681d7b3b15306eb57563abc0e7 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Mon, 25 May 2026 16:07:09 -0400 Subject: [PATCH 24/53] modified rules and completed tests for mtable.rs --- Rules/Languages/fr/ClearSpeak_Rules.yaml | 6 +- Rules/Languages/fr/SharedRules/default.yaml | 8 - Rules/Languages/fr/SharedRules/general.yaml | 80 +- Rules/Languages/fr/definitions.yaml | 2 +- tests/Languages/fr.rs | 1 + tests/Languages/fr/mtable.rs | 1191 +++++++++++++++++++ 6 files changed, 1247 insertions(+), 41 deletions(-) create mode 100644 tests/Languages/fr/mtable.rs diff --git a/Rules/Languages/fr/ClearSpeak_Rules.yaml b/Rules/Languages/fr/ClearSpeak_Rules.yaml index 133fce420..6dc24be3f 100644 --- a/Rules/Languages/fr/ClearSpeak_Rules.yaml +++ b/Rules/Languages/fr/ClearSpeak_Rules.yaml @@ -121,8 +121,8 @@ - bookmark: "@id" - test: if: "self::m:minus" - then: [t: "négatif"] # phrase(minus 5 is a 'negative' number) - else: [t: "positif"] # phrase(7 is a 'positive' number) + then: [t: "moins"] + else: [t: "plus"] - x: "*[1]" # Fraction rules @@ -474,7 +474,7 @@ name: ClearSpeak-absolute-value tag: absolute-value match: "." - variables: [WordToSay: "IfThenElse($ClearSpeak_AbsoluteValue = 'Cardinality', 'cardinality', 'absolute value')"] + variables: [WordToSay: "IfThenElse($ClearSpeak_AbsoluteValue = 'Cardinality', 'cardinalité', 'valeur absolue')"] replace: - test: if: "$Verbosity!='Terse'" diff --git a/Rules/Languages/fr/SharedRules/default.yaml b/Rules/Languages/fr/SharedRules/default.yaml index 28b737496..374e36dc1 100644 --- a/Rules/Languages/fr/SharedRules/default.yaml +++ b/Rules/Languages/fr/SharedRules/default.yaml @@ -192,16 +192,8 @@ then: [t: "fin d'exposant"] else: - t: "exposant" - # - test: - # if: "$Verbosity='Verbose'" - # then: [t: "exposant"] - # else: [t: "super"] - x: "*[last()]" - t: "fin d'exposant" - # - test: - # if: "$Verbosity='Verbose'" - # then: [t: "fin d'exposant"] - # else: [t: "fin de super"] - name: default tag: munder diff --git a/Rules/Languages/fr/SharedRules/general.yaml b/Rules/Languages/fr/SharedRules/general.yaml index 00f30dd1e..989957617 100644 --- a/Rules/Languages/fr/SharedRules/general.yaml +++ b/Rules/Languages/fr/SharedRules/general.yaml @@ -599,14 +599,16 @@ variables: [IsColumnSilent: true()] match: "count(*)=1 and *[self::m:mtr][count(*) = 1]" replace: - - ot: "the" # phrase('the' 1 by 1 matrix M) - - t: "une par une" # 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: "déterminant"] # phrase(the 2 by 2 'determinant')) + then: [t: "le"] # phrase('the' 1 by 1 determinant) + else: [t: "la"] # phrase('the' 1 by 1 matrix M) + - test: + if: "self::m:determinant" + then: [t: "déterminant"] # phrase(the 2 by 2 'determinant') else: [t: "matrice"] # phrase(the 2 by 2 'matrix') - - - t: "avec entrée" # phrase(the 2 by 2 matrix 'with entry' x) + - t: "1 par 1" # phrase(the '1 by 1' matrix) + - t: "avec l'élément" # phrase(the 2 by 2 matrix 'containing the element' x) - x: "*[1]/*" # simpler reading methods for special case matrices @@ -616,10 +618,10 @@ match: "not( */*/*[not(self::m:mn and .= 0)] )" replace: - t: "la" # phrase('the' 1 by 2 matrix M) + - t: "matrice zéro" # phrase(the 2 by 2 'zero matrix') - x: count(*) - t: "par" # phrase(the 1 'by' 2 matrix) - x: count(*[self::m:mtr][1]/*) - - t: "matrice zéro" # phrase(the 2 by 2 'zero matrix') - pause: long - name: identity-matrix @@ -631,10 +633,10 @@ - "not( */*[count(preceding-sibling::*) != count(../preceding-sibling::*)]/*[not(self::m:mn and .= 0)] )" # off-diagonal replace: - t: "la" # phrase('the' 1 by 2 matrix M) + - t: "matrice identité" # phrase(the 2 by 2 'identity matrix') - x: count(*) - t: "par" # phrase(the 1 'by' 2 matrix) - x: count(*[self::m:mtr][1]/*) - - t: "matrice identitée" # phrase(the 2 by 2 'identity matrix') - pause: long - name: diagonal-matrix @@ -648,10 +650,10 @@ - " )" replace: - t: "la" # phrase('the' 1 by 2 matrix) + - t: "matrice diagonale" # phrase(the 2 by 2 'diagonal matrix') - x: count(*) - t: "par" # phrase(the 1 'by' 2 matrix) - x: count(*[self::m:mtr][1]/*) - - t: "matrice diagonale" # 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 @@ -671,13 +673,16 @@ - count(*)<=3 and # at least two rows - IsNode(*/*/*,'simple') # IsNode() returns true if all the nodes are simple replace: - - t: "la" # phrase('the' 2 by 2 matrix M) - - x: count(*) - - t: "par une colonne" # phrase(the 2 'by 1 column' matrix) + - test: + if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" + then: [t: "le"] # phrase('the' 2 by 2 vector) - masculine + else: [t: "la"] # phrase('the' 2 by 2 matrix) - feminine - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" then: [t: "vecteur"] # phrase(the 2 by 2 'vector') else: [t: "matrice"] # phrase(the 2 by 2 'matrix') + - x: count(*) + - t: "par 1 colonne" # phrase(the 2 'by 1 column' matrix) - pause: long - x: "*/*" - test: @@ -694,13 +699,16 @@ variables: [IsColumnSilent: true()] match: "*[self::m:mtr][count(*) = 1]" replace: - - t: "la" # phrase('the' 2 by 2 matrix M) - - x: "count(*)" - - t: "par 1 colonne" # phrase(the 2 'by 1 column' matrix) + - test: + if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" + then: [t: "le"] # phrase('the' 2 by 2 vector) - masculine + else: [t: "la"] # phrase('the' 2 by 2 matrix) - feminine - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" then: [t: "vecteur"] # phrase(the 2 column 'vector') else: [t: "matrice"] # phrase(the 2 by 2 'matrix') + - x: "count(*)" + - t: "par 1 colonne" # phrase(the 2 'by 1 column' matrix) - pause: long - x: "*" # select the rows (mtr) - test: @@ -716,13 +724,17 @@ - count(*[1]/*)<=3 and # at least two cols - IsNode(*/*/*,'simple') # IsNode() returns true if all the nodes are simple replace: - - t: "la 1 par" # phrase('the 1 by' 2 matrix) - - x: count(*/*) - - t: "rangée" # phrase(the 1 by 4 'row' matrix) + - test: + if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" + then: [t: "le"] # phrase('the' 2 by 2 vector) - masculine + else: [t: "la"] # phrase('the' 2 by 2 matrix) - feminine - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" then: [t: "vecteur"] # phrase('the 1 by' 2 row 'vector') else: [t: "matrice"] # phrase('the 1 by' 2 'matrix') + - t: "1 par" # phrase('the 1 by' 2 matrix) + - x: count(*/*) + - t: "rangée" # phrase(the 1 by 4 'row' matrix) - pause: long - x: "*/*" - test: @@ -739,13 +751,17 @@ variables: [IsColumnSilent: "$SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix = 'SilentColNum'"] match: "count(*)=1" # one row replace: - - t: "la 1 par" # phrase('the 1 by' 2 matrix) - - x: "count(*/*)" - - t: "rangée" # phrase(the 1 by 2 'row' matrix) + - test: + if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" + then: [t: "le"] # phrase('the' 2 by 2 vector) - masculine + else: [t: "la"] # phrase('the' 2 by 2 matrix) - feminine - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" then: [t: "vecteur"] # phrase(the 2 by 1 'vector') else: [t: "matrice"] # phrase(the 2 by 2 'matrix') + - t: "1 par" # phrase('the 1 by' 2 matrix) + - x: "count(*/*)" + - t: "rangée" # phrase(the 1 by 2 'row' matrix) - pause: long - pause: medium - x: "*/*" # select the cols (mtd) @@ -766,14 +782,17 @@ - IsNode(*/*/*,'simple') # IsNode() returns true if all the nodes are simple variables: [IsColumnSilent: "$SpeechStyle = 'SimpleSpeak' or ($SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix != 'SpeakColNum')"] replace: - - t: "la" # phrase('the' 1 by 2 matrix M) + - test: + if: "self::m:determinant" + then: [t: "le"] # phrase('the' 2 by 2 determinant) - masculine + else: [t: "la"] # phrase('the' 2 by 2 matrix) - feminine + - test: + if: "self::m:determinant" + then: [t: "déterminant"] # phrase(the 2 by 2 'determinant') + else: [t: "matrice"] # phrase(the 2 by 2 'matrix') - x: count(*) - t: "par" # phrase(the 1 'by' 2 matrix) - x: count(*[self::m:mtr][1]/*) - - test: - if: "self::m:determinant" - then: [t: "determinant"] # phrase(the 2 by 2 'determinant') - else: [t: "matrix"] # phrase(the 2 by 2 'matrix') - pause: long - x: "*" - test: @@ -790,14 +809,17 @@ variables: [IsColumnSilent: "$SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix = 'SilentColNum'"] match: "." replace: - - t: "the" # phrase('the' 1 by 2 matrix M) - - x: "count(*)" - - t: "par" # phrase(the 1 'by' 2 matrix) - - x: "count(*[self::m:mtr][1]/*)" + - test: + if: "self::m:determinant" + then: [t: "le"] # phrase('the' 2 by 2 determinant) - masculine + else: [t: "la"] # phrase('the' 2 by 2 matrix) - feminine - test: if: "self::m:determinant" then: [t: "déterminant"] # phrase(the 2 by 2 'determinant') else: [t: "matrice"] # phrase(the 2 by 2 'matrix') + - x: "count(*)" + - t: "par" # phrase(the 1 'by' 2 matrix) + - x: "count(*[self::m:mtr][1]/*)" - pause: long - x: "*" - test: diff --git a/Rules/Languages/fr/definitions.yaml b/Rules/Languages/fr/definitions.yaml index 6859b7ca6..4708dcee0 100644 --- a/Rules/Languages/fr/definitions.yaml +++ b/Rules/Languages/fr/definitions.yaml @@ -19,7 +19,7 @@ "say-super": "infix=super: exposant: exposant", "skip-super": "silent=", - "absolute-value": "function= ; valeur absolue: la valeur absolue de: la valeur absolue de; fin de valeur absolue", + "absolute-value": "function= ; valeur absolue: la valeur absolue: la valeur absolue; fin de valeur absolue", "binomial": "infix=binôme; parmi; fin du binôme", "dimension-product": "infix=par", "greatest-common-divisor": "function=pgcd: le pgcd: le plus grand commun diviseur", diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index 0124f33f3..3ba3cdfd4 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -16,3 +16,4 @@ mod shared; mod alphabets; mod chemistry; mod intent; +mod mtable; diff --git a/tests/Languages/fr/mtable.rs b/tests/Languages/fr/mtable.rs new file mode 100644 index 000000000..7d618cebb --- /dev/null +++ b/tests/Languages/fr/mtable.rs @@ -0,0 +1,1191 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn matrix_1x1() -> Result<()> { + let expr = " + + + ( + + 3 + + ) + + "; + test("fr", "ClearSpeak", expr, "la matrice 1 par 1 avec l'élément 3")?; + test("fr", "SimpleSpeak", expr, "la matrice 1 par 1 avec l'élément 3")?; + return Ok(()); + +} + +#[test] +fn determinant_1x1() -> Result<()> { + let expr = " + + + | + + 3 + + | + + "; + test("fr", "ClearSpeak", expr, "le déterminant 1 par 1 avec l'élément 3")?; + test("fr", "SimpleSpeak", expr, "le déterminant 1 par 1 avec l'élément 3")?; + return Ok(()); + +} + + +#[test] +fn matrix_1x2() -> Result<()> { + let expr = " + + + ( + + + + 3 + + + 5 + + + + ) + + "; + test("fr", "ClearSpeak", expr, "la matrice 1 par 2 rangée; 3, 5")?; + test("fr", "SimpleSpeak", expr, "la matrice 1 par 2 rangée; 3, 5")?; + return Ok(()); + +} + + +#[test] +fn matrix_1x3() -> Result<()> { + let expr = " + + + ( + + + + -x + + + 5 + + + 12 + + + + ) + + "; + test("fr", "ClearSpeak", expr, "la matrice 1 par 3 rangée; moins x, 5, 12")?; + test("fr", "SimpleSpeak", expr, "la matrice 1 par 3 rangée; moins x, 5, 12")?; + return Ok(()); + +} + +#[test] +fn matrix_2x1_not_simple() -> Result<()> { + let expr = " + + + ( + + + + + x+1 + + + + + + + x-1 + + + + ) + + "; + test("fr", "ClearSpeak", expr, "la matrice 2 par 1 colonne; rangée 1; x plus 1; rangée 2; x moins 1")?; + test("fr", "SimpleSpeak", expr, "la matrice 2 par 1 colonne; rangée 1; x plus 1; rangée 2; x moins 1")?; + return Ok(()); + +} +#[test] +fn matrix_3x1_not_simple() -> Result<()> { + let expr = " + + + ( + + + + + x + + + + + + + a + + + + + + + x + + x+1 + + + + + + ) + "; + test("fr", "SimpleSpeak", expr, "la matrice 3 par 1 colonne; \ + rangée 1; x; \ + rangée 2; a; \ + rangée 3; fraction, x sur, x plus 1, fin de fraction")?; + test("fr", "ClearSpeak", expr, "la matrice 3 par 1 colonne; \ + rangée 1; x; \ + rangée 2; a; \ + rangée 3; la fraction avec numérateur x; et dénominateur x plus 1")?; + return Ok(()); + +} + +#[test] +fn determinant_2x2() -> Result<()> { + let expr = " + + | + + + + 2 + + + 1 + + + + + 7 + + + 5 + + + + + | + "; + test("fr", "ClearSpeak", expr, "le déterminant 2 par 2; rangée 1; 2, 1; rangée 2; 7, 5")?; + test("fr", "SimpleSpeak", expr, "le déterminant 2 par 2; rangée 1; 2, 1; rangée 2; 7, 5")?; + return Ok(()); + +} + +#[test] +fn matrix_2x3() -> Result<()> { + let expr = " + + + [ + + + + 3 + + + 1 + + + 4 + + + + + 0 + + + 2 + + + 6 + + + + ] + + "; + test("fr", "ClearSpeak", expr, "la matrice 2 par 3; rangée 1; 3, 1, 4; rangée 2; 0, 2, 6")?; + test("fr", "SimpleSpeak", expr, "la matrice 2 par 3; rangée 1; 3, 1, 4; rangée 2; 0, 2, 6")?; + return Ok(()); + +} + +#[test] +fn matrix_2x3_labeled() -> Result<()> { + let expr = " + + + [ + + + + (3.1) + + + 3 + + + 1 + + + 4 + + + + + 0 + + + 2 + + + 6 + + + + ] + + "; + test("fr", "ClearSpeak", expr, + "la matrice 2 par 3; rangée 1 avec l'étiquette (3.1); colonne 1; 3, colonne 2; 1, colonne 3; 4; \ + rangée 2; colonne 1; 0, colonne 2; 2, colonne 3; 6")?; + test("fr", "SimpleSpeak", expr, + "la matrice 2 par 3; rangée 1 avec nom (3.1); colonne 1; 3, colonne 2; 1, colonne 3; 4; \ + rangée 2; colonne 1; 0, colonne 2; 2, colonne 3; 6")?; + return Ok(()); + +} + +#[test] +fn matrix_3x1() -> Result<()> { + let expr = " + + + [ + + + + 1 + + + + + 2 + + + + + 3 + + + ] + + "; + test("fr", "ClearSpeak", expr, "la matrice 3 par 1 colonne; 1; 2; 3")?; + test("fr", "SimpleSpeak", expr, "la matrice 3 par 1 colonne; 1; 2; 3")?; + return Ok(()); + +} + +#[test] +fn matrix_4x1() -> Result<()> { + let expr = " + + + ( + + + + 3 + + + + + 6 + + + + + 1 + + + + + 2 + + + + ) + + "; + test("fr", "ClearSpeak", expr, "la matrice 4 par 1 colonne; rangée 1; 3; rangée 2; 6; rangée 3; 1; rangée 4; 2")?; + test("fr", "SimpleSpeak", expr, "la matrice 4 par 1 colonne; rangée 1; 3; rangée 2; 6; rangée 3; 1; rangée 4; 2")?; + return Ok(()); + +} + +#[test] +fn matrix_4x1_labeled() -> Result<()> { + let expr = " + + + ( + + + + 3 + + + + + 6 + + + + + 1 + + + + + (3.1) + + + 2 + + + + ) + + "; + test("fr", "ClearSpeak", expr, + "la matrice 4 par 1 colonne; rangée 1; 3; rangée 2; 6; rangée 3; 1; rangée 4 avec l'étiquette (3.1); 2")?; + test("fr", "SimpleSpeak", expr, + "la matrice 4 par 1 colonne; rangée 1; 3; rangée 2; 6; rangée 3; 1; rangée 4 avec nom (3.1); 2")?; + return Ok(()); + +} + +#[test] +fn matrix_1x4() -> Result<()> { + let expr = " + + + ( + + + + 3 + + + 6 + + + 1 + + + 2 + + + + ) + + "; + test("fr", "ClearSpeak", expr, "la matrice 1 par 4 rangée; colonne 1; 3, colonne 2; 6, colonne 3; 1, colonne 4; 2")?; + test("fr", "SimpleSpeak", expr, "la matrice 1 par 4 rangée; colonne 1; 3, colonne 2; 6, colonne 3; 1, colonne 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("fr", "ClearSpeak", expr, "la matrice 4 par 4; \ + rangée 1; colonne 1; 0, colonne 2; 3, colonne 3; 4, colonne 4; 3; \ + rangée 2; colonne 1; 2, colonne 2; 1, colonne 3; 0, colonne 4; 9; \ + rangée 3; colonne 1; 3, colonne 2; 0, colonne 3; 2, colonne 4; 1; \ + rangée 4; colonne 1; 6, colonne 2; 2, colonne 3; 9, colonne 4; 0")?; + test("fr", "SimpleSpeak", expr, "la matrice 4 par 4; \ + rangée 1; colonne 1; 0, colonne 2; 3, colonne 3; 4, colonne 4; 3; \ + rangée 2; colonne 1; 2, colonne 2; 1, colonne 3; 0, colonne 4; 9; \ + rangée 3; colonne 1; 3, colonne 2; 0, colonne 3; 2, colonne 4; 1; \ + rangée 4; colonne 1; 6, colonne 2; 2, colonne 3; 9, colonne 4; 0")?; + return Ok(()); +} + +#[test] +fn matrix_4x2() -> Result<()> { + let expr = " + + + ( + + + + 1 + + + 3 + + + + + 4 + + + 2 + + + + + 2 + + + 1 + + + + + 0 + + + 5 + + + + + ) + + "; + test("fr", "ClearSpeak", expr, "la matrice 4 par 2; \ + rangée 1; colonne 1; 1, colonne 2; 3; \ + rangée 2; colonne 1; 4, colonne 2; 2; \ + rangée 3; colonne 1; 2, colonne 2; 1; \ + rangée 4; colonne 1; 0, colonne 2; 5\ + ")?; + test("fr", "SimpleSpeak", expr, "la matrice 4 par 2; \ + rangée 1; colonne 1; 1, colonne 2; 3; \ + rangée 2; colonne 1; 4, colonne 2; 2; \ + rangée 3; colonne 1; 2, colonne 2; 1; \ + rangée 4; colonne 1; 0, colonne 2; 5\ + ")?; + return Ok(()); +} + +// put absolue 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("fr", "SimpleSpeak", expr, "la valeur absolue de x")?; + test("fr", "ClearSpeak", expr, "la valeur absolue de x")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Terse"), ("ClearSpeak_AbsoluteValue", "Auto")], expr, "valeur absolue de x")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_AbsoluteValue", "AbsEnd")], + expr, "la valeur absolue de x, fin valeur absolue")?; + return Ok(()); +} + +#[test] +fn absolute_value_plus_1() -> Result<()> { +let expr = " + | + x+1 + | + "; + test("fr", "ClearSpeak", expr, "la valeur absolue de x plus 1")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Terse"), ("ClearSpeak_AbsoluteValue", "AbsEnd")], + expr, "valeur absolue de x plus 1, fin valeur absolue")?; + return Ok(()); +} + +#[test] +fn simple_cardinality_value() -> Result<()> { + let expr = " + | S | + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_AbsoluteValue", "Cardinality")], expr, + "la cardinalité de s majuscule")?; + return Ok(()); +} + +// Test preferences +#[test] +fn simple_matrix_speak_col_num() -> Result<()> { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("fr", "ClearSpeak_Matrix", "SpeakColNum", + expr, "la matrice 2 par 2; rangée 1; colonne 1; 2, colonne 2; 1; rangée 2; colonne 1; 7, colonne 2; 5")?; + return Ok(()); +} + +#[test] +fn col_matrix_3x1_speak_col_num() -> Result<()> { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("fr", "ClearSpeak_Matrix", "SpeakColNum", + expr, "la matrice 3 par 1 colonne; rangée 1; 1; rangée 2; 2; rangée 3; 3")?; + return Ok(()); +} + +#[test] +fn row_matrix_1x2_speak_col_num() -> Result<()> { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("fr", "ClearSpeak_Matrix", "SpeakColNum", + expr, "la matrice 1 par 2 rangée; colonne 1; 1, colonne 2; 2")?; + return Ok(()); +} + +#[test] +fn matrix_2x2_speak_col_num() -> Result<()> { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("fr", "ClearSpeak_Matrix", "SpeakColNum", + expr, "la matrice 2 par 2; rangée 1; colonne 1; b indice 1 1; colonne 2; b indice 1 2; \ + rangée 2; colonne 1; b indice 2 1; colonne 2; b indice 2 2")?; + return Ok(()); +} + + +#[test] +fn simple_matrix_silent_col_num() -> Result<()> { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("fr", "ClearSpeak_Matrix", "SilentColNum", + expr, "la matrice 2 par 2; rangée 1; 2, 1; rangée 2; 7, 5")?; + return Ok(()); +} + +#[test] +fn col_matrix_3x1_silent_col_num() -> Result<()> { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("fr", "ClearSpeak_Matrix", "SilentColNum", + expr, "la matrice 3 par 1 colonne; 1; 2; 3")?; + return Ok(()); +} + +#[test] +fn row_matrix_1x2_silent_col_num() -> Result<()> { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("fr", "ClearSpeak_Matrix", "SilentColNum", + expr, "la matrice 1 par 2 rangée; 1, 2")?; + return Ok(()); +} + +#[test] +fn matrix_2x2_silent_col_num() -> Result<()> { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("fr", "ClearSpeak_Matrix", "SilentColNum", + expr, "la matrice 2 par 2; rangée 1; b indice 1 1; b indice 1 2; \ + rangée 2; b indice 2 1; b indice 2 2")?; + return Ok(()); + } + + +#[test] +fn simple_matrix_end_matrix() -> Result<()> { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("fr", "ClearSpeak_Matrix", "EndMatrix", + expr, "la matrice 2 par 2; rangée 1; 2, 1; rangée 2; 7, 5; fin matrice")?; + return Ok(()); + } + +#[test] +fn col_matrix_3x1_end_matrix() -> Result<()> { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("fr", "ClearSpeak_Matrix", "EndMatrix", + expr, "la matrice 3 par 1 colonne; 1; 2; 3; fin matrice")?; + return Ok(()); + } + +#[test] +fn row_matrix_1x2_end_matrix() -> Result<()> { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("fr", "ClearSpeak_Matrix", "EndMatrix", + expr, "la matrice 1 par 2 rangée; 1, 2; fin matrice")?; + return Ok(()); + } + +#[test] +fn matrix_2x2_end_matrix() -> Result<()> { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("fr", "ClearSpeak_Matrix", "EndMatrix", + expr, "la matrice 2 par 2; rangée 1; colonne 1; b indice 1 1; colonne 2; b indice 1 2; \ + rangée 2; colonne 1; b indice 2 1; colonne 2; b indice 2 2; fin matrice")?; + return Ok(()); + } + + +#[test] +fn simple_matrix_vector() -> Result<()> { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("fr", "ClearSpeak_Matrix", "Vector", + expr, "la matrice 2 par 2; rangée 1; 2, 1; rangée 2; 7, 5")?; + return Ok(()); + } + +#[test] +fn col_matrix_3x1_vector() -> Result<()> { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("fr", "ClearSpeak_Matrix", "Vector", + expr, "le vecteur 3 par 1 colonne; 1; 2; 3")?; + return Ok(()); + } + +#[test] +fn row_matrix_1x2_vector() -> Result<()> { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("fr", "ClearSpeak_Matrix", "Vector", + expr, "le vecteur 1 par 2 rangée; 1, 2")?; + return Ok(()); + } + +#[test] +fn matrix_2x2_vector() -> Result<()> { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("fr", "ClearSpeak_Matrix", "Vector", + expr, "la matrice 2 par 2; rangée 1; colonne 1; b indice 1 1; colonne 2; b indice 1 2; \ + rangée 2; colonne 1; b indice 2 1; colonne 2; b indice 2 2")?; + return Ok(()); + } + + +#[test] +fn simple_matrix_end_vector() -> Result<()> { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("fr", "ClearSpeak_Matrix", "EndVector", + expr, "la matrice 2 par 2; rangée 1; 2, 1; rangée 2; 7, 5; fin matrice")?; + return Ok(()); + } + +#[test] +fn col_matrix_3x1_end_vector() -> Result<()> { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("fr", "ClearSpeak_Matrix", "EndVector", + expr, "le vecteur 3 par 1 colonne; 1; 2; 3; fin vecteur")?; + return Ok(()); + } + +#[test] +fn row_matrix_1x2_end_vector() -> Result<()> { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("fr", "ClearSpeak_Matrix", "EndVector", + expr, "le vecteur 1 par 2 rangée; 1, 2; fin vecteur")?; + return Ok(()); + } + +#[test] +fn matrix_2x2_end_vector() -> Result<()> { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("fr", "ClearSpeak_Matrix", "EndVector", + expr, "la matrice 2 par 2; rangée 1; colonne 1; b indice 1 1; colonne 2; b indice 1 2; \ + rangée 2; colonne 1; b indice 2 1; colonne 2; b indice 2 2; fin matrice")?; + return Ok(()); + } + + + +#[test] +fn matrix_binomial() -> Result<()> { + let expr = " + ( + 32 + ) + "; + test_ClearSpeak("fr", "ClearSpeak_Matrix", "Combinatorics", expr, "3 parmi 2")?; + return Ok(()); + } + +#[test] +fn matrix_times() -> Result<()> { + let expr = " + 1234 + abcd + "; + test("fr", "SimpleSpeak", expr, + "la matrice 2 par 2; rangée 1; 1, 2; rangée 2; 3, 4; fois; la matrice 2 par 2; rangée 1; a, b; rangée 2; c, d")?; + return Ok(()); + } + +#[test] +fn unknown_mtable_property() -> Result<()> { + let expr = " + + + + a + + + = + + + + b + + + c + + d + + + + + + + + + + e + + f + + + + "; + test("fr", "ClearSpeak", expr, + "2 lignes; ligne 1; a est égal à, b plus c moins d; ligne 2; plus e moins f")?; + return Ok(()); + } + + +#[test] +fn zero_matrix() -> Result<()> { + let expr = " + [ + + 00 + 00 + + ] + "; + test("fr", "SimpleSpeak", expr, + "la matrice zéro 2 par 2")?; + return Ok(()); + } + +#[test] +fn identity_matrix() -> Result<()> { + let expr = " + ( + + 100 + 010 + 001 + + ) + "; + test("fr", "SimpleSpeak", expr, + "la matrice identité 3 par 3")?; + return Ok(()); + } + +#[test] +fn identity_matrix_false_positive_negative_one() -> Result<()> { + let expr = " + [ + + 10 + 0-1 + + ] + "; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "la matrice diagonale 2 par 2; colonne 1; 1; colonne 2; moins 1")?; + Ok(()) +} + +#[test] +fn identity_matrix_false_positive_zero_diagonal() -> Result<()> { + let expr = " + [ + + 10 + 00 + + ] + "; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "la matrice diagonale 2 par 2; colonne 1; 1")?; + Ok(()) +} + +#[test] +fn diagonal_matrix() -> Result<()> { + let expr = " + ( + + 200 + 010 + 00x2 + + ) + "; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "la matrice diagonale 3 par 3; colonne 1; 2; colonne 2; 1; colonne 3; x au carré")?; + // test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], + // expr, "the 3 par 3 diagonal matrice; rangée 1, colonne 1, 2; rangée 2, colonne 2, 1; rangée 3, colonne 3, x squared"); + return Ok(()); + } + +#[test] +fn single_line_with_label() -> Result<()> { + let expr = r#" + + + (2) + 𝑏 = 2 + + + "#; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Terse")], + expr, "1 ligne, avec étiquette 2; b égale 2")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "1 équation, avec étiquette 2; b égale 2")?; + return Ok(()); + } From 85b6ed8a7c52ad92ce7dd2dba5daff464e3c9d07 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Mon, 25 May 2026 17:13:14 -0400 Subject: [PATCH 25/53] corrections for tests shared.rs --- Rules/Languages/fr/SharedRules/calculus.yaml | 2 +- Rules/Languages/fr/SharedRules/default.yaml | 77 ++++++++++++++++++++ Rules/Languages/fr/definitions.yaml | 2 +- Rules/Languages/fr/unicode-full.yaml | 4 +- Rules/Languages/fr/unicode.yaml | 8 +- tests/Languages/fr/shared.rs | 70 +++++++++--------- 6 files changed, 121 insertions(+), 42 deletions(-) diff --git a/Rules/Languages/fr/SharedRules/calculus.yaml b/Rules/Languages/fr/SharedRules/calculus.yaml index 0ee458987..894d9481b 100644 --- a/Rules/Languages/fr/SharedRules/calculus.yaml +++ b/Rules/Languages/fr/SharedRules/calculus.yaml @@ -49,7 +49,7 @@ - test: if: "$Verbosity!='Terse'" then: [t: "gradient de"] - else: [t: "del"] + else: [t: "grad"] - test: if: "not(IsNode(*[1], 'leaf'))" then: [pause: short] diff --git a/Rules/Languages/fr/SharedRules/default.yaml b/Rules/Languages/fr/SharedRules/default.yaml index 374e36dc1..0b2cf89e8 100644 --- a/Rules/Languages/fr/SharedRules/default.yaml +++ b/Rules/Languages/fr/SharedRules/default.yaml @@ -277,6 +277,29 @@ then: - x: "$PreSuperscript" - x: "$Prescripts[2]" + - pause: short + - test: + if: "count($Prescripts) > 2" + then: + - test: + if: "not($Prescripts[3][self::m:none])" + then: + - x: "$PreSubscript" + - x: "$Prescripts[3]" + - test: + if: "not($Prescripts[3][self::m:none] or $Prescripts[4][self::m:none])" + then: [t: "et"] + - test: + if: "not($Prescripts[4][self::m:none])" + then: + - x: "$PreSuperscript" + - x: "$Prescripts[4]" + - test: + if: "count($Prescripts) > 4" + then: + - t: "et préscripts alternés" + - x: "$Prescripts[position() > 4]" + - t: "fin préscripts" - test: if: "$Postscripts" then: @@ -308,6 +331,60 @@ then: - x: "$PostSuperscript" - x: "$Postscripts[2]" + - test: + if: "count($Postscripts) > 2" + then: + - test: + if: "not($Postscripts[3][self::m:none])" + then: + - x: "$PostSubscript" + - x: "$Postscripts[3]" + - test: + if: "not($Postscripts[3][self::m:none] or $Postscripts[4][self::m:none])" + then: [t: "et"] + - test: + if: "not($Postscripts[4][self::m:none])" + then: + - x: "$PostSuperscript" + - x: "$Postscripts[4]" + - test: + if: "count($Postscripts) > 4" + then: + - test: + if: "not($Postscripts[5][self::m:none])" + then: + - x: "$PostSubscript" + - x: "$Postscripts[5]" + - test: + if: "not($Postscripts[5][self::m:none] or $Postscripts[6][self::m:none])" + then: [t: "et"] + - test: + if: "not($Postscripts[6][self::m:none])" + then: + - x: "$PostSuperscript" + - x: "$Postscripts[6]" + - test: + if: "count($Postscripts) > 6" + then: + - test: + if: "not($Postscripts[7][self::m:none])" + then: + - x: "$PostSubscript" + - x: "$Postscripts[7]" + - test: + if: "not($Postscripts[7][self::m:none] or $Postscripts[8][self::m:none])" + then: [t: "et"] + - test: + if: "not($Postscripts[8][self::m:none])" + then: + - x: "$PostSuperscript" + - x: "$Postscripts[8]" + - test: + if: "count($Postscripts) > 8" + then: + - t: "et scripts alternés" + - x: "$Postscripts[position() > 8]" + - t: "fin scripts" - name: default tag: mtable diff --git a/Rules/Languages/fr/definitions.yaml b/Rules/Languages/fr/definitions.yaml index 4708dcee0..39fd461ec 100644 --- a/Rules/Languages/fr/definitions.yaml +++ b/Rules/Languages/fr/definitions.yaml @@ -46,7 +46,7 @@ "divergence": "function= ; div: divergence: divergence; fin de divergence", "curl": "function= ; rotationnel: rotationnel: rotationnel; fin du rotationnel", - "gradient": "function= ; del: gradient: gradient; fin de gradient", + "gradient": "function= ; grad: gradient: gradient; fin de gradient", "laplacian": "function=laplacien", "chemistry-concentration": "function= ; concentration: concentration de: la concentration de; fin de concentration", diff --git a/Rules/Languages/fr/unicode-full.yaml b/Rules/Languages/fr/unicode-full.yaml index 0d02115d3..d0f65adb5 100644 --- a/Rules/Languages/fr/unicode-full.yaml +++ b/Rules/Languages/fr/unicode-full.yaml @@ -3801,14 +3801,14 @@ - if: "$SpeechStyle != 'ClearSpeak'" then_test: if: "$DefaultToGiven" - then: [t: "donné"] # (en: 'given', DeepL translation) + then: [t: "sachant"] # (en: 'given', DeepL translation) else: [t: "barre verticale"] # (en: 'vertical line', DeepL: 'ligne verticale') - else_if: "not(preceding-sibling::*) or not(following-sibling::*)" then: [t: "ligne verticale"] # (en: 'vertical line', DeepL translation) - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" then: [t: "tel que"] # (en: 'such that', DeepL translation) - else_if: "$ClearSpeak_VerticalLine = 'Given' or $DefaultToGiven" - then: [t: "donné"] # (en: 'given', DeepL translation) + then: [t: "sachant"] # (en: 'given', DeepL translation) - else: [t: "barre verticale"] # (en: 'divides', DeepL: 'divise') - "~": [t: "tilde"] # 0xff5e - "¬": [t: "négation"] # 0xffe2 (en: 'not', DeepL: 'non') diff --git a/Rules/Languages/fr/unicode.yaml b/Rules/Languages/fr/unicode.yaml index b12a50781..d305de42a 100644 --- a/Rules/Languages/fr/unicode.yaml +++ b/Rules/Languages/fr/unicode.yaml @@ -158,7 +158,7 @@ - else_if: "$SpeechStyle != 'ClearSpeak'" then_test: - if: "$DefaultToGiven" - then: [t: "donné"] # (en: 'given', DeepL translation) + then: [t: "sachant"] # (en: 'given', DeepL translation) - else_if: "preceding-sibling::*[1][self::m:mn and not(contains(., $DecimalSeparators))] and following-sibling::*[1][self::m:mn and not(contains(., $DecimalSeparators))]" then: [t: "divise"] # (en: 'divides', DeepL translation) @@ -168,7 +168,7 @@ - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" then: [t: "tel que"] # (en: 'such that', DeepL translation) - else_if: "$ClearSpeak_VerticalLine = 'Given' or $DefaultToGiven" - then: [t: "donné"] # (en: 'given', DeepL translation) + then: [t: "sachant"] # (en: 'given', DeepL translation) - else: [t: "divise"] # (en: 'divides') - "}": # 0x7d @@ -205,7 +205,7 @@ else: [t: "multiplié par"] # (en: 'cross') else_test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" - then: [t: "multiplié par"] # (en: 'cross', DeepL translation) + then: [t: "croix"] # (en: 'cross', DeepL translation) else: [t: "multiplié par"] # (en: 'times') - "÷": [t: "divisé par"] # 0xf7 (en: 'divided by') @@ -332,7 +332,7 @@ - "→": # 0x2192 - test: if: "ancestor::*[2][self::m:limit]" - then: [t: "approches"] # (en: 'approaches', DeepL translation) + then: [t: "approche"] # (en: 'approaches', DeepL translation) else: [t: "flèche vers la droite"] # (en: 'right arrow', MathPlayer: 'flèche vers la droite') - "↓": [t: "flèche vers le bas"] # 0x2193 (en: 'downwards arrow') diff --git a/tests/Languages/fr/shared.rs b/tests/Languages/fr/shared.rs index ca0c79066..204c00494 100644 --- a/tests/Languages/fr/shared.rs +++ b/tests/Languages/fr/shared.rs @@ -21,7 +21,7 @@ fn modified_vars() -> Result<()> { x ^ + t "; - test("fr", "SimpleSpeak", expr, "a accent grave, b tilde, c diacritique brève; b diacritique caron; c accent grave; plus r caron plus; x point, y point en chef; z tréma; u V diacritique trois points en chef; v W diacritique quatre points en chef; plus x chapeau, plus vecteur t")?; + test("fr", "SimpleSpeak", expr, "a accent grave, b tilde, c diacritique brève; b diacritique caron; c accent grave; plus r caron plus; x point, y point en chef; z tréma; u V diacritique trois points en chef; v W diacritique quatre points en chef; plus x accent circonflexe; plus vecteur t")?; Ok(()) } @@ -90,7 +90,7 @@ fn binomial_subscript() -> Result<()> { // C_{n,k} #[test] fn permutation_mmultiscripts() -> Result<()> { let expr = "Pkn"; - test("fr", "SimpleSpeak", expr, "n pochhammer k")?; + test("fr", "SimpleSpeak", expr, "k permutations de n")?; Ok(()) } @@ -98,7 +98,7 @@ fn permutation_mmultiscripts() -> Result<()> { #[test] fn permutation_mmultiscripts_sup() -> Result<()> { let expr = "Pkn"; - test("fr", "SimpleSpeak", expr, "n pochhammer k")?; + test("fr", "SimpleSpeak", expr, "k permutations de n")?; Ok(()) } @@ -106,7 +106,7 @@ fn permutation_mmultiscripts_sup() -> Result<()> { #[test] fn permutation_msubsup() -> Result<()> { let expr = "Pkn"; - test("fr", "SimpleSpeak", expr, "n pochhammer k")?; + test("fr", "SimpleSpeak", expr, "k permutations de n")?; Ok(()) } @@ -116,8 +116,8 @@ fn tensor_mmultiscripts() -> Result<()> { let expr = " R i j k l "; - test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "majuscule r avec 4 postscripts, indice i")?; - test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, "majuscule r avec 4 postscripts, indice i")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "r majuscule avec 4 postscripts, indice i exposant j indice k indice l")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, "r majuscule avec 4 postscripts, indice i exposant j indice k indice l")?; Ok(()) } @@ -128,7 +128,8 @@ fn huge_num_mmultiscripts() -> Result<()> { R i j k l m I J K L "; - test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "majuscule r avec 4 préscripts, pré-indice majuscule i et avec 5 postscripts, indice i")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, + "r majuscule avec 4 préscripts, pré-indice i majuscule, pré-exposant j majuscule et préscripts alternés k majuscule none l majuscule none fin préscripts et avec 5 postscripts, indice i exposant j indice k indice l et scripts alternés m none fin scripts")?; Ok(()) } @@ -144,8 +145,8 @@ fn prime() -> Result<()> { #[test] fn given() -> Result<()> { let expr = "P(A|B)"; - test("fr", "SimpleSpeak", expr, "majuscule p; parenthèse gauche, majuscule a donné majuscule b; parenthèse droite")?; - test("fr", "ClearSpeak", expr, "majuscule p; parenthèse gauche, majuscule a donné majuscule b; parenthèse droite")?; // not good, but follows the spec + test("fr", "SimpleSpeak", expr, "p majuscule; parenthèse gauche, a majuscule sachant b majuscule; parenthèse droite")?; + test("fr", "ClearSpeak", expr, "p majuscule; parenthèse gauche, a majuscule sachant b majuscule; parenthèse droite")?; // not good, but follows the spec Ok(()) } @@ -165,7 +166,7 @@ fn simple_msubsup() -> Result<()> { "; - test("fr", "ClearSpeak", expr, "x indice k, à la i-ième")?; + test("fr", "ClearSpeak", expr, "x indice k, à la i-ième puissance")?; Ok(()) } @@ -174,7 +175,7 @@ fn simple_msubsup() -> Result<()> { fn non_simple_msubsup() -> Result<()> { let expr = "ij2k"; test("fr", "SimpleSpeak", expr, "i indice j moins 2 fin d'indice, à la k-ième")?; - test("fr", "ClearSpeak", expr, "i indice j moins 2 fin d'indice, à la k-ième")?; + test("fr", "ClearSpeak", expr, "i indice j moins 2 fin d'indice, à la k-ième puissance")?; test_prefs("fr", "SimpleSpeak", vec![("Impairment", "LearningDisability")], expr, "i indice j moins 2, à la k-ième")?; Ok(()) } @@ -198,7 +199,7 @@ fn presentation_mathml_in_semantics() -> Result<()> { "; - test("fr", "ClearSpeak", expr, "x indice k, à la i-ième")?; + test("fr", "ClearSpeak", expr, "x indice k, à la i-ième puissance")?; Ok(()) } @@ -217,7 +218,7 @@ fn ignore_period() -> Result<()> { A -  and  +  et  B @@ -244,7 +245,8 @@ fn ignore_period() -> Result<()> { "; - test("fr", "SimpleSpeak", expr, "majuscule p; parenthèse gauche, majuscule a and majuscule b; parenthèse droite; est égal à; majuscule p; parenthèse gauche, majuscule a intersection majuscule b; parenthèse droite; est égal à; majuscule p de majuscule a; majuscule p de majuscule b")?; + test("fr", "SimpleSpeak", expr, + "p majuscule; parenthèse gauche, a majuscule et b majuscule; parenthèse droite; est égal à; p majuscule; parenthèse gauche, a majuscule intersection b majuscule; parenthèse droite; est égal à; p majuscule de a majuscule; p majuscule de b majuscule")?; Ok(()) } @@ -291,7 +293,7 @@ fn ignore_comma() -> Result<()> { "; - test("fr", "SimpleSpeak", expr, "phi droit de x, est égal à; c fois, e élevé à la négatif h au carré, x au carré puissance")?; + test("fr", "SimpleSpeak", expr, "phi de x est égal à; c fois, e élevé à la puissance moins h au carré, x au carré")?; Ok(()) } @@ -355,7 +357,7 @@ fn bug_199_2pi() -> Result<()> { ) "; - test("fr", "SimpleSpeak", expr, "closed open interval de 0 comma, 2 pi")?; + test("fr", "SimpleSpeak", expr, "l'intervalle fermé ouvert de 0 à 2 pi")?; Ok(()) } @@ -363,7 +365,7 @@ fn bug_199_2pi() -> Result<()> { #[test] fn caret_and_hat() -> Result<()> { let expr = "x^2+y^"; - test("fr", "SimpleSpeak", expr, "x circonflexe 2, plus y chapeau")?; + test("fr", "SimpleSpeak", expr, "x accent circonflexe 2, plus y accent circonflexe")?; Ok(()) } @@ -390,7 +392,7 @@ fn ignore_bold() -> Result<()> { - 1 "#; - test_prefs("fr", "SimpleSpeak", vec![("IgnoreBold", "false")], expr, "gras x est égal à, 2 sinus de gras t, moins 1")?; + test_prefs("fr", "SimpleSpeak", vec![("IgnoreBold", "false")], expr, "x gras est égal à, 2 sinus de t gras, moins 1")?; test_prefs("fr", "SimpleSpeak", vec![("IgnoreBold", "true")], expr, "x est égal à, 2 sinus de t, moins 1")?; Ok(()) } @@ -407,8 +409,8 @@ fn mn_with_block_and_decimal_separators() -> Result<()> { #[test] fn divergence() -> Result<()> { let expr = "·F"; // may want to change this for another language - test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "div majuscule f")?; - test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "divergence de majuscule f")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "div f majuscule")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "divergence de f majuscule")?; Ok(()) } @@ -417,8 +419,8 @@ fn divergence() -> Result<()> { fn curl() -> Result<()> { let expr = "×F"; // may want to change this for another language - test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "rotationnel majuscule f")?; - test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "rotationnel de majuscule f")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "rotationnel f majuscule")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "rotationnel de f majuscule")?; Ok(()) } @@ -427,8 +429,8 @@ fn curl() -> Result<()> { fn gradient() -> Result<()> { let expr = "F"; // may want to change this for another language - test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "del majuscule f")?; - test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "gradient de majuscule f")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "grad f majuscule")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "gradient de f majuscule")?; Ok(()) } @@ -441,14 +443,14 @@ fn literal_speak_perpendicular() -> Result<()> { A - + B "#; - test("fr", "LiteralSpeak", expr, "majuscule a flèche droite, perpendicular to, majuscule b flèche droite")?; + test("fr", "LiteralSpeak", expr, "a majuscule flèche vers la droite, perpendiculaire à, b majuscule flèche vers la droite")?; Ok(()) } @@ -468,14 +470,14 @@ fn literal_speak_chars() -> Result<()> { "#; - test("fr", "LiteralSpeak", expr, "ligne verticale; x croix, y point z barre oblique 2; plus a; double ligne verticale, b plus x factorielle; ligne verticale")?; + test("fr", "LiteralSpeak", expr, "ligne verticale; x croix, y point z barre oblique 2; plus a; double ligne verticale, b plus x point d'exclamation; ligne verticale")?; Ok(()) } // AI generated #[test] fn literal_speak_with_name() -> Result<()> { - let expr = r#" + let expr = r#" f @@ -489,7 +491,7 @@ fn literal_speak_with_name() -> Result<()> { "#; - test("fr", "LiteralSpeak", expr, "forced f, parenthèse gauche, x factorielle, parenthèse droite")?; + test("fr", "LiteralSpeak", expr, "forcé f, parenthèse gauche, x point d'exclamation, parenthèse droite")?; Ok(()) } @@ -510,7 +512,7 @@ fn literal_speak_with_property() -> Result<()> { "#; - test("fr", "LiteralSpeak", expr, "f, parenthèse gauche, x factorielle, parenthèse droite")?; + test("fr", "LiteralSpeak", expr, "f, parenthèse gauche, x point d'exclamation, parenthèse droite")?; Ok(()) } @@ -523,21 +525,21 @@ fn literal_intent_property() -> Result<()> { A - + B "#; - test("fr", "SimpleSpeak", expr, "majuscule a flèche droite, perpendicular to, majuscule b flèche droite")?; + test("fr", "SimpleSpeak", expr, "a majuscule flèche vers la droite, perpendiculaire à, b majuscule flèche vers la droite")?; Ok(()) } // AI generated #[test] fn literal_intent_property_with_name() -> Result<()> { - let expr = r#" + let expr = r#" f @@ -551,6 +553,6 @@ fn literal_intent_property_with_name() -> Result<()> { "#; - test("fr", "SimpleSpeak", expr, "forced f, parenthèse gauche, x factorielle, parenthèse droite")?; + test("fr", "SimpleSpeak", expr, "forcé f, parenthèse gauche, x point d'exclamation, parenthèse droite")?; Ok(()) } From c7aaa5b7250ceaecaddc4412836fc8286f96b233 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Mon, 25 May 2026 18:08:53 -0400 Subject: [PATCH 26/53] corrections to units.rs --- tests/Languages/fr.rs | 1 + tests/Languages/fr/units.rs | 549 ++++++++++++++++++++++++++++++++++++ 2 files changed, 550 insertions(+) create mode 100644 tests/Languages/fr/units.rs diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index 3ba3cdfd4..eadb0d419 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -17,3 +17,4 @@ mod alphabets; mod chemistry; mod intent; mod mtable; +mod units; diff --git a/tests/Languages/fr/units.rs b/tests/Languages/fr/units.rs new file mode 100644 index 000000000..cb22e6002 --- /dev/null +++ b/tests/Languages/fr/units.rs @@ -0,0 +1,549 @@ +/// 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("fr", "SimpleSpeak", expr, + "quetta-grammes, virgule; \ + ronna-grammes, virgule; \ + yotta-grammes, virgule; \ + zetta-grammes, virgule, \ + exa-grammes, virgule; \ + peta-grammes, virgule; \ + tera-grammes, virgule; \ + giga-grammes, virgule; \ + mega-grammes, virgule; \ + kilo-grammes, virgule; \ + hecto-grammes, virgule; \ + déca-grammes, virgule; \ + déci-grammes, virgule; \ + centi-grammes, virgule; \ + milli-grammes, virgule; \ + micro-grammes, virgule; \ + nano-grammes, virgule; \ + pico-grammes, virgule; \ + femto-grammes, virgule; \ + atto-grammes, virgule; \ + zepto-grammes, virgule; \ + yocto-grammes, virgule; \ + ronto-grammes, virgule; \ + quecto-grammes")?; + 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("fr", "SimpleSpeak", expr, + "1 ampère, virgule; 2 ampères, virgule, \ + 1 candela, virgule; 2 candelas, virgule, \ + 1 kelvin, virgule; 2 kelvins, virgule, \ + 1 kelvin, virgule; 2 kelvins, virgule, \ + 1 gramme, virgule; 2 grammes, virgule, \ + 1 mètre, virgule; 2 mètres, virgule, \ + 1 mole, virgule; 2 moles, virgule, \ + 1 seconde, virgule; 2 secondes, virgule, \ + 1 seconde, virgule; 2 secondes, virgule, \ + 1 seconde, virgule; 2 secondes, virgule, \ + 1 seconde, virgule; 2 secondes")?; + 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("fr", "SimpleSpeak", expr, + "1 quetta-ampère, virgule; 2 ronna-ampères; virgule; \ + 1 yotta-candela, virgule; 2 zetta-candelas; virgule; \ + 1 exa-kelvin, virgule; 2 peta-kelvins, virgule; \ + 1 tera-kelvin, virgule; 2 giga-kelvins, virgule; \ + 1 mega-gramme, virgule; 2 kilo-grammes, virgule; \ + 1 hecto-mètre, virgule; 2 déca-mètres, virgule; \ + 1 déci-mole, virgule; 2 centi-moles, virgule; \ + 1 milli-seconde, virgule; 2 micro-secondes; virgule; \ + 1 nano-seconde, virgule; 2 pico-secondes")?; + 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("fr", "SimpleSpeak", expr, + "1 becquerel, virgule; 2 becquerels, virgule, \ + 1 coulomb, virgule; 2 coulombs, virgule; \ + 1 degré Celsius, virgule; 2 degrés Celsius, virgule; \ + 1 degré Celsius, virgule; 2 degrés Celsius, virgule, \ + 1 farad, virgule; 2 farads, virgule, \ + 1 gray, virgule; 2 grays, virgule, \ + 1 henry, virgule; 2 henrys, virgule, \ + 1 hertz, virgule, 2 hertz, virgule, \ + 1 joule, virgule; 2 joules, virgule, \ + 1 katal, virgule; 2 katals, virgule, \ + 1 lumen, virgule; 2 lumens, virgule, \ + 1 lux, virgule, 2 lux")?; + 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("fr", "SimpleSpeak", expr, + "1 quetta-becquerel, virgule; 2 ronna-becquerels; virgule; \ + 1 yotta-coulomb, virgule; 2 zetta-coulombs; virgule; \ + 1 exa-farad, virgule; 2 peta-farads, virgule; \ + 1 tera-gray, virgule; 2 giga-grays, virgule; \ + 1 mega-henry, virgule; 2 kilo-henrys, virgule; \ + 1 déca-hertz, virgule; 2 déci-hertz, virgule; \ + 1 centi-joule, virgule; 2 milli-joules, virgule; \ + 1 micro-katal, virgule; 2 nano-katals, virgule; \ + 1 pico-lumen, virgule; 2 femto-lumens, virgule; \ + 1 atto-lux, virgule; 2 zepto-lux, virgule; \ + 1 milli-degré Celsius; virgule; 2 micro-degrés Celsius; virgule; \ + 1 pico-degré Celsius; virgule; 2 nano-degrés Celsius")?; + 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("fr", "SimpleSpeak", expr, + "1 newton, virgule; 2 newtons, virgule, \ + 1 ohm, virgule; 2 ohms, virgule, \ + 1 ohm, virgule; 2 ohms, virgule, \ + 1 pascal, virgule; 2 pascals, virgule, \ + 1 siemens, virgule, 2 siemens, virgule, \ + 1 sievert, virgule; 2 sieverts, virgule, \ + 1 tesla, virgule; 2 teslas, virgule, \ + 1 volt, virgule; 2 volts, virgule, \ + 1 watt, virgule; 2 watts, virgule, \ + 1 weber, virgule; 2 webers")?; + 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("fr", "SimpleSpeak", expr, + "1 quecto-newton, virgule; 2 ronto-newtons, virgule; \ + 1 yocto-ohm, virgule; 2 zepto-ohms, virgule; \ + 1 atto-ohm, virgule; 2 femto-ohms, virgule; \ + 1 pico-pascal, virgule; 2 nano-pascals, virgule; \ + 1 micro-siemens, virgule; 2 milli-siemens, virgule; \ + 1 centi-sievert, virgule; 2 déci-sieverts; virgule; \ + 1 déca-tesla, virgule; 2 hecto-teslas, virgule; \ + 1 kilo-volt, virgule; 2 mega-volts, virgule; \ + 1 giga-watt, virgule; 2 tera-watts, virgule; \ + 1 peta-weber, virgule; 2 exa-webers")?; + 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("fr", "SimpleSpeak", expr, + "1 litre, virgule; 2 litres, virgule, \ + 1 litre, virgule; 2 litres, virgule, \ + 1 litre, virgule; 2 litres, virgule; \ + 1 tonne métrique, virgule; 2 tonne métriques, virgule, \ + 1 dalton, virgule; 2 daltons, virgule, \ + 1 néper, virgule; 2 népers, virgule; \ + 1 unité de masse atomique, virgule; 2 unités de masse atomique, virgule; \ + 1 électronvolt, virgule; 2 électronvolts, virgule, \ + 1 radian, virgule; 2 radians, virgule; \ + 1 stéradian, virgule; 2 stéradians, virgule, \ + 1 année, virgule; 2 années, virgule; \ + 1 seconde d'arc, virgule; 2 secondes d'arc, virgule, \ + 1 bit, virgule; 2 bits, virgule, \ + 1 octet, virgule; 2 octets, virgule, \ + 1 baud, virgule; 2 bauds")?; + 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("fr", "SimpleSpeak", expr, + "1 quetta-litre, virgule; 2 ronna-litres, virgule; \ + 1 yotta-litre, virgule; 2 zetta-litres, virgule; \ + 1 exa-litre, virgule; 2 peta-litres, virgule; \ + 1 tera-tonne métrique; virgule; 2 giga-tonne métriques; virgule; \ + 1 mega-dalton, virgule; 2 kilo-daltons, virgule; \ + 1 déci-néper, virgule; 2 centi-népers, virgule; \ + 1, hecto-unité de masse atomique; virgule; 2, déca-unités de masse atomique; virgule; \ + 1 milli-électronvolt; virgule; 2 micro-électronvolts; virgule; \ + 1 nano-radian, virgule; 2 pico-radians, virgule; \ + 1 femto-stéradian, virgule; 2 atto-stéradians; virgule; \ + 1 giga-année, virgule; 2 mega-années, virgule; \ + 1 zepto-seconde d'arc; virgule; 2 yocto-secondes d'arc; virgule; \ + 1 kilo-bit, virgule; 2 mega-bits, virgule; \ + 1 giga-octet, virgule; 2 tera-octets, virgule; \ + 1 tera-baud, virgule; 2 exa-bauds")?; + 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("fr", "SimpleSpeak", expr, + "1 seconde, virgule; 2 secondes, virgule, \ + 1 seconde, virgule; 2 secondes, virgule, \ + 1 minute, virgule; 2 minutes, virgule, \ + 1 minute, virgule; 2 minutes, virgule, \ + 1 minute, virgule; 2 minutes, virgule, \ + 1 heure, virgule; 2 heures, virgule, \ + 1 heure, virgule; 2 heures, virgule, \ + 1 heure, virgule; 2 heures, virgule, \ + 1 jour, virgule; 2 jours, virgule, \ + 1 jour, virgule; 2 jours, virgule, \ + 1 semaine, virgule; 2 semaines, virgule, \ + 1 semaine, virgule; 2 semaines, virgule, \ + 1 année, virgule; 2 années, virgule, \ + 1 année, virgule; 2 années")?; + 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("fr", "SimpleSpeak", expr, + "1 degré, virgule, 2 degrés, virgule, \ + 1 degré, virgule, 2 degrés, virgule; \ + 1 minute d'arc, virgule; 2 minutes d'arc, virgule; \ + 1 minute d'arc, virgule; 2 minutes d'arc, virgule; \ + 1 minute d'arc, virgule; 2 minutes d'arc, virgule; \ + 1 minute d'arc, virgule; 2 minutes d'arc, virgule; \ + 1 seconde d'arc, virgule; 2 secondes d'arc, virgule; \ + 1 seconde d'arc, virgule; 2 secondes d'arc")?; + return Ok(()); + +} + +#[test] +fn without_prefix_distance() -> Result<()> { + let expr = r#" + 1au,2au, + 1ltyr,2ltyr, + 1pc,2pc, + 1Å,2Å, + 1,2, + 1fm,2fm + "#; + test("fr", "SimpleSpeak", expr, + "1 unité astronomique, virgule; 2 unités astronomiques, virgule; \ + 1 année-lumière, virgule; 2 années-lumière, virgule, \ + 1 parsec, virgule; 2 parsecs, virgule; \ + 1 ångström, virgule; 2 ångströms, virgule; \ + 1 ångström, virgule; 2 ångströms, virgule, \ + 1 fermi, virgule; 2 fermis")?; + 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("fr", "SimpleSpeak", expr, + "1 hectare, virgule; 2 hectares, virgule; \ + 1 décibel, virgule; 2 décibels, virgule; \ + 1 atmosphère, virgule; 2 atmosphères, virgule; \ + 1 unité de masse atomique, virgule; 2 unités de masse atomique, virgule, \ + 1 bar, virgule; 2 bars, virgule, \ + 1 calorie, virgule; 2 calories, virgule, \ + 1 curie, virgule; 2 curies, virgule, \ + 1 gradian, virgule; 2 gradians, virgule, \ + 1 molaire, virgule; 2 molaires, virgule; \ + 1 roentgen, virgule; 2 roentgens, virgule; \ + 1 tour par minute, virgule; 2 tours par minute, virgule; \ + 1 dram liquide, virgule; 2 dram liquides, virgule, \ + 1 mho, virgule; 2 mhos, virgule, \ + 1 dyne, virgule; 2 dynes, virgule, \ + 1 erg, virgule; 2 ergs")?; + 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("fr", "SimpleSpeak", expr, + "1 kibi-bit, virgule; 2 kibi-bits, virgule; \ + 1 mebi-bit, virgule; 2 mebi-bits, virgule; \ + 1 gibi-bit, virgule; 2 gibi-bits, virgule; \ + 1 tebi-bit, virgule; 2 tebi-bits, virgule; \ + 1 pebi-bit, virgule; 2 pebi-bits, virgule; \ + 1 exbi-bit, virgule; 2 exbi-bits, virgule; \ + 1 zebi-bit, virgule; 2 zebi-bits, virgule; \ + 1 yobi-bit, virgule; 2 yobi-bits, virgule; \ + 1 kibi-octet, virgule; 2 kibi-octets, virgule; \ + 1 mebi-octet, virgule; 2 mebi-octets, virgule; \ + 1 gibi-octet, virgule; 2 gibi-octets, virgule; \ + 1 tebi-octet, virgule; 2 tebi-octets, virgule; \ + 1 pebi-octet, virgule; 2 pebi-octets, virgule; \ + 1 exbi-octet, virgule; 2 exbi-octets, virgule; \ + 1 zebi-octet, virgule; 2 zebi-octets, virgule; \ + 1 yobi-octet, virgule; 2 yobi-octets")?; + 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("fr", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, + "1,0 l virgule, 2,0 m virgule; x milli-secondes; virgule; y micro-secondes; virgule; déca-grammes, virgule; \ + 1235 déca-newtons; virgule; 2,5 micro-secondes; virgule; 32,34 moles")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium")], expr, + "1,0 litres, virgule; 2,0 mètres, virgule; x milli-secondes; virgule; y micro-secondes; virgule; déca-grammes, virgule; \ + 1235 déca-newtons; virgule; 2,5 micro-secondes; virgule; 32,34 moles")?; + test_prefs("fr", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, + "1,0 litres, virgule; 2,0 mètres, virgule; x milli-secondes; virgule; y micro-secondes; virgule; déca-grammes, virgule; \ + 1235 déca-newtons; virgule; 2,5 micro-secondes; virgule; 32,34 moles")?; + return Ok(()); + +} + + +#[test] +fn test_mtext_inference() -> Result<()> { + let expr = r#"[ + 1t, + 2PA, + 3Pa, + 4.5mT + ]"#; + test("fr", "SimpleSpeak", expr, + "crochet ouvrant; 1 tonne métrique, virgule; 2 peta-ampères, virgule; \ + 3 pascals, virgule; 45 milli-teslas; crochet fermant")?; + return Ok(()); + +} + + #[test] + fn infer_unit() -> Result<()> { + let expr = r#" + 3m, + 1km, + 3m, + 310F, + mmin + "#; + test("fr", "SimpleSpeak", expr, + "3 mètres, virgule; 1 kilo-mètre, virgule; 3 mètres, virgule; 3 dixièmes farads, virgule; m indice min fin d'indice")?; + return Ok(()); + + } From 14e4fccf218b81ab42795abe60d0c09077231742 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Wed, 3 Jun 2026 09:13:09 -0400 Subject: [PATCH 27/53] fixed all unit tests --- tests/Languages/fr/SimpleSpeak/functions.rs | 2 +- tests/Languages/fr/chemistry.rs | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/Languages/fr/SimpleSpeak/functions.rs b/tests/Languages/fr/SimpleSpeak/functions.rs index cd7d6cbc8..7e816f2c6 100644 --- a/tests/Languages/fr/SimpleSpeak/functions.rs +++ b/tests/Languages/fr/SimpleSpeak/functions.rs @@ -334,7 +334,7 @@ fn no_times_sqrt() -> Result<()> { [(]c,d) ) "; - test("fr", "SimpleSpeak", expr, "l'invervalle fermé ouvert fermé de c à d")?; + test("fr", "SimpleSpeak", expr, "l'intervalle fermé ouvert de c à d")?; Ok(()) } diff --git a/tests/Languages/fr/chemistry.rs b/tests/Languages/fr/chemistry.rs index 401858180..191d274d4 100644 --- a/tests/Languages/fr/chemistry.rs +++ b/tests/Languages/fr/chemistry.rs @@ -161,11 +161,11 @@ fn beta_decay() -> Result<()> { "; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Terse")], expr, - "14, 6, c majuscule; forment; 14, 7, n majuscule; plus 0, négatif 1, e")?; + "14, 6, c majuscule; forment, 14, 7, n majuscule; plus 0, moins 1, e")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium")], expr, - "exposant 14, indice 6, c majuscule; réagissent pour former; exposant 14, indice 7, n majuscule; plus, exposant 0, indice négatif 1, e")?; + "exposant 14, indice 6, c majuscule; réagissent pour former; exposant 14, indice 7, n majuscule; plus, exposant 0, indice moins 1, e")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, - "exposant 14, indice 6, c majuscule; réagissent pour former; exposant 14, indice 7, n majuscule; plus, exposant 0, indice négatif 1, e")?; + "exposant 14, indice 6, c majuscule; réagissent pour former; exposant 14, indice 7, n majuscule; plus, exposant 0, indice moins 1, e")?; return Ok(()); } @@ -427,11 +427,11 @@ fn mhchem_beta_decay() -> Result<()> { "; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Terse")], expr, - "14, 6, c majuscule; forment; 14, 7, n majuscule; plus 0, négatif 1, e")?; + "14, 6, c majuscule; forment, 14, 7, n majuscule; plus 0, moins 1, e")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium")], expr, - "exposant 14, indice 6, c majuscule; réagissent pour former; exposant 14, indice 7, n majuscule; plus, exposant 0, indice négatif 1, e")?; + "exposant 14, indice 6, c majuscule; réagissent pour former; exposant 14, indice 7, n majuscule; plus, exposant 0, indice moins 1, e")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, - "exposant 14, indice 6, c majuscule; réagissent pour former; exposant 14, indice 7, n majuscule; plus, exposant 0, indice négatif 1, e")?; + "exposant 14, indice 6, c majuscule; réagissent pour former; exposant 14, indice 7, n majuscule; plus, exposant 0, indice moins 1, e")?; return Ok(()); } From 730285b44fc8e903a1fdd9fa3a0b575c658b235a Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Wed, 3 Jun 2026 09:26:12 -0400 Subject: [PATCH 28/53] cleanup --- Rules/Languages/fr/definitions.yaml | 15 +++------------ tests/Languages/fr/intent.rs | 13 +++++++++++++ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/Rules/Languages/fr/definitions.yaml b/Rules/Languages/fr/definitions.yaml index 39fd461ec..a7f9558eb 100644 --- a/Rules/Languages/fr/definitions.yaml +++ b/Rules/Languages/fr/definitions.yaml @@ -286,31 +286,22 @@ # All definitions start 0, 10, 100, etc. -# TODO: does that belong here? (vingt-et-un, trente-et-un, etc.) - NumbersOnes: [ "zéro", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize", - "dix-sept", "dix-huit", "dix-neuf", - "vingt-et-un", "trente-et-un", "quarante-et-un", "cinquante-et-un", "soixante-et-un", - "soixante-et-onze", "quatre-vingt-un", "quatre-vingt-onze" + "dix-sept", "dix-huit", "dix-neuf" ] -# TODO: does that belong here? (vingt-et-unième, trente-et-unième, etc.) - NumbersOrdinalOnes: [ "zéroième", "premier", "deuxième", "troisième", "quatrième", "cinquième", "sixième", "septième", "huitième", "neuvième", "dixième", "onzième", "douzième", "treizième", "quatorzième", "quinzième", "seizième", - "dix-septième", "dix-huitième", "dix-neuvième", - "vingt-et-unième", "trente-et-unième", "quarante-et-unième", "cinquante-et-unième", "soixante-et-unième", - "soixante-et-onzième", "quatre-vingt-unième", "quatre-vingt-onzième" + "dix-septième", "dix-huitième", "dix-neuvième" ] -# TODO: does that belong here? (vingt-et-unièmes, trente-et-unièmes, etc.) - NumbersOrdinalPluralOnes: [ "zéroièmes", "premiers", "deuxièmes", "troisièmes", "quatrièmes", "cinquièmes", "sixièmes", "septièmes", "huitièmes", "neuvièmes", "dixièmes", "onzièmes", "douzièmes", "treizièmes", "quatorzièmes", "quinzièmes", "seizièmes", - "dix-septièmes", "dix-huitièmes", "dix-neuvièmes", - "vingt-et-unièmes", "trente-et-unièmes", "quarante-et-unièmes", "cinquante-et-unièmes", "soixante-et-unièmes", - "soixante-et-onzièmes", "quatre-vingt-unièmes", "quatre-vingt-onzièmes" + "dix-septièmes", "dix-huitièmes", "dix-neuvièmes" ] - NumbersOrdinalFractionalOnes: [ diff --git a/tests/Languages/fr/intent.rs b/tests/Languages/fr/intent.rs index caf2abd10..e73fa4222 100644 --- a/tests/Languages/fr/intent.rs +++ b/tests/Languages/fr/intent.rs @@ -142,3 +142,16 @@ fn intent_prob_x() -> Result<()> { return Ok(()); } + +#[test] +fn do_some_stuff_71() -> Result<()> { + let expr = " + + 41 + + + 71 + + "; + test("fr", "SimpleSpeak", expr, "quarante et un plus soixante et onze") + +} From 16ddbc5b169d55e7ab04442532ced574e8b4254f Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Wed, 3 Jun 2026 09:27:15 -0400 Subject: [PATCH 29/53] more cleanup --- tests/Languages/fr/intent.rs | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/tests/Languages/fr/intent.rs b/tests/Languages/fr/intent.rs index e73fa4222..1fa7bcb4b 100644 --- a/tests/Languages/fr/intent.rs +++ b/tests/Languages/fr/intent.rs @@ -141,17 +141,4 @@ fn intent_prob_x() -> Result<()> { test("fr", "ClearSpeak", expr, "probabilité de x")?; return Ok(()); -} - -#[test] -fn do_some_stuff_71() -> Result<()> { - let expr = " - - 41 - + - 71 - - "; - test("fr", "SimpleSpeak", expr, "quarante et un plus soixante et onze") - -} +} \ No newline at end of file From 8be4ab15f724e8bf672d99601c7a44088f9500c0 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Thu, 4 Jun 2026 10:16:01 -0400 Subject: [PATCH 30/53] finalized rules, replaced t: -> T:, ct: -> CT:, ot: -> OT, spell: -> SPELL: --- Rules/Languages/fr/ClearSpeak_Rules.yaml | 212 ++++---- Rules/Languages/fr/SharedRules/calculus.yaml | 16 +- Rules/Languages/fr/SharedRules/default.yaml | 184 +++---- Rules/Languages/fr/SharedRules/general.yaml | 394 +++++++------- Rules/Languages/fr/SharedRules/geometry.yaml | 30 +- .../fr/SharedRules/linear-algebra.yaml | 14 +- Rules/Languages/fr/SimpleSpeak_Rules.yaml | 70 +-- Rules/Languages/fr/overview.yaml | 34 +- Rules/Languages/fr/unicode.yaml | 498 +++++++++--------- 9 files changed, 726 insertions(+), 726 deletions(-) diff --git a/Rules/Languages/fr/ClearSpeak_Rules.yaml b/Rules/Languages/fr/ClearSpeak_Rules.yaml index 6dc24be3f..18e9cd916 100644 --- a/Rules/Languages/fr/ClearSpeak_Rules.yaml +++ b/Rules/Languages/fr/ClearSpeak_Rules.yaml @@ -25,7 +25,7 @@ tag: mn match: "starts-with(text(), '-')" replace: - - t: "moins" # phrase(10 'minus' 4 equals 6) + - T: "moins" # phrase(10 'minus' 4 equals 6) - x: "translate(text(), '-_', '')" - name: default @@ -34,26 +34,26 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "la"] # phrase('the' square root of 25) + then: [T: "la"] # phrase('the' square root of 25) - test: if: "$ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" then: - bookmark: "*[1]/@id" - test: if: "parent::*[self::m:minus and count(*)=1]" - then: [t: "négatif"] # phrase(minus 4 is a 'negative' number) - else: [t: "positif"] # phrase(10 is a 'positive' number) - - t: "racine carrée" # phrase(8 is the 'square root' of 64) + then: [T: "négatif"] # phrase(minus 4 is a 'negative' number) + else: [T: "positif"] # phrase(10 is a 'positive' number) + - T: "racine carrée" # phrase(8 is the 'square root' of 64) - test: if: "$Verbosity!='Terse'" - then: [t: "de"] # phrase(the square root 'of' 5) + then: [T: "de"] # phrase(the square root 'of' 5) else: [pause: short] - x: "*[1]" - test: - if: "$ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" then: - pause: short - - t: "fin de racine" # phrase(the square root of x 'end root') + - T: "fin de racine" # phrase(the square root of x 'end root') - pause: medium - else_if: "IsNode(*[1], 'simple')" then: [pause: short] @@ -65,7 +65,7 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "la"] # phrase(6 is 'the' square root of 36) + then: [T: "la"] # phrase(6 is 'the' square root of 36) - test: if: "$ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" then: @@ -74,16 +74,16 @@ then: [bookmark: "parent/@id"] - test: if: "parent::m:minus" - then: [t: "négatif"] # phrase(minus 6 is a 'negative' number) - else: [t: "positif"] # phrase(10 is a 'positive' number) + then: [T: "négatif"] # phrase(minus 6 is a 'negative' number) + else: [T: "positif"] # phrase(10 is a 'positive' number) - test: if: "*[2][self::m:mn and not(contains(., '.'))]" then_test: - if: "*[2][.='2']" - then: [t: "racine carrée"] # phrase(5 is the 'square root' of 25) + then: [T: "racine carrée"] # phrase(5 is the 'square root' of 25) - else_if: "*[2][.='3']" - then: [t: "racine cubique"] # phrase(5 is the 'cube root' of 625) - - else: [x: "ToOrdinal(*[2])", t: "racine"] # phrase(the square 'root' of 25) + then: [T: "racine cubique"] # phrase(5 is the 'cube root' of 625) + - else: [x: "ToOrdinal(*[2])", T: "racine"] # phrase(the square 'root' of 25) else: - test: if: "*[2][self::m:mi][string-length(.)=1]" @@ -91,16 +91,16 @@ - x: "*[2]" - pronounce: [text: "-ième", ipa: "jɛm", sapi5: "ieme", eloquence: "ieme"] else: [x: "*[2]"] - - t: "racine" # phrase(the square 'root' of 36) + - T: "racine" # phrase(the square 'root' of 36) - test: if: "$Verbosity!='Terse'" - then: [t: "de"] # phrase(the square root 'of' 36) + then: [T: "de"] # phrase(the square root 'of' 36) - x: "*[1]" - test: if: "$ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" then: - pause: short - - t: "fin de racine" # phrase(start the fifth root of x 'end root') + - T: "fin de racine" # phrase(start the fifth root of x 'end root') - pause: medium else_test: if: "IsNode(*[1], 'simple')" @@ -116,13 +116,13 @@ 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:minus" - then: [t: "moins"] - else: [t: "plus"] + then: [T: "moins"] + else: [T: "plus"] - x: "*[1]" # Fraction rules @@ -139,7 +139,7 @@ - " BaseNode(*[2])[contains(@data-intent-property, ':unit')] )" replace: - x: "*[1]" - - t: "par" # phrase('5 meters 'per' second) + - T: "par" # phrase('5 meters 'per' second) - x: "*[2]" - name: common-fraction @@ -165,17 +165,17 @@ then: - test: if: "$Verbosity!='Terse'" - then: [ot: "la"] - - t: "fraction" # phrase(the 'fraction' with 3 over 4) + then: [OT: "la"] + - T: "fraction" # phrase(the 'fraction' with 3 over 4) - x: "*[1]" - - t: "sur" # phrase(the fraction 3 'over' 4) + - T: "sur" # phrase(the fraction 3 'over' 4) - x: "*[2]" - test: # very ugly!!! -- replicate nested ordinal fraction as they are an exception if: "$ClearSpeak_Fractions='OverEndFrac' or ($ClearSpeak_Fractions='EndFrac' and not( ($ClearSpeak_Fractions='Auto' or $ClearSpeak_Fractions='Ordinal' or $ClearSpeak_Fractions='EndFrac') and *[1][*[1][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or text()<20)] and *[2][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or (2<= text() and text()<=10))] ] and *[2][*[1][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or text()<20)] and *[2][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or (2<= text() and text()<=10))] ] ) )" then: - pause: short - - t: "fin de fraction" # phrase(7 over 8 'end fraction') + - T: "fin de fraction" # phrase(7 over 8 'end fraction') - pause: short - # fraction with text or numbers followed by text in both numerator and denominator @@ -197,34 +197,34 @@ - ")" replace: - x: "*[1]" - - t: "sur" # phrase(the fraction 3 'over' 4) + - T: "sur" # phrase(the fraction 3 'over' 4) - x: "*[2]" - test: if: "$ClearSpeak_Fractions='EndFrac' or $ClearSpeak_Fractions='OverEndFrac'" then: - pause: short - - t: "fin de fraction" # phrase(7 over 8 'end fraction') + - T: "fin de fraction" # phrase(7 over 8 'end fraction') - pause: short - name: default tag: fraction match: "." replace: - - ot: "la" # phrase(5 is 'the' square root of 25) - - t: "fraction avec numérateur" # phrase(the 'fraction with numerator' 6) + - OT: "la" # phrase(5 is 'the' square root of 25) + - T: "fraction avec numérateur" # phrase(the 'fraction with numerator' 6) - test: if: "not(IsNode(*[1], 'simple'))" then: [pause: medium] - x: "*[1]" - pause: medium - - t: "et dénominateur" # phrase(the fraction with numerator 5 'and denominator' 8) + - T: "et dénominateur" # phrase(the fraction with numerator 5 'and denominator' 8) - x: "*[2]" - pause: long - test: if: "$ClearSpeak_Fractions='EndFrac' or $ClearSpeak_Fractions='GeneralEndFrac'" then: - pause: short - - t: "fin de fraction" # phrase(the fraction with 3 over 4 'end fraction') + - T: "fin de fraction" # phrase(the fraction with 3 over 4 'end fraction') - pause: short # rules for functions raised to a power @@ -236,11 +236,11 @@ replace: - test: if: "$ClearSpeak_Trig = 'TrigInverse'" - then: [x: "*[1]", bookmark: "*[2]/@id", t: "l'inverse"] # phrase(8 over 5 is the 'inverse' of 5 over 8) + then: [x: "*[1]", bookmark: "*[2]/@id", T: "l'inverse"] # phrase(8 over 5 is the 'inverse' of 5 over 8) else_test: if: "$ClearSpeak_Trig = 'ArcTrig'" - then: [bookmark: "*[2]/@id", t: "arc", x: "*[1]"] # phrase(the 'arc' of a circle) - else: [bookmark: "*[2]/@id", t: "l'inverse", x: "*[1]"] # default/Auto # phrase(8 over 5 is the 'inverse' of 5 over 8) + then: [bookmark: "*[2]/@id", T: "arc", x: "*[1]"] # phrase(the 'arc' of a circle) + else: [bookmark: "*[2]/@id", T: "l'inverse", x: "*[1]"] # default/Auto # phrase(8 over 5 is the 'inverse' of 5 over 8) - name: function-squared-or-cubed tag: power @@ -252,8 +252,8 @@ - bookmark: "*[2]/@id" - test: if: "*[2][.='2']" - then: [t: "au carré"] # phrase(25 equals 5 'squared') - else: [t: "au cube"] # phrase(625 equals 5 'cubed') + then: [T: "au carré"] # phrase(25 equals 5 'squared') + else: [T: "au cube"] # phrase(625 equals 5 'cubed') - name: function-power tag: power @@ -262,13 +262,13 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "la"] # phrase('the' third power of 2) + then: [T: "la"] # phrase('the' third power of 2) - bookmark: "*[2]/@id" - test: if: "*[2][self::m:mn][not(contains(., '.'))]" then: [x: "ToOrdinal(*[2])"] else: [x: "*[2]"] - - t: "puissance de" # phrase(the third 'power of' 6) + - T: "puissance de" # phrase(the third 'power of' 6) - pause: short - x: "*[1]" @@ -279,18 +279,18 @@ - "*[2][self::m:power or self::m:power or self::m:mrow[m:power]]" replace: - x: "*[1]" - - t: "à la puissance de" # phrase(5 'raised to the exponent' x plus 1) + - T: "à la puissance de" # phrase(5 'raised to the exponent' x plus 1) - pause: short - x: "*[2]" - pause: short - - t: "fin de l'exposant" # phrase(5 raised to the exponent x plus 1 'end exponent') + - T: "fin de l'exposant" # phrase(5 raised to the exponent x plus 1 'end exponent') - name: AfterPower-default tag: power match: "$ClearSpeak_Exponents = 'AfterPower'" replace: - x: "*[1]" - - t: "à la puissance de" # phrase(x is 'raised to the power' 4) + - T: "à la puissance de" # phrase(x is 'raised to the power' 4) - x: "*[2]" - pause: short @@ -300,7 +300,7 @@ replace: - x: "*[1]" - bookmark: "*[2]/@id" - - t: "au carré" # phrase(7 'squared' equals 49) + - T: "au carré" # phrase(7 'squared' equals 49) - name: cubed tag: power @@ -308,21 +308,21 @@ replace: - x: "*[1]" - bookmark: "*[2]/@id" - - t: "au cube" # phrase(5 'cubed' equals 125) + - T: "au cube" # phrase(5 'cubed' equals 125) - name: simple-integer tag: power match: "*[2][self::m:mn][not(contains(., '.'))]" replace: - x: "*[1]" - - t: "à la" # phrase(2 raised 'to the' power 7) + - T: "à la" # phrase(2 raised 'to the' power 7) - test: if: "*[2][.>0]" then: [x: "ToOrdinal(*[2])"] else: [x: "*[2]"] - test: if: "$ClearSpeak_Exponents != 'Ordinal'" - then: [t: "puissance"] # phrase(2 raised to the 'power' 7) + then: [T: "puissance"] # phrase(2 raised to the 'power' 7) - name: simple-negative-integer tag: power @@ -332,23 +332,23 @@ - " ]" replace: - x: "*[1]" - - t: "à la" # phrase(2 raised 'to the' power 7) + - T: "à la" # phrase(2 raised 'to the' power 7) - x: "*[2]" - test: if: "$ClearSpeak_Exponents != 'Ordinal'" - then: [t: "puissance"] # phrase(2 raised to the 'power' 7) + then: [T: "puissance"] # phrase(2 raised to the 'power' 7) - name: simple-var tag: power match: "*[2][self::m:mi][string-length(.)=1]" replace: - x: "*[1]" - - t: "à la" # phrase(3 raised 'to the' power 7) + - T: "à la" # phrase(3 raised 'to the' power 7) - x: "*[2]" - pronounce: [text: "-ième", ipa: "jɛm", sapi5: "ieme", eloquence: "ieme"] - test: if: "$ClearSpeak_Exponents != 'Ordinal'" - then: [t: "puissance"] # phrase(2 raised to the 'power' 7) + then: [T: "puissance"] # 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 @@ -373,9 +373,9 @@ - " ]" replace: - x: "*[1]" - - t: "élevé à la" # phrase(x 'raised to the' second power) + - T: "élevé à la" # phrase(x 'raised to the' second power) - x: "*[2]" - - t: "puissance" # phrase(x raised to the second 'power') + - T: "puissance" # phrase(x raised to the second 'power') - # - [xxx]^n name: nested-negative-squared-or-cubed @@ -394,9 +394,9 @@ - " ]" replace: - x: "*[1]" - - t: "élevé à la" # phrase(x 'raised to the' second power) + - T: "élevé à la" # phrase(x 'raised to the' second power) - x: "*[2]" - - t: "puissance" # phrase(x raised to the second 'power') + - T: "puissance" # phrase(x raised to the second 'power') - # [xxx] var^n name: nested-var-squared-or-cubed @@ -417,9 +417,9 @@ - " ]" replace: - x: "*[1]" - - t: "élevé à la" # phrase(x 'raised to the' second power) + - T: "élevé à la" # phrase(x 'raised to the' second power) - x: "*[2]" - - t: "puissance" # phrase(x raised to the second 'power') + - T: "puissance" # phrase(x raised to the second 'power') - # -[xxx] var^n name: nested-negative-var-squared-or-cubed @@ -442,9 +442,9 @@ - " ]" replace: - x: "*[1]" - - t: "élevé à la" # phrase(x 'raised to the' second power) + - T: "élevé à la" # phrase(x 'raised to the' second power) - x: "*[2]" - - t: "puissance" # phrase(x raised to the second 'power') + - T: "puissance" # phrase(x raised to the second 'power') - name: default-exponent-power tag: power @@ -452,20 +452,20 @@ - "*[2][self::m:power or self::m:power or self::m:mrow[m:power]]" replace: - x: "*[1]" - - t: "élevé à l'exposant" # phrase(x is 'raised to the exponent') + - T: "élevé à l'exposant" # phrase(x is 'raised to the exponent') - pause: short - x: "*[2]" - pause: short - - t: "fin de l'exposant" # phrase(and now 'end exponent' has been reached) + - T: "fin de l'exposant" # phrase(and now 'end exponent' has been reached) - name: default tag: power match: "." replace: - x: "*[1]" - - t: "élevé à la" # phrase(x 'raised to the' second power) + - T: "élevé à la" # phrase(x 'raised to the' second power) - x: "*[2]" - - t: "puissance" # phrase(x raised to the second 'power') + - T: "puissance" # phrase(x raised to the second 'power') # # Some rules on mrows @@ -478,15 +478,15 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "la"] # phrase('the' absolute value of 25) + then: [T: "la"] # phrase('the' absolute value of 25) - x: "$WordToSay" - - t: "de" # phrase(the absolute value 'of' 25) + - T: "de" # phrase(the absolute value 'of' 25) - x: "*[1]" - test: if: "$ClearSpeak_AbsoluteValue = 'AbsEnd'" then: - pause: short - - t: "fin" # phrase('end' absolute value) + - T: "fin" # phrase('end' absolute value) - x: "$WordToSay" - pause: short @@ -496,24 +496,24 @@ replace: - test: - if: "count(*)=0" - then: [t: "l'ensemble vide"] # phrase('the empty set') + then: [T: "l'ensemble vide"] # phrase('the empty set') - else_if: "count(*)=2" then: - test: if: "$Verbosity!='Terse'" - then: [t: "l'"] # phrase('the' empty set) - - t: "ensemble vide" # phrase(the 'empty set') + then: [T: "l'"] # phrase('the' empty set) + - T: "ensemble vide" # phrase(the 'empty set') - else_if: "count(*[1]/*)=3 and *[1]/*[2][self::m:mo][.=':' or .='|' or .='∣']" then: - test: if: "$Verbosity!='Terse'" - then: [t: "l'"] # phrase('the' set of all integers) - - t: "ensemble de" # phrase(this is a 'set of' numbers) + then: [T: "l'"] # phrase('the' set of all integers) + - T: "ensemble de" # phrase(this is a 'set of' numbers) - test: if: "$ClearSpeak_Sets != 'woAll'" - then: [t: "tous"] # phrase(the set of 'all' integers) + then: [T: "tous"] # phrase(the set of 'all' integers) - x: "*[1]/*[1]" - - t: "tel que" # phrase(the set S 'such that' x is less than y) + - T: "tel que" # phrase(the set S 'such that' x is less than y) - x: "*[1]/*[3]" else: - test: @@ -521,8 +521,8 @@ then: - test: if: "$Verbosity!='Terse'" - then: [t: "l'"] # phrase('the' set of integers) - - t: "ensemble" # phrase(this is a 'set' of integers) + then: [T: "l'"] # phrase('the' set of integers) + - T: "ensemble" # 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 @@ -536,9 +536,9 @@ tag: [open-interval, open-closed-interval, closed-interval, closed-open-interval] match: "." replace: - - t: "l'invervalle de" # phrase('the interval from' a to b) + - T: "l'invervalle de" # phrase('the interval from' a to b) - x: "*[1]" - - t: "à" # phrase(the interval from a 'to' b) + - T: "à" # phrase(the interval from a 'to' b) - x: "*[2]" - pause: short - test: @@ -546,18 +546,18 @@ then: - test: if: "starts-with(name(.), 'open')" - then: [t: "sans"] # phrase(the interval from a to b 'not' including b) - - t: "inclure" # phrase(the interval from a to b not 'including' b) + then: [T: "sans"] # phrase(the interval from a to b 'not' including b) + - T: "inclure" # phrase(the interval from a to b not 'including' b) - x: "*[1]" # logic to deal with [not] arg #1 - test: if: "not($is_intervals_start_infinity or $is_intervals_end_infinity)" then_test: - if: "name(.)='open-interval'" - then: [t: "ou"] # phrase(the interval including a 'or' b ) + then: [T: "ou"] # phrase(the interval including a 'or' b ) - else_if: "name(.)='closed-interval'" - then: [t: "et"] # phrase(the interval including a 'and' b) - else: [t: "mais"] # phrase(the interval including a 'but' not b) + then: [T: "et"] # phrase(the interval including a 'and' b) + else: [T: "mais"] # 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)" @@ -568,8 +568,8 @@ then: - test: if: "name(.) = 'open-interval' or name(.) = 'closed-open-interval'" - then: [t: "n'"] # phrase(the interval 'not' including a) - - t: "incluant pas" # phrase(the interval not 'including' a) + then: [T: "n'"] # phrase(the interval 'not' including a) + - T: "incluant pas" # phrase(the interval not 'including' a) - x: "*[2]" # onto the [not] [including]... part @@ -580,7 +580,7 @@ - "count(*[1]/*)=1 and count(*)=2" replace: - x: "*[1]/*[1]/*" # mtable/mtr/mtd - - t: "parmi" # phrase(the binomial coefficient n 'choose' m) + - T: "parmi" # phrase(the binomial coefficient n 'choose' m) - x: "*[2]/*[1]/*" - name: ClearSpeak-default @@ -589,12 +589,12 @@ variables: [NextLineIsContinuedRow: "following-sibling::*[1][contains(@data-intent-property, ':continued-row:')]"] replace: - pause: medium - - t: "rangée" # phrase(the first 'row' of a matrix) + - T: "rangée" # phrase(the first 'row' of a matrix) - x: "count(preceding-sibling::*)+1" - test: if: ".[self::m:mlabeledtr]" then: - - t: "avec l'étiquette" # phrase(the line 'with label' first equation) + - T: "avec l'étiquette" # phrase(the line 'with label' first equation) - x: "*[1]/*" - pause: short - pause: medium @@ -611,13 +611,13 @@ - bookmark: "@id" - test: if: "$Verbosity!='Terse' and not(IsNode(following-sibling::*[2],'simple'))" - then: [t: "la"] # phrase('the' square root of 25) + then: [T: "la"] # phrase('the' square root of 25) - test: - if: ".='log'" - then: [t: "logarithme"] + then: [T: "logarithme"] - else_if: "$ClearSpeak_Log = 'LnAsNaturalLog'" - then: [t: "logarithme naturel"] # phrase(the 'natural log' of x) - else: [spell: "'ln'"] + then: [T: "logarithme naturel"] # phrase(the 'natural log' of x) + else: [SPELL: "'ln'"] - name: ClearSpeak-multi-line tag: [piecewise, system-of-equations, lines] # these are ignored in favor of the ClearSpeak prefs @@ -634,21 +634,21 @@ - x: "$LineCount" - test: - if: "($ClearSpeak_MultiLineLabel = 'Auto' and self::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case'" - then: [t: "cas"] # phrase(this is the first 'case' of three cases) + then: [T: "cas"] # phrase(this is the first 'case' of three cases) - else_if: "$ClearSpeak_MultiLineLabel = 'Auto' or $ClearSpeak_MultiLineLabel = 'Line' or $ClearSpeak_MultiLineLabel = 'None'" # already dealt with Auto/Case - then: [t: "ligne"] # phrase(this is the first 'line' of three lines) + then: [T: "ligne"] # phrase(this is the first 'line' of three lines) - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" - then: [t: "contrainte"] # phrase(this is the first 'constraint' of three constraints) + then: [T: "contrainte"] # phrase(this is the first 'constraint' of three constraints) - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" - then: [t: "équation"] # phrase(this is the first 'equation' of three equations) + then: [T: "équation"] # phrase(this is the first 'equation' of three equations) - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" - then: [t: "rangée"] # phrase(this is the first 'row' of three rows) + then: [T: "rangée"] # phrase(this is the first 'row' of three rows) - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" - then: [t: "étape"] # phrase(this is the first 'step' of three steps) + then: [T: "étape"] # phrase(this is the first 'step' of three steps) # else 'None -- don't say anything' - test: - if: "$LineCount != 1" - then: [ct: "s"] # plural # phrase(shown by the letter 's') + then: [CT: "s"] # plural # phrase(shown by the letter 's') - pause: short - x: "*" - pause: long @@ -664,23 +664,23 @@ - pause: medium - test: - if: "($ClearSpeak_MultiLineLabel = 'Auto' and parent::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case'" - then: [t: "cas"] # phrase(in this 'case' x is not equal to y) + then: [T: "cas"] # 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: "ligne"] # phrase(the straight 'line' between x and y) + then: [T: "ligne"] # phrase(the straight 'line' between x and y) - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" - then: [t: "contrainte"] # phrase(there is a 'constraint' on possible values) + then: [T: "contrainte"] # phrase(there is a 'constraint' on possible values) - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" - then: [t: "équation"] # phrase(the 'equation' pi r squared gives the area of a circle) + then: [T: "équation"] # phrase(the 'equation' pi r squared gives the area of a circle) - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" - then: [t: "rangée"] # phrase(the values on the top 'row' are relevant) + then: [T: "rangée"] # phrase(the values on the top 'row' are relevant) - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" - then: [t: "étape"] # phrase(this is a 'step' by step process) + then: [T: "étape"] # phrase(this is a 'step' by step process) # else 'None -- don't say anything' - x: "count(preceding-sibling::*[not(contains(@data-intent-property, ':continued-row:'))]) + 1" - test: if: "self::m:mlabeledtr" then: - - t: "avec étiquette" # phrase(the diagram is complete 'with label') + - T: "avec étiquette" # phrase(the diagram is complete 'with label') - x: "*[1]/*" - test: - if: "$ClearSpeak_MultiLineLabel='None'" @@ -700,8 +700,8 @@ replace: test: if: "$ClearSpeak_ImpliedTimes = 'None'" - then: [t: ""] - else: [t: "fois"] # phrase(5 'times' 3 equals 15) + then: [T: ""] + else: [T: "fois"] # phrase(5 'times' 3 equals 15) - name: no-times tag: mo @@ -709,7 +709,7 @@ # Note: this rule is also part of the paren rule so that the parens speak - ".='⁢' and $ClearSpeak_ImpliedTimes = 'None'" replace: - - t: "" + - T: "" - name: ClearSpeak-times tag: mo @@ -740,7 +740,7 @@ - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')]" # followed by parens - " )" replace: - - t: "fois" # phrase(5 'times' 3 equals 15) + - T: "fois" # phrase(5 'times' 3 equals 15) - name: no-say-parens tag: mrow diff --git a/Rules/Languages/fr/SharedRules/calculus.yaml b/Rules/Languages/fr/SharedRules/calculus.yaml index 894d9481b..db33ff687 100644 --- a/Rules/Languages/fr/SharedRules/calculus.yaml +++ b/Rules/Languages/fr/SharedRules/calculus.yaml @@ -4,13 +4,13 @@ tag: laplacian match: "count(*) <= 1" replace: - - t: "laplacien" + - T: "laplacien" - test: if: "count(*) = 1" then: - test: if: "$Verbosity!='Terse'" - then: [t: "de"] + then: [T: "de"] - test: if: "not(IsNode(*[1], 'leaf'))" then: [pause: short] @@ -22,8 +22,8 @@ replace: - test: if: "$Verbosity='Terse'" - then: [t: "div"] - else: [t: "divergence de"] + then: [T: "div"] + else: [T: "divergence de"] - test: if: "not(IsNode(*[1], 'leaf'))" then: [pause: short] @@ -33,10 +33,10 @@ tag: curl match: "count(*) = 1" replace: - - t: "rotationnel" + - T: "rotationnel" - test: if: "$Verbosity!='Terse'" - then: [t: "de"] + then: [T: "de"] - test: if: "not(IsNode(*[1], 'leaf'))" then: [pause: short] @@ -48,8 +48,8 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "gradient de"] - else: [t: "grad"] + then: [T: "gradient de"] + else: [T: "grad"] - test: if: "not(IsNode(*[1], 'leaf'))" then: [pause: short] diff --git a/Rules/Languages/fr/SharedRules/default.yaml b/Rules/Languages/fr/SharedRules/default.yaml index 0b2cf89e8..f365c0d35 100644 --- a/Rules/Languages/fr/SharedRules/default.yaml +++ b/Rules/Languages/fr/SharedRules/default.yaml @@ -24,7 +24,7 @@ tag: mrow match: "not(*)" replace: - - t: " " + - T: " " - name: default tag: mrow @@ -57,14 +57,14 @@ - if: "string-length(.) = 1 and text() != '_'" then: [x: "text()"] - else_if: "@data-chem-element" - then: [spell: "text()", pause: "short"] + then: [SPELL: "text()", pause: "short"] else: [x: "translate(., '-_\u00A0', ' ')"] - name: default tag: ms match: "." replace: - - t: "la chaîne" + - T: "la chaîne" - pause: short - x: "text()" @@ -80,7 +80,7 @@ - "not(ancestor::*[name() != 'mrow'][1]/self::m:fraction)" replace: - x: "*[1]" - - t: "sur" + - T: "sur" - x: "*[2]" - pause: short @@ -88,13 +88,13 @@ tag: mfrac match: "." replace: - - t: "début" + - T: "début" - pause: short - x: "*[1]" - test: if: "not(IsNode(*[1],'leaf'))" then: [pause: short] - - t: "sur" + - T: "sur" - test: if: "not(IsNode(*[2],'leaf'))" then: [pause: short] @@ -102,36 +102,36 @@ - pause: short - test: if: "$Impairment = 'Blindness'" - then: [t: "fin"] + then: [T: "fin"] - pause: medium - name: literal-default tag: msqrt match: "." replace: - - t: "racine" + - T: "racine" - test: if: "$Verbosity!='Terse'" - then: [t: "de"] + then: [T: "de"] - x: "*[1]" - pause: short - test: if: "not(IsNode(*[1],'leaf')) or $Impairment = 'Blindness'" - then: [t: "fin de racine", pause: medium] + then: [T: "fin de racine", pause: medium] - name: literal-default tag: mroot match: "." replace: - - t: "racine d'indice" + - T: "racine d'indice" - x: "*[2]" - pause: short - - t: "de" + - T: "de" - x: "*[1]" - pause: short - test: if: "not(IsNode(*[2],'leaf'))" - then: [t: "fin de racine"] + then: [T: "fin de racine"] - name: simple-sub tag: indexed-by @@ -146,7 +146,7 @@ match: "count(*)=2 and *[2][self::m:mrow and *[2][.='⁣']]" replace: - x: "*[1]" - - t: "indice" + - T: "indice" - x: "*[2]" - pause: short @@ -155,7 +155,7 @@ match: "." replace: - x: "*[1]" - - t: "indice" + - T: "indice" - x: "*[2]" - pause: short @@ -166,7 +166,7 @@ - x: "*[1]" - test: if: "not($Verbosity='Terse' and *[2][self::m:mn and not(translate(., '.,', '')!=.)])" - then: [t: "indice"] + then: [T: "indice"] - x: "*[2]" - name: literal @@ -177,7 +177,7 @@ - test: if: "name(.)='msubsup'" then: - - t: "indice" + - T: "indice" - x: "*[2]" - test: if: "*[last()][translate(., '′″‴⁗†‡°*', '')='']" @@ -185,15 +185,15 @@ else_test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" then: - - t: "exposant" + - T: "exposant" - x: "*[last()]" - test: if: "not(IsNode(*[last()], 'simple')) or $Impairment = 'Blindness'" - then: [t: "fin d'exposant"] + then: [T: "fin d'exposant"] else: - - t: "exposant" + - T: "exposant" - x: "*[last()]" - - t: "fin d'exposant" + - T: "fin d'exposant" - name: default tag: munder @@ -201,11 +201,11 @@ replace: - test: if: "not(IsNode(*[1], 'leaf'))" - then: [t: "quantité"] + then: [T: "quantité"] - x: "*[1]" - - t: "avec" + - T: "avec" - x: "*[2]" - - t: "en dessous" + - T: "en dessous" - name: diacriticals tag: mover @@ -220,11 +220,11 @@ replace: - test: if: "not(IsNode(*[1], 'leaf'))" - then: [t: "quantité"] + then: [T: "quantité"] - x: "*[1]" - - t: "avec" + - T: "avec" - x: "*[2]" - - t: "au-dessus" + - T: "au-dessus" - name: default tag: munderover @@ -232,13 +232,13 @@ replace: - test: if: "not(IsNode(*[1], 'leaf'))" - then: [t: "quantité"] + then: [T: "quantité"] - x: "*[1]" - - t: "avec" + - T: "avec" - x: "*[2]" - - t: "en dessous et" + - T: "en dessous et" - x: "*[3]" - - t: "au-dessus" + - T: "au-dessus" - name: default tag: mmultiscripts @@ -260,9 +260,9 @@ - test: if: "count($Prescripts) > 2" then: - - t: "avec" + - T: "avec" - x: "count($Prescripts) div 2" - - t: "préscripts" + - T: "préscripts" - pause: short - test: if: "not($Prescripts[1][self::m:none])" @@ -271,7 +271,7 @@ - x: "$Prescripts[1]" - test: if: "not($Prescripts[1][self::m:none] or $Prescripts[2][self::m:none])" - then: [t: "et"] + then: [T: "et"] - test: if: "not($Prescripts[2][self::m:none])" then: @@ -288,7 +288,7 @@ - x: "$Prescripts[3]" - test: if: "not($Prescripts[3][self::m:none] or $Prescripts[4][self::m:none])" - then: [t: "et"] + then: [T: "et"] - test: if: "not($Prescripts[4][self::m:none])" then: @@ -297,9 +297,9 @@ - test: if: "count($Prescripts) > 4" then: - - t: "et préscripts alternés" + - T: "et préscripts alternés" - x: "$Prescripts[position() > 4]" - - t: "fin préscripts" + - T: "fin préscripts" - test: if: "$Postscripts" then: @@ -313,10 +313,10 @@ then: - test: if: "$Prescripts" - then: [t: "et"] - - t: "avec" + then: [T: "et"] + - T: "avec" - x: "count($Postscripts) div 2" - - t: "postscripts" + - T: "postscripts" - pause: short - test: if: "not($Postscripts[1][self::m:none])" @@ -325,7 +325,7 @@ - x: "$Postscripts[1]" - test: if: "not($Postscripts[1][self::m:none] or $Postscripts[2][self::m:none])" - then: [t: "et"] + then: [T: "et"] - test: if: "not($Postscripts[2][self::m:none])" then: @@ -341,7 +341,7 @@ - x: "$Postscripts[3]" - test: if: "not($Postscripts[3][self::m:none] or $Postscripts[4][self::m:none])" - then: [t: "et"] + then: [T: "et"] - test: if: "not($Postscripts[4][self::m:none])" then: @@ -357,7 +357,7 @@ - x: "$Postscripts[5]" - test: if: "not($Postscripts[5][self::m:none] or $Postscripts[6][self::m:none])" - then: [t: "et"] + then: [T: "et"] - test: if: "not($Postscripts[6][self::m:none])" then: @@ -373,7 +373,7 @@ - x: "$Postscripts[7]" - test: if: "not($Postscripts[7][self::m:none] or $Postscripts[8][self::m:none])" - then: [t: "et"] + then: [T: "et"] - test: if: "not($Postscripts[8][self::m:none])" then: @@ -382,9 +382,9 @@ - test: if: "count($Postscripts) > 8" then: - - t: "et scripts alternés" + - T: "et scripts alternés" - x: "$Postscripts[position() > 8]" - - t: "fin scripts" + - T: "fin scripts" - name: default tag: mtable @@ -393,18 +393,18 @@ - NumColumns: "count(*[1]/*) - IfThenElse(*/self::m:mlabeledtr, 1, 0)" match: "." replace: - - t: "table avec" # phrase(the 'table with' 3 rows) + - T: "table avec" # phrase(the 'table with' 3 rows) - x: count(*) - test: if: count(*)=1 - then: [t: "rangée"] # phrase(the table with 1 'row') - else: [t: "rangées"] # phrase(the table with 3 'rows') - - t: "et" # phrase(the table with 3 rows 'and' 4 columns) + then: [T: "rangée"] # phrase(the table with 1 'row') + else: [T: "rangées"] # phrase(the table with 3 'rows') + - T: "et" # phrase(the table with 3 rows 'and' 4 columns) - x: "$NumColumns" - test: if: "NumColumns=1" - then: [t: "colonne"] # phrase(the table with 3 rows and 1 'column') - else: [t: "colonnes"] # phrase(the table with 3 rows and 4 'columns') + then: [T: "colonne"] # phrase(the table with 3 rows and 1 'column') + else: [T: "colonnes"] # phrase(the table with 3 rows and 4 'columns') - pause: long - x: "*" @@ -415,12 +415,12 @@ match: "." replace: - pause: medium - - t: "rangée" # phrase(the first 'row' of a matrix) + - T: "rangée" # phrase(the first 'row' of a matrix) - x: "count(preceding-sibling::*)+1" - test: if: "self::m:mlabeledtr" then: - - t: "avec nom" # phrase(the line 'with label' first equation) + - T: "avec nom" # phrase(the line 'with label' first equation) - x: "*[1]/*" - pause: short - pause: medium @@ -439,7 +439,7 @@ # if: not($IsColumnSilent) and ($ClearSpeak_Matrix = 'SpeakColNum' or count(preceding-sibling::*) != 0) if: "not($IsColumnSilent)" then: - - t: "colonne" # phrase(the first 'column' of the matrix) + - T: "colonne" # phrase(the first 'column' of the matrix) - x: "count(preceding-sibling::*)+IfThenElse(parent::m:mlabeledtr, 0, 1)" - pause: medium - x: "*" @@ -457,7 +457,7 @@ tag: menclose match: "@notation='box' and *[self::m:mtext and .=' ']" replace: - - t: "Case vide" # phrase(the 'empty box' contains no values) + - T: "Case vide" # 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 @@ -467,109 +467,109 @@ replace: - test: if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' box ')]" - then: [t: "case", pause: short] # phrase(the 'box' around the expression) + then: [T: "case", pause: short] # phrase(the 'box' around the expression) - test: if: ".[contains(@notation,'roundedbox')]" - then: [t: "case arrondie", pause: short] # phrase(the 'round box' around the expression) + then: [T: "case arrondie", pause: short] # phrase(the 'round box' around the expression) - test: if: ".[contains(@notation,'circle')]" - then: [t: "rond", pause: short] # phrase(the 'circle' around the expression) + then: [T: "rond", pause: short] # phrase(the 'circle' around the expression) - test: if: ".[ contains(concat(' ', normalize-space(@notation), ' '), ' left ') or contains(concat(' ', normalize-space(@notation), ' '), ' right ') or contains(@notation,'top') or contains(@notation,'bottom') ]" then: - - t: "line on" # phrase(draw a straight 'line' on the page) + - T: "line on" # phrase(draw a straight 'line' on the page) - test: if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' left ')]" - then: [t: "gauche", pause: short] # phrase(line on 'left' of the expression) + then: [T: "gauche", pause: short] # phrase(line on 'left' of the expression) - test: if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' right ')]" - then: [t: "droite", pause: short] # phrase(line on 'right' of the expression) + then: [T: "droite", pause: short] # phrase(line on 'right' of the expression) - test: if: ".[contains(@notation,'top')]" - then: [t: "dessus", pause: short] # phrase(line on 'top' of the expression) + then: [T: "dessus", pause: short] # phrase(line on 'top' of the expression) - test: if: ".[contains(@notation,'bottom')]" - then: [t: "dessous", pause: short] # phrase(line on the 'bottom' of the expression) + then: [T: "dessous", pause: short] # phrase(line on the 'bottom' of the expression) - test: if: ".[ contains(@notation,'updiagonalstrike') or contains(@notation,'downdiagonalstrike') or contains(@notation,'verticalstrike') or contains(@notation,'horizontalstrike') ]" then: - test: if: ".[contains(@notation,'updiagonalstrike') and contains(@notation,'downdiagonalstrike')]" - then: [spell: "'x'", pause: short] # seems better to say 'x cross out' than 'up diagonal, down diagonal cross out' + then: [SPELL: "'x'", pause: short] # seems better to say 'x cross out' than 'up diagonal, down diagonal cross out' else: - test: if: ".[contains(@notation,'updiagonalstrike')]" - then: [t: "diagonale vers le haut", pause: short] # phrase(the line runs 'up diagonal') + then: [T: "diagonale vers le haut", pause: short] # phrase(the line runs 'up diagonal') - test: if: ".[contains(@notation,'downdiagonalstrike')]" - then: [t: "diagonale vers le bas", pause: short] # phrase(the line runs 'down diagonal') + then: [T: "diagonale vers le bas", pause: short] # phrase(the line runs 'down diagonal') - test: if: ".[contains(@notation,'verticalstrike')]" - then: [t: "verticale", pause: short] # phrase(the line is 'vertical') + then: [T: "verticale", pause: short] # phrase(the line is 'vertical') - test: if: ".[contains(@notation,'horizontalstrike')]" - then: [t: "horizontale", pause: short] # phrase(the line is 'horizontal') - - t: "cross out" # phrase(please 'cross out' the incorrect answer) + then: [T: "horizontale", pause: short] # phrase(the line is 'horizontal') + - T: "cross out" # phrase(please 'cross out' the incorrect answer) - pause: short - test: if: ".[contains(@notation,'uparrow')]" - then: [t: "flèche vers le haut", pause: short] # phrase(direction is shown by the 'up arrow') + then: [T: "flèche vers le haut", pause: short] # phrase(direction is shown by the 'up arrow') - test: if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' downarrow ')]" - then: [t: "flèche vers le bas", pause: short] # phrase(the trend is shown by the 'down arrow') + then: [T: "flèche vers le bas", pause: short] # phrase(the trend is shown by the 'down arrow') - test: if: ".[contains(@notation,'leftarrow')]" - then: [t: "flèche vers la gauche", pause: short] # phrase(the 'left arrow' indicates going back) + then: [T: "flèche vers la gauche", pause: short] # phrase(the 'left arrow' indicates going back) - test: if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' rightarrow ')]" - then: [t: "flèche vers la droite", pause: short] # phrase(the 'right arrow' indicates moving forward) + then: [T: "flèche vers la droite", pause: short] # phrase(the 'right arrow' indicates moving forward) - test: if: ".[contains(@notation,'northeastarrow')]" - then: [t: "flèche nord-est", pause: short] # phrase(direction is indicated by the 'northeast arrow') + then: [T: "flèche nord-est", pause: short] # phrase(direction is indicated by the 'northeast arrow') - test: if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' southeastarrow ')]" - then: [t: "flèche sud-est", pause: short] # phrase(direction is shown by the 'southeast arrow') + then: [T: "flèche sud-est", pause: short] # phrase(direction is shown by the 'southeast arrow') - test: if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' southwestarrow ')]" - then: [t: "flèche sud-ouest", pause: short] # phrase(direction is shown by the 'southwest arrow') + then: [T: "flèche sud-ouest", pause: short] # phrase(direction is shown by the 'southwest arrow') - test: if: ".[contains(@notation,'northwestarrow')]" - then: [t: "flèche nord-ouest", pause: short] # phrase(direction is shown by the 'northwest arrow') + then: [T: "flèche nord-ouest", pause: short] # phrase(direction is shown by the 'northwest arrow') - test: if: ".[contains(@notation,'updownarrow')]" - then: [t: "flèche verticale à double extrémité", pause: short] # phrase(upward movement is indicated by the 'double ended vertical arrow') + then: [T: "flèche verticale à double extrémité", pause: short] # phrase(upward movement is indicated by the 'double ended vertical arrow') - test: if: ".[contains(@notation,'leftrightarrow')]" - then: [t: "flèche horizontale à double extrémité", pause: short] # phrase(progress is indicated by the 'double ended horizontal arrow') + then: [T: "flèche horizontale à double extrémité", pause: short] # phrase(progress is indicated by the 'double ended horizontal arrow') - test: if: ".[contains(@notation,'northeastsouthwestarrow')]" - then: [t: "flèche diagonale vers le haut à double extrémité", pause: short] # phrase(trend is indicated by the 'double ended up diagonal arrow') + then: [T: "flèche diagonale vers le haut à double extrémité", pause: short] # phrase(trend is indicated by the 'double ended up diagonal arrow') - test: if: ".[contains(@notation,'northwestsoutheastarrow')]" - then: [t: "flèche diagonale vers le bas à double extrémité", pause: short] # phrase(trend is indicated by the 'double ended down diagonal arrow') + then: [T: "flèche diagonale vers le bas à double extrémité", pause: short] # phrase(trend is indicated by the 'double ended down diagonal arrow') - test: if: ".[contains(@notation,'actuarial')]" - then: [t: "symbole actuariel", pause: short] # phrase(the 'actuarial symbol' represents a specific quantity) + then: [T: "symbole actuariel", pause: short] # phrase(the 'actuarial symbol' represents a specific quantity) - test: if: ".[contains(@notation,'madrub')]" - then: [t: "symbole factoriel arabe", pause: short] # phrase(the 'arabic factorial symbol' represents a factorial operation) + then: [T: "symbole factoriel arabe", pause: short] # phrase(the 'arabic factorial symbol' represents a factorial operation) - test: if: ".[contains(@notation,'phasorangle')]" - then: [t: "angle de phaseur", pause: short] # phrase(the 'phasor angle' is used to measure electrical current) + then: [T: "angle de phaseur", pause: short] # phrase(the 'phasor angle' is used to measure electrical current) - test: if: ".[contains(@notation,'longdiv') or not(@notation) or normalize-space(@notation) ='']" # default - then: [t: "symbole de division longue", pause: short] # phrase(the 'long division symbol' indicates a long division calculation) + then: [T: "symbole de division longue", pause: short] # phrase(the 'long division symbol' indicates a long division calculation) - test: if: ".[contains(@notation,'radical')]" - then: [t: "racine carrée", pause: short] # phrase(5 is the 'square root' of 25) - - t: "enclosing" # phrase(parentheses are 'enclosing' part of the equation) + then: [T: "racine carrée", pause: short] # phrase(5 is the 'square root' of 25) + - T: "enclosing" # phrase(parentheses are 'enclosing' part of the equation) - test: if: "*[self::m:mtext and .=' ']" - then: [t: "espace"] # otherwise there is complete silence # phrase(there is a 'space' between the words) + then: [T: "espace"] # 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: "fin d'encadrement"] # phrase(reached the 'end enclosure' point) + then: [T: "fin d'encadrement"] # phrase(reached the 'end enclosure' point) - pause: short - name: semantics @@ -589,7 +589,7 @@ match: . replace: - x: "*[1]" - - t: "de" + - T: "de" - pause: auto - x: "*[position() > 1]" @@ -660,7 +660,7 @@ - test: if: "$Verbosity != 'Terse' and not(contains(@data-intent-property, ':literal:')) and not(count(*)=2 and (IsInDefinition(*[1], 'TrigFunctionNames') or IsInDefinition(name(.), 'TerseFunctionNames')) and IsNode(*[2], 'simple'))" - then: [t: "de", pause: auto] + then: [T: "de", pause: auto] - insert: nodes: "*" replace: diff --git a/Rules/Languages/fr/SharedRules/general.yaml b/Rules/Languages/fr/SharedRules/general.yaml index 989957617..ac4bf5b7e 100644 --- a/Rules/Languages/fr/SharedRules/general.yaml +++ b/Rules/Languages/fr/SharedRules/general.yaml @@ -8,25 +8,25 @@ - test: if: "$Verbosity!='Terse'" then: - - t: "les" # phrase('the' real numbers) + - T: "les" # phrase('the' real numbers) - bookmark: "*[1]/@id" - test: - if: "*[1][.='ℂ']" - then: [t: "nombres complexes"] # phrase('complex numbers' consist of two parts) + then: [T: "nombres complexes"] # phrase('complex numbers' consist of two parts) - else_if: "*[1][.='ℕ']" - then: [t: "nombres naturels"] # phrase('natural numbers' are numbers from 1 to infinity) + then: [T: "nombres naturels"] # phrase('natural numbers' are numbers from 1 to infinity) - else_if: "*[1][.='ℚ']" - then: [t: "nombres rationnels"] # phrase('rational numbers' are the fraction of 2 integers) + then: [T: "nombres rationnels"] # phrase('rational numbers' are the fraction of 2 integers) - else_if: "*[1][.='ℝ']" - then: [t: "nombres réels"] # phrase('real numbers' can be both positive and negative) + then: [T: "nombres réels"] # phrase('real numbers' can be both positive and negative) - else_if: "*[1][.='ℤ']" - then: [t: "nombres entiers"] # phrase(positive 'integers' are natural numbers above 0) + then: [T: "nombres entiers"] # phrase(positive 'integers' are natural numbers above 0) else: [x: "*[1][text()]"] # shouldn't happen - bookmark: "*[2]/@id" - test: - if: "*[2][.='+']" - then: [t: "positifs"] # phrase(set of all 'positive' integers less than 10) - else: [t: "négatifs"] # phrase(set of all 'negative' integers less than minus 10) + then: [T: "positifs"] # phrase(set of all 'positive' integers less than 10) + else: [T: "négatifs"] # phrase(set of all 'negative' integers less than minus 10) - name: dimension-number-sets # should be single digit integer at this point (e.g, R^3) @@ -36,15 +36,15 @@ - bookmark: "*[1]/@id" - test: - if: "*[1][.='ℂ']" - then: [t: "C"] # phrase(the letter 'C' used to represent complex number) + 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) + 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) + 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) + then: [T: "R"] # phrase(the letter 'R' may represent real numbers) - else_if: "*[1][.='ℤ']" - then: [t: "Z"] # phrase(the letter 'Z' may represent integers) + then: [T: "Z"] # phrase(the letter 'Z' may represent integers) else: [x: "*[1][text()]"] # shouldn't happen - bookmark: "*[2]/@id" - x: "*[2]" @@ -56,15 +56,15 @@ - bookmark: "@id" - test: - if: ".='ℂ'" - then: [t: "les nombres complexes"] # phrase('the complex numbers' include 2 parts) + then: [T: "les nombres complexes"] # phrase('the complex numbers' include 2 parts) - else_if: ".='ℕ'" - then: [t: "les nombres naturels"] # phrase('the natural numbers' begin at 1) + then: [T: "les nombres naturels"] # phrase('the natural numbers' begin at 1) - else_if: ".='ℚ'" - then: [t: "les nombres rationnels"] # phrase('the rational numbers' are the fraction of 2 integers) + then: [T: "les nombres rationnels"] # phrase('the rational numbers' are the fraction of 2 integers) - else_if: ".='ℝ'" - then: [t: "les nombres réels"] # phrase('the real numbers' can be both positive and negative) + then: [T: "les nombres réels"] # phrase('the real numbers' can be both positive and negative) - else_if: ".='ℤ'" - then: [t: "les nombres entiers"] # phrase('the integers' are natural numbers above 0) + then: [T: "les nombres entiers"] # phrase('the integers' are natural numbers above 0) else: [x: "text()"] # shouldn't happen - name: real-part @@ -72,14 +72,14 @@ match: "." replace: - bookmark: "@id" - - t: "la partie réelle" # phrase('the real part' of a complex number does not include the imaginary part) + - T: "la partie réelle" # phrase('the real part' of a complex number does not include the imaginary part) - name: imaginary-part tag: imaginary-part match: "." replace: - bookmark: "@id" - - t: "la partie imaginaire" # phrase('the imaginary part' is part of a complex number) + - T: "la partie imaginaire" # phrase('the imaginary part' is part of a complex number) # rules on scripted vertical bars ('evaluated at') - name: evaluated-at-2 @@ -88,7 +88,7 @@ replace: - x: "*[1]" - pause: auto - - t: "évalués à" # phrase(results were 'evaluated at' a given point) + - T: "évalués à" # phrase(results were 'evaluated at' a given point) - pause: auto - x: "*[2]" @@ -98,10 +98,10 @@ replace: - x: "*[1]" - pause: auto - - t: "évalués à" # phrase(results were 'evaluated at' this point) + - T: "évalués à" # phrase(results were 'evaluated at' this point) - pause: auto - x: "*[3]" - - t: "moins la même expression évaluée à" # phrase(this result is 'minus the same expression evaluated at' an earlier point) + - T: "moins la même expression évaluée à" # phrase(this result is 'minus the same expression evaluated at' an earlier point) - x: "*[2]" - name: permutation @@ -110,7 +110,7 @@ match: "count(*)=2 and contains(@data-intent-property, ':infix:')" replace: - x: "*[2]" - - t: "permutations de" # phrase(the solution involves several 'permutations of' values) + - T: "permutations de" # phrase(the solution involves several 'permutations of' values) - x: "*[1]" - name: intervals @@ -121,25 +121,25 @@ - if: "self::m:open-interval" then_test: if: "$Verbosity!='Terse'" - then: [t: "l'intervalle ouvert"] - else: [t: "intervalle ouvert"] + then: [T: "l'intervalle ouvert"] + else: [T: "intervalle ouvert"] - else_if: "self::m:open-closed-interval" then_test: if: "$Verbosity!='Terse'" - then: [t: "l'intervalle ouvert fermé"] - else: [t: "intervalle ouvert fermé"] + then: [T: "l'intervalle ouvert fermé"] + else: [T: "intervalle ouvert fermé"] - else_if: "self::m:closed-interval" then_test: if: "$Verbosity!='Terse'" - then: [t: "l'intervalle fermé"] - else: [t: "intervalle fermé"] + then: [T: "l'intervalle fermé"] + else: [T: "intervalle fermé"] else_test: if: "$Verbosity!='Terse'" - then: [t: "l'intervalle fermé ouvert"] # closed-open-interval - else: [t: "intervalle fermé ouvert"] - - t: "de" # phrase(the interval 'from' c to d) + then: [T: "l'intervalle fermé ouvert"] # closed-open-interval + else: [T: "intervalle fermé ouvert"] + - T: "de" # phrase(the interval 'from' c to d) - x: "*[1]" - - t: "à" # phrase(the interval from c 'to' d) + - T: "à" # phrase(the interval from c 'to' d) - x: "*[2]" - name: default-point @@ -149,10 +149,10 @@ - test: if: "$Verbosity!='Terse'" then: - - t: "la" # phrase('the' square root of 25 equals 5) - - t: "point" # phrase(a decimal 'point' indicates the fraction component of a number) + - T: "la" # phrase('the' square root of 25 equals 5) + - T: "point" # phrase(a decimal 'point' indicates the fraction component of a number) - x: "*[1]" - - t: "virgule" # phrase(use a 'comma' to divide large numbers or as a decimal point) + - T: "virgule" # phrase(use a 'comma' to divide large numbers or as a decimal point) - x: "*[2]" - name: bigop-both @@ -163,19 +163,19 @@ if: "$Verbosity!='Terse'" then_test: - if: "*[1][.='∏']" - then: [t: "le"] # phrase('the' product) - masculine starting with consonant + then: [T: "le"] # phrase('the' product) - masculine starting with consonant - else_if: "*[1][contains('⋂∩⋃∪∫∬∭∮∯∰∱∲∳', .)]" # phrase('the' union/intersection/integral) - starting with vowel - then: [t: "l'"] - - else: [t: "la"] # phrase('the' sum) - feminine starting with consonant + then: [T: "l'"] + - else: [T: "la"] # phrase('the' sum) - feminine starting with consonant - x: "*[1]" - - t: "de" # phrase(subtracting 5 'from' 10 gives 5) + - T: "de" # phrase(subtracting 5 'from' 10 gives 5) - x: "*[2]" - pause: short - - t: "à" # phrase(adding 6 'to' 6 equals 12) + - T: "à" # phrase(adding 6 'to' 6 equals 12) - x: "*[3]" - test: if: "following-sibling::*" - then: [t: "de"] # phrase(the square root 'of' 25 equals 5) + then: [T: "de"] # phrase(the square root 'of' 25 equals 5) - name: bigop-under tag: large-op @@ -185,16 +185,16 @@ if: "$Verbosity!='Terse'" then_test: - if: "*[1][.='∏']" - then: [t: "le"] # phrase('the' product) - masculine starting with consonant + then: [T: "le"] # phrase('the' product) - masculine starting with consonant - else_if: "*[1][contains('⋂∩⋃∪∫∬∭∮∯∰∱∲∳', .)]" # phrase('the' union/intersection/integral) - starting with vowel - then: [t: "l'"] - - else: [t: "la"] # phrase('the' sum) - feminine starting with consonant + then: [T: "l'"] + - else: [T: "la"] # phrase('the' sum) - feminine starting with consonant - x: "*[1]" - - t: "sur" # phrase(2 'over' 3 equals two thirds) + - T: "sur" # phrase(2 'over' 3 equals two thirds) - x: "*[2]" - test: if: "following-sibling::*" - then: [t: "de"] # phrase(the square root 'of' 25 equals 5) + then: [T: "de"] # phrase(the square root 'of' 25 equals 5) - name: largeop tag: mrow @@ -204,12 +204,12 @@ if: "$Verbosity!='Terse'" then_test: - if: "*[1][.='∏']" - then: [t: "le"] # phrase('the' product) - masculine starting with consonant + then: [T: "le"] # phrase('the' product) - masculine starting with consonant - else_if: "*[1][contains('⋂∩⋃∪∫∬∭∮∯∰∱∲∳', .)]" # phrase('the' union/intersection/integral) - starting with vowel - then: [t: "l'"] - - else: [t: "la"] # phrase('the' sum) - feminine starting with consonant + then: [T: "l'"] + - else: [T: "la"] # phrase('the' sum) - feminine starting with consonant - x: "*[1]" - - t: "de" # phrase(the square root 'of' 25 equals 5) + - T: "de" # phrase(the square root 'of' 25 equals 5) - x: "*[2]" - name: repeating-decimal @@ -217,8 +217,8 @@ match: "." replace: - x: "*[1]" - - t: "avec des chiffres répétitifs" # phrase('with repeating digits') - - spell: "*[2]" + - T: "avec des chiffres répétitifs" # phrase('with repeating digits') + - SPELL: "*[2]" - name: msubsup-skip-super # handles single, double, etc., prime @@ -228,16 +228,16 @@ - x: "*[1]" - test: if: "$Verbosity='Verbose'" - then: [t: "indice"] # phrase(a 'subscript' may be used to indicate an index) - else: [t: "sous"] # phrase(the result is 'sub' optimal) + then: [T: "indice"] # phrase(a 'subscript' may be used to indicate an index) + else: [T: "sous"] # phrase(the result is 'sub' optimal) - x: "*[2]" - test: if: "not(IsNode(*[2],'leaf') and $Impairment = 'Blindness')" then: - test: if: "$Verbosity='Verbose'" - then: [t: "fin de l'indice"] # phrase(this is the 'end subscript' position) - else: [t: "fin d'indice"] # phrase(this is the 'end sub' position) + then: [T: "fin de l'indice"] # phrase(this is the 'end subscript' position) + else: [T: "fin d'indice"] # 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' @@ -245,7 +245,7 @@ - test: if: "name(.)='say-super'" then: - - t: "exposant" + - T: "exposant" - x: "*[3]" - pause: short @@ -255,7 +255,7 @@ match: "$Verbosity = 'Terse' and string-length(.)=1" replace: - bookmark: "@id" - - spell: "text()" + - SPELL: "text()" # the order of matching is @@ -330,17 +330,17 @@ then: [x: "$Word"] - else_if: "DefinitionValue($Word, 'Speech', 'PluralForms') != ''" then: [x: "DefinitionValue($Word, 'Speech', 'PluralForms')"] - else: [x: "$Word", ct: "s"] + else: [x: "$Word", CT: "s"] else: - x: "$Prefix" - - ct: "-" + - CT: "-" - test: - if: "$IsSingular" # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets the prefix concatenated to the base then: [x: "concat('\uF8FE', $Word)"] - else_if: "DefinitionValue($Word, 'Speech', 'PluralForms') != ''" then: [x: "concat('\uF8FE', DefinitionValue($Word, 'Speech', 'PluralForms'))"] - else: [x: "concat('\uF8FE', $Word)", ct: "s"] + else: [x: "concat('\uF8FE', $Word)", CT: "s"] # need to reverse the order of speech: $ 3 -> 3 dollars - name: currency @@ -357,14 +357,14 @@ then: [x: "DefinitionValue(*[1], 'Speech', 'CurrencySymbols')"] - else_if: "DefinitionValue(*[1], 'Speech', 'PluralForms') != ''" then: [x: "DefinitionValue(*[1], 'Speech', 'PluralForms')"] - else: [x: "DefinitionValue(*[1], 'Speech', 'CurrencySymbols')", ct: "s"] + else: [x: "DefinitionValue(*[1], 'Speech', 'CurrencySymbols')", CT: "s"] - name: sin tag: mi match: ".='sin'" replace: - bookmark: "@id" - - t: "sinus" + - T: "sinus" - name: cos tag: mi @@ -373,8 +373,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "cos"] - else: [t: "cosinus"] + then: [T: "cos"] + else: [T: "cosinus"] - name: tan tag: mi @@ -383,8 +383,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "tan"] - else: [t: "tangente"] + then: [T: "tan"] + else: [T: "tangente"] - name: sec tag: mi @@ -393,8 +393,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "sec"] - else: [t: "sécante"] + then: [T: "sec"] + else: [T: "sécante"] - name: csc tag: mi @@ -403,8 +403,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "csc"] - else: [t: "cosécante"] + then: [T: "csc"] + else: [T: "cosécante"] - name: cot tag: mi @@ -413,8 +413,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "cot"] - else: [t: "cotangente"] + then: [T: "cot"] + else: [T: "cotangente"] - name: sinh tag: mi @@ -423,8 +423,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "sinh"] - else: [t: "sinus hyperbolique"] + then: [T: "sinh"] + else: [T: "sinus hyperbolique"] - name: cosh tag: mi @@ -433,8 +433,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "cosh"] - else: [t: "cosinus hyperbolique"] + then: [T: "cosh"] + else: [T: "cosinus hyperbolique"] - name: tanh tag: mi @@ -443,8 +443,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "tanh"] - else: [t: "tangente hyperbolique"] + then: [T: "tanh"] + else: [T: "tangente hyperbolique"] - name: sech tag: mi @@ -453,8 +453,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "sech"] - else: [t: "sécante hyperbolique"] + then: [T: "sech"] + else: [T: "sécante hyperbolique"] - name: csch tag: mi @@ -463,8 +463,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "csch"] - else: [t: "cosécante hyperbolique"] + then: [T: "csch"] + else: [T: "cosécante hyperbolique"] - name: coth tag: mi @@ -473,8 +473,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "coth"] - else: [t: "cotangente hyperbolique"] + then: [T: "coth"] + else: [T: "cotangente hyperbolique"] - name: exponential tag: mi @@ -483,8 +483,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "exp"] - else: [t: "exponentielle"] + then: [T: "exp"] + else: [T: "exponentielle"] - name: covariance tag: mi @@ -493,8 +493,8 @@ - bookmark: "@id" - test: if: "$Verbosity='Terse'" - then: [t: "Cov"] - else: [t: "covariance"] + then: [T: "Cov"] + else: [T: "covariance"] - name: log tag: mi @@ -503,13 +503,13 @@ - bookmark: "@id" - test: - if: "$Verbosity!='Terse'" - then: [t: "le"] + then: [T: "le"] - test: - if: ".= 'log'" - then: [t: "log"] + then: [T: "log"] - else_if: "$Verbosity='Terse'" - then: [spell: "'ln'"] - else: [t: "logarithme naturel"] + then: [SPELL: "'ln'"] + else: [T: "logarithme naturel"] - name: multi-line # that eliminates the need for the if: else_if: ... @@ -525,13 +525,13 @@ - x: "$LineCount" - test: - if: "self::m:piecewise" - then: [t: "cas"] # phrase(this is the first 'case' of three cases) + then: [T: "cas"] # phrase(this is the first 'case' of three cases) - else_if: "self::m:system-of-equations" - then: [t: "équation"] # phrase(this is the first 'equation' of three equations) - else: [t: "ligne"] # phrase(this is the first 'line' of three lines) + then: [T: "équation"] # phrase(this is the first 'equation' of three equations) + else: [T: "ligne"] # phrase(this is the first 'line' of three lines) - test: - if: "$LineCount != 1 and not(self::m:piecewise)" # 'cas' already ends with an 's', no need to add one when plural - then: [ct: "s"] # plural (not for 'cas' which is invariant) + then: [CT: "s"] # plural (not for 'cas' which is invariant) - pause: short - x: "*" - pause: long @@ -547,15 +547,15 @@ - pause: medium - test: - if: "parent::m:piecewise" - then: [t: "cas"] # phrase('case' 1 of 10 cases) + then: [T: "cas"] # phrase('case' 1 of 10 cases) - else_if: "parent::m:system-of-equations" - then: [t: "équation"] # phrase('equation' 1 of 10 equations) - else: [t: "ligne"] # phrase('line 1 of 10 lines) + then: [T: "équation"] # phrase('equation' 1 of 10 equations) + else: [T: "ligne"] # 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: "avec étiquette" # phrase(the diagram is complete 'with label') + - T: "avec étiquette" # phrase(the diagram is complete 'with label') - x: "*[1]/*" - test: if: "not(contains(@data-intent-property, ':continued-row:'))" @@ -601,14 +601,14 @@ replace: - test: if: "self::m:determinant" # just need to check the first bracket since we know it must be (, [, or | - then: [t: "le"] # phrase('the' 1 by 1 determinant) - else: [t: "la"] # phrase('the' 1 by 1 matrix M) + then: [T: "le"] # phrase('the' 1 by 1 determinant) + else: [T: "la"] # phrase('the' 1 by 1 matrix M) - test: if: "self::m:determinant" - then: [t: "déterminant"] # phrase(the 2 by 2 'determinant') - else: [t: "matrice"] # phrase(the 2 by 2 'matrix') - - t: "1 par 1" # phrase(the '1 by 1' matrix) - - t: "avec l'élément" # phrase(the 2 by 2 matrix 'containing the element' x) + then: [T: "déterminant"] # phrase(the 2 by 2 'determinant') + else: [T: "matrice"] # phrase(the 2 by 2 'matrix') + - T: "1 par 1" # phrase(the '1 by 1' matrix) + - T: "avec l'élément" # phrase(the 2 by 2 matrix 'containing the element' x) - x: "*[1]/*" # simpler reading methods for special case matrices @@ -617,10 +617,10 @@ # select all the non-zero entries -- if there are none of them, then it is a zero matrix match: "not( */*/*[not(self::m:mn and .= 0)] )" replace: - - t: "la" # phrase('the' 1 by 2 matrix M) - - t: "matrice zéro" # phrase(the 2 by 2 'zero matrix') + - T: "la" # phrase('the' 1 by 2 matrix M) + - T: "matrice zéro" # phrase(the 2 by 2 'zero matrix') - x: count(*) - - t: "par" # phrase(the 1 'by' 2 matrix) + - T: "par" # phrase(the 1 'by' 2 matrix) - x: count(*[self::m:mtr][1]/*) - pause: long @@ -632,10 +632,10 @@ - "not( */*[count(preceding-sibling::*) = count(../preceding-sibling::*)]/*[not(self::m:mn and .= 1)] ) and " # on-diagonal - "not( */*[count(preceding-sibling::*) != count(../preceding-sibling::*)]/*[not(self::m:mn and .= 0)] )" # off-diagonal replace: - - t: "la" # phrase('the' 1 by 2 matrix M) - - t: "matrice identité" # phrase(the 2 by 2 'identity matrix') + - T: "la" # phrase('the' 1 by 2 matrix M) + - T: "matrice identité" # phrase(the 2 by 2 'identity matrix') - x: count(*) - - t: "par" # phrase(the 1 'by' 2 matrix) + - T: "par" # phrase(the 1 'by' 2 matrix) - x: count(*[self::m:mtr][1]/*) - pause: long @@ -649,10 +649,10 @@ - " [count(../preceding-sibling::*)!=count(../../preceding-sibling::*)]" - " )" replace: - - t: "la" # phrase('the' 1 by 2 matrix) - - t: "matrice diagonale" # phrase(the 2 by 2 'diagonal matrix') + - T: "la" # phrase('the' 1 by 2 matrix) + - T: "matrice diagonale" # phrase(the 2 by 2 'diagonal matrix') - x: count(*) - - t: "par" # phrase(the 1 'by' 2 matrix) + - T: "par" # phrase(the 1 'by' 2 matrix) - x: count(*[self::m:mtr][1]/*) - pause: long - insert: @@ -675,24 +675,24 @@ replace: - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" - then: [t: "le"] # phrase('the' 2 by 2 vector) - masculine - else: [t: "la"] # phrase('the' 2 by 2 matrix) - feminine + then: [T: "le"] # phrase('the' 2 by 2 vector) - masculine + else: [T: "la"] # phrase('the' 2 by 2 matrix) - feminine - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" - then: [t: "vecteur"] # phrase(the 2 by 2 'vector') - else: [t: "matrice"] # phrase(the 2 by 2 'matrix') + then: [T: "vecteur"] # phrase(the 2 by 2 'vector') + else: [T: "matrice"] # phrase(the 2 by 2 'matrix') - x: count(*) - - t: "par 1 colonne" # phrase(the 2 'by 1 column' matrix) + - T: "par 1 colonne" # phrase(the 2 'by 1 column' matrix) - pause: long - x: "*/*" - test: if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" then: - - t: "fin" # phrase('end' of matrix) + - T: "fin" # phrase('end' of matrix) - test: if: $ClearSpeak_Matrix = 'EndVector' - then: [t: "vecteur"] # phrase(the 2 column 'vector') - else: [t: "matrice"] # phrase(the 2 by 2 'matrix') + then: [T: "vecteur"] # phrase(the 2 column 'vector') + else: [T: "matrice"] # phrase(the 2 by 2 'matrix') - name: default-column-matrix tag: matrix @@ -701,19 +701,19 @@ replace: - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" - then: [t: "le"] # phrase('the' 2 by 2 vector) - masculine - else: [t: "la"] # phrase('the' 2 by 2 matrix) - feminine + then: [T: "le"] # phrase('the' 2 by 2 vector) - masculine + else: [T: "la"] # phrase('the' 2 by 2 matrix) - feminine - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" - then: [t: "vecteur"] # phrase(the 2 column 'vector') - else: [t: "matrice"] # phrase(the 2 by 2 'matrix') + then: [T: "vecteur"] # phrase(the 2 column 'vector') + else: [T: "matrice"] # phrase(the 2 by 2 'matrix') - x: "count(*)" - - t: "par 1 colonne" # phrase(the 2 'by 1 column' matrix) + - T: "par 1 colonne" # phrase(the 2 'by 1 column' matrix) - pause: long - x: "*" # select the rows (mtr) - test: if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" - then: [t: "fin de la matrice"] # phrase(the 'end of matrix' has been reached) + then: [T: "fin de la matrice"] # phrase(the 'end of matrix' has been reached) - name: 1x2-or-3-matrix tag: matrix @@ -726,25 +726,25 @@ replace: - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" - then: [t: "le"] # phrase('the' 2 by 2 vector) - masculine - else: [t: "la"] # phrase('the' 2 by 2 matrix) - feminine + then: [T: "le"] # phrase('the' 2 by 2 vector) - masculine + else: [T: "la"] # phrase('the' 2 by 2 matrix) - feminine - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" - then: [t: "vecteur"] # phrase('the 1 by' 2 row 'vector') - else: [t: "matrice"] # phrase('the 1 by' 2 'matrix') - - t: "1 par" # phrase('the 1 by' 2 matrix) + then: [T: "vecteur"] # phrase('the 1 by' 2 row 'vector') + else: [T: "matrice"] # phrase('the 1 by' 2 'matrix') + - T: "1 par" # phrase('the 1 by' 2 matrix) - x: count(*/*) - - t: "rangée" # phrase(the 1 by 4 'row' matrix) + - T: "rangée" # phrase(the 1 by 4 'row' matrix) - pause: long - x: "*/*" - test: if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" then: - - t: "fin" # phrase(the 'end' of matrix has been reached) + - T: "fin" # phrase(the 'end' of matrix has been reached) - test: if: $ClearSpeak_Matrix = 'EndMatrix' - then: [t: "matrice"] # phrase(the 2 by 2 'matrix') - else: [t: "vecteur"] # phrase(the 2 by 1 'vector') + then: [T: "matrice"] # phrase(the 2 by 2 'matrix') + else: [T: "vecteur"] # phrase(the 2 by 1 'vector') - name: default-row-matrix tag: matrix @@ -753,26 +753,26 @@ replace: - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" - then: [t: "le"] # phrase('the' 2 by 2 vector) - masculine - else: [t: "la"] # phrase('the' 2 by 2 matrix) - feminine + then: [T: "le"] # phrase('the' 2 by 2 vector) - masculine + else: [T: "la"] # phrase('the' 2 by 2 matrix) - feminine - test: if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" - then: [t: "vecteur"] # phrase(the 2 by 1 'vector') - else: [t: "matrice"] # phrase(the 2 by 2 'matrix') - - t: "1 par" # phrase('the 1 by' 2 matrix) + then: [T: "vecteur"] # phrase(the 2 by 1 'vector') + else: [T: "matrice"] # phrase(the 2 by 2 'matrix') + - T: "1 par" # phrase('the 1 by' 2 matrix) - x: "count(*/*)" - - t: "rangée" # phrase(the 1 by 2 'row' matrix) + - T: "rangée" # phrase(the 1 by 2 'row' matrix) - pause: long - pause: medium - x: "*/*" # select the cols (mtd) - test: if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" then: - - t: "fin" # phrase(the 'end' of matrix has been reached) + - T: "fin" # phrase(the 'end' of matrix has been reached) - test: if: $ClearSpeak_Matrix = 'EndMatrix' - then: [t: "matrice"] # phrase(the 2 by 2 'matrix') - else: [t: "vecteur"] # phrase(the 2 by 1 'vector') + then: [T: "matrice"] # phrase(the 2 by 2 'matrix') + else: [T: "vecteur"] # phrase(the 2 by 1 'vector') - name: simple-small-matrix tag: [matrix, determinant] @@ -784,25 +784,25 @@ replace: - test: if: "self::m:determinant" - then: [t: "le"] # phrase('the' 2 by 2 determinant) - masculine - else: [t: "la"] # phrase('the' 2 by 2 matrix) - feminine + then: [T: "le"] # phrase('the' 2 by 2 determinant) - masculine + else: [T: "la"] # phrase('the' 2 by 2 matrix) - feminine - test: if: "self::m:determinant" - then: [t: "déterminant"] # phrase(the 2 by 2 'determinant') - else: [t: "matrice"] # phrase(the 2 by 2 'matrix') + then: [T: "déterminant"] # phrase(the 2 by 2 'determinant') + else: [T: "matrice"] # phrase(the 2 by 2 'matrix') - x: count(*) - - t: "par" # phrase(the 1 'by' 2 matrix) + - T: "par" # phrase(the 1 'by' 2 matrix) - x: count(*[self::m:mtr][1]/*) - pause: long - x: "*" - test: if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" then: - - t: "fin" # phrase(the 'end' of matrix has been reached) + - T: "fin" # phrase(the 'end' of matrix has been reached) - test: if: "self::m:determinant" - then: [t: "déterminant"] # phrase(the 2 by 2 'determinant') - else: [t: "matrice"] # phrase(the 2 by 2 'matrix') + then: [T: "déterminant"] # phrase(the 2 by 2 'determinant') + else: [T: "matrice"] # phrase(the 2 by 2 'matrix') - name: default-matrix tag: [matrix, determinant] @@ -811,25 +811,25 @@ replace: - test: if: "self::m:determinant" - then: [t: "le"] # phrase('the' 2 by 2 determinant) - masculine - else: [t: "la"] # phrase('the' 2 by 2 matrix) - feminine + then: [T: "le"] # phrase('the' 2 by 2 determinant) - masculine + else: [T: "la"] # phrase('the' 2 by 2 matrix) - feminine - test: if: "self::m:determinant" - then: [t: "déterminant"] # phrase(the 2 by 2 'determinant') - else: [t: "matrice"] # phrase(the 2 by 2 'matrix') + then: [T: "déterminant"] # phrase(the 2 by 2 'determinant') + else: [T: "matrice"] # phrase(the 2 by 2 'matrix') - x: "count(*)" - - t: "par" # phrase(the 1 'by' 2 matrix) + - T: "par" # phrase(the 1 'by' 2 matrix) - x: "count(*[self::m:mtr][1]/*)" - pause: long - x: "*" - test: if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" then: - - t: "fin" # phrase(the 'end' of matrix has been reached) + - T: "fin" # phrase(the 'end' of matrix has been reached) - test: if: "self::m:determinant" - then: [t: "déterminant"] # phrase(the 2 by 2 'determinant') - else: [t: "matrice"] # phrase(the 2 by 2 'matrix's) + then: [T: "déterminant"] # phrase(the 2 by 2 'determinant') + else: [T: "matrice"] # phrase(the 2 by 2 'matrix's) - name: chemistry-msub tag: [chemical-formula] @@ -838,7 +838,7 @@ - x: "*[2]" - test: if: "$Verbosity='Verbose' or $Verbosity='Medium'" - then: [t: "indice"] # phrase(H 'subscript' 2) + then: [T: "indice"] # phrase(H 'subscript' 2) - x: "*[3]" - name: dimension-by @@ -847,7 +847,7 @@ replace: - insert: nodes: "*" - replace: [t: "par", pause: auto] # phrase(3 'by' 5 matrix) + replace: [T: "par", pause: auto] # phrase(3 'by' 5 matrix) - name: chemistry-msup tag: [chemical-formula] @@ -856,10 +856,10 @@ - x: "*[2]" - test: if: "$Verbosity='Verbose' or $Verbosity='Medium'" - then: [t: "exposant"] # phrase(H 'superscript' 2) + then: [T: "exposant"] # phrase(H 'superscript' 2) # else_test: # if: "$Verbosity='Medium'" - # then: [t: "super"] # phrase(H 'super' 2) + # then: [T: "super"] # phrase(H 'super' 2) - x: "*[3]" - test: if: "following-sibling::*[1][.='+' or .='-']" # a little lazy -- assumes chemistry superscripts end with + or - @@ -887,7 +887,7 @@ then: - test: if: "$Verbosity='Medium' or $Verbosity='Verbose'" - then: [t: "exposant"] # phrase(H 'superscript' 2) + then: [T: "exposant"] # phrase(H 'superscript' 2) - x: "$Prescripts[2]" - pause: "short" - test: @@ -895,7 +895,7 @@ then: - test: if: "$Verbosity='Medium' or $Verbosity='Verbose'" - then: [t: "indice"] # phrase(a 'subscript' may be used to indicate an index) + then: [T: "indice"] # phrase(a 'subscript' may be used to indicate an index) - x: "$Prescripts[1]" - pause: "short" - test: @@ -906,7 +906,7 @@ then: - test: if: "$Verbosity='Medium' or $Verbosity='Verbose'" - then: [t: "exposant"] # phrase(H 'superscript' 2) + then: [T: "exposant"] # phrase(H 'superscript' 2) - x: "$Prescripts[4]" - pause: "short" - test: @@ -914,7 +914,7 @@ then: - test: if: "$Verbosity='Medium' or $Verbosity='Verbose'" - then: [t: "indice"] # phrase(H 'subscript' 2) + then: [T: "indice"] # phrase(H 'subscript' 2) - x: "$Prescripts[3]" - pause: "short" - x: "*[1]" # base @@ -926,7 +926,7 @@ then: - test: if: "$Verbosity='Medium' or $Verbosity='Verbose'" - then: [t: "indice"] # phrase(phrase(H 'subscript' 2) + then: [T: "indice"] # phrase(phrase(H 'subscript' 2) - x: "$Postscripts[1]" - pause: "short" - test: @@ -934,7 +934,7 @@ then: - test: if: "$Verbosity='Medium' or $Verbosity='Verbose'" - then: [t: "exposant"] # phrase(H 'superscript' 2) + then: [T: "exposant"] # phrase(H 'superscript' 2) - x: "$Postscripts[2]" - pause: "short" - test: @@ -945,7 +945,7 @@ then: - test: if: "$Verbosity='Medium' or $Verbosity='Verbose'" - then: [t: "indice"] # phrase(H 'subscript' 2) + then: [T: "indice"] # phrase(H 'subscript' 2) - x: "$Postscripts[3]" - pause: "short" - test: @@ -953,7 +953,7 @@ then: - test: if: "$Verbosity='Medium' or $Verbosity='Verbose'" - then: [t: "exposant"] # phrase(H 'superscript' 2) + then: [T: "exposant"] # phrase(H 'superscript' 2) - x: "$Postscripts[4]" - pause: "short" - test: @@ -964,7 +964,7 @@ then: - test: if: "$Verbosity='Medium' or $Verbosity='Verbose'" - then: [t: "indice"] # phrase(H 'subscript' 2) + then: [T: "indice"] # phrase(H 'subscript' 2) - x: "$Postscripts[5]" - pause: "short" - test: @@ -972,7 +972,7 @@ then: - test: if: "$Verbosity='Medium' or $Verbosity='Verbose'" - then: [t: "exposant"] # phrase(H 'superscript' 2) + then: [T: "exposant"] # phrase(H 'superscript' 2) - x: "$Postscripts[6]" - pause: "short" - test: @@ -983,7 +983,7 @@ then: - test: if: "$Verbosity='Medium' or $Verbosity='Verbose'" - then: [t: "indice"] # phrase(H 'subscript' 2) + then: [T: "indice"] # phrase(H 'subscript' 2) - x: "$Postscripts[7]" - pause: "short" - test: @@ -991,7 +991,7 @@ then: - test: if: "$Verbosity='Medium' or $Verbosity='Verbose'" - then: [t: "exposant"] # phrase(H 'superscript' 2) + then: [T: "exposant"] # phrase(H 'superscript' 2) - x: "$Postscripts[8]" - pause: "short" - test: @@ -1009,7 +1009,7 @@ match: "." replace: - bookmark: "@id" - - spell: text() + - SPELL: text() - pause: short - name: chemical-state @@ -1019,12 +1019,12 @@ - bookmark: "*[1]/@id" - test: - if: ".='s'" - then: [t: "solide"] # phrase(Boron is a 'solid' in its natural state) + then: [T: "solide"] # phrase(Boron is a 'solid' in its natural state) - else_if: ".='l'" - then: [t: "liquide"] # phrase(water is a 'liquid') + then: [T: "liquide"] # phrase(water is a 'liquid') - else_if: ".='g'" - then: [t: "gaz"] # phrase(hydrogen is a 'gas' ) - else: [t: "aqueux"] # phrase(an 'aqueous' solution is contained in water) + then: [T: "gaz"] # phrase(hydrogen is a 'gas' ) + else: [T: "aqueux"] # phrase(an 'aqueous' solution is contained in water) - pause: short - name: chemical-formula-operator-bond @@ -1035,13 +1035,13 @@ - bookmark: "@id" - test: - if: ".='-' or .=':'" - then: [t: "liaison simple"] # phrase(a 'single bond' is formed when two atoms share one pair of electrons) + then: [T: "liaison simple"] # phrase(a 'single bond' is formed when two atoms share one pair of electrons) - else_if: ".='=' or .='∷'" - then: [t: "liaison double"] # phrase(a 'double bond' may occur when two atoms share two pairs of electrons) + then: [T: "liaison double"] # phrase(a 'double bond' may occur when two atoms share two pairs of electrons) - else_if: ".='≡'" - then: [t: "liaison triple"] # phrase(a 'triple bond' occurs when two atoms share three pairs of electrons) + then: [T: "liaison triple"] # phrase(a 'triple bond' occurs when two atoms share three pairs of electrons) - else_if: ".='≣'" - then: [t: "liaison quadruple"] # phrase(a 'quadruple bond' occurs when two atoms share four pairs of electrons) + then: [T: "liaison quadruple"] # phrase(a 'quadruple bond' occurs when two atoms share four pairs of electrons) else: [x: "text()"] - name: chemical-formula-operator @@ -1060,14 +1060,14 @@ - if: ".='→' or .='⟶'" then_test: if: "$Verbosity='Terse'" - then: [t: "forment"] # phrase(hydrogen and oxygen 'forms' water ) - else: [t: "réagissent pour former"] # phrase(hydrogen and oxygen 'reacts to form' water) + then: [T: "forment"] # phrase(hydrogen and oxygen 'forms' water ) + else: [T: "réagissent pour former"] # phrase(hydrogen and oxygen 'reacts to form' water) - else_if: ".='⇌' or .='🣑'" # U+01F8D1 - then: [t: "est en équilibre avec"] # phrase(a reactant 'is in equilibrium with' a product) + then: [T: "est en équilibre avec"] # phrase(a reactant 'is in equilibrium with' a product) - else_if: ".='🣓'" # U+1F8D3 - then: [t: "est en équilibre biaisé vers la gauche avec"] # phrase(the reactant 'is in equilibrium biased to the left with' the product) + then: [T: "est en équilibre biaisé vers la gauche avec"] # phrase(the reactant 'is in equilibrium biased to the left with' the product) - else_if: ".='🣒'" # U+1F8D2 - then: [t: "est en équilibre biaisé vers la droite avec"] # phrase(the reactant 'is in equilibrium biased to the right with' the product) + then: [T: "est en équilibre biaisé vers la droite avec"] # phrase(the reactant 'is in equilibrium biased to the right with' the product) else: [x: "*"] - name: chemical-equation-operator @@ -1081,7 +1081,7 @@ tag: none match: "../../*[self::m:chemical-formula or self::m:chemical-nuclide]" replace: - - t: "" # don't say anything + - T: "" # don't say anything - name: ignore-intent-wrapper tag: intent-wrapper diff --git a/Rules/Languages/fr/SharedRules/geometry.yaml b/Rules/Languages/fr/SharedRules/geometry.yaml index b5ab22a7e..636fc214d 100644 --- a/Rules/Languages/fr/SharedRules/geometry.yaml +++ b/Rules/Languages/fr/SharedRules/geometry.yaml @@ -7,12 +7,12 @@ - test: if: "$Verbosity='Verbose'" then: - - t: "le segment de droite de" + - T: "le segment de droite de" - x: "*[1]" - - t: "à" + - T: "à" - x: "*[2]" else: - - t: "segment" + - T: "segment" - x: "*[1]" - x: "*[2]" @@ -23,12 +23,12 @@ - test: if: "$Verbosity='Verbose'" then: - - t: "la demi-droite de" + - T: "la demi-droite de" - x: "*[1]" - - t: "à" + - T: "à" - x: "*[2]" else: - - t: "demi-droite" + - T: "demi-droite" - x: "*[1]" - x: "*[2]" @@ -38,8 +38,8 @@ replace: - test: if: "$Verbosity='Verbose'" - then: [t: "l'"] - - t: "arc" + then: [T: "l'"] + - T: "arc" - x: "*[1]" - x: "*[2]" @@ -50,9 +50,9 @@ - test: if: "$Verbosity='Verbose'" then: - - t: "la mesure de l'angle" + - T: "la mesure de l'angle" else: - - t: "mesure de l'angle" + - T: "mesure de l'angle" - x: "*[1]" - x: "*[2]" - x: "*[3]" @@ -63,16 +63,16 @@ replace: - test: if: "$Verbosity='Verbose'" - then: [t: "le"] - - t: "point" + then: [T: "le"] + - T: "point" - test: if: "$Verbosity='Verbose'" - then: [t: "de coordonnées"] + then: [T: "de coordonnées"] - pause: short - insert: nodes: "*" - replace: [t: "virgule", pause: auto] + replace: [T: "virgule", pause: auto] - pause: short - test: if: "($SpeechStyle='ClearSpeak' and $Verbosity='Verbose') or not(IsNode(*[last()],'leaf'))" - then: [t: "fin du point"] + then: [T: "fin du point"] diff --git a/Rules/Languages/fr/SharedRules/linear-algebra.yaml b/Rules/Languages/fr/SharedRules/linear-algebra.yaml index ce8a03dcd..71a8ca747 100644 --- a/Rules/Languages/fr/SharedRules/linear-algebra.yaml +++ b/Rules/Languages/fr/SharedRules/linear-algebra.yaml @@ -7,16 +7,16 @@ - test: if: "$Verbosity='Verbose'" then: - - t: "le" - - t: "déterminant" + - T: "le" + - T: "déterminant" - test: if: "$Verbosity!='Terse'" then: - - t: "de" + - T: "de" - x: "*[1]" - test: if: "not(IsNode(*[1], 'simple')) and $Impairment = 'Blindness'" - then: [t: "fin du déterminant"] + then: [T: "fin du déterminant"] - name: subscripted-norm tag: subscripted-norm @@ -25,11 +25,11 @@ - test: if: "$Verbosity='Verbose'" then: - - t: "la" + - T: "la" - x: "*[2]" - - t: "norme" + - T: "norme" - test: if: "$Verbosity!='Terse'" then: - - t: "de" + - T: "de" - x: "*[1]" diff --git a/Rules/Languages/fr/SimpleSpeak_Rules.yaml b/Rules/Languages/fr/SimpleSpeak_Rules.yaml index 0bc84e0c9..160b8e954 100644 --- a/Rules/Languages/fr/SimpleSpeak_Rules.yaml +++ b/Rules/Languages/fr/SimpleSpeak_Rules.yaml @@ -23,7 +23,7 @@ tag: mn match: "starts-with(text(), '-')" replace: - - t: "moins" + - T: "moins" - x: "translate(text(), '-_', '')" - name: default @@ -32,17 +32,17 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "la"] - - t: "racine carrée" + then: [T: "la"] + - T: "racine carrée" - test: if: "$Verbosity!='Terse'" - then: [t: "de"] + then: [T: "de"] else: [pause: short] - x: "*[1]" - pause: short - test: if: "not(IsNode(*[1], 'leaf')) and $Impairment = 'Blindness'" - then: [t: "fin de racine", pause: medium] + then: [T: "fin de racine", pause: medium] - name: default tag: root @@ -50,28 +50,28 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "la"] + then: [T: "la"] - test: if: "*[2][self::m:mn and not(contains(., '.'))]" then_test: - if: "*[2][.='2']" - then: [t: "racine carrée"] + then: [T: "racine carrée"] - else_if: "*[2][.='3']" - then: [t: "racine cubique"] + then: [T: "racine cubique"] - else: - x: "*[2]" - - t: "ième racine" + - T: "ième racine" else: - x: "*[2]" - - t: "racine" + - T: "racine" - test: if: "$Verbosity!='Terse'" - then: [t: "de"] + then: [T: "de"] - x: "*[1]" - pause: short - test: if: "not(IsNode(*[1], 'leaf')) and $Impairment = 'Blindness'" - then: [t: "fin de racine", pause: medium] + then: [T: "fin de racine", pause: medium] - name: common-fraction tag: fraction @@ -103,7 +103,7 @@ - "BaseNode(*[2])[contains(@data-intent-property, ':unit')] " replace: - x: "*[1]" - - t: "par" + - T: "par" - x: "*[2]" - name: simple @@ -113,7 +113,7 @@ - "not(ancestor::*[name() != 'mrow'][1]/self::m:fraction)" replace: - x: "*[1]" - - t: "sur" + - T: "sur" - x: "*[2]" - pause: short @@ -123,13 +123,13 @@ replace: - test: if: "$Impairment = 'Blindness'" - then: [t: "fraction"] + then: [T: "fraction"] - pause: short - x: "*[1]" - test: if: "not(IsNode(*[1],'leaf'))" then: [pause: short] - - t: "sur" + - T: "sur" - test: if: "not(IsNode(*[2],'leaf'))" then: [pause: short] @@ -137,14 +137,14 @@ - pause: short - test: if: "$Impairment = 'Blindness'" - then: [t: "fin de fraction"] + then: [T: "fin de fraction"] - pause: medium - name: inverse-function tag: inverse-function match: "." replace: - - t: "inverse" + - T: "inverse" - x: "*[1]" - name: function-squared-or-cubed @@ -157,8 +157,8 @@ - bookmark: "*[2]/@id" - test: if: "*[2][.=2]" - then: [t: "au carré"] - else: [t: "au cube"] + then: [T: "au carré"] + else: [T: "au cube"] - name: function-power tag: power @@ -167,7 +167,7 @@ replace: - bookmark: "*[2]/@id" - x: "*[2]" - - t: "puissance de" + - T: "puissance de" - pause: short - x: "*[1]" @@ -179,15 +179,15 @@ - bookmark: "*[2]/@id" - test: if: "*[2][.=2]" - then: [t: "au carré"] - else: [t: "au cube"] + then: [T: "au carré"] + else: [T: "au cube"] - name: simple-integer tag: power match: "*[2][self::m:mn][not(contains(., '.'))]" replace: - x: "*[1]" - - t: "à la" + - T: "à la" - x: "*[2]" - name: simple-negative-integer @@ -197,7 +197,7 @@ - " *[1][self::m:mn][not(contains(., '.'))]]" replace: - x: "*[1]" - - t: "à la" + - T: "à la" - x: "*[2]" - name: simple-var @@ -205,7 +205,7 @@ match: "*[2][self::m:mi][string-length(.)=1]" replace: - x: "*[1]" - - t: "à la" + - T: "à la" - x: "*[2]" - pronounce: [text: "-ième", ipa: "jɛm", sapi5: "ième", eloquence: "ième"] @@ -214,7 +214,7 @@ match: "IsNode(*[2], 'leaf')" replace: - x: "*[1]" - - t: "à la" + - T: "à la" - x: "*[2]" - name: nested @@ -226,13 +226,13 @@ - " ]" replace: - x: "*[1]" - - t: "élevé à la" + - T: "élevé à la" - x: "*[2]" - pause: short - test: if: "$Impairment = 'Blindness'" then: - - t: "fin d'exposant" + - T: "fin d'exposant" - pause: short else: - pause: medium @@ -242,7 +242,7 @@ match: "." replace: - x: "*[1]" - - t: "élevé à la puissance" + - T: "élevé à la puissance" - x: "*[2]" - name: set @@ -252,15 +252,15 @@ - test: - if: "count(*)=0" then: - - t: "ensemble vide" + - T: "ensemble vide" - else_if: "count(*[1]/*)=3 and *[1]/*[2][self::m:mo][.=':' or .='|' or .='∣']" then: - - t: "ensemble de tous les" + - T: "ensemble de tous les" - x: "*[1]/*[1]" - - t: "tel que" + - T: "tel que" - x: "*[1]/*[3]" else: - - t: "ensemble" + - T: "ensemble" - x: "*[1]" - name: times @@ -286,7 +286,7 @@ - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')]" - " )" replace: - - t: "fois" + - T: "fois" - name: no-say-parens tag: mrow diff --git a/Rules/Languages/fr/overview.yaml b/Rules/Languages/fr/overview.yaml index b077f447a..96bbc366c 100644 --- a/Rules/Languages/fr/overview.yaml +++ b/Rules/Languages/fr/overview.yaml @@ -21,22 +21,22 @@ if: "IsNode(*[1], 'simple') and IsNode(*[2], 'simple')" then: - x: "*[1]" - - t: "sur" + - T: "sur" - x: "*[2]" else: - - t: "fraction" + - T: "fraction" - name: overview-default tag: [msqrt, "square-root"] match: "." replace: - - t: "racine carrée" + - T: "racine carrée" - test: if: "IsNode(*[1], 'simple')" then: - test: if: "$Verbosity!='Terse'" - then: [t: "de"] + then: [T: "de"] - x: "*[1]" - name: overview-default @@ -47,21 +47,21 @@ if: "*[2][self::m:mn]" then_test: - if: "*[2][.='2']" - then: [t: "racine carrée"] + then: [T: "racine carrée"] - else_if: "*[2][.='3']" - then: [t: "racine cubique"] + then: [T: "racine cubique"] - else: - x: "*[2]" - - t: "ième racine" + - T: "ième racine" else: - x: "*[2]" - - t: "racine" + - T: "racine" - test: if: "IsNode(*[1], 'simple')" then: - test: if: "$Verbosity!='Terse'" - then: [t: "de"] + then: [T: "de"] - x: "*[1]" - name: matrix-override @@ -70,24 +70,24 @@ - "*[2][self::m:mtable] and" - "(IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|'))" replace: - - t: "la" + - T: "la" - x: count(*[2]/*) - - t: "par" + - T: "par" - x: count(*[2]/*[self::m:mtr][1]/*) - test: if: "*[1][.='|']" - then: [t: "déterminant"] - else: [t: "matrice"] + then: [T: "déterminant"] + else: [T: "matrice"] - name: overview-default tag: mtable match: "." replace: - - t: "la" + - T: "la" - x: count(*[2]/*) - - t: "par" + - T: "par" - x: count(*[2]/*[self::m:mtr][1]/*) - - t: "table" + - T: "table" - name: short-mrow tag: mrow @@ -111,6 +111,6 @@ - pause: auto - x: "*[5]" - pause: auto - - t: "et ainsi de suite" + - T: "et ainsi de suite" - include: "SimpleSpeak_Rules.yaml" diff --git a/Rules/Languages/fr/unicode.yaml b/Rules/Languages/fr/unicode.yaml index d305de42a..b1542a694 100644 --- a/Rules/Languages/fr/unicode.yaml +++ b/Rules/Languages/fr/unicode.yaml @@ -5,8 +5,8 @@ - "a-z": - test: if: "$TTS='none'" - then: [t: "."] # (en: '.', DeepL translation) - else: [spell: "'.'"] + then: [T: "."] # (en: '.', DeepL translation) + else: [SPELL: "'.'"] # Capital letters are a little tricky: users can pick their favorite word (something that was requested) and # screen readers have options to use pitch changes or beeps instead of or in addition to say "cap" @@ -22,58 +22,58 @@ - pitch: value: "$CapitalLetters_Pitch" # note: processing of ranges converts '.' into the character, so it needs to be in quotes below - replace: [spell: "translate('.', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')"] + replace: [SPELL: "translate('.', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')"] - test: if: "$CapitalLetters_UseWord" then_test: if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "majuscule"] # (en: 'cap', DeepL translation) + then: [T: "majuscule"] # (en: 'cap', DeepL translation) else: [x: "$SpeechOverrides_CapitalLetters"] - - "0-9": [t: "."] # (en: '.', DeepL: 'A') + - "0-9": [T: "."] # (en: '.', DeepL: 'A') - - " ": [t: " "] # 0x20 (en: ' ', DeepL: ' ') + - " ": [T: " "] # 0x20 (en: ' ', DeepL: ' ') - "!": # 0x21 - test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" then_test: if: "$Verbosity = 'Terse'" - then: [t: "bang"] # 0x21 (DeepL translation) - else: [t: "point d'exclamation"] # 0x21 (en: 'exclamation point') - else: [t: "factorielle"] # 0x21 (en: 'factorial') + then: [T: "bang"] # 0x21 (DeepL translation) + else: [T: "point d'exclamation"] # 0x21 (en: 'exclamation point') + else: [T: "factorielle"] # 0x21 (en: 'factorial') - - "\"": [t: "guillemet"] # 0x22 (en: 'quotation mark') - - "#": [t: "dièse"] # 0x23 (en: 'number') - - "$": [t: "dollar"] # 0x24 - - "%": [t: "pourcent"] # 0x25 (en: 'percent') - - "&": [t: "esperluette"] # 0x26 (en: 'ampersand') - - "'": [t: "apostrophe"] # 0x27 (SRE: 'prime') + - "\"": [T: "guillemet"] # 0x22 (en: 'quotation mark') + - "#": [T: "dièse"] # 0x23 (en: 'number') + - "$": [T: "dollar"] # 0x24 + - "%": [T: "pourcent"] # 0x25 (en: 'percent') + - "&": [T: "esperluette"] # 0x26 (en: 'ampersand') + - "'": [T: "apostrophe"] # 0x27 (SRE: 'prime') - "(": # 0x28 - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' then_test: if: "$Verbosity='Terse'" - then: [t: "ouvert"] # 0x28 (en: 'open', DeepL translation) - else: [t: "parenthèse gauche"] # 0x28 (en: 'open paren', MathPlayer: 'parenthèse ouvrante', DeepL: 'parenthèse ouverte') - else: [t: "parenthèse gauche"] # 0x28 (en: 'left paren', MathPlayer: 'parenthèse ouvrante') + then: [T: "ouvert"] # 0x28 (en: 'open', DeepL translation) + else: [T: "parenthèse gauche"] # 0x28 (en: 'open paren', MathPlayer: 'parenthèse ouvrante', DeepL: 'parenthèse ouverte') + else: [T: "parenthèse gauche"] # 0x28 (en: 'left paren', MathPlayer: 'parenthèse ouvrante') - ")": # 0x29 - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' then_test: if: "$Verbosity='Terse'" - then: [t: "fermer"] # 0x29 (en: 'close', DeepL translation) - else: [t: "parenthèse droite"] # 0x29 (en: 'close paren', MathPlayer: 'parenthèse fermante', DeepL: 'parenthèse fermée') - else: [t: "parenthèse droite"] # 0x29 (en: 'right paren', MathPlayer: 'parenthèse fermante') + then: [T: "fermer"] # 0x29 (en: 'close', DeepL translation) + else: [T: "parenthèse droite"] # 0x29 (en: 'close paren', MathPlayer: 'parenthèse fermante', DeepL: 'parenthèse fermée') + else: [T: "parenthèse droite"] # 0x29 (en: 'right paren', MathPlayer: 'parenthèse fermante') - "*": # 0x2a test: if: "parent::*[name(.)='msup' or name(.)='msubsup' or name(.)='skip-super']" - then: [t: "astérisque"] # 0x2a (en: 'star', DeepL translation) - else: [t: "fois"] # 0x2a (en: 'times') - - "+": [t: "plus"] # 0x2b (MathPlayer: 'pluce') + then: [T: "astérisque"] # 0x2a (en: 'star', DeepL translation) + else: [T: "fois"] # 0x2a (en: 'times') + - "+": [T: "plus"] # 0x2b (MathPlayer: 'pluce') - ",": # 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 @@ -86,67 +86,67 @@ # except if expression starts with '…' - "../*[1][.='…'] " then: - - t: "virgule" # (en: 'comma') + - T: "virgule" # (en: 'comma') - test: if: "$Verbosity != Terse" then: [pause: short] # else silent - - "-": [t: "moins"] # 0x2d (en: 'minus') + - "-": [T: "moins"] # 0x2d (en: 'minus') - ".": # 0x2e - test: if: "parent::*[1][self::m:mn]" - then: [t: "point"] # (DeepL translation) - else: [t: "point"] # (en: 'dot') + then: [T: "point"] # (DeepL translation) + else: [T: "point"] # (en: 'dot') - "/": # 0x2f - test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" - then: [t: "barre oblique"] # 0x2f (en: 'slash', DeepL translation) - else: [t: "divisé par"] # 0x2f (en: 'divided by') + then: [T: "barre oblique"] # 0x2f (en: 'slash', DeepL translation) + else: [T: "divisé par"] # 0x2f (en: 'divided by') - - ":": [t: "deux points"] # 0x3a (en: 'colon') - - ";": [t: "point virgule"] # 0x3b (en: 'semicolon') + - ":": [T: "deux points"] # 0x3a (en: 'colon') + - ";": [T: "point virgule"] # 0x3b (en: 'semicolon') - "<": # 0x3c - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "inférieur à" # (en: 'less than') + then: [T: "est"] # (en: 'is', DeepL translation) + - T: "inférieur à" # (en: 'less than') - "=": # 0x3d - test: if: "$Verbosity!='Terse'" - then: [t: "est égal à"] # (en: 'is equal to', DeepL translation) - else: [t: "égale"] # (en: 'equals') + then: [T: "est égal à"] # (en: 'is equal to', DeepL translation) + else: [T: "égale"] # (en: 'equals') - ">": # 0x3e - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "supérieur à" # (en: 'greater than') - - "?": [t: "point d'interrogation"] # 0x3f (en: 'question mark') - - "@": [t: "arobase"] # 0x40 (en: 'at sign') + then: [T: "est"] # (en: 'is', DeepL translation) + - T: "supérieur à" # (en: 'greater than') + - "?": [T: "point d'interrogation"] # 0x3f (en: 'question mark') + - "@": [T: "arobase"] # 0x40 (en: 'at sign') - "[": # 0x5b - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [t: "crochet ouvrant"] # (en: 'open bracket') - else: [t: "crochet gauche"] # (en: 'left bracket', MathPlayer: 'crochet ouvrant', DeepL: 'parenthèse gauche') - - "\\": [t: "crochet gauche"] # 0x5c (en: 'back slash', MathPlayer: 'crochet ouvrant', DeepL: 'barre oblique arrière') + then: [T: "crochet ouvrant"] # (en: 'open bracket') + else: [T: "crochet gauche"] # (en: 'left bracket', MathPlayer: 'crochet ouvrant', DeepL: 'parenthèse gauche') + - "\\": [T: "crochet gauche"] # 0x5c (en: 'back slash', MathPlayer: 'crochet ouvrant', DeepL: 'barre oblique arrière') - "]": # 0x5d - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [t: "crochet fermant"] # (en: 'close bracket') - else: [t: "crochet droit"] # (en: 'right bracket', MathPlayer: 'crochet fermant', DeepL: 'parenthèse droite') + then: [T: "crochet fermant"] # (en: 'close bracket') + else: [T: "crochet droit"] # (en: 'right bracket', MathPlayer: 'crochet fermant', DeepL: 'parenthèse droite') - "^": # 0x5e - test: if: "parent::m:modified-variable or parent::m:mover" - then: [t: "accent circonflexe"] # (en: 'hat') - else: [t: "accent circonflexe"] # (en: 'caret') - - "_": [t: "tiret bas"] # 0x5f (en: 'under bar') - - "`": [t: "accent grave"] # 0x60 (en: 'grave') + then: [T: "accent circonflexe"] # (en: 'hat') + else: [T: "accent circonflexe"] # (en: 'caret') + - "_": [T: "tiret bas"] # 0x5f (en: 'under bar') + - "`": [T: "accent grave"] # 0x60 (en: 'grave') - "{": # 0x7b - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [t: "accolade ouverte"] # (en: 'open brace', DeepL translation) - else: [t: "accolade gauche"] # (en: 'left brace', MathPlayer: 'accolade ouvrante') + then: [T: "accolade ouverte"] # (en: 'open brace', DeepL translation) + else: [T: "accolade gauche"] # (en: 'left brace', MathPlayer: 'accolade ouvrante') - "|": # 0x7c # note: for ClearSpeak and SimpleSpeak, "|" inside of sets is handled at the mrow level, same for 'sets' - with: @@ -154,69 +154,69 @@ replace: - test: - if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" - then: [t: "ligne verticale"] # (en: 'vertical line', DeepL translation) + then: [T: "ligne verticale"] # (en: 'vertical line', DeepL translation) - else_if: "$SpeechStyle != 'ClearSpeak'" then_test: - if: "$DefaultToGiven" - then: [t: "sachant"] # (en: 'given', DeepL translation) + then: [T: "sachant"] # (en: 'given', DeepL translation) - else_if: "preceding-sibling::*[1][self::m:mn and not(contains(., $DecimalSeparators))] and following-sibling::*[1][self::m:mn and not(contains(., $DecimalSeparators))]" - then: [t: "divise"] # (en: 'divides', DeepL translation) - else: [t: "ligne verticale"] # (en: 'vertical line') + then: [T: "divise"] # (en: 'divides', DeepL translation) + else: [T: "ligne verticale"] # (en: 'vertical line') - else_if: "not(preceding-sibling::*) or not(following-sibling::*)" - then: [t: "ligne verticale"] # (en: 'vertical line', DeepL translation) + then: [T: "ligne verticale"] # (en: 'vertical line', DeepL translation) - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" - then: [t: "tel que"] # (en: 'such that', DeepL translation) + then: [T: "tel que"] # (en: 'such that', DeepL translation) - else_if: "$ClearSpeak_VerticalLine = 'Given' or $DefaultToGiven" - then: [t: "sachant"] # (en: 'given', DeepL translation) - - else: [t: "divise"] # (en: 'divides') + then: [T: "sachant"] # (en: 'given', DeepL translation) + - else: [T: "divise"] # (en: 'divides') - "}": # 0x7d - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [t: "accolade fermée"] # (en: 'close brace') - else: [t: "accolade droite"] # (en: 'right brace', MathPlayer: 'accolade fermante') + then: [T: "accolade fermée"] # (en: 'close brace') + else: [T: "accolade droite"] # (en: 'right brace', MathPlayer: 'accolade fermante') - - "~": [t: "tilde"] # 0x7e + - "~": [T: "tilde"] # 0x7e - " ": # 0xa0 - test: # could be mtext in mtd or mtext in an mrow that is a concatenation of mtd's. Is there a better solution? if: "@data-empty-in-2D and not(ancestor::*[self::m:piecewise or self::m:system-of-equations or self::m:lines])" - then: [t: "vide"] # want to say something for fraction (etc) with empty child (en: 'empty', DeepL translation) - else: [t: ""] + then: [T: "vide"] # want to say something for fraction (etc) with empty child (en: 'empty', DeepL translation) + else: [T: ""] - - "¬": [t: "non"] # 0xac (en: 'not') - - "°": [t: "degrés"] # 0xb0 (en: 'degrees') - - "±": [t: "plus ou moins"] # 0xb1 (en: 'plus or minus') - - "´": [t: "accent aigu"] # 0xb4 (en: 'acute') + - "¬": [T: "non"] # 0xac (en: 'not') + - "°": [T: "degrés"] # 0xb0 (en: 'degrees') + - "±": [T: "plus ou moins"] # 0xb1 (en: 'plus or minus') + - "´": [T: "accent aigu"] # 0xb4 (en: 'acute') - "·": # 0xB7 - test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')] or not($SpeechStyle = 'ClearSpeak' and $ClearSpeak_MultSymbolDot = 'Auto')" - then: [t: "point"] # (en: 'dot', DeepL translation) - else: [t: "fois"] # (en: 'times') + then: [T: "point"] # (en: 'dot', DeepL translation) + else: [T: "fois"] # (en: 'times') - "×": # 0xd7 - test: if: "$SpeechStyle = 'ClearSpeak'" then_test: - if: "$ClearSpeak_MultSymbolX = 'Auto'" - then: [t: "fois"] # (en: 'times', DeepL translation) + then: [T: "fois"] # (en: 'times', DeepL translation) - else_if: "$ClearSpeak_MultSymbolX = 'By'" - then: [t: "par"] # (en: 'by', DeepL translation) - else: [t: "multiplié par"] # (en: 'cross') + then: [T: "par"] # (en: 'by', DeepL translation) + else: [T: "multiplié par"] # (en: 'cross') else_test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" - then: [t: "croix"] # (en: 'cross', DeepL translation) - else: [t: "multiplié par"] # (en: 'times') + then: [T: "croix"] # (en: 'cross', DeepL translation) + else: [T: "multiplié par"] # (en: 'times') - - "÷": [t: "divisé par"] # 0xf7 (en: 'divided by') - - "̀": [t: "diacritique accent grave"] # 0x300 (en: 'grave accent embellishment', DeepL: 'accent grave embellissement') - - "́": [t: "diacritique accent aigu"] # 0x301 (en: 'acute accent embellishment', DeepL: 'accent aigu') - - "̂": [t: "diacritique accent circonflexe"] # 0x302 (en: 'circumflex accent embellishment', DeepL: 'accent circonflexe fioriture') - - "̃": [t: "diacritique tilde"] # 0x303 (en: 'tilde embellishment', DeepL: 'tilde embellissement') - - "̄": [t: "diacritique macron"] # 0x304 (en: 'macron embellishment', DeepL: 'emblème macron') - - "̅": [t: "diacritique tiret haut"] # 0x305 (en: 'overbar embellishment', DeepL: 'embellissement de la barre supérieure') - - "̆": [t: "diacritique brève"] # 0x306 (en: 'breve', DeepL: 'breve') - - "̇": [t: "diacritique point en chef"] # 0x307 (en: 'dot above embellishment', DeepL: 'point au-dessus de la fioriture') + - "÷": [T: "divisé par"] # 0xf7 (en: 'divided by') + - "̀": [T: "diacritique accent grave"] # 0x300 (en: 'grave accent embellishment', DeepL: 'accent grave embellissement') + - "́": [T: "diacritique accent aigu"] # 0x301 (en: 'acute accent embellishment', DeepL: 'accent aigu') + - "̂": [T: "diacritique accent circonflexe"] # 0x302 (en: 'circumflex accent embellishment', DeepL: 'accent circonflexe fioriture') + - "̃": [T: "diacritique tilde"] # 0x303 (en: 'tilde embellishment', DeepL: 'tilde embellissement') + - "̄": [T: "diacritique macron"] # 0x304 (en: 'macron embellishment', DeepL: 'emblème macron') + - "̅": [T: "diacritique tiret haut"] # 0x305 (en: 'overbar embellishment', DeepL: 'embellissement de la barre supérieure') + - "̆": [T: "diacritique brève"] # 0x306 (en: 'breve', DeepL: 'breve') + - "̇": [T: "diacritique point en chef"] # 0x307 (en: 'dot above embellishment', DeepL: 'point au-dessus de la fioriture') # Note: ClearSpeak has pref TriangleSymbol for "Δ", but that is wrong - "Α-Ω": @@ -229,50 +229,50 @@ - pitch: value: "$CapitalLetters_Pitch" # note: processing of ranges converts '.' into the character, so it needs to be in quotes below - replace: [spell: "translate('.', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ', 'αβγδεζηθικλμνξοπρςστυφχψω')"] + replace: [SPELL: "translate('.', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ', 'αβγδεζηθικλμνξοπρςστυφχψω')"] - test: if: "$CapitalLetters_UseWord" then_test: if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "majuscule"] # (en: 'cap', DeepL translation) + then: [T: "majuscule"] # (en: 'cap', DeepL translation) else: [x: "$SpeechOverrides_CapitalLetters"] - - "α": [t: "alpha"] # 0x3b1 - - "β": [t: "bêta"] # 0x3b2 (en: 'beta') - - "γ": [t: "gamma"] # 0x3b3 - - "δ": [t: "delta"] # 0x3b4 - - "ε": [t: "epsilon"] # 0x3b5 - - "ζ": [t: "zêta"] # 0x3b6 (en: 'zeta') - - "η": [t: "êta"] # 0x3b7 (en: 'eta', DeepL: 'eta') - - "θ": [t: "thêta"] # 0x3b8 (en: 'theta') - - "ι": [t: "iota"] # 0x3b9 - - "κ": [t: "kappa"] # 0x3ba - - "λ": [t: "lambda"] # 0x3bb - - "μ": [t: "mû"] # 0x3bc (en: 'mu', DeepL: 'mu') - - "ν": [t: "nû"] # 0x3bd (en: 'nu', DeepL: 'nu') - - "ξ": [t: "xi"] # 0x3be (en: 'zai', DeepL: 'zai') - - "ο": [t: "omicron"] # 0x3bf - - "π": [t: "pi"] # 0x3c0 - - "ρ": [t: "rhô"] # 0x3c1 - - "ς": [t: "sigma final"] # 0x3c2 (en: 'final sigma') - - "σ": [t: "sigma"] # 0x3c3 - - "τ": [t: "tau"] # 0x3c4 - - "υ": [t: "upsilon"] # 0x3c5 - - "φ": [t: "phi"] # 0x3c6 - - "χ": [t: "chi"] # 0x3c7 - - "ψ": [t: "psi"] # 0x3c8 - - "ω": [t: "oméga"] # 0x3c9 (en: 'omega') - - "ϕ": [t: "phi"] # 0x3d5 (en: 'phi', DeepL: 'phi') - - "ϖ": [t: "pi"] # 0x3d6 (en: 'pi', DeepL: 'pi') - - "ϵ": [t: "epsilon"] # 0x3f5 - - "϶": [t: "epsilon inversé"] # 0x3f6 (en: 'reversed epsilon') + - "α": [T: "alpha"] # 0x3b1 + - "β": [T: "bêta"] # 0x3b2 (en: 'beta') + - "γ": [T: "gamma"] # 0x3b3 + - "δ": [T: "delta"] # 0x3b4 + - "ε": [T: "epsilon"] # 0x3b5 + - "ζ": [T: "zêta"] # 0x3b6 (en: 'zeta') + - "η": [T: "êta"] # 0x3b7 (en: 'eta', DeepL: 'eta') + - "θ": [T: "thêta"] # 0x3b8 (en: 'theta') + - "ι": [T: "iota"] # 0x3b9 + - "κ": [T: "kappa"] # 0x3ba + - "λ": [T: "lambda"] # 0x3bb + - "μ": [T: "mû"] # 0x3bc (en: 'mu', DeepL: 'mu') + - "ν": [T: "nû"] # 0x3bd (en: 'nu', DeepL: 'nu') + - "ξ": [T: "xi"] # 0x3be (en: 'zai', DeepL: 'zai') + - "ο": [T: "omicron"] # 0x3bf + - "π": [T: "pi"] # 0x3c0 + - "ρ": [T: "rhô"] # 0x3c1 + - "ς": [T: "sigma final"] # 0x3c2 (en: 'final sigma') + - "σ": [T: "sigma"] # 0x3c3 + - "τ": [T: "tau"] # 0x3c4 + - "υ": [T: "upsilon"] # 0x3c5 + - "φ": [T: "phi"] # 0x3c6 + - "χ": [T: "chi"] # 0x3c7 + - "ψ": [T: "psi"] # 0x3c8 + - "ω": [T: "oméga"] # 0x3c9 (en: 'omega') + - "ϕ": [T: "phi"] # 0x3d5 (en: 'phi', DeepL: 'phi') + - "ϖ": [T: "pi"] # 0x3d6 (en: 'pi', DeepL: 'pi') + - "ϵ": [T: "epsilon"] # 0x3f5 + - "϶": [T: "epsilon inversé"] # 0x3f6 (en: 'reversed epsilon') - - "–": [t: "tirait demi-cadratin"] # 0x2013 (en: 'en dash') - - "—": [t: "tiret cadratin"] # 0x2014 (en: 'em dash') - - "―": [t: "barre horizontalle"] # 0x2015 (en: 'horizontal bar') - - "‖": [t: "double ligne verticale"] # 0x2016 (en: 'double vertical line') + - "–": [T: "tirait demi-cadratin"] # 0x2013 (en: 'en dash') + - "—": [T: "tiret cadratin"] # 0x2014 (en: 'em dash') + - "―": [T: "barre horizontalle"] # 0x2015 (en: 'horizontal bar') + - "‖": [T: "double ligne verticale"] # 0x2016 (en: 'double vertical line') - "…": # 0x2026 test: if: @@ -280,11 +280,11 @@ # must be ClearSpeak and $ClearSpeak_Ellipses = 'AndSoOn' # speak '…' as 'and so on...' unless expr starts with '…' - "../*[1][.='…']" - then: [t: "point point point"] # (en: 'dot dot dot', DeepL translation) + then: [T: "point point point"] # (en: 'dot dot dot', DeepL translation) else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' if: "count(following-sibling::*) = 0" - then: [t: "et ainsi de suite"] # (en: 'and so on', DeepL translation) - else: [t: "points de suspension"] # (en: 'and so on up to') + then: [T: "et ainsi de suite"] # (en: 'and so on', DeepL translation) + else: [T: "points de suspension"] # (en: 'and so on up to') - "⁡": # 0x2061 - test: @@ -298,86 +298,86 @@ preceding-sibling::*[1][IsInDefinition(., 'GeometryShapes')] or (@data-changed='added' and ancestor-or-self::*[contains(@data-intent-property, ':literal:')]) )" - then: [t: "de"] # (en: 'of', DeepL translation) - - "⁢": [t: ""] # 0x2062 - - "⁣": [t: ""] # 0x2063 - - "⁤": [t: "et"] # 0x2064 (en: 'and', DeepL: 'et') - - "′": [t: "prime"] # 0x2032 - - "″": [t: "double prime"] # 0x2033 - - "‴": [t: "triple prime"] # 0x2034 + then: [T: "de"] # (en: 'of', DeepL translation) + - "⁢": [T: ""] # 0x2062 + - "⁣": [T: ""] # 0x2063 + - "⁤": [T: "et"] # 0x2064 (en: 'and', DeepL: 'et') + - "′": [T: "prime"] # 0x2032 + - "″": [T: "double prime"] # 0x2033 + - "‴": [T: "triple prime"] # 0x2034 - "ℂℕℚℝℤ": # here we rely on this running through the table again to speak "cap xxx" - - t: "triple prime" # (en: 'double-struck') - - spell: "translate('.', 'ℂℕℚℝℤ', 'CNQRZ')" + - T: "triple prime" # (en: 'double-struck') + - SPELL: "translate('.', 'ℂℕℚℝℤ', 'CNQRZ')" - - "℃": [t: "degré celsius"] # 0x2103 (en: 'degrees celsius', DeepL: 'degrés celsius') - - "℉": [t: "degré fahrenheit"] # 0x2109 (en: 'degrees fahrenheit', DeepL: 'degrés fahrenheit') + - "℃": [T: "degré celsius"] # 0x2103 (en: 'degrees celsius', DeepL: 'degrés celsius') + - "℉": [T: "degré fahrenheit"] # 0x2109 (en: 'degrees fahrenheit', DeepL: 'degrés fahrenheit') - "ℋℛℓ": # 0x210b - - t: "script" # (en: 'script', DeepL: 'script') - - spell: "translate('.', 'ℋℛℓ', 'HRl')" - - "ℎ": [t: "constante de planck"] # 0x210e (en: 'planck constant') + - T: "script" # (en: 'script', DeepL: 'script') + - SPELL: "translate('.', 'ℋℛℓ', 'HRl')" + - "ℎ": [T: "constante de planck"] # 0x210e (en: 'planck constant') - "ℜ": # 0x211c - - t: "r gothique majuscule" # (en: 'fraktur', DeepL: 'fraktur') - - spell: "'R'" + - T: "r gothique majuscule" # (en: 'fraktur', DeepL: 'fraktur') + - SPELL: "'R'" - - "Ω": [t: "ohm"] # 0x2126 (en: 'ohms') - - "K": [t: "degré kelvin"] # 0x212a (en: 'kelvin') - - "Å": [t: "angstroms"] # 0x212b + - "Ω": [T: "ohm"] # 0x2126 (en: 'ohms') + - "K": [T: "degré kelvin"] # 0x212a (en: 'kelvin') + - "Å": [T: "angstroms"] # 0x212b - "ⅆⅇⅈⅉ": # 0x2146-9 - - t: "angstroms" # (en: 'double-struck italic') - - spell: "translate('.', 'ⅆⅇⅈⅉ', 'deij')" + - T: "angstroms" # (en: 'double-struck italic') + - SPELL: "translate('.', 'ⅆⅇⅈⅉ', 'deij')" - - "←": [t: "flèche vers la gauche"] # 0x2190 (en: 'leftwards arrow', SRE: 'flèche gauche') - - "↑": [t: "flèche vers le haut"] # 0x2191 (en: 'upwards arrow') + - "←": [T: "flèche vers la gauche"] # 0x2190 (en: 'leftwards arrow', SRE: 'flèche gauche') + - "↑": [T: "flèche vers le haut"] # 0x2191 (en: 'upwards arrow') - "→": # 0x2192 - test: if: "ancestor::*[2][self::m:limit]" - then: [t: "approche"] # (en: 'approaches', DeepL translation) - else: [t: "flèche vers la droite"] # (en: 'right arrow', MathPlayer: 'flèche vers la droite') + then: [T: "approche"] # (en: 'approaches', DeepL translation) + else: [T: "flèche vers la droite"] # (en: 'right arrow', MathPlayer: 'flèche vers la droite') - - "↓": [t: "flèche vers le bas"] # 0x2193 (en: 'downwards arrow') - - "⇒": [t: "double flèche vers la droite"] # 0x21d2 (en: 'rightwards double arrow', SRE: 'double flèche droite') - - "∀": [t: "pour tous"] # 0x2200 (en: 'for all') + - "↓": [T: "flèche vers le bas"] # 0x2193 (en: 'downwards arrow') + - "⇒": [T: "double flèche vers la droite"] # 0x21d2 (en: 'rightwards double arrow', SRE: 'double flèche droite') + - "∀": [T: "pour tous"] # 0x2200 (en: 'for all') - "∂": # 0x2202 - test: if: "$Verbosity='Terse'" - then: [t: "partiel"] # (en: 'partial', DeepL translation) - else: [t: "dérivée partielle"] # (en: 'partial derivative') - - "∃": [t: "il existe"] # 0x2203 (en: 'there exists') - - "∄": [t: "il n'existe pas"] # 0x2204 (en: 'there does not exist') - - "∅": [t: "ensemble vide"] # 0x2205 (en: 'empty set') + then: [T: "partiel"] # (en: 'partial', DeepL translation) + else: [T: "dérivée partielle"] # (en: 'partial derivative') + - "∃": [T: "il existe"] # 0x2203 (en: 'there exists') + - "∄": [T: "il n'existe pas"] # 0x2204 (en: 'there does not exist') + - "∅": [T: "ensemble vide"] # 0x2205 (en: 'empty set') - "∆": # 0x2206 - test: if: "$Verbosity!='Terse'" - then: [t: "le"] # (en: 'the', DeepL translation) - - t: "laplacien de" # (en: 'laplacian of') + then: [T: "le"] # (en: 'the', DeepL translation) + - T: "laplacien de" # (en: 'laplacian of') - "∈": # 0x2208 - test: if: "$SpeechStyle != 'ClearSpeak'" then: - test: if: "$Verbosity!='Terse' and not(ancestor::*[self::m:set])" # "the set x is an element of ..." sounds bad" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "un élément de" # (en: 'an element of') + then: [T: "est"] # (en: 'is', DeepL translation) + - T: "un élément de" # (en: 'an element of') # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option else_test: if: "../../self::m:set or ../../../self::m:set" # inside a set then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "en"] # (en: 'in', DeepL translation) + then: [T: "en"] # (en: 'in', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "membre de"] # (en: 'member of', DeepL translation) + then: [T: "membre de"] # (en: 'member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "élément de"] # (en: 'element of', DeepL translation) - - else: [t: "appartient à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to') + then: [T: "élément de"] # (en: 'element of', DeepL translation) + - else: [T: "appartient à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to') else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "est membre de"] # (en: 'is a member of', DeepL translation) + then: [T: "est membre de"] # (en: 'is a member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "est un élément de"] # (en: 'is an element of', DeepL translation) + then: [T: "est un élément de"] # (en: 'is an element of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "est dans"] # (en: 'is in', DeepL translation) - - else: [t: "appartient à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to') + then: [T: "est dans"] # (en: 'is in', DeepL translation) + - else: [T: "appartient à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to') - "∉": # 0x2209 # rule is identical to 0x2208 - test: @@ -385,164 +385,164 @@ then: # - test: # if: "$Verbosity!='Terse'" - # then: [t: "est"] # (en: 'is', DeepL translation) - - t: "n'appartient pas à" # (en: 'not an element of') + # then: [T: "est"] # (en: 'is', DeepL translation) + - T: "n'appartient pas à" # (en: 'not an element of') # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option else_test: if: "../../self::m:set or ../../../self::m:set" # inside a set then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "pas dans"] # (en: 'not in', DeepL translation) + then: [T: "pas dans"] # (en: 'not in', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "n'est pas membre de"] # (en: 'not member of', DeepL translation) + then: [T: "n'est pas membre de"] # (en: 'not member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "n'est pas un élément de"] # (en: 'not element of', DeepL translation) - - else: [t: "n'appartient pas à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to') + then: [T: "n'est pas un élément de"] # (en: 'not element of', DeepL translation) + - else: [T: "n'appartient pas à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to') else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "n'est pas membre de"] # (en: 'is not a member of', DeepL translation) + then: [T: "n'est pas membre de"] # (en: 'is not a member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "n'est pas un élément de"] # (en: 'is not an element of', DeepL translation) + then: [T: "n'est pas un élément de"] # (en: 'is not an element of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "n'est pas dans"] # (en: 'is not in', DeepL translation) - - else: [t: "n'appartient pas à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'does not belong to') + then: [T: "n'est pas dans"] # (en: 'is not in', DeepL translation) + - else: [T: "n'appartient pas à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'does not belong to') - "∊": # 0x220a - test: if: "$SpeechStyle != 'ClearSpeak'" then: - test: if: "$Verbosity!='Terse' and not(ancestor::*[self::m:set])" # "the set x is an element of ..." sounds bad" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "appartient à" # (en: 'an element of') + then: [T: "est"] # (en: 'is', DeepL translation) + - T: "appartient à" # (en: 'an element of') # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option else_test: if: "../../self::m:set or ../../../self::m:set" # inside a set then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "en"] # (en: 'in', DeepL translation) + then: [T: "en"] # (en: 'in', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "membre de"] # (en: 'member of', DeepL translation) + then: [T: "membre de"] # (en: 'member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "élément de"] # (en: 'element of', DeepL translation) - - else: [t: "appartient à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to') + then: [T: "élément de"] # (en: 'element of', DeepL translation) + - else: [T: "appartient à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to') else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "est membre de"] # (en: 'is a member of', DeepL translation) + then: [T: "est membre de"] # (en: 'is a member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "est un élément de"] # (en: 'is an element of', DeepL translation) + then: [T: "est un élément de"] # (en: 'is an element of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "est dans"] # (en: 'is in', DeepL translation) - - else: [t: "appartient à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to') - - "∏": [t: "produit"] # 0x220f (en: 'product') - - "∐": [t: "coproduit"] # 0x2210 (en: 'co-product') - - "∑": [t: "sommation"] # 0x2211 (en: 'sum') - - "−": [t: "moins"] # 0x2212 (en: 'minus') - - "∓": [t: "moins ou plus"] # 0x2213 (en: 'minus or plus', MathPlayer: 'moins-ou-plus') - - "∗": [t: "fois"] # 0x2217 (en: 'times') - - "∘": [t: "composé avec"] # 0x2218 (en: 'composed with') + then: [T: "est dans"] # (en: 'is in', DeepL translation) + - else: [T: "appartient à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to') + - "∏": [T: "produit"] # 0x220f (en: 'product') + - "∐": [T: "coproduit"] # 0x2210 (en: 'co-product') + - "∑": [T: "sommation"] # 0x2211 (en: 'sum') + - "−": [T: "moins"] # 0x2212 (en: 'minus') + - "∓": [T: "moins ou plus"] # 0x2213 (en: 'minus or plus', MathPlayer: 'moins-ou-plus') + - "∗": [T: "fois"] # 0x2217 (en: 'times') + - "∘": [T: "composé avec"] # 0x2218 (en: 'composed with') - "√": # 0x221a - test: if: "$Verbosity!='Terse'" - then: [t: "la"] # (en: 'the', DeepL translation) - - t: "racine carrée" # (en: 'square root of') + then: [T: "la"] # (en: 'the', DeepL translation) + - T: "racine carrée" # (en: 'square root of') - "∝": # 0x221d - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "proportionnel à" # (en: 'proportional to') - - "∞": [t: "infini"] # 0x221e (en: 'infinity') - - "∟": [t: "angle droit"] # 0x221f (en: 'right angle') - - "∠": [t: "angle"] # 0x2220 - - "∡": [t: "angle mesuré"] # 0x2221 (en: 'measured angle') - - "∣": [t: "est un diviseur de"] # 0x2223 (en: 'divides') - - "∤": [t: "n'est pas un diviseur de"] # 0x2224 (en: 'does not divide') + then: [T: "est"] # (en: 'is', DeepL translation) + - T: "proportionnel à" # (en: 'proportional to') + - "∞": [T: "infini"] # 0x221e (en: 'infinity') + - "∟": [T: "angle droit"] # 0x221f (en: 'right angle') + - "∠": [T: "angle"] # 0x2220 + - "∡": [T: "angle mesuré"] # 0x2221 (en: 'measured angle') + - "∣": [T: "est un diviseur de"] # 0x2223 (en: 'divides') + - "∤": [T: "n'est pas un diviseur de"] # 0x2224 (en: 'does not divide') - "∥": # 0x2225 - test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" - then: [t: "double ligne verticale"] # (en: 'double vertical line', DeepL translation) + then: [T: "double ligne verticale"] # (en: 'double vertical line', DeepL translation) else: - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "parallèle à" # (en: 'parallel to') + then: [T: "est"] # (en: 'is', DeepL translation) + - T: "parallèle à" # (en: 'parallel to') - "∦": # 0x2226 - test: if: "$Verbosity!='Terse'" - then: [t: "n'est"] # (en: 'is', DeepL translation) - - t: "pas parallèle à" # (en: 'not parallel to') - - "∧": [t: "et logique"] # 0x2227 (en: 'and') - - "∨": [t: "ou logique"] # 0x2228 (en: 'or') - - "∩": [t: "intersection"] # 0x2229 - - "∪": [t: "\uF8FEunion"] # 0x222a - - "∫": [t: "\uF8FEintégrale"] # 0x222b (en: 'integral') - - "∬": [t: "\uF8FEintégrale double"] # 0x222c (en: 'double integral') - - "∭": [t: "\uF8FEintégrale triple"] # 0x222d (en: 'triple integral') - - "∮": [t: "\uF8FEintégrale de contour"] # 0x222e (en: 'contour integral') + then: [T: "n'est"] # (en: 'is', DeepL translation) + - T: "pas parallèle à" # (en: 'not parallel to') + - "∧": [T: "et logique"] # 0x2227 (en: 'and') + - "∨": [T: "ou logique"] # 0x2228 (en: 'or') + - "∩": [T: "intersection"] # 0x2229 + - "∪": [T: "\uF8FEunion"] # 0x222a + - "∫": [T: "\uF8FEintégrale"] # 0x222b (en: 'integral') + - "∬": [T: "\uF8FEintégrale double"] # 0x222c (en: 'double integral') + - "∭": [T: "\uF8FEintégrale triple"] # 0x222d (en: 'triple integral') + - "∮": [T: "\uF8FEintégrale de contour"] # 0x222e (en: 'contour integral') - "∶": # 0x2236 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "rapport" # (en: 'to') - - "∷": [t: "proportion"] # 0x2237 (en: 'as') - - "∼": [t: "varie avec"] # 0x223c (en: 'varies with') - - "∽": [t: "tilde renversé"] # 0x223d (en: 'reversed tilde') + then: [T: "est"] # (en: 'is', DeepL translation) + - T: "rapport" # (en: 'to') + - "∷": [T: "proportion"] # 0x2237 (en: 'as') + - "∼": [T: "varie avec"] # 0x223c (en: 'varies with') + - "∽": [T: "tilde renversé"] # 0x223d (en: 'reversed tilde') - "∾": # 0x223e - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "s couché renversé" # (en: 'most positive') - - "∿": [t: "sinusoïde"] # 0x223f (en: 'sine wave') + then: [T: "est"] # (en: 'is', DeepL translation) + - T: "s couché renversé" # (en: 'most positive') + - "∿": [T: "sinusoïde"] # 0x223f (en: 'sine wave') - "≠": # 0x2260 - test: if: "$Verbosity!='Terse'" - then: [t: "n'est"] # (en: 'is', DeepL translation) - - t: "pas égal à" # (en: 'not equal to') + then: [T: "n'est"] # (en: 'is', DeepL translation) + - T: "pas égal à" # (en: 'not equal to') - "≡": # 0x2261 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "identique à" # (en: 'identical to') + then: [T: "est"] # (en: 'is', DeepL translation) + - T: "identique à" # (en: 'identical to') - "≤": # 0x2264 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "plus petit ou égal à" # (en: 'less than or equal to') + then: [T: "est"] # (en: 'is', DeepL translation) + - T: "plus petit ou égal à" # (en: 'less than or equal to') - "≥": # 0x2265 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "plus grand ou égal à" # (en: 'greater than or equal to') - - "≦": [t: "plus petit que par-dessus égal à"] # 0x2266 (en: 'less than over equal to', MathPlayer: 'plus petit que par-dessus égal à', DeepL: 'inférieur à supérieur à égal à') - - "≧": [t: "plus grand que par-dessus égal à"] # 0x2267 (en: 'greater than over equal to', MathPlayer: 'plus grand que par-dessus égal à', DeepL: 'supérieur à égal à') - - "≺": [t: "précède"] # 0x227a (en: 'precedes') - - "≻": [t: "suit"] # 0x227b (en: 'succeeds') + then: [T: "est"] # (en: 'is', DeepL translation) + - T: "plus grand ou égal à" # (en: 'greater than or equal to') + - "≦": [T: "plus petit que par-dessus égal à"] # 0x2266 (en: 'less than over equal to', MathPlayer: 'plus petit que par-dessus égal à', DeepL: 'inférieur à supérieur à égal à') + - "≧": [T: "plus grand que par-dessus égal à"] # 0x2267 (en: 'greater than over equal to', MathPlayer: 'plus grand que par-dessus égal à', DeepL: 'supérieur à égal à') + - "≺": [T: "précède"] # 0x227a (en: 'precedes') + - "≻": [T: "suit"] # 0x227b (en: 'succeeds') - "⊂": # 0x2282 - test: if: "$Verbosity!='Terse'" - then: [t: "est un"] # (en: 'is a', DeepL translation) - - t: "sous-ensemble de" # (en: 'subset of', SRE: 'sous ensemble de') + then: [T: "est un"] # (en: 'is a', DeepL translation) + - T: "sous-ensemble de" # (en: 'subset of', SRE: 'sous ensemble de') - "⊃": # 0x2283 - test: if: "$Verbosity!='Terse'" - then: [t: "est un"] # (en: 'is a', DeepL translation) - - t: "sur-ensemble de" # (en: 'superset of', SRE: 'sur ensemble de') + then: [T: "est un"] # (en: 'is a', DeepL translation) + - T: "sur-ensemble de" # (en: 'superset of', SRE: 'sur ensemble de') - "⊄": # 0x2284 - test: if: "$Verbosity!='Terse'" - then: [t: "n'est"] # (en: 'is', DeepL translation) - - t: "pas un sous-ensemble de" # (en: 'not a subset of', SRE: 'pas un sous ensemble de') + then: [T: "n'est"] # (en: 'is', DeepL translation) + - T: "pas un sous-ensemble de" # (en: 'not a subset of', SRE: 'pas un sous ensemble de') - "⊅": # 0x2285 - test: if: "$Verbosity!='Terse'" - then: [t: "n'est"] # (en: 'is', DeepL translation) - - t: "pas un sur ensemble de" # (en: 'not a superset of', MathPlayer: 'pas un sur-ensemble de', DeepL: 'n'est pas un super-ensemble de') + then: [T: "n'est"] # (en: 'is', DeepL translation) + - T: "pas un sur ensemble de" # (en: 'not a superset of', MathPlayer: 'pas un sur-ensemble de', DeepL: 'n'est pas un super-ensemble de') - "⊆": # 0x2286 - test: if: "$Verbosity!='Terse'" - then: [t: "est un"] # (en: 'is a', DeepL translation) - - t: "sous ensemble ou égal à" # (en: 'subset of or equal to', MathPlayer: 'sous-ensemble ou égal à', DeepL: 'sous-ensemble de ou égal à') + then: [T: "est un"] # (en: 'is a', DeepL translation) + - T: "sous ensemble ou égal à" # (en: 'subset of or equal to', MathPlayer: 'sous-ensemble ou égal à', DeepL: 'sous-ensemble de ou égal à') - "⊇": # 0x2287 - test: if: "$Verbosity!='Terse'" - then: [t: "est un"] # (en: 'is a', DeepL translation) - - t: "sur ensemble ou égal à" # (en: 'superset of or equal to', MathPlayer: 'sur-ensemble ou égal à', DeepL: 'sur-ensemble de ou égal à') + then: [T: "est un"] # (en: 'is a', DeepL translation) + - T: "sur ensemble ou égal à" # (en: 'superset of or equal to', MathPlayer: 'sur-ensemble ou égal à', DeepL: 'sur-ensemble de ou égal à') From b268810cb5f487c546320549f3bdc376c0cd464b Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Thu, 4 Jun 2026 14:29:06 -0400 Subject: [PATCH 31/53] removed AI generated comments --- tests/Languages/fr/SimpleSpeak/functions.rs | 68 ++++++++++----------- tests/Languages/fr/shared.rs | 68 ++++++++++----------- 2 files changed, 68 insertions(+), 68 deletions(-) diff --git a/tests/Languages/fr/SimpleSpeak/functions.rs b/tests/Languages/fr/SimpleSpeak/functions.rs index 7e816f2c6..ca403f898 100644 --- a/tests/Languages/fr/SimpleSpeak/functions.rs +++ b/tests/Languages/fr/SimpleSpeak/functions.rs @@ -6,7 +6,7 @@ use crate::common::*; use anyhow::Result; -// AI generated + #[test] fn trig_names() -> Result<()> { let expr = " @@ -21,7 +21,7 @@ fn trig_names() -> Result<()> { Ok(()) } -// AI generated + #[test] fn hyperbolic_trig_names() -> Result<()> { let expr = " @@ -37,7 +37,7 @@ fn hyperbolic_trig_names() -> Result<()> { } -// AI generated + #[test] fn inverse_trig() -> Result<()> { let expr = "sin-1x"; @@ -45,7 +45,7 @@ fn inverse_trig() -> Result<()> { Ok(()) } -// AI generated + #[test] fn trig_squared() -> Result<()> { let expr = "sin2x"; @@ -53,7 +53,7 @@ fn trig_squared() -> Result<()> { Ok(()) } -// AI generated + #[test] fn trig_cubed() -> Result<()> { let expr = "tan3x"; @@ -61,7 +61,7 @@ fn trig_cubed() -> Result<()> { Ok(()) } -// AI generated + #[test] fn trig_fourth() -> Result<()> { let expr = "sec4x"; @@ -70,7 +70,7 @@ fn trig_fourth() -> Result<()> { } -// AI generated + #[test] fn trig_power_other() -> Result<()> { let expr = "sinh>n-1x"; @@ -78,7 +78,7 @@ fn trig_power_other() -> Result<()> { Ok(()) } -// AI generated + #[test] fn simple_log() -> Result<()> { let expr = " logx "; @@ -86,7 +86,7 @@ fn simple_log() -> Result<()> { Ok(()) } -// AI generated + #[test] fn normal_log() -> Result<()> { let expr = "log(x+y)"; @@ -94,7 +94,7 @@ fn normal_log() -> Result<()> { Ok(()) } -// AI generated + #[test] fn simple_log_with_base() -> Result<()> { let expr = " logbx "; @@ -102,7 +102,7 @@ fn simple_log_with_base() -> Result<()> { Ok(()) } -// AI generated + #[test] fn normal_log_with_base() -> Result<()> { let expr = "logb(x+y)"; @@ -110,7 +110,7 @@ fn normal_log_with_base() -> Result<()> { Ok(()) } -// AI generated + #[test] fn normal_ln() -> Result<()> { let expr = "ln(x+y)"; @@ -120,7 +120,7 @@ fn normal_ln() -> Result<()> { Ok(()) } -// AI generated + #[test] fn simple_ln() -> Result<()> { let expr = " lnx "; @@ -130,7 +130,7 @@ fn simple_ln() -> Result<()> { Ok(()) } -// AI generated + #[test] fn other_names() -> Result<()> { let expr = " Covx "; @@ -142,7 +142,7 @@ fn other_names() -> Result<()> { Ok(()) } -// AI generated + #[test] fn explicit_function_call_with_parens() -> Result<()> { let expr = "t(x)"; @@ -151,7 +151,7 @@ fn explicit_function_call_with_parens() -> Result<()> { } -// AI generated + #[test] fn explicit_times_with_parens() -> Result<()> { let expr = "t(x)"; @@ -159,7 +159,7 @@ fn explicit_times_with_parens() -> Result<()> { Ok(()) } -// AI generated + #[test] fn explicit_function_call() -> Result<()> { let expr = "tx"; @@ -167,7 +167,7 @@ fn explicit_function_call() -> Result<()> { Ok(()) } -// AI generated + #[test] fn explicit_times() -> Result<()> { let expr = "tx"; @@ -179,7 +179,7 @@ fn explicit_times() -> Result<()> { /* * Tests for times */ -// AI generated + #[test] fn no_times_binomial() -> Result<()> { let expr = "x y"; @@ -187,7 +187,7 @@ fn no_times_binomial() -> Result<()> { Ok(()) } -// AI generated + #[test] fn times_following_paren() -> Result<()> { let expr = " @@ -198,7 +198,7 @@ fn times_following_paren() -> Result<()> { Ok(()) } -// AI generated + #[test] fn times_preceding_paren() -> Result<()> { let expr = " @@ -209,7 +209,7 @@ fn times_preceding_paren() -> Result<()> { Ok(()) } -// AI generated + #[test] fn no_times_sqrt() -> Result<()> { let expr = " @@ -226,7 +226,7 @@ fn no_times_sqrt() -> Result<()> { /* * Tests for parens */ - // AI generated + #[test] fn no_parens_number() -> Result<()> { let expr = " @@ -239,7 +239,7 @@ fn no_times_sqrt() -> Result<()> { Ok(()) } - // AI generated + #[test] fn no_parens_monomial() -> Result<()> { let expr = " @@ -252,7 +252,7 @@ fn no_times_sqrt() -> Result<()> { Ok(()) } - // AI generated + #[test] fn no_parens_negative_number() -> Result<()> { let expr = " @@ -266,7 +266,7 @@ fn no_times_sqrt() -> Result<()> { } - // AI generated + #[test] fn no_parens_negative_number_with_var() -> Result<()> { let expr = " @@ -279,7 +279,7 @@ fn no_times_sqrt() -> Result<()> { Ok(()) } - // AI generated + #[test] fn parens_superscript() -> Result<()> { let expr = " @@ -297,7 +297,7 @@ fn no_times_sqrt() -> Result<()> { Ok(()) } - // AI generated + #[test] fn no_parens_fraction() -> Result<()> { let expr = " @@ -313,7 +313,7 @@ fn no_times_sqrt() -> Result<()> { } // Tests for the four types of intervals in SimpleSpeak - // AI generated + #[test] fn parens_interval_open_open() -> Result<()> { let expr = " @@ -326,7 +326,7 @@ fn no_times_sqrt() -> Result<()> { } -// AI generated + #[test] fn parens_interval_closed_open() -> Result<()> { let expr = " @@ -339,7 +339,7 @@ fn no_times_sqrt() -> Result<()> { } -// AI generated + #[test] fn parens_interval_open_closed() -> Result<()> { let expr = " @@ -352,7 +352,7 @@ fn parens_interval_open_closed() -> Result<()> { } -// AI generated + #[test] fn parens_interval_closed_closed() -> Result<()> { let expr = " @@ -364,7 +364,7 @@ fn parens_interval_closed_closed() -> Result<()> { Ok(()) } - // AI generated + #[test] fn parens_interval_neg_infinity_open_open() -> Result<()> { let expr = " @@ -376,7 +376,7 @@ fn parens_interval_closed_closed() -> Result<()> { Ok(()) } - // AI generated + #[test] fn parens_interval_neg_infinity_open_closed() -> Result<()> { let expr = " diff --git a/tests/Languages/fr/shared.rs b/tests/Languages/fr/shared.rs index 204c00494..b63588b52 100644 --- a/tests/Languages/fr/shared.rs +++ b/tests/Languages/fr/shared.rs @@ -3,7 +3,7 @@ use crate::common::*; use anyhow::Result; -// AI generated + #[test] fn modified_vars() -> Result<()> { let expr = " @@ -25,7 +25,7 @@ fn modified_vars() -> Result<()> { Ok(()) } -// AI generated + #[test] fn limit() -> Result<()> { let expr = " @@ -45,7 +45,7 @@ fn limit() -> Result<()> { Ok(()) } -// AI generated + #[test] fn limit_from_below() -> Result<()> { let expr = " @@ -62,7 +62,7 @@ fn limit_from_below() -> Result<()> { } -// AI generated + #[test] fn binomial_mmultiscripts() -> Result<()> { let expr = "Cmn"; @@ -70,7 +70,7 @@ fn binomial_mmultiscripts() -> Result<()> { Ok(()) } -// AI generated + #[test] fn binomial_mmultiscripts_other() -> Result<()> { let expr = "Cmn"; @@ -78,7 +78,7 @@ fn binomial_mmultiscripts_other() -> Result<()> { Ok(()) } -// AI generated + #[test] fn binomial_subscript() -> Result<()> { // C_{n,k} let expr = "Cn,m"; @@ -86,7 +86,7 @@ fn binomial_subscript() -> Result<()> { // C_{n,k} Ok(()) } -// AI generated + #[test] fn permutation_mmultiscripts() -> Result<()> { let expr = "Pkn"; @@ -94,7 +94,7 @@ fn permutation_mmultiscripts() -> Result<()> { Ok(()) } -// AI generated + #[test] fn permutation_mmultiscripts_sup() -> Result<()> { let expr = "Pkn"; @@ -102,7 +102,7 @@ fn permutation_mmultiscripts_sup() -> Result<()> { Ok(()) } -// AI generated + #[test] fn permutation_msubsup() -> Result<()> { let expr = "Pkn"; @@ -110,7 +110,7 @@ fn permutation_msubsup() -> Result<()> { Ok(()) } -// AI generated + #[test] fn tensor_mmultiscripts() -> Result<()> { let expr = " @@ -121,7 +121,7 @@ fn tensor_mmultiscripts() -> Result<()> { Ok(()) } -// AI generated + #[test] fn huge_num_mmultiscripts() -> Result<()> { let expr = " @@ -133,7 +133,7 @@ fn huge_num_mmultiscripts() -> Result<()> { Ok(()) } -// AI generated + #[test] fn prime() -> Result<()> { let expr = " x "; @@ -141,7 +141,7 @@ fn prime() -> Result<()> { Ok(()) } -// AI generated + #[test] fn given() -> Result<()> { let expr = "P(A|B)"; @@ -150,7 +150,7 @@ fn given() -> Result<()> { Ok(()) } -// AI generated + #[test] fn simple_msubsup() -> Result<()> { let expr = " @@ -170,7 +170,7 @@ fn simple_msubsup() -> Result<()> { Ok(()) } -// AI generated + #[test] fn non_simple_msubsup() -> Result<()> { let expr = "ij2k"; @@ -180,7 +180,7 @@ fn non_simple_msubsup() -> Result<()> { Ok(()) } -// AI generated + #[test] fn presentation_mathml_in_semantics() -> Result<()> { let expr = " @@ -203,7 +203,7 @@ fn presentation_mathml_in_semantics() -> Result<()> { Ok(()) } -// AI generated + #[test] fn ignore_period() -> Result<()> { // from https://en.wikipedia.org/wiki/Probability @@ -250,7 +250,7 @@ fn ignore_period() -> Result<()> { Ok(()) } -// AI generated + #[test] fn ignore_mtext_period() -> Result<()> { let expr = "{2}."; @@ -258,7 +258,7 @@ fn ignore_mtext_period() -> Result<()> { Ok(()) } -// AI generated + #[test] fn ignore_comma() -> Result<()> { // from https://en.wikipedia.org/wiki/Probability @@ -297,7 +297,7 @@ fn ignore_comma() -> Result<()> { Ok(()) } -// AI generated + #[test] #[ignore] // issue #14 fn ignore_period_and_space() -> Result<()> { @@ -340,7 +340,7 @@ fn ignore_period_and_space() -> Result<()> { } -// AI generated + #[test] fn bug_199_2pi() -> Result<()> { let expr = " @@ -361,7 +361,7 @@ fn bug_199_2pi() -> Result<()> { Ok(()) } -// AI generated + #[test] fn caret_and_hat() -> Result<()> { let expr = "x^2+y^"; @@ -369,7 +369,7 @@ fn caret_and_hat() -> Result<()> { Ok(()) } -// AI generated + #[test] fn mn_with_space() -> Result<()> { let expr = "1 234 567"; @@ -377,7 +377,7 @@ fn mn_with_space() -> Result<()> { Ok(()) } -// AI generated + #[test] fn ignore_bold() -> Result<()> { let expr = r#" @@ -397,7 +397,7 @@ fn ignore_bold() -> Result<()> { Ok(()) } -// AI generated + #[test] fn mn_with_block_and_decimal_separators() -> Result<()> { let expr = "1,234.56"; // may want to change this for another language @@ -405,7 +405,7 @@ fn mn_with_block_and_decimal_separators() -> Result<()> { Ok(()) } -// AI generated + #[test] fn divergence() -> Result<()> { let expr = "·F"; // may want to change this for another language @@ -414,7 +414,7 @@ fn divergence() -> Result<()> { Ok(()) } -// AI generated + #[test] fn curl() -> Result<()> { let expr = "×F"; @@ -424,7 +424,7 @@ fn curl() -> Result<()> { Ok(()) } -// AI generated + #[test] fn gradient() -> Result<()> { let expr = "F"; @@ -434,7 +434,7 @@ fn gradient() -> Result<()> { Ok(()) } -// AI generated + #[test] fn literal_speak_perpendicular() -> Result<()> { let expr = r#" @@ -454,7 +454,7 @@ fn literal_speak_perpendicular() -> Result<()> { Ok(()) } -// AI generated + #[test] fn literal_speak_chars() -> Result<()> { let expr = r#" @@ -474,7 +474,7 @@ fn literal_speak_chars() -> Result<()> { Ok(()) } -// AI generated + #[test] fn literal_speak_with_name() -> Result<()> { let expr = r#" @@ -495,7 +495,7 @@ fn literal_speak_with_name() -> Result<()> { Ok(()) } -// AI generated + #[test] fn literal_speak_with_property() -> Result<()> { let expr = r#" @@ -516,7 +516,7 @@ fn literal_speak_with_property() -> Result<()> { Ok(()) } -// AI generated + #[test] fn literal_intent_property() -> Result<()> { let expr = r#" @@ -536,7 +536,7 @@ fn literal_intent_property() -> Result<()> { Ok(()) } -// AI generated + #[test] fn literal_intent_property_with_name() -> Result<()> { let expr = r#" From 1dfa1cdd0b1af8425e4e8e21ee76f76b8faf4c20 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Thu, 18 Jun 2026 05:27:30 -0400 Subject: [PATCH 32/53] added ClearSpeak/functions.rs tests and modified rules --- Rules/Languages/fr/ClearSpeak_Rules.yaml | 29 +- tests/Languages/fr.rs | 4 + tests/Languages/fr/ClearSpeak/functions.rs | 566 +++++++++++++++++++++ 3 files changed, 587 insertions(+), 12 deletions(-) create mode 100644 tests/Languages/fr/ClearSpeak/functions.rs diff --git a/Rules/Languages/fr/ClearSpeak_Rules.yaml b/Rules/Languages/fr/ClearSpeak_Rules.yaml index 18e9cd916..2a51be4ae 100644 --- a/Rules/Languages/fr/ClearSpeak_Rules.yaml +++ b/Rules/Languages/fr/ClearSpeak_Rules.yaml @@ -236,11 +236,11 @@ replace: - test: if: "$ClearSpeak_Trig = 'TrigInverse'" - then: [x: "*[1]", bookmark: "*[2]/@id", T: "l'inverse"] # phrase(8 over 5 is the 'inverse' of 5 over 8) + then: [x: "*[1]", bookmark: "*[2]/@id", T: "inverse"] # phrase(8 over 5 is the 'inverse' of 5 over 8) else_test: if: "$ClearSpeak_Trig = 'ArcTrig'" then: [bookmark: "*[2]/@id", T: "arc", x: "*[1]"] # phrase(the 'arc' of a circle) - else: [bookmark: "*[2]/@id", T: "l'inverse", x: "*[1]"] # default/Auto # phrase(8 over 5 is the 'inverse' of 5 over 8) + else: [x: "*[1]", bookmark: "*[2]/@id", T: "inverse"] # default/Auto # phrase(8 over 5 is the 'inverse' of 5 over 8) - name: function-squared-or-cubed tag: power @@ -263,12 +263,17 @@ - test: if: "$Verbosity!='Terse'" then: [T: "la"] # phrase('the' third power of 2) - - bookmark: "*[2]/@id" - test: if: "*[2][self::m:mn][not(contains(., '.'))]" - then: [x: "ToOrdinal(*[2])"] - else: [x: "*[2]"] - - T: "puissance de" # phrase(the third 'power of' 6) + then: + - bookmark: "*[2]/@id" + - x: "ToOrdinal(*[2])" + - T: "puissance" # phrase(the third 'power' of 6) + else: + - T: "puissance" # phrase(the third 'power' of 6) + - bookmark: "*[2]/@id" + - x: "*[2]" + - T: "de" # phrase(the third power 'of' 6) - pause: short - x: "*[1]" @@ -536,7 +541,7 @@ tag: [open-interval, open-closed-interval, closed-interval, closed-open-interval] match: "." replace: - - T: "l'invervalle de" # phrase('the interval from' a to b) + - T: "l'intervalle de" # phrase('the interval from' a to b) - x: "*[1]" - T: "à" # phrase(the interval from a 'to' b) - x: "*[2]" @@ -546,8 +551,8 @@ then: - test: if: "starts-with(name(.), 'open')" - then: [T: "sans"] # phrase(the interval from a to b 'not' including b) - - T: "inclure" # phrase(the interval from a to b not 'including' b) + then: [T: "n'incluant pas"] # phrase(the interval from a to b 'not including' b) + else: [T: "incluant"] # phrase(the interval from a to b 'including' b) - x: "*[1]" # logic to deal with [not] arg #1 - test: @@ -568,8 +573,8 @@ then: - test: if: "name(.) = 'open-interval' or name(.) = 'closed-open-interval'" - then: [T: "n'"] # phrase(the interval 'not' including a) - - T: "incluant pas" # phrase(the interval not 'including' a) + then: [T: "n'incluant pas"] # phrase(the interval 'not including' a) + else: [T: "incluant"] # phrase(the interval 'including' a) - x: "*[2]" # onto the [not] [including]... part @@ -611,7 +616,7 @@ - bookmark: "@id" - test: if: "$Verbosity!='Terse' and not(IsNode(following-sibling::*[2],'simple'))" - then: [T: "la"] # phrase('the' square root of 25) + then: [T: "le"] # phrase('the' square root of 25) - test: - if: ".='log'" then: [T: "logarithme"] diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index eadb0d419..9c3daf3af 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -1,5 +1,9 @@ #![allow(non_snake_case)] +mod ClearSpeak { + mod functions; +} + mod SimpleSpeak { mod functions; mod geometry; diff --git a/tests/Languages/fr/ClearSpeak/functions.rs b/tests/Languages/fr/ClearSpeak/functions.rs new file mode 100644 index 000000000..58495983b --- /dev/null +++ b/tests/Languages/fr/ClearSpeak/functions.rs @@ -0,0 +1,566 @@ +/// 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("fr", "ClearSpeak", expr, "sinus x plus cosinus y plus tangente z plus sécante alpha, plus cosécante phi, plus cotangente phi")?; + return Ok(()); + +} + +#[test] +fn hyperbolic_trig_names() -> Result<()> { + let expr = " + sinhx+ + coshy+ + tanhz+ + sechα+ + cschϕ+ + cothφ + "; + test("fr", "ClearSpeak", expr, "sinus hyperbolique de x, plus \ + cosinus hyperbolique de y, plus \ + tangente hyperbolique de z, plus, \ + sécante hyperbolique de alpha, plus, \ + cosécante hyperbolique de phi, plus, \ + cotangente hyperbolique de phi")?; + return Ok(()); + +} + + +#[test] +fn inverse_trig() -> Result<()> { + let expr = "sin-1x"; + test("fr", "ClearSpeak", expr, "sinus inverse de x")?; + return Ok(()); + +} + +#[test] +fn inverse_trig_trig_inverse() -> Result<()> { + let expr = "tan-1x"; + test_ClearSpeak("fr", "ClearSpeak_Trig", "TrigInverse",expr, + "tangente inverse de x")?; + return Ok(()); + +} + +#[test] +fn inverse_trig_arc() -> Result<()> { + let expr = "cosh-1x"; + test_ClearSpeak("fr", "ClearSpeak_Trig", "ArcTrig",expr, + "arc cosinus hyperbolique de x")?; + return Ok(()); + +} + +#[test] +fn trig_squared() -> Result<()> { + let expr = "sin2x"; + test("fr", "ClearSpeak", expr, "sinus au carré de x")?; + return Ok(()); + +} + +#[test] +fn trig_cubed() -> Result<()> { + let expr = "tan3x"; + test("fr", "ClearSpeak", expr, "tangente au cube de x")?; + return Ok(()); + +} + +#[test] +fn trig_fourth() -> Result<()> { + let expr = "sec4x"; + test("fr", "ClearSpeak", expr, "la quatrième puissance de, sécante de x")?; + return Ok(()); + +} + + +#[test] +fn trig_power_other() -> Result<()> { + let expr = "sinh>n-1x"; + test("fr", "ClearSpeak", expr, "la puissance n moins 1 de, sinus hyperbolique de x")?; + return Ok(()); + +} + +#[test] +fn simple_log() -> Result<()> { + let expr = " logx "; + test("fr", "ClearSpeak", expr, "logarithme x")?; + return Ok(()); + +} + +#[test] +fn normal_log() -> Result<()> { + let expr = "log(x+y)"; + test("fr", "ClearSpeak", expr, "le logarithme de, parenthèse gauche, x plus y, parenthèse droite")?; + return Ok(()); + +} + +#[test] +fn simple_log_with_base() -> Result<()> { + let expr = " logbx "; + test("fr", "ClearSpeak", expr, "le log en base b, de x")?; + return Ok(()); + +} + +#[test] +fn normal_log_with_base() -> Result<()> { + let expr = "logb(x+y)"; + test("fr", "ClearSpeak", expr, "le log en base b, de, parenthèse gauche, x plus y, parenthèse droite")?; + return Ok(()); + +} + +#[test] +fn simple_ln() -> Result<()> { + let expr = " lnx "; + test("fr", "ClearSpeak", expr, "l n x")?; + return Ok(()); + +} + +#[test] +fn normal_ln() -> Result<()> { + let expr = "ln(x+y)"; + test("fr", "ClearSpeak", expr, "le l n de, parenthèse gauche, x plus y, parenthèse droite")?; + return Ok(()); + +} + + +#[test] +fn simple_natural_log() -> Result<()> { + let expr = " lnx "; + test_ClearSpeak("fr", "ClearSpeak_Log", "LnAsNaturalLog",expr, + "logarithme naturel x")?; + return Ok(()); + +} + + +#[test] +fn natural_log() -> Result<()> { + let expr = "ln(x+y)"; + test_ClearSpeak("fr", "ClearSpeak_Log", "LnAsNaturalLog",expr, + "le logarithme naturel de, parenthèse gauche, x plus y, parenthèse droite")?; + return Ok(()); + +} + + +#[test] +fn explicit_function_call_with_parens() -> Result<()> { + let expr = "t(x)"; + test("fr", "ClearSpeak", expr, "t de x")?; + return Ok(()); + +} + + +#[test] +fn explicit_times_with_parens() -> Result<()> { + let expr = "t(x)"; + test("fr", "ClearSpeak", expr, "t fois x")?; + return Ok(()); + +} + +#[test] +fn explicit_function_call() -> Result<()> { + let expr = "tx"; + test("fr", "ClearSpeak", expr, "t de x")?; + return Ok(()); + +} + +#[test] +fn explicit_times() -> Result<()> { + let expr = "tx"; + test("fr", "ClearSpeak", expr, "t x")?; + return Ok(()); + +} + + +#[test] +fn test_functions_none_pref() -> Result<()> { + let expr = " + log(x+y) + + + f(x+y) + "; + test_ClearSpeak("fr", "ClearSpeak_Functions", "None",expr, + "le logarithme de, parenthèse gauche, x plus y, parenthèse droite; plus; f fois, parenthèse gauche, x plus y, parenthèse droite")?; + return Ok(()); + +} + +#[test] +fn test_functions_none_pref_multiple_args() -> Result<()> { + let expr = " + B ( 2,6 ) + "; + test_ClearSpeak("fr", "ClearSpeak_Functions", "None",expr, + "b majuscule fois, parenthèse gauche, 2 virgule, 6, parenthèse droite")?; + return Ok(()); + +} + + +/* + * Tests for times + */ +#[test] +fn no_times_binomial() -> Result<()> { + let expr = "x y"; + test("fr", "ClearSpeak", expr, "x y")?; + return Ok(()); + +} + +#[test] +fn times_following_paren() -> Result<()> { + let expr = " + 2 + ( 3 ) + "; + test("fr", "ClearSpeak", expr, "2 fois 3")?; + return Ok(()); + +} + +#[test] +fn times_preceding_paren() -> Result<()> { + let expr = " + ( 2 ) + 3 + "; + test("fr", "ClearSpeak", expr, "2 fois 3")?; + return Ok(()); + +} + +#[test] +fn times_sqrt() -> Result<()> { + let expr = " + a + b + = + ab + "; + test("fr", "ClearSpeak", expr, "la racine carrée de a; fois la racine carrée de b; est égal à, la racine carrée de a b")?; + return Ok(()); + +} + +#[test] +fn more_implied_times() -> Result<()> { + let expr = " + + + + ( + 2x + ) + 2 + + + "; + test_ClearSpeak("fr", "ClearSpeak_ImpliedTimes", "MoreImpliedTimes",expr, + "parenthèse gauche, 2 fois x, parenthèse droite au carré")?; + return Ok(()); + +} + +#[test] +fn explicit_times_more_implied_times() -> Result<()> { + let expr = "tx"; + test_ClearSpeak("fr", "ClearSpeak_ImpliedTimes", "MoreImpliedTimes",expr, "t fois x")?; + return Ok(()); + +} + +#[test] +fn explicit_times_none_simple_right() -> Result<()> { + let expr = "2[3 ]"; + test_ClearSpeak("fr", "ClearSpeak_ImpliedTimes", "None", + expr, "2, crochet ouvrant 3 crochet fermant")?; + return Ok(()); + +} + +#[test] +fn explicit_times_none_simple_left() -> Result<()> { + let expr = "(21)x"; + test_ClearSpeak("fr", "ClearSpeak_ImpliedTimes", "None", + expr, "parenthèse gauche, 2 moins 1, parenthèse droite; x")?; + return Ok(()); + +} + +#[test] +fn explicit_times_none_superscript() -> Result<()> { + let expr = " + f(x)= +x +2 + +( + +x+1 +) + "; + test_ClearSpeak_prefs("fr", + vec![("ClearSpeak_ImpliedTimes", "None"), ("ClearSpeak_Functions", "None")], + expr, "f, parenthèse gauche x parenthèse droite; est égal à; x au carré, parenthèse gauche, x plus 1, parenthèse droite")?; + return Ok(()); + +} + +/* + * Tests for parens + */ + #[test] + fn no_parens_number() -> Result<()> { + let expr = " + ( + 25 + ) + x + "; + test("fr", "ClearSpeak", expr, "25 fois x")?; + return Ok(()); + + } + + #[test] + fn no_parens_monomial() -> Result<()> { + let expr = " + b + ( + xy + ) + "; + test("fr", "ClearSpeak", expr, "b, parenthèse gauche, x y parenthèse droite")?; + return Ok(()); + + } + + #[test] + fn no_parens_negative_number() -> Result<()> { + let expr = " + 2+ + ( + 2 + ) + "; + test("fr", "ClearSpeak", expr, "2 plus moins 2")?; + return Ok(()); + + } + + + #[test] + fn no_parens_negative_number_with_var() -> Result<()> { + let expr = " + ( + 2x + ) + + +1 + "; + test("fr", "ClearSpeak", expr, "moins 2 x plus 1")?; + return Ok(()); + + } + + #[test] + fn parens_superscript() -> Result<()> { + let expr = " + + + + ( + 2x + ) + 2 + + + "; + test("fr", "ClearSpeak", expr, "parenthèse gauche, 2 x parenthèse droite au carré")?; + return Ok(()); + + } + + #[test] + fn no_parens_fraction() -> Result<()> { + let expr = " + 2 + + + + ( + 12 + ) + "; + test("fr", "ClearSpeak", expr, "2 plus 1 demi")?; + return Ok(()); + + } + + + // Tests for the ten types of intervals in ClearSpeak + #[test] + fn parens_interval_open_open() -> Result<()> { + let expr = " + ( + c,d + ) + "; + test_ClearSpeak("fr", "ClearSpeak_Paren", "Interval",expr, + "l'intervalle de c à d, n'incluant pas c ou d")?; + return Ok(()); + +} + +#[test] + fn parens_interval_closed_open() -> Result<()> { + let expr = " + [ + c,d + ) + "; + test_ClearSpeak("fr", "ClearSpeak_Paren", "Interval ",expr, + "l'intervalle de c à d, incluant c mais n'incluant pas d")?; + return Ok(()); + +} + + +#[test] +fn parens_interval_open_closed() -> Result<()> { + let expr = " + ( + c,d + ] + "; + test_ClearSpeak("fr", "ClearSpeak_Paren", "Interval ",expr, + "l'intervalle de c à d, n'incluant pas c mais incluant d")?; + return Ok(()); + +} + + +#[test] +fn parens_interval_closed_closed() -> Result<()> { + let expr = " + [ + c,d + ] +"; +test_ClearSpeak("fr", "ClearSpeak_Paren", "Interval ",expr, +"l'intervalle de c à d, incluant c et d")?; +return Ok(()); + +} + + #[test] + fn parens_interval_neg_infinity_open_open() -> Result<()> { + let expr = " + ( + - ,d + ) + "; + test_ClearSpeak("fr", "ClearSpeak_Paren", "Interval ",expr, + "l'intervalle de moins infini à d, n'incluant pas d")?; + return Ok(()); + +} + + #[test] + fn parens_interval_neg_infinity_closed_open() -> Result<()> { + let expr = " + ( + - ,d + ] + "; + test_ClearSpeak("fr", "ClearSpeak_Paren", "Interval ",expr, + "l'intervalle de moins infini à d, incluant d")?; + return Ok(()); + +} + + +#[test] +fn parens_interval_open_open_infinity() -> Result<()> { + let expr = " + ( + c, + ) + "; + test_ClearSpeak("fr", "ClearSpeak_Paren", "Interval ",expr, + "l'intervalle de c à infini, n'incluant pas c")?; + return Ok(()); + +} + + +#[test] +fn parens_interval_closed_open_infinity() -> Result<()> { + let expr = " + [ + c, + ) + "; + test_ClearSpeak("fr", "ClearSpeak_Paren", "Interval ",expr, +"l'intervalle de c à infini, incluant c")?; +return Ok(()); + +} + +#[test] +fn parens_interval_neg_infinity_to_infinity() -> Result<()> { + let expr = " + ( + - , + ) + "; + test_ClearSpeak("fr", "ClearSpeak_Paren", "Interval ",expr, + "l'intervalle de moins infini à infini")?; + return Ok(()); + +} + +#[test] +fn parens_interval_neg_infinity_to_pos_infinity() -> Result<()> { + let expr = " + ( + - ,+ + ) + "; + test_ClearSpeak("fr", "ClearSpeak_Paren", "Interval ",expr, + "l'intervalle de moins infini à plus infini")?; + return Ok(()); + +} From 6032161b19510b1e4e198a24a5405a242a1b9da4 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Thu, 18 Jun 2026 05:40:43 -0400 Subject: [PATCH 33/53] added ClearSpeak/large_ops.rs tests --- tests/Languages/fr.rs | 1 + tests/Languages/fr/ClearSpeak/large_ops.rs | 235 +++++++++++++++++++++ 2 files changed, 236 insertions(+) create mode 100644 tests/Languages/fr/ClearSpeak/large_ops.rs diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index 9c3daf3af..491d8822b 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -2,6 +2,7 @@ mod ClearSpeak { mod functions; + mod large_ops; } mod SimpleSpeak { diff --git a/tests/Languages/fr/ClearSpeak/large_ops.rs b/tests/Languages/fr/ClearSpeak/large_ops.rs new file mode 100644 index 000000000..3d262a000 --- /dev/null +++ b/tests/Languages/fr/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("fr", "ClearSpeak", expr, "la sommation de n est égal à 1, à 10 de n")?; + return Ok(()); + +} + +#[test] +fn sum_under() -> Result<()> { + let expr = " + + + S + + i + "; + test("fr", "ClearSpeak", expr, "la sommation sur s majuscule de i")?; + return Ok(()); + +} +#[test] +fn sum_both_msubsup() -> Result<()> { + let expr = " + + + n=1 + 10 + + n + "; + test("fr", "ClearSpeak", expr, "la sommation de n est égal à 1, à 10 de n")?; + return Ok(()); + +} + +#[test] +fn sum_sub() -> Result<()> { + let expr = " + + + S + + i + "; + test("fr", "ClearSpeak", expr, "la sommation sur s majuscule de i")?; + return Ok(()); + +} + +#[test] +fn sum() -> Result<()> { + let expr = " + + ai + "; + test("fr", "ClearSpeak", expr, "la sommation de a indice i")?; + return Ok(()); + +} + +#[test] +fn product_both() -> Result<()> { + let expr = " + + + n=1 + 10 + + n + "; + test("fr", "ClearSpeak", expr, "le produit de n est égal à 1, à 10 de n")?; + return Ok(()); + +} + +#[test] +fn product_under() -> Result<()> { + let expr = " + + + S + + i + "; + test("fr", "ClearSpeak", expr, "le produit sur s majuscule de i")?; + return Ok(()); + +} + +#[test] +fn product() -> Result<()> { + let expr = " + + ai + "; + test("fr", "ClearSpeak", expr, "le produit de a indice i")?; + return Ok(()); + +} + +#[test] +fn intersection_both() -> Result<()> { + let expr = " + + + i=1 + 10 + + Si + "; + test("fr", "ClearSpeak", expr, "l'intersection de i est égal à 1, à 10 de; s majuscule indice i")?; + return Ok(()); + +} + +#[test] +fn intersection_under() -> Result<()> { + let expr = " + + + C + + Si + "; + test("fr", "ClearSpeak", expr, "l'intersection sur c majuscule de; s majuscule indice i")?; + return Ok(()); + +} + +#[test] +fn intersection() -> Result<()> { + let expr = " + + Si + "; + test("fr", "ClearSpeak", expr, "l'intersection de s majuscule indice i")?; + return Ok(()); + +} + +#[test] +fn union_both() -> Result<()> { + let expr = " + + + i=1 + 10 + + Si + "; + test("fr", "ClearSpeak", expr, "l'union de i est égal à 1, à 10 de; s majuscule indice i")?; + return Ok(()); + +} + +#[test] +fn union_under() -> Result<()> { + let expr = " + + + C + + Si + "; + test("fr", "ClearSpeak", expr, "l'union sur c majuscule de, s majuscule indice i")?; + return Ok(()); + +} + +#[test] +fn union() -> Result<()> { + let expr = " + + Si + "; + test("fr", "ClearSpeak", expr, "l'union de s majuscule indice i")?; + return Ok(()); + +} + +#[test] +fn integral_both() -> Result<()> { + let expr = " + + + + 0 + 1 + + f(x ) + + dx + "; + test("fr", "ClearSpeak", expr, "l'intégrale de 0, à 1 de, f de x; d x")?; + return Ok(()); + +} + +#[test] +fn integral_under() -> Result<()> { + let expr = " + + + + + f(x ) + dx + "; + test("fr", "ClearSpeak", expr, "l'intégrale sur les nombres réels de; f de x d x")?; + return Ok(()); + +} + +#[test] +fn integral() -> Result<()> { + let expr = " + + f(x ) + dx + "; + test("fr", "ClearSpeak", expr, "l'intégrale de f de x d x")?; + return Ok(()); + +} \ No newline at end of file From 56ecdc29c1eb92197439d3a6678f98896caec7d2 Mon Sep 17 00:00:00 2001 From: "olivier.thiffault" Date: Thu, 18 Jun 2026 06:14:19 -0400 Subject: [PATCH 34/53] added ClearSpeak/menclosure.rs tests and modified rules --- Rules/Languages/fr/SharedRules/default.yaml | 13 +- tests/Languages/fr.rs | 1 + tests/Languages/fr/ClearSpeak/menclose.rs | 242 ++++++++++++++++++++ 3 files changed, 249 insertions(+), 7 deletions(-) create mode 100644 tests/Languages/fr/ClearSpeak/menclose.rs diff --git a/Rules/Languages/fr/SharedRules/default.yaml b/Rules/Languages/fr/SharedRules/default.yaml index f365c0d35..0a92249d7 100644 --- a/Rules/Languages/fr/SharedRules/default.yaml +++ b/Rules/Languages/fr/SharedRules/default.yaml @@ -477,19 +477,18 @@ - test: if: ".[ contains(concat(' ', normalize-space(@notation), ' '), ' left ') or contains(concat(' ', normalize-space(@notation), ' '), ' right ') or contains(@notation,'top') or contains(@notation,'bottom') ]" then: - - T: "line on" # phrase(draw a straight 'line' on the page) - test: if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' left ')]" - then: [T: "gauche", pause: short] # phrase(line on 'left' of the expression) + then: [T: "ligne à gauche", pause: short] # phrase('line on left' of the expression) - test: if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' right ')]" - then: [T: "droite", pause: short] # phrase(line on 'right' of the expression) + then: [T: "ligne à droite", pause: short] # phrase('line on right' of the expression) - test: if: ".[contains(@notation,'top')]" - then: [T: "dessus", pause: short] # phrase(line on 'top' of the expression) + then: [T: "ligne au dessus", pause: short] # phrase('line on top' of the expression) - test: if: ".[contains(@notation,'bottom')]" - then: [T: "dessous", pause: short] # phrase(line on the 'bottom' of the expression) + then: [T: "ligne en dessous", pause: short] # phrase('line on the bottom' of the expression) - test: if: ".[ contains(@notation,'updiagonalstrike') or contains(@notation,'downdiagonalstrike') or contains(@notation,'verticalstrike') or contains(@notation,'horizontalstrike') ]" then: @@ -509,7 +508,7 @@ - test: if: ".[contains(@notation,'horizontalstrike')]" then: [T: "horizontale", pause: short] # phrase(the line is 'horizontal') - - T: "cross out" # phrase(please 'cross out' the incorrect answer) + - T: "barré" # phrase(please 'cross out' the incorrect answer) - pause: short - test: if: ".[contains(@notation,'uparrow')]" @@ -562,7 +561,7 @@ - test: if: ".[contains(@notation,'radical')]" then: [T: "racine carrée", pause: short] # phrase(5 is the 'square root' of 25) - - T: "enclosing" # phrase(parentheses are 'enclosing' part of the equation) + - T: "contenant" # phrase(parentheses are 'enclosing' part of the equation) - test: if: "*[self::m:mtext and .=' ']" then: [T: "espace"] # otherwise there is complete silence # phrase(there is a 'space' between the words) diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index 491d8822b..3eec28c11 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -3,6 +3,7 @@ mod ClearSpeak { mod functions; mod large_ops; + mod menclose; } mod SimpleSpeak { diff --git a/tests/Languages/fr/ClearSpeak/menclose.rs b/tests/Languages/fr/ClearSpeak/menclose.rs new file mode 100644 index 000000000..e131440f2 --- /dev/null +++ b/tests/Languages/fr/ClearSpeak/menclose.rs @@ -0,0 +1,242 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn menclose_actuarial() -> Result<()> { + let expr = " + 3+2i + "; + test("fr", "ClearSpeak", expr, "symbole actuariel, contenant 3 plus 2 i fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_box() -> Result<()> { + let expr = " + 3+2i + "; + test("fr", "ClearSpeak", expr, "case, rond, contenant 3 plus 2 i fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_left() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "ligne à gauche, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_right() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "ligne à droite, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_top_bottom() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "ligne au dessus, ligne en dessous, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_updiagonalstrike() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "diagonale vers le haut, barré, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_downdiagonalstrike() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "diagonale vers le bas, barré, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_cross_out() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "x, barré, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_vertical_horizontal_strike() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "verticale, horizontale, barré, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_leftarrow() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "flèche vers la gauche, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_right_up_down_arrow() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "flèche vers le haut, flèche vers le bas, flèche vers la droite, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_northeastarrow() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "flèche nord-est, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_other_single_arrows() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "flèche sud-est, flèche sud-ouest, flèche nord-ouest, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_northwestsoutheastarrow() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "flèche diagonale vers le bas à double extrémité, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_other_double_arrows() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "flèche verticale à double extrémité, flèche horizontale à double extrémité, flèche diagonale vers le haut à double extrémité, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_madrub() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "symbole factoriel arabe, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_phasorangle() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "angle de phaseur, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_circle_phasorangle() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "rond, angle de phaseur, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_longdiv() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "symbole de division longue, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_longdiv_default() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "symbole de division longue, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_longdiv_empty_string() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "symbole de division longue, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_longdiv_whitespace_string() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "symbole de division longue, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn menclose_radical() -> Result<()> { + let expr = " + 32 + "; + test("fr", "ClearSpeak", expr, "racine carrée, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} + +#[test] +fn simple_speak_menclose_top_bottom() -> Result<()> { + let expr = " + 32 + "; + test("fr", "SimpleSpeak", expr, "ligne au dessus, ligne en dessous, contenant 3 demis fin d'encadrement")?; + return Ok(()); + +} From 990dcf94da0c559d872c0d3583271f50ce8278e1 Mon Sep 17 00:00:00 2001 From: Olivier Thiffault Date: Wed, 24 Jun 2026 19:13:13 -0400 Subject: [PATCH 35/53] added tests ClearSpeak/mfrac.rs --- tests/Languages/fr.rs | 1 + tests/Languages/fr/ClearSpeak/mfrac.rs | 313 +++++++++++++++++++++++++ 2 files changed, 314 insertions(+) create mode 100644 tests/Languages/fr/ClearSpeak/mfrac.rs diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index 3eec28c11..bd4bf5518 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -4,6 +4,7 @@ mod ClearSpeak { mod functions; mod large_ops; mod menclose; + mod mfrac; } mod SimpleSpeak { diff --git a/tests/Languages/fr/ClearSpeak/mfrac.rs b/tests/Languages/fr/ClearSpeak/mfrac.rs new file mode 100644 index 000000000..fdaf12188 --- /dev/null +++ b/tests/Languages/fr/ClearSpeak/mfrac.rs @@ -0,0 +1,313 @@ +/// 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("fr", "ClearSpeak", expr, "1 demi")?; + return Ok(()); + +} + +#[test] +fn common_fraction_thirds() -> Result<()> { + let expr = " + 2 3 + "; + test("fr", "ClearSpeak", expr, "2 tiers")?; + return Ok(()); + +} + +#[test] +fn common_fraction_tenths() -> Result<()> { + let expr = " + 17 10 + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "17 dixièmes")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Ordinal")], expr, "17 dixièmes")?; + return Ok(()); + +} + +#[test] +#[allow(non_snake_case)] +fn not_ClearSpeak_common_fraction_tenths() -> Result<()> { + let expr = " + 89 10 + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "89 sur 10")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Ordinal")], expr, "89 dixièmes")?; + return Ok(()); + +} + +#[test] +fn non_simple_fraction() -> Result<()> { + let expr = " + + + + + x+y + + x-y + + + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "la fraction avec numérateur; x plus y; et dénominateur x moins y")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Ordinal")], expr, "la fraction avec numérateur; x plus y; et dénominateur x moins y")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Over")], expr, "x plus y sur x moins y")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "FracOver")], expr, "la fraction x plus y sur x moins y")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "General")], expr, "la fraction avec numérateur; x plus y; et dénominateur x moins y")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "EndFrac")], expr, "la fraction avec numérateur; x plus y; et dénominateur x moins y; fin de fraction")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "GeneralEndFrac")], expr, "la fraction avec numérateur; x plus y; et dénominateur x moins y; fin de fraction")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "OverEndFrac")], expr, "x plus y sur x moins y, fin de fraction")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Per")], expr, "x plus y par x moins y")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Verbose"),("ClearSpeak_Fractions", "Auto")], expr, "la fraction avec numérateur; x plus y; et dénominateur x moins y; fin de fraction")?; + return Ok(()); + +} + +#[test] +fn frac_with_units() -> Result<()> { + let expr = " + + + 62 + + mi + hr + + + "; + test("fr", "ClearSpeak", expr, "62 milles par heure")?; + return Ok(()); + +} + + +#[test] +fn mixed_number() -> Result<()> { + let expr = " + 3 + 1 2 + "; + test("fr", "ClearSpeak", expr, "3 et 1 demi")?; + return Ok(()); + +} + +#[test] +fn explicit_mixed_number() -> Result<()> { + let expr = " + 3 + + 1 8 + "; + test("fr", "ClearSpeak", expr, "3 et 1 huitième")?; + return Ok(()); + +} + +#[test] +fn mixed_number_big() -> Result<()> { + let expr = " + 3 + 7 83 + "; + test("fr", "ClearSpeak", expr, "3 et 7 sur 83")?; + return Ok(()); + +} + +#[test] +fn simple_text() -> Result<()> { + let expr = " + rise run + "; + test("fr", "ClearSpeak", expr, "rise sur run")?; + return Ok(()); + +} + +#[test] +fn number_and_text() -> Result<()> { + let expr = " + + + 2miles + + 3gallons + + "; + test("fr", "ClearSpeak", expr, "2 miles sur 3 gallons")?; + return Ok(()); + +} + + +#[test] +fn nested_simple_fractions() -> Result<()> { + let expr = " + + + + + 1 + 2 + + + + + 2 + 3 + + + + + "; + test_prefs("fr", "ClearSpeak", vec![("ClearSpeak_Fractions", "Auto")], expr, "1 demi sur 2 tiers")?; + test_prefs("fr", "ClearSpeak", vec![("ClearSpeak_Fractions", "Ordinal")], expr, "1 demi sur 2 tiers")?; + test_prefs("fr", "ClearSpeak", vec![("ClearSpeak_Fractions", "Over")], expr, "1 sur 2 sur 2 sur 3")?; + test_prefs("fr", "ClearSpeak", vec![("ClearSpeak_Fractions", "FracOver")], expr, + "la fraction la fraction 1 sur 2 sur la fraction 2 sur 3")?; + test_prefs("fr", "ClearSpeak", vec![("ClearSpeak_Fractions", "General")], expr, + "la fraction avec numérateur la fraction avec numérateur 1; et dénominateur 2; et dénominateur la fraction avec numérateur 2; et dénominateur 3")?; + test_prefs("fr", "ClearSpeak", vec![("ClearSpeak_Fractions", "EndFrac")], expr, "1 demi sur 2 tiers")?; + test_prefs("fr", "ClearSpeak", vec![("ClearSpeak_Fractions", "GeneralEndFrac")], expr, + "la fraction avec numérateur la fraction avec numérateur 1; et dénominateur 2; fin de fraction; et dénominateur la fraction avec numérateur 2; et dénominateur 3; fin de fraction; fin de fraction")?; + test_prefs("fr", "ClearSpeak", vec![("ClearSpeak_Fractions", "OverEndFrac")], expr, + "1 sur 2, fin de fraction, sur 2 sur 3, fin de fraction; fin de fraction")?; + return Ok(()); + +} + + +#[test] +fn semi_nested_fraction() -> Result<()> { + let expr = " + + + + + 2 + 3 + + x + + 6 + + + "; + test("fr", "ClearSpeak", expr, "2 tiers x sur 6")?; + return Ok(()); + +} + +#[test] +fn general_nested_fraction() -> Result<()> { + let expr = " + + + + + + 10 + n + + + + + 2 + n + + + + + + "; + test("fr", "ClearSpeak", expr, "la fraction avec numérateur; 10 sur n; et dénominateur 2 sur n")?; + return Ok(()); + +} + +#[test] +fn complex_nested_fraction() -> Result<()> { + let expr = " + + + + + + n + 10 + n + + + + + 2 + n + + + + + + "; + test("fr", "ClearSpeak", expr, "la fraction avec numérateur; la fraction avec numérateur; n plus 10; et dénominateur n; et dénominateur 2 sur n")?; + return Ok(()); + +} + +#[test] +fn simple_function() -> Result<()> { + let expr = "f(x)2"; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "f de x sur 2")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_Fractions", "Auto")], expr, "f de x sur 2, fin de fraction")?; + return Ok(()); + +} + +#[test] +fn function_over_function() -> Result<()> { + let expr = " + f(x) + g(x) + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "f de x sur g de x")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_Fractions", "Auto")], expr, "f de x sur g de x, fin de fraction")?; + return Ok(()); + +} + +#[test] +fn non_simple_function_over_function() -> Result<()> { + let expr = " + f(x+1) + g(x) + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, + "la fraction avec numérateur; f de, parenthèse gauche, x plus 1, parenthèse droite; et dénominateur g de x")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_Fractions", "Auto")], expr, + "la fraction avec numérateur; f de, parenthèse gauche, x plus 1, parenthèse droite; et dénominateur g de x; fin de fraction")?; + return Ok(()); + +} + +#[test] +fn binomial() -> Result<()> { + let expr = " + 2 + ( + 7 3 + ) + "; + test("fr", "ClearSpeak", expr, "2 fois 7 parmi 3")?; + return Ok(()); + +} From 15961046938a20f67875ebc9d4fb1ad01367e594 Mon Sep 17 00:00:00 2001 From: Olivier Thiffault Date: Wed, 24 Jun 2026 19:43:04 -0400 Subject: [PATCH 36/53] modified rules and added tests for ClearSpeak/mroot.rs --- Rules/Languages/fr/ClearSpeak_Rules.yaml | 32 ++--- Rules/Languages/fr/definitions.yaml | 4 +- tests/Languages/fr.rs | 1 + tests/Languages/fr/ClearSpeak/mroot.rs | 163 +++++++++++++++++++++++ 4 files changed, 182 insertions(+), 18 deletions(-) create mode 100644 tests/Languages/fr/ClearSpeak/mroot.rs diff --git a/Rules/Languages/fr/ClearSpeak_Rules.yaml b/Rules/Languages/fr/ClearSpeak_Rules.yaml index 2a51be4ae..b05ced734 100644 --- a/Rules/Languages/fr/ClearSpeak_Rules.yaml +++ b/Rules/Languages/fr/ClearSpeak_Rules.yaml @@ -35,15 +35,15 @@ - test: if: "$Verbosity!='Terse'" then: [T: "la"] # phrase('the' square root of 25) + - T: "racine carrée" # phrase(8 is the 'square root' of 64) - 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:minus and count(*)=1]" - then: [T: "négatif"] # phrase(minus 4 is a 'negative' number) - else: [T: "positif"] # phrase(10 is a 'positive' number) - - T: "racine carrée" # phrase(8 is the 'square root' of 64) + then: [T: "négative"] # phrase(minus 4 is a 'negative' number) + else: [T: "positive"] # phrase(10 is a 'positive' number) - test: if: "$Verbosity!='Terse'" then: [T: "de"] # phrase(the square root 'of' 5) @@ -66,16 +66,6 @@ - test: if: "$Verbosity!='Terse'" then: [T: "la"] # phrase(6 is 'the' square root of 36) - - test: - if: "$ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" - then: - - test: - if: "parent::*[(self::m:minus or self::m:plus) and count(*)=1]" - then: [bookmark: "parent/@id"] - - test: - if: "parent::m:minus" - then: [T: "négatif"] # phrase(minus 6 is a 'negative' number) - else: [T: "positif"] # phrase(10 is a 'positive' number) - test: if: "*[2][self::m:mn and not(contains(., '.'))]" then_test: @@ -83,15 +73,25 @@ then: [T: "racine carrée"] # phrase(5 is the 'square root' of 25) - else_if: "*[2][.='3']" then: [T: "racine cubique"] # phrase(5 is the 'cube root' of 625) - - else: [x: "ToOrdinal(*[2])", T: "racine"] # phrase(the square 'root' of 25) + - else: [T: "racine", x: "ToOrdinal(*[2])"] # phrase(the square 'root' of 25) else: + - T: "racine" # phrase(the square 'root' of 36) - test: if: "*[2][self::m:mi][string-length(.)=1]" then: - x: "*[2]" - pronounce: [text: "-ième", ipa: "jɛm", sapi5: "ieme", eloquence: "ieme"] else: [x: "*[2]"] - - T: "racine" # phrase(the square 'root' of 36) + - test: + if: "$ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" + then: + - test: + if: "parent::*[(self::m:minus or self::m:plus) and count(*)=1]" + then: [bookmark: "parent/@id"] + - test: + if: "parent::m:minus" + then: [T: "négative"] # phrase(minus 6 is a 'negative' number) + else: [T: "positive"] # phrase(10 is a 'positive' number) - test: if: "$Verbosity!='Terse'" then: [T: "de"] # phrase(the square root 'of' 36) diff --git a/Rules/Languages/fr/definitions.yaml b/Rules/Languages/fr/definitions.yaml index a7f9558eb..c2e822d5b 100644 --- a/Rules/Languages/fr/definitions.yaml +++ b/Rules/Languages/fr/definitions.yaml @@ -293,13 +293,13 @@ ] - NumbersOrdinalOnes: [ - "zéroième", "premier", "deuxième", "troisième", "quatrième", "cinquième", "sixième", "septième", "huitième", "neuvième", + "zéroième", "et unième", "deuxième", "troisième", "quatrième", "cinquième", "sixième", "septième", "huitième", "neuvième", "dixième", "onzième", "douzième", "treizième", "quatorzième", "quinzième", "seizième", "dix-septième", "dix-huitième", "dix-neuvième" ] - NumbersOrdinalPluralOnes: [ - "zéroièmes", "premiers", "deuxièmes", "troisièmes", "quatrièmes", "cinquièmes", "sixièmes", "septièmes", "huitièmes", "neuvièmes", + "zéroièmes", "et unièmes", "deuxièmes", "troisièmes", "quatrièmes", "cinquièmes", "sixièmes", "septièmes", "huitièmes", "neuvièmes", "dixièmes", "onzièmes", "douzièmes", "treizièmes", "quatorzièmes", "quinzièmes", "seizièmes", "dix-septièmes", "dix-huitièmes", "dix-neuvièmes" ] diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index bd4bf5518..90e233f84 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -5,6 +5,7 @@ mod ClearSpeak { mod large_ops; mod menclose; mod mfrac; + mod mroot; } mod SimpleSpeak { diff --git a/tests/Languages/fr/ClearSpeak/mroot.rs b/tests/Languages/fr/ClearSpeak/mroot.rs new file mode 100644 index 000000000..df2209fe9 --- /dev/null +++ b/tests/Languages/fr/ClearSpeak/mroot.rs @@ -0,0 +1,163 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn msqrt_simple() -> Result<()> { + let expr = " + x + "; + test("fr", "ClearSpeak", expr, "la racine carrée de x")?; + return Ok(()); + +} + +#[test] +fn msqrt_simple_end_root() -> Result<()> { + let expr = " + x + "; + test_ClearSpeak("fr", "ClearSpeak_Roots", "RootEnd", expr, "la racine carrée de x, fin de racine")?; + return Ok(()); + +} + +#[test] +fn msqrt_simple_positive() -> Result<()> { + let expr = " + x + "; + test_ClearSpeak("fr", "ClearSpeak_Roots", "PosNegSqRoot", expr, "la racine carrée positive de x")?; + return Ok(()); + +} + +#[test] +fn msqrt_simple_pos_end_root() -> Result<()> { + let expr = " + x + "; + test_ClearSpeak("fr", "ClearSpeak_Roots", "PosNegSqRootEnd", expr, "la racine carrée positive de x, fin de racine")?; + return Ok(()); + +} + +#[test] +fn msqrt_simple_pos_end_with_neg_root() -> Result<()> { + let expr = " + - x + - x 3 + "; + test_ClearSpeak("fr", "ClearSpeak_Roots", "PosNegSqRootEnd", expr, + "la racine carrée négative de x, fin de racine; moins, la racine cubique positive de x, fin de racine")?; + return Ok(()); + +} + +#[test] +fn mroot_simple_pos_end_with_neg_root() -> Result<()> { + let expr = " + - x 3 + - x + + "; + test_ClearSpeak("fr", "ClearSpeak_Roots", "PosNegSqRoot", expr, + "la racine cubique négative de x; moins la racine carrée positive de x")?; + return Ok(()); + +} + +#[test] +fn neg_without_root() -> Result<()> { + let expr = " + - x - y + "; + test("fr", "ClearSpeak", expr, "moins x moins y")?; + return Ok(()); + +} + +#[test] +fn msqrt() -> Result<()> { + let expr = " + + x + y + + "; + test("fr", "ClearSpeak", expr, "la racine carrée de x plus y")?; + return Ok(()); + +} + +#[test] +fn mroot_as_square_root() -> Result<()> { + let expr = " + x 2 + "; + test("fr", "ClearSpeak", expr, "la racine carrée de x")?; + return Ok(()); + +} + +#[test] +fn cube_root() -> Result<()> { + let expr = " + x 3 + "; + test("fr", "ClearSpeak", expr, "la racine cubique de x")?; + return Ok(()); + +} + +#[test] +fn ordinal_root() -> Result<()> { + let expr = " + x 9 + "; + test("fr", "ClearSpeak", expr, "la racine neuvième de x")?; + return Ok(()); + +} + +#[test] +fn simple_mi_root() -> Result<()> { + let expr = " + x n + "; + test("fr", "ClearSpeak", expr, "la racine n-ième de x")?; + return Ok(()); + +} + +#[test] +fn mroot_simple_pos_end_root() -> Result<()> { + let expr = " + x t + "; + test_ClearSpeak("fr", "ClearSpeak_Roots", "PosNegSqRootEnd", expr, "la racine t-ième positive de x, fin de racine")?; + return Ok(()); + +} + +#[test] +fn mroot_simple_end_root() -> Result<()> { + let expr = " + x + y + 21 + "; + test_ClearSpeak("fr", "ClearSpeak_Roots", "RootEnd", expr, "la racine vingt et unième de x plus y, fin de racine")?; + return Ok(()); + +} + +#[test] +fn simple_fraction_power() -> Result<()> { + let expr = " + + x + 13 + + "; + test("fr", "ClearSpeak", expr, "la racine 1 tiers de x")?; + return Ok(()); + +} From 479200ac9586c548678fd682f5ae5d3cce6f887c Mon Sep 17 00:00:00 2001 From: Olivier Thiffault Date: Mon, 29 Jun 2026 16:56:36 -0400 Subject: [PATCH 37/53] draft on ClearSpeak/msup.rs --- Rules/Languages/fr/ClearSpeak_Rules.yaml | 33 +- tests/Languages/fr.rs | 1 + tests/Languages/fr/ClearSpeak/msup.rs | 382 +++++++++++++++++++++++ 3 files changed, 409 insertions(+), 7 deletions(-) create mode 100644 tests/Languages/fr/ClearSpeak/msup.rs diff --git a/Rules/Languages/fr/ClearSpeak_Rules.yaml b/Rules/Languages/fr/ClearSpeak_Rules.yaml index b05ced734..c0c45ed41 100644 --- a/Rules/Languages/fr/ClearSpeak_Rules.yaml +++ b/Rules/Languages/fr/ClearSpeak_Rules.yaml @@ -317,23 +317,42 @@ - name: simple-integer tag: power - match: "*[2][self::m:mn][not(contains(., '.'))]" + match: "*[2][self::m:mn][not(contains(., $DecimalSeparators))]" replace: - x: "*[1]" - - T: "à la" # phrase(2 raised 'to the' power 7) + - test: + if: "$ClearSpeak_Exponents = 'Ordinal' and *[2][.>0]" + then: [T: "au"] # phrase(x 'au' deuxième) + else: [T: "à la"] # phrase(2 raised 'à la' puissance or deuxième puissance) - test: if: "*[2][.>0]" - then: [x: "ToOrdinal(*[2])"] - else: [x: "*[2]"] + then: + - x: "ToOrdinal(*[2])" + - test: + if: "$ClearSpeak_Exponents != 'Ordinal'" + then: [T: "puissance"] # phrase(2 raised to the 'power' 7) + else: + - test: + if: "$ClearSpeak_Exponents != 'Ordinal'" + then: [T: "puissance"] # phrase(2 raised to the 'power' 7) + - x: "*[2]" + +- name: simple-decimal + tag: power + match: "*[2][self::m:mn][contains(., $DecimalSeparators)]" + replace: + - x: "*[1]" - test: - if: "$ClearSpeak_Exponents != 'Ordinal'" - then: [T: "puissance"] # phrase(2 raised to the 'power' 7) + if: "$ClearSpeak_Exponents = 'AfterPower'" + then: [T: "à la puissance de"] # phrase(x 'raised to the power' 5.0) + else: [T: "à la puissance"] # phrase(x 'raised to the power' 5.0) + - x: "*[2]" - name: simple-negative-integer tag: power match: - "*[2][self::m:minus and count(*)=1 and " - - " *[1][self::m:mn][not(contains(., '.'))]" + - " *[1][self::m:mn][not(contains(., $DecimalSeparators))]" - " ]" replace: - x: "*[1]" diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index 90e233f84..59845d742 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -6,6 +6,7 @@ mod ClearSpeak { mod menclose; mod mfrac; mod mroot; + mod msup; } mod SimpleSpeak { diff --git a/tests/Languages/fr/ClearSpeak/msup.rs b/tests/Languages/fr/ClearSpeak/msup.rs new file mode 100644 index 000000000..80a989151 --- /dev/null +++ b/tests/Languages/fr/ClearSpeak/msup.rs @@ -0,0 +1,382 @@ +/// Tests for superscripts +/// simple superscripts +/// complex/nested superscripts +use crate::common::*; +use anyhow::Result; + +#[test] +fn squared() -> Result<()> { + let expr = " + x 2 + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "x au carré")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "x au deuxième")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "x à la deuxième puissance")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "x à la puissance de 2")?; + + return Ok(()); + +} + +#[test] +fn cubed() -> Result<()> { + let expr = " + x 3 + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "x au cube")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "x au troisième")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "x à la troisième puissance")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "x à la puissance de 3")?; + return Ok(()); + +} + +#[test] +fn ordinal_power() -> Result<()> { + let expr = " + 3 5 + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 à la cinquième puissance")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 au cinquième")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 à la cinquième puissance")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 à la puissance de 5")?; + return Ok(()); + +} + + +#[test] +fn zero_power() -> Result<()> { + let expr = " + 3 0 + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 à la puissance 0")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 au 0")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 à la puissance 0")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 à la puissance de 0")?; + return Ok(()); + +} + +#[test] +fn simple_mi_power() -> Result<()> { + let expr = " + 4 x + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "4 à la x-ième puissance")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "4 à la x-ième")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "4 à la x-ième puissance")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "4 à la puissance de x")?; + return Ok(()); + +} + +#[test] +fn decimal_power() -> Result<()> { + let expr = " + 3 5,0 + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 à la puissance 5,0")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 à la puissance 5,0")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 à la puissance 5,0")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 à la puissance de 5,0")?; + return Ok(()); + +} + +#[test] +fn non_simple_power() -> Result<()> { + let expr = " + 3 y+2 + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 raised to the y plus 2 power")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 raised to the y plus 2 power")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 raised to the y plus 2 power")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the power y plus 2")?; + return Ok(()); + +} + +#[test] +fn negative_power() -> Result<()> { + let expr = " + 3 - 2 + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 to the negative 2 power")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 to the negative 2")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 to the negative 2 power")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the power negative 2")?; + return Ok(()); + +} + +#[test] +fn simple_fraction_power() -> Result<()> { + let expr = " + + x + 13 + + "; + test("fr", "ClearSpeak", expr, "x raised to the 1 third power")?; + return Ok(()); + +} + +#[test] +fn nested_squared_power_with_coef() -> Result<()> { + let expr = " + + + 3 + + 2 + + x + 2 + + + + + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 raised to the 2 x squared power")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 raised to the exponent, 2 x to the second, end exponent")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 raised to the exponent, 2 x to the second power, end exponent")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the exponent, 2 x raised to the power 2; end exponent")?; + + return Ok(()); + +} + +#[test] +fn nested_squared_power_with_neg_coef() -> Result<()> { + let expr = " + + + 3 + + - + 2 + + x + 2 + + + + + "; + test("fr", "ClearSpeak", expr, "3 raised to the negative 2 x squared power")?; + return Ok(()); + +} + + +#[test] +fn nested_cubed_power() -> Result<()> { + let expr = " + + y + + 45 + 3 + + + "; + test("fr", "ClearSpeak", expr, "y raised to the 4 fifths cubed power")?; + return Ok(()); + +} + +#[test] +fn nested_cubed_power_with_neg_base() -> Result<()> { + let expr = " + + y + + - + + 45 + 3 + + + + "; + test("fr", "ClearSpeak", expr, "y raised to the negative 4 fifths cubed power")?; + return Ok(()); + +} + +#[test] +fn nested_number_times_squared() -> Result<()> { + let expr = " + + + e + + + 1 + 2 + + + x + 2 + + + + + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "e raised to the 1 half x squared power")?; + return Ok(()); + +} + +#[test] +fn nested_negative_number_times_squared() -> Result<()> { + let expr = " + + + e + + + 1 + 2 + + + x + 2 + + + + + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "e raised to the negative 1 half x squared power")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "e raised to the exponent, negative 1 half x to the second, end exponent")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "e raised to the exponent, negative 1 half x to the second power, end exponent")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "e raised to the exponent, negative 1 half x raised to the power 2; end exponent")?; + return Ok(()); + +} + +#[test] +fn nested_expr_to_tenth() -> Result<()> { + let expr = " + + + 3 + + + 3 + + 10 + + + + + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 raised to the exponent, 3 to the tenth power, end exponent")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 raised to the exponent, 3 to the tenth, end exponent")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 raised to the exponent, 3 to the tenth power, end exponent")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the exponent, 3 raised to the power 10; end exponent")?; + + return Ok(()); + +} + +#[test] +fn nested_non_simple_squared_exp() -> Result<()> { + let expr = " + + + 3 + + + + ( + + x+1 + ) + 2 + + + + + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 raised to the exponent, open paren x plus 1, close paren squared, end exponent")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 raised to the exponent, open paren x plus 1, close paren to the second, end exponent")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 raised to the exponent, open paren x plus 1, close paren to the second power, end exponent")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the exponent, open paren x plus 1, close paren raised to the power 2; end exponent")?; + return Ok(()); + +} + +#[test] +fn nested_default_power() -> Result<()> { + let expr = " + + t + + 45 + n + + +"; + test("fr", "ClearSpeak", expr, "t raised to the exponent, 4 fifths to the n-th power, end exponent")?; + return Ok(()); + +} + +#[test] +fn nested_complex_power() -> Result<()> { + let expr = " + + + e + + + 1 + 2 + + + + ( + + + + xμ + σ + + + ) + 2 + + + + + "; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, + "e raised to the exponent, negative 1 half times; open paren; the fraction with numerator; x minus mu; and denominator sigma; close paren squared, end exponent")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, + "e raised to the exponent, negative 1 half times; open paren; the fraction with numerator; x minus mu; and denominator sigma; close paren to the second, end exponent")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, + "e raised to the exponent, negative 1 half times; open paren; the fraction with numerator; x minus mu; and denominator sigma; close paren to the second power, end exponent")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, + "e raised to the exponent, negative 1 half times; open paren; the fraction with numerator; x minus mu; and denominator sigma; close paren raised to the power 2; end exponent")?; + return Ok(()); + +} + +#[test] +fn default_power() -> Result<()> { + let expr = " + + t + + b+1 + 3 + + + "; + test("fr", "ClearSpeak", expr, "t raised to the fraction with numerator; b plus 1; and denominator 3; power")?; + return Ok(()); + +} From fa33df5c67a3d0110f0c4e41ef4e926acb847f9f Mon Sep 17 00:00:00 2001 From: Olivier Thiffault Date: Wed, 1 Jul 2026 11:03:59 -0400 Subject: [PATCH 38/53] completed tests and modifs for msup.rs --- Rules/Languages/fr/ClearSpeak_Rules.yaml | 29 ++++---- tests/Languages/fr/ClearSpeak/msup.rs | 84 ++++++++++++------------ 2 files changed, 55 insertions(+), 58 deletions(-) diff --git a/Rules/Languages/fr/ClearSpeak_Rules.yaml b/Rules/Languages/fr/ClearSpeak_Rules.yaml index c0c45ed41..3622df3f9 100644 --- a/Rules/Languages/fr/ClearSpeak_Rules.yaml +++ b/Rules/Languages/fr/ClearSpeak_Rules.yaml @@ -284,7 +284,7 @@ - "*[2][self::m:power or self::m:power or self::m:mrow[m:power]]" replace: - x: "*[1]" - - T: "à la puissance de" # phrase(5 'raised to the exponent' x plus 1) + - T: "élevé à l'exposant" # phrase(5 'raised to the exponent' x plus 1) - pause: short - x: "*[2]" - pause: short @@ -295,7 +295,7 @@ match: "$ClearSpeak_Exponents = 'AfterPower'" replace: - x: "*[1]" - - T: "à la puissance de" # phrase(x is 'raised to the power' 4) + - T: "élevé à la puissance" # phrase(x is 'raised to the power' 4) - x: "*[2]" - pause: short @@ -356,11 +356,13 @@ - " ]" replace: - x: "*[1]" - - T: "à la" # phrase(2 raised 'to the' power 7) - - x: "*[2]" - test: - if: "$ClearSpeak_Exponents != 'Ordinal'" - then: [T: "puissance"] # phrase(2 raised to the 'power' 7) + - if: "$ClearSpeak_Exponents = 'AfterPower'" + then: [T: "élevé à la puissance"] # phrase(3 'raised to the power' negative 2) + - else_if: "$ClearSpeak_Exponents = 'Ordinal'" + then: [T: "à la"] # phrase(3 'to the' negative 2) + else: [T: "à la puissance"] # phrase(3 'to the power' negative 2) + - x: "*[2]" - name: simple-var tag: power @@ -397,9 +399,8 @@ - " ]" replace: - x: "*[1]" - - T: "élevé à la" # phrase(x 'raised to the' second power) + - T: "élevé à la puissance" # phrase(x 'raised to the' second power) - x: "*[2]" - - T: "puissance" # phrase(x raised to the second 'power') - # - [xxx]^n name: nested-negative-squared-or-cubed @@ -418,9 +419,8 @@ - " ]" replace: - x: "*[1]" - - T: "élevé à la" # phrase(x 'raised to the' second power) + - T: "élevé à la puissance" - x: "*[2]" - - T: "puissance" # phrase(x raised to the second 'power') - # [xxx] var^n name: nested-var-squared-or-cubed @@ -441,9 +441,8 @@ - " ]" replace: - x: "*[1]" - - T: "élevé à la" # phrase(x 'raised to the' second power) + - T: "élevé à la puissance" - x: "*[2]" - - T: "puissance" # phrase(x raised to the second 'power') - # -[xxx] var^n name: nested-negative-var-squared-or-cubed @@ -466,9 +465,8 @@ - " ]" replace: - x: "*[1]" - - T: "élevé à la" # phrase(x 'raised to the' second power) + - T: "élevé à la puissance" - x: "*[2]" - - T: "puissance" # phrase(x raised to the second 'power') - name: default-exponent-power tag: power @@ -487,9 +485,8 @@ match: "." replace: - x: "*[1]" - - T: "élevé à la" # phrase(x 'raised to the' second power) + - T: "élevé à la puissance" # phrase(x 'raised to the power') - x: "*[2]" - - T: "puissance" # phrase(x raised to the second 'power') # # Some rules on mrows diff --git a/tests/Languages/fr/ClearSpeak/msup.rs b/tests/Languages/fr/ClearSpeak/msup.rs index 80a989151..9ed84738b 100644 --- a/tests/Languages/fr/ClearSpeak/msup.rs +++ b/tests/Languages/fr/ClearSpeak/msup.rs @@ -12,7 +12,7 @@ fn squared() -> Result<()> { test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "x au carré")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "x au deuxième")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "x à la deuxième puissance")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "x à la puissance de 2")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "x élevé à la puissance 2")?; return Ok(()); @@ -26,7 +26,7 @@ fn cubed() -> Result<()> { test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "x au cube")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "x au troisième")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "x à la troisième puissance")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "x à la puissance de 3")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "x élevé à la puissance 3")?; return Ok(()); } @@ -39,7 +39,7 @@ fn ordinal_power() -> Result<()> { test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 à la cinquième puissance")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 au cinquième")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 à la cinquième puissance")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 à la puissance de 5")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 élevé à la puissance 5")?; return Ok(()); } @@ -51,9 +51,9 @@ fn zero_power() -> Result<()> { 3 0 "; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 à la puissance 0")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 au 0")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 à la 0")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 à la puissance 0")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 à la puissance de 0")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 élevé à la puissance 0")?; return Ok(()); } @@ -66,7 +66,7 @@ fn simple_mi_power() -> Result<()> { test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "4 à la x-ième puissance")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "4 à la x-ième")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "4 à la x-ième puissance")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "4 à la puissance de x")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "4 élevé à la puissance x")?; return Ok(()); } @@ -79,7 +79,7 @@ fn decimal_power() -> Result<()> { test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 à la puissance 5,0")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 à la puissance 5,0")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 à la puissance 5,0")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 à la puissance de 5,0")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 élevé à la puissance 5,0")?; return Ok(()); } @@ -89,10 +89,10 @@ fn non_simple_power() -> Result<()> { let expr = " 3 y+2 "; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 raised to the y plus 2 power")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 raised to the y plus 2 power")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 raised to the y plus 2 power")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the power y plus 2")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 élevé à la puissance y plus 2")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 élevé à la puissance y plus 2")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 élevé à la puissance y plus 2")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 élevé à la puissance y plus 2")?; return Ok(()); } @@ -102,10 +102,10 @@ fn negative_power() -> Result<()> { let expr = " 3 - 2 "; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 to the negative 2 power")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 to the negative 2")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 to the negative 2 power")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the power negative 2")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 à la puissance moins 2")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 à la moins 2")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 à la puissance moins 2")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 élevé à la puissance moins 2")?; return Ok(()); } @@ -118,7 +118,7 @@ fn simple_fraction_power() -> Result<()> { 13 "; - test("fr", "ClearSpeak", expr, "x raised to the 1 third power")?; + test("fr", "ClearSpeak", expr, "x élevé à la puissance 1 tiers")?; return Ok(()); } @@ -139,10 +139,10 @@ fn nested_squared_power_with_coef() -> Result<()> { "; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 raised to the 2 x squared power")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 raised to the exponent, 2 x to the second, end exponent")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 raised to the exponent, 2 x to the second power, end exponent")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the exponent, 2 x raised to the power 2; end exponent")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 élevé à la puissance 2 x au carré")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 élevé à l'exposant, 2 x au deuxième, fin de l'exposant")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 élevé à l'exposant, 2 x à la deuxième puissance, fin de l'exposant")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 élevé à l'exposant, 2 x élevé à la puissance 2; fin de l'exposant")?; return Ok(()); @@ -165,7 +165,7 @@ fn nested_squared_power_with_neg_coef() -> Result<()> { "; - test("fr", "ClearSpeak", expr, "3 raised to the negative 2 x squared power")?; + test("fr", "ClearSpeak", expr, "3 élevé à la puissance moins 2 x au carré")?; return Ok(()); } @@ -182,7 +182,7 @@ fn nested_cubed_power() -> Result<()> { "; - test("fr", "ClearSpeak", expr, "y raised to the 4 fifths cubed power")?; + test("fr", "ClearSpeak", expr, "y élevé à la puissance 4 cinquièmes au cube")?; return Ok(()); } @@ -201,7 +201,7 @@ fn nested_cubed_power_with_neg_base() -> Result<()> { "; - test("fr", "ClearSpeak", expr, "y raised to the negative 4 fifths cubed power")?; + test("fr", "ClearSpeak", expr, "y élevé à la puissance moins 4 cinquièmes au cube")?; return Ok(()); } @@ -225,7 +225,7 @@ fn nested_number_times_squared() -> Result<()> { "; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "e raised to the 1 half x squared power")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "e élevé à la puissance 1 demi x au carré")?; return Ok(()); } @@ -249,10 +249,10 @@ fn nested_negative_number_times_squared() -> Result<()> { "; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "e raised to the negative 1 half x squared power")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "e raised to the exponent, negative 1 half x to the second, end exponent")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "e raised to the exponent, negative 1 half x to the second power, end exponent")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "e raised to the exponent, negative 1 half x raised to the power 2; end exponent")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "e élevé à la puissance moins 1 demi x au carré")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "e élevé à l'exposant, moins 1 demi x au deuxième, fin de l'exposant")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "e élevé à l'exposant, moins 1 demi x à la deuxième puissance, fin de l'exposant")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "e élevé à l'exposant, moins 1 demi x élevé à la puissance 2; fin de l'exposant")?; return Ok(()); } @@ -273,10 +273,10 @@ fn nested_expr_to_tenth() -> Result<()> { "; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 raised to the exponent, 3 to the tenth power, end exponent")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 raised to the exponent, 3 to the tenth, end exponent")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 raised to the exponent, 3 to the tenth power, end exponent")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the exponent, 3 raised to the power 10; end exponent")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 élevé à l'exposant, 3 à la dixième puissance, fin de l'exposant")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 élevé à l'exposant, 3 au dixième, fin de l'exposant")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 élevé à l'exposant, 3 à la dixième puissance, fin de l'exposant")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 élevé à l'exposant, 3 élevé à la puissance 10; fin de l'exposant")?; return Ok(()); @@ -301,10 +301,10 @@ fn nested_non_simple_squared_exp() -> Result<()> { "; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 raised to the exponent, open paren x plus 1, close paren squared, end exponent")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 raised to the exponent, open paren x plus 1, close paren to the second, end exponent")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 raised to the exponent, open paren x plus 1, close paren to the second power, end exponent")?; - test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 raised to the exponent, open paren x plus 1, close paren raised to the power 2; end exponent")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 élevé à l'exposant, parenthèse gauche, x plus 1, parenthèse droite au carré, fin de l'exposant")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 élevé à l'exposant, parenthèse gauche, x plus 1, parenthèse droite au deuxième, fin de l'exposant")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 élevé à l'exposant, parenthèse gauche, x plus 1, parenthèse droite à la deuxième puissance, fin de l'exposant")?; + test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 élevé à l'exposant, parenthèse gauche, x plus 1, parenthèse droite élevé à la puissance 2; fin de l'exposant")?; return Ok(()); } @@ -320,7 +320,7 @@ fn nested_default_power() -> Result<()> { "; - test("fr", "ClearSpeak", expr, "t raised to the exponent, 4 fifths to the n-th power, end exponent")?; + test("fr", "ClearSpeak", expr, "t élevé à l'exposant, 4 cinquièmes à la n-ième puissance, fin de l'exposant")?; return Ok(()); } @@ -354,13 +354,13 @@ fn nested_complex_power() -> Result<()> { "; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, - "e raised to the exponent, negative 1 half times; open paren; the fraction with numerator; x minus mu; and denominator sigma; close paren squared, end exponent")?; + "e élevé à l'exposant, moins 1 demi fois; parenthèse gauche; la fraction avec numérateur; x moins mû; et dénominateur sigma; parenthèse droite au carré, fin de l'exposant")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, - "e raised to the exponent, negative 1 half times; open paren; the fraction with numerator; x minus mu; and denominator sigma; close paren to the second, end exponent")?; + "e élevé à l'exposant, moins 1 demi fois; parenthèse gauche; la fraction avec numérateur; x moins mû; et dénominateur sigma; parenthèse droite au deuxième, fin de l'exposant")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, - "e raised to the exponent, negative 1 half times; open paren; the fraction with numerator; x minus mu; and denominator sigma; close paren to the second power, end exponent")?; + "e élevé à l'exposant, moins 1 demi fois; parenthèse gauche; la fraction avec numérateur; x moins mû; et dénominateur sigma; parenthèse droite à la deuxième puissance, fin de l'exposant")?; test_prefs("fr", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, - "e raised to the exponent, negative 1 half times; open paren; the fraction with numerator; x minus mu; and denominator sigma; close paren raised to the power 2; end exponent")?; + "e élevé à l'exposant, moins 1 demi fois; parenthèse gauche; la fraction avec numérateur; x moins mû; et dénominateur sigma; parenthèse droite élevé à la puissance 2; fin de l'exposant")?; return Ok(()); } @@ -376,7 +376,7 @@ fn default_power() -> Result<()> { "; - test("fr", "ClearSpeak", expr, "t raised to the fraction with numerator; b plus 1; and denominator 3; power")?; + test("fr", "ClearSpeak", expr, "t élevé à la puissance la fraction avec numérateur; b plus 1; et dénominateur 3")?; return Ok(()); } From fc29a3e5253b1efc669aeba6e470265ae0dacf5e Mon Sep 17 00:00:00 2001 From: Olivier Thiffault Date: Wed, 1 Jul 2026 11:23:01 -0400 Subject: [PATCH 39/53] added tests and modifs for multiline.rs --- Rules/Languages/fr/ClearSpeak_Rules.yaml | 4 +- tests/Languages/fr.rs | 1 + tests/Languages/fr/ClearSpeak/multiline.rs | 192 +++++++++++++++++++++ 3 files changed, 195 insertions(+), 2 deletions(-) create mode 100644 tests/Languages/fr/ClearSpeak/multiline.rs diff --git a/Rules/Languages/fr/ClearSpeak_Rules.yaml b/Rules/Languages/fr/ClearSpeak_Rules.yaml index 3622df3f9..9ec71fb36 100644 --- a/Rules/Languages/fr/ClearSpeak_Rules.yaml +++ b/Rules/Languages/fr/ClearSpeak_Rules.yaml @@ -668,8 +668,8 @@ then: [T: "étape"] # phrase(this is the first 'step' of three steps) # else 'None -- don't say anything' - test: - - if: "$LineCount != 1" - then: [CT: "s"] # plural # phrase(shown by the letter 's') + - if: "$LineCount != 1 and not(($ClearSpeak_MultiLineLabel = 'Auto' and self::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case')" + then: [CT: "s"] # plural (but not for 'cas' which is invariable in French) - pause: short - x: "*" - pause: long diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index 59845d742..a8116bab8 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -7,6 +7,7 @@ mod ClearSpeak { mod mfrac; mod mroot; mod msup; + mod multiline; } mod SimpleSpeak { diff --git a/tests/Languages/fr/ClearSpeak/multiline.rs b/tests/Languages/fr/ClearSpeak/multiline.rs new file mode 100644 index 000000000..bbe7af46a --- /dev/null +++ b/tests/Languages/fr/ClearSpeak/multiline.rs @@ -0,0 +1,192 @@ +use crate::common::*; +use anyhow::Result; + + +#[test] +fn case_1() -> Result<()> { + let expr = " + f + + ( + x + ) + + = + + { + + -1six<0 + 0six=0 + 1six>0 + + + + "; + test_ClearSpeak("fr", "ClearSpeak_MultiLineLabel", "Auto", expr, + "f de x est égal à; 3 cas; \ + cas 1; moins 1 si x est inférieur à 0; \ + cas 2; 0 si x est égal à 0; \ + cas 3; 1 si x est supérieur à 0" + )?; + return Ok(()); +} + +#[test] +fn equation_auto() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("fr", "ClearSpeak_MultiLineLabel", "Auto", expr, + "2 lignes; \ + ligne 1; x plus y, est égal à 7; \ + ligne 2; 2 x plus 3 y; est égal à 17")?; + return Ok(()); +} + + +#[test] +fn equation_plus_at_start() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("fr", "ClearSpeak_MultiLineLabel", "Auto", expr, "2 lignes; \ + ligne 1; x plus y est égal à 7; \ + ligne 2; 2 x, plus 3 y, est égal à 17")?; + return Ok(()); +} + +#[test] +fn equation_case() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("fr", "ClearSpeak_MultiLineLabel", "Case", expr, + "2 cas; cas 1; x plus y, est égal à 7; cas 2; 2 x plus 3 y; est égal à 17")?; + return Ok(()); +} + +#[test] +fn equation_constraint() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("fr", "ClearSpeak_MultiLineLabel", "Constraint", expr, "2 contraintes; \ + contrainte 1; x plus y, est égal à 7; \ + contrainte 2; 2 x plus 3 y; est égal à 17")?; + return Ok(()); +} + +#[test] +fn equation_equation() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("fr", "ClearSpeak_MultiLineLabel", "Equation", expr, "2 équations; \ + équation 1; x plus y, est égal à 7; \ + équation 2; 2 x plus 3 y; est égal à 17")?; + return Ok(()); +} + +#[test] +fn equation_line() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("fr", "ClearSpeak_MultiLineLabel", "Line", expr, "2 lignes; \ + ligne 1; x plus y, est égal à 7; \ + ligne 2; 2 x plus 3 y; est égal à 17")?; + return Ok(()); +} + +#[test] +fn equation_none() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("fr", "ClearSpeak_MultiLineLabel", "None", expr, + "2 lignes; \ + x plus y, est égal à 7; \ + 2 x plus 3 y; est égal à 17")?; + return Ok(()); +} + +#[test] +fn equation_row() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("fr", "ClearSpeak_MultiLineLabel", "Row", expr, "2 rangées; \ + rangée 1; x plus y, est égal à 7; \ + rangée 2; 2 x plus 3 y; est égal à 17")?; + return Ok(()); +} + +#[test] +fn equation_step() -> Result<()> { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("fr", "ClearSpeak_MultiLineLabel", "Step", expr, "2 étapes; \ + étape 1; x plus y, est égal à 7; \ + étape 2; 2 x plus 3 y; est égal à 17")?; + return Ok(()); +} + +#[test] +fn continued_row() -> Result<()> { + let expr = " + + x=y + +1 + y=1 + +"; +test("fr", "SimpleSpeak", expr, + "2 équations; équation 1; x est égal à y plus 1; équation 2; y est égal à 1")?; + return Ok(()); +} From 34494732a4910a61b12f33a75312e30b9a84fa1b Mon Sep 17 00:00:00 2001 From: Olivier Thiffault Date: Wed, 1 Jul 2026 12:05:10 -0400 Subject: [PATCH 40/53] added tests and modifs for sets.rs --- Rules/Languages/fr/ClearSpeak_Rules.yaml | 12 +- Rules/Languages/fr/unicode.yaml | 4 +- tests/Languages/fr.rs | 1 + tests/Languages/fr/ClearSpeak/sets.rs | 531 +++++++++++++++++++++++ 4 files changed, 540 insertions(+), 8 deletions(-) create mode 100644 tests/Languages/fr/ClearSpeak/sets.rs diff --git a/Rules/Languages/fr/ClearSpeak_Rules.yaml b/Rules/Languages/fr/ClearSpeak_Rules.yaml index 9ec71fb36..92f65e557 100644 --- a/Rules/Languages/fr/ClearSpeak_Rules.yaml +++ b/Rules/Languages/fr/ClearSpeak_Rules.yaml @@ -522,14 +522,14 @@ then: - test: if: "$Verbosity!='Terse'" - then: [T: "l'"] # phrase('the' empty set) - - T: "ensemble vide" # phrase(the 'empty set') + then: [T: "l'ensemble vide"] # phrase('the empty set') + else: [T: "ensemble vide"] # phrase('empty set') - else_if: "count(*[1]/*)=3 and *[1]/*[2][self::m:mo][.=':' or .='|' or .='∣']" then: - test: if: "$Verbosity!='Terse'" - then: [T: "l'"] # phrase('the' set of all integers) - - T: "ensemble de" # phrase(this is a 'set of' numbers) + then: [T: "l'ensemble de"] # phrase('the set of' all integers) + else: [T: "ensemble de"] # phrase(this is a 'set of' numbers) - test: if: "$ClearSpeak_Sets != 'woAll'" then: [T: "tous"] # phrase(the set of 'all' integers) @@ -542,8 +542,8 @@ then: - test: if: "$Verbosity!='Terse'" - then: [T: "l'"] # phrase('the' set of integers) - - T: "ensemble" # phrase(this is a 'set' of integers) + then: [T: "l'ensemble"] # phrase('the set' of integers) + else: [T: "ensemble"] # 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 diff --git a/Rules/Languages/fr/unicode.yaml b/Rules/Languages/fr/unicode.yaml index b1542a694..10d15c703 100644 --- a/Rules/Languages/fr/unicode.yaml +++ b/Rules/Languages/fr/unicode.yaml @@ -364,12 +364,12 @@ if: "../../self::m:set or ../../../self::m:set" # inside a set then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' - then: [T: "en"] # (en: 'in', DeepL translation) + then: [T: "dans"] # (en: 'in', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Member' then: [T: "membre de"] # (en: 'member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' then: [T: "élément de"] # (en: 'element of', DeepL translation) - - else: [T: "appartient à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to') + - else: [T: "appartenant à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to') else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' then: [T: "est membre de"] # (en: 'is a member of', DeepL translation) diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index a8116bab8..843104b34 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -8,6 +8,7 @@ mod ClearSpeak { mod mroot; mod msup; mod multiline; + mod sets; } mod SimpleSpeak { diff --git a/tests/Languages/fr/ClearSpeak/sets.rs b/tests/Languages/fr/ClearSpeak/sets.rs new file mode 100644 index 000000000..4b180c1b1 --- /dev/null +++ b/tests/Languages/fr/ClearSpeak/sets.rs @@ -0,0 +1,531 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn complex() -> Result<()> { + let expr = " + + "; + test("fr", "ClearSpeak", expr, "les nombres complexes")?; + return Ok(()); + +} + +#[test] +fn natural() -> Result<()> { + let expr = " + + "; + test("fr", "ClearSpeak", expr, "les nombres naturels")?; + return Ok(()); + +} + +#[test] +fn rationals() -> Result<()> { + let expr = " + + "; + test("fr", "ClearSpeak", expr, "les nombres rationnels")?; + return Ok(()); + +} + +#[test] +fn reals() -> Result<()> { + let expr = " + + "; + test("fr", "ClearSpeak", expr, "les nombres réels")?; + return Ok(()); + +} + +#[test] +fn integers() -> Result<()> { + let expr = " + + "; + test("fr", "ClearSpeak", expr, "les nombres entiers")?; + return Ok(()); + +} + + + +#[test] +fn msup_complex() -> Result<()> { + let expr = " + + + 2 + + "; + test("fr", "ClearSpeak", expr, "C 2")?; + return Ok(()); + +} + +#[test] +fn msup_natural() -> Result<()> { + let expr = " + + + 2 + + "; + test("fr", "ClearSpeak", expr, "N 2")?; + return Ok(()); + +} + +#[test] +fn msup_rationals() -> Result<()> { + let expr = " + + + 2 + + "; + test("fr", "ClearSpeak", expr, "Q 2")?; + return Ok(()); + +} + +#[test] +fn msup_reals() -> Result<()> { + let expr = " + + + 3 + + "; + test("fr", "ClearSpeak", expr, "R 3")?; + return Ok(()); + +} + +#[test] +fn msup_integers() -> Result<()> { + let expr = " + + + 4 + + "; + test("fr", "ClearSpeak", expr, "Z 4")?; + return Ok(()); + +} + +#[test] +fn msup_positive_integers() -> Result<()> { + let expr = " + + + + + + "; + test("fr", "ClearSpeak", expr, "les nombres entiers positifs")?; + return Ok(()); + +} + +#[test] +fn msup_negative_integers() -> Result<()> { + let expr = " + + + - + + "; + test("fr", "ClearSpeak", expr, "les nombres entiers négatifs")?; + return Ok(()); + +} + +#[test] +fn msup_positive_rationals() -> Result<()> { + let expr = " + + + + + + "; + test("fr", "ClearSpeak", expr, "les nombres rationnels positifs")?; + return Ok(()); + +} + +#[test] +fn msup_negative_rationals() -> Result<()> { + let expr = " + + + - + + "; + test("fr", "ClearSpeak", expr, "les nombres rationnels négatifs")?; + return Ok(()); + +} + +#[test] +fn empty_set() -> Result<()> { + let expr = " + { } + "; + test("fr", "ClearSpeak", expr, "l'ensemble vide")?; + return Ok(()); + +} + +#[test] +fn single_element_set() -> Result<()> { + let expr = " + { 12} + "; + test("fr", "ClearSpeak", expr, "l'ensemble 12")?; + return Ok(()); + +} + +#[test] +fn multiple_element_set() -> Result<()> { + let expr = " + { 5 , 10 , 15 } + "; + test("fr", "ClearSpeak", expr, "l'ensemble 5 virgule, 10 virgule, 15")?; + return Ok(()); + +} + +#[test] +fn set_with_colon() -> Result<()> { + let expr = " + { x:x>2 } + "; + test("fr", "ClearSpeak", expr, "l'ensemble de tous x tel que x est supérieur à 2")?; + return Ok(()); + +} + +#[test] +fn set_with_bar() -> Result<()> { + let expr = " + { x|x>2 } + "; + test("fr", "ClearSpeak", expr, "l'ensemble de tous x tel que x est supérieur à 2")?; + return Ok(()); + +} + +#[test] +fn element_alone() -> Result<()> { + let expr = " + 3+2i + "; + test("fr", "ClearSpeak", expr, "3 plus 2 i, n'est pas membre de, les nombres réels")?; + return Ok(()); + +} + +#[test] +fn element_under_sum() -> Result<()> { + let expr = " + + + i + + + 1 + i 2 + + "; + test("fr", "ClearSpeak", expr, + "la sommation sur i est membre de les nombres entiers de; la fraction avec numérateur 1; et dénominateur i au carré")?; + return Ok(()); + +} + +#[test] +fn complicated_set_with_colon() -> Result<()> { + let expr = " + { + x + + + : + 2 + < + x + < + 7 + } + "; + test("fr", "ClearSpeak", expr, "l'ensemble de tous x dans les nombres entiers tel que 2 est inférieur à x est inférieur à 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 est un nombre pair + } + "; + test("fr", "ClearSpeak", expr, + "l'ensemble de tous x dans les nombres naturels tel que x est un nombre pair")?; + return Ok(()); + +} + + +#[test] +fn set_with_bar_member() -> Result<()> { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak("fr", "ClearSpeak_SetMemberSymbol", "Member", + expr, "l'ensemble de tous x membre de les nombres entiers tel que x est supérieur à 5")?; + return Ok(()); + +} + +#[test] +fn element_alone_member() -> Result<()> { + let expr = " + 3+2i + "; + test_ClearSpeak("fr", "ClearSpeak_SetMemberSymbol", "Member", + expr, "3 plus 2 i, n'est pas membre de, les nombres réels")?; + return Ok(()); + +} + +#[test] +fn element_under_sum_member() -> Result<()> { + let expr = " + + + i + + + 1 + i 2 + + "; + test_ClearSpeak("fr", "ClearSpeak_SetMemberSymbol", "Member", + expr, "la sommation sur i est membre de les nombres entiers de; la fraction avec numérateur 1; et dénominateur i au carré")?; + return Ok(()); + +} + + +#[test] +fn set_with_bar_element() -> Result<()> { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak("fr", "ClearSpeak_SetMemberSymbol", "Element", + expr, "l'ensemble de tous x élément de les nombres entiers tel que x est supérieur à 5")?; + return Ok(()); + +} + +#[test] +fn element_alone_element() -> Result<()> { + let expr = " + 3+2i + "; + test_ClearSpeak("fr", "ClearSpeak_SetMemberSymbol", "Element", + expr, "3 plus 2 i, n'est pas un élément de, les nombres réels")?; + return Ok(()); + +} + +#[test] +fn element_under_sum_element() -> Result<()> { + let expr = " + + + i + + + 1 + i 2 + + "; + test_ClearSpeak("fr", "ClearSpeak_SetMemberSymbol", "Element", + expr, "la sommation sur i est un élément de, les nombres entiers de; la fraction avec numérateur 1; et dénominateur i au carré")?; + return Ok(()); + +} + +#[test] +fn set_with_bar_in() -> Result<()> { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak("fr", "ClearSpeak_SetMemberSymbol", "In", + expr, "l'ensemble de tous x dans les nombres entiers tel que x est supérieur à 5")?; + return Ok(()); + +} + +#[test] +fn element_alone_in() -> Result<()> { + let expr = " + 3+2i + "; + test_ClearSpeak("fr", "ClearSpeak_SetMemberSymbol", "In", + expr, "3 plus 2 i, n'est pas dans les nombres réels")?; + return Ok(()); + +} + +#[test] +fn element_under_sum_in() -> Result<()> { + let expr = " + + + i + + + 1 + i 2 + + "; + test_ClearSpeak("fr", "ClearSpeak_SetMemberSymbol", "In", + expr, "la sommation sur i est dans les nombres entiers de; la fraction avec numérateur 1; et dénominateur i au carré")?; + return Ok(()); + +} + +#[test] +fn set_with_bar_belongs() -> Result<()> { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak("fr", "ClearSpeak_SetMemberSymbol", "Belongs", + expr, "l'ensemble de tous x appartenant à les nombres entiers tel que x est supérieur à 5")?; + return Ok(()); + +} + +#[test] +fn element_alone_belongs() -> Result<()> { + let expr = " + 3+2i + "; + test_ClearSpeak("fr", "ClearSpeak_SetMemberSymbol", "Belongs", + expr, "3 plus 2 i, n'appartient pas à, les nombres réels")?; + return Ok(()); + +} + +#[test] +fn element_under_sum_belongs() -> Result<()> { + let expr = " + + + i + + + 1 + i 2 + + "; + test_ClearSpeak("fr", "ClearSpeak_SetMemberSymbol", "Belongs", + expr, "la sommation sur i appartient à les nombres entiers de; la fraction avec numérateur 1; et dénominateur i au carré")?; + return Ok(()); + +} + + +#[test] +fn set_member_woall() -> Result<()> { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak_prefs("fr", vec![("ClearSpeak_SetMemberSymbol", "Member"), ("ClearSpeak_Sets", "woAll")], + expr, "l'ensemble de x membre de les nombres entiers tel que x est supérieur à 5")?; + return Ok(()); + +} + +#[test] +fn multiple_element_set_woall() -> Result<()> { + let expr = " + { 5 , 10 , 15 } + "; + test_ClearSpeak("fr", "ClearSpeak_Sets", "woAll", expr, "l'ensemble 5 virgule, 10 virgule, 15")?; + return Ok(()); + +} + +#[test] +fn multiple_element_set_silent_bracket() -> Result<()> { + let expr = " + { 5 , 10 , 15 } + "; + test_ClearSpeak("fr", "ClearSpeak_Sets", "SilentBracket", expr, "5 virgule, 10 virgule, 15")?; + return Ok(()); + + } + +#[test] +fn silent_bracket() -> Result<()> { + let expr = " + {x|x>2} + "; + test_ClearSpeak("fr", "ClearSpeak_Sets", "SilentBracket", expr, + "l'ensemble de tous x tel que x est supérieur à 2")?; + return Ok(()); + + } + From 0d363a09d36879a78e33ad8d6c33f82178d81df2 Mon Sep 17 00:00:00 2001 From: Olivier Thiffault Date: Wed, 1 Jul 2026 12:37:18 -0400 Subject: [PATCH 41/53] added tests and modifs for symbols_and_adornments.rs --- Rules/Languages/fr/SharedRules/general.yaml | 4 +- Rules/Languages/fr/unicode-full.yaml | 2 +- Rules/Languages/fr/unicode.yaml | 2 +- tests/Languages/fr.rs | 1 + .../fr/ClearSpeak/symbols_and_adornments.rs | 377 ++++++++++++++++++ 5 files changed, 382 insertions(+), 4 deletions(-) create mode 100644 tests/Languages/fr/ClearSpeak/symbols_and_adornments.rs diff --git a/Rules/Languages/fr/SharedRules/general.yaml b/Rules/Languages/fr/SharedRules/general.yaml index ac4bf5b7e..7c459a166 100644 --- a/Rules/Languages/fr/SharedRules/general.yaml +++ b/Rules/Languages/fr/SharedRules/general.yaml @@ -88,7 +88,7 @@ replace: - x: "*[1]" - pause: auto - - T: "évalués à" # phrase(results were 'evaluated at' a given point) + - T: "évalué à" # phrase(results were 'evaluated at' a given point) - pause: auto - x: "*[2]" @@ -98,7 +98,7 @@ replace: - x: "*[1]" - pause: auto - - T: "évalués à" # phrase(results were 'evaluated at' this point) + - T: "évalué à" # phrase(results were 'evaluated at' this point) - pause: auto - x: "*[3]" - T: "moins la même expression évaluée à" # phrase(this result is 'minus the same expression evaluated at' an earlier point) diff --git a/Rules/Languages/fr/unicode-full.yaml b/Rules/Languages/fr/unicode-full.yaml index d0f65adb5..844f1fe8e 100644 --- a/Rules/Languages/fr/unicode-full.yaml +++ b/Rules/Languages/fr/unicode-full.yaml @@ -311,7 +311,7 @@ else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' if: "count(following-sibling::*) = 0" then: [t: "et ainsi de suite"] # (en: 'and so on', DeepL translation) - else: [t: "points de suspension"] # (en: 'and so on up to') + else: [t: "et ainsi de suite jusqu'à"] # (en: 'and so on up to') - "‰": [t: "symbole pour mille"] # 0x2030 (en: 'per mille') - "‱": [t: "symbole pour dix mille"] # 0x2031 (en: 'per ten thousand') diff --git a/Rules/Languages/fr/unicode.yaml b/Rules/Languages/fr/unicode.yaml index 10d15c703..b5999380c 100644 --- a/Rules/Languages/fr/unicode.yaml +++ b/Rules/Languages/fr/unicode.yaml @@ -284,7 +284,7 @@ else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' if: "count(following-sibling::*) = 0" then: [T: "et ainsi de suite"] # (en: 'and so on', DeepL translation) - else: [T: "points de suspension"] # (en: 'and so on up to') + else: [T: "et ainsi de suite jusqu'à"] # (en: 'and so on up to') - "⁡": # 0x2061 - test: diff --git a/tests/Languages/fr.rs b/tests/Languages/fr.rs index 843104b34..059ef9d81 100644 --- a/tests/Languages/fr.rs +++ b/tests/Languages/fr.rs @@ -9,6 +9,7 @@ mod ClearSpeak { mod msup; mod multiline; mod sets; + mod symbols_and_adornments; } mod SimpleSpeak { diff --git a/tests/Languages/fr/ClearSpeak/symbols_and_adornments.rs b/tests/Languages/fr/ClearSpeak/symbols_and_adornments.rs new file mode 100644 index 000000000..aa39c9d00 --- /dev/null +++ b/tests/Languages/fr/ClearSpeak/symbols_and_adornments.rs @@ -0,0 +1,377 @@ +use crate::common::*; +use anyhow::Result; + +#[test] +fn multiplication() -> Result<()> { + let expr = " + 2×3 + "; + test("fr", "ClearSpeak", expr, "2 fois 3")?; + return Ok(()); + +} + +#[test] +fn multiplication_by() -> Result<()> { + let expr = " + 2×3 + "; + test_ClearSpeak("fr", "ClearSpeak_MultSymbolX", "By", expr, "2 par 3")?; + return Ok(()); + +} + +#[test] +fn multiplication_cross() -> Result<()> { + let expr = " + u×v + "; + test_ClearSpeak("fr", "ClearSpeak_MultSymbolX", "Cross", expr, "u multiplié par v")?; + return Ok(()); + +} + +#[test] +fn ellipses_auto_start() -> Result<()> { + let expr = " + , + -2,-1,0 + "; + test("fr", "ClearSpeak", expr, "point point point virgule, moins 2 virgule, moins 1 virgule, 0")?; + return Ok(()); + +} + +#[test] +fn ellipses_auto_end() -> Result<()> { + let expr = " + 1 + , + 2 + , + 3 + , + + "; + test_ClearSpeak("fr", "ClearSpeak_Ellipses", "Auto", expr, "1 virgule, 2 virgule, 3 virgule, point point point")?; + return Ok(()); + +} + +#[test] +fn ellipses_auto_middle() -> Result<()> { + let expr = " + + 1 + , + 2 + , + 3 + , + + , + 20 + + "; + test_ClearSpeak("fr", "ClearSpeak_Ellipses", "Auto", expr, + "1 virgule, 2 virgule, 3 virgule, point point point virgule, 20")?; + return Ok(()); + +} + +#[test] +fn ellipses_auto_both() -> Result<()> { + let expr = " + , + -2,-1,0,1,2 + , + "; + test_ClearSpeak("fr", "ClearSpeak_Ellipses", "Auto", expr, + "point point point virgule, moins 2 virgule, moins 1 virgule, 0 virgule, 1 virgule, 2 virgule, point point point")?; + return Ok(()); + +} + +#[test] +fn ellipses_and_so_on_start() -> Result<()> { + let expr = " + , + -2,-1,0 + "; + test_ClearSpeak("fr", "ClearSpeak_Ellipses", "AndSoOn", expr, "point point point virgule, moins 2 virgule, moins 1 virgule, 0")?; + return Ok(()); + +} + +#[test] +fn ellipses_and_so_on_end() -> Result<()> { + let expr = " + 1 + , + 2 + , + 3 + , + + "; + test_ClearSpeak("fr", "ClearSpeak_Ellipses", "AndSoOn", expr, "1 virgule, 2 virgule, 3 et ainsi de suite")?; + return Ok(()); + +} + +#[test] +fn ellipses_and_so_on_middle() -> Result<()> { + let expr = " + + 1 + , + 2 + , + 3 + , + + , + 20 + + "; + test_ClearSpeak("fr", "ClearSpeak_Ellipses", "AndSoOn", expr, + "1 virgule, 2 virgule, 3 et ainsi de suite jusqu'à, 20")?; + return Ok(()); + +} + +#[test] +fn ellipses_and_so_on_both() -> Result<()> { + let expr = " + , + -2,-1,0,1,2 + , + "; + test_ClearSpeak("fr", "ClearSpeak_Ellipses", "AndSoOn", expr, + "point point point virgule, moins 2 virgule, moins 1 virgule, 0 virgule, 1 virgule, 2 virgule, point point point")?; + return Ok(()); + +} + +#[test] +fn vertical_line_auto() -> Result<()> { + let expr = " + 3|6 + "; + test_ClearSpeak("fr", "ClearSpeak_VerticalLine", "Auto", expr, + "3 divise 6")?; + return Ok(()); + +} + +#[test] +fn vertical_line_divides() -> Result<()> { + let expr = " + 3|6 + "; + test_ClearSpeak("fr", "ClearSpeak_VerticalLine", "Divides", expr, + "3 divise 6")?; + return Ok(()); + +} + + #[test] + fn vertical_line_given() -> Result<()> { + let expr = " + 3|6 + "; + test_ClearSpeak("fr", "ClearSpeak_VerticalLine", "Given", expr, + "3 sachant 6")?; + return Ok(()); + + } + + #[test] + fn vertical_line_probability_given() -> Result<()> { + let expr = " + P + + ( + + A + | + B + + ) + + "; + test_ClearSpeak_prefs("fr", vec![("ClearSpeak_VerticalLine", "Given"), ("ClearSpeak_ImpliedTimes", "None")] + , expr, "p majuscule; parenthèse gauche, a majuscule sachant b majuscule; parenthèse droite")?; + return Ok(()); + } + +#[test] +fn vertical_line_set() -> Result<()> { + let expr = " + { + + x + | + x + > + 0 + + } + "; + test_ClearSpeak("fr", "ClearSpeak_VerticalLine", "Auto", expr, + "l'ensemble de tous x tel que x est supérieur à 0")?; + return Ok(()); + +} + + +#[test] +fn vertical_line_set_such_that() -> Result<()> { + let expr = " + { + + x + | + x + > + 0 + + } + "; + test_ClearSpeak("fr", "ClearSpeak_VerticalLine", "SuchThat", expr, + "l'ensemble de tous x tel que x est supérieur à 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("fr", "ClearSpeak_VerticalLine", "Given", expr, + "l'ensemble de tous x tel que x est supérieur à 0")?; + return Ok(()); + +} + +#[test] +fn vertical_line_set_and_abs() -> Result<()> { + let expr = " + { + + x + | + + | + x + | + + > + 2 + + } + "; + test_ClearSpeak("fr", "ClearSpeak_VerticalLine", "Auto", expr, + "l'ensemble de tous x tel que la valeur absolue de x; est supérieur à 2")?; + return Ok(()); + +} + +#[test] +fn vertical_line_evaluated_at() -> Result<()> { + let expr = " + f + + ( + x + ) + + + | + + x + = + 5 + + + "; + test_ClearSpeak("fr", "ClearSpeak_VerticalLine", "Auto", expr, + "f de x évalué à, x est égal à 5")?; + return Ok(()); + +} + +#[test] +fn vertical_line_evaluated_at_both() -> Result<()> { + let expr = " + + x + 2 + + + + x + + | + 0 + 1 + + "; + test_ClearSpeak("fr", "ClearSpeak_VerticalLine", "Auto", expr, + "x au carré plus x, évalué à 1 moins la même expression évaluée à 0")?; + return Ok(()); + +} +#[test] +fn vertical_line_evaluated_at_divides() -> Result<()> { + let expr = " + f + + ( + x + ) + + + | + + x + = + 5 + + + "; + test_ClearSpeak("fr", "ClearSpeak_VerticalLine", "Divides", expr, + "f de x évalué à, x est égal à 5")?; + return Ok(()); + +} + +#[test] +fn vertical_line_evaluated_at_both_given() -> Result<()> { + let expr = " + + x + 2 + + + + x + + | + 0 + 1 + + "; + test_ClearSpeak("fr", "ClearSpeak_VerticalLine", "Given", expr, + "x au carré plus x, évalué à 1 moins la même expression évaluée à 0")?; + return Ok(()); + +} \ No newline at end of file From bdfd1795763e29e6f881a77803c15404c4b345d1 Mon Sep 17 00:00:00 2001 From: Olivier Thiffault Date: Sat, 4 Jul 2026 12:06:54 -0400 Subject: [PATCH 42/53] set T:, OT:, SPELL: to symbols previously corrected --- Rules/Languages/fr/unicode-full.yaml | 304 +++++++++++++-------------- 1 file changed, 152 insertions(+), 152 deletions(-) diff --git a/Rules/Languages/fr/unicode-full.yaml b/Rules/Languages/fr/unicode-full.yaml index 844f1fe8e..f3bebfbd5 100644 --- a/Rules/Languages/fr/unicode-full.yaml +++ b/Rules/Languages/fr/unicode-full.yaml @@ -49,7 +49,7 @@ - "ʵ": [t: "modificateur petit r tourné avec crochet"] # 0x2b5 (en: 'modifier small turned r with hook', DeepL translation) - "ʶ": # 0x2b6 - spell: "translate('R', 'R', 'R')" - - t: "modificateur petit inversé" # (en: 'modifier small inverted', DeepL translation) + - T: "modificateur petit inversé" # (en: 'modifier small inverted', DeepL translation) - "ʷ": [t: "modificateur petit w"] # 0x2b7 (en: 'modifier small w', DeepL translation) @@ -202,8 +202,8 @@ replace: [] - pitch: value: "$CapitalLetters_Pitch" - replace: [spell: "translate('.', 'ΪΫϏ', 'ιυϗ')"] - - t: "avec dialytika" # (en: 'with dialytika', DeepL translation) + replace: [SPELL: "translate('.', 'ΪΫϏ', 'ιυϗ')"] + - T: "avec dialytika" # (en: 'with dialytika', DeepL translation) - test: if: "$CapitalLetters_UseWord" then_test: @@ -238,7 +238,7 @@ replace: [] - pitch: value: "$CapitalLetters_Pitch" - replace: [spell: "translate('.', 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', 'абвгдежзийклмнопрстуфхцчшщъыьэюя')"] + replace: [SPELL: "translate('.', 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', 'абвгдежзийклмнопрстуфхцчшщъыьэюя')"] - test: if: "$CapitalLetters_UseWord" then_test: @@ -310,8 +310,8 @@ then: [t: "point point point"] # (en: 'dot dot dot', DeepL translation) else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' if: "count(following-sibling::*) = 0" - then: [t: "et ainsi de suite"] # (en: 'and so on', DeepL translation) - else: [t: "et ainsi de suite jusqu'à"] # (en: 'and so on up to') + then: [T: "et ainsi de suite"] # (en: 'and so on', DeepL translation) + else: [T: "et ainsi de suite jusqu'à"] # (en: 'and so on up to') - "‰": [t: "symbole pour mille"] # 0x2030 (en: 'per mille') - "‱": [t: "symbole pour dix mille"] # 0x2031 (en: 'per ten thousand') @@ -456,11 +456,11 @@ - "ℊ": [t: "g ronde minuscule"] # 0x210a (en: 'script g', DeepL: 'script g') - "ℌℑℨℭ": # 0x210c, 0x2111, 0x2128, 0x212d - spell: "translate('.', 'ℌℑℨℭ', 'HIZC')" - - t: "gothique" # (en: 'fraktur', DeepL: 'fraktur') + - T: "gothique" # (en: 'fraktur', DeepL: 'fraktur') - "ℍℙℾℿ": # 0x210d, 0x2119, 0x213e, 0x213f - spell: "translate('.', 'ℍℙℾℿ', 'HPΓΠ')" - - t: "double barre" # (en: 'double struck', DeepL: 'double barre') + - T: "double barre" # (en: 'double struck', DeepL: 'double barre') - "ℎ": [t: "constante de planck"] # 0x210e (en: 'planck constant') @@ -468,7 +468,7 @@ - "ℐℒ℘ℬℰℱℳ": # 0x2110, 0x2112, 0x2118, 0x2130, 0x2131, 0x2133 - spell: "translate('.', 'ℐℒ℘ℬℰℱℳ', 'ILPBEFM')" - - t: "script" # (en: 'script') + - T: "script" # (en: 'script') - "ℓ": [t: "l minuscule en script"] # 0x2113 (en: 'script l', MathPlayer: 'l ronde minuscule', DeepL: 'script l') - "℔": [t: "symbole l b barré"] # 0x2114 (en: 'pounds', DeepL: 'livres') @@ -483,15 +483,15 @@ # coalesced some chars that use cap letters - "Ⅎ℺⅁⅂⅃⅄": # 0x2132, 0x213a, 0x2141, 0x2142, 0x2143, 0x2144 - - spell: "translate('.', 'Ⅎ℺⅁⅂⅃⅄', 'FQGLLY')" + - SPELL: "translate('.', 'Ⅎ℺⅁⅂⅃⅄', 'FQGLLY')" - test: - if: "'.' = '℺'" then: [t: "tourné"] # (en: 'rotated', DeepL translation) - else_if: "'.' = 'Ⅎ'" then: [t: "tourné"] # (en: 'turned', DeepL translation) - else_if: "'.' = '⅃'" - then: [t: "tourné sans-serif"] # (en: 'reversed sans-serif', DeepL translation) - else: [t: "tourné sans-serif"] # (en: 'turned sans-serif', DeepL: 'tourné sans empattement') + then: [T: "tourné sans-serif"] # (en: 'reversed sans-serif', DeepL translation) + else: [T: "tourné sans-serif"] # (en: 'turned sans-serif', DeepL: 'tourné sans empattement') - "ℴ": [t: "o ronde minuscule"] # 0x2134 (en: 'script o', DeepL: 'script o') - "ℵ": [t: "alef"] # 0x2135 (en: 'first transfinite cardinal') @@ -500,7 +500,7 @@ - "ℸ": [t: "dalèt"] # 0x2138 (en: 'fourth transfinite cardinal') - "ℼ": [t: "pi ajouré"] # 0x213c (en: 'double struck pi', DeepL: 'double pi frappé') - "ℽ": [t: "gamma ajouré"] # 0x213d (en: 'double struck gamma', DeepL: 'double gamma frappé') - - "⅀": [t: "sommation"] # 0x2140 (en: 'double struck n-ary summation', DeepL: 'somme n-aire doublement frappée') + - "⅀": [T: "sommation"] # 0x2140 (en: 'double struck n-ary summation', DeepL: 'somme n-aire doublement frappée') - "⅋": [t: "perluète culbutée"] # 0x214b (en: 'turned ampersand', DeepL: 'esperluette tournée') - "⅌": [t: "symbole per"] # 0x214c (en: 'per', DeepL: 'per') - "ⅎ": [t: "minuscule f culbuté"] # 0x214e (en: 'turned F', DeepL: 'tourné f') @@ -802,17 +802,17 @@ - "∤": [t: "n'est pas un diviseur de"] # 0x2224 (en: 'does not divide') - "∧": [t: "et logique"] # 0x2227 (en: 'and') - "∨": [t: "ou logique"] # 0x2228 (en: 'or') - - "∩": [t: "\uF8FEintersection"] # 0x2229 - - "∪": [t: "\uF8FEunion"] # 0x222a - - "∫": [t: "\uF8FEintégrale"] # 0x222b (en: 'integral') - - "∬": [t: "\uF8FEintégrale double"] # 0x222c (en: 'double integral') - - "∭": [t: "\uF8FEintégrale triple"] # 0x222d (en: 'triple integral') - - "∮": [t: "\uF8FEintégrale de contour"] # 0x222e (en: 'contour integral') - - "∯": [t: "\uF8FEintégrale de surface"] # 0x222f (en: 'surface integral') - - "∰": [t: "\uF8FEintégrale de volume"] # 0x2230 (en: 'volume integral') - - "∱": [t: "\uF8FEintégrale en sens négatif"] # 0x2231 (en: 'clockwise integral') - - "∲": [t: "\uF8FEintégrale de contour en sens négatif"] # 0x2232 (en: 'clockwise contour integral') - - "∳": [t: "\uF8FEintégrale de contour en sens positif"] # 0x2233 (en: 'anticlockwise contour integral') + - "∩": [T: "\uF8FEintersection"] # 0x2229 + - "∪": [T: "\uF8FEunion"] # 0x222a + - "∫": [T: "\uF8FEintégrale"] # 0x222b (en: 'integral') + - "∬": [T: "\uF8FEintégrale double"] # 0x222c (en: 'double integral') + - "∭": [T: "\uF8FEintégrale triple"] # 0x222d (en: 'triple integral') + - "∮": [T: "\uF8FEintégrale de contour"] # 0x222e (en: 'contour integral') + - "∯": [T: "\uF8FEintégrale de surface"] # 0x222f (en: 'surface integral') + - "∰": [T: "\uF8FEintégrale de volume"] # 0x2230 (en: 'volume integral') + - "∱": [T: "\uF8FEintégrale en sens négatif"] # 0x2231 (en: 'clockwise integral') + - "∲": [T: "\uF8FEintégrale de contour en sens négatif"] # 0x2232 (en: 'clockwise contour integral') + - "∳": [T: "\uF8FEintégrale de contour en sens positif"] # 0x2233 (en: 'anticlockwise contour integral') - "∴": [t: "par conséquent"] # 0x2234 (en: 'therefore') - "∵": [t: "parce que"] # 0x2235 (en: 'because') - "∶": # 0x2236 @@ -1183,16 +1183,16 @@ - "⊽": [t: "non ou"] # 0x22bd (en: 'nor') - "⊾": [t: "angle droit avec arc"] # 0x22be (en: 'right angle with arc') - "⊿": [t: "triangle rectangle"] # 0x22bf (en: 'right triangle') - - "⋀": [t: "et logique"] # 0x22c0 (en: 'logical and') - - "⋁": [t: "ou logique"] # 0x22c1 (en: 'logical or') - - "⋂": [t: "\uF8FEintersection"] # 0x22c2 (en: 'intersection') - - "⋃": [t: "\uF8FEunion"] # 0x22c3 (en: 'union') + - "⋀": [T: "et logique"] # 0x22c0 (en: 'logical and') + - "⋁": [T: "ou logique"] # 0x22c1 (en: 'logical or') + - "⋂": [T: "\uF8FEintersection"] # 0x22c2 (en: 'intersection') + - "⋃": [T: "\uF8FEunion"] # 0x22c3 (en: 'union') - "⋄": [t: "opérateur losange"] # 0x22c4 (en: 'diamond operator') - "⋅": # 0x22c5 - test: if: "@data-chem-formula-op" then: [t: "point"] # (en: 'dot', DeepL translation) - else: [t: "fois"] # (en: 'times') + else: [T: "fois"] # (en: 'times') - "⋆": [t: "opérateur étoile"] # 0x22c6 (en: 'times') - "⋇": [t: "divisé multiplié"] # 0x22c7 (en: 'division times') @@ -1418,7 +1418,7 @@ - "⏧": [t: "intersection électrique"] # 0x23e7 (en: 'electrical intersection', DeepL translation) - "①-⑨": # 0x2460 - 0x2469 - spell: "translate('.', '①②③④⑤⑥⑦⑧⑨', '123456789')" - - t: "encerclé" # (en: 'circled', DeepL translation) + - T: "encerclé" # (en: 'circled', DeepL translation) - "⑩": [t: "encerclé dix"] # 0x2469 (en: 'circled ten', DeepL translation) - "⑪": [t: "encerclé onze"] # 0x246a (en: 'circled eleven', DeepL translation) - "⑫": [t: "encerclé douze"] # 0x246b (en: 'circled twelve', DeepL translation) @@ -1431,7 +1431,7 @@ - "⑳": [t: "encerclé vingt"] # 0x2473 (en: 'circled twenty', DeepL translation) - "⑴-⑼": # 0x2474 - 0x247d - spell: "translate('.', '⑴⑵⑶⑷⑸⑹⑺⑻⑼', '123456789')" - - t: "entre parenthèses" # (en: 'parenthesized', DeepL translation) + - T: "entre parenthèses" # (en: 'parenthesized', DeepL translation) - "⑽": [t: "dix entre parenthèses"] # 0x247d (en: 'parenthesized ten', DeepL translation) - "⑾": [t: "onze entre parenthèses"] # 0x247e (en: 'parenthesized eleven', DeepL translation) - "⑿": [t: "parenthèse-histhésée douze"] # 0x247f (en: 'parenthesized twelve', DeepL translation) @@ -1459,37 +1459,37 @@ - "⒛": [t: "vingt avec point"] # 0x249b (en: 'twenty with period', DeepL translation) - "⒜-⒵": # 0x249c - 0x24b5 - spell: "translate('.', '⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵', 'abcdefghijklmnopqrstuvwxyz')" - - t: "entre parenthèses" # (en: 'parenthesized', DeepL translation) + - T: "entre parenthèses" # (en: 'parenthesized', DeepL translation) - "Ⓐ-ⓩ": # 0x24b6 - 0x24cf - spell: "translate('.', 'ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - t: "encerclé" # (en: 'circled', DeepL translation) + - T: "encerclé" # (en: 'circled', DeepL translation) - "🅐-🅩": # 0x1f150 - 0x1f169 - spell: "translate('.', '🅐🅑🅒🅓🅔🅕🅖🅗🅘🅙🅚🅛🅜🅝🅞🅟🅠🅡🅢🅣🅤🅥🅦🅧🅨🅩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - t: "encerclé de noir" # (en: 'black circled', DeepL translation) + - T: "encerclé de noir" # (en: 'black circled', DeepL translation) - "ⓐ-ⓩ": # 0x24d0 - 0x24e9 - spell: "translate('.', 'ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ', 'abcdefghijklmnopqrstuvwxyz')" - - t: "encerclé" # (en: 'circled', DeepL translation) + - T: "encerclé" # (en: 'circled', DeepL translation) - - "⓪": [t: "zéro encerclé"] # 0x24ea (en: 'circled zero', DeepL translation) + - "⓪": [T: "zéro encerclé"] # 0x24ea (en: 'circled zero', DeepL translation) - "⓫": [t: "onze encerclé de noir"] # 0x24eb (en: 'black circled eleven', DeepL translation) - - "⓬": [t: "douze encerclé de noir"] # 0x24ec (en: 'black circled twelve', DeepL translation) - - "⓭": [t: "treize encerclé de noir"] # 0x24ed (en: 'black circled thirteen', DeepL translation) - - "⓮": [t: "quatorze encerclé de noir"] # 0x24ee (en: 'black circled fourteen', DeepL translation) - - "⓯": [t: "quinze encerclé de noir"] # 0x24ef (en: 'black circled fifteen', DeepL translation) - - "⓰": [t: "seize encerclé de noir"] # 0x24f0 (en: 'black circled sixteen', DeepL translation) - - "⓱": [t: "dix-sept encerclé de noir"] # 0x24f1 (en: 'black circled seventeen', DeepL translation) - - "⓲": [t: "atéroïde encerclé de noir"] # 0x24f2 (en: 'black circled eighteen', DeepL translation) - - "⓳": [t: "dix-neuf encerclé de noir"] # 0x24f3 (en: 'black circled nineteen', DeepL translation) - - "⓴": [t: "vingt encerclé de noir"] # 0x24f4 (en: 'black circled twenty', DeepL translation) + - "⓬": [T: "douze encerclé de noir"] # 0x24ec (en: 'black circled twelve', DeepL translation) + - "⓭": [T: "treize encerclé de noir"] # 0x24ed (en: 'black circled thirteen', DeepL translation) + - "⓮": [T: "quatorze encerclé de noir"] # 0x24ee (en: 'black circled fourteen', DeepL translation) + - "⓯": [T: "quinze encerclé de noir"] # 0x24ef (en: 'black circled fifteen', DeepL translation) + - "⓰": [T: "seize encerclé de noir"] # 0x24f0 (en: 'black circled sixteen', DeepL translation) + - "⓱": [T: "dix-sept encerclé de noir"] # 0x24f1 (en: 'black circled seventeen', DeepL translation) + - "⓲": [T: "atéroïde encerclé de noir"] # 0x24f2 (en: 'black circled eighteen', DeepL translation) + - "⓳": [T: "dix-neuf encerclé de noir"] # 0x24f3 (en: 'black circled nineteen', DeepL translation) + - "⓴": [T: "vingt encerclé de noir"] # 0x24f4 (en: 'black circled twenty', DeepL translation) - "⓵-⓽": # 0x24f5 - 0x24fe - spell: "translate('.', '⓵⓶⓷⓸⓹⓺⓻⓼⓽', '123456789')" - - t: "double encerclé" # (en: 'double circled', DeepL translation) + - T: "double encerclé" # (en: 'double circled', DeepL translation) - "⓾": [t: "double cercle de dix"] # 0x24fe (en: 'double circled ten', DeepL translation) - "⓿": [t: "zéro encerclé de noir"] # 0x24ff (en: 'black circled zero', DeepL translation) @@ -1651,36 +1651,36 @@ - "❳": [t: "crochet de fantaisie droit maigre en écaille"] # 0x2773 (en: 'light right tortoise shell bracket ornament', DeepL: 'ornement de support en écaille de tortue léger et droit') - "❴": [t: "accolade de fantaisie gauche moyenne"] # 0x2774 (en: 'medium left brace ornament', DeepL: 'ornement d'accolade moyen gauche') - "❵": [t: "accolade de fantaisie droite moyenne"] # 0x2775 (en: 'medium right brace ornament', DeepL: 'accolade moyenne droite ornement') - - "❶": [t: "un encerclé de noir"] # 0x2776 (en: 'black circled one', DeepL translation) - - "❷": [t: "deux encerclé de noir"] # 0x2777 (en: 'black circled two', DeepL translation) - - "❸": [t: "trois encerclé de noir"] # 0x2778 (en: 'black circled three', DeepL translation) - - "❹": [t: "quatre encerclé de noir"] # 0x2779 (en: 'black circled four', DeepL translation) - - "❺": [t: "cinq encerclé de noir"] # 0x277a (en: 'black circled five', DeepL translation) - - "❻": [t: "six encerclé de noir"] # 0x277b (en: 'black circled six', DeepL translation) - - "❼": [t: "sept encerclé de noir"] # 0x277c (en: 'black circled seven', DeepL translation) - - "❽": [t: "huit encerclé de noir"] # 0x277d (en: 'black circled eight', DeepL translation) - - "❾": [t: "neuf encerclé de noir"] # 0x277e (en: 'black circled nine', DeepL translation) - - "❿": [t: "dix encerclé de noir"] # 0x277f (en: 'black circled ten', DeepL translation) - - "➀": [t: "un encerclé sans serif"] # 0x2780 (en: 'circled sans serif one', DeepL translation) - - "➁": [t: "deux encerclé sans serif"] # 0x2781 (en: 'circled sans serif two', DeepL translation) - - "➂": [t: "trois encerclé sans serif"] # 0x2782 (en: 'circled sans serif three', DeepL translation) - - "➃": [t: "quatre encerclé sans serif"] # 0x2783 (en: 'circled sans serif four', DeepL translation) - - "➄": [t: "cinq encerclé sans serif"] # 0x2784 (en: 'circled sans serif five', DeepL translation) - - "➅": [t: "six encerclé sans serif"] # 0x2785 (en: 'circled sans serif six', DeepL translation) - - "➆": [t: "sept encerclé sans serif"] # 0x2786 (en: 'circled sans serif seven', DeepL translation) - - "➇": [t: "huit encerclé sans serif"] # 0x2787 (en: 'circled sans serif eight', DeepL translation) - - "➈": [t: "neuf encerclé sans serif"] # 0x2788 (en: 'circled sans serif nine', DeepL translation) - - "➉": [t: "dix encerclé sans serif"] # 0x2789 (en: 'circled sans serif ten', DeepL translation) - - "➊": [t: "un encerclé de noir sans serif"] # 0x278a (en: 'black circled sans serif one', DeepL translation) - - "➋": [t: "deux encerclé de nori sans serif"] # 0x278b (en: 'black circled sans serif two', DeepL translation) - - "➌": [t: "trois encerclé de noir sans serif"] # 0x278c (en: 'black circled sans serif three', DeepL translation) - - "➍": [t: "quatre encerclé de noir sans serif"] # 0x278d (en: 'black circled sans serif four', DeepL translation) - - "➎": [t: "cinq encerclé de noir sans serif"] # 0x278e (en: 'black circled sans serif five', DeepL translation) - - "➏": [t: "six encerclé de noir sans serif"] # 0x278f (en: 'black circled sans serif six', DeepL translation) - - "➐": [t: "sept encerclé de noir sans serif"] # 0x2790 (en: 'black circled sans serif seven', DeepL translation) - - "➑": [t: "huit encerclé de noir sans serif"] # 0x2791 (en: 'black circled sans serif eight', DeepL translation) - - "➒": [t: "neuf encerclé de noir sans serif"] # 0x2792 (en: 'black circled sans serif nine', DeepL translation) - - "➓": [t: "dix encerclé de noir sans serif"] # 0x2793 (en: 'black circled sans serif ten', DeepL translation) + - "❶": [T: "un encerclé de noir"] # 0x2776 (en: 'black circled one', DeepL translation) + - "❷": [T: "deux encerclé de noir"] # 0x2777 (en: 'black circled two', DeepL translation) + - "❸": [T: "trois encerclé de noir"] # 0x2778 (en: 'black circled three', DeepL translation) + - "❹": [T: "quatre encerclé de noir"] # 0x2779 (en: 'black circled four', DeepL translation) + - "❺": [T: "cinq encerclé de noir"] # 0x277a (en: 'black circled five', DeepL translation) + - "❻": [T: "six encerclé de noir"] # 0x277b (en: 'black circled six', DeepL translation) + - "❼": [T: "sept encerclé de noir"] # 0x277c (en: 'black circled seven', DeepL translation) + - "❽": [T: "huit encerclé de noir"] # 0x277d (en: 'black circled eight', DeepL translation) + - "❾": [T: "neuf encerclé de noir"] # 0x277e (en: 'black circled nine', DeepL translation) + - "❿": [T: "dix encerclé de noir"] # 0x277f (en: 'black circled ten', DeepL translation) + - "➀": [T: "un encerclé sans serif"] # 0x2780 (en: 'circled sans serif one', DeepL translation) + - "➁": [T: "deux encerclé sans serif"] # 0x2781 (en: 'circled sans serif two', DeepL translation) + - "➂": [T: "trois encerclé sans serif"] # 0x2782 (en: 'circled sans serif three', DeepL translation) + - "➃": [T: "quatre encerclé sans serif"] # 0x2783 (en: 'circled sans serif four', DeepL translation) + - "➄": [T: "cinq encerclé sans serif"] # 0x2784 (en: 'circled sans serif five', DeepL translation) + - "➅": [T: "six encerclé sans serif"] # 0x2785 (en: 'circled sans serif six', DeepL translation) + - "➆": [T: "sept encerclé sans serif"] # 0x2786 (en: 'circled sans serif seven', DeepL translation) + - "➇": [T: "huit encerclé sans serif"] # 0x2787 (en: 'circled sans serif eight', DeepL translation) + - "➈": [T: "neuf encerclé sans serif"] # 0x2788 (en: 'circled sans serif nine', DeepL translation) + - "➉": [T: "dix encerclé sans serif"] # 0x2789 (en: 'circled sans serif ten', DeepL translation) + - "➊": [T: "un encerclé de noir sans serif"] # 0x278a (en: 'black circled sans serif one', DeepL translation) + - "➋": [T: "deux encerclé de nori sans serif"] # 0x278b (en: 'black circled sans serif two', DeepL translation) + - "➌": [T: "trois encerclé de noir sans serif"] # 0x278c (en: 'black circled sans serif three', DeepL translation) + - "➍": [T: "quatre encerclé de noir sans serif"] # 0x278d (en: 'black circled sans serif four', DeepL translation) + - "➎": [T: "cinq encerclé de noir sans serif"] # 0x278e (en: 'black circled sans serif five', DeepL translation) + - "➏": [T: "six encerclé de noir sans serif"] # 0x278f (en: 'black circled sans serif six', DeepL translation) + - "➐": [T: "sept encerclé de noir sans serif"] # 0x2790 (en: 'black circled sans serif seven', DeepL translation) + - "➑": [T: "huit encerclé de noir sans serif"] # 0x2791 (en: 'black circled sans serif eight', DeepL translation) + - "➒": [T: "neuf encerclé de noir sans serif"] # 0x2792 (en: 'black circled sans serif nine', DeepL translation) + - "➓": [T: "dix encerclé de noir sans serif"] # 0x2793 (en: 'black circled sans serif ten', DeepL translation) - "➔": [t: "flèche grasse vers la droite à pointe large"] # 0x2794 (en: 'heavy wide-headed rightwards arrow', DeepL: 'flèche lourde à tête large vers la droite') - "➕": [t: "plus gras"] # 0x2795 (en: 'heavy plus sign', DeepL: 'signe plus lourd') - "➖": [t: "moins gras"] # 0x2796 (en: 'heavy minus sign', DeepL: 'signe moins lourd') @@ -3133,44 +3133,44 @@ # 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) - spell: "translate('.', '𝔄𝔅𝔆𝔇𝔈𝔉𝔊𝔋𝔌𝔍𝔎𝔏𝔐𝔑𝔒𝔓𝔔𝔕𝔖𝔗𝔘𝔙𝔚𝔛𝔜', 'ABCDEFGHIJKLMNOPQRSTUVWXY')" - - t: "gothique" # (DeepL translation) + - T: "gothique" # (DeepL translation) - "-": # 0xf000 - 0xf018 - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXY')" - - t: "gothique" # (DeepL translation) + - T: "gothique" # (DeepL translation) - "𝔞-𝔷": # 0x1d51e - 0x1d537 - spell: "translate('.', '𝔞𝔟𝔠𝔡𝔢𝔣𝔤𝔥𝔦𝔧𝔨𝔩𝔪𝔫𝔬𝔭𝔮𝔯𝔰𝔱𝔲𝔳𝔴𝔵𝔶𝔷', 'abcdefghijklmnopqrstuvwxyz')" - - t: "gothique" # (DeepL translation) + - T: "gothique" # (DeepL translation) - "-": # 0xf01a - 0xf033 - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - t: "gothique" # (DeepL translation) + - T: "gothique" # (DeepL translation) - "𝕬-𝖅": # 0x1D56C - 0x1D585 - - spell: "translate('.', '𝕬𝕭𝕮𝕯𝕰𝕱𝕲𝕳𝕴𝕵𝕶𝕷𝕸𝕹𝕺𝕻𝕼𝕽𝕾𝕿𝖀𝖁𝖂𝖃𝖄𝖅', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - t: "gothique" # (DeepL translation) + - SPELL: "translate('.', '𝕬𝕭𝕮𝕯𝕰𝕱𝕲𝕳𝕴𝕵𝕶𝕷𝕸𝕹𝕺𝕻𝕼𝕽𝕾𝕿𝖀𝖁𝖂𝖃𝖄𝖅', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - T: "gothique" # (DeepL translation) - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf040 - 0xf059 - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - t: "gothique" # (DeepL translation) + - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - T: "gothique" # (DeepL translation) - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "𝖆-𝖟": # 0x1d586 - 0x1d59f - - spell: "translate('.', '𝖆𝖇𝖈𝖉𝖊𝖋𝖌𝖍𝖎𝖏𝖐𝖑𝖒𝖓𝖔𝖕𝖖𝖗𝖘𝖙𝖚𝖛𝖜𝖝𝖞𝖟', 'abcdefghijklmnopqrstuvwxyz')" - - t: "gothique" # (DeepL translation) + - SPELL: "translate('.', '𝖆𝖇𝖈𝖉𝖊𝖋𝖌𝖍𝖎𝖏𝖐𝖑𝖒𝖓𝖔𝖕𝖖𝖗𝖘𝖙𝖚𝖛𝖜𝖝𝖞𝖟', 'abcdefghijklmnopqrstuvwxyz')" + - T: "gothique" # (DeepL translation) - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf05a - 0xf073 - - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - t: "gothique" # (DeepL translation) + - SPELL: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - T: "gothique" # (DeepL translation) - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) @@ -3180,24 +3180,24 @@ # 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) - spell: "translate('.', '𝔸𝔹𝔺𝔻𝔼𝔽𝔾𝔿𝕀𝕁𝕂𝕃𝕄𝕅𝕆𝕇𝕈𝕉𝕊𝕋𝕌𝕍𝕎𝕏𝕐', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - t: "double barre" # (en: 'double struck', DeepL translation) + - T: "double barre" # (en: 'double struck', DeepL translation) - "-": # 0xf080 - 0xf098 - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - t: "double barre" # (en: 'double struck', DeepL translation) + - T: "double barre" # (en: 'double struck', DeepL translation) - "𝕒-𝕫": # 0x1d552 - 0x1d56b - spell: "translate('.', '𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫', 'abcdefghijklmnopqrstuvwxyz')" - - t: "double barre" # (en: 'double struck', DeepL translation) + - T: "double barre" # (en: 'double struck', DeepL translation) - "-": # 0xf09a - 0xf0b3 - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - t: "double barre" # (en: 'double struck', DeepL translation) + - T: "double barre" # (en: 'double struck', DeepL translation) - "𝟘-𝟡": # 0x1d7d8 - 0x1d7e1 - spell: "translate('.', '𝟘𝟙𝟚𝟛𝟜𝟝𝟞𝟟𝟠𝟡', '0123456789')" - - t: "double barre" # (en: 'double struck', DeepL translation) + - T: "double barre" # (en: 'double struck', DeepL translation) - "-": # 0xf0c0 - 0xf0c9 - spell: "translate('.', '', '0123456789')" - - t: "double barre" # (en: 'double struck', DeepL translation) + - T: "double barre" # (en: 'double struck', DeepL translation) - - "": [t: "double barre nahblah"] # 0xf0ca (en: 'double struck nahblah', DeepL translation) + - "": [T: "double barre nahblah"] # 0xf0ca (en: 'double struck nahblah', DeepL translation) - "": [t: "constante d'euler doublement frappée"] # 0xf0cb (en: 'double struck euler constant', DeepL translation) # script chars in math alphabetic block and also MathType private use area @@ -3212,11 +3212,11 @@ - t: "script" # (DeepL translation) - "-": # 0xf11a - 0xf133 - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - t: "script" # (DeepL translation) + - T: "script" # (DeepL translation) # bold script chars in math alphabetic block and also MathType private use area - "𝓐-𝓩": # 0x1d4d0 - 0x1d4e9 - - spell: "translate('.', '𝓐𝓑𝓒𝓓𝓔𝓕𝓖𝓗𝓘𝓙𝓚𝓛𝓜𝓝𝓞𝓟𝓠𝓡𝓢𝓣𝓤𝓥𝓦𝓧𝓨𝓩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '𝓐𝓑𝓒𝓓𝓔𝓕𝓖𝓗𝓘𝓙𝓚𝓛𝓜𝓝𝓞𝓟𝓠𝓡𝓢𝓣𝓤𝓥𝓦𝓧𝓨𝓩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - t: "script" # (DeepL translation) - test: @@ -3225,7 +3225,7 @@ - "-": # 0xf140 - 0xf159 - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - t: "script" # (DeepL translation) - test: @@ -3234,7 +3234,7 @@ - "𝓪-𝔃": # 0x1d4ea - 0x1d503 - - spell: "translate('.', '𝓪𝓫𝓬𝓭𝓮𝓯𝓰𝓱𝓲𝓳𝓴𝓵𝓶𝓷𝓸𝓹𝓺𝓻𝓼𝓽𝓾𝓿𝔀𝔁𝔂𝔃', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '𝓪𝓫𝓬𝓭𝓮𝓯𝓰𝓱𝓲𝓳𝓴𝓵𝓶𝓷𝓸𝓹𝓺𝓻𝓼𝓽𝓾𝓿𝔀𝔁𝔂𝔃', 'abcdefghijklmnopqrstuvwxyz')" - t: "script" # (DeepL translation) - test: @@ -3242,7 +3242,7 @@ then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf15a - 0xf173 - - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - t: "script" # (DeepL translation) - test: @@ -3262,7 +3262,7 @@ replace: [] - pitch: value: "$CapitalLetters_Pitch" - replace: [t: "ligature ae"] # (DeepL translation) + replace: [T: "ligature ae"] # (DeepL translation) - test: if: "$CapitalLetters_UseWord" then_test: @@ -3280,7 +3280,7 @@ replace: [] - pitch: value: "$CapitalLetters_Pitch" - replace: [t: "s pointu"] # (en: 'sharp s', DeepL translation) + replace: [T: "s pointu"] # (en: 'sharp s', DeepL translation) - test: if: "$CapitalLetters_UseWord" then_test: @@ -3298,7 +3298,7 @@ replace: [] - pitch: value: "$CapitalLetters_Pitch" - replace: [t: "o avec trait"] # (en: 'o with stroke', DeepL translation) + replace: [T: "o avec trait"] # (en: 'o with stroke', DeepL translation) - test: if: "$CapitalLetters_UseWord" then_test: @@ -3311,36 +3311,36 @@ # MathType only has a few of the cap Greek letters in PUA - "": # 0xf201 - 0xf209 - spell: "translate('.', '', 'ΔΨΛΠΣΘΓΩΥ')" - - t: "double barre" # (en: 'double struck', DeepL translation) + - T: "double barre" # (en: 'double struck', DeepL translation) - "-": # 0xf220 - 0xf236 - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - t: "double barre" # (en: 'double struck', DeepL translation) + - T: "double barre" # (en: 'double struck', DeepL translation) - - "": [t: "double barre final sigma"] # 0xf237 (en: 'double struck final sigma', DeepL translation) + - "": [T: "double barre final sigma"] # 0xf237 (en: 'double struck final sigma', DeepL translation) - "": [t: "double rho frappé"] # 0xf250 (en: 'double struck rho', DeepL translation) - "": [t: "phi doublement frappé"] # 0xf251 (en: 'double struck phi', DeepL translation) - "𝐀-𝐙": # 0x1d400 - 0x1d419 - - spell: "translate('.', '𝐀𝐁𝐂𝐃𝐄𝐅𝐆𝐇𝐈𝐉𝐊𝐋𝐌𝐍𝐎𝐏𝐐𝐑𝐒𝐓𝐔𝐕𝐖𝐗𝐘𝐙', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '𝐀𝐁𝐂𝐃𝐄𝐅𝐆𝐇𝐈𝐉𝐊𝐋𝐌𝐍𝐎𝐏𝐐𝐑𝐒𝐓𝐔𝐕𝐖𝐗𝐘𝐙', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf260 - 0xf279 - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "𝐚-𝐳": # 0x1d41a - 0x1d433 - - spell: "translate('.', '𝐚𝐛𝐜𝐝𝐞𝐟𝐠𝐡𝐢𝐣𝐤𝐥𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐭𝐮𝐯𝐰𝐱𝐲𝐳', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '𝐚𝐛𝐜𝐝𝐞𝐟𝐠𝐡𝐢𝐣𝐤𝐥𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐭𝐮𝐯𝐰𝐱𝐲𝐳', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf27a - 0xf293 - - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) @@ -3360,14 +3360,14 @@ - "𝑨-𝒁": # 0x1d468 - 0x1d481 # - t: "bold italic" - - spell: "translate('.', '𝑨𝑩𝑪𝑫𝑬𝑭𝑮𝑯𝑰𝑱𝑲𝑳𝑴𝑵𝑶𝑷𝑸𝑹𝑺𝑻𝑼𝑽𝑾𝑿𝒀𝒁', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '𝑨𝑩𝑪𝑫𝑬𝑭𝑮𝑯𝑰𝑱𝑲𝑳𝑴𝑵𝑶𝑷𝑸𝑹𝑺𝑻𝑼𝑽𝑾𝑿𝒀𝒁', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf2c8 - 0xf2e1 # - t: "bold italic" - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) @@ -3375,14 +3375,14 @@ - "𝒂-𝒛": # 0x1d482 - 0x1d49b # - t: "bold italic" - - spell: "translate('.', '𝒂𝒃𝒄𝒅𝒆𝒇𝒈𝒉𝒊𝒋𝒌𝒍𝒎𝒏𝒐𝒑𝒒𝒓𝒔𝒕𝒖𝒗𝒘𝒙𝒚𝒛', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '𝒂𝒃𝒄𝒅𝒆𝒇𝒈𝒉𝒊𝒋𝒌𝒍𝒎𝒏𝒐𝒑𝒒𝒓𝒔𝒕𝒖𝒗𝒘𝒙𝒚𝒛', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf2e2 - 0xf2fb # - t: "bold italic" - - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) @@ -3401,26 +3401,26 @@ - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - "𝗔-𝗭": # 0x1d5d4 - 0x1d5ed - - spell: "translate('.', '𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬𝗭', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬𝗭', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf334 - 0xf34d - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "𝗮-𝘇": # 0x1d5ee - 0x1d607 - - spell: "translate('.', '𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf34e - 0xf367 - - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) @@ -3442,14 +3442,14 @@ - "𝘼-𝙕": # 0x1d63c - 0x1d655 # - t: "bold italic" - - spell: "translate('.', '𝘼𝘽𝘾𝘿𝙀𝙁𝙂𝙃𝙄𝙅𝙆𝙇𝙈𝙉𝙊𝙋𝙌𝙍𝙎𝙏𝙐𝙑𝙒𝙓𝙔𝙕', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '𝘼𝘽𝘾𝘿𝙀𝙁𝙂𝙃𝙄𝙅𝙆𝙇𝙈𝙉𝙊𝙋𝙌𝙍𝙎𝙏𝙐𝙑𝙒𝙓𝙔𝙕', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf39c - 0xf3b5 # - t: "bold italic" - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) @@ -3457,14 +3457,14 @@ - "𝙖-𝙯": # 0x1d656 - 0x1d66f # - t: "bold italic" - - spell: "translate('.', '𝙖𝙗𝙘𝙙𝙚𝙛𝙜𝙝𝙞𝙟𝙠𝙡𝙢𝙣𝙤𝙥𝙦𝙧𝙨𝙩𝙪𝙫𝙬𝙭𝙮𝙯', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '𝙖𝙗𝙘𝙙𝙚𝙛𝙜𝙝𝙞𝙟𝙠𝙡𝙢𝙣𝙤𝙥𝙦𝙧𝙨𝙩𝙪𝙫𝙬𝙭𝙮𝙯', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf3b6 - 0xf3cf # - t: "bold italic" - - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) @@ -3487,26 +3487,26 @@ - "𝚥": [t: "dotless j"] # 0x1d6a5 - "𝚨-𝛀": # 0x1d6a8 - 0x1d6c0 - - spell: "translate('.', '𝚨𝚩𝚪𝚫𝚬𝚭𝚮𝚯𝚰𝚱𝚲𝚳𝚴𝚵𝚶𝚷𝚸𝚹𝚺𝚻𝚼𝚽𝚾𝚿𝛀', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + - SPELL: "translate('.', '𝚨𝚩𝚪𝚫𝚬𝚭𝚮𝚯𝚰𝚱𝚲𝚳𝚴𝚵𝚶𝚷𝚸𝚹𝚺𝚻𝚼𝚽𝚾𝚿𝛀', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf408 - 0xf420 - - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + - SPELL: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "𝛂-𝛚": # 0x1d6c2 - 0x1d6da - - spell: "translate('.', '𝛂𝛃𝛄𝛅𝛆𝛇𝛈𝛉𝛊𝛋𝛌𝛍𝛎𝛏𝛐𝛑𝛒𝛓𝛔𝛕𝛖𝛗𝛘𝛙𝛚', 'αβγδεζηθικλμνξοπρςστυφχψω')" + - SPELL: "translate('.', '𝛂𝛃𝛄𝛅𝛆𝛇𝛈𝛉𝛊𝛋𝛌𝛍𝛎𝛏𝛐𝛑𝛒𝛓𝛔𝛕𝛖𝛗𝛘𝛙𝛚', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf422 - 0xf43a - - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" + - SPELL: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) @@ -3516,13 +3516,13 @@ - "𝛁": [t: "symbole mathématique gras nabla"] # 0x1d6c1 (en: 'bold nahblah', DeepL: 'gras nahblah') - "𝛛𝛜𝛝𝛞𝛟𝛠𝛡": # 0x1D6DB - 0x1D6E1 - - spell: "translate('.', '𝛛𝛜𝛝𝛞𝛟𝛠𝛡', '∂εθκφρπ')" + - SPELL: "translate('.', '𝛛𝛜𝛝𝛞𝛟𝛠𝛡', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "": # 0xF43C - 0xF441 - - spell: "translate('.', '', '∂εθκφρπ')" + - SPELL: "translate('.', '', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) @@ -3557,14 +3557,14 @@ - "𝜜-𝜴": # 0x1d71c - 0x1d734 # - t: "bold italic" - - spell: "translate('.', '𝜜𝜝𝜞𝜟𝜠𝜡𝜢𝜣𝜤𝜥𝜦𝜧𝜨𝜩𝜪𝜫𝜬𝜭𝜮𝜯𝜰𝜱𝜲𝜳𝜴', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + - SPELL: "translate('.', '𝜜𝜝𝜞𝜟𝜠𝜡𝜢𝜣𝜤𝜥𝜦𝜧𝜨𝜩𝜪𝜫𝜬𝜭𝜮𝜯𝜰𝜱𝜲𝜳𝜴', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf47c - 0xf494 # - t: "bold italic" - - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + - SPELL: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) @@ -3572,14 +3572,14 @@ - "𝜶-𝝎": # 0x1d736 - 0x1d74e # - t: "bold italic" - - spell: "translate('.', '𝜶𝜷𝜸𝜹𝜺𝜻𝜼𝜽𝜾𝜿𝝀𝝁𝝂𝝃𝝄𝝅𝝆𝝇𝝈𝝉𝝊𝝋𝝌𝝍𝝎', 'αβγδεζηθικλμνξοπρςστυφχψω')" + - SPELL: "translate('.', '𝜶𝜷𝜸𝜹𝜺𝜻𝜼𝜽𝜾𝜿𝝀𝝁𝝂𝝃𝝄𝝅𝝆𝝇𝝈𝝉𝝊𝝋𝝌𝝍𝝎', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf496 - 0xf4ae # - t: "bold italic" - - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" + - SPELL: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) @@ -3587,14 +3587,14 @@ - "𝝏𝝐𝝑𝝒𝝓𝝔𝝕": # 0x1d74f - 0x1d755 # - t: "bold italic" - - spell: "translate('.', '𝝏𝝐𝝑𝝒𝝓𝝔𝝕', '∂εθκφρπ')" + - SPELL: "translate('.', '𝝏𝝐𝝑𝝒𝝓𝝔𝝕', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "": # 0xf422 - 0xf43a # - t: "bold italic" - - spell: "translate('.', '', '∂εθκφρπ')" + - SPELL: "translate('.', '', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) @@ -3604,38 +3604,38 @@ - "": [t: "gras italique nahblah"] # 0xf495 (en: 'bold italic nahblah', DeepL translation) - "𝝖-𝝮": # 0x1d756 - 0x1d76e - - spell: "translate('.', '𝝖𝝗𝝘𝝙𝝚𝝛𝝜𝝝𝝞𝝟𝝠𝝡𝝢𝝣𝝤𝝥𝝦𝝧𝝨𝝩𝝪𝝫𝝬𝝭𝝮', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + - SPELL: "translate('.', '𝝖𝝗𝝘𝝙𝝚𝝛𝝜𝝝𝝞𝝟𝝠𝝡𝝢𝝣𝝤𝝥𝝦𝝧𝝨𝝩𝝪𝝫𝝬𝝭𝝮', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf4b6 - 0xf4ce - - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + - SPELL: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "𝝰-𝞈": # 0x1d770 - 0x1d788 - - spell: "translate('.', '𝝰𝝱𝝲𝝳𝝴𝝵𝝶𝝷𝝸𝝹𝝺𝝻𝝼𝝽𝝾𝝿𝞀𝞁𝞂𝞃𝞄𝞅𝞆𝞇𝞈', 'αβγδεζηθικλμνξοπρςστυφχψω')" + - SPELL: "translate('.', '𝝰𝝱𝝲𝝳𝝴𝝵𝝶𝝷𝝸𝝹𝝺𝝻𝝼𝝽𝝾𝝿𝞀𝞁𝞂𝞃𝞄𝞅𝞆𝞇𝞈', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf4d0 - 0xf4e8 - - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" + - SPELL: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "𝞉𝞊𝞋𝞌𝞍𝞎𝞏": # 0x1d789 - 0x1d78f - - spell: "translate('.', '𝞉𝞊𝞋𝞌𝞍𝞎𝞏', '∂εθκφρπ')" + - SPELL: "translate('.', '𝞉𝞊𝞋𝞌𝞍𝞎𝞏', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "": # 0xf4e9 - 0xf4ef - - spell: "translate('.', '', '∂εθκφρπ')" + - SPELL: "translate('.', '', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) @@ -3646,14 +3646,14 @@ - "𝞐-𝞨": # 0x1d790 - 0x1d7a8 # - t: "bold italic" - - spell: "translate('.', '𝞐𝞑𝞒𝞓𝞔𝞕𝞖𝞗𝞘𝞙𝞚𝞛𝞜𝞝𝞞𝞟𝞠𝞡𝞢𝞣𝞤𝞥𝞦𝞧𝞨', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + - SPELL: "translate('.', '𝞐𝞑𝞒𝞓𝞔𝞕𝞖𝞗𝞘𝞙𝞚𝞛𝞜𝞝𝞞𝞟𝞠𝞡𝞢𝞣𝞤𝞥𝞦𝞧𝞨', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf4f0 - 0xf508 # - t: "bold italic" - - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + - SPELL: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) @@ -3661,14 +3661,14 @@ - "𝞪-𝟂": # 0x1d7aa - 0x1d7c2 # - t: "bold italic" - - spell: "translate('.', '𝞪𝞫𝞬𝞭𝞮𝞯𝞰𝞱𝞲𝞳𝞴𝞵𝞶𝞷𝞸𝞹𝞺𝞻𝞼𝞽𝞾𝞿𝟀𝟁𝟂', 'αβγδεζηθικλμνξοπρςστυφχψω')" + - SPELL: "translate('.', '𝞪𝞫𝞬𝞭𝞮𝞯𝞰𝞱𝞲𝞳𝞴𝞵𝞶𝞷𝞸𝞹𝞺𝞻𝞼𝞽𝞾𝞿𝟀𝟁𝟂', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf50a - 0xf522 # - t: "bold italic" - - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" + - SPELL: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) @@ -3676,14 +3676,14 @@ - "𝟃𝟄𝟅𝟆𝟇𝟈𝟉": # 0x1d7c3 - 0x1d7c9 # - t: "bold italic" - - spell: "translate('.', '𝟃𝟄𝟅𝟆𝟇𝟈𝟉', '∂εθκφρπ')" + - SPELL: "translate('.', '𝟃𝟄𝟅𝟆𝟇𝟈𝟉', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "": # 0xf523 - 0xf529 # - t: "bold italic" - - spell: "translate('.', '', '∂εθκφρπ')" + - SPELL: "translate('.', '', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) @@ -3693,27 +3693,27 @@ - "𝞩": [t: "symbole mathématique sans empattement italique gras nabla"] # 0x1d7a9 (en: 'bold nahblah', DeepL: 'gras nahblah') - "-": # 0xf52e - 0xf537 (old MathType) - - spell: "translate('.', '', '0123456789')" + - SPELL: "translate('.', '', '0123456789')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "𝟎-𝟗": # 0x1d7ce - 0x1d7d7 - - spell: "translate('.', '𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗', '0123456789')" + - SPELL: "translate('.', '𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗', '0123456789')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf52e - 0xf537 (old MathType) - - spell: "translate('.', '', '0123456789')" + - SPELL: "translate('.', '', '0123456789')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) - "𝟬-𝟵": # 0x1D7EC - 0x1D7F5 - - spell: "translate('.', '𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵', '0123456789')" + - SPELL: "translate('.', '𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵', '0123456789')" - test: if: "not($IgnoreBold)" then: [t: "gras"] # (en: 'bold', DeepL translation) @@ -3801,14 +3801,14 @@ - if: "$SpeechStyle != 'ClearSpeak'" then_test: if: "$DefaultToGiven" - then: [t: "sachant"] # (en: 'given', DeepL translation) + then: [T: "sachant"] # (en: 'given', DeepL translation) else: [t: "barre verticale"] # (en: 'vertical line', DeepL: 'ligne verticale') - else_if: "not(preceding-sibling::*) or not(following-sibling::*)" then: [t: "ligne verticale"] # (en: 'vertical line', DeepL translation) - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" then: [t: "tel que"] # (en: 'such that', DeepL translation) - else_if: "$ClearSpeak_VerticalLine = 'Given' or $DefaultToGiven" - then: [t: "sachant"] # (en: 'given', DeepL translation) + then: [T: "sachant"] # (en: 'given', DeepL translation) - else: [t: "barre verticale"] # (en: 'divides', DeepL: 'divise') - "~": [t: "tilde"] # 0xff5e - "¬": [t: "négation"] # 0xffe2 (en: 'not', DeepL: 'non') From d29140a4d19f424b6970615db189e21ae13b0406 Mon Sep 17 00:00:00 2001 From: Olivier Thiffault Date: Sat, 4 Jul 2026 12:28:30 -0400 Subject: [PATCH 43/53] corrections to unicode-yaml v1 --- Rules/Languages/fr/unicode-full.yaml | 350 +++++++++++++-------------- 1 file changed, 175 insertions(+), 175 deletions(-) diff --git a/Rules/Languages/fr/unicode-full.yaml b/Rules/Languages/fr/unicode-full.yaml index f3bebfbd5..a7776a8ea 100644 --- a/Rules/Languages/fr/unicode-full.yaml +++ b/Rules/Languages/fr/unicode-full.yaml @@ -1,197 +1,197 @@ --- - - "¢": [t: "centimes"] # 0xa2 (en: 'cents') - - "£": [t: "livres"] # 0xa3 (en: 'pounds') - - "¤": [t: "symbole monétaire"] # 0xa4 (en: 'currency sign') - - "¥": [t: "yen"] # 0xa5 - - "¦": [t: "barre déjointe"] # 0xa6 (en: 'broken bar') - - "§": [t: "paragraphe"] # 0xa7 (en: 'section') - - "¨": [t: "tréma"] # 0xa8 (en: 'double dot') - - "©": [t: "copyright"] # 0xa9 - - "ª": [t: "indicateur ordinal féminin"] # 0xaa (en: 'feminine ordinal indicator') - - "¬": [t: "négation"] # 0xac (en: 'not') - - "«": [t: "guillemet chevron pointant gauche"] # 0xab (en: 'left-pointing double angle quote mark', MathPlayer: 'guillemet chevron pointant vers la gauche', DeepL: 'guillemet à double angle pointant vers la gauche') + - "¢": [T: "centimes"] # 0xa2 (en: 'cents') + - "£": [T: "livres"] # 0xa3 (en: 'pounds') + - "¤": [T: "symbole monétaire"] # 0xa4 (en: 'currency sign') + - "¥": [T: "yen"] # 0xa5 + - "¦": [T: "barre déjointe"] # 0xa6 (en: 'broken bar') + - "§": [T: "paragraphe"] # 0xa7 (en: 'section') + - "¨": [T: "tréma"] # 0xa8 (en: 'double dot') + - "©": [T: "copyright"] # 0xa9 + - "ª": [T: "indicateur ordinal féminin"] # 0xaa (en: 'feminine ordinal indicator') + - "¬": [T: "négation"] # 0xac (en: 'not') + - "«": [T: "guillemet chevron pointant gauche"] # 0xab (en: 'left-pointing double angle quote mark', MathPlayer: 'guillemet chevron pointant vers la gauche', DeepL: 'guillemet à double angle pointant vers la gauche') - "¯": # 0xaf - test: if: "ancestor::m:modified-variable and preceding-sibling::*[1][self::m:mi]" - then: [t: "barre"] # (en: 'bar', DeepL translation) - else: [t: "macron"] # (en: 'line') - - "²": [t: "au carré"] # 0xb2 (en: 'two', MathPlayer: 'exposant deux', DeepL: 'deux') - - "³": [t: "cubique"] # 0xb3 (en: 'three', MathPlayer: 'exposant trois', DeepL: 'trois') - - "´": [t: "accent aigu"] # 0xb4 (en: 'acute') - - "µ": [t: "symbole micro"] # 0xb5 (en: 'micro') - - "¹": [t: "exposant un"] # 0xb9 (en: 'one', DeepL: 'un') - - "º": [t: "indicateur ordinal masculin"] # 0xb9 (en: 'masculine ordinal indicator') + then: [T: "barre"] # (en: 'bar', DeepL translation) + else: [T: "ligne"] # (en: 'line') + - "²": [T: "au carré"] # 0xb2 (en: 'two', MathPlayer: 'exposant deux', DeepL: 'deux') + - "³": [T: "cubique"] # 0xb3 (en: 'three', MathPlayer: 'exposant trois', DeepL: 'trois') + - "´": [T: "accent aigu"] # 0xb4 (en: 'acute') + - "µ": [T: "symbole micro"] # 0xb5 (en: 'micro') + - "¹": [T: "exposant un"] # 0xb9 (en: 'one', DeepL: 'un') + - "º": [T: "indicateur ordinal masculin"] # 0xb9 (en: 'masculine ordinal indicator') - "·": - test: if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolDot = 'Auto'" - then: [t: "fois"] # (en: 'times', DeepL translation) - else: [t: "point médian"] # (en: 'dot') + then: [T: "fois"] # (en: 'times', DeepL translation) + else: [T: "point médian"] # (en: 'dot') - "×": # 0xd7 - test: if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolX = 'Auto'" - then: [t: "fois"] # (en: 'times', DeepL translation) + then: [T: "fois"] # (en: 'times', DeepL translation) else_test: if: $ClearSpeak_MultSymbolX = 'By' - then: [t: "par"] # (en: 'by', DeepL translation) - else: [t: "multiplié par"] # (en: 'cross') - - "÷": [t: "divisé par"] # 0xf7 (en: 'divided by') - - "¡": [t: "point d'exclamation renversé"] # 0xa1 (en: 'inverted exclamation mark') - - "¶": [t: "fin de paragraphe"] # 0xb6 (en: 'paragraph mark') - - "¿": [t: "point d'interrogation renversé"] # 0xbf (en: 'inverted question mark') - - - "ʰ": [t: "modificateur petit h"] # 0x2b0 (en: 'modifier small h', DeepL translation) - - "ʱ": [t: "modificateur petit h avec crochet"] # 0x2b1 (en: 'modifier small h with hook', DeepL translation) - - "ʲ": [t: "modificateur petit j"] # 0x2b2 (en: 'modifier small j', DeepL translation) - - "ʳ": [t: "modificateur small r"] # 0x2b3 (en: 'modifier small r', DeepL translation) - - "ʴ": [t: "modificateur petit tourné vers la droite"] # 0x2b4 (en: 'modifier small turned r', DeepL translation) - - "ʵ": [t: "modificateur petit r tourné avec crochet"] # 0x2b5 (en: 'modifier small turned r with hook', DeepL translation) + then: [T: "par"] # (en: 'by', DeepL translation) + else: [T: "multiplié par"] # (en: 'cross') + - "÷": [T: "divisé par"] # 0xf7 (en: 'divided by') + - "¡": [T: "point d'exclamation renversé"] # 0xa1 (en: 'inverted exclamation mark') + - "¶": [T: "fin de paragraphe"] # 0xb6 (en: 'paragraph mark') + - "¿": [T: "point d'interrogation renversé"] # 0xbf (en: 'inverted question mark') + + - "ʰ": [T: "modificateur petit h"] # 0x2b0 (en: 'modifier small h', DeepL translation) + - "ʱ": [T: "modificateur petit h avec crochet"] # 0x2b1 (en: 'modifier small h with hook', DeepL translation) + - "ʲ": [T: "modificateur petit j"] # 0x2b2 (en: 'modifier small j', DeepL translation) + - "ʳ": [T: "modificateur petit r"] # 0x2b3 (en: 'modifier small r', DeepL translation) + - "ʴ": [T: "modificateur petit r tourné"] # 0x2b4 (en: 'modifier small turned r', DeepL translation) + - "ʵ": [T: "modificateur petit r tourné avec crochet"] # 0x2b5 (en: 'modifier small turned r with hook', DeepL translation) - "ʶ": # 0x2b6 - spell: "translate('R', 'R', 'R')" - T: "modificateur petit inversé" # (en: 'modifier small inverted', DeepL translation) - - "ʷ": [t: "modificateur petit w"] # 0x2b7 (en: 'modifier small w', DeepL translation) - - "ʸ": [t: "modificateur petit y"] # 0x2b8 (en: 'modifier small y', DeepL translation) - - "ʹ": [t: "prime"] # 0x2b9 (en: 'modifier prime', DeepL: 'modificateur prime') - - "ʺ": [t: "double prime"] # 0x2ba (en: 'modifier double prime', DeepL: 'modificateur double prime') - - "ʻ": [t: "modificateur transformé en virgule"] # 0x2bb (en: 'modifier turned comma', DeepL translation) - - "ʼ": [t: "modificateur apostrophe"] # 0x2bc (en: 'modifier apostrophe', DeepL translation) - - "ʽ": [t: "modificateur virgule inversée"] # 0x2bd (en: 'modifier reversed comma', DeepL translation) - - "ʾ": [t: "lettre modificative demi anneau à droite"] # 0x2be (en: 'modifier right half ring', DeepL: 'modificateur demi anneau droit') - - "ʿ": [t: "lettre modificative demi anneau à gauche"] # 0x2bf (en: 'modifier left half ring', DeepL: 'modificateur demi anneau gauche') - - "ˀ": [t: "modificateur arrêt glottal"] # 0x2c0 (en: 'modifier glottal stop', DeepL translation) - - "ˁ": [t: "modificateur arrêt glottal inversé"] # 0x2c1 (en: 'modifier reversed glottal stop', DeepL translation) - - "˂": [t: "modificateur flèche gauche"] # 0x2c2 (en: 'modifier left arrowhead', DeepL translation) - - "˃": [t: "modificateur flèche droite"] # 0x2c3 (en: 'modifier right arrowhead', DeepL translation) - - "˄": [t: "modificateur flèche vers le haut"] # 0x2c4 (en: 'modifier up arrowhead', DeepL translation) - - "˅": [t: "modificateur flèche vers le bas"] # 0x2c5 (en: 'modifier down arrowhead', DeepL translation) - - "ˆ": [t: "lettre modificative accent circonflexe"] # 0x2c6 (en: 'modifier circumflex accent', DeepL: 'modificateur accent circonflexe') - - "ˇ": [t: "caron"] # 0x2c7 (en: 'check', DeepL: 'vérification') - - "ˈ": [t: "modificateur ligne verticale"] # 0x2c8 (en: 'modifier vertical line', DeepL translation) - - "ˉ": [t: "modificateur macron"] # 0x2c9 (en: 'modifier macron', DeepL translation) - - "ˊ": [t: "modificateur accent aigu"] # 0x2ca (en: 'modifier acute accent', DeepL translation) - - "ˋ": [t: "modificateur accent grave"] # 0x2cb (en: 'modifier grave accent', DeepL translation) - - "ˌ": [t: "modificateur ligne verticale basse"] # 0x2cc (en: 'modifier low vertical line', DeepL translation) - - "ˍ": [t: "modificateur macron bas"] # 0x2cd (en: 'modifier low macron', DeepL translation) - - "ˎ": [t: "modificateur accent grave"] # 0x2ce (en: 'modifier low grave accent', DeepL translation) - - "ˏ": [t: "modificateur accent aigu grave"] # 0x2cf (en: 'modifier low acute accent', DeepL translation) - - "ː": [t: "modificateur deux-points triangulaires"] # 0x2d0 (en: 'modifier triangular colon', DeepL translation) - - "ˑ": [t: "modificateur demi-points triangulaires"] # 0x2d1 (en: 'modifier half triangular colon', DeepL translation) - - "˒": [t: "modificateur centré sur le demi-anneau droit"] # 0x2d2 (en: 'modifier centered right half ring', DeepL translation) - - "˓": [t: "modificateur demi anneau centré à gauche"] # 0x2d3 (en: 'modifier centered left half ring', DeepL translation) - - "˔": [t: "modificateur up tadck"] # 0x2d4 (en: 'modifier up tadck', DeepL translation) - - "˕": [t: "modificateur down tack"] # 0x2d5 (en: 'modifier down tack', DeepL translation) - - "˖": [t: "modificateur signe plus"] # 0x2d6 (en: 'modifier plus sign', DeepL translation) - - "˗": [t: "modificateur signe moins"] # 0x2d7 (en: 'modifier minus sign', DeepL translation) - - "˘": [t: "brève"] # 0x2d8 (en: 'breve') - - "˙": [t: "point en chef"] # 0x2d9 (en: 'dot') - - "˚": [t: "rond en chef"] # 0x2da (en: 'ring above') - - "˛": [t: "ogonek"] # 0x2db - - "˜": [t: "tilde"] # 0x2dc (en: 'small tilde') - - "˝": [t: "double accent aigu"] # 0x2dd (en: 'double acute accent') - - "˞": [t: "modificateur crochet rhôtique"] # 0x2de (en: 'modifier rhotic hook', DeepL translation) - - "˟": [t: "modificateur accent croisé"] # 0x2df (en: 'modifier cross accent', DeepL translation) - - "ˠ": [t: "modificateur small gamma"] # 0x2e0 (en: 'modifier small gamma', DeepL translation) - - "ˡ": [t: "modificateur petit l"] # 0x2e1 (en: 'modifier small l', DeepL translation) - - "ˢ": [t: "modificateur petit s"] # 0x2e2 (en: 'modifier small s', DeepL translation) - - "ˣ": [t: "modificateur petit x"] # 0x2e3 (en: 'modifier small x', DeepL translation) - - "ˤ": [t: "modificateur petit arrêt glottal inversé"] # 0x2e4 (en: 'modifier small reversed glottal stop', DeepL translation) - - "˥": [t: "modificateur barre de tonalité extra-haute"] # 0x2e5 (en: 'modifier extra-high tone bar', DeepL translation) - - "˦": [t: "modificateur high tone bar"] # 0x2e6 (en: 'modifier high tone bar', DeepL translation) - - "˧": [t: "modificateur barre de tonalité moyenne"] # 0x2e7 (en: 'modifier mid tone bar', DeepL translation) - - "˨": [t: "modificateur low tone bar"] # 0x2e8 (en: 'modifier low tone bar', DeepL translation) - - "˩": [t: "modificateur barre de tonalité extra-basse"] # 0x2e9 (en: 'modifier extra-low tone bar', DeepL translation) - - "˪": [t: "modificateur yin départ marque de tonalité"] # 0x2ea (en: 'modifier yin departing tone mark', DeepL translation) - - "˫": [t: "modificateur yang marque de tonalité de départ"] # 0x2eb (en: 'modifier yang departing tone mark', DeepL translation) - - "ˬ": [t: "modificateur d'harmonisation"] # 0x2ec (en: 'modifier voicing', DeepL translation) - - "˭": [t: "modificateur non aspiré"] # 0x2ed (en: 'modifier unaspirated', DeepL translation) - - "ˮ": [t: "modificateur double apostrophe"] # 0x2ee (en: 'modifier double apostrophe', DeepL translation) - - "˯": [t: "modificateur low down arrowhead"] # 0x2ef (en: 'modifier low down arrowhead', DeepL translation) - - "˰": [t: "modificateur bas pointe de flèche vers le haut"] # 0x2f0 (en: 'modifier low up arrowhead', DeepL translation) - - "˱": [t: "modificateur low left arrowhead"] # 0x2f1 (en: 'modifier low left arrowhead', DeepL translation) - - "˲": [t: "modificateur bas pointe de flèche droite"] # 0x2f2 (en: 'modifier low right arrowhead', DeepL translation) - - "˳": [t: "modificateur anneau bas"] # 0x2f3 (en: 'modifier low ring', DeepL translation) - - "˴": [t: "modificateur accent grave moyen"] # 0x2f4 (en: 'modifier middle grave accent', DeepL translation) - - "˵": [t: "modificateur double accent grave moyen"] # 0x2f5 (en: 'modifier middle double grave accent', DeepL translation) - - "˶": [t: "modificateur double accent aigu moyen"] # 0x2f6 (en: 'modifier middle double acute accent', DeepL translation) - - "˷": [t: "modificateur bas tilde"] # 0x2f7 (en: 'modifier low tilde', DeepL translation) - - "˸": [t: "modificateur deux points surélevés"] # 0x2f8 (en: 'modifier raised colon', DeepL translation) - - "˹": [t: "modificateur début ton haut"] # 0x2f9 (en: 'modifier begin high tone', DeepL translation) - - "˺": [t: "modificateur fin tonalité haute"] # 0x2fa (en: 'modifier end high tone', DeepL translation) - - "˻": [t: "modificateur début tonalité basse"] # 0x2fb (en: 'modifier begin low tone', DeepL translation) - - "˼": [t: "modificateur end low tone"] # 0x2fc (en: 'modifier end low tone', DeepL translation) - - "˽": [t: "modificateur tablette"] # 0x2fd (en: 'modifier shelf', DeepL translation) - - "˾": [t: "modificateur étagère ouverte"] # 0x2fe (en: 'modifier open shelf', DeepL translation) - - "˿": [t: "modificateur flèche gauche basse"] # 0x2ff (en: 'modifier low left arrow', DeepL translation) - - "̀": [t: "diacritique accent grave"] # 0x300 (en: 'grave accent embellishment', DeepL: 'accent grave') - - "́": [t: "diacritique accent aigu"] # 0x301 (en: 'acute accent embellishment', DeepL: 'accent aigu embelli') - - "̂": [t: "diacritique accent circonflexe"] # 0x302 (en: 'circumflex accent embellishment', DeepL: 'accent circonflexe fioriture') - - "̃": [t: "diacritique tilde"] # 0x303 (en: 'tilde embellishment', DeepL: 'tilde enjoliveur') - - "̄": [t: "diacritique macron"] # 0x304 (en: 'macron embellishment', DeepL: 'macron embellissement') - - "̅": [t: "diacritique tiret haut"] # 0x305 (en: 'overbar embellishment', DeepL: 'emblème de la barre supérieure') - - "̆": [t: "diacritique brève"] # 0x306 (en: 'breve embellishment', DeepL: 'brève fioriture') - - "̇": [t: "diacritique point en chef"] # 0x307 (en: 'dot above embellishment', DeepL: 'point au-dessus de la fioriture') - - "̈": [t: "diacritique tréma"] # 0x308 (en: 'diaeresis embellishment', DeepL: 'embellissement du tréma') - - "̉": [t: "crochet au-dessus de l'ornement"] # 0x309 (en: 'hook above embellishment', DeepL translation) - - "̊": [t: "diacritique crochet en chef"] # 0x30a (en: 'ring above embellishment', DeepL: 'anneau au-dessus de l'ornement') - - "̋": [t: "double accent aigu fioriture"] # 0x30b (en: 'double acute accent embellishment', DeepL translation) - - "̌": [t: "diacritique caron"] # 0x30c (en: 'check', DeepL: 'vérification') - - "̍": [t: "ligne verticale au-dessus de l'ornement"] # 0x30d (en: 'vertical line above embellishment', DeepL translation) - - "̎": [t: "double ligne verticale au-dessus de l'emblème"] # 0x30e (en: 'double vertical line above embellishment', DeepL translation) - - "̏": [t: "double accent grave"] # 0x30f (en: 'double grave accent embellishment', DeepL translation) - - "̐": [t: "embellissement candrabindu"] # 0x310 (en: 'candrabindu embellishment', DeepL translation) - - "̑": [t: "diacritique brève renversée"] # 0x311 (en: 'inverted breve embellishment', DeepL: 'fioriture en forme de brève inversée') - - "̒": [t: "virgule tournée au-dessus de l'embellissement"] # 0x312 (en: 'turned comma above embellishment', DeepL translation) - - "̓": [t: "virgule au-dessus de la fioriture"] # 0x313 (en: 'comma above embellishment', DeepL translation) - - "̔": [t: "virgule inversée au-dessus de l'embellissement"] # 0x314 (en: 'reversed comma above embellishment', DeepL translation) - - "̕": [t: "virgule au-dessus de la fioriture droite"] # 0x315 (en: 'comma above right embellishment', DeepL translation) - - "̖": [t: "accent grave en dessous de la fioriture"] # 0x316 (en: 'grave accent below embellishment', DeepL translation) - - "̗": [t: "accent aigu sous la fioriture"] # 0x317 (en: 'acute accent below embellishment', DeepL translation) - - "̘": [t: "gauche point d'amure en dessous de l'embellissement"] # 0x318 (en: 'left tack below embellishment', DeepL translation) - - "̙": [t: "amure droite en dessous de l'ornement"] # 0x319 (en: 'right tack below embellishment', DeepL translation) - - "̚": [t: "angle gauche au-dessus de l'embellissement"] # 0x31a (en: 'left angle above embellishment', DeepL translation) - - "̛": [t: "ornement de corne"] # 0x31b (en: 'horn embellishment', DeepL translation) - - "̜": [t: "demi-anneau gauche en dessous de l'ornement"] # 0x31c (en: 'left half ring below embellishment', DeepL translation) - - "̝": [t: "point d'amure vers le haut sous l'emblème"] # 0x31d (en: 'up tack below embellishment', DeepL translation) - - "̞": [t: "en bas l'amure en dessous de l'embellissement"] # 0x31e (en: 'down tack below embellishment', DeepL translation) - - "̟": [t: "signe plus sous la fioriture"] # 0x31f (en: 'plus sign below embellishment', DeepL translation) - - "̠": [t: "signe moins en dessous de l'ornement"] # 0x320 (en: 'minus sign below embellishment', DeepL translation) - - "̡": [t: "crochet palatalisé sous la fioriture"] # 0x321 (en: 'palatalized hook below embellishment', DeepL translation) - - "̢": [t: "crochet rétroflexe en dessous de la fioriture"] # 0x322 (en: 'retroflex hook below embellishment', DeepL translation) - - "̣": [t: "diacritique point souscrit"] # 0x323 (en: 'dot below embellishment', DeepL: 'point en dessous de la fioriture') - - "̤": [t: "diacritique tréma souscrit"] # 0x324 (en: 'diaeresis below embellishment', DeepL: 'tréma au-dessous de la fioriture') - - "̥": [t: "anneau au-dessous de la fioriture"] # 0x325 (en: 'ring below embellishment', DeepL translation) - - "̦": [t: "virgule en dessous de la fioriture"] # 0x326 (en: 'comma below embellishment', DeepL translation) - - "̧": [t: "diacritique cédille"] # 0x327 (en: 'cedilla embellishment', DeepL: 'cedilla fioriture') - - "̨": [t: "embellissement ogonek"] # 0x328 (en: 'ogonek embellishment', DeepL translation) - - "̩": [t: "ligne verticale sous l'emblème"] # 0x329 (en: 'vertical line below embellishment', DeepL translation) - - "̪": [t: "pont sous l'embellissement"] # 0x32a (en: 'bridge below embellishment', DeepL translation) - - "̫": [t: "arc double inversé au-dessous de la fioriture"] # 0x32b (en: 'inverted double arch below embellishment', DeepL translation) - - "̬": [t: "caron sous la fioriture"] # 0x32c (en: 'caron below embellishment', DeepL translation) - - "̭": [t: "accent circonflexe sous la fioriture"] # 0x32d (en: 'circumflex accent below embellishment', DeepL translation) - - "̮": [t: "diacritique brève souscrite"] # 0x32e (en: 'breve below embellishment', DeepL: 'breve en dessous de la fioriture') - - "̯": [t: "breveté inversé en dessous de l'embellissement"] # 0x32f (en: 'inverted breve below embellishment', DeepL translation) - - "̰": [t: "diacritique tilde souscrit"] # 0x330 (en: 'tilde below embellishment', DeepL: 'tilde en dessous de l'embellissement') - - "̱": [t: "diacritique macron souscrit"] # 0x331 (en: 'macron below embellishment', DeepL: 'macron en dessous de l'embellissement') - - "̲": [t: "diacritique trait souscrit"] # 0x332 (en: 'low line embellishment', DeepL: 'embellissement de la ligne basse') - - "̳": [t: "double embellissement de la ligne basse"] # 0x333 (en: 'double low line embellishment', DeepL translation) - - "̴": [t: "tilde superposé embellissement"] # 0x334 (en: 'tilde overlay embellishment', DeepL translation) - - "̵": [t: "embellissement par recouvrement d'un trait court"] # 0x335 (en: 'short stroke overlay embellishment', DeepL translation) - - "̶": [t: "emblème de superposition de traits longs"] # 0x336 (en: 'long stroke overlay embellishment', DeepL translation) - - "̷": [t: "emblème de recouvrement du solidus court"] # 0x337 (en: 'short solidus overlay embellishment', DeepL translation) - - "̸": [t: "diacritique barre oblique longue"] # 0x338 (en: 'long solidus overlay embellishment', DeepL: 'long solidus overlay embellishment') - - "̹": [t: "demi anneau droit en dessous de l'embellissement"] # 0x339 (en: 'right half ring below embellishment', DeepL translation) - - "̺": [t: "pont inversé en dessous de la fioriture"] # 0x33a (en: 'inverted bridge below embellishment', DeepL translation) - - "̻": [t: "carré en dessous de l'embellissement"] # 0x33b (en: 'square below embellishment', DeepL translation) - - "̼": [t: "mouette en dessous de la fioriture"] # 0x33c (en: 'seagull below embellishment', DeepL translation) - - "̽": [t: "x au-dessus de la fioriture"] # 0x33d (en: 'x above embellishment', DeepL translation) - - "̾": [t: "tilde vertical"] # 0x33e (en: 'vertical tilde embellishment', DeepL translation) - - "̿": [t: "embellissement en double surlignage"] # 0x33f (en: 'double overline embellishment', DeepL translation) - - "̀": [t: "embellissement de la marque de tonalité grave"] # 0x340 (en: 'grave tone mark embellishment', DeepL translation) - - "́": [t: "tonalité aiguë marque d'embellissement"] # 0x341 (en: 'acute tone mark embellishment', DeepL translation) - - "͆": [t: "pont au-dessus"] # 0x346 (en: 'bridge above', DeepL translation) + - "ʷ": [T: "modificateur petit w"] # 0x2b7 (en: 'modifier small w', DeepL translation) + - "ʸ": [T: "modificateur petit y"] # 0x2b8 (en: 'modifier small y', DeepL translation) + - "ʹ": [T: "prime"] # 0x2b9 (en: 'modifier prime', DeepL: 'modificateur prime') + - "ʺ": [T: "double prime"] # 0x2ba (en: 'modifier double prime', DeepL: 'modificateur double prime') + - "ʻ": [T: "modificateur virgule tournée"] # 0x2bb (en: 'modifier turned comma', DeepL translation) + - "ʼ": [T: "modificateur apostrophe"] # 0x2bc (en: 'modifier apostrophe', DeepL translation) + - "ʽ": [T: "modificateur virgule inversée"] # 0x2bd (en: 'modifier reversed comma', DeepL translation) + - "ʾ": [T: "modificateur demi anneau à droite"] # 0x2be (en: 'modifier right half ring', DeepL: 'modificateur demi anneau droit') + - "ʿ": [T: "modificateur demi anneau à gauche"] # 0x2bf (en: 'modifier left half ring', DeepL: 'modificateur demi anneau gauche') + - "ˀ": [T: "modificateur arrêt glottal"] # 0x2c0 (en: 'modifier glottal stop', DeepL translation) + - "ˁ": [T: "modificateur arrêt glottal inversé"] # 0x2c1 (en: 'modifier reversed glottal stop', DeepL translation) + - "˂": [T: "modificateur flèche gauche"] # 0x2c2 (en: 'modifier left arrowhead', DeepL translation) + - "˃": [T: "modificateur flèche droite"] # 0x2c3 (en: 'modifier right arrowhead', DeepL translation) + - "˄": [T: "modificateur flèche vers le haut"] # 0x2c4 (en: 'modifier up arrowhead', DeepL translation) + - "˅": [T: "modificateur flèche vers le bas"] # 0x2c5 (en: 'modifier down arrowhead', DeepL translation) + - "ˆ": [T: "modificateur accent circonflexe"] # 0x2c6 (en: 'modifier circumflex accent', DeepL: 'modificateur accent circonflexe') + - "ˇ": [T: "caron"] # 0x2c7 (en: 'check', DeepL: 'vérification') + - "ˈ": [T: "modificateur ligne verticale"] # 0x2c8 (en: 'modifier vertical line', DeepL translation) + - "ˉ": [T: "modificateur macron"] # 0x2c9 (en: 'modifier macron', DeepL translation) + - "ˊ": [T: "modificateur accent aigu"] # 0x2ca (en: 'modifier acute accent', DeepL translation) + - "ˋ": [T: "modificateur accent grave"] # 0x2cb (en: 'modifier grave accent', DeepL translation) + - "ˌ": [T: "modificateur ligne verticale basse"] # 0x2cc (en: 'modifier low vertical line', DeepL translation) + - "ˍ": [T: "modificateur macron bas"] # 0x2cd (en: 'modifier low macron', DeepL translation) + - "ˎ": [T: "modificateur accent grave bas"] # 0x2ce (en: 'modifier low grave accent', DeepL translation) + - "ˏ": [T: "modificateur accent aigu bas"] # 0x2cf (en: 'modifier low acute accent', DeepL translation) + - "ː": [T: "modificateur deux-points triangulaires"] # 0x2d0 (en: 'modifier triangular colon', DeepL translation) + - "ˑ": [T: "modificateur demi-points triangulaires"] # 0x2d1 (en: 'modifier half triangular colon', DeepL translation) + - "˒": [T: "modificateur demi-anneau droit centré"] # 0x2d2 (en: 'modifier centered right half ring', DeepL translation) + - "˓": [T: "modificateur demi anneau gauche centré"] # 0x2d3 (en: 'modifier centered left half ring', DeepL translation) + - "˔": [T: "modificateur up tack"] # 0x2d4 (en: 'modifier up tack', DeepL translation) + - "˕": [T: "modificateur down tack"] # 0x2d5 (en: 'modifier down tack', DeepL translation) + - "˖": [T: "modificateur signe plus"] # 0x2d6 (en: 'modifier plus sign', DeepL translation) + - "˗": [T: "modificateur signe moins"] # 0x2d7 (en: 'modifier minus sign', DeepL translation) + - "˘": [T: "brève"] # 0x2d8 (en: 'breve') + - "˙": [T: "point en chef"] # 0x2d9 (en: 'dot') + - "˚": [T: "rond en chef"] # 0x2da (en: 'ring above') + - "˛": [T: "ogonek"] # 0x2db + - "˜": [T: "tilde"] # 0x2dc (en: 'small tilde') + - "˝": [T: "double accent aigu"] # 0x2dd (en: 'double acute accent') + - "˞": [T: "modificateur crochet rhôtique"] # 0x2de (en: 'modifier rhotic hook', DeepL translation) + - "˟": [T: "modificateur accent croisé"] # 0x2df (en: 'modifier cross accent', DeepL translation) + - "ˠ": [T: "modificateur petit gamma"] # 0x2e0 (en: 'modifier small gamma', DeepL translation) + - "ˡ": [T: "modificateur petit l"] # 0x2e1 (en: 'modifier small l', DeepL translation) + - "ˢ": [T: "modificateur petit s"] # 0x2e2 (en: 'modifier small s', DeepL translation) + - "ˣ": [T: "modificateur petit x"] # 0x2e3 (en: 'modifier small x', DeepL translation) + - "ˤ": [T: "modificateur petit arrêt glottal inversé"] # 0x2e4 (en: 'modifier small reversed glottal stop', DeepL translation) + - "˥": [T: "modificateur barre de tonalité extra-haute"] # 0x2e5 (en: 'modifier extra-high tone bar', DeepL translation) + - "˦": [T: "modificateur barre de tonalité haute"] # 0x2e6 (en: 'modifier high tone bar', DeepL translation) + - "˧": [T: "modificateur barre de tonalité moyenne"] # 0x2e7 (en: 'modifier mid tone bar', DeepL translation) + - "˨": [T: "modificateur barre de tonalité basse"] # 0x2e8 (en: 'modifier low tone bar', DeepL translation) + - "˩": [T: "modificateur barre de tonalité extra-basse"] # 0x2e9 (en: 'modifier extra-low tone bar', DeepL translation) + - "˪": [T: "modificateur yin marque de tonalité de départ"] # 0x2ea (en: 'modifier yin departing tone mark', DeepL translation) + - "˫": [T: "modificateur yang marque de tonalité de départ"] # 0x2eb (en: 'modifier yang departing tone mark', DeepL translation) + - "ˬ": [T: "modificateur d'harmonisation"] # 0x2ec (en: 'modifier voicing', DeepL translation) + - "˭": [T: "modificateur non aspiré"] # 0x2ed (en: 'modifier unaspirated', DeepL translation) + - "ˮ": [T: "modificateur double apostrophe"] # 0x2ee (en: 'modifier double apostrophe', DeepL translation) + - "˯": [T: "modificateur flèche vers le bas basse"] # 0x2ef (en: 'modifier low down arrowhead', DeepL translation) + - "˰": [T: "modificateur flèche vers le haut basse"] # 0x2f0 (en: 'modifier low up arrowhead', DeepL translation) + - "˱": [T: "modificateur flèche vers la gauche basse"] # 0x2f1 (en: 'modifier low left arrowhead', DeepL translation) + - "˲": [T: "modificateur flèche vers la droite basse"] # 0x2f2 (en: 'modifier low right arrowhead', DeepL translation) + - "˳": [T: "modificateur anneau bas"] # 0x2f3 (en: 'modifier low ring', DeepL translation) + - "˴": [T: "modificateur accent grave moyen"] # 0x2f4 (en: 'modifier middle grave accent', DeepL translation) + - "˵": [T: "modificateur double accent grave moyen"] # 0x2f5 (en: 'modifier middle double grave accent', DeepL translation) + - "˶": [T: "modificateur double accent aigu moyen"] # 0x2f6 (en: 'modifier middle double acute accent', DeepL translation) + - "˷": [T: "modificateur tilde bas"] # 0x2f7 (en: 'modifier low tilde', DeepL translation) + - "˸": [T: "modificateur deux points surélevés"] # 0x2f8 (en: 'modifier raised colon', DeepL translation) + - "˹": [T: "modificateur début ton haut"] # 0x2f9 (en: 'modifier begin high tone', DeepL translation) + - "˺": [T: "modificateur fin tonalité haute"] # 0x2fa (en: 'modifier end high tone', DeepL translation) + - "˻": [T: "modificateur début tonalité basse"] # 0x2fb (en: 'modifier begin low tone', DeepL translation) + - "˼": [T: "modificateur fin tonalité basse"] # 0x2fc (en: 'modifier end low tone', DeepL translation) + - "˽": [T: "modificateur tablette"] # 0x2fd (en: 'modifier shelf', DeepL translation) + - "˾": [T: "modificateur tablette ouverte"] # 0x2fe (en: 'modifier open shelf', DeepL translation) + - "˿": [T: "modificateur flèche gauche basse"] # 0x2ff (en: 'modifier low left arrow', DeepL translation) + - "̀": [T: "diacritique accent grave"] # 0x300 (en: 'grave accent embellishment', DeepL: 'accent grave') + - "́": [T: "diacritique accent aigu"] # 0x301 (en: 'acute accent embellishment', DeepL: 'accent aigu embelli') + - "̂": [T: "diacritique accent circonflexe"] # 0x302 (en: 'circumflex accent embellishment', DeepL: 'accent circonflexe fioriture') + - "̃": [T: "diacritique tilde"] # 0x303 (en: 'tilde embellishment', DeepL: 'tilde enjoliveur') + - "̄": [T: "diacritique macron"] # 0x304 (en: 'macron embellishment', DeepL: 'macron embellissement') + - "̅": [T: "diacritique tiret haut"] # 0x305 (en: 'overbar embellishment', DeepL: 'emblème de la barre supérieure') + - "̆": [T: "diacritique brève"] # 0x306 (en: 'breve embellishment', DeepL: 'brève fioriture') + - "̇": [T: "diacritique point en chef"] # 0x307 (en: 'dot above embellishment', DeepL: 'point au-dessus de la fioriture') + - "̈": [T: "diacritique tréma"] # 0x308 (en: 'diaeresis embellishment', DeepL: 'embellissement du tréma') + - "̉": [T: "crochet au-dessus de l'ornement"] # 0x309 (en: 'hook above embellishment', DeepL translation) + - "̊": [T: "diacritique crochet en chef"] # 0x30a (en: 'ring above embellishment', DeepL: 'anneau au-dessus de l'ornement') + - "̋": [T: "double accent aigu fioriture"] # 0x30b (en: 'double acute accent embellishment', DeepL translation) + - "̌": [T: "diacritique caron"] # 0x30c (en: 'check', DeepL: 'vérification') + - "̍": [T: "ligne verticale au-dessus de l'ornement"] # 0x30d (en: 'vertical line above embellishment', DeepL translation) + - "̎": [T: "double ligne verticale au-dessus de l'emblème"] # 0x30e (en: 'double vertical line above embellishment', DeepL translation) + - "̏": [T: "double accent grave"] # 0x30f (en: 'double grave accent embellishment', DeepL translation) + - "̐": [T: "embellissement candrabindu"] # 0x310 (en: 'candrabindu embellishment', DeepL translation) + - "̑": [T: "diacritique brève renversée"] # 0x311 (en: 'inverted breve embellishment', DeepL: 'fioriture en forme de brève inversée') + - "̒": [T: "virgule tournée au-dessus de l'embellissement"] # 0x312 (en: 'turned comma above embellishment', DeepL translation) + - "̓": [T: "virgule au-dessus de la fioriture"] # 0x313 (en: 'comma above embellishment', DeepL translation) + - "̔": [T: "virgule inversée au-dessus de l'embellissement"] # 0x314 (en: 'reversed comma above embellishment', DeepL translation) + - "̕": [T: "virgule au-dessus de la fioriture droite"] # 0x315 (en: 'comma above right embellishment', DeepL translation) + - "̖": [T: "accent grave en dessous de la fioriture"] # 0x316 (en: 'grave accent below embellishment', DeepL translation) + - "̗": [T: "accent aigu sous la fioriture"] # 0x317 (en: 'acute accent below embellishment', DeepL translation) + - "̘": [T: "gauche point d'amure en dessous de l'embellissement"] # 0x318 (en: 'left tack below embellishment', DeepL translation) + - "̙": [T: "amure droite en dessous de l'embellissement"] # 0x319 (en: 'right tack below embellishment', DeepL translation) + - "̚": [T: "angle gauche au-dessus de l'embellissement"] # 0x31a (en: 'left angle above embellishment', DeepL translation) + - "̛": [T: "ornement de corne"] # 0x31b (en: 'horn embellishment', DeepL translation) + - "̜": [T: "demi-anneau gauche en dessous de l'embellissement"] # 0x31c (en: 'left half ring below embellishment', DeepL translation) + - "̝": [T: "point d'amure vers le haut sous l'embellissement"] # 0x31d (en: 'up tack below embellishment', DeepL translation) + - "̞": [T: "en bas l'amure en dessous de l'embellissement"] # 0x31e (en: 'down tack below embellishment', DeepL translation) + - "̟": [T: "signe plus sous l'embellissement"] # 0x31f (en: 'plus sign below embellishment', DeepL translation) + - "̠": [T: "signe moins sous l'embellissement"] # 0x320 (en: 'minus sign below embellishment', DeepL translation) + - "̡": [T: "crochet palatalisé sous la fioriture"] # 0x321 (en: 'palatalized hook below embellishment', DeepL translation) + - "̢": [T: "crochet rétroflexe en dessous de la fioriture"] # 0x322 (en: 'retroflex hook below embellishment', DeepL translation) + - "̣": [T: "diacritique point souscrit"] # 0x323 (en: 'dot below embellishment', DeepL: 'point en dessous de la fioriture') + - "̤": [T: "diacritique tréma souscrit"] # 0x324 (en: 'diaeresis below embellishment', DeepL: 'tréma au-dessous de la fioriture') + - "̥": [T: "anneau sous la fioriture"] # 0x325 (en: 'ring below embellishment', DeepL translation) + - "̦": [T: "virgule sous la fioriture"] # 0x326 (en: 'comma below embellishment', DeepL translation) + - "̧": [T: "diacritique cédille"] # 0x327 (en: 'cedilla embellishment', DeepL: 'cedilla fioriture') + - "̨": [T: "diacritique ogonek"] # 0x328 (en: 'ogonek embellishment', DeepL translation) + - "̩": [T: "ligne verticale sous la fioriture"] # 0x329 (en: 'vertical line below embellishment', DeepL translation) + - "̪": [T: "pont sous l'embellissement"] # 0x32a (en: 'bridge below embellishment', DeepL translation) + - "̫": [T: "arc double inversé au-dessous de la fioriture"] # 0x32b (en: 'inverted double arch below embellishment', DeepL translation) + - "̬": [T: "caron sous la fioriture"] # 0x32c (en: 'caron below embellishment', DeepL translation) + - "̭": [T: "accent circonflexe sous la fioriture"] # 0x32d (en: 'circumflex accent below embellishment', DeepL translation) + - "̮": [T: "diacritique brève souscrite"] # 0x32e (en: 'breve below embellishment', DeepL: 'breve en dessous de la fioriture') + - "̯": [T: "breveté inversé en dessous de l'embellissement"] # 0x32f (en: 'inverted breve below embellishment', DeepL translation) + - "̰": [T: "diacritique tilde souscrit"] # 0x330 (en: 'tilde below embellishment', DeepL: 'tilde en dessous de l'embellissement') + - "̱": [T: "diacritique macron souscrit"] # 0x331 (en: 'macron below embellishment', DeepL: 'macron en dessous de l'embellissement') + - "̲": [T: "diacritique trait souscrit"] # 0x332 (en: 'low line embellishment', DeepL: 'embellissement de la ligne basse') + - "̳": [T: "double embellissement de la ligne basse"] # 0x333 (en: 'double low line embellishment', DeepL translation) + - "̴": [T: "tilde superposé embellissement"] # 0x334 (en: 'tilde overlay embellishment', DeepL translation) + - "̵": [T: "embellissement par recouvrement d'un trait court"] # 0x335 (en: 'short stroke overlay embellishment', DeepL translation) + - "̶": [T: "emblème de superposition de traits longs"] # 0x336 (en: 'long stroke overlay embellishment', DeepL translation) + - "̷": [T: "emblème de recouvrement du solidus court"] # 0x337 (en: 'short solidus overlay embellishment', DeepL translation) + - "̸": [T: "diacritique barre oblique longue"] # 0x338 (en: 'long solidus overlay embellishment', DeepL: 'long solidus overlay embellishment') + - "̹": [T: "demi anneau droit en dessous de l'embellissement"] # 0x339 (en: 'right half ring below embellishment', DeepL translation) + - "̺": [T: "pont inversé en dessous de la fioriture"] # 0x33a (en: 'inverted bridge below embellishment', DeepL translation) + - "̻": [T: "carré en dessous de l'embellissement"] # 0x33b (en: 'square below embellishment', DeepL translation) + - "̼": [T: "mouette en dessous de la fioriture"] # 0x33c (en: 'seagull below embellishment', DeepL translation) + - "̽": [T: "x au-dessus de la fioriture"] # 0x33d (en: 'x above embellishment', DeepL translation) + - "̾": [T: "tilde vertical"] # 0x33e (en: 'vertical tilde embellishment', DeepL translation) + - "̿": [T: "embellissement en double surlignage"] # 0x33f (en: 'double overline embellishment', DeepL translation) + - "̀": [T: "embellissement de la marque de tonalité grave"] # 0x340 (en: 'grave tone mark embellishment', DeepL translation) + - "́": [T: "tonalité aiguë marque d'embellissement"] # 0x341 (en: 'acute tone mark embellishment', DeepL translation) + - "͆": [T: "pont au-dessus"] # 0x346 (en: 'bridge above', DeepL translation) - "ΪΫϏ": # 0x3aa, 0x3ab, 0x3cf - test: From 7420ef3a8a8b3c8f82afaf058a7412ace40cc931 Mon Sep 17 00:00:00 2001 From: Olivier Thiffault Date: Sat, 4 Jul 2026 12:43:19 -0400 Subject: [PATCH 44/53] corrections to unicode-yaml v2 --- Rules/Languages/fr/unicode-full.yaml | 326 +++++++++++++-------------- 1 file changed, 163 insertions(+), 163 deletions(-) diff --git a/Rules/Languages/fr/unicode-full.yaml b/Rules/Languages/fr/unicode-full.yaml index a7776a8ea..735131296 100644 --- a/Rules/Languages/fr/unicode-full.yaml +++ b/Rules/Languages/fr/unicode-full.yaml @@ -210,25 +210,25 @@ if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "majuscule"] # (en: 'cap', DeepL translation) + then: [T: "majuscule"] # (en: 'cap', DeepL translation) else: [x: "$SpeechOverrides_CapitalLetters"] - - "ϊ": [t: "iota tréma"] # 0x3ca (en: 'iota with dialytika') - - "ϋ": [t: "upsilon tréma"] # 0x3cb (en: 'upsilon with dialytika') - - "ό": [t: "omicron accent"] # 0x3cc (en: 'omicron with tonos') - - "ύ": [t: "upsilon accent"] # 0x3cd (en: 'upsilon with tonos') - - "ώ": [t: "oméga accent"] # 0x3ce (en: 'omega with tonos') - - "ϐ": [t: "bêta grec"] # 0x3d0 (en: 'beta') - - "ϑ": [t: "thêta cursif"] # 0x3d1 (en: 'theta', DeepL: 'thêta') - - "ϒ": [t: "upsilon crochet"] # 0x3d2 (en: 'upsilon with hook', DeepL: 'upsilon avec crochet') - - "ϓ": [t: "upsilon accent crochet"] # 0x3d3 (en: 'upsilon with acute and hook') - - "ϔ": [t: "upsilon tréma crochet"] # 0x3d4 (en: 'upsilon with diaeresis and hook') - - "ϕ": [t: "phi droit"] # 0x3d5 (en: 'phi', DeepL: 'phi') - - "ϖ": [t: "pi cursif"] # 0x3d6 (en: 'pi', DeepL: 'pi') - - "ϗ": [t: "ligature kai"] # 0x3d7 (en: 'kai') - - "Ϙ": [t: "koppa archaïque"] # 0x3d8 (en: 'cap archaic koppa', DeepL: 'majuscule archaïque koppa') - - "ϙ": [t: "koppa"] # 0x3d9 (en: 'archaic koppa', DeepL: 'archaïque koppa') - - "ϵ": [t: "epsilon"] # 0x3f5 - - "϶": [t: "epsilon lunaire réfléchi"] # 0x3f6 (en: 'reversed epsilon') + - "ϊ": [T: "iota tréma"] # 0x3ca (en: 'iota with dialytika') + - "ϋ": [T: "upsilon tréma"] # 0x3cb (en: 'upsilon with dialytika') + - "ό": [T: "omicron accent"] # 0x3cc (en: 'omicron with tonos') + - "ύ": [T: "upsilon accent"] # 0x3cd (en: 'upsilon with tonos') + - "ώ": [T: "oméga accent"] # 0x3ce (en: 'omega with tonos') + - "ϐ": [T: "bêta"] # 0x3d0 (en: 'beta') + - "ϑ": [T: "thêta cursif"] # 0x3d1 (en: 'theta', DeepL: 'thêta') + - "ϒ": [T: "upsilon crochet"] # 0x3d2 (en: 'upsilon with hook', DeepL: 'upsilon avec crochet') + - "ϓ": [T: "upsilon accent crochet"] # 0x3d3 (en: 'upsilon with acute and hook') + - "ϔ": [T: "upsilon tréma crochet"] # 0x3d4 (en: 'upsilon with diaeresis and hook') + - "ϕ": [T: "phi droit"] # 0x3d5 (en: 'phi', DeepL: 'phi') + - "ϖ": [T: "pi cursif"] # 0x3d6 (en: 'pi', DeepL: 'pi') + - "ϗ": [T: "ligature kai"] # 0x3d7 (en: 'kai') + - "Ϙ": [T: "koppa archaïque"] # 0x3d8 (en: 'cap archaic koppa', DeepL: 'majuscule archaïque koppa') + - "ϙ": [T: "koppa"] # 0x3d9 (en: 'archaic koppa', DeepL: 'archaïque koppa') + - "ϵ": [T: "epsilon"] # 0x3f5 + - "϶": [T: "epsilon lunaire réfléchi"] # 0x3f6 (en: 'reversed epsilon') - "А-Я": # 0x410 - 0x42f - test: if: "$CapitalLetters_Beep" @@ -245,60 +245,60 @@ if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "majuscule"] # (en: 'cap', DeepL translation) + then: [T: "majuscule"] # (en: 'cap', DeepL translation) else: [x: "$SpeechOverrides_CapitalLetters"] - - "а": [t: "a"] # 0x430 (DeepL: 'а') - - "б": [t: "bé"] # 0x431 (en: 'be', DeepL: 'être') - - "в": [t: "vé"] # 0x432 (en: 've', DeepL: 've') - - "г": [t: "gué"] # 0x433 (en: 'ghe', DeepL: 'ghe') - - "д": [t: "dé"] # 0x434 (en: 'de', DeepL: 'de') - - "е": [t: "ié"] # 0x435 (en: 'ie', DeepL: 'ie') - - "ж": [t: "jé"] # 0x436 (en: 'zhe', DeepL: 'zhe') - - "з": [t: "zé"] # 0x437 (en: 'ze', DeepL: 'ze') - - "и": [t: "i"] # 0x438 (DeepL: 'и') - - "й": [t: "i bref"] # 0x439 (en: 'short i', DeepL: 'i court') - - "к": [t: "ka"] # 0x43a - - "л": [t: "elle"] # 0x43b (en: 'el', DeepL: 'el') - - "м": [t: "emme"] # 0x43c (en: 'em', DeepL: 'em') - - "н": [t: "enne"] # 0x43d (en: 'en', DeepL: 'en') - - "о": [t: "o"] # 0x43e (DeepL: 'о') - - "п": [t: "pé"] # 0x43f (en: 'pe', DeepL: 'pe') - - "р": [t: "erre"] # 0x440 (en: 'er', DeepL: 'er') - - "с": [t: "esse"] # 0x441 (en: 'es', DeepL: 'es') - - "т": [t: "té"] # 0x442 (en: 'te', DeepL: 'te') - - "у": [t: "ou"] # 0x443 (en: 'u', DeepL: 'у') - - "ф": [t: "effe"] # 0x444 (en: 'ef', DeepL: 'ef') - - "х": [t: "kha"] # 0x445 (en: 'ha', DeepL: 'ha') - - "ц": [t: "tsé"] # 0x446 (en: 'tse', DeepL: 'tse') - - "ч": [t: "tché"] # 0x447 (en: 'che', DeepL: 'che') - - "ш": [t: "cha"] # 0x448 (en: 'sha', DeepL: 'sha') - - "щ": [t: "chtcha"] # 0x449 (en: 'shcha', DeepL: 'shcha') - - "ъ": [t: "signe dur"] # 0x44a (en: 'hard sign', DeepL: 'signe fort') - - "ы": [t: "yérou"] # 0x44b (en: 'yeru', DeepL: 'yeru') - - "ь": [t: "signe mou"] # 0x44c (en: 'soft sign') - - "э": [t: "é"] # 0x44d (en: 'e', DeepL: 'э') - - "ю": [t: "iou"] # 0x44e (en: 'yu', DeepL: 'yu') - - "я": [t: "ya"] # 0x44f - - "؆": [t: "racine cubique arabo-indique"] # 0x606 (en: 'Arabic-Indic cube root', DeepL translation) - - "؇": [t: "racine quatrième arabo-indique"] # 0x607 (en: 'Arabic-Indic fourth root', DeepL translation) - - "؈": [t: "rayon arabe"] # 0x608 (en: 'Arabic ray', DeepL translation) - - "‐": [t: "trait d'union"] # 0x2010 (en: 'hyphen') - - "‑": [t: "trait d'union insécable"] # 0x2011 (en: 'hyphen', DeepL: 'trait d'union') - - "‒": [t: "tiret numérique"] # 0x2012 (en: 'figure dash', DeepL: 'chiffre tiret') - - "–": [t: "trait d'union insécable"] # 0x2013 (en: 'en dash') - - "—": [t: "tiret numérique"] # 0x2014 (en: 'em dash') - - "―": [t: "barre horizontalle"] # 0x2015 (en: 'horizontal bar') - - "‖": [t: "double ligne verticale"] # 0x2016 (en: 'double vertical line') - - "†": [t: "obèle"] # 0x2020 (en: 'dagger') - - "‡": [t: "double obèle"] # 0x2021 (en: 'double dagger') - - - " - ": [t: "double obèle"] # 0x2000 - 0x2007 (en: ' ') + - "а": [T: "a"] # 0x430 (DeepL: 'а') + - "б": [T: "bé"] # 0x431 (en: 'be', DeepL: 'être') + - "в": [T: "vé"] # 0x432 (en: 've', DeepL: 've') + - "г": [T: "gué"] # 0x433 (en: 'ghe', DeepL: 'ghe') + - "д": [T: "dé"] # 0x434 (en: 'de', DeepL: 'de') + - "е": [T: "ié"] # 0x435 (en: 'ie', DeepL: 'ie') + - "ж": [T: "jé"] # 0x436 (en: 'zhe', DeepL: 'zhe') + - "з": [T: "zé"] # 0x437 (en: 'ze', DeepL: 'ze') + - "и": [T: "i"] # 0x438 (DeepL: 'и') + - "й": [T: "i bref"] # 0x439 (en: 'short i', DeepL: 'i court') + - "к": [T: "ka"] # 0x43a + - "л": [T: "elle"] # 0x43b (en: 'el', DeepL: 'el') + - "м": [T: "emme"] # 0x43c (en: 'em', DeepL: 'em') + - "н": [T: "enne"] # 0x43d (en: 'en', DeepL: 'en') + - "о": [T: "o"] # 0x43e (DeepL: 'о') + - "п": [T: "pé"] # 0x43f (en: 'pe', DeepL: 'pe') + - "р": [T: "erre"] # 0x440 (en: 'er', DeepL: 'er') + - "с": [T: "esse"] # 0x441 (en: 'es', DeepL: 'es') + - "т": [T: "té"] # 0x442 (en: 'te', DeepL: 'te') + - "у": [T: "ou"] # 0x443 (en: 'u', DeepL: 'у') + - "ф": [T: "effe"] # 0x444 (en: 'ef', DeepL: 'ef') + - "х": [T: "kha"] # 0x445 (en: 'ha', DeepL: 'ha') + - "ц": [T: "tsé"] # 0x446 (en: 'tse', DeepL: 'tse') + - "ч": [T: "tché"] # 0x447 (en: 'che', DeepL: 'che') + - "ш": [T: "cha"] # 0x448 (en: 'sha', DeepL: 'sha') + - "щ": [T: "chtcha"] # 0x449 (en: 'shcha', DeepL: 'shcha') + - "ъ": [T: "signe dur"] # 0x44a (en: 'hard sign', DeepL: 'signe fort') + - "ы": [T: "yérou"] # 0x44b (en: 'yeru', DeepL: 'yeru') + - "ь": [T: "signe mou"] # 0x44c (en: 'soft sign') + - "э": [T: "é"] # 0x44d (en: 'e', DeepL: 'э') + - "ю": [T: "iou"] # 0x44e (en: 'yu', DeepL: 'yu') + - "я": [T: "ya"] # 0x44f + - "؆": [T: "racine cubique arabo-indique"] # 0x606 (en: 'Arabic-Indic cube root', DeepL translation) + - "؇": [T: "racine quatrième arabo-indique"] # 0x607 (en: 'Arabic-Indic fourth root', DeepL translation) + - "؈": [T: "rayon arabe"] # 0x608 (en: 'Arabic ray', DeepL translation) + - "‐": [T: "trait d'union"] # 0x2010 (en: 'hyphen') + - "‑": [T: "trait d'union insécable"] # 0x2011 (en: 'hyphen', DeepL: 'trait d'union') + - "‒": [T: "tiret numérique"] # 0x2012 (en: 'figure dash', DeepL: 'chiffre tiret') + - "–": [T: "trait d'union insécable"] # 0x2013 (en: 'en dash') + - "—": [T: "tiret numérique"] # 0x2014 (en: 'em dash') + - "―": [T: "barre horizontalle"] # 0x2015 (en: 'horizontal bar') + - "‖": [T: "double ligne verticale"] # 0x2016 (en: 'double vertical line') + - "†": [T: "obèle"] # 0x2020 (en: 'dagger') + - "‡": [T: "double obèle"] # 0x2021 (en: 'double dagger') + + - " - ": [T: "double obèle"] # 0x2000 - 0x2007 (en: ' ') - "•": # 0x2022 - test: if: "@data-chem-formula-op" - then: [t: "point"] # (en: 'dot', DeepL translation) - else: [t: "puce"] # (en: 'bullet') + then: [T: "point"] # (en: 'dot', DeepL translation) + else: [T: "puce"] # (en: 'bullet') - "…": # 0x2026 test: @@ -307,113 +307,113 @@ # must be ClearSpeak and $ClearSpeak_Ellipses = 'AndSoOn' # speak '…' as 'and so on...' unless expr starts with '…' - "../*[1][.='…']" - then: [t: "point point point"] # (en: 'dot dot dot', DeepL translation) + then: [T: "point point point"] # (en: 'dot dot dot', DeepL translation) else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' if: "count(following-sibling::*) = 0" then: [T: "et ainsi de suite"] # (en: 'and so on', DeepL translation) else: [T: "et ainsi de suite jusqu'à"] # (en: 'and so on up to') - - "‰": [t: "symbole pour mille"] # 0x2030 (en: 'per mille') - - "‱": [t: "symbole pour dix mille"] # 0x2031 (en: 'per ten thousand') - - "′": [t: "prime"] # 0x2032 - - "″": [t: "double prime"] # 0x2033 - - "‴": [t: "triple prime"] # 0x2034 - - "‵": [t: "prime réfléchi"] # 0x2035 (en: 'reversed prime') - - "‶": [t: "double prime réfléchi"] # 0x2036 (en: 'reversed double prime') - - "‷": [t: "triple prime réfléchi"] # 0x2037 (en: 'reversed triple prime', DeepL: 'triple premier inversé') - - "‸": [t: "chevron d'insertion"] # 0x2038 (en: 'to the', DeepL: 'vers le') - - "‹": [t: "guillemet simple gauche"] # 0x2039 (en: 'single left pointing angle quote mark', MathPlayer: 'guillemet simple vers la gauche', DeepL: 'marque d'angle unique pointant vers la gauche') - - "›": [t: "guillemet simple droite"] # 0x203a (en: 'single right pointing angle quote mark', MathPlayer: 'guillemet simple vers la droite', DeepL: 'guillemet simple d'angle pointant vers la droite') + - "‰": [T: "symbole pour mille"] # 0x2030 (en: 'per mille') + - "‱": [T: "symbole pour dix mille"] # 0x2031 (en: 'per ten thousand') + - "′": [T: "prime"] # 0x2032 + - "″": [T: "double prime"] # 0x2033 + - "‴": [T: "triple prime"] # 0x2034 + - "‵": [T: "prime réfléchi"] # 0x2035 (en: 'reversed prime') + - "‶": [T: "double prime réfléchi"] # 0x2036 (en: 'reversed double prime') + - "‷": [T: "triple prime réfléchi"] # 0x2037 (en: 'reversed triple prime', DeepL: 'triple premier inversé') + - "‸": [T: "chevron d'insertion"] # 0x2038 (en: 'to the', DeepL: 'vers le') + - "‹": [T: "guillemet simple gauche"] # 0x2039 (en: 'single left pointing angle quote mark', MathPlayer: 'guillemet simple vers la gauche', DeepL: 'marque d'angle unique pointant vers la gauche') + - "›": [T: "guillemet simple droite"] # 0x203a (en: 'single right pointing angle quote mark', MathPlayer: 'guillemet simple vers la droite', DeepL: 'guillemet simple d'angle pointant vers la droite') - "‼": # 0x203c - test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" - then: [t: "double point d'exclamation"] # 0x203c (en: 'double exclamation point', DeepL translation) - else: [t: "double point d'exclamation"] # 0x203c (en: 'double factorial', DeepL: 'double factorielle') + then: [T: "double point d'exclamation"] # 0x203c (en: 'double exclamation point', DeepL translation) + else: [T: "double factorielle"] # 0x203c (en: 'double factorial', DeepL: 'double factorielle') - "⁄": # 0x2044 - test: if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" - then: [t: "grande barre oblique"] # 0x203c (en: 'large slash', DeepL translation) - else: [t: "barre de fraction"] # 0x203c (en: 'divided by') - - "⁅": [t: "crochet gauche avec pique"] # 0x2045 (en: 'left square bracket with quill', DeepL: 'gauche équerre avec plume') - - "⁆": [t: "crochet droit avec pique"] # 0x2046 (en: 'right square bracket with quill', DeepL: 'équerre droite avec plume') - - "※": [t: "marque de référence"] # 0x203b (en: 'reference mark') - - "‿": [t: "tirant souscrit"] # 0x203F (en: 'under tie', DeepL: 'sous la cravate') - - "⁀": [t: "tirant en chef"] # 0x2040 (en: 'tie') - - "⁎": [t: "astérisque baissé"] # 0x204e (en: 'low asterisk', DeepL: 'astérisque bas') - - "⁏": [t: "point virgule réfléchi"] # 0x204f (en: 'reversed semicolon', MathPlayer: 'point-virgule réfléchi', DeepL: 'point-virgule inversé') - - "⁐": [t: "resserrer"] # 0x2050 (en: 'close up') - - "⁑": [t: "deux astérisques alignés verticalement"] # 0x2051 (en: 'two vertical asterisks', DeepL: 'deux astérisques verticaux') - - "⁒": [t: "moins commercial"] # 0x2052 (en: 'commercial minus sign', DeepL: 'signe moins commercial') - - "⁗": [t: "quadruple prime"] # 0x2057 - - "⁠": [t: ""] # 0x2060 - - "⁰": [t: "à la puissance zéro"] # 0x2070 (en: 'to the zeroth power', DeepL translation) - - "ⁱ": [t: "exposant i"] # 0x2071 (en: 'to the eihth power', DeepL: 'à la huitième puissance') - - "⁴": [t: "à la puissance quatre"] # 0x2074 (en: 'to the fourth power', DeepL translation) - - "⁵": [t: "à la cinquième puissance"] # 0x2075 (en: 'to the fifth power', DeepL translation) - - "⁶": [t: "à la puissance six"] # 0x2076 (en: 'to the sixth power', DeepL translation) - - "⁷": [t: "à la septième puissance"] # 0x2077 (en: 'to the seventh power', DeepL translation) - - "⁸": [t: "à la puissance ath"] # 0x2078 (en: 'to the eighth power', DeepL translation) - - "⁹": [t: "à la neuvième puissance"] # 0x2079 (en: 'to the ninth power', DeepL translation) - - "⁺": [t: "exposant signe plus"] # 0x207a (en: 'superscript plus sign') - - "⁻": [t: "exposant signe moins"] # 0x207b (en: 'superscript minus', DeepL: 'moins en exposant') - - "⁼": [t: "exposant signe égal"] # 0x207c (en: 'superscript equals sign', DeepL: 'signe égal en exposant') - - "⁽": [t: "exposant parenthèse gauche"] # 0x207d (en: 'superscript left parenthesis') - - "⁾": [t: "exposant parenthèse droite"] # 0x207e (en: 'superscript right parenthesis') - - "ⁿ": [t: "exposant n"] # 0x207f (en: 'to the ennth power', DeepL: 'à la puissance énième') - - "₀": [t: "sub zéro"] # 0x2080 (en: 'sub zero', DeepL translation) - - "₁": [t: "sous un"] # 0x2081 (en: 'sub one', DeepL translation) - - "₂": [t: "sub two"] # 0x2082 (DeepL translation) - - "₃": [t: "sous trois"] # 0x2083 (en: 'sub three', DeepL translation) - - "₄": [t: "sous quatre"] # 0x2084 (en: 'sub four', DeepL translation) - - "₅": [t: "sub cinq"] # 0x2085 (en: 'sub five', DeepL translation) - - "₆": [t: "sub six"] # 0x2086 (DeepL translation) - - "₇": [t: "sous sept"] # 0x2087 (en: 'sub seven', DeepL translation) - - "₈": [t: "sous à"] # 0x2088 (en: 'sub eight', DeepL translation) - - "₉": [t: "sous neuf"] # 0x2089 (en: 'sub nine', DeepL translation) - - "₊": [t: "indice signe plus"] # 0x208a (en: 'subscript plus sign') - - "₋": [t: "indice signe moins"] # 0x208b (en: 'subscript minus sign') - - "₌": [t: "indice signe égal"] # 0x208c (en: 'subscript equals sign', DeepL: 'indice égal') - - "₍": [t: "indice parenthèse gauche"] # 0x208d (en: 'subscript left parenthesis') - - "₎": [t: "indice parenthèse droite"] # 0x208e (en: 'subscript right parenthesis') - - "ₐ": [t: "indice a"] # 0x2090 (en: 'sub A') - - "ₑ": [t: "indice e"] # 0x2091 (en: 'sub E', DeepL: 'sub e') - - "ₒ": [t: "indice o"] # 0x2092 (en: 'sub O', DeepL: 'sous o') - - "ₓ": [t: "indice x"] # 0x2093 (en: 'sub X', DeepL: 'sous x') - - "ₕ": [t: "souscrite h"] # 0x2095 (en: 'sub H', DeepL: 'sous h') - - "ₖ": [t: "souscrite k"] # 0x2096 (en: 'sub K', DeepL: 'sous k') - - "ₗ": [t: "souscrite l"] # 0x2097 (en: 'sub L', DeepL: 'sous l') - - "ₘ": [t: "souscrite m"] # 0x2098 (en: 'sub M', DeepL: 'sous m') - - "ₙ": [t: "souscrite n"] # 0x2099 (en: 'sub N', DeepL: 'sous n') - - "ₚ": [t: "souscrite p"] # 0x209a (en: 'sub P', DeepL: 'sous p') - - "ₛ": [t: "souscrite s"] # 0x209b (en: 'sub S', DeepL: 'sous s') - - "ₜ": [t: "souscrite t"] # 0x209c (en: 'sub T', DeepL: 'sous t') - - "₠": [t: "unités de courant européennes"] # 0x20a0 (en: 'european currenty units', DeepL translation) - - "₡": [t: "colon"] # 0x20a1 (en: 'colons', DeepL: 'deux-points') - - "₢": [t: "cruzeiro"] # 0x20a2 - - "₣": [t: "franc"] # 0x20a3 - - "₤": [t: "lire"] # 0x20a4 (en: 'lira') - - "₥": [t: "millième"] # 0x20a5 (en: 'mills', DeepL: 'moulins') - - "₦": [t: "naira"] # 0x20a6 - - "₧": [t: "peseta"] # 0x20a7 - - "₨": [t: "roupie"] # 0x20a8 (en: 'rupees', DeepL: 'roupies') - - "₩": [t: "won"] # 0x20a9 - - "₪": [t: "nouveau chékel"] # 0x20aa (en: 'new sheqels', DeepL: 'nouveaux sheqels') - - "₫": [t: "dong"] # 0x20ab - - "€": [t: "euro"] # 0x20ac (en: 'euros', DeepL: 'euros') - - "₭": [t: "kip"] # 0x20ad - - "₮": [t: "tougrik"] # 0x20ae (en: 'tugrik', DeepL: 'tugrik') - - "₯": [t: "drachme"] # 0x20af (en: 'drachma') - - "₰": [t: "pfennig"] # 0x20b0 (en: 'german pennies', DeepL: 'centimes allemands') - - "₱": [t: "peso"] # 0x20b1 (en: 'pesos', DeepL: 'pesos') - - "₲": [t: "guarani"] # 0x20b2 (en: 'guaranis', DeepL: 'guaranis') - - "₳": [t: "austral"] # 0x20b3 (en: 'australs', DeepL: 'australes') - - "₴": [t: "hryvnia"] # 0x20b4 (en: 'hryvnias', DeepL: 'hryvnias') - - "₵": [t: "cedi"] # 0x20b5 (en: 'cedis', DeepL: 'cédis') - - "₶": [t: "livre tournois"] # 0x20b6 (DeepL translation) - - "₷": [t: "spesmilos"] # 0x20b7 (DeepL translation) - - "₸": [t: "tenges"] # 0x20b8 (DeepL translation) - - "₹": [t: "roupies indiennes"] # 0x20b9 (en: 'indian rupees', DeepL translation) - - "₺": [t: "lires turques"] # 0x20ba (en: 'turkish liras', DeepL translation) + then: [T: "grande barre oblique"] # 0x203c (en: 'large slash', DeepL translation) + else: [T: "divisé par"] # 0x203c (en: 'divided by') + - "⁅": [T: "crochet gauche avec pique"] # 0x2045 (en: 'left square bracket with quill', DeepL: 'gauche équerre avec plume') + - "⁆": [T: "crochet droit avec pique"] # 0x2046 (en: 'right square bracket with quill', DeepL: 'équerre droite avec plume') + - "※": [T: "marque de référence"] # 0x203b (en: 'reference mark') + - "‿": [T: "tirant souscrit"] # 0x203F (en: 'under tie', DeepL: 'sous la cravate') + - "⁀": [T: "tirant en chef"] # 0x2040 (en: 'tie') + - "⁎": [T: "astérisque baissé"] # 0x204e (en: 'low asterisk', DeepL: 'astérisque bas') + - "⁏": [T: "point virgule réfléchi"] # 0x204f (en: 'reversed semicolon', MathPlayer: 'point-virgule réfléchi', DeepL: 'point-virgule inversé') + - "⁐": [T: "resserrer"] # 0x2050 (en: 'close up') + - "⁑": [T: "deux astérisques alignés verticalement"] # 0x2051 (en: 'two vertical asterisks', DeepL: 'deux astérisques verticaux') + - "⁒": [T: "moins commercial"] # 0x2052 (en: 'commercial minus sign', DeepL: 'signe moins commercial') + - "⁗": [T: "quadruple prime"] # 0x2057 + - "⁠": [T: ""] # 0x2060 + - "⁰": [T: "à la puissance zéro"] # 0x2070 (en: 'to the zeroth power', DeepL translation) + - "ⁱ": [T: "exposant i"] # 0x2071 (en: 'to the eihth power', DeepL: 'à la huitième puissance') + - "⁴": [T: "à la quatrième puissance"] # 0x2074 (en: 'to the fourth power', DeepL translation) + - "⁵": [T: "à la cinquième puissance"] # 0x2075 (en: 'to the fifth power', DeepL translation) + - "⁶": [T: "à la sixième puissance"] # 0x2076 (en: 'to the sixth power', DeepL translation) + - "⁷": [T: "à la septième puissance"] # 0x2077 (en: 'to the seventh power', DeepL translation) + - "⁸": [T: "à la huitième puissance"] # 0x2078 (en: 'to the eighth power', DeepL translation) + - "⁹": [T: "à la neuvième puissance"] # 0x2079 (en: 'to the ninth power', DeepL translation) + - "⁺": [T: "exposant signe plus"] # 0x207a (en: 'superscript plus sign') + - "⁻": [T: "exposant signe moins"] # 0x207b (en: 'superscript minus', DeepL: 'moins en exposant') + - "⁼": [T: "exposant signe égal"] # 0x207c (en: 'superscript equals sign', DeepL: 'signe égal en exposant') + - "⁽": [T: "exposant parenthèse gauche"] # 0x207d (en: 'superscript left parenthesis') + - "⁾": [T: "exposant parenthèse droite"] # 0x207e (en: 'superscript right parenthesis') + - "ⁿ": [T: "exposant n"] # 0x207f (en: 'to the ennth power', DeepL: 'à la puissance énième') + - "₀": [T: "indice zéro"] # 0x2080 (en: 'sub zero', DeepL translation) + - "₁": [T: "indice un"] # 0x2081 (en: 'sub one', DeepL translation) + - "₂": [T: "indice deux"] # 0x2082 (DeepL translation) + - "₃": [T: "indice trois"] # 0x2083 (en: 'sub three', DeepL translation) + - "₄": [T: "indice quatre"] # 0x2084 (en: 'sub four', DeepL translation) + - "₅": [T: "indice cinq"] # 0x2085 (en: 'sub five', DeepL translation) + - "₆": [T: "indice six"] # 0x2086 (DeepL translation) + - "₇": [T: "indice sept"] # 0x2087 (en: 'sub seven', DeepL translation) + - "₈": [T: "indice huit"] # 0x2088 (en: 'sub eight', DeepL translation) + - "₉": [T: "indice neuf"] # 0x2089 (en: 'sub nine', DeepL translation) + - "₊": [T: "indice signe plus"] # 0x208a (en: 'subscript plus sign') + - "₋": [T: "indice signe moins"] # 0x208b (en: 'subscript minus sign') + - "₌": [T: "indice signe égal"] # 0x208c (en: 'subscript equals sign', DeepL: 'indice égal') + - "₍": [T: "indice parenthèse gauche"] # 0x208d (en: 'subscript left parenthesis') + - "₎": [T: "indice parenthèse droite"] # 0x208e (en: 'subscript right parenthesis') + - "ₐ": [T: "indice a"] # 0x2090 (en: 'sub A') + - "ₑ": [T: "indice e"] # 0x2091 (en: 'sub E', DeepL: 'sub e') + - "ₒ": [T: "indice o"] # 0x2092 (en: 'sub O', DeepL: 'sous o') + - "ₓ": [T: "indice x"] # 0x2093 (en: 'sub X', DeepL: 'sous x') + - "ₕ": [T: "indice h"] # 0x2095 (en: 'sub H', DeepL: 'sous h') + - "ₖ": [T: "indice k"] # 0x2096 (en: 'sub K', DeepL: 'sous k') + - "ₗ": [T: "indice l"] # 0x2097 (en: 'sub L', DeepL: 'sous l') + - "ₘ": [T: "indice m"] # 0x2098 (en: 'sub M', DeepL: 'sous m') + - "ₙ": [T: "indice n"] # 0x2099 (en: 'sub N', DeepL: 'sous n') + - "ₚ": [T: "indice p"] # 0x209a (en: 'sub P', DeepL: 'sous p') + - "ₛ": [T: "indice s"] # 0x209b (en: 'sub S', DeepL: 'sous s') + - "ₜ": [T: "indice t"] # 0x209c (en: 'sub T', DeepL: 'sous t') + - "₠": [T: "symbole de l'euro-devise"] # 0x20a0 (en: 'european currenty units', DeepL translation) + - "₡": [T: "colon"] # 0x20a1 (en: 'colons', DeepL: 'deux-points') + - "₢": [T: "cruzeiro"] # 0x20a2 + - "₣": [T: "franc"] # 0x20a3 + - "₤": [T: "lire"] # 0x20a4 (en: 'lira') + - "₥": [T: "millième"] # 0x20a5 (en: 'mills', DeepL: 'moulins') + - "₦": [T: "naira"] # 0x20a6 + - "₧": [T: "peseta"] # 0x20a7 + - "₨": [T: "roupie"] # 0x20a8 (en: 'rupees', DeepL: 'roupies') + - "₩": [T: "won"] # 0x20a9 + - "₪": [T: "nouveau chékel"] # 0x20aa (en: 'new sheqels', DeepL: 'nouveaux sheqels') + - "₫": [T: "dong"] # 0x20ab + - "€": [T: "euro"] # 0x20ac (en: 'euros', DeepL: 'euros') + - "₭": [T: "kip"] # 0x20ad + - "₮": [T: "tougrik"] # 0x20ae (en: 'tugrik', DeepL: 'tugrik') + - "₯": [T: "drachme"] # 0x20af (en: 'drachma') + - "₰": [T: "pfennig"] # 0x20b0 (en: 'german pennies', DeepL: 'centimes allemands') + - "₱": [T: "peso"] # 0x20b1 (en: 'pesos', DeepL: 'pesos') + - "₲": [T: "guarani"] # 0x20b2 (en: 'guaranis', DeepL: 'guaranis') + - "₳": [T: "austral"] # 0x20b3 (en: 'australs', DeepL: 'australes') + - "₴": [T: "hryvnia"] # 0x20b4 (en: 'hryvnias', DeepL: 'hryvnias') + - "₵": [T: "cedi"] # 0x20b5 (en: 'cedis', DeepL: 'cédis') + - "₶": [T: "livre tournois"] # 0x20b6 (DeepL translation) + - "₷": [T: "spesmilos"] # 0x20b7 (DeepL translation) + - "₸": [T: "tenges"] # 0x20b8 (DeepL translation) + - "₹": [T: "roupies indiennes"] # 0x20b9 (en: 'indian rupees', DeepL translation) + - "₺": [T: "lires turques"] # 0x20ba (en: 'turkish liras', DeepL translation) - "⃐": [t: "N diacritique vecteur vers la gauche en chef"] # 0x20d0 (en: 'left harpoon above embellishment', DeepL: 'harpon gauche au-dessus de l'embellissement') - "⃑": [t: "O diacritique vecteur vers la droite en chef"] # 0x20d1 (en: 'right harpoon above embellishment', DeepL: 'harpon droit au-dessus de l'ornement') - "⃒": [t: "long trait vertical superposé ornement"] # 0x20d2 (en: 'long vertical line overlay embellishment', DeepL translation) From 138bcedb0ef5d39eec029c0d8262294a47cc17ae Mon Sep 17 00:00:00 2001 From: Olivier Thiffault Date: Sat, 11 Jul 2026 12:50:22 -0400 Subject: [PATCH 45/53] corrections to unicode-full.yaml v3 --- Rules/Languages/fr/unicode-full.yaml | 80 ++++++++++++++-------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/Rules/Languages/fr/unicode-full.yaml b/Rules/Languages/fr/unicode-full.yaml index 735131296..17c30d825 100644 --- a/Rules/Languages/fr/unicode-full.yaml +++ b/Rules/Languages/fr/unicode-full.yaml @@ -414,46 +414,46 @@ - "₸": [T: "tenges"] # 0x20b8 (DeepL translation) - "₹": [T: "roupies indiennes"] # 0x20b9 (en: 'indian rupees', DeepL translation) - "₺": [T: "lires turques"] # 0x20ba (en: 'turkish liras', DeepL translation) - - "⃐": [t: "N diacritique vecteur vers la gauche en chef"] # 0x20d0 (en: 'left harpoon above embellishment', DeepL: 'harpon gauche au-dessus de l'embellissement') - - "⃑": [t: "O diacritique vecteur vers la droite en chef"] # 0x20d1 (en: 'right harpoon above embellishment', DeepL: 'harpon droit au-dessus de l'ornement') - - "⃒": [t: "long trait vertical superposé ornement"] # 0x20d2 (en: 'long vertical line overlay embellishment', DeepL translation) - - "⃓": [t: "ligne verticale courte superposée à la fioriture"] # 0x20d3 (en: 'short vertical line overlay embellishment', DeepL translation) - - "⃔": [t: "flèche dans le sens inverse des aiguilles d'une montre au-dessus de l'embellissement"] # 0x20d4 (en: 'anticlockwise arrow above embellishment', DeepL translation) - - "⃕": [t: "flèche dans le sens des aiguilles d'une montre au-dessus d'une fioriture"] # 0x20d5 (en: 'clockwise arrow above embellishment', DeepL translation) - - "⃖": [t: "T diacritique flèche vers la gauche en chef"] # 0x20d6 (en: 'left arrow above embellishment', DeepL: 'flèche gauche au-dessus de l'embellissement') - - "⃗": [t: "U diacritique flèche vers la droite en chef"] # 0x20d7 (en: 'right arrow above embellishment', DeepL: 'flèche droite au-dessus d'une fioriture') - - "⃘": [t: "embellissement par superposition d'anneaux"] # 0x20d8 (en: 'ring overlay embellishment', DeepL translation) - - "⃙": [t: "anneau superposé dans le sens des aiguilles d'une montre"] # 0x20d9 (en: 'clockwise ring overlay embellishment', DeepL translation) - - "⃚": [t: "emblème de superposition d'anneaux dans le sens inverse des aiguilles d'une montre"] # 0x20da (en: 'anticlockwise ring overlay embellishment', DeepL translation) - - "⃛": [t: "V diacritique trois points en chef"] # 0x20db (en: 'triple dot', DeepL: 'triple point') - - "⃜": [t: "W diacritique quatre points en chef"] # 0x20dc (en: 'quadruple dot', DeepL: 'point quadruple') - - "⃝": [t: "cercle enveloppant embellissement"] # 0x20dd (en: 'enclosing circle embellishment', DeepL translation) - - "⃞": [t: "emblème carré englobant"] # 0x20de (en: 'enclosing square embellishment', DeepL translation) - - "⃟": [t: "emblème du diamant qui entoure l'écran"] # 0x20df (en: 'enclosing diamond embellishment', DeepL translation) - - "⃠": [t: "cercle englobant barre oblique inversée embellissement"] # 0x20e0 (en: 'enclosing circle backslash embellishment', DeepL translation) - - "⃡": [t: "diacritique flèche bilatérale en chef"] # 0x20e1 (en: 'left right arrow above embellishment', DeepL: 'flèche gauche droite au-dessus de l'embellissement') - - "⃢": [t: "embellissement de l'écran englobant"] # 0x20e2 (en: 'enclosing screen embellishment', DeepL translation) - - "⃣": [t: "embellissement de l'enveloppe de la toucheuppercase"] # 0x20e3 (en: 'enclosing keycap embellishment', DeepL translation) - - "⃤": [t: "triangle pointant vers le haut embellissement"] # 0x20e4 (en: 'enclosing upward pointing triangle embellishment', DeepL translation) - - "⃥": [t: "solidus inversé ornement superposé"] # 0x20e5 (en: 'reverse solidus overlay embellishment', DeepL translation) - - "⃦": [t: "double trait vertical embellissement"] # 0x20e6 (en: 'double verticle stroke embellishment', DeepL translation) - - "⃧": [t: "embellissement du symbole de l'annuité"] # 0x20e7 (en: 'annuity symbol embellishment', DeepL translation) - - "⃨": [t: "triple underdot"] # 0x20e8 (DeepL translation) - - "⃩": [t: "pont large au-dessus de l'embellissement"] # 0x20e9 (en: 'wide bridge above embellishment', DeepL translation) - - "⃪": [t: "vers la gauche flèche superposée embellissement"] # 0x20ea (en: 'leftwards arrow overlay embellishment', DeepL translation) - - "⃫": [t: "emblème double solidus long"] # 0x20eb (en: 'long double solidus overlay embellishment', DeepL translation) - - "⃬": [t: "harpon vers la droite avec ardillon vers le bas"] # 0x20ec (en: 'rightwards harpoon with barb downwards embellishment', DeepL translation) - - "⃭": [t: "harpon vers la gauche avec ardillon vers le bas"] # 0x20ed (en: 'leftwards harpoon with barb downwards embellishment', DeepL translation) - - "⃮": [t: "flèche gauche en dessous de l'ornement"] # 0x20ee (en: 'left arrow below embellishment', DeepL translation) - - "⃯": [t: "flèche droite en dessous de l'emblème"] # 0x20ef (en: 'right arrow below embellishment', DeepL translation) - - "⃰": [t: "astérisque au-dessus d'une fioriture"] # 0x20f0 (en: 'asterisk above embellishment', DeepL translation) - - "℄": [t: "symbole de la ligne centrale"] # 0x2104 (en: 'center line symbol', DeepL translation) - - "℅": [t: "symbole anglais care of"] # 0x2105 (en: 'care of', DeepL: 'soin de') - - "℆": [t: "cada una"] # 0x2106 (DeepL translation) - - "ℇ": [t: "constante d'euler"] # 0x2107 (en: 'euler's constant') - - "℈": [t: "scrupules"] # 0x2108 (en: 'scruples', DeepL translation) - - "℉": [t: "degré fahrenheit"] # 0x2109 (en: 'degrees fahrenheit', DeepL: 'degrés fahrenheit') - - "ℊ": [t: "g ronde minuscule"] # 0x210a (en: 'script g', DeepL: 'script g') + - "⃐": [T: "embellissement harpon gauche au-dessus"] # 0x20d0 (en: 'left harpoon above embellishment', DeepL: 'harpon gauche au-dessus de l'embellissement') + - "⃑": [T: "embellissement harpon droit au-dessus"] # 0x20d1 (en: 'right harpoon above embellishment', DeepL: 'harpon droit au-dessus de l'ornement') + - "⃒": [T: "embellissement long trait vertical superposé"] # 0x20d2 (en: 'long vertical line overlay embellishment', DeepL translation) + - "⃓": [T: "embellissement court trait vertical superposé"] # 0x20d3 (en: 'short vertical line overlay embellishment', DeepL translation) + - "⃔": [T: "embellissement flèche dans le sens inverse des aiguilles d'une montre au-dessus"] # 0x20d4 (en: 'anticlockwise arrow above embellishment', DeepL translation) + - "⃕": [T: "embellissement flèche dans le sens des aiguilles d'une montre au-dessus"] # 0x20d5 (en: 'clockwise arrow above embellishment', DeepL translation) + - "⃖": [T: "embellissement flèche vers la gauche au-dessus"] # 0x20d6 (en: 'left arrow above embellishment', DeepL: 'flèche gauche au-dessus de l'embellissement') + - "⃗": [T: "embellissement flèche vers la droite au-dessus"] # 0x20d7 (en: 'right arrow above embellishment', DeepL: 'flèche droite au-dessus d'une fioriture') + - "⃘": [T: "embellissement par superposition d'anneaux"] # 0x20d8 (en: 'ring overlay embellishment', DeepL translation) + - "⃙": [T: "embellissement anneau superposé dans le sens des aiguilles d'une montre"] # 0x20d9 (en: 'clockwise ring overlay embellishment', DeepL translation) + - "⃚": [T: "embellissement emblème de superposition d'anneaux dans le sens inverse des aiguilles d'une montre"] # 0x20da (en: 'anticlockwise ring overlay embellishment', DeepL translation) + - "⃛": [T: "trois points"] # 0x20db (en: 'triple dot', DeepL: 'triple point') + - "⃜": [T: "quatre points"] # 0x20dc (en: 'quadruple dot', DeepL: 'point quadruple') + - "⃝": [T: "embellissement cercle enveloppant"] # 0x20dd (en: 'enclosing circle embellishment', DeepL translation) + - "⃞": [T: "embellissement carré englobant"] # 0x20de (en: 'enclosing square embellishment', DeepL translation) + - "⃟": [T: "embellissement diamant entourant"] # 0x20df (en: 'enclosing diamond embellishment', DeepL translation) + - "⃠": [T: "embellissement cercle englobant barre oblique inversée"] # 0x20e0 (en: 'enclosing circle backslash embellishment', DeepL translation) + - "⃡": [T: "embellissement flèche bilatérale au-dessus"] # 0x20e1 (en: 'left right arrow above embellishment', DeepL: 'flèche gauche droite au-dessus de l'embellissement') + - "⃢": [T: "embellissement de l'écran englobant"] # 0x20e2 (en: 'enclosing screen embellishment', DeepL translation) + - "⃣": [T: "embellissement de l'enveloppe de la touche verrouiller majuscule"] # 0x20e3 (en: 'enclosing keycap embellishment', DeepL translation) + - "⃤": [T: "embellissement triangle pointant vers le haut"] # 0x20e4 (en: 'enclosing upward pointing triangle embellishment', DeepL translation) + - "⃥": [T: "embellissement solidus inversé superposé"] # 0x20e5 (en: 'reverse solidus overlay embellishment', DeepL translation) + - "⃦": [T: "embellissement double trait vertical"] # 0x20e6 (en: 'double verticle stroke embellishment', DeepL translation) + - "⃧": [T: "embellissement symbole de l'annuité"] # 0x20e7 (en: 'annuity symbol embellishment', DeepL translation) + - "⃨": [T: "triple underdot"] # 0x20e8 (DeepL translation) + - "⃩": [T: "embellissement pont large au-dessus"] # 0x20e9 (en: 'wide bridge above embellishment', DeepL translation) + - "⃪": [T: "embellissement flèche vers la gauche superposée"] # 0x20ea (en: 'leftwards arrow overlay embellishment', DeepL translation) + - "⃫": [T: "embellissement double solidus long"] # 0x20eb (en: 'long double solidus overlay embellishment', DeepL translation) + - "⃬": [T: "embellissement harpon vers la droite avec ardillon vers le bas"] # 0x20ec (en: 'rightwards harpoon with barb downwards embellishment', DeepL translation) + - "⃭": [T: "embellissement harpon vers la gauche avec ardillon vers le bas"] # 0x20ed (en: 'leftwards harpoon with barb downwards embellishment', DeepL translation) + - "⃮": [T: "embellissement flèche gauche en dessous"] # 0x20ee (en: 'left arrow below embellishment', DeepL translation) + - "⃯": [T: "embellissementflèche droite en dessous"] # 0x20ef (en: 'right arrow below embellishment', DeepL translation) + - "⃰": [T: "embellissement astérisque au-dessus"] # 0x20f0 (en: 'asterisk above embellishment', DeepL translation) + - "℄": [T: "symbole de la ligne centrale"] # 0x2104 (en: 'center line symbol', DeepL translation) + - "℅": [T: "soin de"] # 0x2105 (en: 'care of', DeepL: 'soin de') + - "℆": [T: "cada una"] # 0x2106 (DeepL translation) + - "ℇ": [T: "constante d'euler"] # 0x2107 (en: 'euler's constant') + - "℈": [T: "scrupules"] # 0x2108 (en: 'scruples', DeepL translation) + - "℉": [T: "degré fahrenheit"] # 0x2109 (en: 'degrees fahrenheit', DeepL: 'degrés fahrenheit') + - "ℊ": [T: "g ronde minuscule"] # 0x210a (en: 'script g', DeepL: 'script g') - "ℌℑℨℭ": # 0x210c, 0x2111, 0x2128, 0x212d - spell: "translate('.', 'ℌℑℨℭ', 'HIZC')" - T: "gothique" # (en: 'fraktur', DeepL: 'fraktur') From 0135393a6db99a71d19b5479faa76c80c3b8b15d Mon Sep 17 00:00:00 2001 From: Olivier Thiffault Date: Sat, 11 Jul 2026 14:01:34 -0400 Subject: [PATCH 46/53] corrections to unicode-full.yaml v4 --- Rules/Languages/fr/unicode-full.yaml | 1186 +++++++++++++------------- 1 file changed, 593 insertions(+), 593 deletions(-) diff --git a/Rules/Languages/fr/unicode-full.yaml b/Rules/Languages/fr/unicode-full.yaml index 17c30d825..34f99c19b 100644 --- a/Rules/Languages/fr/unicode-full.yaml +++ b/Rules/Languages/fr/unicode-full.yaml @@ -455,353 +455,353 @@ - "℉": [T: "degré fahrenheit"] # 0x2109 (en: 'degrees fahrenheit', DeepL: 'degrés fahrenheit') - "ℊ": [T: "g ronde minuscule"] # 0x210a (en: 'script g', DeepL: 'script g') - "ℌℑℨℭ": # 0x210c, 0x2111, 0x2128, 0x212d - - spell: "translate('.', 'ℌℑℨℭ', 'HIZC')" + - SPELL: "translate('.', 'ℌℑℨℭ', 'HIZC')" - T: "gothique" # (en: 'fraktur', DeepL: 'fraktur') - "ℍℙℾℿ": # 0x210d, 0x2119, 0x213e, 0x213f - - spell: "translate('.', 'ℍℙℾℿ', 'HPΓΠ')" + - SPELL: "translate('.', 'ℍℙℾℿ', 'HPΓΠ')" - T: "double barre" # (en: 'double struck', DeepL: 'double barre') - - "ℎ": [t: "constante de planck"] # 0x210e (en: 'planck constant') - - "ℏ": [t: "constante de planck sur deux pi"] # 0x210f (en: 'h bar') + - "ℎ": [T: "constante de planck"] # 0x210e (en: 'planck constant') + - "ℏ": [T: "constante de planck sur deux pi"] # 0x210f (en: 'h bar') - "ℐℒ℘ℬℰℱℳ": # 0x2110, 0x2112, 0x2118, 0x2130, 0x2131, 0x2133 - - spell: "translate('.', 'ℐℒ℘ℬℰℱℳ', 'ILPBEFM')" + - SPELL: "translate('.', 'ℐℒ℘ℬℰℱℳ', 'ILPBEFM')" - T: "script" # (en: 'script') - - "ℓ": [t: "l minuscule en script"] # 0x2113 (en: 'script l', MathPlayer: 'l ronde minuscule', DeepL: 'script l') - - "℔": [t: "symbole l b barré"] # 0x2114 (en: 'pounds', DeepL: 'livres') - - "№": [t: "symbole numéro"] # 0x2116 (en: 'number') - - "℥": [t: "symbole once"] # 0x2125 (en: 'ounces') - - "Ω": [t: "ohm"] # 0x2126 (en: 'ohms') - - "℧": [t: "ohm culbuté"] # 0x2127 (en: 'mhos') - - "℩": [t: "iota culbuté"] # 0x2129 (en: 'turned iota', DeepL: 'tourné iota') - - "K": [t: "degré kelvin"] # 0x212a (en: 'kelvin') - - "Å": [t: "angstroms"] # 0x212b - - "ℯ": [t: "e ronde minuscule"] # 0x212f (en: 'script e', DeepL: 'script e') + - "ℓ": [T: "l minuscule script"] # 0x2113 (en: 'script l', MathPlayer: 'l ronde minuscule', DeepL: 'script l') + - "℔": [T: "symbole l b barré"] # 0x2114 (en: 'pounds', DeepL: 'livres') + - "№": [T: "symbole numéro"] # 0x2116 (en: 'number') + - "℥": [T: "symbole once"] # 0x2125 (en: 'ounces') + - "Ω": [T: "ohm"] # 0x2126 (en: 'ohms') + - "℧": [T: "ohm culbuté"] # 0x2127 (en: 'mhos') + - "℩": [T: "iota culbuté"] # 0x2129 (en: 'turned iota', DeepL: 'tourné iota') + - "K": [T: "degré kelvin"] # 0x212a (en: 'kelvin') + - "Å": [T: "angstroms"] # 0x212b + - "ℯ": [T: "e ronde minuscule"] # 0x212f (en: 'script e', DeepL: 'script e') # coalesced some chars that use cap letters - "Ⅎ℺⅁⅂⅃⅄": # 0x2132, 0x213a, 0x2141, 0x2142, 0x2143, 0x2144 - SPELL: "translate('.', 'Ⅎ℺⅁⅂⅃⅄', 'FQGLLY')" - test: - if: "'.' = '℺'" - then: [t: "tourné"] # (en: 'rotated', DeepL translation) + then: [T: "tourné"] # (en: 'rotated', DeepL translation) - else_if: "'.' = 'Ⅎ'" - then: [t: "tourné"] # (en: 'turned', DeepL translation) + then: [T: "tourné"] # (en: 'turned', DeepL translation) - else_if: "'.' = '⅃'" then: [T: "tourné sans-serif"] # (en: 'reversed sans-serif', DeepL translation) else: [T: "tourné sans-serif"] # (en: 'turned sans-serif', DeepL: 'tourné sans empattement') - - "ℴ": [t: "o ronde minuscule"] # 0x2134 (en: 'script o', DeepL: 'script o') - - "ℵ": [t: "alef"] # 0x2135 (en: 'first transfinite cardinal') - - "ℶ": [t: "bèt"] # 0x2136 (en: 'second transfinite cardinal') - - "ℷ": [t: "guimel"] # 0x2137 (en: 'third transfinite cardinal') - - "ℸ": [t: "dalèt"] # 0x2138 (en: 'fourth transfinite cardinal') - - "ℼ": [t: "pi ajouré"] # 0x213c (en: 'double struck pi', DeepL: 'double pi frappé') - - "ℽ": [t: "gamma ajouré"] # 0x213d (en: 'double struck gamma', DeepL: 'double gamma frappé') + - "ℴ": [T: "o ronde minuscule"] # 0x2134 (en: 'script o', DeepL: 'script o') + - "ℵ": [T: "alef"] # 0x2135 (en: 'first transfinite cardinal') + - "ℶ": [T: "bèt"] # 0x2136 (en: 'second transfinite cardinal') + - "ℷ": [T: "guimel"] # 0x2137 (en: 'third transfinite cardinal') + - "ℸ": [T: "dalèt"] # 0x2138 (en: 'fourth transfinite cardinal') + - "ℼ": [T: "pi ajouré"] # 0x213c (en: 'double struck pi', DeepL: 'double pi frappé') + - "ℽ": [T: "gamma ajouré"] # 0x213d (en: 'double struck gamma', DeepL: 'double gamma frappé') - "⅀": [T: "sommation"] # 0x2140 (en: 'double struck n-ary summation', DeepL: 'somme n-aire doublement frappée') - - "⅋": [t: "perluète culbutée"] # 0x214b (en: 'turned ampersand', DeepL: 'esperluette tournée') - - "⅌": [t: "symbole per"] # 0x214c (en: 'per', DeepL: 'per') - - "ⅎ": [t: "minuscule f culbuté"] # 0x214e (en: 'turned F', DeepL: 'tourné f') - - "¼": [t: "un quart"] # 0x00bc (en: 'one quarter') - - "½": [t: "un demi"] # 0x00bd (en: 'one half') - - "¾": [t: "trois quarts"] # 0x00be (en: 'three quarters') - - "⅐": [t: "un septième"] # 0x2150 (en: 'one seventh') - - "⅑": [t: "un neuvième"] # 0x2151 (en: 'one ninth', DeepL: 'une neuvième') - - "⅒": [t: "un dixième"] # 0x2152 (en: 'one tenth') - - "⅓": [t: "un tiers"] # 0x2153 (en: 'one third') - - "⅔": [t: "deux tiers"] # 0x2154 (en: 'two thirds') - - "⅕": [t: "un cinquième"] # 0x2155 (en: 'one fifth') - - "⅖": [t: "deux cinquièmes"] # 0x2156 (en: 'two fifths') - - "⅗": [t: "trois cinquièmes"] # 0x2157 (en: 'three fifths') - - "⅘": [t: "quatre cinquièmes"] # 0x2158 (en: 'four fifths') - - "⅙": [t: "un sixième"] # 0x2159 (en: 'one sixth') - - "⅚": [t: "cinq sixièmes"] # 0x215a (en: 'five sixths') - - "⅛": [t: "un huitième"] # 0x215b (en: 'one eighth') - - "⅜": [t: "trois huitièmes"] # 0x215c (en: 'three eighths') - - "⅝": [t: "cinq huitièmes"] # 0x215d (en: 'five eighths') - - "⅞": [t: "sept huitièmes"] # 0x215e (en: 'seven eighths') - - "⅟": [t: "numérateur un"] # 0x215f (en: 'one over', DeepL: 'un au-dessus') - - "Ⅰ": [t: "Ⅰ"] # 0x2160 (en: 'I', DeepL translation) - - "Ⅱ": [t: "i i"] # 0x2161 (en: 'I I', DeepL translation) - - "Ⅲ": [t: "i i i"] # 0x2162 (en: 'I I I', DeepL translation) - - "Ⅳ": [t: "i v"] # 0x2163 (en: 'I V', DeepL translation) - - "Ⅴ": [t: "Ⅴ"] # 0x2164 (en: 'V', DeepL translation) - - "Ⅵ": [t: "v i"] # 0x2165 (en: 'V I', DeepL translation) - - "Ⅶ": [t: "v i i"] # 0x2166 (en: 'V I I', DeepL translation) - - "Ⅷ": [t: "v i i i"] # 0x2167 (en: 'V I I I', DeepL translation) - - "Ⅸ": [t: "i x"] # 0x2168 (en: 'I X', DeepL translation) - - "Ⅹ": [t: "Ⅹ"] # 0x2169 (en: 'X', DeepL translation) - - "Ⅺ": [t: "x i"] # 0x216a (en: 'X I', DeepL translation) - - "Ⅻ": [t: "x i i"] # 0x216b (en: 'X I I', DeepL translation) - - "Ⅼ": [t: "Ⅼ"] # 0x216c (en: 'L', DeepL translation) - - "Ⅽ": [t: "Ⅽ"] # 0x216d (en: 'C', DeepL translation) - - "Ⅾ": [t: "Ⅾ"] # 0x216e (en: 'D', DeepL translation) - - "Ⅿ": [t: "Ⅿ"] # 0x216f (en: 'M', DeepL translation) - - "ⅰ": [t: "ⅰ"] # 0x2170 (en: 'I', DeepL translation) - - "ⅱ": [t: "i i"] # 0x2171 (en: 'I I', DeepL translation) - - "ⅲ": [t: "i i i"] # 0x2172 (en: 'I I I', DeepL translation) - - "ⅳ": [t: "i v"] # 0x2173 (en: 'I V', DeepL translation) - - "ⅴ": [t: "ⅴ"] # 0x2174 (en: 'V', DeepL translation) - - "ⅵ": [t: "v i"] # 0x2175 (en: 'V I', DeepL translation) - - "ⅶ": [t: "v i i"] # 0x2176 (en: 'V I I', DeepL translation) - - "ⅷ": [t: "v i i i"] # 0x2177 (en: 'V I I I', DeepL translation) - - "ⅸ": [t: "i x"] # 0x2178 (en: 'I X', DeepL translation) - - "ⅹ": [t: "ⅹ"] # 0x2179 (en: 'X', DeepL translation) - - "ⅺ": [t: "x i"] # 0x217a (en: 'X I', DeepL translation) - - "ⅻ": [t: "x i i"] # 0x217b (en: 'X I I', DeepL translation) - - "ⅼ": [t: "ⅼ"] # 0x217c (en: 'L', DeepL translation) - - "ⅽ": [t: "ⅽ"] # 0x217d (en: 'C', DeepL translation) - - "ⅾ": [t: "ⅾ"] # 0x217e (en: 'D', DeepL translation) - - "ⅿ": [t: "ⅿ"] # 0x217f (en: 'M', DeepL translation) - - "↉": [t: "zero tiers"] # 0x2189 (en: 'zero thirds', DeepL: 'zéro tiers') - - "←": [t: "flèche vers la gauche"] # 0x2190 (en: 'leftwards arrow', SRE: 'flèche gauche') - - "↑": [t: "flèche vers le haut"] # 0x2191 (en: 'upwards arrow') - - "→": [t: "flèche vers la droite"] # 0x2192 (en: 'rightwards arrow', SRE: 'flèche droite') - - "↓": [t: "flèche vers le bas"] # 0x2193 (en: 'downwards arrow') - - "↔": [t: "flèche bilatérale"] # 0x2194 (en: 'left right arrow') - - "↕": [t: "flèche haut et bas"] # 0x2195 (en: 'up down arrow') - - "↖": [t: "flèche nord-ouest"] # 0x2196 (en: 'north west arrow', SRE: 'flèche nord ouest') + - "⅋": [T: "esperluette culbutée"] # 0x214b (en: 'turned ampersand', DeepL: 'esperluette tournée') + - "⅌": [T: "symbole per"] # 0x214c (en: 'per', DeepL: 'per') + - "ⅎ": [T: "f minuscule culbuté"] # 0x214e (en: 'turned F', DeepL: 'tourné f') + - "¼": [T: "un quart"] # 0x00bc (en: 'one quarter') + - "½": [T: "un demi"] # 0x00bd (en: 'one half') + - "¾": [T: "trois quarts"] # 0x00be (en: 'three quarters') + - "⅐": [T: "un septième"] # 0x2150 (en: 'one seventh') + - "⅑": [T: "un neuvième"] # 0x2151 (en: 'one ninth', DeepL: 'une neuvième') + - "⅒": [T: "un dixième"] # 0x2152 (en: 'one tenth') + - "⅓": [T: "un tiers"] # 0x2153 (en: 'one third') + - "⅔": [T: "deux tiers"] # 0x2154 (en: 'two thirds') + - "⅕": [T: "un cinquième"] # 0x2155 (en: 'one fifth') + - "⅖": [T: "deux cinquièmes"] # 0x2156 (en: 'two fifths') + - "⅗": [T: "trois cinquièmes"] # 0x2157 (en: 'three fifths') + - "⅘": [T: "quatre cinquièmes"] # 0x2158 (en: 'four fifths') + - "⅙": [T: "un sixième"] # 0x2159 (en: 'one sixth') + - "⅚": [T: "cinq sixièmes"] # 0x215a (en: 'five sixths') + - "⅛": [T: "un huitième"] # 0x215b (en: 'one eighth') + - "⅜": [T: "trois huitièmes"] # 0x215c (en: 'three eighths') + - "⅝": [T: "cinq huitièmes"] # 0x215d (en: 'five eighths') + - "⅞": [T: "sept huitièmes"] # 0x215e (en: 'seven eighths') + - "⅟": [T: "numérateur un"] # 0x215f (en: 'one over', DeepL: 'un au-dessus') + - "Ⅰ": [T: "Ⅰ"] # 0x2160 (en: 'I', DeepL translation) + - "Ⅱ": [T: "i i"] # 0x2161 (en: 'I I', DeepL translation) + - "Ⅲ": [T: "i i i"] # 0x2162 (en: 'I I I', DeepL translation) + - "Ⅳ": [T: "i v"] # 0x2163 (en: 'I V', DeepL translation) + - "Ⅴ": [T: "Ⅴ"] # 0x2164 (en: 'V', DeepL translation) + - "Ⅵ": [T: "v i"] # 0x2165 (en: 'V I', DeepL translation) + - "Ⅶ": [T: "v i i"] # 0x2166 (en: 'V I I', DeepL translation) + - "Ⅷ": [T: "v i i i"] # 0x2167 (en: 'V I I I', DeepL translation) + - "Ⅸ": [T: "i x"] # 0x2168 (en: 'I X', DeepL translation) + - "Ⅹ": [T: "Ⅹ"] # 0x2169 (en: 'X', DeepL translation) + - "Ⅺ": [T: "x i"] # 0x216a (en: 'X I', DeepL translation) + - "Ⅻ": [T: "x i i"] # 0x216b (en: 'X I I', DeepL translation) + - "Ⅼ": [T: "Ⅼ"] # 0x216c (en: 'L', DeepL translation) + - "Ⅽ": [T: "Ⅽ"] # 0x216d (en: 'C', DeepL translation) + - "Ⅾ": [T: "Ⅾ"] # 0x216e (en: 'D', DeepL translation) + - "Ⅿ": [T: "Ⅿ"] # 0x216f (en: 'M', DeepL translation) + - "ⅰ": [T: "ⅰ"] # 0x2170 (en: 'I', DeepL translation) + - "ⅱ": [T: "i i"] # 0x2171 (en: 'I I', DeepL translation) + - "ⅲ": [T: "i i i"] # 0x2172 (en: 'I I I', DeepL translation) + - "ⅳ": [T: "i v"] # 0x2173 (en: 'I V', DeepL translation) + - "ⅴ": [T: "ⅴ"] # 0x2174 (en: 'V', DeepL translation) + - "ⅵ": [T: "v i"] # 0x2175 (en: 'V I', DeepL translation) + - "ⅶ": [T: "v i i"] # 0x2176 (en: 'V I I', DeepL translation) + - "ⅷ": [T: "v i i i"] # 0x2177 (en: 'V I I I', DeepL translation) + - "ⅸ": [T: "i x"] # 0x2178 (en: 'I X', DeepL translation) + - "ⅹ": [T: "ⅹ"] # 0x2179 (en: 'X', DeepL translation) + - "ⅺ": [T: "x i"] # 0x217a (en: 'X I', DeepL translation) + - "ⅻ": [T: "x i i"] # 0x217b (en: 'X I I', DeepL translation) + - "ⅼ": [T: "ⅼ"] # 0x217c (en: 'L', DeepL translation) + - "ⅽ": [T: "ⅽ"] # 0x217d (en: 'C', DeepL translation) + - "ⅾ": [T: "ⅾ"] # 0x217e (en: 'D', DeepL translation) + - "ⅿ": [T: "ⅿ"] # 0x217f (en: 'M', DeepL translation) + - "↉": [T: "zéro tiers"] # 0x2189 (en: 'zero thirds', DeepL: 'zéro tiers') + - "←": [T: "flèche vers la gauche"] # 0x2190 (en: 'leftwards arrow', SRE: 'flèche gauche') + - "↑": [T: "flèche vers le haut"] # 0x2191 (en: 'upwards arrow') + - "→": [T: "flèche vers la droite"] # 0x2192 (en: 'rightwards arrow', SRE: 'flèche droite') + - "↓": [T: "flèche vers le bas"] # 0x2193 (en: 'downwards arrow') + - "↔": [T: "flèche bilatérale"] # 0x2194 (en: 'left right arrow') + - "↕": [T: "flèche haut et bas"] # 0x2195 (en: 'up down arrow') + - "↖": [T: "flèche nord-ouest"] # 0x2196 (en: 'north west arrow', SRE: 'flèche nord ouest') - "↗": # 0x2197 - test: if: "ancestor::*[2][self::m:limit]" - then: [t: "approche par le bas"] # (en: 'approaches from below', DeepL translation) - else: [t: "flèche nord-est"] # (en: 'north east arrow', SRE: 'flèche nord est') + then: [T: "approche par le bas"] # (en: 'approaches from below', DeepL translation) + else: [T: "flèche nord-est"] # (en: 'north east arrow', SRE: 'flèche nord est') - "↘": # 0x2198 - test: if: "ancestor::*[2][self::m:limit]" - then: [t: "approche par le haut"] # (en: 'approaches from above', DeepL translation) - else: [t: "flèche sud-est"] # (en: 'south east arrow', SRE: 'flèche sud est') - - - "↙": [t: "flèche sud-ouest"] # 0x2199 (en: 'south west arrow', SRE: 'flèche sud ouest') - - "↚": [t: "flèche barrée gauche"] # 0x219a (en: 'leftwards arrow with stroke', MathPlayer: 'flèche barrée vers la gauche', DeepL: 'flèche gauche avec trait') - - "↛": [t: "flèche barrée droite"] # 0x219b (en: 'rightwards arrow with stroke', MathPlayer: 'flèche barrée vers la droite', DeepL: 'flèche vers la droite avec trait') - - "↜": [t: "flèche ondulée vers la gauche"] # 0x219c (en: 'leftwards wave arrow', SRE: 'flèche ondulée gauche') - - "↝": [t: "flèche ondulée vers la droite"] # 0x219d (en: 'rightwards wave arrow', SRE: 'flèche ondulée droite') - - "↞": [t: "flèche à deux pointes gauche"] # 0x219e (en: 'leftwards two headed arrow', MathPlayer: 'flèche à deux pointes vers la gauche', DeepL: 'flèche à deux têtes vers la gauche') - - "↟": [t: "flèche à deux pointes vers le haut"] # 0x219f (en: 'upwards two headed arrow') - - "↠": [t: "flèche à deux pointes droite"] # 0x21a0 (en: 'rightwards two headed arrow', MathPlayer: 'flèche à deux pointes vers la droite', DeepL: 'vers la droite flèche à deux têtes') - - "↡": [t: "flèche à deux pointes vers le bas"] # 0x21a1 (en: 'downwards two headed arrow') - - "↢": [t: "flèche empennée gauche"] # 0x21a2 (en: 'leftwards arrow with tail', MathPlayer: 'flèche empennée vers la gauche', DeepL: 'flèche gauche avec queue') - - "↣": [t: "flèche empennée droite"] # 0x21a3 (en: 'rightwards arrow with tail', MathPlayer: 'flèche empennée vers la droite', DeepL: 'flèche droite avec empennage') - - "↤": [t: "flèche d'un taquet gauche"] # 0x21a4 (en: 'leftwards arrow from bar', MathPlayer: 'flèche d'un taquet vers la gauche', DeepL: 'flèche vers la gauche à partir de la barre') - - "↥": [t: "flèche d'un taquet vers le haut"] # 0x21a5 (en: 'upwards arrow from bar') - - "↦": [t: "flèche d'un taquet droite"] # 0x21a6 (en: 'rightwards arrow from bar', MathPlayer: 'flèche d'un taquet vers la droite', DeepL: 'flèche vers la droite à partir d'une barre') - - "↧": [t: "flèche d'un taquet vers le bas"] # 0x21a7 (en: 'downwards arrow from bar') - - "↨": [t: "flèche haut bas sur base"] # 0x21a8 (en: 'up down arrow with base', MathPlayer: 'flèche haut-bas sur base', DeepL: 'flèche haut-bas avec base') - - "↩": [t: "flèche avec crochet gauche"] # 0x21a9 (en: 'leftwards arrow with hook', MathPlayer: 'flèche vers la gauche avec crochet', DeepL: 'flèche gauche avec crochet') - - "↪": [t: "flèche vers la droite avec crochet"] # 0x21aa (en: 'rightwards arrow with hook', SRE: 'flèche avec crochet droite') - - "↫": [t: "flèche vers la gauche avec boucle"] # 0x21ab (en: 'leftwards arrow with loop', SRE: 'flèche avec boucle gauche') - - "↬": [t: "flèche vers la droite avec boucle"] # 0x21ac (en: 'rightwards arrow with loop', SRE: 'flèche avec boucle droite') - - "↭": [t: "flèche ondulée bilatérale"] # 0x21ad (en: 'left right wave arrow') - - "↮": [t: "flèche barrée bilatérale"] # 0x21ae (en: 'left right arrow with stroke') - - "↯": [t: "flèche vers le bas en zigzag"] # 0x21af (en: 'downwards zigzag arrow') - - "↰": [t: "flèche vers le haut avec pointe vers la gauche"] # 0x21b0 (en: 'upwards arrow with tip leftwards', SRE: 'flèche vers le haut avec pointe gauche') - - "↱": [t: "flèche vers le haut avec pointe vers la droite"] # 0x21b1 (en: 'upwards arrow with tip rightwards', SRE: 'flèche vers le haut avec pointe droite') - - "↲": [t: "flèche vers le bas avec pointe vers la gauche"] # 0x21b2 (en: 'downwards arrow with tip leftwards', SRE: 'flèche vers le bas avec pointe gauche') - - "↳": [t: "flèche vers le bas avec pointe vers la droite"] # 0x21b3 (en: 'downwards arrow with tip rightwards', SRE: 'flèche vers le bas avec pointe droite') - - "↴": [t: "flèche vers la droite avec coin vers le bas"] # 0x21b4 (en: 'rightwards arrow with corner downwards', SRE: 'flèche vers le bas avec coin droit') - - "↵": [t: "flèche vers le bas avec coin vers la gauche"] # 0x21b5 (en: 'downwards arrow with corner leftwards', SRE: 'flèche vers le bas avec coin gauche') - - "↶": [t: "flèche semi circulaire en sens positif"] # 0x21b6 (en: 'anticlockwise top semicircle arrow', MathPlayer: 'flèche semi-circulaire en sens positif', DeepL: 'flèche du demi-cercle supérieur dans le sens inverse des aiguilles d'une montre') - - "↷": [t: "flèche semi circulaire en sens négatif"] # 0x21b7 (en: 'clockwise top semicircle arrow', MathPlayer: 'flèche semi-circulaire en sens négatif', DeepL: 'flèche du demi-cercle supérieur dans le sens des aiguilles d'une montre') - - "↸": [t: "flèche nord ouest vers une barre horizontale longue"] # 0x21b8 (en: 'north west arrow to long bar', MathPlayer: 'flèche nord-ouest jusqu'à une barre longue', DeepL: 'flèche nord-ouest vers la barre longue') - - "↹": [t: "flèche gauche vers un taquet sur flèche droite vers un taquet"] # 0x21b9 (en: 'leftwards arrow to bar over rightwards arrow to bar', MathPlayer: 'flèche vers la gauche jusqu'à un taquet par-dessus flèche vers la droite jusqu'à un taquet', DeepL: 'flèche gauche vers la barre sur flèche droite vers la barre') - - "↺": [t: "flèche en sens positif à cercle ouvert"] # 0x21ba (en: 'anticlockwise open circle arrow') - - "↻": [t: "flèche en sens négatif à cercle ouvert"] # 0x21bb (en: 'clockwise open circle arrow') - - "↼": [t: "harpon gauche avec dent dressée"] # 0x21bc (en: 'left harpoon up', MathPlayer: 'harpon vers la gauche avec dent vers le haut', DeepL: 'harpon gauche en haut') - - "↽": [t: "harpon gauche avec dent baissée"] # 0x21bd (en: 'left harpoon down', MathPlayer: 'harpon vers la gauche avec dent vers bas', DeepL: 'harpon gauche en bas') - - "↾": [t: "harpon vers le haut avec dent droite"] # 0x21be (en: 'up harpoon right', MathPlayer: 'harpon vers le haut avec dent vers la droite', DeepL: 'harpon vers le haut à droite') - - "↿": [t: "harpon vers le haut avec dent gauche"] # 0x21bf (en: 'up harpoon left', MathPlayer: 'harpon vers le haut avec dent vers la gauche', DeepL: 'harpon vers le haut à gauche') - - "⇀": [t: "harpon droit avec dent dressée"] # 0x21c0 (en: 'right harpoon up', MathPlayer: 'harpon vers la droite avec dent vers le haut', DeepL: 'harpon droit vers le haut') - - "⇁": [t: "harpon droit avec dent baissée"] # 0x21c1 (en: 'right harpoon down', MathPlayer: 'harpon vers la droite avec dent vers le bas', DeepL: 'à droite harpon vers le bas') - - "⇂": [t: "harpon vers le bas avec dent droite"] # 0x21c2 (en: 'down harpoon right', MathPlayer: 'harpon vers le bas avec dent vers la droite', DeepL: 'harpon vers le bas à droite') - - "⇃": [t: "harpon vers le bas avec dent gauche"] # 0x21c3 (en: 'down harpoon left', MathPlayer: 'harpon vers le bas avec dent vers la gauche', DeepL: 'harpon vers le bas à gauche') - - "⇄": [t: "flèche vers le haut par dessus flèche gauche"] # 0x21c4 (en: 'rightwards arrow over leftwards arrow', MathPlayer: 'flèche vers le haut par-dessus flèche vers la gauche', DeepL: 'flèche vers la droite au-dessus de la flèche vers la gauche') - - "⇅": [t: "flèche vers le haut à gauche d'une flèche vers le bas"] # 0x21c5 (en: 'upwards arrow leftwards of downwards arrow') - - "⇆": [t: "flèche gauche par dessus flèche droite"] # 0x21c6 (en: 'leftwards arrow over rightwards arrow', MathPlayer: 'flèche vers la gauche par-dessus flèche vers la droite', DeepL: 'flèche vers la gauche sur flèche vers la droite') - - "⇇": [t: "paire de flèches gauche"] # 0x21c7 (en: 'leftwards paired arrows', MathPlayer: 'paire de flèches vers la gauche', DeepL: 'flèches jumelées vers la gauche') - - "⇈": [t: "paire de flèches vers le haut"] # 0x21c8 (en: 'upwards paired arrows') - - "⇉": [t: "paire de flèches droite"] # 0x21c9 (en: 'rightwards paired arrows', MathPlayer: 'paire de flèches vers la droite', DeepL: 'flèches jumelées vers la droite') - - "⇊": [t: "paire de flèches vers le bas"] # 0x21ca (en: 'downwards paired arrows') - - "⇋": [t: "harpon gauche par dessus harpon droit"] # 0x21cb (en: 'left harpoon over right harpoon', MathPlayer: 'harpon vers la gauche par-dessus harpon vers la droite', DeepL: 'harpon gauche sur harpon droit') - - "⇌": [t: "harpon droit par dessus harpon gauche"] # 0x21cc (en: 'right harpoon over left harpoon', MathPlayer: 'harpon vers la droite par-dessus harpon vers la gauche', DeepL: 'harpon droit sur harpon gauche') - - "⇍": [t: "double flèche barrée gauche"] # 0x21cd (en: 'leftwards double arrow with stroke', MathPlayer: 'double flèche barrée vers la gauche', DeepL: 'flèche double gauche avec trait') - - "⇎": [t: "double flèche barrée bilatérale"] # 0x21ce (en: 'left right double arrow with stroke') - - "⇏": [t: "double flèche barrée droite"] # 0x21cf (en: 'rightwards double arrow with stroke', MathPlayer: 'double flèche barrée vers la droite', DeepL: 'flèche double droite avec trait') - - "⇐": [t: "double flèche gauche"] # 0x21d0 (en: 'leftwards double arrow', MathPlayer: 'double flèche vers la gauche', DeepL: 'flèche double vers la gauche') - - "⇑": [t: "double flèche vers le haut"] # 0x21d1 (en: 'upwards double arrow') - - "⇒": [t: "double flèche droite"] # 0x21d2 (en: 'implies', MathPlayer: 'double flèche vers la droite', DeepL: 'implique') - - "⇓": [t: "double flèche vers le bas"] # 0x21d3 (en: 'downwards double arrow') - - "⇔": [t: "double flèche bilatérale"] # 0x21d4 (en: 'if and only if') - - "⇕": [t: "double flèche haut bas"] # 0x21d5 (en: 'up down double arrow', MathPlayer: 'double flèche haut-bas', DeepL: 'haut-bas double flèche') - - "⇖": [t: "double flèche nord ouest"] # 0x21d6 (en: 'north west double arrow', MathPlayer: 'double flèche nord-ouest', DeepL: 'flèche double nord-ouest') - - "⇗": [t: "double flèche nord est"] # 0x21d7 (en: 'north east double arrow', MathPlayer: 'double flèche nord-est', DeepL: 'flèche double nord-est') - - "⇘": [t: "double flèche sud est"] # 0x21d8 (en: 'south east double arrow', MathPlayer: 'double flèche sud-est', DeepL: 'flèche double sud-est') - - "⇙": [t: "double flèche sud ouest"] # 0x21d9 (en: 'south west double arrow', MathPlayer: 'double flèche sud-ouest', DeepL: 'flèche double sud-ouest') - - "⇚": [t: "triple flèche gauche"] # 0x21da (en: 'leftwards triple arrow', MathPlayer: 'triple flèche vers la gauche', DeepL: 'flèche triple vers la gauche') - - "⇛": [t: "triple flèche droite"] # 0x21db (en: 'rightwards triple arrow', MathPlayer: 'triple flèche vers la droite', DeepL: 'vers la droite triple flèche') - - "⇜": [t: "flèche en tire bouchon gauche"] # 0x21dc (en: 'leftwards squiggle arrow', MathPlayer: 'flèche vers la gauche en tire-bouchon', DeepL: 'flèche gribouillée vers la gauche') - - "⇝": [t: "flèche en tire bouchon droite"] # 0x21dd (en: 'rightwards squiggle arrow', MathPlayer: 'flèche vers la droite en tire-bouchon', DeepL: 'flèche vers la droite avec gribouillis') - - "⇞": [t: "flèche vers le haut avec double barre"] # 0x21de (en: 'upwards arrow with double stroke') - - "⇟": [t: "flèche vers le bas avec double barre"] # 0x21df (en: 'downwards arrow with double stroke') - - "⇠": [t: "flèche pointillée gauche"] # 0x21e0 (en: 'leftwards dashed arrow', MathPlayer: 'flèche pointillée vers la gauche', DeepL: 'flèche en pointillé vers la gauche') - - "⇡": [t: "flèche pointillée vers le haut"] # 0x21e1 (en: 'upwards dashed arrow') - - "⇢": [t: "flèche pointillée droite"] # 0x21e2 (en: 'rightwards dashed arrow', MathPlayer: 'flèche pointillée vers la droite', DeepL: 'flèche en pointillé vers la droite') - - "⇣": [t: "flèche pointillée vers le bas"] # 0x21e3 (en: 'downwards dashed arrow') - - "⇤": [t: "flèche gauche vers un taquet"] # 0x21e4 (en: 'leftwards arrow to bar', MathPlayer: 'flèche vers la gauche jusqu'à un taquet', DeepL: 'flèche gauche vers la barre') - - "⇥": [t: "flèche droite vers un taquet"] # 0x21e5 (en: 'rightwards arrow to bar', MathPlayer: 'flèche vers la droite jusqu'à un taquet', DeepL: 'flèche vers la droite jusqu'à la barre') - - "⇦": [t: "flèche blanche vers la gauche"] # 0x21e6 (en: 'leftwards white arrow', SRE: 'flèche blanche gauche') - - "⇧": [t: "flèche blanche vers le haut"] # 0x21e7 (en: 'upwards white arrow') - - "⇨": [t: "flèche blanche vers la droite"] # 0x21e8 (en: 'rightwards white arrow', SRE: 'flèche blanche droite') - - "⇩": [t: "flèche blanche vers le bas"] # 0x21e9 (en: 'downwards white arrow') - - "⇪": [t: "flèche blanche vers le haut à partir d'un taquet"] # 0x21ea (en: 'upwards white arrow from bar') - - "⇫": [t: "flèche blanche vers le haut sur socle"] # 0x21eb (en: 'upwards white arrow on pedestal', DeepL: 'flèche blanche vers le haut sur un socle') - - "⇬": [t: "flèche blanche vers le haut sur socle et trait horizontal"] # 0x21ec (en: 'upwards white arrow on pedestal with horizontal bar', DeepL: 'flèche blanche vers le haut sur socle avec barre horizontale') - - "⇭": [t: "flèche blanche vers le haut sur socle et barre verticale"] # 0x21ed (en: 'upwards white arrow on pedestal with vertical bar', DeepL: 'flèche blanche vers le haut sur un socle avec une barre verticale') - - "⇮": [t: "double flèche blanche vers le haut"] # 0x21ee (en: 'upwards white double arrow', DeepL: 'flèche double blanche vers le haut') - - "⇯": [t: "double flèche blanche vers le haut sur socle"] # 0x21ef (en: 'upwards white double arrow on pedestal', DeepL: 'double flèche blanche vers le haut sur un socle') - - "⇰": [t: "flèche blanche vers la droite appuyée sur mur"] # 0x21f0 (en: 'rightwards white arrow from wall', DeepL: 'vers la droite flèche blanche du mur') - - "⇱": [t: "flèche nord ouest en encoignure"] # 0x21f1 (en: 'north west arrow to corner', DeepL: 'flèche nord-ouest à l'angle') - - "⇲": [t: "flèche sud est en encoignure"] # 0x21f2 (en: 'south east arrow to corner', DeepL: 'flèche sud-est vers le coin') - - "⇳": [t: "flèche blanche vers le haut et le bas"] # 0x21f3 (en: 'up down white arrow', DeepL: 'flèche blanche haut-bas') - - "⇴": [t: "flèche vers la droite à petit cercle"] # 0x21f4 (en: 'right arrow with small circle', DeepL: 'flèche droite avec petit cercle') - - "⇵": [t: "flèche descendante à gauche d'une flèche montante"] # 0x21f5 (en: 'downwards arrow leftwards of upwards arrow') - - "⇶": [t: "trois flèches vers la droite"] # 0x21f6 (en: 'three rightwards arrows') - - "⇷": [t: "flèche vers la gauche barrée verticalement"] # 0x21f7 (en: 'leftwards arrow with vertical stroke', DeepL: 'flèche vers la gauche avec trait vertical') - - "⇸": [t: "flèche vers la droite barrée verticalement"] # 0x21f8 (en: 'rightwards arrow with vertical stroke', DeepL: 'flèche vers la droite avec trait vertical') - - "⇹": [t: "flèche vers la droite et la gauche barrée verticalement"] # 0x21f9 (en: 'left right arrow with vertical stroke', DeepL: 'flèche gauche droite avec trait vertical') - - "⇺": [t: "flèche vers la gauche barrée deux fois verticalement"] # 0x21fa (en: 'leftwards arrow with double vertical stroke', DeepL: 'flèche vers la gauche avec double trait vertical') - - "⇻": [t: "flèche vers la droite barrée deux fois verticalement"] # 0x21fb (en: 'rightwards arrow with double vertical stroke', DeepL: 'flèche vers la droite avec double trait vertical') - - "⇼": [t: "flèche bilatérale barrée deux fois verticalement"] # 0x21fc (en: 'left right arrow with double vertical stroke', DeepL: 'flèche gauche droite avec double trait vertical') - - "⇽": [t: "flèche à tête creuse gauche"] # 0x21fd (en: 'leftwards open headed arrow', MathPlayer: 'flèche à tête creuse vers la gauche', DeepL: 'flèche ouverte vers la gauche') - - "⇾": [t: "flèche à tête creuse droite"] # 0x21fe (en: 'rightwards open headed arrow', MathPlayer: 'flèche à tête creuse vers la droite', DeepL: 'flèche ouverte vers la droite') - - "⇿": [t: "flèche à tête creuse bilatérale"] # 0x21ff (en: 'left right open headed arrow') - - "∀": [t: "pour tous"] # 0x2200 (en: 'for all') + then: [T: "approche par le haut"] # (en: 'approaches from above', DeepL translation) + else: [T: "flèche sud-est"] # (en: 'south east arrow', SRE: 'flèche sud est') + + - "↙": [T: "flèche sud-ouest"] # 0x2199 (en: 'south west arrow', SRE: 'flèche sud ouest') + - "↚": [T: "flèche barrée gauche"] # 0x219a (en: 'leftwards arrow with stroke', MathPlayer: 'flèche barrée vers la gauche', DeepL: 'flèche gauche avec trait') + - "↛": [T: "flèche barrée droite"] # 0x219b (en: 'rightwards arrow with stroke', MathPlayer: 'flèche barrée vers la droite', DeepL: 'flèche vers la droite avec trait') + - "↜": [T: "flèche ondulée vers la gauche"] # 0x219c (en: 'leftwards wave arrow', SRE: 'flèche ondulée gauche') + - "↝": [T: "flèche ondulée vers la droite"] # 0x219d (en: 'rightwards wave arrow', SRE: 'flèche ondulée droite') + - "↞": [T: "flèche à deux pointes gauche"] # 0x219e (en: 'leftwards two headed arrow', MathPlayer: 'flèche à deux pointes vers la gauche', DeepL: 'flèche à deux têtes vers la gauche') + - "↟": [T: "flèche à deux pointes vers le haut"] # 0x219f (en: 'upwards two headed arrow') + - "↠": [T: "flèche à deux pointes droite"] # 0x21a0 (en: 'rightwards two headed arrow', MathPlayer: 'flèche à deux pointes vers la droite', DeepL: 'vers la droite flèche à deux têtes') + - "↡": [T: "flèche à deux pointes vers le bas"] # 0x21a1 (en: 'downwards two headed arrow') + - "↢": [T: "flèche empennée gauche"] # 0x21a2 (en: 'leftwards arrow with tail', MathPlayer: 'flèche empennée vers la gauche', DeepL: 'flèche gauche avec queue') + - "↣": [T: "flèche empennée droite"] # 0x21a3 (en: 'rightwards arrow with tail', MathPlayer: 'flèche empennée vers la droite', DeepL: 'flèche droite avec empennage') + - "↤": [T: "flèche d'un taquet gauche"] # 0x21a4 (en: 'leftwards arrow from bar', MathPlayer: 'flèche d'un taquet vers la gauche', DeepL: 'flèche vers la gauche à partir de la barre') + - "↥": [T: "flèche d'un taquet vers le haut"] # 0x21a5 (en: 'upwards arrow from bar') + - "↦": [T: "flèche d'un taquet droite"] # 0x21a6 (en: 'rightwards arrow from bar', MathPlayer: 'flèche d'un taquet vers la droite', DeepL: 'flèche vers la droite à partir d'une barre') + - "↧": [T: "flèche d'un taquet vers le bas"] # 0x21a7 (en: 'downwards arrow from bar') + - "↨": [T: "flèche haut bas sur base"] # 0x21a8 (en: 'up down arrow with base', MathPlayer: 'flèche haut-bas sur base', DeepL: 'flèche haut-bas avec base') + - "↩": [T: "flèche avec crochet gauche"] # 0x21a9 (en: 'leftwards arrow with hook', MathPlayer: 'flèche vers la gauche avec crochet', DeepL: 'flèche gauche avec crochet') + - "↪": [T: "flèche vers la droite avec crochet"] # 0x21aa (en: 'rightwards arrow with hook', SRE: 'flèche avec crochet droite') + - "↫": [T: "flèche vers la gauche avec boucle"] # 0x21ab (en: 'leftwards arrow with loop', SRE: 'flèche avec boucle gauche') + - "↬": [T: "flèche vers la droite avec boucle"] # 0x21ac (en: 'rightwards arrow with loop', SRE: 'flèche avec boucle droite') + - "↭": [T: "flèche ondulée bilatérale"] # 0x21ad (en: 'left right wave arrow') + - "↮": [T: "flèche barrée bilatérale"] # 0x21ae (en: 'left right arrow with stroke') + - "↯": [T: "flèche vers le bas en zigzag"] # 0x21af (en: 'downwards zigzag arrow') + - "↰": [T: "flèche vers le haut avec pointe vers la gauche"] # 0x21b0 (en: 'upwards arrow with tip leftwards', SRE: 'flèche vers le haut avec pointe gauche') + - "↱": [T: "flèche vers le haut avec pointe vers la droite"] # 0x21b1 (en: 'upwards arrow with tip rightwards', SRE: 'flèche vers le haut avec pointe droite') + - "↲": [T: "flèche vers le bas avec pointe vers la gauche"] # 0x21b2 (en: 'downwards arrow with tip leftwards', SRE: 'flèche vers le bas avec pointe gauche') + - "↳": [T: "flèche vers le bas avec pointe vers la droite"] # 0x21b3 (en: 'downwards arrow with tip rightwards', SRE: 'flèche vers le bas avec pointe droite') + - "↴": [T: "flèche vers la droite avec coin vers le bas"] # 0x21b4 (en: 'rightwards arrow with corner downwards', SRE: 'flèche vers le bas avec coin droit') + - "↵": [T: "flèche vers le bas avec coin vers la gauche"] # 0x21b5 (en: 'downwards arrow with corner leftwards', SRE: 'flèche vers le bas avec coin gauche') + - "↶": [T: "flèche semi circulaire en sens positif"] # 0x21b6 (en: 'anticlockwise top semicircle arrow', MathPlayer: 'flèche semi-circulaire en sens positif', DeepL: 'flèche du demi-cercle supérieur dans le sens inverse des aiguilles d'une montre') + - "↷": [T: "flèche semi circulaire en sens négatif"] # 0x21b7 (en: 'clockwise top semicircle arrow', MathPlayer: 'flèche semi-circulaire en sens négatif', DeepL: 'flèche du demi-cercle supérieur dans le sens des aiguilles d'une montre') + - "↸": [T: "flèche nord ouest vers une barre horizontale longue"] # 0x21b8 (en: 'north west arrow to long bar', MathPlayer: 'flèche nord-ouest jusqu'à une barre longue', DeepL: 'flèche nord-ouest vers la barre longue') + - "↹": [T: "flèche gauche vers un taquet sur flèche droite vers un taquet"] # 0x21b9 (en: 'leftwards arrow to bar over rightwards arrow to bar', MathPlayer: 'flèche vers la gauche jusqu'à un taquet par-dessus flèche vers la droite jusqu'à un taquet', DeepL: 'flèche gauche vers la barre sur flèche droite vers la barre') + - "↺": [T: "flèche en sens positif à cercle ouvert"] # 0x21ba (en: 'anticlockwise open circle arrow') + - "↻": [T: "flèche en sens négatif à cercle ouvert"] # 0x21bb (en: 'clockwise open circle arrow') + - "↼": [T: "harpon gauche avec dent vers le haut"] # 0x21bc (en: 'left harpoon up', MathPlayer: 'harpon vers la gauche avec dent vers le haut', DeepL: 'harpon gauche en haut') + - "↽": [T: "harpon gauche avec dent vers le bas"] # 0x21bd (en: 'left harpoon down', MathPlayer: 'harpon vers la gauche avec dent vers bas', DeepL: 'harpon gauche en bas') + - "↾": [T: "harpon vers le haut avec dent vers la droite"] # 0x21be (en: 'up harpoon right', MathPlayer: 'harpon vers le haut avec dent vers la droite', DeepL: 'harpon vers le haut à droite') + - "↿": [T: "harpon vers le haut avec dent vers la gauche"] # 0x21bf (en: 'up harpoon left', MathPlayer: 'harpon vers le haut avec dent vers la gauche', DeepL: 'harpon vers le haut à gauche') + - "⇀": [T: "harpon droit avec dent vers le haut"] # 0x21c0 (en: 'right harpoon up', MathPlayer: 'harpon vers la droite avec dent vers le haut', DeepL: 'harpon droit vers le haut') + - "⇁": [T: "harpon droit avec dent vers le bas"] # 0x21c1 (en: 'right harpoon down', MathPlayer: 'harpon vers la droite avec dent vers le bas', DeepL: 'à droite harpon vers le bas') + - "⇂": [T: "harpon vers le bas avec dent vers la droite"] # 0x21c2 (en: 'down harpoon right', MathPlayer: 'harpon vers le bas avec dent vers la droite', DeepL: 'harpon vers le bas à droite') + - "⇃": [T: "harpon vers le bas avec dent vers la gauche"] # 0x21c3 (en: 'down harpoon left', MathPlayer: 'harpon vers le bas avec dent vers la gauche', DeepL: 'harpon vers le bas à gauche') + - "⇄": [T: "flèche vers la droite par dessus flèche vers la gauche"] # 0x21c4 (en: 'rightwards arrow over leftwards arrow', MathPlayer: 'flèche vers le haut par-dessus flèche vers la gauche', DeepL: 'flèche vers la droite au-dessus de la flèche vers la gauche') + - "⇅": [T: "flèche vers le haut à gauche d'une flèche vers le bas"] # 0x21c5 (en: 'upwards arrow leftwards of downwards arrow') + - "⇆": [T: "flèche vers la gauche par dessus flèche vers la droite"] # 0x21c6 (en: 'leftwards arrow over rightwards arrow', MathPlayer: 'flèche vers la gauche par-dessus flèche vers la droite', DeepL: 'flèche vers la gauche sur flèche vers la droite') + - "⇇": [T: "paire de flèches vers la gauche"] # 0x21c7 (en: 'leftwards paired arrows', MathPlayer: 'paire de flèches vers la gauche', DeepL: 'flèches jumelées vers la gauche') + - "⇈": [T: "paire de flèches vers le haut"] # 0x21c8 (en: 'upwards paired arrows') + - "⇉": [T: "paire de flèches vers la droite"] # 0x21c9 (en: 'rightwards paired arrows', MathPlayer: 'paire de flèches vers la droite', DeepL: 'flèches jumelées vers la droite') + - "⇊": [T: "paire de flèches vers le bas"] # 0x21ca (en: 'downwards paired arrows') + - "⇋": [T: "harpon gauche par dessus harpon droit"] # 0x21cb (en: 'left harpoon over right harpoon', MathPlayer: 'harpon vers la gauche par-dessus harpon vers la droite', DeepL: 'harpon gauche sur harpon droit') + - "⇌": [T: "harpon droit par dessus harpon gauche"] # 0x21cc (en: 'right harpoon over left harpoon', MathPlayer: 'harpon vers la droite par-dessus harpon vers la gauche', DeepL: 'harpon droit sur harpon gauche') + - "⇍": [T: "double flèche barrée gauche"] # 0x21cd (en: 'leftwards double arrow with stroke', MathPlayer: 'double flèche barrée vers la gauche', DeepL: 'flèche double gauche avec trait') + - "⇎": [T: "double flèche barrée bilatérale"] # 0x21ce (en: 'left right double arrow with stroke') + - "⇏": [T: "double flèche barrée droite"] # 0x21cf (en: 'rightwards double arrow with stroke', MathPlayer: 'double flèche barrée vers la droite', DeepL: 'flèche double droite avec trait') + - "⇐": [T: "double flèche vers la gauche"] # 0x21d0 (en: 'leftwards double arrow', MathPlayer: 'double flèche vers la gauche', DeepL: 'flèche double vers la gauche') + - "⇑": [T: "double flèche vers le haut"] # 0x21d1 (en: 'upwards double arrow') + - "⇒": [T: "double flèche vers la droite"] # 0x21d2 (en: 'implies', MathPlayer: 'double flèche vers la droite', DeepL: 'implique') + - "⇓": [T: "double flèche vers le bas"] # 0x21d3 (en: 'downwards double arrow') + - "⇔": [T: "double flèche bilatérale"] # 0x21d4 (en: 'if and only if') + - "⇕": [T: "double flèche haut bas"] # 0x21d5 (en: 'up down double arrow', MathPlayer: 'double flèche haut-bas', DeepL: 'haut-bas double flèche') + - "⇖": [T: "double flèche nord ouest"] # 0x21d6 (en: 'north west double arrow', MathPlayer: 'double flèche nord-ouest', DeepL: 'flèche double nord-ouest') + - "⇗": [T: "double flèche nord est"] # 0x21d7 (en: 'north east double arrow', MathPlayer: 'double flèche nord-est', DeepL: 'flèche double nord-est') + - "⇘": [T: "double flèche sud est"] # 0x21d8 (en: 'south east double arrow', MathPlayer: 'double flèche sud-est', DeepL: 'flèche double sud-est') + - "⇙": [T: "double flèche sud ouest"] # 0x21d9 (en: 'south west double arrow', MathPlayer: 'double flèche sud-ouest', DeepL: 'flèche double sud-ouest') + - "⇚": [T: "triple flèche gauche"] # 0x21da (en: 'leftwards triple arrow', MathPlayer: 'triple flèche vers la gauche', DeepL: 'flèche triple vers la gauche') + - "⇛": [T: "triple flèche droite"] # 0x21db (en: 'rightwards triple arrow', MathPlayer: 'triple flèche vers la droite', DeepL: 'vers la droite triple flèche') + - "⇜": [T: "flèche en tire bouchon gauche"] # 0x21dc (en: 'leftwards squiggle arrow', MathPlayer: 'flèche vers la gauche en tire-bouchon', DeepL: 'flèche gribouillée vers la gauche') + - "⇝": [T: "flèche en tire bouchon droite"] # 0x21dd (en: 'rightwards squiggle arrow', MathPlayer: 'flèche vers la droite en tire-bouchon', DeepL: 'flèche vers la droite avec gribouillis') + - "⇞": [T: "flèche vers le haut avec double barre"] # 0x21de (en: 'upwards arrow with double stroke') + - "⇟": [T: "flèche vers le bas avec double barre"] # 0x21df (en: 'downwards arrow with double stroke') + - "⇠": [T: "flèche pointillée vers la gauche"] # 0x21e0 (en: 'leftwards dashed arrow', MathPlayer: 'flèche pointillée vers la gauche', DeepL: 'flèche en pointillé vers la gauche') + - "⇡": [T: "flèche pointillée vers le haut"] # 0x21e1 (en: 'upwards dashed arrow') + - "⇢": [T: "flèche pointillée vers la droite"] # 0x21e2 (en: 'rightwards dashed arrow', MathPlayer: 'flèche pointillée vers la droite', DeepL: 'flèche en pointillé vers la droite') + - "⇣": [T: "flèche pointillée vers le bas"] # 0x21e3 (en: 'downwards dashed arrow') + - "⇤": [T: "flèche gauche vers un taquet"] # 0x21e4 (en: 'leftwards arrow to bar', MathPlayer: 'flèche vers la gauche jusqu'à un taquet', DeepL: 'flèche gauche vers la barre') + - "⇥": [T: "flèche droite vers un taquet"] # 0x21e5 (en: 'rightwards arrow to bar', MathPlayer: 'flèche vers la droite jusqu'à un taquet', DeepL: 'flèche vers la droite jusqu'à la barre') + - "⇦": [T: "flèche blanche vers la gauche"] # 0x21e6 (en: 'leftwards white arrow', SRE: 'flèche blanche gauche') + - "⇧": [T: "flèche blanche vers le haut"] # 0x21e7 (en: 'upwards white arrow') + - "⇨": [T: "flèche blanche vers la droite"] # 0x21e8 (en: 'rightwards white arrow', SRE: 'flèche blanche droite') + - "⇩": [T: "flèche blanche vers le bas"] # 0x21e9 (en: 'downwards white arrow') + - "⇪": [T: "flèche blanche vers le haut à partir d'un taquet"] # 0x21ea (en: 'upwards white arrow from bar') + - "⇫": [T: "flèche blanche vers le haut sur socle"] # 0x21eb (en: 'upwards white arrow on pedestal', DeepL: 'flèche blanche vers le haut sur un socle') + - "⇬": [T: "flèche blanche vers le haut sur socle et trait horizontal"] # 0x21ec (en: 'upwards white arrow on pedestal with horizontal bar', DeepL: 'flèche blanche vers le haut sur socle avec barre horizontale') + - "⇭": [T: "flèche blanche vers le haut sur socle et barre verticale"] # 0x21ed (en: 'upwards white arrow on pedestal with vertical bar', DeepL: 'flèche blanche vers le haut sur un socle avec une barre verticale') + - "⇮": [T: "double flèche blanche vers le haut"] # 0x21ee (en: 'upwards white double arrow', DeepL: 'flèche double blanche vers le haut') + - "⇯": [T: "double flèche blanche vers le haut sur socle"] # 0x21ef (en: 'upwards white double arrow on pedestal', DeepL: 'double flèche blanche vers le haut sur un socle') + - "⇰": [T: "flèche blanche vers la droite appuyée sur mur"] # 0x21f0 (en: 'rightwards white arrow from wall', DeepL: 'vers la droite flèche blanche du mur') + - "⇱": [T: "flèche nord ouest en encoignure"] # 0x21f1 (en: 'north west arrow to corner', DeepL: 'flèche nord-ouest à l'angle') + - "⇲": [T: "flèche sud est en encoignure"] # 0x21f2 (en: 'south east arrow to corner', DeepL: 'flèche sud-est vers le coin') + - "⇳": [T: "flèche blanche vers le haut et le bas"] # 0x21f3 (en: 'up down white arrow', DeepL: 'flèche blanche haut-bas') + - "⇴": [T: "flèche vers la droite à petit cercle"] # 0x21f4 (en: 'right arrow with small circle', DeepL: 'flèche droite avec petit cercle') + - "⇵": [T: "flèche vers le bas à gauche d'une flèche vers le haut"] # 0x21f5 (en: 'downwards arrow leftwards of upwards arrow') + - "⇶": [T: "trois flèches vers la droite"] # 0x21f6 (en: 'three rightwards arrows') + - "⇷": [T: "flèche vers la gauche barrée verticalement"] # 0x21f7 (en: 'leftwards arrow with vertical stroke', DeepL: 'flèche vers la gauche avec trait vertical') + - "⇸": [T: "flèche vers la droite barrée verticalement"] # 0x21f8 (en: 'rightwards arrow with vertical stroke', DeepL: 'flèche vers la droite avec trait vertical') + - "⇹": [T: "flèche vers la droite et la gauche barrée verticalement"] # 0x21f9 (en: 'left right arrow with vertical stroke', DeepL: 'flèche gauche droite avec trait vertical') + - "⇺": [T: "flèche vers la gauche barrée deux fois verticalement"] # 0x21fa (en: 'leftwards arrow with double vertical stroke', DeepL: 'flèche vers la gauche avec double trait vertical') + - "⇻": [T: "flèche vers la droite barrée deux fois verticalement"] # 0x21fb (en: 'rightwards arrow with double vertical stroke', DeepL: 'flèche vers la droite avec double trait vertical') + - "⇼": [T: "flèche bilatérale barrée deux fois verticalement"] # 0x21fc (en: 'left right arrow with double vertical stroke', DeepL: 'flèche gauche droite avec double trait vertical') + - "⇽": [T: "flèche à tête creuse vers la gauche"] # 0x21fd (en: 'leftwards open headed arrow', MathPlayer: 'flèche à tête creuse vers la gauche', DeepL: 'flèche ouverte vers la gauche') + - "⇾": [T: "flèche à tête creuse vers la droite"] # 0x21fe (en: 'rightwards open headed arrow', MathPlayer: 'flèche à tête creuse vers la droite', DeepL: 'flèche ouverte vers la droite') + - "⇿": [T: "flèche à tête creuse bilatérale"] # 0x21ff (en: 'left right open headed arrow') + - "∀": [T: "pour tous"] # 0x2200 (en: 'for all') - "∁": # 0x2201 - test: if: "$Verbosity!='Terse'" - then: [t: "le"] # (en: 'the', DeepL translation) + then: [T: "le"] # (en: 'the', DeepL translation) - t: "complément" # (en: 'complement of') - "∂": # 0x2202 - test: if: "$Verbosity='Terse'" - then: [t: "partiel"] # (en: 'partial', DeepL translation) - else: [t: "dérivée partielle"] # (en: 'partial derivative', DeepL: 'dérivé partiel') - - "∃": [t: "il existe"] # 0x2203 (en: 'there exists') - - "∄": [t: "il n'existe pas"] # 0x2204 (en: 'there does not exist') - - "∅": [t: "ensemble vide"] # 0x2205 (en: 'empty set') + then: [T: "partielle"] # (en: 'partial', DeepL translation) + else: [T: "dérivée partielle"] # (en: 'partial derivative', DeepL: 'dérivé partiel') + - "∃": [T: "il existe"] # 0x2203 (en: 'there exists') + - "∄": [T: "il n'existe pas"] # 0x2204 (en: 'there does not exist') + - "∅": [T: "ensemble vide"] # 0x2205 (en: 'empty set') - "∆": # 0x2206 - test: if: "following-sibling::*" then_test: if: "$Verbosity!='Terse'" - then: [t: "le lahplahsien de"] # "LahPlahsian" sounds better than "laplacian" in speech engines tested (en: 'the LahPlahsian of', DeepL translation) - else: [t: "incrément"] # (en: 'LahPlahsian') - else: [t: "incrément"] # (en: 'LahPlahsian') + then: [T: "le lahplahsien de"] # "LahPlahsian" sounds better than "laplacian" in speech engines tested (en: 'the LahPlahsian of', DeepL translation) + else: [T: "incrément"] # (en: 'LahPlahsian') + else: [T: "incrément"] # (en: 'LahPlahsian') - - "∇": [t: "nabla"] # 0x2207 (en: 'nahblah', DeepL: 'nahblah') + - "∇": [T: "nabla"] # 0x2207 (en: 'nahblah', DeepL: 'nahblah') - "∉": # 0x2209 # rule is identical to 0x2208 - test: if: "$SpeechStyle != 'ClearSpeak'" - then: [t: "n'est pas un élément de"] # (en: 'is not an element of', DeepL translation) + then: [T: "n'est pas un élément de"] # (en: 'is not an element of', DeepL translation) # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option else_test: if: "../../self::m:set or ../../../self::m:set" # inside a set then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "pas dans"] # (en: 'not in', DeepL translation) + then: [T: "pas dans"] # (en: 'not in', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "pas membre de"] # (en: 'not member of', DeepL translation) + then: [T: "pas membre de"] # (en: 'not member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "pas élément de"] # (en: 'not element of', DeepL translation) - - else: [t: "n'appartient pas à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to') + then: [T: "pas élément de"] # (en: 'not element of', DeepL translation) + - else: [T: "n'appartient pas à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to') else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "n'est pas membre de"] # (en: 'is not a member of', DeepL translation) + then: [T: "n'est pas membre de"] # (en: 'is not a member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "n'est pas un élément de"] # (en: 'is not an element of', DeepL translation) + then: [T: "n'est pas un élément de"] # (en: 'is not an element of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "n'est pas dans"] # (en: 'is not in', DeepL translation) - - else: [t: "n'appartient pas à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'does not belong to') + then: [T: "n'est pas dans"] # (en: 'is not in', DeepL translation) + - else: [T: "n'appartient pas à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'does not belong to') - "∊": # 0x220a - test: if: "$SpeechStyle != 'ClearSpeak'" then: - test: if: "$Verbosity!='Terse' and not(parent::m:set)" # "the set x is an element of ..." sounds bad - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "appartient à" # (en: 'an element of') # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option else_test: if: "../../self::m:set or ../../../self::m:set" # inside a set then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "en"] # (en: 'in', DeepL translation) + then: [T: "en"] # (en: 'in', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "membre de"] # (en: 'member of', DeepL translation) + then: [T: "membre de"] # (en: 'member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "élément de"] # (en: 'element of', DeepL translation) - - else: [t: "appartient à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to') + then: [T: "élément de"] # (en: 'element of', DeepL translation) + - else: [T: "appartient à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to') else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "est un membre de"] # (en: 'is a member of', DeepL translation) + then: [T: "est un membre de"] # (en: 'is a member of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "est un élément de"] # (en: 'is an element of', DeepL translation) + then: [T: "est un élément de"] # (en: 'is an element of', DeepL translation) - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "est dans"] # (en: 'is in', DeepL translation) - - else: [t: "appartient à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to') - - "∋": [t: "contient comme élément"] # 0x220b (en: 'contains the member') - - "∌": [t: "ne contient pas comme élément"] # 0x220c (en: 'does not contain the member') - - "∍": [t: "contient comme élément"] # 0x220d (en: 'contains the member') - - "∎": [t: "ce qu'il fallait démontrer"] # 0x220e (en: 'end of proof') - - "∏": [t: "produit"] # 0x220f (en: 'product') - - "∐": [t: "coproduit"] # 0x2210 (en: 'coproduct') - - "∑": [t: "sommation"] # 0x2211 (en: 'sum') - - "−": [t: "moins"] # 0x2212 (en: 'minus') - - "∓": [t: "moins ou plus"] # 0x2213 (en: 'minus or plus', MathPlayer: 'moins-ou-plus') - - "∔": [t: "plus pointé"] # 0x2214 (en: 'dot plus') - - "∕": [t: "division"] # 0x2215 (en: 'divided by') - - "∖": [t: "différence d'ensembles"] # 0x2216 (en: 'set minus') - - "∗": [t: "opérateur astérisque"] # 0x2217 (en: 'times') - - "∘": [t: "opérateur rond"] # 0x2218 (en: 'composed with') + then: [T: "est dans"] # (en: 'is in', DeepL translation) + - else: [T: "appartient à"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to') + - "∋": [T: "contient comme élément"] # 0x220b (en: 'contains the member') + - "∌": [T: "ne contient pas comme élément"] # 0x220c (en: 'does not contain the member') + - "∍": [T: "contient comme élément"] # 0x220d (en: 'contains the member') + - "∎": [T: "ce qu'il fallait démontrer"] # 0x220e (en: 'end of proof') + - "∏": [T: "produit"] # 0x220f (en: 'product') + - "∐": [T: "coproduit"] # 0x2210 (en: 'coproduct') + - "∑": [T: "sommation"] # 0x2211 (en: 'sum') + - "−": [T: "moins"] # 0x2212 (en: 'minus') + - "∓": [T: "moins ou plus"] # 0x2213 (en: 'minus or plus', MathPlayer: 'moins-ou-plus') + - "∔": [T: "plus pointé"] # 0x2214 (en: 'dot plus') + - "∕": [T: "division"] # 0x2215 (en: 'divided by') + - "∖": [T: "différence d'ensembles"] # 0x2216 (en: 'set minus') + - "∗": [T: "opérateur astérisque"] # 0x2217 (en: 'times') + - "∘": [T: "opérateur rond"] # 0x2218 (en: 'composed with') - "∙": # 0x2219 - test: if: "@data-chem-formula-op" - then: [t: "point"] # (en: 'dot', DeepL translation) - else: [t: "point médian"] # (en: 'times') + then: [T: "point"] # (en: 'dot', DeepL translation) + else: [T: "fois"] # (en: 'times') - "√": # 0x221a - test: if: "$Verbosity!='Terse'" - then: [t: "le"] # (en: 'the', DeepL translation) + then: [T: "la"] # (en: 'the', DeepL translation) - t: "racine carrée" # (en: 'square root of') - "∛": # 0x221b - test: if: "$Verbosity!='Terse'" - then: [t: "le"] # (en: 'the', DeepL translation) + then: [T: "la"] # (en: 'the', DeepL translation) - t: "racine cubique" # (en: 'cube root of') - "∜": # 0x221c - test: if: "$Verbosity!='Terse'" - then: [t: "le"] # (en: 'the', DeepL translation) + then: [T: "la"] # (en: 'the', DeepL translation) - t: "racine quatrième" # (en: 'fourth root of') - "∝": # 0x221d - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "proportionnel à" # (en: 'proportional to') - - "∞": [t: "infini"] # 0x221e (en: 'infinity') - - "∟": [t: "angle droit"] # 0x221f (en: 'right angle') - - "∠": [t: "angle"] # 0x2220 - - "∡": [t: "angle mesuré"] # 0x2221 (en: 'measured angle') - - "∢": [t: "angle sphérique"] # 0x2222 (en: 'spherical angle') - - "∣": [t: "est un diviseur de"] # 0x2223 (en: 'divides') - - "∤": [t: "n'est pas un diviseur de"] # 0x2224 (en: 'does not divide') - - "∧": [t: "et logique"] # 0x2227 (en: 'and') - - "∨": [t: "ou logique"] # 0x2228 (en: 'or') + - "∞": [T: "infini"] # 0x221e (en: 'infinity') + - "∟": [T: "angle droit"] # 0x221f (en: 'right angle') + - "∠": [T: "angle"] # 0x2220 + - "∡": [T: "angle mesuré"] # 0x2221 (en: 'measured angle') + - "∢": [T: "angle sphérique"] # 0x2222 (en: 'spherical angle') + - "∣": [T: "est un diviseur de"] # 0x2223 (en: 'divides') + - "∤": [T: "n'est pas un diviseur de"] # 0x2224 (en: 'does not divide') + - "∧": [T: "et logique"] # 0x2227 (en: 'and') + - "∨": [T: "ou logique"] # 0x2228 (en: 'or') - "∩": [T: "\uF8FEintersection"] # 0x2229 - "∪": [T: "\uF8FEunion"] # 0x222a - "∫": [T: "\uF8FEintégrale"] # 0x222b (en: 'integral') @@ -810,653 +810,653 @@ - "∮": [T: "\uF8FEintégrale de contour"] # 0x222e (en: 'contour integral') - "∯": [T: "\uF8FEintégrale de surface"] # 0x222f (en: 'surface integral') - "∰": [T: "\uF8FEintégrale de volume"] # 0x2230 (en: 'volume integral') - - "∱": [T: "\uF8FEintégrale en sens négatif"] # 0x2231 (en: 'clockwise integral') - - "∲": [T: "\uF8FEintégrale de contour en sens négatif"] # 0x2232 (en: 'clockwise contour integral') - - "∳": [T: "\uF8FEintégrale de contour en sens positif"] # 0x2233 (en: 'anticlockwise contour integral') - - "∴": [t: "par conséquent"] # 0x2234 (en: 'therefore') - - "∵": [t: "parce que"] # 0x2235 (en: 'because') + - "∱": [T: "\uF8FEintégrale en sens horaire"] # 0x2231 (en: 'clockwise integral') + - "∲": [T: "\uF8FEintégrale de contour en sens horaire"] # 0x2232 (en: 'clockwise contour integral') + - "∳": [T: "\uF8FEintégrale de contour en sens antihoraire"] # 0x2233 (en: 'anticlockwise contour integral') + - "∴": [T: "par conséquent"] # 0x2234 (en: 'therefore') + - "∵": [T: "parce que"] # 0x2235 (en: 'because') - "∶": # 0x2236 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "rapport" # (en: 'to') - - "∷": [t: "proportion"] # 0x2237 (en: 'as') - - "∸": [t: "moins pointé"] # 0x2238 (en: 'dot minus') - - "∹": [t: "excès"] # 0x2239 (en: 'has excess compared to') + - "∷": [T: "proportion"] # 0x2237 (en: 'as') + - "∸": [T: "moins pointé"] # 0x2238 (en: 'dot minus') + - "∹": [T: "excès"] # 0x2239 (en: 'has excess compared to') - "∺": # 0x223a - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "proportion géométrique" # (en: 'geometrically proportional to') - "∻": # 0x223b - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "homothétique" # (en: 'homothetic to') - - "∼": [t: "opérateur tilde"] # 0x223c (en: 'varies with') - - "∽": [t: "opérateur tilde renversé"] # 0x223d (en: 'reversed tilde') + - "∼": [T: "opérateur tilde"] # 0x223c (en: 'varies with') + - "∽": [T: "opérateur tilde renversé"] # 0x223d (en: 'reversed tilde') - "∾": # 0x223e - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "s couché renversé" # (en: 'most positive') - - "∿": [t: "sinusoïde"] # 0x223f (en: 'sine wave') - - "≀": [t: "produit couronne"] # 0x2240 (en: 'wreath product') - - "≁": [t: "non tilde"] # 0x2241 (en: 'not tilde') - - "≂": [t: "moins tilde"] # 0x2242 (en: 'minus tilde') + - "∿": [T: "sinusoïde"] # 0x223f (en: 'sine wave') + - "≀": [T: "produit couronne"] # 0x2240 (en: 'wreath product') + - "≁": [T: "non tilde"] # 0x2241 (en: 'not tilde') + - "≂": [T: "moins tilde"] # 0x2242 (en: 'minus tilde') - "≃": # 0x2243 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "asymptotiquement égal à" # (en: 'asymptotically equal to') - "≄": # 0x2244 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "non asymptotiquement égal à" # (en: 'not asymptotically equal to') - "≅": # 0x2245 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "approximativement égal à" # (en: 'congruent to') - "≆": # 0x2246 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "approximativement mais non strictement égal à" # (en: 'approximately but not actually equal to') - "≇": # 0x2247 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "ni approximativement ni strictement égal à" # (en: 'not congruent to') - "≈": # 0x2248 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "presque égal à" # (en: 'approximately equal to') - "≉": # 0x2249 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "non presque égal à" # (en: 'not approximately equal to') - "≊": # 0x224a - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "presque égal ou égal à" # (en: 'approximately equal or equal to') - - "≋": [t: "triple tilde"] # 0x224b - - "≌": [t: "entièrement égal à"] # 0x224c (en: 'are all equal to') + - "≋": [T: "triple tilde"] # 0x224b + - "≌": [T: "entièrement égal à"] # 0x224c (en: 'are all equal to') - "≍": # 0x224d - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "équivalent à" # (en: 'equivalent to') - "≎": # 0x224e - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "géométriquement équivalent à" # (en: 'geometrically equivalent to') - "≏": # 0x224f - test: if: "$Verbosity!='Terse'" - then: [t: "le"] # (en: 'the', DeepL translation) + then: [T: "la"] # (en: 'the', DeepL translation) - t: "différence entre" # (en: 'difference between') - - "≐": [t: "tend vers la limite"] # 0x2250 (en: 'approaches the limit') + - "≐": [T: "tend vers la limite"] # 0x2250 (en: 'approaches the limit') - "≑": # 0x2251 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "géométriquement égal à" # (en: 'geometrically equal to') - "≒": # 0x2252 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "approximativement égal à ou image de" # (en: 'approximately equal to or the image of') - "≓": # 0x2253 - test: if: "$Verbosity!='Terse'" - then: [t: "est le"] # (en: 'is the', DeepL translation) - - t: "image de ou approximativement égal à" # (en: 'image of or approximately equal to') - - "≔": [t: "deux-points égal"] # 0x2254 (en: 'colon equals', SRE: 'deux points égal') - - "≕": [t: "égal deux points"] # 0x2255 (en: 'equals colon', MathPlayer: 'égal deux-points', DeepL: 'égal colon') - - "≖": [t: "rond dans égal"] # 0x2256 (en: 'ring in equal to') + then: [T: "est l'"] # (en: 'is the', DeepL translation) + - t: "\uF8FEimage de ou approximativement égal à" # (en: 'image of or approximately equal to') + - "≔": [T: "deux-points égal"] # 0x2254 (en: 'colon equals', SRE: 'deux points égal') + - "≕": [T: "égal deux points"] # 0x2255 (en: 'equals colon', MathPlayer: 'égal deux-points', DeepL: 'égal colon') + - "≖": [T: "rond dans égal"] # 0x2256 (en: 'ring in equal to') - "≗": # 0x2257 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "égal avec rond en chef" # (en: 'approximately equal to') - - "≘": [t: "correspond à"] # 0x2258 (en: 'corresponds to') - - "≙": [t: "estime"] # 0x2259 (en: 'estimates') + - "≘": [T: "correspond à"] # 0x2258 (en: 'corresponds to') + - "≙": [T: "estime"] # 0x2259 (en: 'estimates') - "≚": # 0x225a - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "équiangulaire à" # (en: 'equiangular to') - - "≛": [t: "égal avec étoile en chef"] # 0x225b (en: 'star equals') - - "≜": [t: "égal delta"] # 0x225c (en: 'delta equals') - - "≝": [t: "égal par définition à"] # 0x225d (en: 'is defined to be') + - "≛": [T: "égal avec étoile en chef"] # 0x225b (en: 'star equals') + - "≜": [T: "égal delta"] # 0x225c (en: 'delta equals') + - "≝": [T: "égal par définition à"] # 0x225d (en: 'is defined to be') - "≞": # 0x225e - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "mesuré par" # (en: 'measured by') - - "≟": [t: "égalité en doute"] # 0x225f (en: 'has an unknown relationship with') + - "≟": [T: "égalité en doute"] # 0x225f (en: 'has an unknown relationship with') - "≠": # 0x2260 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "n'est"] # (en: 'is', DeepL translation) - t: "pas égal à" # (en: 'not equal to') - "≡": # 0x2261 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "identique à" # (en: 'identical to') - "≢": # 0x2262 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "non identique à" # (en: 'not identical to') - "≣": # 0x2263 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "strictement équivalent à" # (en: 'strictly equivalent to') - - "≦": [t: "plus petit que par dessus égal à"] # 0x2266 (en: 'less than over equal to', MathPlayer: 'plus petit que par-dessus égal à', DeepL: 'inférieur à égal à') - - "≧": [t: "plus grand que par dessus égal à"] # 0x2267 (en: 'greater than over equal to', MathPlayer: 'plus grand que par-dessus égal à', DeepL: 'plus grand que sur égal à') + - "≦": [T: "inférieur à sur égal à"] # 0x2266 (en: 'less than over equal to', MathPlayer: 'plus petit que par-dessus égal à', DeepL: 'inférieur à égal à') + - "≧": [T: "supérieur à sur égal à"] # 0x2267 (en: 'greater than over equal to', MathPlayer: 'plus grand que par-dessus égal à', DeepL: 'plus grand que sur égal à') - "≨": # 0x2268 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "plus petit mais pas égal à" # (en: 'less than but not equal to') + then: [T: "est"] # (en: 'is', DeepL translation) + - t: "inférieur mais pas égal à" # (en: 'less than but not equal to') - "≩": # 0x2269 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "plus grand mais pas égal à" # (en: 'greater than but not equal to') + then: [T: "est"] # (en: 'is', DeepL translation) + - t: "supérieur mais pas égal à" # (en: 'greater than but not equal to') - "≪": # 0x226a - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "beaucoup plus petit que" # (en: 'much less than') + then: [T: "est"] # (en: 'is', DeepL translation) + - t: "très inférieur à" # (en: 'much less than') - "≫": # 0x226b - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "beaucoup plus grand que" # (en: 'much greater than') + then: [T: "est"] # (en: 'is', DeepL translation) + - t: "très supérieur à" # (en: 'much greater than') - "≬": # 0x226c - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "entre" # (en: 'between') - "≭": # 0x226d - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "non équivalent à" # (en: 'not equivalent to') - "≮": # 0x226e - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "pas plus petit que" # (en: 'not less than') + then: [T: "n'est"] # (en: 'is', DeepL translation) + - t: "pas inférieur à" # (en: 'not less than') - "≯": # 0x226f - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "pas plus grand que" # (en: 'not greater than') + then: [T: "n'est"] # (en: 'is', DeepL translation) + - t: "pas supérieur à" # (en: 'not greater than') - "≰": # 0x2270 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "ni plus petit ni égal à" # (en: 'neither less than nor equal to') + then: [T: "n'est"] # (en: 'is', DeepL translation) + - t: "ni inférieur ni égal à" # (en: 'neither less than nor equal to') - "≱": # 0x2271 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "ni plus grand ni égal à" # (en: 'neither greater than nor equal to') + then: [T: "n'est"] # (en: 'is', DeepL translation) + - t: "ni supérieur ni égal à" # (en: 'neither greater than nor equal to') - "≲": # 0x2272 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "plus petit ou équivalent à" # (en: 'less than or equivalent to') + then: [T: "est"] # (en: 'is', DeepL translation) + - t: "inférieur ou équivalent à" # (en: 'less than or equivalent to') - "≳": # 0x2273 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "plus grand ou équivalent à" # (en: 'greater than or equivalent to') + then: [T: "est"] # (en: 'is', DeepL translation) + - t: "supérieur ou équivalent à" # (en: 'greater than or equivalent to') - "≴": # 0x2274 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "ni plus petit ni équivalent à" # (en: 'neither less than nor equivalent to') + then: [T: "n'est"] # (en: 'is', DeepL translation) + - t: "ni inférieur ni équivalent à" # (en: 'neither less than nor equivalent to') - "≵": # 0x2275 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "ni plus grand ni équivalent à" # (en: 'neither greater than nor equivalent to') + then: [T: "n'est"] # (en: 'is', DeepL translation) + - t: "ni supérieur ni équivalent à" # (en: 'neither greater than nor equivalent to') - "≶": # 0x2276 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "plus petit ou plus grand que" # (en: 'less than or greater than') + then: [T: "est"] # (en: 'is', DeepL translation) + - t: "inférieur ou supérieur à" # (en: 'less than or greater than') - "≷": # 0x2277 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "plus grand ou plus petit que" # (en: 'greater than or less than') + then: [T: "est"] # (en: 'is', DeepL translation) + - t: "supérieur ou inférieur à" # (en: 'greater than or less than') - "≸": # 0x2278 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "ni plus petit ni plus grand que" # (en: 'neither less than nor greater than') + then: [T: "n'est"] # (en: 'is', DeepL translation) + - t: "ni inférieur ni supérieur à" # (en: 'neither less than nor greater than') - "≹": # 0x2279 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "ni plus grand ni plus petit que" # (en: 'neither greater than nor less than') - - "≺": [t: "précède"] # 0x227a (en: 'precedes') - - "≻": [t: "suit"] # 0x227b (en: 'succeeds') - - "≼": [t: "précède ou est égal à"] # 0x227c (en: 'precedes or is equal to') - - "≽": [t: "suit ou est égal à"] # 0x227d (en: 'succeeds or is equal to') - - "≾": [t: "précède ou est équivalent à"] # 0x227e (en: 'precedes or is equivalent to') - - "≿": [t: "suit ou est équivalent à"] # 0x227f (en: 'succeeds or is equivalent to') - - "⊀": [t: "ne précède pas"] # 0x2280 (en: 'does not precede') - - "⊁": [t: "ne suit pas"] # 0x2281 (en: 'does not succeed') + then: [T: "n'est"] # (en: 'is', DeepL translation) + - t: "ni supérieur ni inférieur à" # (en: 'neither greater than nor less than') + - "≺": [T: "précède"] # 0x227a (en: 'precedes') + - "≻": [T: "suit"] # 0x227b (en: 'succeeds') + - "≼": [T: "précède ou est égal à"] # 0x227c (en: 'precedes or is equal to') + - "≽": [T: "suit ou est égal à"] # 0x227d (en: 'succeeds or is equal to') + - "≾": [T: "précède ou est équivalent à"] # 0x227e (en: 'precedes or is equivalent to') + - "≿": [T: "suit ou est équivalent à"] # 0x227f (en: 'succeeds or is equivalent to') + - "⊀": [T: "ne précède pas"] # 0x2280 (en: 'does not precede') + - "⊁": [T: "ne suit pas"] # 0x2281 (en: 'does not succeed') - "⊂": # 0x2282 - test: if: "$Verbosity!='Terse'" - then: [t: "est un"] # (en: 'is a', DeepL translation) + then: [T: "est un"] # (en: 'is a', DeepL translation) - t: "sous-ensemble de" # (en: 'subset of', SRE: 'sous ensemble de') - "⊃": # 0x2283 - test: if: "$Verbosity!='Terse'" - then: [t: "est un"] # (en: 'is a', DeepL translation) + then: [T: "est un"] # (en: 'is a', DeepL translation) - t: "sur-ensemble de" # (en: 'superset of', SRE: 'sur ensemble de') - "⊄": # 0x2284 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "n'est"] # (en: 'is', DeepL translation) - t: "pas un sous-ensemble de" # (en: 'not a subset of', SRE: 'pas un sous ensemble de') - "⊅": # 0x2285 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "n'est"] # (en: 'is', DeepL translation) - t: "pas un sur-ensemble de" # (en: 'not a superset of', SRE: 'pas un sur ensemble de') - "⊆": # 0x2286 - test: if: "$Verbosity!='Terse'" - then: [t: "est un"] # (en: 'is a', DeepL translation) - - t: "sous ensemble ou égal à" # (en: 'subset of or equal to', MathPlayer: 'sous-ensemble ou égal à', DeepL: 'sous-ensemble de ou égal à') + then: [T: "est un"] # (en: 'is a', DeepL translation) + - t: "sous ensemble de ou égal à" # (en: 'subset of or equal to', MathPlayer: 'sous-ensemble ou égal à', DeepL: 'sous-ensemble de ou égal à') - "⊇": # 0x2287 - test: if: "$Verbosity!='Terse'" - then: [t: "est un"] # (en: 'is a', DeepL translation) - - t: "sur ensemble ou égal à" # (en: 'superset of or equal to', MathPlayer: 'sur-ensemble ou égal à', DeepL: 'superposé ou égal à') + then: [T: "est un"] # (en: 'is a', DeepL translation) + - t: "sur ensemble de ou égal à" # (en: 'superset of or equal to', MathPlayer: 'sur-ensemble ou égal à', DeepL: 'superposé ou égal à') - "⊈": # 0x2288 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "ni un sous ensemble ni égal à" # (en: 'neither a subset of nor equal to', MathPlayer: 'ni un sous-ensemble ni égal à', DeepL: 'ni un sous-ensemble de ni égal à') + then: [T: "n'est"] # (en: 'is', DeepL translation) + - t: "ni un sous ensemble de ni égal à" # (en: 'neither a subset of nor equal to', MathPlayer: 'ni un sous-ensemble ni égal à', DeepL: 'ni un sous-ensemble de ni égal à') - "⊉": # 0x2289 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "ni un sur ensemble ni égal à" # (en: 'neither a superset of nor equal to', MathPlayer: 'ni un sur-ensemble ni égal à', DeepL: 'ni un surensemble de, ni égal à') - - "⊊": [t: "sous ensemble mais pas égal à"] # 0x228a (en: 'subset of with not equal to', MathPlayer: 'sous-ensemble mais pas égal à', DeepL: 'sous-ensemble de avec non égal à') - - "⊋": [t: "sur ensemble mais pas égal à"] # 0x228b (en: 'superset of with not equal to', MathPlayer: 'sur-ensemble mais pas égal à', DeepL: 'superposition de avec non égal à') - - "⊌": [t: "multiensemble"] # 0x228c (en: 'multiset') - - "⊍": [t: "multiplication de multiensemble"] # 0x228d (en: 'multiset multiplication') - - "⊎": [t: "union de multiensemble"] # 0x228e (en: 'multiset union') - - "⊏": [t: "image carrée de"] # 0x228f (en: 'square image of') - - "⊐": [t: "original carré de"] # 0x2290 (en: 'square original of') - - "⊑": [t: "image carrée ou égal à"] # 0x2291 (en: 'square image of or equal to') - - "⊒": [t: "original carré ou égal à"] # 0x2292 (en: 'square original of or equal to') - - "⊓": [t: "chapeau carré"] # 0x2293 (en: 'square cap') - - "⊔": [t: "coupe carrée"] # 0x2294 (en: 'square cup') - - "⊕": [t: "plus cerclé"] # 0x2295 (en: 'circled plus') - - "⊖": [t: "moins cerclé"] # 0x2296 (en: 'circled minus') - - "⊗": [t: "multiplié par cerclé"] # 0x2297 (en: 'circled times') - - "⊘": [t: "barre oblique de division cerclée"] # 0x2298 (en: 'circled slash') - - "⊙": [t: "opérateur point cerclé"] # 0x2299 (en: 'circled dot operator') - - "⊚": [t: "opérateur rond cerclé"] # 0x229a (en: 'circled ring') - - "⊛": [t: "opérateur astérisque cerclé"] # 0x229b (en: 'circled asterisk') - - "⊜": [t: "égal cerclé"] # 0x229c (en: 'circled equals') - - "⊝": [t: "tiret cerclé"] # 0x229d (en: 'circled dash') - - "⊞": [t: "plus encadré"] # 0x229e (en: 'squared plus') - - "⊟": [t: "moins encadré"] # 0x229f (en: 'squared minus') - - "⊠": [t: "multiplié par encadré"] # 0x22a0 (en: 'squared times') - - "⊡": [t: "opérateur point encadré"] # 0x22a1 (en: 'squared dot operator') - - "⊢": [t: "taquet droit"] # 0x22a2 (en: 'proves') - - "⊣": [t: "taquet gauche"] # 0x22a3 (en: 'does not yield') - - "⊤": [t: "taquet vers le bas"] # 0x22a4 (en: 'top') + then: [T: "n'est"] # (en: 'is', DeepL translation) + - t: "ni un sur ensemble de ni égal à" # (en: 'neither a superset of nor equal to', MathPlayer: 'ni un sur-ensemble ni égal à', DeepL: 'ni un surensemble de, ni égal à') + - "⊊": [T: "sous ensemble de mais pas égal à"] # 0x228a (en: 'subset of with not equal to', MathPlayer: 'sous-ensemble mais pas égal à', DeepL: 'sous-ensemble de avec non égal à') + - "⊋": [T: "sur ensemble de mais pas égal à"] # 0x228b (en: 'superset of with not equal to', MathPlayer: 'sur-ensemble mais pas égal à', DeepL: 'superposition de avec non égal à') + - "⊌": [T: "multiensemble"] # 0x228c (en: 'multiset') + - "⊍": [T: "multiplication de multiensemble"] # 0x228d (en: 'multiset multiplication') + - "⊎": [T: "union de multiensemble"] # 0x228e (en: 'multiset union') + - "⊏": [T: "image carrée de"] # 0x228f (en: 'square image of') + - "⊐": [T: "original carré de"] # 0x2290 (en: 'square original of') + - "⊑": [T: "image carrée de ou égal à"] # 0x2291 (en: 'square image of or equal to') + - "⊒": [T: "original carré de ou égal à"] # 0x2292 (en: 'square original of or equal to') + - "⊓": [T: "chapeau carré"] # 0x2293 (en: 'square cap') + - "⊔": [T: "coupe carrée"] # 0x2294 (en: 'square cup') + - "⊕": [T: "plus cerclé"] # 0x2295 (en: 'circled plus') + - "⊖": [T: "moins cerclé"] # 0x2296 (en: 'circled minus') + - "⊗": [T: "multiplié par cerclé"] # 0x2297 (en: 'circled times') + - "⊘": [T: "barre oblique de division cerclée"] # 0x2298 (en: 'circled slash') + - "⊙": [T: "opérateur point cerclé"] # 0x2299 (en: 'circled dot operator') + - "⊚": [T: "opérateur rond cerclé"] # 0x229a (en: 'circled ring') + - "⊛": [T: "opérateur astérisque cerclé"] # 0x229b (en: 'circled asterisk') + - "⊜": [T: "égal cerclé"] # 0x229c (en: 'circled equals') + - "⊝": [T: "tiret cerclé"] # 0x229d (en: 'circled dash') + - "⊞": [T: "plus encadré"] # 0x229e (en: 'squared plus') + - "⊟": [T: "moins encadré"] # 0x229f (en: 'squared minus') + - "⊠": [T: "multiplié par encadré"] # 0x22a0 (en: 'squared times') + - "⊡": [T: "opérateur point encadré"] # 0x22a1 (en: 'squared dot operator') + - "⊢": [T: "taquet droit"] # 0x22a2 (en: 'proves') + - "⊣": [T: "taquet gauche"] # 0x22a3 (en: 'does not yield') + - "⊤": [T: "taquet vers le bas"] # 0x22a4 (en: 'top') - "⊥": # 0x22a5 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "taquet vers le haut" # (en: 'bottom') - - "⊦": [t: "assertion"] # 0x22a6 (en: 'reduces to') - - "⊧": [t: "modélise"] # 0x22a7 (en: 'models') + - "⊦": [T: "assertion"] # 0x22a6 (en: 'reduces to') + - "⊧": [T: "modélise"] # 0x22a7 (en: 'models') - "⊨": # 0x22a8 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "vrai" # (en: 'true') - - "⊩": [t: "oblige"] # 0x22a9 (en: 'forces') - - "⊪": [t: "barre verticale triple avec tourniquet à droite"] # 0x22aa (en: 'triple vertical bar right turnstile') - - "⊫": [t: "barre verticale double avec tourniquet à droite double"] # 0x22ab (en: 'double vertical bar double right turnstile') - - "⊬": [t: "ne prouve pas"] # 0x22ac (en: 'does not prove') + - "⊩": [T: "oblige"] # 0x22a9 (en: 'forces') + - "⊪": [T: "barre verticale triple avec tourniquet à droite"] # 0x22aa (en: 'triple vertical bar right turnstile') + - "⊫": [T: "barre verticale double avec tourniquet à droite double"] # 0x22ab (en: 'double vertical bar double right turnstile') + - "⊬": [T: "ne prouve pas"] # 0x22ac (en: 'does not prove') - "⊭": # 0x22ad - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "n'est"] # (en: 'is', DeepL translation) - t: "pas vrai" # (en: 'not true') - - "⊮": [t: "n'oblige pas"] # 0x22ae (en: 'does not force') - - "⊯": [t: "non barre verticale double avec tourniquet à droite double"] # 0x22af (en: 'negated double vertical bar double right turnstile', MathPlayer: 'non-barre verticale double avec tourniquet à droite double', DeepL: 'négation double barre verticale double tourniquet droit') - - "⊰": [t: "précède sous relation"] # 0x22b0 (en: 'precedes under relation') - - "⊱": [t: "suit sous relation"] # 0x22b1 (en: 'succeeds under relation') + - "⊮": [T: "n'oblige pas"] # 0x22ae (en: 'does not force') + - "⊯": [T: "non barre verticale double avec tourniquet à droite double"] # 0x22af (en: 'negated double vertical bar double right turnstile', MathPlayer: 'non-barre verticale double avec tourniquet à droite double', DeepL: 'négation double barre verticale double tourniquet droit') + - "⊰": [T: "précède sous relation"] # 0x22b0 (en: 'precedes under relation') + - "⊱": [T: "suit sous relation"] # 0x22b1 (en: 'succeeds under relation') - "⊲": # 0x22b2 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "sous groupe normal de" # (en: 'a normal subgroup of', MathPlayer: 'sous-groupe normal de', DeepL: 'un sous-groupe normal de') - - "⊳": [t: "contient comme sous groupe normal"] # 0x22b3 (en: 'contains as a normal subgroup', MathPlayer: 'contient comme sous-groupe normal', DeepL: 'contient un sous-groupe normal') + - "⊳": [T: "contient comme sous groupe normal"] # 0x22b3 (en: 'contains as a normal subgroup', MathPlayer: 'contient comme sous-groupe normal', DeepL: 'contient un sous-groupe normal') - "⊴": # 0x22b4 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "sous groupe normal ou égal à" # (en: 'a normal subgroup of or equal to', MathPlayer: 'sous-groupe normal ou égal à', DeepL: 'un sous-groupe normal de ou égal à') - - "⊵": [t: "contient comme sous-groupe normal ou égal à"] # 0x22b5 (en: 'contains as a normal subgroup or equal to', SRE: 'contient comme sous groupe normal ou égal à') + then: [T: "est"] # (en: 'is', DeepL translation) + - t: "sous groupe normal de ou égal à" # (en: 'a normal subgroup of or equal to', MathPlayer: 'sous-groupe normal ou égal à', DeepL: 'un sous-groupe normal de ou égal à') + - "⊵": [T: "contient comme sous-groupe normal de ou égal à"] # 0x22b5 (en: 'contains as a normal subgroup or equal to', SRE: 'contient comme sous groupe normal ou égal à') - "⊶": # 0x22b6 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "original de" # (en: 'the original of') - "⊷": # 0x22b7 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "image de" # (en: 'an image of') - - "⊸": [t: "multijection"] # 0x22b8 (en: 'multimap') - - "⊹": [t: "matrice hermitienne conjuguée"] # 0x22b9 (en: 'hermitian conjugate matrix') - - "⊺": [t: "intercale"] # 0x22ba (en: 'intercalate') - - "⊻": [t: "ou exclusif"] # 0x22bb (en: 'xor') - - "⊼": [t: "non et"] # 0x22bc (en: 'nand') - - "⊽": [t: "non ou"] # 0x22bd (en: 'nor') - - "⊾": [t: "angle droit avec arc"] # 0x22be (en: 'right angle with arc') - - "⊿": [t: "triangle rectangle"] # 0x22bf (en: 'right triangle') + - "⊸": [T: "multijection"] # 0x22b8 (en: 'multimap') + - "⊹": [T: "matrice hermitienne conjuguée"] # 0x22b9 (en: 'hermitian conjugate matrix') + - "⊺": [T: "intercale"] # 0x22ba (en: 'intercalate') + - "⊻": [T: "ou exclusif"] # 0x22bb (en: 'xor') + - "⊼": [T: "non et"] # 0x22bc (en: 'nand') + - "⊽": [T: "non ou"] # 0x22bd (en: 'nor') + - "⊾": [T: "angle droit avec arc"] # 0x22be (en: 'right angle with arc') + - "⊿": [T: "triangle rectangle"] # 0x22bf (en: 'right triangle') - "⋀": [T: "et logique"] # 0x22c0 (en: 'logical and') - "⋁": [T: "ou logique"] # 0x22c1 (en: 'logical or') - "⋂": [T: "\uF8FEintersection"] # 0x22c2 (en: 'intersection') - "⋃": [T: "\uF8FEunion"] # 0x22c3 (en: 'union') - - "⋄": [t: "opérateur losange"] # 0x22c4 (en: 'diamond operator') + - "⋄": [T: "opérateur losange"] # 0x22c4 (en: 'diamond operator') - "⋅": # 0x22c5 - test: if: "@data-chem-formula-op" - then: [t: "point"] # (en: 'dot', DeepL translation) + then: [T: "point"] # (en: 'dot', DeepL translation) else: [T: "fois"] # (en: 'times') - - "⋆": [t: "opérateur étoile"] # 0x22c6 (en: 'times') - - "⋇": [t: "divisé multiplié"] # 0x22c7 (en: 'division times') - - "⋈": [t: "nœud papillon"] # 0x22c8 (en: 'bowtie') + - "⋆": [T: "opérateur étoile"] # 0x22c6 (en: 'times') + - "⋇": [T: "divisé multiplié"] # 0x22c7 (en: 'division times') + - "⋈": [T: "nœud papillon"] # 0x22c8 (en: 'bowtie') - "⋉": # 0x22c9 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "produit semi direct à gauche de facteur normal" # (en: 'the left normal factor semidirect product of', MathPlayer: 'produit semi-direct à gauche de facteur normal', DeepL: 'le facteur normal gauche produit semi-direct de') - "⋊": # 0x22ca - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "produit semi direct à droite de facteur normal" # (en: 'the right normal factor semidirect product of', MathPlayer: 'produit semi-direct à droite de facteur normal', DeepL: 'le facteur normal droit produit semi-direct de') - "⋋": # 0x22cb - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "produit semi direct à gauche" # (en: 'the left semidirect product of', MathPlayer: 'produit semi-direct à gauche', DeepL: 'le produit semi-direct gauche de') - "⋌": # 0x22cc - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "produit semi direct à droite" # (en: 'the right semidirect product of', MathPlayer: 'produit semi-direct à droite', DeepL: 'le produit semi-direct droit de') - - "⋍": [t: "moins tilde renversé"] # 0x22cd (en: 'reversed tilde equals') - - "⋎": [t: "ou logique recourbé"] # 0x22ce (en: 'curly logical or') - - "⋏": [t: "et logique recourbé"] # 0x22cf (en: 'curly logical and') + - "⋍": [T: "égal tilde renversé"] # 0x22cd (en: 'reversed tilde equals') + - "⋎": [T: "ou logique recourbé"] # 0x22ce (en: 'curly logical or') + - "⋏": [T: "et logique recourbé"] # 0x22cf (en: 'curly logical and') - "⋐": # 0x22d0 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "sous ensemble double" # (en: 'a double subset of', MathPlayer: 'sous-ensemble double', DeepL: 'un double sous-ensemble de') - "⋑": # 0x22d1 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "sur ensemble double" # (en: 'a double superset of', MathPlayer: 'sur-ensemble double', DeepL: 'un double superset de') - "⋒": # 0x22d2 - test: if: "$Verbosity!='Terse'" - then: [t: "le"] # (en: 'the', DeepL translation) + then: [T: "le"] # (en: 'the', DeepL translation) - t: "intersection double" # (en: 'double intersection of') - "⋓": # 0x22d3 - test: if: "$Verbosity!='Terse'" - then: [t: "le"] # (en: 'the', DeepL translation) + then: [T: "le"] # (en: 'the', DeepL translation) - t: "union double" # (en: 'double union of') - "⋔": # 0x22d4 - test: if: "$Verbosity!='Terse'" - then: [t: "le"] # (en: 'the', DeepL translation) + then: [T: "la"] # (en: 'the', DeepL translation) - t: "fourche" # (en: 'proper intersection of') - "⋕": # 0x22d5 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "égal et parallèle à" # (en: 'equal to and parallel to') - - "⋖": [t: "plus petit que pointé"] # 0x22d6 (en: 'less than with dot') - - "⋗": [t: "plus grand que pointé"] # 0x22d7 (en: 'greater than with dot') + - "⋖": [T: "inférieur à avec point"] # 0x22d6 (en: 'less than with dot') + - "⋗": [T: "supérieur à avec point"] # 0x22d7 (en: 'greater than with dot') - "⋘": # 0x22d8 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "considérablement plus petit que" # (en: 'very much less than') + then: [T: "est"] # (en: 'is', DeepL translation) + - t: "considérablement inférieur à" # (en: 'very much less than') - "⋙": # 0x22d9 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "considérablement plus grand que" # (en: 'very much greater than') + then: [T: "est"] # (en: 'is', DeepL translation) + - t: "considérablement supérieur à" # (en: 'very much greater than') - "⋚": # 0x22da - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "plus petit ou égal ou plus grand que" # (en: 'less than equal to or greater than') + then: [T: "est"] # (en: 'is', DeepL translation) + - t: "inférieur ou égal ou supérieur à" # (en: 'less than equal to or greater than') - "⋛": # 0x22db - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "plus grand ou égal ou plus petit que" # (en: 'greater than equal to or less than') + then: [T: "est"] # (en: 'is', DeepL translation) + - t: "supérieur ou égal ou inférieur à" # (en: 'greater than equal to or less than') - "⋜": # 0x22dc - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "égal ou plus petit que" # (en: 'equal to or less than') + then: [T: "est"] # (en: 'is', DeepL translation) + - t: "égal ou inférieur à" # (en: 'equal to or less than') - "⋝": # 0x22dd - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "égal à deux lignes ou supérieur à" # (en: 'equal to or greater than') + then: [T: "est"] # (en: 'is', DeepL translation) + - t: "égal ou supérieur à" # (en: 'equal to or greater than') - "⋞": # 0x22de - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "égal ou précède" # (en: 'equal to or precedes') - "⋟": # 0x22df - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "est"] # (en: 'is', DeepL translation) - t: "égal ou suit" # (en: 'equal to or succeeds') - - "⋠": [t: "ni précédant ni égal à"] # 0x22e0 (en: 'does not precede nor is equal to') - - "⋡": [t: "ni suivant ni égal à"] # 0x22e1 (en: 'does not succeed nor is equal to') - - "⋢": [t: "ni image carrée ni égal à"] # 0x22e2 (en: 'not square image of or equal to') - - "⋣": [t: "ni original carré ni égal à"] # 0x22e3 (en: 'not square original of or equal to') - - "⋤": [t: "image carré ou différent de"] # 0x22e4 (en: 'square image of or not equal to') - - "⋥": [t: "original carré ou différent de"] # 0x22e5 (en: 'square original of or not equal to') + - "⋠": [T: "ni précédant ni égal à"] # 0x22e0 (en: 'does not precede nor is equal to') + - "⋡": [T: "ni suivant ni égal à"] # 0x22e1 (en: 'does not succeed nor is equal to') + - "⋢": [T: "ni image carrée de ni égal à"] # 0x22e2 (en: 'not square image of or equal to') + - "⋣": [T: "ni original carré de ni égal à"] # 0x22e3 (en: 'not square original of or equal to') + - "⋤": [T: "image carré ou différent de"] # 0x22e4 (en: 'square image of or not equal to') + - "⋥": [T: "original carré ou différent de"] # 0x22e5 (en: 'square original of or not equal to') - "⋦": # 0x22e6 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "plus petit mais non équivalent à" # (en: 'less than but not equivalent to') + then: [T: "est"] # (en: 'is', DeepL translation) + - t: "inférieur mais non équivalent à" # (en: 'less than but not equivalent to') - "⋧": # 0x22e7 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "plus grand mais non équivalent à" # (en: 'greater than but not equivalent to') - - "⋨": [t: "précédant mais non équivalent à"] # 0x22e8 (en: 'precedes but is not equivalent to') - - "⋩": [t: "suivant mais non équivalent à"] # 0x22e9 (en: 'succeeds but is not equivalent to') + then: [T: "est"] # (en: 'is', DeepL translation) + - t: "supérieur mais non équivalent à" # (en: 'greater than but not equivalent to') + - "⋨": [T: "précédant mais non équivalent à"] # 0x22e8 (en: 'precedes but is not equivalent to') + - "⋩": [T: "suivant mais non équivalent à"] # 0x22e9 (en: 'succeeds but is not equivalent to') - "⋪": # 0x22ea - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) + then: [T: "n'est"] # (en: 'is', DeepL translation) - t: "pas un sous groupe normal de" # (en: 'not a normal subgroup of', MathPlayer: 'pas un sous-groupe normal de', DeepL: 'n'est pas un sous-groupe normal de') - - "⋫": [t: "ne contient pas comme sous groupe normal"] # 0x22eb (en: 'does not contain as a normal subgroup', MathPlayer: 'ne contient pas comme sous-groupe normal', DeepL: 'ne contient pas de sous-groupe normal') + - "⋫": [T: "ne contient pas comme sous groupe normal"] # 0x22eb (en: 'does not contain as a normal subgroup', MathPlayer: 'ne contient pas comme sous-groupe normal', DeepL: 'ne contient pas de sous-groupe normal') - "⋬": # 0x22ec - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "ni sous groupe normal ni égal à" # (en: 'not a normal subgroup of nor is equal to', MathPlayer: 'ni sous-groupe normal ni égal à', DeepL: 'n'est pas un sous-groupe normal de ni est égal à') - - "⋭": [t: "ni égal ni contenant comme sous groupe normal"] # 0x22ed (en: 'does not contain as a normal subgroup nor is equal to', MathPlayer: 'ni égal ni contenant comme sous- groupe normal', DeepL: 'ne contient pas de sous-groupe normal et n'est pas égal à') - - "⋮": [t: "trois points suspendus"] # 0x22ee (en: 'vertical ellipsis') - - "⋯": [t: "trois points médians"] # 0x22ef (en: 'dot dot dot') - - "⋰": [t: "trois points diagonaux vers le coin haut à droite"] # 0x22f0 (en: 'upwards diagonal ellipsis') - - "⋱": [t: "trois points diagonaux vers le coin bas à droite"] # 0x22f1 (en: 'diagonal ellipsis') - - "⋲": [t: "appartient à avec long trait horizontal"] # 0x22f2 (en: 'element of with long horizontal stroke') - - "⋳": [t: "appartient à avec barre verticale au bout du trait horizontal"] # 0x22f3 (en: 'element of with vertical bar at end of horizontal stroke') - - "⋴": [t: "petit appartient à avec barre verticale au bout du trait horizontal"] # 0x22f4 (en: 'element of with vertical bar at end of horizontal stroke') - - "⋵": [t: "appartient à avec point en chef"] # 0x22f5 (en: 'element of with dot above') - - "⋶": [t: "appartient à avec trait en chef"] # 0x22f6 (en: 'element of with overbar') - - "⋷": [t: "petit appartient à avec trait en chef"] # 0x22f7 (en: 'element of with overbar') - - "⋸": [t: "appartient à avec trait souscrit"] # 0x22f8 (en: 'element of with underbar') - - "⋹": [t: "appartient à avec deux traits horizontaux"] # 0x22f9 (en: 'element of with two horizontal strokes') - - "⋺": [t: "contient avec long trait horizontal"] # 0x22fa (en: 'contains with long horizontal stroke') - - "⋻": [t: "contient avec barre verticale au bout du trait horizontal"] # 0x22fb (en: 'contains with vertical bar at end of horizontal stroke') - - "⋼": [t: "petit contient avec barre verticale au bout du trait horizontal"] # 0x22fc (en: 'contains with vertical bar at end of horizontal stroke') - - "⋽": [t: "contient avec trait en chef"] # 0x22fd (en: 'contains with overbar') - - "⋾": [t: "petit contient avec trait en chef"] # 0x22fe (en: 'contains with overbar') - - "⋿": [t: "appartient à un sac en notation z"] # 0x22ff (en: 'z notation bag membership') - - "⌀": [t: "diamètre"] # 0x2300 (en: 'diameter') - - "⌁": [t: "flèche électrique"] # 0x2301 (en: 'electric arrow') - - "⌂": [t: "maison"] # 0x2302 (en: 'house') - - "⌃": [t: "pointe de flèche vers le haut"] # 0x2303 (en: 'up arrowhead', DeepL: 'flèche vers le haut') - - "⌄": [t: "pointe de flèche vers le bas"] # 0x2304 (en: 'down arrowhead', DeepL: 'flèche vers le bas') - - "⌅": [t: "projective"] # 0x2305 - - "⌆": [t: "perspective"] # 0x2306 - - "⌇": [t: "ligne ondulée"] # 0x2307 (en: 'wavy line') - - "⌈": [t: "plafond à gauche"] # 0x2308 (en: 'left ceiling') - - "⌉": [t: "plafond à droite"] # 0x2309 (en: 'right ceiling') - - "⌊": [t: "plancher à gauche"] # 0x230a (en: 'left floor') - - "⌋": [t: "plancher à droite"] # 0x230b (en: 'right floor') - - "⌌": [t: "repère sud est"] # 0x230c (en: 'bottom right crop', MathPlayer: 'repère sud-est', DeepL: 'coupe en bas à droite') - - "⌍": [t: "repère sud ouest"] # 0x230d (en: 'bottom left crop', MathPlayer: 'repère sud-ouest', DeepL: 'coupe en bas à gauche') - - "⌎": [t: "repère nord est"] # 0x230e (en: 'top right crop', MathPlayer: 'repère nord-est', DeepL: 'coupe en haut à droite') - - "⌏": [t: "repère nord ouest"] # 0x230f (en: 'top left crop', MathPlayer: 'repère nord-ouest', DeepL: 'coupe en haut à gauche') - - "⌐": [t: "négation réfléchi"] # 0x2310 (en: 'reversed not sign', MathPlayer: 'signe négation réfléchi', DeepL: 'signe "non" inversé') - - "⌑": [t: "pastille carrée"] # 0x2311 (en: 'square lozenge', DeepL: 'losange carré') - - "⌒": [t: "arc"] # 0x2312 - - "⌓": [t: "segment"] # 0x2313 - - "⌔": [t: "secteur"] # 0x2314 (en: 'sector') - - "⌕": [t: "enregistreur téléphonique"] # 0x2315 (en: 'telephone recorder') - - "⌖": [t: "repère de calage"] # 0x2316 (en: 'position indicator crosshairs', DeepL: 'indicateur de position réticule') - - "⌗": [t: "viewdata square"] # 0x2317 (DeepL translation) - - "⌘": [t: "symbole de point d'intérêt"] # 0x2318 (en: 'place of interest sign', DeepL: 'signe de centre d'intérêt') - - "⌙": [t: "tourne pas signe"] # 0x2319 (en: 'turned not sign', DeepL translation) - - "⌚": [t: "montre"] # 0x231a (en: 'watch') - - "⌛": [t: "sablier"] # 0x231b (en: 'hourglass', DeepL translation) - - "⌜": [t: "coin nord ouest"] # 0x231c (en: 'top left corner', MathPlayer: 'coin nord-ouest', DeepL: 'coin supérieur gauche') - - "⌝": [t: "coin nord est"] # 0x231d (en: 'top right corner', MathPlayer: 'coin nord-est', DeepL: 'coin supérieur droit') - - "⌞": [t: "coin sud ouest"] # 0x231e (en: 'bottom left corner', MathPlayer: 'coin sud-ouest', DeepL: 'coin inférieur gauche') - - "⌟": [t: "coin sud est"] # 0x231f (en: 'bottom right corner', MathPlayer: 'coin sud-est', DeepL: 'coin inférieur droit') - - "⌠": [t: "moitié supérieure d'intégrale"] # 0x2320 (en: 'top half integral') - - "⌡": [t: "moitié inférieure d'intégrale"] # 0x2321 (en: 'bottom half integral') - - "⌢": [t: "moue"] # 0x2322 (en: 'frown', DeepL: 'froncement de sourcils') - - "⌣": [t: "sourire"] # 0x2323 (en: 'smile') - - "⌤": [t: "pointe de flèche vers le haut entre deux traits horizontaux"] # 0x2324 (en: 'up arrowhead between two horizontal bars', DeepL: 'flèche vers le haut entre deux barres horizontales') - - "⌥": [t: "clé d'option"] # 0x2325 (en: 'option key', DeepL translation) - - "⌦": [t: "effacer à droite"] # 0x2326 (en: 'erase to the right', DeepL translation) - - "⌧": [t: "x dans un rectangle"] # 0x2327 (en: 'x in a rectangle box', DeepL translation) - - "⌨": [t: "clavier"] # 0x2328 (en: 'keyboard', DeepL translation) - - "〈": [t: "chevron gauche"] # 0x2329 (en: 'left pointing angle bracket', MathPlayer: 'chevron vers la gauche', DeepL: 'équerre pointant vers la gauche') - - "〉": [t: "chevron droite"] # 0x232a (en: 'right pointing angle bracket', MathPlayer: 'chevron vers la droite', DeepL: 'équerre droite') - - "⌫": [t: "effacer vers la gauche"] # 0x232b (en: 'erase to the left', DeepL translation) - - "⌬": [t: "anneau de benzène"] # 0x232c (en: 'benzene ring', DeepL translation) - - "⌭": [t: "cylindricité"] # 0x232d (en: 'cylindricity') - - "⌮": [t: "profil hors-tout"] # 0x232e (en: 'all around profile', DeepL: 'profil tout autour') - - "⌯": [t: "symétrie"] # 0x232f (en: 'symmetry', DeepL translation) - - "⌰": [t: "dépassement total"] # 0x2330 (en: 'total runout', DeepL translation) - - "⌱": [t: "dimension origine"] # 0x2331 (en: 'dimension origin', DeepL translation) - - "⌲": [t: "conique"] # 0x2332 (en: 'conical taper', DeepL translation) - - "⌳": [t: "pente"] # 0x2333 (en: 'slope', DeepL translation) - - "⌴": [t: "alésage"] # 0x2334 (en: 'counterbore', DeepL translation) - - "⌵": [t: "fraise"] # 0x2335 (en: 'countersink', DeepL translation) - - "⌶": [t: "symbole de fonction apl rail"] # 0x2336 (en: 'apl i beam', DeepL: 'apl i beam') - - "⌽": [t: "symbole de fonction apl fuseau"] # 0x233d (en: 'apl circle stile', DeepL: 'cercle apl stile') - - "⌿": [t: "symbole de fonction apl cotice barré"] # 0x233f (en: 'apl slash bar', DeepL: 'barre oblique apl') - - "⍰": [t: "symbole de fonction apl quadrat info"] # 0x2370 (en: 'unknown box', DeepL: 'case inconnue') - - "⍼": [t: "angle droit avec flèche en zigzag vers le bas"] # 0x237c (en: 'right angle with downwards zigzag arrow') - - "⎔": [t: "hexagone"] # 0x2394 (en: 'hexagon', DeepL translation) - - "⎕": [t: "boîte"] # 0x2395 (en: 'box', DeepL translation) - - "⎶": [t: "crochet verticaux en défilé"] # 0x23b6 (en: 'bottom square bracket over top square bracket', DeepL: 'équerre inférieure sur équerre supérieure') - - "⏜": [t: "parenthèse supérieure"] # 0x23dc (en: 'top paren') - - "⏝": [t: "parenthèse inférieure"] # 0x23dd (en: 'bottom paren') - - "⏞": [t: "accolade supérieure"] # 0x23de (en: 'top brace') - - "⏟": [t: "accolade inférieure"] # 0x23df (en: 'bottom brace') - - "⏠": [t: "crochet en écaille supérieur"] # 0x23e0 (en: 'top tortoise shell bracket') - - "⏡": [t: "crochet en écaille inférieur"] # 0x23e1 (en: 'bottom tortoise shell bracket') - - "⏢": [t: "trapèze blanc"] # 0x23e2 (en: 'white trapezium', DeepL translation) - - "⏣": [t: "benzène droit avec cercle"] # 0x23e3 (en: 'benzene right with circle', DeepL translation) - - "⏤": [t: "rectitude"] # 0x23e4 (en: 'straightness', DeepL translation) - - "⏥": [t: "planéité"] # 0x23e5 (en: 'flatness', DeepL translation) + then: [T: "n'est"] # (en: 'is', DeepL translation) + - t: "ni sous groupe normal de ni égal à" # (en: 'not a normal subgroup of nor is equal to', MathPlayer: 'ni sous-groupe normal ni égal à', DeepL: 'n'est pas un sous-groupe normal de ni est égal à') + - "⋭": [T: "ni égal ni contenant comme sous groupe normal"] # 0x22ed (en: 'does not contain as a normal subgroup nor is equal to', MathPlayer: 'ni égal ni contenant comme sous- groupe normal', DeepL: 'ne contient pas de sous-groupe normal et n'est pas égal à') + - "⋮": [T: "trois points suspendus"] # 0x22ee (en: 'vertical ellipsis') + - "⋯": [T: "trois points médians"] # 0x22ef (en: 'dot dot dot') + - "⋰": [T: "trois points diagonaux vers le coin haut à droite"] # 0x22f0 (en: 'upwards diagonal ellipsis') + - "⋱": [T: "trois points diagonaux vers le coin bas à droite"] # 0x22f1 (en: 'diagonal ellipsis') + - "⋲": [T: "appartient à avec long trait horizontal"] # 0x22f2 (en: 'element of with long horizontal stroke') + - "⋳": [T: "appartient à avec barre verticale au bout du trait horizontal"] # 0x22f3 (en: 'element of with vertical bar at end of horizontal stroke') + - "⋴": [T: "petit appartient à avec barre verticale au bout du trait horizontal"] # 0x22f4 (en: 'element of with vertical bar at end of horizontal stroke') + - "⋵": [T: "appartient à avec point en chef"] # 0x22f5 (en: 'element of with dot above') + - "⋶": [T: "appartient à avec trait en chef"] # 0x22f6 (en: 'element of with overbar') + - "⋷": [T: "petit appartient à avec trait en chef"] # 0x22f7 (en: 'element of with overbar') + - "⋸": [T: "appartient à avec trait souscrit"] # 0x22f8 (en: 'element of with underbar') + - "⋹": [T: "appartient à avec deux traits horizontaux"] # 0x22f9 (en: 'element of with two horizontal strokes') + - "⋺": [T: "contient avec long trait horizontal"] # 0x22fa (en: 'contains with long horizontal stroke') + - "⋻": [T: "contient avec barre verticale au bout du trait horizontal"] # 0x22fb (en: 'contains with vertical bar at end of horizontal stroke') + - "⋼": [T: "petit contient avec barre verticale au bout du trait horizontal"] # 0x22fc (en: 'contains with vertical bar at end of horizontal stroke') + - "⋽": [T: "contient avec trait en chef"] # 0x22fd (en: 'contains with overbar') + - "⋾": [T: "petit contient avec trait en chef"] # 0x22fe (en: 'contains with overbar') + - "⋿": [T: "appartient à un sac en notation z"] # 0x22ff (en: 'z notation bag membership') + - "⌀": [T: "diamètre"] # 0x2300 (en: 'diameter') + - "⌁": [T: "flèche électrique"] # 0x2301 (en: 'electric arrow') + - "⌂": [T: "maison"] # 0x2302 (en: 'house') + - "⌃": [T: "pointe de flèche vers le haut"] # 0x2303 (en: 'up arrowhead', DeepL: 'flèche vers le haut') + - "⌄": [T: "pointe de flèche vers le bas"] # 0x2304 (en: 'down arrowhead', DeepL: 'flèche vers le bas') + - "⌅": [T: "projective"] # 0x2305 + - "⌆": [T: "perspective"] # 0x2306 + - "⌇": [T: "ligne ondulée"] # 0x2307 (en: 'wavy line') + - "⌈": [T: "plafond à gauche"] # 0x2308 (en: 'left ceiling') + - "⌉": [T: "plafond à droite"] # 0x2309 (en: 'right ceiling') + - "⌊": [T: "plancher à gauche"] # 0x230a (en: 'left floor') + - "⌋": [T: "plancher à droite"] # 0x230b (en: 'right floor') + - "⌌": [T: "repère sud est"] # 0x230c (en: 'bottom right crop', MathPlayer: 'repère sud-est', DeepL: 'coupe en bas à droite') + - "⌍": [T: "repère sud ouest"] # 0x230d (en: 'bottom left crop', MathPlayer: 'repère sud-ouest', DeepL: 'coupe en bas à gauche') + - "⌎": [T: "repère nord est"] # 0x230e (en: 'top right crop', MathPlayer: 'repère nord-est', DeepL: 'coupe en haut à droite') + - "⌏": [T: "repère nord ouest"] # 0x230f (en: 'top left crop', MathPlayer: 'repère nord-ouest', DeepL: 'coupe en haut à gauche') + - "⌐": [T: "négation réfléchi"] # 0x2310 (en: 'reversed not sign', MathPlayer: 'signe négation réfléchi', DeepL: 'signe "non" inversé') + - "⌑": [T: "pastille carrée"] # 0x2311 (en: 'square lozenge', DeepL: 'losange carré') + - "⌒": [T: "arc"] # 0x2312 + - "⌓": [T: "segment"] # 0x2313 + - "⌔": [T: "secteur"] # 0x2314 (en: 'sector') + - "⌕": [T: "enregistreur téléphonique"] # 0x2315 (en: 'telephone recorder') + - "⌖": [T: "repère de calage"] # 0x2316 (en: 'position indicator crosshairs', DeepL: 'indicateur de position réticule') + - "⌗": [T: "carré de visualisation"] # 0x2317 (DeepL translation) + - "⌘": [T: "symbole de point d'intérêt"] # 0x2318 (en: 'place of interest sign', DeepL: 'signe de centre d'intérêt') + - "⌙": [T: "signe négation culbuté"] # 0x2319 (en: 'turned not sign', DeepL translation) + - "⌚": [T: "montre"] # 0x231a (en: 'watch') + - "⌛": [T: "sablier"] # 0x231b (en: 'hourglass', DeepL translation) + - "⌜": [T: "coin nord ouest"] # 0x231c (en: 'top left corner', MathPlayer: 'coin nord-ouest', DeepL: 'coin supérieur gauche') + - "⌝": [T: "coin nord est"] # 0x231d (en: 'top right corner', MathPlayer: 'coin nord-est', DeepL: 'coin supérieur droit') + - "⌞": [T: "coin sud ouest"] # 0x231e (en: 'bottom left corner', MathPlayer: 'coin sud-ouest', DeepL: 'coin inférieur gauche') + - "⌟": [T: "coin sud est"] # 0x231f (en: 'bottom right corner', MathPlayer: 'coin sud-est', DeepL: 'coin inférieur droit') + - "⌠": [T: "moitié supérieure d'intégrale"] # 0x2320 (en: 'top half integral') + - "⌡": [T: "moitié inférieure d'intégrale"] # 0x2321 (en: 'bottom half integral') + - "⌢": [T: "moue"] # 0x2322 (en: 'frown', DeepL: 'froncement de sourcils') + - "⌣": [T: "sourire"] # 0x2323 (en: 'smile') + - "⌤": [T: "pointe de flèche vers le haut entre deux traits horizontaux"] # 0x2324 (en: 'up arrowhead between two horizontal bars', DeepL: 'flèche vers le haut entre deux barres horizontales') + - "⌥": [T: "touche option"] # 0x2325 (en: 'option key', DeepL translation) + - "⌦": [T: "effacer vers la droite"] # 0x2326 (en: 'erase to the right', DeepL translation) + - "⌧": [T: "x dans un rectangle"] # 0x2327 (en: 'x in a rectangle box', DeepL translation) + - "⌨": [T: "clavier"] # 0x2328 (en: 'keyboard', DeepL translation) + - "〈": [T: "chevron pointant à gauche"] # 0x2329 (en: 'left pointing angle bracket', MathPlayer: 'chevron vers la gauche', DeepL: 'équerre pointant vers la gauche') + - "〉": [T: "chevron pointant à droite"] # 0x232a (en: 'right pointing angle bracket', MathPlayer: 'chevron vers la droite', DeepL: 'équerre droite') + - "⌫": [T: "effacer vers la gauche"] # 0x232b (en: 'erase to the left', DeepL translation) + - "⌬": [T: "anneau de benzène"] # 0x232c (en: 'benzene ring', DeepL translation) + - "⌭": [T: "cylindricité"] # 0x232d (en: 'cylindricity') + - "⌮": [T: "profil hors-tout"] # 0x232e (en: 'all around profile', DeepL: 'profil tout autour') + - "⌯": [T: "symétrie"] # 0x232f (en: 'symmetry', DeepL translation) + - "⌰": [T: "dépassement total"] # 0x2330 (en: 'total runout', DeepL translation) + - "⌱": [T: "dimension origine"] # 0x2331 (en: 'dimension origin', DeepL translation) + - "⌲": [T: "rétrécissement conique"] # 0x2332 (en: 'conical taper', DeepL translation) + - "⌳": [T: "pente"] # 0x2333 (en: 'slope', DeepL translation) + - "⌴": [T: "alésage"] # 0x2334 (en: 'counterbore', DeepL translation) + - "⌵": [T: "fraisage"] # 0x2335 (en: 'countersink', DeepL translation) + - "⌶": [T: "symbole de fonction apl rail"] # 0x2336 (en: 'apl i beam', DeepL: 'apl i beam') + - "⌽": [T: "symbole de fonction apl fuseau"] # 0x233d (en: 'apl circle stile', DeepL: 'cercle apl stile') + - "⌿": [T: "symbole de fonction apl cotice barré"] # 0x233f (en: 'apl slash bar', DeepL: 'barre oblique apl') + - "⍰": [T: "symbole de fonction apl quadrat info"] # 0x2370 (en: 'unknown box', DeepL: 'case inconnue') + - "⍼": [T: "angle droit avec flèche en zigzag vers le bas"] # 0x237c (en: 'right angle with downwards zigzag arrow') + - "⎔": [T: "hexagone"] # 0x2394 (en: 'hexagon', DeepL translation) + - "⎕": [T: "boîte"] # 0x2395 (en: 'box', DeepL translation) + - "⎶": [T: "crocher inférieur sur crochet supérieur"] # 0x23b6 (en: 'bottom square bracket over top square bracket', DeepL: 'équerre inférieure sur équerre supérieure') + - "⏜": [T: "parenthèse supérieure"] # 0x23dc (en: 'top paren') + - "⏝": [T: "parenthèse inférieure"] # 0x23dd (en: 'bottom paren') + - "⏞": [T: "accolade supérieure"] # 0x23de (en: 'top brace') + - "⏟": [T: "accolade inférieure"] # 0x23df (en: 'bottom brace') + - "⏠": [T: "crochet en écaille supérieur"] # 0x23e0 (en: 'top tortoise shell bracket') + - "⏡": [T: "crochet en écaille inférieur"] # 0x23e1 (en: 'bottom tortoise shell bracket') + - "⏢": [T: "trapèze blanc"] # 0x23e2 (en: 'white trapezium', DeepL translation) + - "⏣": [T: "anneau de benzène avec cercle"] # 0x23e3 (en: 'benzene right with circle', DeepL translation) + - "⏤": [T: "rectitude"] # 0x23e4 (en: 'straightness', DeepL translation) + - "⏥": [T: "planéité"] # 0x23e5 (en: 'flatness', DeepL translation) - "⏦": # 0x23e6 - - spell: "ac" + - SPELL: "ac" - t: "courant" # (en: 'current', DeepL translation) - - "⏧": [t: "intersection électrique"] # 0x23e7 (en: 'electrical intersection', DeepL translation) + - "⏧": [T: "intersection électrique"] # 0x23e7 (en: 'electrical intersection', DeepL translation) - "①-⑨": # 0x2460 - 0x2469 - - spell: "translate('.', '①②③④⑤⑥⑦⑧⑨', '123456789')" + - SPELL: "translate('.', '①②③④⑤⑥⑦⑧⑨', '123456789')" - T: "encerclé" # (en: 'circled', DeepL translation) - - "⑩": [t: "encerclé dix"] # 0x2469 (en: 'circled ten', DeepL translation) - - "⑪": [t: "encerclé onze"] # 0x246a (en: 'circled eleven', DeepL translation) - - "⑫": [t: "encerclé douze"] # 0x246b (en: 'circled twelve', DeepL translation) - - "⑬": [t: "encerclé treize"] # 0x246c (en: 'circled thirteen', DeepL translation) - - "⑭": [t: "encerclé quatorze"] # 0x246d (en: 'circled fourteen', DeepL translation) - - "⑮": [t: "quinze encerclés"] # 0x246e (en: 'circled fifteen', DeepL translation) - - "⑯": [t: "encadré seize"] # 0x246f (en: 'circled sixteen', DeepL translation) - - "⑰": [t: "encerclé dix-sept"] # 0x2470 (en: 'circled seventeen', DeepL translation) - - "⑱": [t: "ateen encerclé"] # 0x2471 (en: 'circled eighteen', DeepL translation) - - "⑳": [t: "encerclé vingt"] # 0x2473 (en: 'circled twenty', DeepL translation) + - "⑩": [T: "dix encerclé"] # 0x2469 (en: 'circled ten', DeepL translation) + - "⑪": [T: "onze encerclé"] # 0x246a (en: 'circled eleven', DeepL translation) + - "⑫": [T: "douze encerclé"] # 0x246b (en: 'circled twelve', DeepL translation) + - "⑬": [T: "treize encerclé"] # 0x246c (en: 'circled thirteen', DeepL translation) + - "⑭": [T: "quatorze encerclé"] # 0x246d (en: 'circled fourteen', DeepL translation) + - "⑮": [T: "quinze encerclé"] # 0x246e (en: 'circled fifteen', DeepL translation) + - "⑯": [T: "seize encerclé"] # 0x246f (en: 'circled sixteen', DeepL translation) + - "⑰": [T: "dix-sept encerclé"] # 0x2470 (en: 'circled seventeen', DeepL translation) + - "⑱": [T: "dix-huit encerclé"] # 0x2471 (en: 'circled eighteen', DeepL translation) + - "⑳": [T: "vingt encerclé"] # 0x2473 (en: 'circled twenty', DeepL translation) - "⑴-⑼": # 0x2474 - 0x247d - - spell: "translate('.', '⑴⑵⑶⑷⑸⑹⑺⑻⑼', '123456789')" + - SPELL: "translate('.', '⑴⑵⑶⑷⑸⑹⑺⑻⑼', '123456789')" - T: "entre parenthèses" # (en: 'parenthesized', DeepL translation) - - "⑽": [t: "dix entre parenthèses"] # 0x247d (en: 'parenthesized ten', DeepL translation) - - "⑾": [t: "onze entre parenthèses"] # 0x247e (en: 'parenthesized eleven', DeepL translation) - - "⑿": [t: "parenthèse-histhésée douze"] # 0x247f (en: 'parenthesized twelve', DeepL translation) - - "⒀": [t: "entre parenthèses treize"] # 0x2480 (en: 'parenthesized thirteen', DeepL translation) - - "⒁": [t: "quatorze entre parenthèses"] # 0x2481 (en: 'parenthesized fourteen', DeepL translation) - - "⒂": [t: "parenthèse-réflexe quinze"] # 0x2482 (en: 'parenthesized fifteen', DeepL translation) - - "⒃": [t: "seize entre parenthèses"] # 0x2483 (en: 'parenthesized sixteen', DeepL translation) - - "⒄": [t: "dix-sept entre parenthèses"] # 0x2484 (en: 'parenthesized seventeen', DeepL translation) - - "⒅": [t: "point entre parenthèses"] # 0x2485 (en: 'parenthesized eighteen', DeepL translation) - - "⒆": [t: "dix-neuf entre parenthèses"] # 0x2486 (en: 'parenthesized nineteen', DeepL translation) - - "⒇": [t: "vingt entre parenthèses"] # 0x2487 (en: 'parenthesized twenty', DeepL translation) + - "⑽": [T: "dix entre parenthèses"] # 0x247d (en: 'parenthesized ten', DeepL translation) + - "⑾": [T: "onze entre parenthèses"] # 0x247e (en: 'parenthesized eleven', DeepL translation) + - "⑿": [T: "douze entre parenthèses"] # 0x247f (en: 'parenthesized twelve', DeepL translation) + - "⒀": [T: "treize entre parenthèses"] # 0x2480 (en: 'parenthesized thirteen', DeepL translation) + - "⒁": [T: "quatorze entre parenthèses"] # 0x2481 (en: 'parenthesized fourteen', DeepL translation) + - "⒂": [T: "quinze entre parenthèses"] # 0x2482 (en: 'parenthesized fifteen', DeepL translation) + - "⒃": [T: "seize entre parenthèses"] # 0x2483 (en: 'parenthesized sixteen', DeepL translation) + - "⒄": [T: "dix-sept entre parenthèses"] # 0x2484 (en: 'parenthesized seventeen', DeepL translation) + - "⒅": [T: "dix-huit entre parenthèses"] # 0x2485 (en: 'parenthesized eighteen', DeepL translation) + - "⒆": [T: "dix-neuf entre parenthèses"] # 0x2486 (en: 'parenthesized nineteen', DeepL translation) + - "⒇": [T: "vingt entre parenthèses"] # 0x2487 (en: 'parenthesized twenty', DeepL translation) - "⒈-⒐": # 0x2488 - 0x2491 - - spell: "translate('.', '⒈⒉⒊⒋⒌⒍⒎⒏⒐', '123456789')" + - SPELL: "translate('.', '⒈⒉⒊⒋⒌⒍⒎⒏⒐', '123456789')" - t: "avec point" # (en: 'with period', DeepL translation) - - "⒑": [t: "dix avec point"] # 0x2491 (en: 'ten with period', DeepL translation) - - "⒒": [t: "onze avec point"] # 0x2492 (en: 'eleven with period', DeepL translation) - - "⒓": [t: "douze avec point"] # 0x2493 (en: 'twelve with period', DeepL translation) - - "⒔": [t: "treize avec point"] # 0x2494 (en: 'thirteen with period', DeepL translation) - - "⒕": [t: "quatorze avec point"] # 0x2495 (en: 'fourteen with period', DeepL translation) - - "⒖": [t: "quinze avec point"] # 0x2496 (en: 'fifteen with period', DeepL translation) - - "⒗": [t: "seize avec point"] # 0x2497 (en: 'sixteen with period', DeepL translation) - - "⒘": [t: "dix-sept avec point"] # 0x2498 (en: 'seventeen with period', DeepL translation) - - "⒙": [t: "dix-sept avec point"] # 0x2499 (en: 'eighteen with period', DeepL translation) - - "⒚": [t: "dix-neuf avec point"] # 0x249a (en: 'nineteen with period', DeepL translation) - - "⒛": [t: "vingt avec point"] # 0x249b (en: 'twenty with period', DeepL translation) + - "⒑": [T: "dix avec point"] # 0x2491 (en: 'ten with period', DeepL translation) + - "⒒": [T: "onze avec point"] # 0x2492 (en: 'eleven with period', DeepL translation) + - "⒓": [T: "douze avec point"] # 0x2493 (en: 'twelve with period', DeepL translation) + - "⒔": [T: "treize avec point"] # 0x2494 (en: 'thirteen with period', DeepL translation) + - "⒕": [T: "quatorze avec point"] # 0x2495 (en: 'fourteen with period', DeepL translation) + - "⒖": [T: "quinze avec point"] # 0x2496 (en: 'fifteen with period', DeepL translation) + - "⒗": [T: "seize avec point"] # 0x2497 (en: 'sixteen with period', DeepL translation) + - "⒘": [T: "dix-sept avec point"] # 0x2498 (en: 'seventeen with period', DeepL translation) + - "⒙": [T: "dix-huit avec point"] # 0x2499 (en: 'eighteen with period', DeepL translation) + - "⒚": [T: "dix-neuf avec point"] # 0x249a (en: 'nineteen with period', DeepL translation) + - "⒛": [T: "vingt avec point"] # 0x249b (en: 'twenty with period', DeepL translation) - "⒜-⒵": # 0x249c - 0x24b5 - spell: "translate('.', '⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵', 'abcdefghijklmnopqrstuvwxyz')" - T: "entre parenthèses" # (en: 'parenthesized', DeepL translation) From 94fa8846765632c8a252992b6c2f64a536ccc0aa Mon Sep 17 00:00:00 2001 From: Olivier Thiffault Date: Sun, 19 Jul 2026 13:13:28 -0400 Subject: [PATCH 47/53] corrections to unicode-full.yaml v5 --- Rules/Languages/fr/unicode-full.yaml | 1238 +++++++++++++------------- 1 file changed, 619 insertions(+), 619 deletions(-) diff --git a/Rules/Languages/fr/unicode-full.yaml b/Rules/Languages/fr/unicode-full.yaml index 34f99c19b..9c2d02dbc 100644 --- a/Rules/Languages/fr/unicode-full.yaml +++ b/Rules/Languages/fr/unicode-full.yaml @@ -1458,26 +1458,26 @@ - "⒚": [T: "dix-neuf avec point"] # 0x249a (en: 'nineteen with period', DeepL translation) - "⒛": [T: "vingt avec point"] # 0x249b (en: 'twenty with period', DeepL translation) - "⒜-⒵": # 0x249c - 0x24b5 - - spell: "translate('.', '⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵', 'abcdefghijklmnopqrstuvwxyz')" - T: "entre parenthèses" # (en: 'parenthesized', DeepL translation) - "Ⓐ-ⓩ": # 0x24b6 - 0x24cf - - spell: "translate('.', 'ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', 'ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - T: "encerclé" # (en: 'circled', DeepL translation) - "🅐-🅩": # 0x1f150 - 0x1f169 - - spell: "translate('.', '🅐🅑🅒🅓🅔🅕🅖🅗🅘🅙🅚🅛🅜🅝🅞🅟🅠🅡🅢🅣🅤🅥🅦🅧🅨🅩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '🅐🅑🅒🅓🅔🅕🅖🅗🅘🅙🅚🅛🅜🅝🅞🅟🅠🅡🅢🅣🅤🅥🅦🅧🅨🅩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - T: "encerclé de noir" # (en: 'black circled', DeepL translation) - "ⓐ-ⓩ": # 0x24d0 - 0x24e9 - - spell: "translate('.', 'ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', 'ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ', 'abcdefghijklmnopqrstuvwxyz')" - T: "encerclé" # (en: 'circled', DeepL translation) - "⓪": [T: "zéro encerclé"] # 0x24ea (en: 'circled zero', DeepL translation) - - "⓫": [t: "onze encerclé de noir"] # 0x24eb (en: 'black circled eleven', DeepL translation) + - "⓫": [T: "onze encerclé de noir"] # 0x24eb (en: 'black circled eleven', DeepL translation) - "⓬": [T: "douze encerclé de noir"] # 0x24ec (en: 'black circled twelve', DeepL translation) - "⓭": [T: "treize encerclé de noir"] # 0x24ed (en: 'black circled thirteen', DeepL translation) - "⓮": [T: "quatorze encerclé de noir"] # 0x24ee (en: 'black circled fourteen', DeepL translation) @@ -1488,169 +1488,169 @@ - "⓳": [T: "dix-neuf encerclé de noir"] # 0x24f3 (en: 'black circled nineteen', DeepL translation) - "⓴": [T: "vingt encerclé de noir"] # 0x24f4 (en: 'black circled twenty', DeepL translation) - "⓵-⓽": # 0x24f5 - 0x24fe - - spell: "translate('.', '⓵⓶⓷⓸⓹⓺⓻⓼⓽', '123456789')" + - SPELL: "translate('.', '⓵⓶⓷⓸⓹⓺⓻⓼⓽', '123456789')" - T: "double encerclé" # (en: 'double circled', DeepL translation) - - "⓾": [t: "double cercle de dix"] # 0x24fe (en: 'double circled ten', DeepL translation) - - "⓿": [t: "zéro encerclé de noir"] # 0x24ff (en: 'black circled zero', DeepL translation) - - "■": [t: "petit carré noir"] # 0x25a0 (en: 'black square') - - "□": [t: "carré blanc"] # 0x25a1 (en: 'white square') - - "▢": [t: "carré blanc aux coins arrondis"] # 0x25a2 (en: 'white square with rounded corners') - - "▣": [t: "petit carré noir inscrit dans un carré blanc"] # 0x25a3 (en: 'white square containing small black square', DeepL: 'carré blanc contenant un petit carré noir') - - "▤": [t: "carré hachuré horizontalement"] # 0x25a4 (en: 'square with horizontal fill', DeepL: 'carré avec remplissage horizontal') - - "▥": [t: "carré hachuré verticalement"] # 0x25a5 (en: 'square with vertical fill', DeepL: 'carré avec remplissage vertical') - - "▦": [t: "carré quadrillé"] # 0x25a6 (en: 'square with orthogonal crosshatch fill', DeepL: 'carré avec remplissage par hachures orthogonales') - - "▧": [t: "carré hachuré du haut à gauche vers le bas à droite"] # 0x25a7 (en: 'square with upper left to lower right fill', DeepL: 'carré avec remplissage d'en haut à gauche à en bas à droite') - - "▨": [t: "carré hachuré du haut à droite vers le bas à gauche"] # 0x25a8 (en: 'square with upper right to lower left fill', DeepL: 'carré avec remplissage en haut à droite et en bas à gauche') - - "▩": [t: "carré quadrillé en diagonale"] # 0x25a9 (en: 'square with diagonal crosshatch fill', DeepL: 'carré avec remplissage par hachures diagonales') - - "▪": [t: "petit carré noir"] # 0x25aa (en: 'black small square') - - "▫": [t: "petit carré blanc"] # 0x25ab (en: 'white small square') - - "▬": [t: "rectangle noir"] # 0x25ac (en: 'black rectangle') - - "▭": [t: "rectangle blanc"] # 0x25ad (en: 'white rectangle') - - "▮": [t: "rectangle vertical noir"] # 0x25ae (en: 'black vertical rectangle') - - "▯": [t: "white vertical rectangle"] # 0x25af - - "▰": [t: "parallélogramme noir"] # 0x25b0 (en: 'black parallelogram') - - "▱": [t: "parallélogramme blanc"] # 0x25b1 (en: 'white parallelogram') - - "▲": [t: "petit triangle noir pointant vers le haut"] # 0x25b2 (en: 'black up pointing triangle') - - "△": [t: "triangle blanc pointant vers le haut"] # 0x25b3 (en: 'triangle') - - "▴": [t: "petit triangle noir pointant vers le haut"] # 0x25b4 (en: 'black up pointing small triangle') - - "▵": [t: "petit triangle blanc pointant vers le haut"] # 0x25b5 (en: 'white up pointing small triangle') - - "▶": [t: "petit triangle noir pointant vers la droite"] # 0x25b6 (en: 'black right pointing triangle') - - "▷": [t: "triangle blanc pointant vers la droite"] # 0x25b7 (en: 'white right pointing triangle') - - "▸": [t: "petit triangle noir pointant vers la droite"] # 0x25b8 (en: 'black right pointing small triangle') - - "▹": [t: "petit triangle blanc pointant vers la droite"] # 0x25b9 (en: 'white right pointing small triangle') - - "►": [t: "pointeur noir vers la droite"] # 0x25ba (en: 'black right pointing pointer', DeepL: 'pointeur noir à droite') - - "▻": [t: "pointeur blanc vers la droite"] # 0x25bb (en: 'white right pointing pointer', DeepL: 'pointeur blanc pointant vers la droite') - - "▼": [t: "petit triangle noir pointant vers le bas"] # 0x25bc (en: 'black down pointing triangle') - - "▽": [t: "triangle blanc pointant vers le bas"] # 0x25bd (en: 'white down pointing triangle') - - "▾": [t: "petit triangle noir pointant vers le bas"] # 0x25be (en: 'black down pointing small triangle') - - "▿": [t: "petit triangle blanc pointant vers le bas"] # 0x25bf (en: 'white down pointing small triangle') - - "◀": [t: "petit triangle noir pointant vers la gauche"] # 0x25c0 (en: 'black left pointing triangle') - - "◁": [t: "petit triangle blanc pointant vers la gauche"] # 0x25c1 (en: 'white left pointing triangle') - - "◂": [t: "petit triangle noir pointant vers la gauche"] # 0x25c2 (en: 'black left pointing small triangle') - - "◃": [t: "petit triangle blanc pointant vers la gauche"] # 0x25c3 (en: 'white left pointing small triangle') - - "◄": [t: "pointeur noir vers la gauche"] # 0x25c4 (en: 'black left pointing pointer') - - "◅": [t: "pointeur blanc vers la gauche"] # 0x25c5 (en: 'white left pointing pointer') - - "◆": [t: "losange noir"] # 0x25c6 (en: 'black diamond') - - "◇": [t: "losange blanc"] # 0x25c7 (en: 'white diamond') - - "◈": [t: "losange blanc évidé"] # 0x25c8 (en: 'white diamond containing black small diamond') - - "◉": [t: "cercle blanc évidé"] # 0x25c9 (en: 'fisheye') - - "◊": [t: "losange"] # 0x25ca (en: 'lozenge') - - "○": [t: "cercle blanc"] # 0x25cb (en: 'white circle') - - "◌": [t: "cercle en pointillés"] # 0x25cc (en: 'dotted circle') - - "◍": [t: "cercle hachuré verticalement"] # 0x25cd (en: 'circle with vertical fill') - - "◎": [t: "deux cercles concentriques"] # 0x25ce (en: 'bullseye') - - "●": [t: "cercle noir"] # 0x25cf (en: 'black circle') - - "◐": [t: "cercle avec moitié gauche noire"] # 0x25d0 (en: 'circle with left half black') - - "◑": [t: "cercle avec moitié droite noire"] # 0x25d1 (en: 'circle with right half black') - - "◒": [t: "cercle avec moitié inférieure"] # 0x25d2 (en: 'circle with lower half black') - - "◓": [t: "cercle avec moitié supérieure"] # 0x25d3 (en: 'circle with upper half black') - - "◔": [t: "cercle avec quadrant supérieur droit noir"] # 0x25d4 (en: 'circle with upper right quadrant black') - - "◕": [t: "disque avec quadrant supérieur gauche blanc"] # 0x25d5 (en: 'circle with all but upper left quadrant black') - - "◖": [t: "demi disque gauche noir"] # 0x25d6 (en: 'left half black circle', MathPlayer: 'demi-disque gauche noir', DeepL: 'demi-cercle noir gauche') - - "◗": [t: "demi disque droite noir"] # 0x25d7 (en: 'right half black circle', MathPlayer: 'demi-disque droite noir', DeepL: 'demi-cercle noir droit') - - "◘": [t: "point noir au blanc"] # 0x25d8 (en: 'inverse bullet', MathPlayer: 'point noir-au-blanc', DeepL: 'puce inversée') - - "◙": [t: "cercle noir au blanc"] # 0x25d9 (en: 'inverse white circle', MathPlayer: 'cercle noir-au-blanc', DeepL: 'cercle blanc inversé') - - "◚": [t: "demi cercle supérieur noir au blanc"] # 0x25da (en: 'upper half inverse white circle', MathPlayer: 'demi-cercle supérieur noir-au- blanc', DeepL: 'moitié supérieure du cercle blanc inversé') - - "◛": [t: "demi cercle inférieur noir au blanc"] # 0x25db (en: 'lower half inverse white circle', MathPlayer: 'demi-cercle inférieur noir-au- blanc', DeepL: 'moitié inférieure du cercle blanc inversé') - - "◜": [t: "arc de cercle dans le quadrant supérieur gauchearc de cercle dans le quadrant supérieur gauche"] # 0x25dc (en: 'upper left quadrant circular arc') - - "◝": [t: "arc de cercle dans le quadrant supérieur droit"] # 0x25dd (en: 'upper right quadrant circular arc') - - "◞": [t: "arc de cercle dans le quadrant inférieur droit"] # 0x25de (en: 'lower right quadrant circular arc') - - "◟": [t: "arc de cercle dans le quadrant inférieur gauche"] # 0x25df (en: 'lower left quadrant circular arc') - - "◠": [t: "demi-cercle supérieur"] # 0x25e0 (en: 'upper half circle', SRE: 'demi cercle supérieur') - - "◡": [t: "demi-cercle inférieur"] # 0x25e1 (en: 'lower half circle', SRE: 'demi cercle inférieur') - - "◢": [t: "coin triangulaire noir inférieur droit"] # 0x25e2 (en: 'black lower right triangle') - - "◣": [t: "coin triangulaire noir inférieur gauche"] # 0x25e3 (en: 'black lower left triangle') - - "◤": [t: "coin triangulaire noir supérieur gauche"] # 0x25e4 (en: 'black upper left triangle') - - "◥": [t: "coin triangulaire noir supérieur droit"] # 0x25e5 (en: 'black upper right triangle') - - "◦": [t: "opérateur rond"] # 0x25e6 (en: 'composition') - - "◧": [t: "carré à moitié gauche noire"] # 0x25e7 (en: 'square with left half black') - - "◨": [t: "carré à moitié droite noire"] # 0x25e8 (en: 'square with right half black') - - "◩": [t: "carré à moitié supérieure gauche noire"] # 0x25e9 (en: 'square with upper left half black') - - "◪": [t: "carré à moitié inférieure droite noire"] # 0x25ea (en: 'square with lower right half black') - - "◫": [t: "carré blanc à ligne bissectrice verticale"] # 0x25eb (en: 'white square with bisecting line') - - "◬": [t: "triangle blanc pointant vers le haut pointé"] # 0x25ec (en: 'white up pointing triangle with dot') - - "◭": [t: "triangle pointe vers le haut À moitié gauche noire"] # 0x25ed (en: 'up pointing triangle with left half black') - - "◮": [t: "triangle pointe vers le haut À moitié droite noire"] # 0x25ee (en: 'up pointing triangle with right half black') - - "◯": [t: "grand cercle"] # 0x25ef (en: 'large circle') - - "◰": [t: "carré blanc à quartier supérieur gauche"] # 0x25f0 (en: 'white square with upper left quadrant', DeepL: 'carré blanc avec quadrant supérieur gauche') - - "◱": [t: "carré blanc à quartier inférieur gauche"] # 0x25f1 (en: 'white square with lower left quadrant', DeepL: 'carré blanc avec quadrant inférieur gauche') - - "◲": [t: "carré blanc à quartier inférieur droit"] # 0x25f2 (en: 'white square with lower right quadrant', DeepL: 'carré blanc avec quadrant inférieur droit') - - "◳": [t: "carré blanc à quartier supérieur droit"] # 0x25f3 (en: 'white square with upper right quadrant', DeepL: 'carré blanc avec quadrant supérieur droit') - - "◴": [t: "cercle blanc à quartier supérieur gauche"] # 0x25f4 (en: 'white circle with upper left quadrant', DeepL: 'cercle blanc avec quadrant supérieur gauche') - - "◵": [t: "cercle blanc à quartier inférieur gauche"] # 0x25f5 (en: 'white circle with lower left quadrant', DeepL: 'cercle blanc avec quadrant inférieur gauche') - - "◶": [t: "cercle blanc à quartier inférieur droit"] # 0x25f6 (en: 'white circle with lower right quadrant', DeepL: 'cercle blanc avec quadrant inférieur droit') - - "◷": [t: "cercle blanc à quartier supérieur droit"] # 0x25f7 (en: 'white circle with upper right quadrant', DeepL: 'cercle blanc avec quadrant supérieur droit') - - "◸": [t: "triangle rectangle supérieur gauche"] # 0x25f8 (en: 'upper left triangle') - - "◹": [t: "triangle rectangle supérieur droit"] # 0x25f9 (en: 'upper right triangle') - - "◺": [t: "triangle rectangle inférieur gauche"] # 0x25fa (en: 'lower left triangle') - - "◻": [t: "carré moyen blanc"] # 0x25fb (en: 'white medium square') - - "◼": [t: "carré moyen noir"] # 0x25fc (en: 'black medium square') - - "◽": [t: "carré moyen blanc"] # 0x25fd (en: 'white medium small square') - - "◾": [t: "carré moyen noir"] # 0x25fe (en: 'black medium small square') - - "◿": [t: "triangle rectangle inférieur droit"] # 0x25ff (en: 'lower right triangle') - - "★": [t: "étoile noire"] # 0x2605 (en: 'black star') - - "☆": [t: "étoile blanche"] # 0x2606 (en: 'white star') - - "☉": [t: "soleil"] # 0x2609 (en: 'sun', DeepL translation) - - "☌": [t: "conjonction"] # 0x260c (en: 'conjuction', DeepL translation) - - "☒": [t: "bulletin de vote avec x"] # 0x2612 (en: 'ballot box with x', DeepL: 'urne avec x') - - "☽": [t: "premier quartier de lune"] # 0x263d (en: 'waxing moon', DeepL: 'lune croissante') - - "☾": [t: "dernier quartier de lune"] # 0x263e (en: 'waning moon', DeepL: 'lune décroissante') - - "☿": [t: "mercure"] # 0x263f (en: 'mercury') - - "♀": [t: "signe femelle"] # 0x2640 (en: 'female', DeepL: 'féminin') - - "♁": [t: "terre"] # 0x2641 (en: 'earth') - - "♂": [t: "signe mâle"] # 0x2642 (en: 'male', DeepL: 'masculin') - - "♃": [t: "jupiter"] # 0x2643 - - "♄": [t: "saturne"] # 0x2644 (en: 'saturn') - - "♅": [t: "uranus"] # 0x2645 - - "♆": [t: "neptune"] # 0x2646 - - "♇": [t: "pluton"] # 0x2647 (en: 'pluto') - - "♈": [t: "bélier"] # 0x2648 (en: 'aries') - - "♉": [t: "taureau"] # 0x2649 (en: 'taurus') - - "♩": [t: "note noire"] # 0x2669 (en: 'quarter note', DeepL: 'noire') - - "♭": [t: "bémol"] # 0x266d (en: 'flat', DeepL: 'plat') - - "♮": [t: "bécarre"] # 0x266e (en: 'natural', DeepL: 'naturel') - - "♯": [t: "dièse"] # 0x266f (en: 'sharp', DeepL: 'pointu') - - "♠": [t: "pique noir"] # 0x2660 (en: 'black spade suit', DeepL: 'suite de piques noire') - - "♡": [t: "coeur blanc"] # 0x2661 (en: 'white heart suit', DeepL: 'costume de cœur blanc') - - "♢": [t: "carreau blanc"] # 0x2662 (en: 'white diamond suit', DeepL: 'costume en diamant blanc') - - "♣": [t: "trèfle noir"] # 0x2663 (en: 'black club suit', DeepL: 'noir club suit') - - "♤": [t: "pique blanc"] # 0x2664 (en: 'white spade suit', DeepL: 'combinaison de pique blanche') - - "♥": [t: "cœur noir"] # 0x2665 (en: 'black heart suit', DeepL: 'coeur noir') - - "♦": [t: "carreau noir"] # 0x2666 (en: 'black diamond suit', DeepL: 'combinaison de diamant noir') - - "♧": [t: "trèfle blanc"] # 0x2667 (en: 'white club suit', DeepL: 'couleur blanche du trèfle') - - "⚀": [t: "face 1 du dé"] # 0x2680 (en: 'die face 1', DeepL translation) - - "⚁": [t: "tête de dé 2"] # 0x2681 (en: 'die face 2', DeepL translation) - - "⚂": [t: "face de matrice 3"] # 0x2682 (en: 'die face 3', DeepL translation) - - "⚃": [t: "face du dé 4"] # 0x2683 (en: 'die face 4', DeepL translation) - - "⚄": [t: "face du dé 5"] # 0x2684 (en: 'die face 5', DeepL translation) - - "⚅": [t: "face du dé 6"] # 0x2685 (en: 'die face 6', DeepL translation) - - "⚆": [t: "cercle blanc avec point à droite"] # 0x2686 (en: 'white circle with dot right', DeepL translation) - - "⚇": [t: "cercle blanc avec deux points"] # 0x2687 (en: 'white circle wiht two dots', DeepL translation) - - "⚈": [t: "cercle noir avec point à droite"] # 0x2688 (en: 'black circle with dot right', DeepL translation) - - "⚉": [t: "cercle noir avec deux points"] # 0x2689 (en: 'black circle wiht two dots', DeepL translation) - - "⚪": [t: "cercle moyen blanc"] # 0x26aa (en: 'medium white circle', DeepL: 'cercle blanc moyen') - - "⚫": [t: "cercle moyen noir"] # 0x26ab (en: 'medium black circle', DeepL: 'cercle noir moyen') - - "⚬": [t: "moyen petit cercle blanc"] # 0x26ac (en: 'medium small white circle', DeepL translation) - - "⚲": [t: "neutre"] # 0x26b2 (en: 'neuter', DeepL translation) - - "✓": [t: "signe de vérification"] # 0x2713 (en: 'check mark') - - "✠": [t: "croix de malte"] # 0x2720 (en: 'maltese cross') - - "✪": [t: "Étoile blanche cerclée"] # 0x272a (en: 'circled white star', DeepL: 'étoile blanche encerclée') - - "✶": [t: "étoile noire à six branches"] # 0x2736 (en: 'six pionted black star') - - "❨": [t: "parenthèse de fantaisie gauche demi grasse"] # 0x2768 (en: 'medium left parentheses ornament', DeepL: 'ornement moyen entre parenthèses à gauche') - - "❩": [t: "parenthèse de fantaisie droite demi grasse"] # 0x2769 (en: 'medium right parentheses ornament', DeepL: 'parenthèse moyenne à droite ornement') - - "❪": [t: "parenthèse de fantaisie gauche demi grasse aplatie"] # 0x276a (en: 'medium flattened left parentheses ornament', DeepL: 'ornement de parenthèse gauche aplatie moyenne') - - "❫": [t: "parenthèse de fantaisie droite demi grasse aplatie"] # 0x276b (en: 'medium flattened right parentheses ornament', DeepL: 'ornement de parenthèses moyennement aplati vers la droite') - - "❬": [t: "chevron de fantaisie vers la gauche demi gras"] # 0x276c (en: 'medium left-pointing angle bracket ornament', DeepL: 'moyen angle gauche crochet ornement') - - "❭": [t: "chevron de fantaisie vers la droite demi gras"] # 0x276d (en: 'medium right-pointing angle bracket ornament', DeepL: 'angle moyen pointant vers la droite ornement en forme d'équerre') - - "❮": [t: "guillemet de fantaisie vers la gauche gras"] # 0x276e (en: 'heavy left-pointing angle quotation mark ornament', DeepL: 'lourd ornement en forme de guillemet à l'angle gauche') - - "❯": [t: "guillemet de fantaisie vers la droite gras"] # 0x276f (en: 'heavy right-pointing angle quotation mark ornament', DeepL: 'ornement de guillemet à angle droit lourd') - - "❰": [t: "crochet de fantaisie vers la gauche gras"] # 0x2770 (en: 'heavy left-pointing angle bracket ornament', DeepL: 'ornement de l'équerre lourde pointant vers la gauche') - - "❱": [t: "crochet de fantaisie vers la droite gras"] # 0x2771 (en: 'heavy right-pointing angle bracket ornament', DeepL: 'ornement de l'équerre lourde pointant vers la droite') - - "❲": [t: "crochet de fantaisie gauche maigre en écaille"] # 0x2772 (en: 'light left tortoise shell bracket ornament', DeepL: 'ornement léger en écaille de tortue à gauche') - - "❳": [t: "crochet de fantaisie droit maigre en écaille"] # 0x2773 (en: 'light right tortoise shell bracket ornament', DeepL: 'ornement de support en écaille de tortue léger et droit') - - "❴": [t: "accolade de fantaisie gauche moyenne"] # 0x2774 (en: 'medium left brace ornament', DeepL: 'ornement d'accolade moyen gauche') - - "❵": [t: "accolade de fantaisie droite moyenne"] # 0x2775 (en: 'medium right brace ornament', DeepL: 'accolade moyenne droite ornement') + - "⓾": [T: "dix encerclé double"] # 0x24fe (en: 'double circled ten', DeepL translation) + - "⓿": [T: "zéro encerclé de noir"] # 0x24ff (en: 'black circled zero', DeepL translation) + - "■": [T: "petit carré noir"] # 0x25a0 (en: 'black square') + - "□": [T: "carré blanc"] # 0x25a1 (en: 'white square') + - "▢": [T: "carré blanc aux coins arrondis"] # 0x25a2 (en: 'white square with rounded corners') + - "▣": [T: "carré blanc contenant un petit carré noir"] # 0x25a3 (en: 'white square containing small black square', DeepL: 'carré blanc contenant un petit carré noir') + - "▤": [T: "carré hachuré horizontalement"] # 0x25a4 (en: 'square with horizontal fill', DeepL: 'carré avec remplissage horizontal') + - "▥": [T: "carré hachuré verticalement"] # 0x25a5 (en: 'square with vertical fill', DeepL: 'carré avec remplissage vertical') + - "▦": [T: "carré quadrillé"] # 0x25a6 (en: 'square with orthogonal crosshatch fill', DeepL: 'carré avec remplissage par hachures orthogonales') + - "▧": [T: "carré hachuré du haut à gauche vers le bas à droite"] # 0x25a7 (en: 'square with upper left to lower right fill', DeepL: 'carré avec remplissage d'en haut à gauche à en bas à droite') + - "▨": [T: "carré hachuré du haut à droite vers le bas à gauche"] # 0x25a8 (en: 'square with upper right to lower left fill', DeepL: 'carré avec remplissage en haut à droite et en bas à gauche') + - "▩": [T: "carré quadrillé en diagonale"] # 0x25a9 (en: 'square with diagonal crosshatch fill', DeepL: 'carré avec remplissage par hachures diagonales') + - "▪": [T: "petit carré noir"] # 0x25aa (en: 'black small square') + - "▫": [T: "petit carré blanc"] # 0x25ab (en: 'white small square') + - "▬": [T: "rectangle noir"] # 0x25ac (en: 'black rectangle') + - "▭": [T: "rectangle blanc"] # 0x25ad (en: 'white rectangle') + - "▮": [T: "rectangle vertical noir"] # 0x25ae (en: 'black vertical rectangle') + - "▯": [T: "rectangle vertical blanc"] # 0x25af + - "▰": [T: "parallélogramme noir"] # 0x25b0 (en: 'black parallelogram') + - "▱": [T: "parallélogramme blanc"] # 0x25b1 (en: 'white parallelogram') + - "▲": [T: "triangle noir pointant vers le haut"] # 0x25b2 (en: 'black up pointing triangle') + - "△": [T: "triangle blanc pointant vers le haut"] # 0x25b3 (en: 'triangle') + - "▴": [T: "petit triangle noir pointant vers le haut"] # 0x25b4 (en: 'black up pointing small triangle') + - "▵": [T: "petit triangle blanc pointant vers le haut"] # 0x25b5 (en: 'white up pointing small triangle') + - "▶": [T: "triangle noir pointant vers la droite"] # 0x25b6 (en: 'black right pointing triangle') + - "▷": [T: "triangle blanc pointant vers la droite"] # 0x25b7 (en: 'white right pointing triangle') + - "▸": [T: "petit triangle noir pointant vers la droite"] # 0x25b8 (en: 'black right pointing small triangle') + - "▹": [T: "petit triangle blanc pointant vers la droite"] # 0x25b9 (en: 'white right pointing small triangle') + - "►": [T: "pointeur noir vers la droite"] # 0x25ba (en: 'black right pointing pointer', DeepL: 'pointeur noir à droite') + - "▻": [T: "pointeur blanc vers la droite"] # 0x25bb (en: 'white right pointing pointer', DeepL: 'pointeur blanc pointant vers la droite') + - "▼": [T: "triangle noir pointant vers le bas"] # 0x25bc (en: 'black down pointing triangle') + - "▽": [T: "triangle blanc pointant vers le bas"] # 0x25bd (en: 'white down pointing triangle') + - "▾": [T: "petit triangle noir pointant vers le bas"] # 0x25be (en: 'black down pointing small triangle') + - "▿": [T: "petit triangle blanc pointant vers le bas"] # 0x25bf (en: 'white down pointing small triangle') + - "◀": [T: "triangle noir pointant vers la gauche"] # 0x25c0 (en: 'black left pointing triangle') + - "◁": [T: "triangle blanc pointant vers la gauche"] # 0x25c1 (en: 'white left pointing triangle') + - "◂": [T: "petit triangle noir pointant vers la gauche"] # 0x25c2 (en: 'black left pointing small triangle') + - "◃": [T: "petit triangle blanc pointant vers la gauche"] # 0x25c3 (en: 'white left pointing small triangle') + - "◄": [T: "pointeur noir vers la gauche"] # 0x25c4 (en: 'black left pointing pointer') + - "◅": [T: "pointeur blanc vers la gauche"] # 0x25c5 (en: 'white left pointing pointer') + - "◆": [T: "losange noir"] # 0x25c6 (en: 'black diamond') + - "◇": [T: "losange blanc"] # 0x25c7 (en: 'white diamond') + - "◈": [T: "losange blanc contenant un petit losange noir"] # 0x25c8 (en: 'white diamond containing black small diamond') + - "◉": [T: "cercle blanc évidé"] # 0x25c9 (en: 'fisheye') + - "◊": [T: "rhombe"] # 0x25ca (en: 'lozenge') + - "○": [T: "cercle blanc"] # 0x25cb (en: 'white circle') + - "◌": [T: "cercle pointillé"] # 0x25cc (en: 'dotted circle') + - "◍": [T: "cercle hachuré verticalement"] # 0x25cd (en: 'circle with vertical fill') + - "◎": [T: "deux cercles concentriques"] # 0x25ce (en: 'bullseye') + - "●": [T: "cercle noir"] # 0x25cf (en: 'black circle') + - "◐": [T: "cercle avec moitié gauche noire"] # 0x25d0 (en: 'circle with left half black') + - "◑": [T: "cercle avec moitié droite noire"] # 0x25d1 (en: 'circle with right half black') + - "◒": [T: "cercle avec moitié inférieure noire"] # 0x25d2 (en: 'circle with lower half black') + - "◓": [T: "cercle avec moitié supérieure noire"] # 0x25d3 (en: 'circle with upper half black') + - "◔": [T: "cercle avec quadrant supérieur droit noir"] # 0x25d4 (en: 'circle with upper right quadrant black') + - "◕": [T: "cercle avec quadrant supérieur gauche blanc"] # 0x25d5 (en: 'circle with all but upper left quadrant black') + - "◖": [T: "demi-cercle gauche noir"] # 0x25d6 (en: 'left half black circle', MathPlayer: 'demi-disque gauche noir', DeepL: 'demi-cercle noir gauche') + - "◗": [T: "demi-cercle droite noir"] # 0x25d7 (en: 'right half black circle', MathPlayer: 'demi-disque droite noir', DeepL: 'demi-cercle noir droit') + - "◘": [T: "puce noir au blanc"] # 0x25d8 (en: 'inverse bullet', MathPlayer: 'point noir-au-blanc', DeepL: 'puce inversée') + - "◙": [T: "cercle noir au blanc"] # 0x25d9 (en: 'inverse white circle', MathPlayer: 'cercle noir-au-blanc', DeepL: 'cercle blanc inversé') + - "◚": [T: "demi cercle supérieur noir au blanc"] # 0x25da (en: 'upper half inverse white circle', MathPlayer: 'demi-cercle supérieur noir-au- blanc', DeepL: 'moitié supérieure du cercle blanc inversé') + - "◛": [T: "demi cercle inférieur noir au blanc"] # 0x25db (en: 'lower half inverse white circle', MathPlayer: 'demi-cercle inférieur noir-au- blanc', DeepL: 'moitié inférieure du cercle blanc inversé') + - "◜": [T: "arc de cercle dans le quadrant supérieur gauche"] # 0x25dc (en: 'upper left quadrant circular arc') + - "◝": [T: "arc de cercle dans le quadrant supérieur droit"] # 0x25dd (en: 'upper right quadrant circular arc') + - "◞": [T: "arc de cercle dans le quadrant inférieur droit"] # 0x25de (en: 'lower right quadrant circular arc') + - "◟": [T: "arc de cercle dans le quadrant inférieur gauche"] # 0x25df (en: 'lower left quadrant circular arc') + - "◠": [T: "demi-cercle supérieur"] # 0x25e0 (en: 'upper half circle', SRE: 'demi cercle supérieur') + - "◡": [T: "demi-cercle inférieur"] # 0x25e1 (en: 'lower half circle', SRE: 'demi cercle inférieur') + - "◢": [T: "coin triangulaire noir inférieur droit"] # 0x25e2 (en: 'black lower right triangle') + - "◣": [T: "coin triangulaire noir inférieur gauche"] # 0x25e3 (en: 'black lower left triangle') + - "◤": [T: "coin triangulaire noir supérieur gauche"] # 0x25e4 (en: 'black upper left triangle') + - "◥": [T: "coin triangulaire noir supérieur droit"] # 0x25e5 (en: 'black upper right triangle') + - "◦": [T: "puce blance"] # 0x25e6 (en: 'composition') + - "◧": [T: "carré à moitié gauche noire"] # 0x25e7 (en: 'square with left half black') + - "◨": [T: "carré à moitié droite noire"] # 0x25e8 (en: 'square with right half black') + - "◩": [T: "carré à moitié supérieure gauche noire"] # 0x25e9 (en: 'square with upper left half black') + - "◪": [T: "carré à moitié inférieure droite noire"] # 0x25ea (en: 'square with lower right half black') + - "◫": [T: "carré blanc à ligne bissectrice verticale"] # 0x25eb (en: 'white square with bisecting line') + - "◬": [T: "triangle blanc pointant vers le haut pointé"] # 0x25ec (en: 'white up pointing triangle with dot') + - "◭": [T: "triangle pointe vers le haut à moitié gauche noire"] # 0x25ed (en: 'up pointing triangle with left half black') + - "◮": [T: "triangle pointe vers le haut à moitié droite noire"] # 0x25ee (en: 'up pointing triangle with right half black') + - "◯": [T: "grand cercle"] # 0x25ef (en: 'large circle') + - "◰": [T: "carré blanc à quartier supérieur gauche"] # 0x25f0 (en: 'white square with upper left quadrant', DeepL: 'carré blanc avec quadrant supérieur gauche') + - "◱": [T: "carré blanc à quartier inférieur gauche"] # 0x25f1 (en: 'white square with lower left quadrant', DeepL: 'carré blanc avec quadrant inférieur gauche') + - "◲": [T: "carré blanc à quartier inférieur droit"] # 0x25f2 (en: 'white square with lower right quadrant', DeepL: 'carré blanc avec quadrant inférieur droit') + - "◳": [T: "carré blanc à quartier supérieur droit"] # 0x25f3 (en: 'white square with upper right quadrant', DeepL: 'carré blanc avec quadrant supérieur droit') + - "◴": [T: "cercle blanc à quartier supérieur gauche"] # 0x25f4 (en: 'white circle with upper left quadrant', DeepL: 'cercle blanc avec quadrant supérieur gauche') + - "◵": [T: "cercle blanc à quartier inférieur gauche"] # 0x25f5 (en: 'white circle with lower left quadrant', DeepL: 'cercle blanc avec quadrant inférieur gauche') + - "◶": [T: "cercle blanc à quartier inférieur droit"] # 0x25f6 (en: 'white circle with lower right quadrant', DeepL: 'cercle blanc avec quadrant inférieur droit') + - "◷": [T: "cercle blanc à quartier supérieur droit"] # 0x25f7 (en: 'white circle with upper right quadrant', DeepL: 'cercle blanc avec quadrant supérieur droit') + - "◸": [T: "triangle rectangle supérieur gauche"] # 0x25f8 (en: 'upper left triangle') + - "◹": [T: "triangle rectangle supérieur droit"] # 0x25f9 (en: 'upper right triangle') + - "◺": [T: "triangle rectangle inférieur gauche"] # 0x25fa (en: 'lower left triangle') + - "◻": [T: "carré moyen blanc"] # 0x25fb (en: 'white medium square') + - "◼": [T: "carré moyen noir"] # 0x25fc (en: 'black medium square') + - "◽": [T: "carré moyen blanc"] # 0x25fd (en: 'white medium small square') + - "◾": [T: "carré moyen noir"] # 0x25fe (en: 'black medium small square') + - "◿": [T: "triangle rectangle inférieur droit"] # 0x25ff (en: 'lower right triangle') + - "★": [T: "étoile noire"] # 0x2605 (en: 'black star') + - "☆": [T: "étoile blanche"] # 0x2606 (en: 'white star') + - "☉": [T: "soleil"] # 0x2609 (en: 'sun', DeepL translation) + - "☌": [T: "conjonction"] # 0x260c (en: 'conjuction', DeepL translation) + - "☒": [T: "case de bulletin marquée d'un X"] # 0x2612 (en: 'ballot box with x', DeepL: 'urne avec x') + - "☽": [T: "premier quartier de lune"] # 0x263d (en: 'waxing moon', DeepL: 'lune croissante') + - "☾": [T: "dernier quartier de lune"] # 0x263e (en: 'waning moon', DeepL: 'lune décroissante') + - "☿": [T: "mercure"] # 0x263f (en: 'mercury') + - "♀": [T: "signe femelle"] # 0x2640 (en: 'female', DeepL: 'féminin') + - "♁": [T: "terre"] # 0x2641 (en: 'earth') + - "♂": [T: "signe mâle"] # 0x2642 (en: 'male', DeepL: 'masculin') + - "♃": [T: "jupiter"] # 0x2643 + - "♄": [T: "saturne"] # 0x2644 (en: 'saturn') + - "♅": [T: "uranus"] # 0x2645 + - "♆": [T: "neptune"] # 0x2646 + - "♇": [T: "pluton"] # 0x2647 (en: 'pluto') + - "♈": [T: "bélier"] # 0x2648 (en: 'aries') + - "♉": [T: "taureau"] # 0x2649 (en: 'taurus') + - "♩": [T: "note noire"] # 0x2669 (en: 'quarter note', DeepL: 'noire') + - "♭": [T: "bémol"] # 0x266d (en: 'flat', DeepL: 'plat') + - "♮": [T: "bécarre"] # 0x266e (en: 'natural', DeepL: 'naturel') + - "♯": [T: "dièse"] # 0x266f (en: 'sharp', DeepL: 'pointu') + - "♠": [T: "pique noir"] # 0x2660 (en: 'black spade suit', DeepL: 'suite de piques noire') + - "♡": [T: "coeur blanc"] # 0x2661 (en: 'white heart suit', DeepL: 'costume de cœur blanc') + - "♢": [T: "carreau blanc"] # 0x2662 (en: 'white diamond suit', DeepL: 'costume en diamant blanc') + - "♣": [T: "trèfle noir"] # 0x2663 (en: 'black club suit', DeepL: 'noir club suit') + - "♤": [T: "pique blanc"] # 0x2664 (en: 'white spade suit', DeepL: 'combinaison de pique blanche') + - "♥": [T: "coeur noir"] # 0x2665 (en: 'black heart suit', DeepL: 'coeur noir') + - "♦": [T: "carreau noir"] # 0x2666 (en: 'black diamond suit', DeepL: 'combinaison de diamant noir') + - "♧": [T: "trèfle blanc"] # 0x2667 (en: 'white club suit', DeepL: 'couleur blanche du trèfle') + - "⚀": [T: "face de dé 1"] # 0x2680 (en: 'die face 1', DeepL translation) + - "⚁": [T: "face de dé 2"] # 0x2681 (en: 'die face 2', DeepL translation) + - "⚂": [T: "face de dé 3"] # 0x2682 (en: 'die face 3', DeepL translation) + - "⚃": [T: "face de dé 4"] # 0x2683 (en: 'die face 4', DeepL translation) + - "⚄": [T: "face de dé 5"] # 0x2684 (en: 'die face 5', DeepL translation) + - "⚅": [T: "face de dé 6"] # 0x2685 (en: 'die face 6', DeepL translation) + - "⚆": [T: "cercle blanc avec point à droite"] # 0x2686 (en: 'white circle with dot right', DeepL translation) + - "⚇": [T: "cercle blanc avec deux points"] # 0x2687 (en: 'white circle wiht two dots', DeepL translation) + - "⚈": [T: "cercle noir avec point à droite"] # 0x2688 (en: 'black circle with dot right', DeepL translation) + - "⚉": [T: "cercle noir avec deux points"] # 0x2689 (en: 'black circle wiht two dots', DeepL translation) + - "⚪": [T: "cercle moyen blanc"] # 0x26aa (en: 'medium white circle', DeepL: 'cercle blanc moyen') + - "⚫": [T: "cercle moyen noir"] # 0x26ab (en: 'medium black circle', DeepL: 'cercle noir moyen') + - "⚬": [T: "cercle blanc modérément petit"] # 0x26ac (en: 'medium small white circle', DeepL translation) + - "⚲": [T: "neutre"] # 0x26b2 (en: 'neuter', DeepL translation) + - "✓": [T: "coche"] # 0x2713 (en: 'check mark') + - "✠": [T: "croix de malte"] # 0x2720 (en: 'maltese cross') + - "✪": [T: "étoile blanche cerclée"] # 0x272a (en: 'circled white star', DeepL: 'étoile blanche encerclée') + - "✶": [T: "étoile noire à six branches"] # 0x2736 (en: 'six pionted black star') + - "❨": [T: "parenthèse de fantaisie gauche demi grasse"] # 0x2768 (en: 'medium left parentheses ornament', DeepL: 'ornement moyen entre parenthèses à gauche') + - "❩": [T: "parenthèse de fantaisie droite demi grasse"] # 0x2769 (en: 'medium right parentheses ornament', DeepL: 'parenthèse moyenne à droite ornement') + - "❪": [T: "parenthèse de fantaisie gauche demi grasse aplatie"] # 0x276a (en: 'medium flattened left parentheses ornament', DeepL: 'ornement de parenthèse gauche aplatie moyenne') + - "❫": [T: "parenthèse de fantaisie droite demi grasse aplatie"] # 0x276b (en: 'medium flattened right parentheses ornament', DeepL: 'ornement de parenthèses moyennement aplati vers la droite') + - "❬": [T: "chevron de fantaisie vers la gauche demi gras"] # 0x276c (en: 'medium left-pointing angle bracket ornament', DeepL: 'moyen angle gauche crochet ornement') + - "❭": [T: "chevron de fantaisie vers la droite demi gras"] # 0x276d (en: 'medium right-pointing angle bracket ornament', DeepL: 'angle moyen pointant vers la droite ornement en forme d'équerre') + - "❮": [T: "guillemet de fantaisie vers la gauche gras"] # 0x276e (en: 'heavy left-pointing angle quotation mark ornament', DeepL: 'lourd ornement en forme de guillemet à l'angle gauche') + - "❯": [T: "guillemet de fantaisie vers la droite gras"] # 0x276f (en: 'heavy right-pointing angle quotation mark ornament', DeepL: 'ornement de guillemet à angle droit lourd') + - "❰": [T: "chevron de fantaisie vers la gauche gras"] # 0x2770 (en: 'heavy left-pointing angle bracket ornament', DeepL: 'ornement de l'équerre lourde pointant vers la gauche') + - "❱": [T: "chevron de fantaisie vers la droite gras"] # 0x2771 (en: 'heavy right-pointing angle bracket ornament', DeepL: 'ornement de l'équerre lourde pointant vers la droite') + - "❲": [T: "crochet de fantaisie en écaille gauche maigre"] # 0x2772 (en: 'light left tortoise shell bracket ornament', DeepL: 'ornement léger en écaille de tortue à gauche') + - "❳": [T: "crochet de fantaisie en écaille droit maigre"] # 0x2773 (en: 'light right tortoise shell bracket ornament', DeepL: 'ornement de support en écaille de tortue léger et droit') + - "❴": [T: "accolade de fantaisie gauche demi grasse"] # 0x2774 (en: 'medium left brace ornament', DeepL: 'ornement d'accolade moyen gauche') + - "❵": [T: "accolade de fantaisie droite demi grasse"] # 0x2775 (en: 'medium right brace ornament', DeepL: 'accolade moyenne droite ornement') - "❶": [T: "un encerclé de noir"] # 0x2776 (en: 'black circled one', DeepL translation) - "❷": [T: "deux encerclé de noir"] # 0x2777 (en: 'black circled two', DeepL translation) - "❸": [T: "trois encerclé de noir"] # 0x2778 (en: 'black circled three', DeepL translation) @@ -1681,471 +1681,471 @@ - "➑": [T: "huit encerclé de noir sans serif"] # 0x2791 (en: 'black circled sans serif eight', DeepL translation) - "➒": [T: "neuf encerclé de noir sans serif"] # 0x2792 (en: 'black circled sans serif nine', DeepL translation) - "➓": [T: "dix encerclé de noir sans serif"] # 0x2793 (en: 'black circled sans serif ten', DeepL translation) - - "➔": [t: "flèche grasse vers la droite à pointe large"] # 0x2794 (en: 'heavy wide-headed rightwards arrow', DeepL: 'flèche lourde à tête large vers la droite') - - "➕": [t: "plus gras"] # 0x2795 (en: 'heavy plus sign', DeepL: 'signe plus lourd') - - "➖": [t: "moins gras"] # 0x2796 (en: 'heavy minus sign', DeepL: 'signe moins lourd') - - "➗": [t: "division gras"] # 0x2797 (en: 'heavy division sign', DeepL: 'signe de division lourd') - - "➘": [t: "flèche grasse sud est"] # 0x2798 (en: 'heavy south east arrow', DeepL: 'flèche lourde sud-est') - - "➙": [t: "flèche grasse vers la droite grasse"] # 0x2799 (en: 'heavy rightwards arrow', DeepL: 'flèche lourde vers la droite') - - "➚": [t: "flèche grasse nord est"] # 0x279a (en: 'heavy north east arrow', DeepL: 'flèche lourde nord-est') - - "➛": [t: "flèche de traçage vers la droite"] # 0x279b (en: 'drafting point rightwards arrow', DeepL: 'point de rédaction flèche vers la droite') - - "➜": [t: "flèche grasse à pointe arrondie vers la droite"] # 0x279c (en: 'heavy round-tipped rightwards arrow', DeepL: 'flèche lourde à pointe ronde vers la droite') - - "➝": [t: "flèche à pointe en triangle vers la droite"] # 0x279d (en: 'triangle-headed rightwards arrow', DeepL: 'flèche triangulaire vers la droite') - - "➞": [t: "flèche grasse à pointe en triangle vers la droite"] # 0x279e (en: 'heavy triangle-headed rightwards arrow', DeepL: 'flèche lourde à tête triangulaire vers la droite') - - "➟": [t: "flèche avec pointillés à pointe en triangle vers la droite"] # 0x279f (en: 'dashed triangle-headed rightwards arrow', DeepL: 'flèche en pointillé à tête triangulaire vers la droite') - - "➠": [t: "flèche grasse avec pointillés à pointe en triangle vers la droite"] # 0x27a0 (en: 'heavy dashed triangle-headed rightwards arrow', DeepL: 'flèche lourde en pointillés à tête triangulaire vers la droite') - - "➡": [t: "flèche noire vers la droite"] # 0x27a1 (en: 'black rightwards arrow') - - "➢": [t: "pointe de flèche vers la droite en trompe l'œil éclairée par le haut"] # 0x27a2 (en: 'three d top lighted rightwards arrow', DeepL: 'trois d en haut, flèche vers la droite éclairée') - - "➣": [t: "pointe de flèche vers la droite en trompe l'œil éclairée par le bas"] # 0x27a3 (en: 'three d bottom lighted rightwards arrow', DeepL: 'trois d en bas éclairé flèche vers la droite') - - "➤": [t: "pointe de flèche noire vers la droite"] # 0x27a4 (en: 'black rightwards arrowhead') - - "➥": [t: "flèche noire grasse courbée vers le bas et vers la droite"] # 0x27a5 (en: 'heavy black curved downwards and rightwards arrow', DeepL: 'flèche noire incurvée vers le bas et vers la droite') - - "➦": [t: "flèche noire courbée vers le haut et vers la droite"] # 0x27a6 (en: 'heavy black curved upwards and rightwards arrow', DeepL: 'flèche noire incurvée vers le haut et la droite') - - "➧": [t: "flèche noire trapue vers la droite"] # 0x27a7 (en: 'squat black rightwards arrow') - - "➨": [t: "flèche noire grasse à pointe concave vers la droite"] # 0x27a8 (en: 'heavy concave-pointed black rightwards arrow', DeepL: 'flèche noire lourde à pointe concave vers la droite') - - "➩": [t: "flèche blanche vers la droite ombrée à l'avant"] # 0x27a9 (en: 'right-shaded white rightwards arrow', DeepL: 'flèche vers la droite blanche ombrée à droite') - - "➪": [t: "flèche blanche vers la droite ombrée à l'arrière"] # 0x27aa (en: 'left-shaded white rightwards arrow', DeepL: 'flèche blanche ombrée à gauche vers la droite') - - "➫": [t: "flèche blanche vers la droite penchée vers l'arrière et ombrée"] # 0x27ab (en: 'back-tilted shadowed white rightwards arrow', DeepL: 'flèche blanche ombrée vers la droite, inclinée vers l'arrière') - - "➬": [t: "flèche blanche vers la droite penchée vers l'avant et ombrée"] # 0x27ac (en: 'front-tilted shadowed white rightwards arrow', DeepL: 'flèche blanche inclinée vers l'avant et ombrée vers la droite') - - "➭": [t: "flèche blanche grasse vers la droite à ombre inférieure droite"] # 0x27ad (en: 'heavy lower right-shadowed white rightwards arrow', DeepL: 'flèche lourde inférieure droite ombrée de blanc vers la droite') - - "➮": [t: "flèche blanche grasse vers la droite à ombre supérieure droite"] # 0x27ae (en: 'heavy upper right-shadowed white rightwards arrow', DeepL: 'flèche lourde en haut à droite, ombrée en blanc, vers la droite') - - "➯": [t: "flèche encochée blanche vers la droite ombrée à l'avant et par dessous"] # 0x27af (en: 'notched lower right-shadowed white rightwards arrow', DeepL: 'flèche de droite encochée en bas à droite et ombrée en blanc') - - "➱": [t: "flèche encochée blanche vers la droite ombrée à l'avant et par dessus"] # 0x27b1 (en: 'notched upper right-shadowed white rightwards arrow', DeepL: 'flèche supérieure droite crantée et ombrée de blanc vers la droite') - - "➲": [t: "flèche blanche grasse vers la droite à contour circulaire"] # 0x27b2 (en: 'circled heavy white rightwards arrow', DeepL: 'encerclé heavy white rightwards arrow (flèche blanche vers la droite)') - - "➳": [t: "flèche empennée blanche vers la droite"] # 0x27b3 (en: 'white-feathered rightwards arrow', DeepL: 'flèche blanche vers la droite') - - "➴": [t: "flèche empennée noir sud est"] # 0x27b4 (en: 'black-feathered south east arrow', DeepL: 'flèche sud-est à plumes noires') - - "➵": [t: "flèche empennée noir vers la droite"] # 0x27b5 (en: 'black-feathered rightwards arrow', DeepL: 'flèche noire vers la droite') - - "➶": [t: "flèche empennée noir nord est"] # 0x27b6 (en: 'black-feathered north east arrow', DeepL: 'flèche nord-est à plumes noires') - - "➷": [t: "flèche empennée gras noire sud est"] # 0x27b7 (en: 'heavy black-feathered south east arrow', DeepL: 'lourde flèche sud-est à plumes noires') - - "➸": [t: "flèche empennée gras noire vers la droite"] # 0x27b8 (en: 'heavy black-feathered rightwards arrow', DeepL: 'flèche lourde à plumes noires vers la droite') - - "➹": [t: "flèche empennée gras noire nord est"] # 0x27b9 (en: 'heavy black-feathered north east arrow', DeepL: 'flèche lourde à plumes noires vers le nord-est') - - "➺": [t: "flèche vers la droite à pointe larmée"] # 0x27ba (en: 'teradrop-barbed rightwards arrow', DeepL: 'teradrop-flèche droite barrée') - - "➻": [t: "flèche vers la droite à hampe larmée"] # 0x27bb (en: 'heavy teardrop-shanked rightwards arrow', DeepL: 'flèche lourde en forme de goutte d'eau vers la droite') - - "➼": [t: "flèche vers la droite à queue en forme de coin"] # 0x27bc (en: 'wedge-tailed rightwards arrow', DeepL: 'flèche en forme de coin vers la droite') - - "➽": [t: "flèche grasse vers la droite à queue en forme de coin"] # 0x27bd (en: 'heavy wedge-tailed rightwards arrow', DeepL: 'flèche lourde à queue cunéiforme vers la droite') - - "➾": [t: "flèche vers la droite à contour ouvert"] # 0x27be (en: 'open-outlined rightwards arrow', DeepL: 'flèche ouverte vers la droite') - - "⟀": [t: "angle tridimensionnel"] # 0x27c0 (en: 'three dimensional angle') - - "⟁": [t: "petit triangle blanc inscrit dans triangle blanc"] # 0x27c1 (en: 'white triangle containing small white triangle') + - "➔": [T: "flèche grasse vers la droite à pointe large"] # 0x2794 (en: 'heavy wide-headed rightwards arrow', DeepL: 'flèche lourde à tête large vers la droite') + - "➕": [T: "plus gras"] # 0x2795 (en: 'heavy plus sign', DeepL: 'signe plus lourd') + - "➖": [T: "moins gras"] # 0x2796 (en: 'heavy minus sign', DeepL: 'signe moins lourd') + - "➗": [T: "division gras"] # 0x2797 (en: 'heavy division sign', DeepL: 'signe de division lourd') + - "➘": [T: "flèche grasse sud est"] # 0x2798 (en: 'heavy south east arrow', DeepL: 'flèche lourde sud-est') + - "➙": [T: "flèche grasse vers la droite"] # 0x2799 (en: 'heavy rightwards arrow', DeepL: 'flèche lourde vers la droite') + - "➚": [T: "flèche grasse nord est"] # 0x279a (en: 'heavy north east arrow', DeepL: 'flèche lourde nord-est') + - "➛": [T: "flèche de traçage vers la droite"] # 0x279b (en: 'drafting point rightwards arrow', DeepL: 'point de rédaction flèche vers la droite') + - "➜": [T: "flèche grasse à pointe arrondie vers la droite"] # 0x279c (en: 'heavy round-tipped rightwards arrow', DeepL: 'flèche lourde à pointe ronde vers la droite') + - "➝": [T: "flèche à pointe en triangle vers la droite"] # 0x279d (en: 'triangle-headed rightwards arrow', DeepL: 'flèche triangulaire vers la droite') + - "➞": [T: "flèche grasse à pointe en triangle vers la droite"] # 0x279e (en: 'heavy triangle-headed rightwards arrow', DeepL: 'flèche lourde à tête triangulaire vers la droite') + - "➟": [T: "flèche avec pointillés à pointe en triangle vers la droite"] # 0x279f (en: 'dashed triangle-headed rightwards arrow', DeepL: 'flèche en pointillé à tête triangulaire vers la droite') + - "➠": [T: "flèche grasse avec pointillés à pointe en triangle vers la droite"] # 0x27a0 (en: 'heavy dashed triangle-headed rightwards arrow', DeepL: 'flèche lourde en pointillés à tête triangulaire vers la droite') + - "➡": [T: "flèche noire vers la droite"] # 0x27a1 (en: 'black rightwards arrow') + - "➢": [T: "pointe de flèche vers la droite en trompe l'oeil éclairée par le haut"] # 0x27a2 (en: 'three d top lighted rightwards arrow', DeepL: 'trois d en haut, flèche vers la droite éclairée') + - "➣": [T: "pointe de flèche vers la droite en trompe l'oeil éclairée par le bas"] # 0x27a3 (en: 'three d bottom lighted rightwards arrow', DeepL: 'trois d en bas éclairé flèche vers la droite') + - "➤": [T: "pointe de flèche noire vers la droite"] # 0x27a4 (en: 'black rightwards arrowhead') + - "➥": [T: "flèche noire grasse courbée vers le bas et vers la droite"] # 0x27a5 (en: 'heavy black curved downwards and rightwards arrow', DeepL: 'flèche noire incurvée vers le bas et vers la droite') + - "➦": [T: "flèche noire courbée vers le haut et vers la droite"] # 0x27a6 (en: 'heavy black curved upwards and rightwards arrow', DeepL: 'flèche noire incurvée vers le haut et la droite') + - "➧": [T: "flèche noire trapue vers la droite"] # 0x27a7 (en: 'squat black rightwards arrow') + - "➨": [T: "flèche noire grasse à pointe concave vers la droite"] # 0x27a8 (en: 'heavy concave-pointed black rightwards arrow', DeepL: 'flèche noire lourde à pointe concave vers la droite') + - "➩": [T: "flèche blanche vers la droite ombrée à l'avant"] # 0x27a9 (en: 'right-shaded white rightwards arrow', DeepL: 'flèche vers la droite blanche ombrée à droite') + - "➪": [T: "flèche blanche vers la droite ombrée à l'arrière"] # 0x27aa (en: 'left-shaded white rightwards arrow', DeepL: 'flèche blanche ombrée à gauche vers la droite') + - "➫": [T: "flèche blanche vers la droite penchée vers l'arrière et ombrée"] # 0x27ab (en: 'back-tilted shadowed white rightwards arrow', DeepL: 'flèche blanche ombrée vers la droite, inclinée vers l'arrière') + - "➬": [T: "flèche blanche vers la droite penchée vers l'avant et ombrée"] # 0x27ac (en: 'front-tilted shadowed white rightwards arrow', DeepL: 'flèche blanche inclinée vers l'avant et ombrée vers la droite') + - "➭": [T: "flèche blanche grasse vers la droite à ombre inférieure droite"] # 0x27ad (en: 'heavy lower right-shadowed white rightwards arrow', DeepL: 'flèche lourde inférieure droite ombrée de blanc vers la droite') + - "➮": [T: "flèche blanche grasse vers la droite à ombre supérieure droite"] # 0x27ae (en: 'heavy upper right-shadowed white rightwards arrow', DeepL: 'flèche lourde en haut à droite, ombrée en blanc, vers la droite') + - "➯": [T: "flèche encochée blanche vers la droite ombrée à l'avant et par dessous"] # 0x27af (en: 'notched lower right-shadowed white rightwards arrow', DeepL: 'flèche de droite encochée en bas à droite et ombrée en blanc') + - "➱": [T: "flèche encochée blanche vers la droite ombrée à l'avant et par dessus"] # 0x27b1 (en: 'notched upper right-shadowed white rightwards arrow', DeepL: 'flèche supérieure droite crantée et ombrée de blanc vers la droite') + - "➲": [T: "flèche blanche grasse vers la droite à contour circulaire"] # 0x27b2 (en: 'circled heavy white rightwards arrow', DeepL: 'encerclé heavy white rightwards arrow (flèche blanche vers la droite)') + - "➳": [T: "flèche empennée blanche vers la droite"] # 0x27b3 (en: 'white-feathered rightwards arrow', DeepL: 'flèche blanche vers la droite') + - "➴": [T: "flèche empennée noir sud est"] # 0x27b4 (en: 'black-feathered south east arrow', DeepL: 'flèche sud-est à plumes noires') + - "➵": [T: "flèche empennée noir vers la droite"] # 0x27b5 (en: 'black-feathered rightwards arrow', DeepL: 'flèche noire vers la droite') + - "➶": [T: "flèche empennée noir nord est"] # 0x27b6 (en: 'black-feathered north east arrow', DeepL: 'flèche nord-est à plumes noires') + - "➷": [T: "flèche empennée gras noire sud est"] # 0x27b7 (en: 'heavy black-feathered south east arrow', DeepL: 'lourde flèche sud-est à plumes noires') + - "➸": [T: "flèche empennée gras noire vers la droite"] # 0x27b8 (en: 'heavy black-feathered rightwards arrow', DeepL: 'flèche lourde à plumes noires vers la droite') + - "➹": [T: "flèche empennée gras noire nord est"] # 0x27b9 (en: 'heavy black-feathered north east arrow', DeepL: 'flèche lourde à plumes noires vers le nord-est') + - "➺": [T: "flèche vers la droite à pointe larmée"] # 0x27ba (en: 'teradrop-barbed rightwards arrow', DeepL: 'teradrop-flèche droite barrée') + - "➻": [T: "flèche vers la droite à hampe larmée"] # 0x27bb (en: 'heavy teardrop-shanked rightwards arrow', DeepL: 'flèche lourde en forme de goutte d'eau vers la droite') + - "➼": [T: "flèche vers la droite à queue en forme de coin"] # 0x27bc (en: 'wedge-tailed rightwards arrow', DeepL: 'flèche en forme de coin vers la droite') + - "➽": [T: "flèche grasse vers la droite à queue en forme de coin"] # 0x27bd (en: 'heavy wedge-tailed rightwards arrow', DeepL: 'flèche lourde à queue cunéiforme vers la droite') + - "➾": [T: "flèche vers la droite à contour ouvert"] # 0x27be (en: 'open-outlined rightwards arrow', DeepL: 'flèche ouverte vers la droite') + - "⟀": [T: "angle tridimensionnel"] # 0x27c0 (en: 'three dimensional angle') + - "⟁": [T: "triangle blanc contenant un petit triangle blanc"] # 0x27c1 (en: 'white triangle containing small white triangle') - "⟂": # 0x27c2 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "perpendiculaire à" # (en: 'perpendicular to') + then: [T: "est"] # (en: 'is', DeepL translation) + - T: "perpendiculaire à" # (en: 'perpendicular to') - "⟃": # 0x27c3 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "sous ensemble ouvert" # (en: 'an open subset of', MathPlayer: 'sous-ensemble ouvert', DeepL: 'un sous-ensemble ouvert de') + then: [T: "est"] # (en: 'is', DeepL translation) + - T: "sous ensemble ouvert" # (en: 'an open subset of', MathPlayer: 'sous-ensemble ouvert', DeepL: 'un sous-ensemble ouvert de') - "⟄": # 0x27c4 - test: if: "$Verbosity!='Terse'" - then: [t: "est"] # (en: 'is', DeepL translation) - - t: "sur ensemble ouvert" # (en: 'an open superset of', MathPlayer: 'sur-ensemble ouvert', DeepL: 'un surensemble ouvert de') - - "⟅": [t: "délimiteur de sac en s gauche"] # 0x27c5 (en: 'left s-shaped bag delimiter') - - "⟆": [t: "délimiteur de sac en s droite"] # 0x27c6 (en: 'right s-shaped bag delimiter') - - "⟇": [t: "ou avec point inscrit"] # 0x27c7 (en: 'or with dot inside') - - "⟈": [t: "sous ensemble précédé d'une barre oblique inversée"] # 0x27c8 (en: 'reverse solidus preceding subset', MathPlayer: 'sous-ensemble précédé d'une barre oblique inversée', DeepL: 'solidus inversé précédant le sous-ensemble') - - "⟉": [t: "sur ensemble suivi d'une barre oblique"] # 0x27c9 (en: 'superset preceding solidus', MathPlayer: 'sur-ensemble suivi d'une barre oblique', DeepL: 'sur-ensemble précédant le solidus') - - "⟊": [t: "barre verticale À une traverse"] # 0x27ca (en: 'vertical bar with horizontal stroke') - - "⟋": [t: "diagonale mathématique ascendante"] # 0x27cb (en: 'mathematical rising diagonal', DeepL: 'diagonale ascendante mathématique') - - "⟌": [t: "grande division"] # 0x27cc (en: 'long division') - - "⟍": [t: "diagonale mathématique descendante"] # 0x27cd (en: 'mathematical falling diagonal', DeepL: 'diagonale descendante mathématique') - - "⟎": [t: "et logique encadré"] # 0x27ce (en: 'squared logical and', DeepL: 'carré logique et') - - "⟏": [t: "ou logique encadré"] # 0x27cf (en: 'squared logical or', DeepL: 'carré logique ou') - - "⟐": [t: "losange blanc à point centré"] # 0x27d0 (en: 'white diamond with centered dot', DeepL: 'diamant blanc avec point centré') - - "⟑": [t: "et pointé"] # 0x27d1 (en: 'and with dot') - - "⟒": [t: "appartient À ouvert vers le haut"] # 0x27d2 (en: 'element of opening upwards') - - "⟓": [t: "coin inférieur droit pointé"] # 0x27d3 (en: 'lower right corner with dot') - - "⟔": [t: "coin supérieur gauche pointé"] # 0x27d4 (en: 'upper left corner with dot') - - "⟕": [t: "jointure externe gauche"] # 0x27d5 (en: 'left outer join') - - "⟖": [t: "jointure externe droite"] # 0x27d6 (en: 'right outer join') - - "⟗": [t: "jointure externe complète"] # 0x27d7 (en: 'full outer join') - - "⟘": [t: "grand taquet vers le haut"] # 0x27d8 (en: 'large up tack') - - "⟙": [t: "grand taquet vers le bas"] # 0x27d9 (en: 'large down tack') - - "⟚": [t: "double tourniquet bilatéral"] # 0x27da (en: 'left and right double turnstile') - - "⟛": [t: "tourniquet bilatéral"] # 0x27db (en: 'left and right tack') - - "⟜": [t: "multijection gauche"] # 0x27dc (en: 'left multimap') - - "⟝": [t: "long taquet droit"] # 0x27dd (en: 'long right tack') - - "⟞": [t: "long taquet gauche"] # 0x27de (en: 'long left tack') - - "⟟": [t: "taquet vers le haut surmonté d'un cercle"] # 0x27df (en: 'up tack with circle above') - - "⟠": [t: "losange coupé"] # 0x27e0 (en: 'lozenge divided by horizontal rule') - - "⟡": [t: "losange concave blanc"] # 0x27e1 (en: 'white concave sided diamond') - - "⟢": [t: "losange concave blanc avec trait à gauche"] # 0x27e2 (en: 'white concave sided diamond with leftwards tick') - - "⟣": [t: "losange concave blanc avec trait à droite"] # 0x27e3 (en: 'white concave sided diamond with rightwards tick') - - "⟤": [t: "carré blanc avec trait à gauche"] # 0x27e4 (en: 'white square with leftwards tick') - - "⟥": [t: "carré blanc avec trait à droite"] # 0x27e5 (en: 'white square with rightwards tick') - - "⟦": [t: "crochet blanc gauche"] # 0x27e6 (en: 'left white square bracket') - - "⟧": [t: "crochet blanc droit"] # 0x27e7 (en: 'right white square bracket') - - "⟨": [t: "chevron mathématique gauche"] # 0x27e8 (en: 'left angle bracket') - - "⟩": [t: "chevron droit"] # 0x27e9 (en: 'right angle bracket') - - "⟪": [t: "double chevron gauche"] # 0x27ea (en: 'left double angle bracket') - - "⟫": [t: "double chevron droit"] # 0x27eb (en: 'right double angle bracket') - - "⟬": [t: "crochet gauche en écaille blanche"] # 0x27ec (en: 'left white tortoise shell bracket') - - "⟭": [t: "crochet droit en écaille blanche"] # 0x27ed (en: 'right white tortoise shell bracket') - - "⟮": [t: "parenthèse gauche aplatie"] # 0x27ee (en: 'left flattened parenthesis') - - "⟯": [t: "parenthèse droite aplatie"] # 0x27ef (en: 'right flattened parenthesis') - - "⟰": [t: "quadruple flèche vers le haut"] # 0x27f0 (en: 'upwards quadruple arrow', DeepL: 'flèche quadruple vers le haut') - - "⟱": [t: "quadruple flèche vers le bas"] # 0x27f1 (en: 'downwards quadruple arrow', DeepL: 'flèche quadruple vers le bas') - - "⟲": [t: "flèche sens antihoraire entrouverte"] # 0x27f2 (en: 'anticlockwise gapped circle arrow', DeepL: 'flèche du cercle fermé dans le sens inverse des aiguilles d'une montre') - - "⟳": [t: "flèche sens horaire entrouverte"] # 0x27f3 (en: 'clockwise gapped circle arrow', DeepL: 'flèche de cercle encerclé dans le sens des aiguilles d'une montre') - - "⟴": [t: "flèche vers la droite à signe plus cerclé"] # 0x27f4 (en: 'right arrow with circled plus', DeepL: 'flèche droite avec plus encerclé') - - "⟵": [t: "longue flèche gauche"] # 0x27f5 (en: 'long leftwards arrow', MathPlayer: 'longue flèche vers la gauche', DeepL: 'flèche longue vers la gauche') - - "⟶": [t: "longue flèche vers la droite"] # 0x27f6 (en: 'long rightwards arrow', SRE: 'longue flèche droite') - - "⟷": [t: "longue flèche bilatérale"] # 0x27f7 (en: 'long left right arrow') - - "⟸": [t: "longue double flèche gauche"] # 0x27f8 (en: 'long leftwards double arrow', MathPlayer: 'longue double flèche vers la gauche', DeepL: 'longue flèche double vers la gauche') - - "⟹": [t: "longue double flèche droite"] # 0x27f9 (en: 'implies', MathPlayer: 'longue double flèche vers la droite', DeepL: 'implique') - - "⟺": [t: "longue double flèche bilatérale"] # 0x27fa (en: 'if and only if') - - "⟻": [t: "longue flèche d'un taquet vers la gauche"] # 0x27fb (en: 'long leftwards arrow from bar', DeepL: 'longue flèche vers la gauche à partir d'une barre') - - "⟼": [t: "longue flèche d'un taquet droite"] # 0x27fc (en: 'long rightwards arrow from bar', MathPlayer: 'longue flèche d'un taquet vers la droite', DeepL: 'longue flèche vers la droite à partir de la barre') - - "⟽": [t: "longue double flèche d'un taquet vers la gauche"] # 0x27fd (en: 'long leftwards double arrow from bar', DeepL: 'double flèche longue vers la gauche à partir de la barre') - - "⟾": [t: "longue double flèche d'un taquet vers la droite"] # 0x27fe (en: 'long rightwards double arrow from bar', DeepL: 'double flèche longue vers la droite à partir de la barre') - - "⟿": [t: "longue flèche en tire bouchon droite"] # 0x27ff (en: 'long rightwards squiggle arrow', MathPlayer: 'longue flèche vers la droite en tire-bouchon', DeepL: 'flèche longue vers la droite en forme de gribouillis') - - "⤀": [t: "flèche à deux pointes vers la droite barrée verticalement"] # 0x2900 (en: 'rightwards two headed arrow with vertical stroke', DeepL: 'vers la droite flèche à deux têtes avec trait vertical') - - "⤁": [t: "flèche à deux pointes vers la droite barrée deux fois verticalement"] # 0x2901 (en: 'rightwards two headed arrow with double vertical stroke', DeepL: 'flèche bicéphale droite avec double trait vertical') - - "⤂": [t: "double flèche vers la gauche barrée verticalement"] # 0x2902 (en: 'leftwards double arrow with vertical stroke', DeepL: 'flèche double gauche avec trait vertical') - - "⤃": [t: "double flèche vers la droite barrée verticalement"] # 0x2903 (en: 'rightwards double arrow with vertical stroke', DeepL: 'vers la droite double flèche avec trait vertical') - - "⤄": [t: "flèche bilatérale double barrée verticalement"] # 0x2904 (en: 'left right double arrow with vertical stroke', DeepL: 'flèche double gauche-droite avec trait vertical') - - "⤅": [t: "flèche à deux têtes d'un taquet droite"] # 0x2905 (en: 'rightwards two headed arrow from bar', MathPlayer: 'flèche à deux têtes d'un taquet vers la droite', DeepL: 'flèche vers la droite à deux têtes à partir de la barre') - - "⤆": [t: "double flèche d'un taquet vers la gauche"] # 0x2906 (en: 'leftwards double arrow from bar', DeepL: 'flèche double vers la gauche à partir de la barre') - - "⤇": [t: "double flèche d'un taquet vers la droite"] # 0x2907 (en: 'rightwards double arrow from bar', DeepL: 'double flèche vers la droite à partir de la barre') - - "⤈": [t: "flèche vers le bas barrée horizontalement"] # 0x2908 (en: 'downwards arrow with horizontal stroke', DeepL: 'flèche vers le bas avec trait horizontal') - - "⤉": [t: "flèche vers le haut barrée horizontalement"] # 0x2909 (en: 'upwards arrow with horizontal stroke', DeepL: 'flèche vers le haut avec trait horizontal') - - "⤊": [t: "triple flèche vers le haut"] # 0x290a (en: 'upwards triple arrow', DeepL: 'flèche triple vers le haut') - - "⤋": [t: "triple flèche vers le bas"] # 0x290b (en: 'downwards triple arrow') - - "⤌": [t: "flèche à deux traits gauche"] # 0x290c (en: 'leftwards double dash arrow', MathPlayer: 'flèche à deux traits vers la gauche', DeepL: 'flèche double tiret vers la gauche') - - "⤍": [t: "flèche à deux traits droite"] # 0x290d (en: 'rightwards double dash arrow', MathPlayer: 'flèche à deux traits vers la droite', DeepL: 'flèche à double tiret vers la droite') - - "⤎": [t: "flèche à trois traits gauche"] # 0x290e (en: 'leftwards triple dash arrow', MathPlayer: 'flèche à trois traits vers la gauche', DeepL: 'flèche à triple tiret vers la gauche') - - "⤏": [t: "flèche à trois traits droite"] # 0x290f (en: 'rightwards triple dash arrow', MathPlayer: 'flèche à trois traits vers la droite', DeepL: 'à droite triple flèche en tiret') - - "⤐": [t: "flèche à trois traits et à deux têtes droite"] # 0x2910 (en: 'rightwards two headed triple dash arrow', MathPlayer: 'flèche à trois traits et à deux têtes vers la droite', DeepL: 'vers la droite, flèche à deux têtes et triple tiret') - - "⤑": [t: "flèche à fût pointillé droite"] # 0x2911 (en: 'rightwards arrow with dotted stem', MathPlayer: 'flèche vers la droite à fût pointillé', DeepL: 'flèche vers la droite avec tige en pointillé') - - "⤒": [t: "flèche jusqu'à taquet vers le haut"] # 0x2912 (en: 'upwards arrow to bar') - - "⤓": [t: "flèche jusqu'à taquet vers le bas"] # 0x2913 (en: 'downwards arrow to bar') - - "⤔": [t: "flèche empennée vers la droite barrée verticalement"] # 0x2914 (en: 'rightwards arrow with tail and vertical stroke', DeepL: 'flèche vers la droite avec queue et trait vertical') - - "⤕": [t: "flèche empennée vers la droite barrée deux fois verticalement"] # 0x2915 (en: 'rightwards arrow with tail and double vertical stroke', DeepL: 'flèche vers la droite avec empennage et double trait vertical') - - "⤖": [t: "flèche empennée à deux têtes droite"] # 0x2916 (en: 'rightwards two headed arrow with tail', MathPlayer: 'flèche empennée à deux têtes vers la droite', DeepL: 'flèche bicéphale droite avec empennage') - - "⤗": [t: "flèche empennée à deux têtes vers la droite barrée verticalement"] # 0x2917 (en: 'rightwards two headed arrow with tail with vertical stroke', DeepL: 'flèche à deux têtes vers la droite avec empennage et trait vertical') - - "⤘": [t: "flèche empennée à deux têtes vers la droite barrée deux fois verticalement"] # 0x2918 (en: 'rightwards two headed arrow with tail with double vertical stroke', DeepL: 'flèche à deux têtes vers la droite avec empennage et double trait vertical') - - "⤙": [t: "empenne gauche"] # 0x2919 (en: 'leftwards arrow tail', MathPlayer: 'empenne vers la gauche', DeepL: 'vers la gauche queue de la flèche') - - "⤚": [t: "empenne vers la droite"] # 0x291a (en: 'rightwards arrow tail', DeepL: 'flèche vers la droite') - - "⤛": [t: "double empenne gauche"] # 0x291b (en: 'leftwards double arrow tail', MathPlayer: 'double empenne vers la gauche', DeepL: 'vers la gauche double flèche en queue') - - "⤜": [t: "double empenne droite"] # 0x291c (en: 'rightwards double arrow tail', MathPlayer: 'double empenne vers la droite', DeepL: 'vers la droite double flèche en queue') - - "⤝": [t: "flèche vers un losange noir à gauche"] # 0x291d (en: 'leftwards arrow to filled diamond') - - "⤞": [t: "flèche vers un losange noir à droite"] # 0x291e (en: 'rightwards arrow to filled diamond') - - "⤟": [t: "flèche d'un taquet vers un losange noir à gauche"] # 0x291f (en: 'leftwards arrow from bar to filled diamond') - - "⤠": [t: "flèche d'un taquet vers un losange noir à droite"] # 0x2920 (en: 'rightwards arrow from bar to filled diamond') - - "⤡": [t: "flèche nord ouest et sud est"] # 0x2921 (en: 'north west and south east arrow', DeepL: 'flèche nord-ouest et sud-est') - - "⤢": [t: "flèche nord est et sud ouest"] # 0x2922 (en: 'north east and south west arrow', DeepL: 'flèche nord-est et sud-ouest') - - "⤣": [t: "flèche nord ouest à crochet"] # 0x2923 (en: 'north west arrow with hook', MathPlayer: 'flèche nord-ouest à crochet', DeepL: 'flèche nord-ouest avec crochet') - - "⤤": [t: "flèche nord est à crochet"] # 0x2924 (en: 'north east arrow with hook', MathPlayer: 'flèche nord-est à crochet', DeepL: 'flèche nord-est avec crochet') - - "⤥": [t: "flèche sud est à crochet"] # 0x2925 (en: 'south east arrow with hook', MathPlayer: 'flèche sud-est à crochet', DeepL: 'flèche sud-est avec crochet') - - "⤦": [t: "flèche sud ouest à crochet"] # 0x2926 (en: 'south west arrow with hook', MathPlayer: 'flèche sud-ouest à crochet', DeepL: 'flèche sud-ouest avec crochet') - - "⤧": [t: "flèches nord ouest et nord est"] # 0x2927 (en: 'north west arrow and north east arrow', MathPlayer: 'flèches nord-ouest et nord-est', DeepL: 'flèche nord-ouest et flèche nord-est') - - "⤨": [t: "flèches nord est et sud est"] # 0x2928 (en: 'north east arrow and south east arrow', MathPlayer: 'flèches nord-est et sud-est', DeepL: 'flèche nord-est et flèche sud-est') - - "⤩": [t: "flèches sud est et sud ouest"] # 0x2929 (en: 'south east arrow and south west arrow', MathPlayer: 'flèches sud-est et sud-ouest', DeepL: 'flèche sud-est et flèche sud-ouest') - - "⤪": [t: "flèches sud ouest et nord ouest"] # 0x292a (en: 'south west arrow and north west arrow', MathPlayer: 'flèches sud-ouest et nord-ouest', DeepL: 'flèche sud-ouest et flèche nord-ouest') - - "⤫": [t: "diagonale montante sur diagonale descendante"] # 0x292b (en: 'rising diagonal crossing falling diagonal', DeepL: 'diagonale ascendante croisant une diagonale descendante') - - "⤬": [t: "diagonale descendante sur diagonale montante"] # 0x292c (en: 'falling diagonal crossing rising diagonal', DeepL: 'diagonale descendante croisant la diagonale montante') - - "⤭": [t: "flèche sud est sur flèche nord est"] # 0x292d (en: 'south east arrow crossing north east arrow', DeepL: 'flèche sud-est croisant la flèche nord-est') - - "⤮": [t: "flèche nord est sur flèche sud est"] # 0x292e (en: 'north east arrow crossing south east arrow', DeepL: 'flèche nord-est croisant la flèche sud-est') - - "⤯": [t: "diagonale descendante sur flèche nord est"] # 0x292f (en: 'falling diagonal crossing north east arrow', DeepL: 'flèche diagonale tombante traversant le nord-est') - - "⤰": [t: "diagonale montante sur flèche sud est"] # 0x2930 (en: 'rising diagonal crossing south east arrow', DeepL: 'diagonale montante croisant la flèche sud-est') - - "⤱": [t: "flèche nord est sur flèche nord ouest"] # 0x2931 (en: 'north east arrow crossing north west arrow', DeepL: 'flèche nord-est croisant la flèche nord-ouest') - - "⤲": [t: "flèche nord ouest sur flèche nord est"] # 0x2932 (en: 'north west arrow crossing north east arrow', DeepL: 'flèche nord-ouest croisant la flèche nord-est') - - "⤳": [t: "flèche bossue droite"] # 0x2933 (en: 'wave arrow pointing directly right', MathPlayer: 'flèche vers la droite bossue', DeepL: 'flèche ondulée pointant directement vers la droite') - - "⤴": [t: "flèche courbe vers la droite puis le haut"] # 0x2934 (en: 'arrow pointing rightwards then curving upwards', DeepL: 'flèche pointant vers la droite puis s'incurvant vers le haut') - - "⤵": [t: "flèche courbe vers la droite puis le bas"] # 0x2935 (en: 'arrow pointing rightwards then curving downwards') - - "⤶": [t: "flèche courbe vers le bas puis la gauche"] # 0x2936 (en: 'arrow pointing downwards then curving leftwards') - - "⤷": [t: "flèche courbe vers le bas puis la droite"] # 0x2937 (en: 'arrow pointing downwards then curving rightwards') - - "⤸": [t: "côté droit d'arc fléché sens horaire"] # 0x2938 (en: 'right side arc clockwise arrow') - - "⤹": [t: "côté gauche d'arc fléché sens antihoraire"] # 0x2939 (en: 'left side arc anticlockwise arrow') - - "⤺": [t: "arc supérieur fléché sens antihoraire"] # 0x293a (en: 'top arc anticlockwise arrow', DeepL: 'arc supérieur flèche antihoraire') - - "⤻": [t: "arc inférieur fléché sens antihoraire"] # 0x293b (en: 'bottom arc anticlockwise arrow', DeepL: 'flèche du bas dans le sens inverse des aiguilles d'une montre') - - "⤼": [t: "arc fléché sens horaire et signe moins souscrit"] # 0x293c (en: 'top arc clockwise arrow with minus') - - "⤽": [t: "arc fléché sens antihoraire et signe plus souscrit"] # 0x293d (en: 'top arc anticlockwise arrow with plus') - - "⤾": [t: "demi cercle fléché inférieur droit sens horaire"] # 0x293e (en: 'lower right semicircular clockwise arrow', DeepL: 'flèche semi-circulaire en bas à droite dans le sens des aiguilles d'une montre') - - "⤿": [t: "demi cercle fléché inférieur gauche sens antihoraire"] # 0x293f (en: 'lower left semicircular anticlockwise arrow', DeepL: 'flèche semi-circulaire en bas à gauche dans le sens inverse des aiguilles d'une montre') - - "⥀": [t: "cercle fléché sens antihoraire"] # 0x2940 (en: 'anticlockwise closed circle arrow', DeepL: 'flèche circulaire fermée dans le sens inverse des aiguilles d'une montre') - - "⥁": [t: "cercle fléché sens horaire"] # 0x2941 (en: 'clockwise closed circle arrow', DeepL: 'flèche de cercle fermé dans le sens des aiguilles d'une montre') - - "⥂": [t: "flèche vers la droite surmontant fléchette vers la gauche"] # 0x2942 (en: 'rightwards arrow above short leftwards arrow', DeepL: 'flèche vers la droite au-dessus d'une courte flèche vers la gauche') - - "⥃": [t: "flèche vers la gauche surmontant fléchette vers la droite"] # 0x2943 (en: 'leftwards arrow above short rightwards arrow', DeepL: 'flèche gauche au-dessus d'une courte flèche droite') - - "⥄": [t: "fléchette vers la droite surmontant flèche vers la gauche"] # 0x2944 (en: 'short rightwards arrow above leftwards arrow', DeepL: 'courte flèche vers la droite au-dessus de la flèche vers la gauche') - - "⥅": [t: "flèche droite surmontant signe moins"] # 0x2945 (en: 'rightwards arrow with plus below', MathPlayer: 'flèche vers la droite surmontant signe moins', DeepL: 'flèche vers la droite avec le plus en dessous') - - "⥆": [t: "flèche vers la gauche surmontant signe plus"] # 0x2946 (en: 'leftwards arrow with plus below', DeepL: 'flèche vers la gauche avec le plus en dessous') - - "⥇": [t: "flèche vers la droite au travers un x"] # 0x2947 (en: 'rightwards arrow through x', DeepL: 'flèche vers la droite à travers le x') - - "⥈": [t: "petit cercle traversé d'une flèche bilatérale"] # 0x2948 (en: 'left right arrow through circle') - - "⥉": [t: "petit cercle surmonté d'une flèche montante à deux têtes"] # 0x2949 (en: 'upwards two headed arrow from circle') - - "⥊": [t: "javelot à dents gauche dressée et droite baissée"] # 0x294a (en: 'left barb up right barb down harpoon') - - "⥋": [t: "javelot à dents gauche baissée et droite dressée"] # 0x294b (en: 'left barb down right barb up harpoon') - - "⥌": [t: "crampon à dents supérieure droite et inférieure gauche"] # 0x294c (en: 'up barb right down barb left harpoon', DeepL: 'barbe en haut à droite barbe en bas à gauche harpon') - - "⥍": [t: "crampon à dents supérieure gauche et inférieure droite"] # 0x294d (en: 'up barb left down barb right harpoon', DeepL: 'barbe en haut à gauche barbe en bas à droite harpon') - - "⥎": [t: "javelot à dents droite et gauche dressées"] # 0x294e (en: 'left barb up right barb up harpoon') - - "⥏": [t: "javelot à dents supérieure et inférieure droites"] # 0x294f (en: 'up barb right down barb right harpoon') - - "⥐": [t: "javelot à dents droite et gauche baissées"] # 0x2950 (en: 'left barb down right barb down harpoon') - - "⥑": [t: "javelot à dents supérieure et inférieure gauches"] # 0x2951 (en: 'up barb left down barb left harpoon') - - "⥒": [t: "harpon gauche à dent dressée contre taquet"] # 0x2952 (en: 'leftwards harpoon with barb up to bar', MathPlayer: 'harpon vers la gauche à dent dressée contre taquet', DeepL: 'harpon gauche avec ardillon jusqu'à l'ardillon') - - "⥓": [t: "harpon droit à dent dressée contre taquet"] # 0x2953 (en: 'rightwards harpoon with barb up to bar', MathPlayer: 'harpon vers la droite à dent dressée contre taquet', DeepL: 'harpon droit avec ardillon jusqu'à l'ardillon') - - "⥔": [t: "harpon vers le haut à dent droite contre taquet"] # 0x2954 (en: 'upwards harpoon with barb right to bar', MathPlayer: 'harpon vers le haut à dent vers la droite contre taquet', DeepL: 'harpon vers le haut avec ardillon de la droite vers l'ardillon') - - "⥕": [t: "harpon vers le bas à dent droite contre taquet"] # 0x2955 (en: 'downwards harpoon with barb right to bar', MathPlayer: 'harpon vers le bas à dent vers la droite contre taquet', DeepL: 'harpon vers le bas avec barbe à droite de la barre') - - "⥖": [t: "harpon gauche à dent baissée contre taquet"] # 0x2956 (en: 'leftwards harpoon with barb down to bar', MathPlayer: 'harpon vers la gauche à dent baissée contre taquet', DeepL: 'vers la gauche harpon avec ardillon jusqu'à la barre') - - "⥗": [t: "harpon droit à dent baissée contre taquet"] # 0x2957 (en: 'rightwards harpoon with barb down to bar', MathPlayer: 'harpon vers la droite à dent baissée contre taquet', DeepL: 'harpon vers la droite avec ardillon vers le bas jusqu'à la barre') - - "⥘": [t: "harpon vers le haut à dent gauche contre taquet"] # 0x2958 (en: 'upwards harpoon with barb left to bar', MathPlayer: 'harpon vers le haut à dent vers la gauche contre taquet', DeepL: 'harpon vers le haut avec ardillon à gauche vers la barre') - - "⥙": [t: "harpon vers le bas à dent gauche contre taquet"] # 0x2959 (en: 'downwards harpoon with barb left to bar', MathPlayer: 'harpon vers le bas à dent vers la gauche contre taquet', DeepL: 'harpon descendant avec ardillon gauche à l'ardillon') - - "⥚": [t: "harpon gauche à dent dressée depuis taquet"] # 0x295a (en: 'leftwards harpoon with barb up from bar', MathPlayer: 'harpon vers la gauche appuyé à dent dressée', DeepL: 'harpon vers la gauche avec ardillon en haut de la barre') - - "⥛": [t: "harpon droit à dent dressée depuis taquet"] # 0x295b (en: 'rightwards harpoon with barb up from bar', MathPlayer: 'harpon vers la droite appuyé à dent dressée', DeepL: 'vers la droite harpon avec ardillon en haut de la barre') - - "⥜": [t: "harpon vers le haut à dent droite depuis taquet"] # 0x295c (en: 'upwards harpoon with barb right from bar', MathPlayer: 'harpon vers le haut appuyé à dent vers la droite', DeepL: 'harpon vers le haut avec ardillon vers la droite') - - "⥝": [t: "harpon vers le bas à dent droite depuis taquet"] # 0x295d (en: 'downwards harpoon with barb right from bar', MathPlayer: 'harpon vers le bas appuyé à dent vers la droite', DeepL: 'harpon avec ardillon vers le bas à droite de la barre') - - "⥞": [t: "harpon gauche à dent baissée depuis taquet"] # 0x295e (en: 'leftwards harpoon with barb down from bar', MathPlayer: 'harpon vers la gauche appuyé à dent baissée', DeepL: 'vers la gauche harpon avec ardillon en bas de la barre') - - "⥟": [t: "harpon droit à dent baissée depuis taquet"] # 0x295f (en: 'rightwards harpoon with barb down from bar', MathPlayer: 'harpon vers la droite appuyé à dent baissée', DeepL: 'harpon à droite avec ardillon descendant de la barre') - - "⥠": [t: "harpon vers le haut à dent gauche depuis taquet"] # 0x2960 (en: 'upwards harpoon with barb left from bar', MathPlayer: 'harpon vers le haut appuyé à dent vers la gauche', DeepL: 'harpon vers le haut avec ardillon vers la gauche à partir de la barre') - - "⥡": [t: "harpon vers le bas à dent gauche depuis taquet"] # 0x2961 (en: 'downwards harpoon with barb left from bar', MathPlayer: 'harpon vers le bas appuyé à dent vers la gauche', DeepL: 'harpon vers le bas avec ardillon à gauche de la barre') - - "⥢": [t: "harpon gauche à dent dressée sur harpon gauche à dent baissée"] # 0x2962 (en: 'leftwards harpoon with barb up above leftwards harpoon with barb down', MathPlayer: 'harpon vers la gauche à dent dressée par-dessus harpon vers la gauche à dent baissée', DeepL: 'vers la gauche harpon avec ardillon vers le haut au-dessus vers la gauche harpon avec ardillon vers le bas') - - "⥣": [t: "harpon vers le haut à dent gauche à côté de harpon vers le haut à dent droite"] # 0x2963 (en: 'upwards harpoon with barb left beside upwards harpoon with barb right', MathPlayer: 'harpon vers le haut à dent vers la gauche à côté de harpon vers le haut à dent vers la droite', DeepL: 'harpon vers le haut avec ardillon à gauche à côté du harpon vers le haut avec ardillon à droite') - - "⥤": [t: "harpon droit à dent dressée par dessus harpon droit à dent baissée"] # 0x2964 (en: 'rightwards harpoon with barb up above rightwards harpoon with barb down', MathPlayer: 'harpon vers la droite à dent dressée par-dessus harpon vers la droite à dent baissée', DeepL: 'vers la droite harpon avec ardillon en haut vers la droite harpon avec ardillon en bas') - - "⥥": [t: "harpon vers le bas à dent gauche à côté de harpon vers le bas à dent droite"] # 0x2965 (en: 'downwards harpoon with barb left beside downwards harpoon with barb right', MathPlayer: 'harpon vers le bas à dent vers la gauche à côté de harpon vers le bas à dent vers la droite', DeepL: 'harpon descendant avec ardillon gauche à côté de harpon descendant avec ardillon droit') - - "⥦": [t: "harpon à dent gauche dressée par dessus harpon à dent droite dressée"] # 0x2966 (en: 'leftwards harpoon with barb up above rightwards harpoon with barb up', MathPlayer: 'harpon à dent gauche dressée par-dessus harpon à dent droite dressée', DeepL: 'harpon gauche avec ardillon vers le haut au-dessus du harpon droit avec ardillon vers le haut') - - "⥧": [t: "harpon à dent gauche baissée par dessus harpon à dent droite baissée"] # 0x2967 (en: 'leftwards harpoon with barb down above rightwards harpoon with barb down', MathPlayer: 'harpon à dent gauche baissée par-dessus harpon à dent droite baissée', DeepL: 'vers la gauche harpon avec ardillon vers le bas au-dessus harpon vers la droite avec ardillon vers le bas') - - "⥨": [t: "harpon à dent droite dressée par dessus harpon à dent gauche dressée"] # 0x2968 (en: 'rightwards harpoon with barb up above leftwards harpoon with barb up', MathPlayer: 'harpon à dent droite dressée par-dessus harpon à dent gauche dressée', DeepL: 'vers la droite harpon avec ardillon en haut vers la gauche harpon avec ardillon en haut') - - "⥩": [t: "harpon à dent droite baissée par dessus harpon à dent gauche baissée"] # 0x2969 (en: 'rightwards harpoon with barb down above leftwards harpoon with barb down', MathPlayer: 'harpon à dent droite baissée par-dessus harpon à dent gauche baissée', DeepL: 'vers la droite harpon avec ardillon vers le bas au-dessus du harpon vers la gauche avec ardillon vers le bas') - - "⥪": [t: "harpon à dent gauche dressée par dessus long trait"] # 0x296a (en: 'leftwards harpoon with barb up above long dash', MathPlayer: 'harpon à dent gauche dressée par-dessus long trait', DeepL: 'vers la gauche harpon avec ardillon au-dessus du tiret long') - - "⥫": [t: "long trait par dessus harpon à dent gauche baissée"] # 0x296b (en: 'leftwards harpoon with barb down below long dash', MathPlayer: 'long trait par-dessus harpon à dent gauche baissée', DeepL: 'vers la gauche harpon avec ardillon sous le tiret long') - - "⥬": [t: "harpon à dent droite dressée par dessus long trait"] # 0x296c (en: 'rightwards harpoon with barb up above long dash', MathPlayer: 'harpon à dent droite dressée par-dessus long trait', DeepL: 'harpon vers la droite avec ardillon au-dessus du tiret long') - - "⥭": [t: "long trait par dessus harpon à dent droite baissée"] # 0x296d (en: 'rightwards harpoon with barb down below long dash', MathPlayer: 'long trait par-dessus harpon à dent droite baissée', DeepL: 'harpon vers la droite avec ardillon vers le bas sous le tiret long') - - "⥮": [t: "harpon vers le haut à dent gauche à côté de harpon vers le bas à dent droite"] # 0x296e (en: 'upwards harpoon with barb left beside downwards harpoon with barb right', MathPlayer: 'harpon vers le haut à dent vers la gauche à côté de harpon vers le bas à dent vers la droite', DeepL: 'harpon vers le haut avec ardillon à gauche à côté du harpon vers le bas avec ardillon à droite') - - "⥯": [t: "harpon vers le bas à dent gauche à côté de harpon vers le haut à dent droite"] # 0x296f (en: 'downwards harpoon with barb left beside upwards harpoon with barb right', MathPlayer: 'harpon vers le bas à dent vers la gauche à côté de harpon vers le haut à dent vers la droite', DeepL: 'harpon vers le bas avec ardillon à gauche à côté du harpon vers le haut avec ardillon à droite') - - "⥰": [t: "flèche en épingle à cheveu droite"] # 0x2970 (en: 'right double arrow with rounded head', MathPlayer: 'flèche en épingle à cheveu vers la droite', DeepL: 'flèche double droite avec tête arrondie') - - "⥱": [t: "flèche droite surmontée d'un égal"] # 0x2971 (en: 'equals above rightwards arrow', MathPlayer: 'flèche vers la droite surmontée d'un égal', DeepL: 'égal au-dessus de la flèche vers la droite') - - "⥲": [t: "flèche droite surmontée d'un tilde"] # 0x2972 (en: 'tilde operator above rightwards arrow', MathPlayer: 'flèche vers la droite surmontée d'un tilde', DeepL: 'opérateur tilde au-dessus de la flèche vers la droite') - - "⥳": [t: "tilde surmonté d'une flèche gauche"] # 0x2973 (en: 'leftwards arrow above tilde operator', MathPlayer: 'tilde surmonté d'une flèche vers la gauche', DeepL: 'flèche vers la gauche au-dessus de l'opérateur tilde') - - "⥴": [t: "tilde surmonté d'une flèche droite"] # 0x2974 (en: 'rightwards arrow above tilde operator', MathPlayer: 'tilde surmonté d'une flèche vers la droite', DeepL: 'flèche vers la droite au-dessus de l'opérateur tilde') - - "⥵": [t: "presque égal à surmonté d'une flèche droite"] # 0x2975 (en: 'rightwards arrow above almost equal to', MathPlayer: 'presque égal à surmonté d'une flèche vers la droite', DeepL: 'flèche vers la droite au-dessus presque égale à') - - "⥶": [t: "inférieur à surmonté d'une flèche gauche"] # 0x2976 (en: 'less than above leftwards arrow', MathPlayer: 'inférieur à surmonté d'une flèche vers la gauche', DeepL: 'moins que au-dessus de la flèche gauche') - - "⥷": [t: "flèche vers la gauche à travers un inférieur à"] # 0x2977 (en: 'leftwards arrow through less than', DeepL: 'flèche vers la gauche à travers moins que') - - "⥸": [t: "flèche droite surmontée d'un supérieur à"] # 0x2978 (en: 'greater than above rightwards arrow', MathPlayer: 'flèche vers la droite surmontée d'un supérieur à', DeepL: 'plus grand que plus haut flèche vers la droite') - - "⥹": [t: "flèche droite surmontée d'un sous ensemble de"] # 0x2979 (en: 'subset above rightwards arrow', MathPlayer: 'flèche vers la droite surmontée d'un sous-ensemble de', DeepL: 'sous-ensemble au-dessus de la flèche vers la droite') - - "⥺": [t: "flèche vers la gauche au travers d'un sous ensemble de"] # 0x297a (en: 'leftwards arrow through subset', DeepL: 'flèche vers la gauche à travers un sous-ensemble') - - "⥻": [t: "flèche gauche surmontée d'un sur ensemble de"] # 0x297b (en: 'superset above leftwards arrow', MathPlayer: 'flèche vers la gauche surmontée d'un sur-ensemble de', DeepL: 'superposition au-dessus de la flèche vers la gauche') - - "⥼": [t: "ancre gauche"] # 0x297c (en: 'left fish tail', MathPlayer: 'ancre vers la gauche', DeepL: 'queue de poisson gauche') - - "⥽": [t: "ancre droite"] # 0x297d (en: 'right fish tail', MathPlayer: 'ancre vers la droite', DeepL: 'queue de poisson droite') - - "⥾": [t: "ancre vers le haut"] # 0x297e (en: 'up fish tail') - - "⥿": [t: "ancre vers le bas"] # 0x297f (en: 'down fish tail') - - "⦀": [t: "délimiteur triple barre verticale"] # 0x2980 (en: 'triple vertical bar delimiter', DeepL: 'triple barre verticale de délimitation') - - "⦁": [t: "boulet"] # 0x2981 (en: 'z notation spot', DeepL: 'z notation spot') - - "⦂": [t: "deux points de la notation z"] # 0x2982 (en: 'z notation type colon', DeepL: 'z notation type colon') - - "⦃": [t: "accolade gauche ajourée"] # 0x2983 (en: 'left white brace', DeepL: 'accolade blanche vers la gauche') - - "⦄": [t: "accolade droite ajourée"] # 0x2984 (en: 'right white brace', DeepL: 'accolade blanche à droite') - - "⦅": [t: "parenthèse gauche ajourée"] # 0x2985 (en: 'left white parenthesis') - - "⦆": [t: "parenthèse droite ajourée"] # 0x2986 (en: 'right white parenthesis') - - "⦇": [t: "parenthèse image de gauche en notation z"] # 0x2987 (en: 'z notation left image bracket', DeepL: 'z notation parenthèse gauche de l'image') - - "⦈": [t: "parenthèse image de droite en notation z"] # 0x2988 (en: 'z notation right image bracket', DeepL: 'z notation crochet droit de l'image') - - "⦉": [t: "z notation left binding bracket"] # 0x2989 - - "⦊": [t: "z notation right binding bracket"] # 0x298a - - "⦋": [t: "crochet gauche avec barre souscrite"] # 0x298b (en: 'left square bracket with underbar') - - "⦌": [t: "crochet droit avec barre souscrite"] # 0x298c (en: 'right square bracket with underbar') - - "⦍": [t: "crochet gauche avec trait dans le coin supérieur"] # 0x298d (en: 'left square bracket with tick in top corner') - - "⦎": [t: "crochet droit avec trait dans le coin inférieur"] # 0x298e (en: 'right square bracket with tick in bottom corner') - - "⦏": [t: "crochet gauche avec trait dans le coin inférieur"] # 0x298f (en: 'left square bracket with tick in bottom corner') - - "⦐": [t: "crochet droit avec trait dans le coin supérieur"] # 0x2990 (en: 'right square bracket with tick in top corner') - - "⦑": [t: "chevron gauche pointé"] # 0x2991 (en: 'left angle bracket with dot') - - "⦒": [t: "chevron droit pointé"] # 0x2992 (en: 'right angle bracket with dot') - - "⦓": [t: "parenthèse arc gauche et inférieur à"] # 0x2993 (en: 'left arc less than bracket') - - "⦔": [t: "parenthèse arc droite et supérieur à"] # 0x2994 (en: 'right arc greater than bracket') - - "⦕": [t: "parenthèse double arc droite et supérieur à"] # 0x2995 (en: 'double left arc greater than bracket') - - "⦖": [t: "parenthèse double arc gauche et inférieur à"] # 0x2996 (en: 'double right arc less than bracket') - - "⦗": [t: "crochet noir gauche en écaille"] # 0x2997 (en: 'left black tortoise shell bracket', DeepL: 'équerre noire gauche en écaille de tortue') - - "⦘": [t: "crochet noir droite en écaille"] # 0x2998 (en: 'right black tortoise shell bracket', DeepL: 'équerre noire droite en écaille de tortue') - - "⦙": [t: "clôture pointillée"] # 0x2999 (en: 'dotted fence', DeepL: 'clôture en pointillés') - - "⦚": [t: "ligne verticale en zigzag"] # 0x299a (en: 'vertical zigzag line') - - "⦛": [t: "angle mesuré s'ouvrant vers la gauche"] # 0x299b (en: 'measured angle opening left', DeepL: 'angle mesuré s'ouvrant à gauche') - - "⦜": [t: "variante d'angle avec carré"] # 0x299c (en: 'right angle variant with square', DeepL: 'variante d'angle droit avec carré') - - "⦝": [t: "angle droit mesuré pointé"] # 0x299d (en: 'measured right angle with dot') - - "⦞": [t: "angle avec s inscrit"] # 0x299e (en: 'angle with s inside', DeepL: 'angle avec s à l'intérieur') - - "⦟": [t: "angle aigu"] # 0x299f (en: 'acute angle') - - "⦠": [t: "angle sphérique s'ouvrant vers la gauche"] # 0x29a0 (en: 'spherical angle opening left', DeepL: 'angle sphérique ouverture à gauche') - - "⦡": [t: "angle sphérique s'ouvrant vers le haut"] # 0x29a1 (en: 'spherical angle opening up', DeepL: 'angle sphérique ouverture') - - "⦢": [t: "angle culbuté"] # 0x29a2 (en: 'turned angle', DeepL: 'angle tourné') - - "⦣": [t: "angle réfléchi"] # 0x29a3 (en: 'reversed angle', DeepL: 'angle inversé') - - "⦤": [t: "angle à barre souscrite"] # 0x29a4 (en: 'angle with underbar') - - "⦥": [t: "angle à barre souscrite réfléchie"] # 0x29a5 (en: 'reversed angle with underbar') - - "⦦": [t: "angle oblique s'ouvrant vers le haut"] # 0x29a6 (en: 'oblique angle opening up') - - "⦧": [t: "angle oblique s'ouvrant vers le bas"] # 0x29a7 (en: 'oblique angle opening down') - - "⦨": [t: "angle calculé à bras vers l'est et bras fléché vers le nord est"] # 0x29a8 (en: 'measured angle with open arm ending in arrow pointing up and to the right', MathPlayer: 'angle calculé à bras vers l'est et bras fléché vers le nord-est', DeepL: 'angle mesuré avec bras ouvert se terminant par une flèche pointant vers le haut et la droite') - - "⦩": [t: "angle calculé à bras vers l'ouest et bras fléché vers le nord ouest"] # 0x29a9 (en: 'measured angle with open arm ending in arrow pointing up and to the left', MathPlayer: 'angle calculé à bras vers l'ouest et bras fléché vers le nord-ouest', DeepL: 'angle mesuré avec bras ouvert se terminant par une flèche pointant vers le haut et la gauche') - - "⦪": [t: "angle calculé à bras vers l'est et bras fléché vers le sud est"] # 0x29aa (en: 'measured angle with open arm ending in arrow pointing down and to the right', MathPlayer: 'angle calculé à bras vers l'est et bras fléché vers le sud-est', DeepL: 'angle mesuré avec un bras ouvert se terminant par une flèche pointant vers le bas et la droite') - - "⦫": [t: "angle calculé à bras vers l'ouest et bras fléché vers le sud ouest"] # 0x29ab (en: 'measured angle with open arm ending in arrow pointing down and to the left', MathPlayer: 'angle calculé à bras vers l'ouest et bras fléché vers le sud-ouest', DeepL: 'angle mesuré avec un bras ouvert se terminant par une flèche pointant vers le bas et la gauche') - - "⦬": [t: "angle calculé à bras vers le nord et bras fléché vers le nord est"] # 0x29ac (en: 'measured angle with open arm ending in arrow pointing right and up', MathPlayer: 'angle calculé à bras vers le nord et bras fléché vers le nord-est', DeepL: 'angle mesuré avec bras ouvert se terminant par une flèche pointant vers la droite et le haut') - - "⦭": [t: "angle calculé à bras vers le nord et bras fléché vers le nord ouest"] # 0x29ad (en: 'measured angle with open arm ending in arrow pointing left and up', MathPlayer: 'angle calculé à bras vers le nord et bras fléché vers le nord-ouest', DeepL: 'angle mesuré avec bras ouvert se terminant par une flèche pointant vers la gauche et le haut') - - "⦮": [t: "angle calculé à bras vers le sud et bras fléché vers le sud est"] # 0x29ae (en: 'measured angle with open arm ending in arrow pointing right and down', MathPlayer: 'angle calculé à bras vers le sud et bras fléché vers le sud-est', DeepL: 'angle mesuré avec un bras ouvert se terminant par une flèche pointant vers la droite et le bas') - - "⦯": [t: "angle calculé à bras vers le sud et bras fléché vers le sud ouest"] # 0x29af (en: 'measured angle with open arm ending in arrow pointing left and down', MathPlayer: 'angle calculé à bras vers le sud et bras fléché vers le sud-ouest', DeepL: 'angle mesuré avec le bras ouvert se terminant par une flèche pointant vers la gauche et vers le bas') - - "⦰": [t: "ensemble vide réfléchi"] # 0x29b0 (en: 'reversed empty set') - - "⦱": [t: "ensemble vide barre en chef"] # 0x29b1 (en: 'empty set with overbar') - - "⦲": [t: "ensemble vide petit cercle en chef"] # 0x29b2 (en: 'empty set with small circle above') - - "⦳": [t: "ensemble vide flèche droite en chef"] # 0x29b3 (en: 'empty set with right arrow above') - - "⦴": [t: "ensemble vide flèche gauche en chef"] # 0x29b4 (en: 'empty set with left arrow above') - - "⦵": [t: "cercle à barre horizontale"] # 0x29b5 (en: 'circle with horizontal bar') - - "⦶": [t: "barre verticale cerclée"] # 0x29b6 (en: 'circled vertical bar') - - "⦷": [t: "parallèles cerclées"] # 0x29b7 (en: 'circled parallel') - - "⦸": [t: "barre oblique inversée cerclée"] # 0x29b8 (en: 'circled reverse solidus', DeepL: 'solidus inversé encerclé') - - "⦹": [t: "perpendiculaire cerclé"] # 0x29b9 (en: 'circled perpendicular') - - "⦺": [t: "cercle divisé par une barre horizontale et une barre verticale dans la moitié supérieure"] # 0x29ba (en: 'circled divided by horizontal bar and top half divided by vertical bar', DeepL: 'encerclé divisé par la barre horizontale et la moitié supérieure divisée par la barre verticale') - - "⦻": [t: "cercle superposé d'un x"] # 0x29bb (en: 'circle with superimposed x') - - "⦼": [t: "division pivoté en sens antihoraire cerclé"] # 0x29bc (en: 'circled anticlockwise rotated division sign', MathPlayer: 'signe division pivoté en sens antihoraire cerclé', DeepL: 'signe de division encerclé et tourné dans le sens inverse des aiguilles d'une montre') - - "⦽": [t: "cercle traversé d'une flèche montante"] # 0x29bd (en: 'up arrow through circle', DeepL: 'flèche vers le haut à travers un cercle') - - "⦾": [t: "puce blanche cerclée"] # 0x29be (en: 'circled white bullet') - - "⦿": [t: "puce cerclée"] # 0x29bf (en: 'circled bullet') - - "⧀": [t: "inférieur à cerclé"] # 0x29c0 (en: 'circled less than') - - "⧁": [t: "supérieur à cerclé"] # 0x29c1 (en: 'circled greater than') - - "⧂": [t: "cercle avec petit cercle à droite"] # 0x29c2 (en: 'circle with small circle to the right') - - "⧃": [t: "cercle avec deux petits traits horizontaux à droite"] # 0x29c3 (en: 'circle with two horizontal strokes to the right') - - "⧄": [t: "oblique encadrée"] # 0x29c4 (en: 'squared rising diagonal slash') - - "⧅": [t: "oblique inversée encadrée"] # 0x29c5 (en: 'squared falling diagonal slash') - - "⧆": [t: "astérisque encadré"] # 0x29c6 (en: 'squared asterisk', DeepL: 'astérisque carré') - - "⧇": [t: "petite cercle encadré"] # 0x29c7 (en: 'squared small circle', DeepL: 'carré petit cercle') - - "⧈": [t: "carré encadré"] # 0x29c8 (en: 'squared square', DeepL: 'square square') - - "⧉": [t: "carrés se chevauchant"] # 0x29c9 (en: 'two joined squares') - - "⧊": [t: "triangle pointé en chef"] # 0x29ca (en: 'triangle with dot above', DeepL: 'triangle surmonté d'un point') - - "⧋": [t: "triangle à barre souscrite"] # 0x29cb (en: 'triangle with underbar', DeepL: 'triangle avec barre inférieure') - - "⧌": [t: "s inscrit dans triangle"] # 0x29cc (en: 's in triangle', DeepL: 's dans le triangle') - - "⧍": [t: "triangle à empattements inférieurs"] # 0x29cd (en: 'triangle with serifs at bottom') - - "⧎": [t: "triangle droit par dessus triangle gauche"] # 0x29ce (en: 'right triangle above left triangle', MathPlayer: 'triangle droit par-dessus triangle gauche', DeepL: 'triangle droit au-dessus du triangle gauche') - - "⧏": [t: "triangle gauche à gauche d'une barre verticale"] # 0x29cf (en: 'left triangle beside vertical bar') - - "⧐": [t: "triangle droit à droite d'une barre verticale"] # 0x29d0 (en: 'vertical bar beside right triangle') - - "⧑": [t: "nœud papillon à aile gauche noire"] # 0x29d1 (en: 'bowtie with left half black', DeepL: 'nœud papillon avec la moitié gauche noire') - - "⧒": [t: "nœud papillon à aile droite noire"] # 0x29d2 (en: 'bowtie with right half black', DeepL: 'nœud papillon avec la moitié droite noire') - - "⧓": [t: "nœud papillon noir"] # 0x29d3 (en: 'black bowtie') - - "⧔": [t: "multiplication à moitié gauche noircie"] # 0x29d4 (en: 'times with left half black', DeepL: 'fois avec moitié noire à gauche') - - "⧕": [t: "multiplication à moitié droite noircie"] # 0x29d5 (en: 'times with right half black', DeepL: 'fois avec moitié droite noire') - - "⧖": [t: "sablier blanc"] # 0x29d6 (en: 'white hourglass') - - "⧗": [t: "sablier noir"] # 0x29d7 (en: 'black hourglass') - - "⧘": [t: "clôture dentelée gauche"] # 0x29d8 (en: 'left wiggly fence', DeepL: 'à gauche clôture ondulée') - - "⧙": [t: "clôture dentelée droite"] # 0x29d9 (en: 'right wiggly fence', DeepL: 'barrière ondulée droite') - - "⧚": [t: "double clôture dentelée gauche"] # 0x29da (en: 'left double wiggly fence') - - "⧛": [t: "right double wiggly fence"] # 0x29db - - "⧜": [t: "infini incomplet"] # 0x29dc (en: 'incomplete infinity') - - "⧝": [t: "lorgnon"] # 0x29dd (en: 'tie over infinity', DeepL: 'cravate sur l'infini') - - "⧞": [t: "infini nié par une barre verticale"] # 0x29de (en: 'infinity negated with vertical bar') - - "⧟": [t: "multijection à deux têtes"] # 0x29df (en: 'double-ended multimap', DeepL: 'multimap à double extrémité') - - "⧠": [t: "carré ombré"] # 0x29e0 (en: 'square with contoured outline', DeepL: 'carré avec contour contourné') - - "⧡": [t: "augmente avec"] # 0x29e1 (en: 'increases as', DeepL: 'augmente comme') - - "⧢": [t: "produit de permutation"] # 0x29e2 (en: 'shuffle product', DeepL: 'produit de mélange') - - "⧣": [t: "égale à et parallèle à incliné"] # 0x29e3 (en: 'equals sign and slanted parallel') - - "⧤": [t: "égale à et parallèle à incliné surmontés d'un tilde"] # 0x29e4 (en: 'equals sign and slanted parallel with tilde above') - - "⧥": [t: "identique à et parallèle à incliné"] # 0x29e5 (en: 'identical to and slanted parallel') - - "⧦": [t: "gleich stark"] # 0x29e6 - - "⧧": [t: "thermodynamique"] # 0x29e7 (en: 'thermodynamic') - - "⧨": [t: "triangle pointe vers le bas à moitié gauche noire"] # 0x29e8 (en: 'down pointing triangle with left half black', DeepL: 'triangle pointant vers le bas avec la moitié gauche noire') - - "⧩": [t: "triangle pointe vers le bas à moitié droite noire"] # 0x29e9 (en: 'down pointing triangle with right half black', DeepL: 'triangle pointant vers le bas avec la moitié droite noire') - - "⧪": [t: "losange noir à flèche vers le bas"] # 0x29ea (en: 'black diamond with down arrow', DeepL: 'losange noir avec flèche vers le bas') - - "⧫": [t: "losange fuselé noir"] # 0x29eb (en: 'black lozenge') - - "⧬": [t: "cercle blanc à flèche vers le bas"] # 0x29ec (en: 'white circle with down arrow', DeepL: 'cercle blanc avec flèche vers le bas') - - "⧭": [t: "cercle noir à flèche vers le bas"] # 0x29ed (en: 'black circle with down arrow', DeepL: 'cercle noir avec flèche vers le bas') - - "⧮": [t: "barre d'erreur à carré blanc"] # 0x29ee (en: 'error-barred white square', DeepL: 'carré blanc barré d'erreurs') - - "⧯": [t: "barre d'erreur à carré noir"] # 0x29ef (en: 'error-barred black square', DeepL: 'carré noir barré d'erreurs') - - "⧰": [t: "barre d'erreur à losange blanc"] # 0x29f0 (en: 'error-barred white diamond', DeepL: 'diamant blanc barré d'une erreur') - - "⧱": [t: "barre d'erreur à losange noir"] # 0x29f1 (en: 'error-barred black diamond', DeepL: 'diamant noir barré d'erreurs') - - "⧲": [t: "barre d'erreur à cercle blanc"] # 0x29f2 (en: 'error-barred white circle', DeepL: 'cercle blanc barré d'erreurs') - - "⧳": [t: "barre d'erreur à cercle noir"] # 0x29f3 (en: 'error-barred black circle', DeepL: 'cercle noir barré d'une erreur') - - "⧴": [t: "règle différée"] # 0x29f4 (en: 'rule-delayed') - - "⧵": [t: "opérateur barre oblique inversée"] # 0x29f5 (en: 'reverse solidus operator', DeepL: 'opérateur solidus inversé') - - "⧶": [t: "barre oblique avec barre en chef"] # 0x29f6 (en: 'solidus with overbar') - - "⧷": [t: "barre oblique inversée à traverse horizontale"] # 0x29f7 (en: 'reverse solidus with horizontal stroke', DeepL: 'solidus inversé avec trait horizontal') - - "⧸": [t: "grande barre oblique"] # 0x29f8 (en: 'big solidus', DeepL: 'grand solidus') - - "⧹": [t: "grande barre oblique inversée"] # 0x29f9 (en: 'big reverse solidus', DeepL: 'grand solidus inversé') - - "⧺": [t: "double plus"] # 0x29fa - - "⧻": [t: "triple plus"] # 0x29fb - - "⧼": [t: "chevron vers la gauche courbé"] # 0x29fc (en: 'left pointing curved angle bracket', DeepL: 'équerre courbe pointant vers la gauche') - - "⧽": [t: "chevron vers la droite courbé"] # 0x29fd (en: 'right pointing curved angle bracket', DeepL: 'équerre courbe pointant vers la droite') - - "⧾": [t: "tiny"] # 0x29fe (DeepL: 'minuscule') - - "⧿": [t: "miny"] # 0x29ff (DeepL: 'minime') - - "⨀": [t: "opérateur point cerclé n aire"] # 0x2a00 (en: 'circled dot operator', DeepL: 'point encerclé opérateur') - - "⨁": [t: "opérateur plus cerclé n aire"] # 0x2a01 (en: 'circled plus operator', DeepL: 'opérateur plus encerclé') - - "⨂": [t: "opérateur multiplié par cerclé n aire"] # 0x2a02 (en: 'circled times operator', DeepL: 'opérateur de temps encerclé') - - "⨃": [t: "opérateur union n aire pointé"] # 0x2a03 (en: 'union operator with dot', DeepL: 'opérateur d'union avec point') - - "⨄": [t: "opérateur union n aire avec plus"] # 0x2a04 (en: 'union operator with plus', DeepL: 'opérateur d'union avec plus') - - "⨅": [t: "opérateur intersection carré n aire"] # 0x2a05 (en: 'square intersection operator', DeepL: 'opérateur d'intersection carré') - - "⨆": [t: "opérateur union carré n aire"] # 0x2a06 (en: 'square union operator', DeepL: 'carré opérateur d'union') - - "⨇": [t: "opérateur deux et logiques"] # 0x2a07 (en: 'two logical and operator', DeepL: 'deux opérateur logique et') - - "⨈": [t: "opérateur deux ou logiques"] # 0x2a08 (en: 'two logical or operator', DeepL: 'deux opérateurs logiques ou opérateurs') - - "⨉": [t: "opérateur multiplié par n aire"] # 0x2a09 (en: 'times operator', DeepL: 'fois') - - "⨊": [t: "sommation modulo deux"] # 0x2a0a (en: 'modulo two sum', DeepL: 'somme modulo deux') - - "⨋": [t: "sommation avec intégrale"] # 0x2a0b (en: 'summation with integral') - - "⨌": [t: "intégrale quadruple"] # 0x2a0c (en: 'quadruple integral operator') - - "⨍": [t: "intégrale à partie finie"] # 0x2a0d (en: 'finite part integral') - - "⨎": [t: "intégrale à deux barres horizontales"] # 0x2a0e (en: 'integral with double stroke', DeepL: 'intégrale avec double trait') - - "⨏": [t: "moyenne d'intégrale à barre oblique inversée"] # 0x2a0f (en: 'integral average with slash', DeepL: 'moyenne intégrale avec barre oblique') - - "⨐": [t: "fonction de circulation"] # 0x2a10 (en: 'circulation function') - - "⨑": [t: "intégrale en sens positif"] # 0x2a11 (en: 'anticlockwise integration') - - "⨒": [t: "intégrale de ligne à chemin rectangulaire autour du pôle"] # 0x2a12 (en: 'line integration with rectangular path around pole') - - "⨓": [t: "intégrale de ligne à chemin semi circulaire autour du pôle"] # 0x2a13 (en: 'line integration with semicircular path around pole', MathPlayer: 'intégrale de ligne à chemin semi-circulaire autour du pôle', DeepL: 'intégration d'une ligne avec une trajectoire semi-circulaire autour du poteau') - - "⨔": [t: "intégrale de ligne évitant le pôle"] # 0x2a14 (en: 'line integration not including the pole') - - "⨕": [t: "intégrale autour d'un opérateur point"] # 0x2a15 (en: 'integral around a point operator') - - "⨖": [t: "intégrale quaternion"] # 0x2a16 (en: 'quaternion integral operator') - - "⨗": [t: "intégrale à crosse fléchée gauche"] # 0x2a17 (en: 'integral with leftwards arrow with hook', MathPlayer: 'intégrale à crosse fléchée vers la gauche', DeepL: 'intégrale avec flèche vers la gauche avec crochet') - - "⨘": [t: "intégrale au signe multiplié par"] # 0x2a18 (en: 'integral with times sign', DeepL: 'intégrale avec signe des temps') - - "⨙": [t: "intégrale à signe intersection"] # 0x2a19 (en: 'integral with intersection', DeepL: 'intégrale avec intersection') - - "⨚": [t: "intégrale à signe union"] # 0x2a1a (en: 'integral with union', DeepL: 'intégrale avec union') - - "⨛": [t: "intégrale à barre en chef"] # 0x2a1b (en: 'integral with overbar', DeepL: 'intégrale avec barre de dépassement') - - "⨜": [t: "intégrale à barre souscrite"] # 0x2a1c (en: 'integral with underbar', DeepL: 'intégrale avec barre inférieure') - - "⨝": [t: "jointure"] # 0x2a1d (en: 'join') - - "⨞": [t: "gros opérateur triangle gauche"] # 0x2a1e (en: 'large left triangle operator', DeepL: 'opérateur grand triangle gauche') - - "⨟": [t: "composition de schémas en notation z"] # 0x2a1f (en: 'z notation schema composition', DeepL: 'z notation composition du schéma') - - "⨠": [t: "tubage de schémas en notation z"] # 0x2a20 (en: 'z notation schema piping', DeepL: 'z notation schema piping') - - "⨡": [t: "projection de schémas en notation z"] # 0x2a21 (en: 'z notation schema projection', DeepL: 'z notation schema projection') - - "⨢": [t: "plus surmonté d'un petit cercle"] # 0x2a22 (en: 'plus sign with circle above') - - "⨣": [t: "plus surmonté d'un circonflexe"] # 0x2a23 (en: 'plus sign with circumflex accent above') - - "⨤": [t: "plus surmonté d'un tilde"] # 0x2a24 (en: 'plus sign with tilde above') - - "⨥": [t: "plus à point souscrit"] # 0x2a25 (en: 'plus sign with dot below') - - "⨦": [t: "plus à tilde souscrit"] # 0x2a26 (en: 'plus sign with tilde below') - - "⨧": [t: "plus à chiffre deux souscrit"] # 0x2a27 (en: 'plus sign with subscript two') - - "⨨": [t: "plus à triangle noir"] # 0x2a28 (en: 'plus sign with black triangle', DeepL: 'signe plus avec triangle noir') - - "⨩": [t: "moins surmonté d'une virgule"] # 0x2a29 (en: 'minus sign with comma above') - - "⨪": [t: "moins à point souscrit"] # 0x2a2a (en: 'minus sign with dot below') - - "⨫": [t: "moins à points descendants"] # 0x2a2b (en: 'minus sign with falling dots', DeepL: 'signe moins avec points de chute') - - "⨬": [t: "moins à points ascendants"] # 0x2a2c (en: 'minus sign with rising dots', DeepL: 'signe moins avec points ascendants') - - "⨭": [t: "plus dans demi cercle gauche"] # 0x2a2d (en: 'plus sign in left half circle', MathPlayer: 'plus dans demi-cercle gauche', DeepL: 'signe plus dans le demi-cercle gauche') - - "⨮": [t: "plus dans demi cercle droit"] # 0x2a2e (en: 'plus sign in right half circle', MathPlayer: 'plus dans demi-cercle droit', DeepL: 'signe plus dans le demi-cercle droit') + then: [T: "est"] # (en: 'is', DeepL translation) + - T: "sur ensemble ouvert" # (en: 'an open superset of', MathPlayer: 'sur-ensemble ouvert', DeepL: 'un surensemble ouvert de') + - "⟅": [T: "délimiteur de sac en s gauche"] # 0x27c5 (en: 'left s-shaped bag delimiter') + - "⟆": [T: "délimiteur de sac en s droite"] # 0x27c6 (en: 'right s-shaped bag delimiter') + - "⟇": [T: "ou avec point inscrit"] # 0x27c7 (en: 'or with dot inside') + - "⟈": [T: "sous ensemble précédé d'une barre oblique inversée"] # 0x27c8 (en: 'reverse solidus preceding subset', MathPlayer: 'sous-ensemble précédé d'une barre oblique inversée', DeepL: 'solidus inversé précédant le sous-ensemble') + - "⟉": [T: "sur ensemble suivi d'une barre oblique"] # 0x27c9 (en: 'superset preceding solidus', MathPlayer: 'sur-ensemble suivi d'une barre oblique', DeepL: 'sur-ensemble précédant le solidus') + - "⟊": [T: "barre verticale À une traverse"] # 0x27ca (en: 'vertical bar with horizontal stroke') + - "⟋": [T: "diagonale mathématique ascendante"] # 0x27cb (en: 'mathematical rising diagonal', DeepL: 'diagonale ascendante mathématique') + - "⟌": [T: "grande division"] # 0x27cc (en: 'long division') + - "⟍": [T: "diagonale mathématique descendante"] # 0x27cd (en: 'mathematical falling diagonal', DeepL: 'diagonale descendante mathématique') + - "⟎": [T: "et logique encadré"] # 0x27ce (en: 'squared logical and', DeepL: 'carré logique et') + - "⟏": [T: "ou logique encadré"] # 0x27cf (en: 'squared logical or', DeepL: 'carré logique ou') + - "⟐": [T: "losange blanc à point centré"] # 0x27d0 (en: 'white diamond with centered dot', DeepL: 'diamant blanc avec point centré') + - "⟑": [T: "et pointé"] # 0x27d1 (en: 'and with dot') + - "⟒": [T: "appartient à ouvert vers le haut"] # 0x27d2 (en: 'element of opening upwards') + - "⟓": [T: "coin inférieur droit pointé"] # 0x27d3 (en: 'lower right corner with dot') + - "⟔": [T: "coin supérieur gauche pointé"] # 0x27d4 (en: 'upper left corner with dot') + - "⟕": [T: "jointure externe gauche"] # 0x27d5 (en: 'left outer join') + - "⟖": [T: "jointure externe droite"] # 0x27d6 (en: 'right outer join') + - "⟗": [T: "jointure externe complète"] # 0x27d7 (en: 'full outer join') + - "⟘": [T: "grand taquet vers le haut"] # 0x27d8 (en: 'large up tack') + - "⟙": [T: "grand taquet vers le bas"] # 0x27d9 (en: 'large down tack') + - "⟚": [T: "double tourniquet bilatéral"] # 0x27da (en: 'left and right double turnstile') + - "⟛": [T: "tourniquet bilatéral"] # 0x27db (en: 'left and right tack') + - "⟜": [T: "multijection gauche"] # 0x27dc (en: 'left multimap') + - "⟝": [T: "long taquet droit"] # 0x27dd (en: 'long right tack') + - "⟞": [T: "long taquet gauche"] # 0x27de (en: 'long left tack') + - "⟟": [T: "taquet vers le haut surmonté d'un cercle"] # 0x27df (en: 'up tack with circle above') + - "⟠": [T: "rhombe coupé"] # 0x27e0 (en: 'lozenge divided by horizontal rule') + - "⟡": [T: "losange concave blanc"] # 0x27e1 (en: 'white concave sided diamond') + - "⟢": [T: "losange concave blanc avec trait à gauche"] # 0x27e2 (en: 'white concave sided diamond with leftwards tick') + - "⟣": [T: "losange concave blanc avec trait à droite"] # 0x27e3 (en: 'white concave sided diamond with rightwards tick') + - "⟤": [T: "carré blanc avec trait à gauche"] # 0x27e4 (en: 'white square with leftwards tick') + - "⟥": [T: "carré blanc avec trait à droite"] # 0x27e5 (en: 'white square with rightwards tick') + - "⟦": [T: "crochet mathématique blanc gauche"] # 0x27e6 (en: 'left white square bracket') + - "⟧": [T: "crochet mathématique blanc droit"] # 0x27e7 (en: 'right white square bracket') + - "⟨": [T: "chevron mathématique gauche"] # 0x27e8 (en: 'left angle bracket') + - "⟩": [T: "chevron mathématique droit"] # 0x27e9 (en: 'right angle bracket') + - "⟪": [T: "double chevron mathématique gauche"] # 0x27ea (en: 'left double angle bracket') + - "⟫": [T: "double chevron mathématique droit"] # 0x27eb (en: 'right double angle bracket') + - "⟬": [T: "crochet en écaille mathématique blanc gauche"] # 0x27ec (en: 'left white tortoise shell bracket') + - "⟭": [T: "crochet en écaille mathématique blanc droite"] # 0x27ed (en: 'right white tortoise shell bracket') + - "⟮": [T: "parenthèse mathématique gauche aplatie"] # 0x27ee (en: 'left flattened parenthesis') + - "⟯": [T: "parenthèse mathématique droite aplatie"] # 0x27ef (en: 'right flattened parenthesis') + - "⟰": [T: "quadruple flèche vers le haut"] # 0x27f0 (en: 'upwards quadruple arrow', DeepL: 'flèche quadruple vers le haut') + - "⟱": [T: "quadruple flèche vers le bas"] # 0x27f1 (en: 'downwards quadruple arrow', DeepL: 'flèche quadruple vers le bas') + - "⟲": [T: "flèche sens antihoraire entrouverte"] # 0x27f2 (en: 'anticlockwise gapped circle arrow', DeepL: 'flèche du cercle fermé dans le sens inverse des aiguilles d'une montre') + - "⟳": [T: "flèche sens horaire entrouverte"] # 0x27f3 (en: 'clockwise gapped circle arrow', DeepL: 'flèche de cercle encerclé dans le sens des aiguilles d'une montre') + - "⟴": [T: "flèche vers la droite à signe plus cerclé"] # 0x27f4 (en: 'right arrow with circled plus', DeepL: 'flèche droite avec plus encerclé') + - "⟵": [T: "longue flèche vers la gauche"] # 0x27f5 (en: 'long leftwards arrow', MathPlayer: 'longue flèche vers la gauche', DeepL: 'flèche longue vers la gauche') + - "⟶": [T: "longue flèche vers la droite"] # 0x27f6 (en: 'long rightwards arrow', SRE: 'longue flèche droite') + - "⟷": [T: "longue flèche bilatérale"] # 0x27f7 (en: 'long left right arrow') + - "⟸": [T: "longue double flèche vers la gauche"] # 0x27f8 (en: 'long leftwards double arrow', MathPlayer: 'longue double flèche vers la gauche', DeepL: 'longue flèche double vers la gauche') + - "⟹": [T: "longue double flèche vers la droite"] # 0x27f9 (en: 'implies', MathPlayer: 'longue double flèche vers la droite', DeepL: 'implique') + - "⟺": [T: "longue double flèche bilatérale"] # 0x27fa (en: 'if and only if') + - "⟻": [T: "longue flèche d'un taquet vers la gauche"] # 0x27fb (en: 'long leftwards arrow from bar', DeepL: 'longue flèche vers la gauche à partir d'une barre') + - "⟼": [T: "longue flèche d'un taquet vers la droite"] # 0x27fc (en: 'long rightwards arrow from bar', MathPlayer: 'longue flèche d'un taquet vers la droite', DeepL: 'longue flèche vers la droite à partir de la barre') + - "⟽": [T: "longue double flèche d'un taquet vers la gauche"] # 0x27fd (en: 'long leftwards double arrow from bar', DeepL: 'double flèche longue vers la gauche à partir de la barre') + - "⟾": [T: "longue double flèche d'un taquet vers la droite"] # 0x27fe (en: 'long rightwards double arrow from bar', DeepL: 'double flèche longue vers la droite à partir de la barre') + - "⟿": [T: "longue flèche en tire bouchon vers la droite"] # 0x27ff (en: 'long rightwards squiggle arrow', MathPlayer: 'longue flèche vers la droite en tire-bouchon', DeepL: 'flèche longue vers la droite en forme de gribouillis') + - "⤀": [T: "flèche à deux pointes vers la droite barrée verticalement"] # 0x2900 (en: 'rightwards two headed arrow with vertical stroke', DeepL: 'vers la droite flèche à deux têtes avec trait vertical') + - "⤁": [T: "flèche à deux pointes vers la droite barrée deux fois verticalement"] # 0x2901 (en: 'rightwards two headed arrow with double vertical stroke', DeepL: 'flèche bicéphale droite avec double trait vertical') + - "⤂": [T: "double flèche vers la gauche barrée verticalement"] # 0x2902 (en: 'leftwards double arrow with vertical stroke', DeepL: 'flèche double gauche avec trait vertical') + - "⤃": [T: "double flèche vers la droite barrée verticalement"] # 0x2903 (en: 'rightwards double arrow with vertical stroke', DeepL: 'vers la droite double flèche avec trait vertical') + - "⤄": [T: "flèche bilatérale double barrée verticalement"] # 0x2904 (en: 'left right double arrow with vertical stroke', DeepL: 'flèche double gauche-droite avec trait vertical') + - "⤅": [T: "flèche à deux têtes d'un taquet vers la droite"] # 0x2905 (en: 'rightwards two headed arrow from bar', MathPlayer: 'flèche à deux têtes d'un taquet vers la droite', DeepL: 'flèche vers la droite à deux têtes à partir de la barre') + - "⤆": [T: "double flèche d'un taquet vers la gauche"] # 0x2906 (en: 'leftwards double arrow from bar', DeepL: 'flèche double vers la gauche à partir de la barre') + - "⤇": [T: "double flèche d'un taquet vers la droite"] # 0x2907 (en: 'rightwards double arrow from bar', DeepL: 'double flèche vers la droite à partir de la barre') + - "⤈": [T: "flèche vers le bas barrée horizontalement"] # 0x2908 (en: 'downwards arrow with horizontal stroke', DeepL: 'flèche vers le bas avec trait horizontal') + - "⤉": [T: "flèche vers le haut barrée horizontalement"] # 0x2909 (en: 'upwards arrow with horizontal stroke', DeepL: 'flèche vers le haut avec trait horizontal') + - "⤊": [T: "triple flèche vers le haut"] # 0x290a (en: 'upwards triple arrow', DeepL: 'flèche triple vers le haut') + - "⤋": [T: "triple flèche vers le bas"] # 0x290b (en: 'downwards triple arrow') + - "⤌": [T: "flèche à deux traits vers la gauche"] # 0x290c (en: 'leftwards double dash arrow', MathPlayer: 'flèche à deux traits vers la gauche', DeepL: 'flèche double tiret vers la gauche') + - "⤍": [T: "flèche à deux traits vers la droite"] # 0x290d (en: 'rightwards double dash arrow', MathPlayer: 'flèche à deux traits vers la droite', DeepL: 'flèche à double tiret vers la droite') + - "⤎": [T: "flèche à trois traits vers la gauche"] # 0x290e (en: 'leftwards triple dash arrow', MathPlayer: 'flèche à trois traits vers la gauche', DeepL: 'flèche à triple tiret vers la gauche') + - "⤏": [T: "flèche à trois traits vers la droite"] # 0x290f (en: 'rightwards triple dash arrow', MathPlayer: 'flèche à trois traits vers la droite', DeepL: 'à droite triple flèche en tiret') + - "⤐": [T: "flèche à trois traits et à deux têtes vers la droite"] # 0x2910 (en: 'rightwards two headed triple dash arrow', MathPlayer: 'flèche à trois traits et à deux têtes vers la droite', DeepL: 'vers la droite, flèche à deux têtes et triple tiret') + - "⤑": [T: "flèche à fût pointillé vers la droite"] # 0x2911 (en: 'rightwards arrow with dotted stem', MathPlayer: 'flèche vers la droite à fût pointillé', DeepL: 'flèche vers la droite avec tige en pointillé') + - "⤒": [T: "flèche jusqu'à taquet vers le haut"] # 0x2912 (en: 'upwards arrow to bar') + - "⤓": [T: "flèche jusqu'à taquet vers le bas"] # 0x2913 (en: 'downwards arrow to bar') + - "⤔": [T: "flèche empennée vers la droite barrée verticalement"] # 0x2914 (en: 'rightwards arrow with tail and vertical stroke', DeepL: 'flèche vers la droite avec queue et trait vertical') + - "⤕": [T: "flèche empennée vers la droite barrée deux fois verticalement"] # 0x2915 (en: 'rightwards arrow with tail and double vertical stroke', DeepL: 'flèche vers la droite avec empennage et double trait vertical') + - "⤖": [T: "flèche empennée à deux têtes vers la droite"] # 0x2916 (en: 'rightwards two headed arrow with tail', MathPlayer: 'flèche empennée à deux têtes vers la droite', DeepL: 'flèche bicéphale droite avec empennage') + - "⤗": [T: "flèche empennée à deux têtes vers la droite barrée verticalement"] # 0x2917 (en: 'rightwards two headed arrow with tail with vertical stroke', DeepL: 'flèche à deux têtes vers la droite avec empennage et trait vertical') + - "⤘": [T: "flèche empennée à deux têtes vers la droite barrée deux fois verticalement"] # 0x2918 (en: 'rightwards two headed arrow with tail with double vertical stroke', DeepL: 'flèche à deux têtes vers la droite avec empennage et double trait vertical') + - "⤙": [T: "empenne vers la gauche"] # 0x2919 (en: 'leftwards arrow tail', MathPlayer: 'empenne vers la gauche', DeepL: 'vers la gauche queue de la flèche') + - "⤚": [T: "empenne vers la droite"] # 0x291a (en: 'rightwards arrow tail', DeepL: 'flèche vers la droite') + - "⤛": [T: "double empenne vers la gauche"] # 0x291b (en: 'leftwards double arrow tail', MathPlayer: 'double empenne vers la gauche', DeepL: 'vers la gauche double flèche en queue') + - "⤜": [T: "double empenne vers la droite"] # 0x291c (en: 'rightwards double arrow tail', MathPlayer: 'double empenne vers la droite', DeepL: 'vers la droite double flèche en queue') + - "⤝": [T: "flèche vers un losange noir à gauche"] # 0x291d (en: 'leftwards arrow to filled diamond') + - "⤞": [T: "flèche vers un losange noir à droite"] # 0x291e (en: 'rightwards arrow to filled diamond') + - "⤟": [T: "flèche d'un taquet vers un losange noir à gauche"] # 0x291f (en: 'leftwards arrow from bar to filled diamond') + - "⤠": [T: "flèche d'un taquet vers un losange noir à droite"] # 0x2920 (en: 'rightwards arrow from bar to filled diamond') + - "⤡": [T: "flèche nord ouest et sud est"] # 0x2921 (en: 'north west and south east arrow', DeepL: 'flèche nord-ouest et sud-est') + - "⤢": [T: "flèche nord est et sud ouest"] # 0x2922 (en: 'north east and south west arrow', DeepL: 'flèche nord-est et sud-ouest') + - "⤣": [T: "flèche nord ouest à crochet"] # 0x2923 (en: 'north west arrow with hook', MathPlayer: 'flèche nord-ouest à crochet', DeepL: 'flèche nord-ouest avec crochet') + - "⤤": [T: "flèche nord est à crochet"] # 0x2924 (en: 'north east arrow with hook', MathPlayer: 'flèche nord-est à crochet', DeepL: 'flèche nord-est avec crochet') + - "⤥": [T: "flèche sud est à crochet"] # 0x2925 (en: 'south east arrow with hook', MathPlayer: 'flèche sud-est à crochet', DeepL: 'flèche sud-est avec crochet') + - "⤦": [T: "flèche sud ouest à crochet"] # 0x2926 (en: 'south west arrow with hook', MathPlayer: 'flèche sud-ouest à crochet', DeepL: 'flèche sud-ouest avec crochet') + - "⤧": [T: "flèches nord ouest et nord est"] # 0x2927 (en: 'north west arrow and north east arrow', MathPlayer: 'flèches nord-ouest et nord-est', DeepL: 'flèche nord-ouest et flèche nord-est') + - "⤨": [T: "flèches nord est et sud est"] # 0x2928 (en: 'north east arrow and south east arrow', MathPlayer: 'flèches nord-est et sud-est', DeepL: 'flèche nord-est et flèche sud-est') + - "⤩": [T: "flèches sud est et sud ouest"] # 0x2929 (en: 'south east arrow and south west arrow', MathPlayer: 'flèches sud-est et sud-ouest', DeepL: 'flèche sud-est et flèche sud-ouest') + - "⤪": [T: "flèches sud ouest et nord ouest"] # 0x292a (en: 'south west arrow and north west arrow', MathPlayer: 'flèches sud-ouest et nord-ouest', DeepL: 'flèche sud-ouest et flèche nord-ouest') + - "⤫": [T: "diagonale montante sur diagonale descendante"] # 0x292b (en: 'rising diagonal crossing falling diagonal', DeepL: 'diagonale ascendante croisant une diagonale descendante') + - "⤬": [T: "diagonale descendante sur diagonale montante"] # 0x292c (en: 'falling diagonal crossing rising diagonal', DeepL: 'diagonale descendante croisant la diagonale montante') + - "⤭": [T: "flèche sud est sur flèche nord est"] # 0x292d (en: 'south east arrow crossing north east arrow', DeepL: 'flèche sud-est croisant la flèche nord-est') + - "⤮": [T: "flèche nord est sur flèche sud est"] # 0x292e (en: 'north east arrow crossing south east arrow', DeepL: 'flèche nord-est croisant la flèche sud-est') + - "⤯": [T: "diagonale descendante sur flèche nord est"] # 0x292f (en: 'falling diagonal crossing north east arrow', DeepL: 'flèche diagonale tombante traversant le nord-est') + - "⤰": [T: "diagonale montante sur flèche sud est"] # 0x2930 (en: 'rising diagonal crossing south east arrow', DeepL: 'diagonale montante croisant la flèche sud-est') + - "⤱": [T: "flèche nord est sur flèche nord ouest"] # 0x2931 (en: 'north east arrow crossing north west arrow', DeepL: 'flèche nord-est croisant la flèche nord-ouest') + - "⤲": [T: "flèche nord ouest sur flèche nord est"] # 0x2932 (en: 'north west arrow crossing north east arrow', DeepL: 'flèche nord-ouest croisant la flèche nord-est') + - "⤳": [T: "flèche ondulée vers la droite"] # 0x2933 (en: 'wave arrow pointing directly right', MathPlayer: 'flèche vers la droite bossue', DeepL: 'flèche ondulée pointant directement vers la droite') + - "⤴": [T: "flèche courbe vers la droite puis le haut"] # 0x2934 (en: 'arrow pointing rightwards then curving upwards', DeepL: 'flèche pointant vers la droite puis s'incurvant vers le haut') + - "⤵": [T: "flèche courbe vers la droite puis le bas"] # 0x2935 (en: 'arrow pointing rightwards then curving downwards') + - "⤶": [T: "flèche courbe vers le bas puis la gauche"] # 0x2936 (en: 'arrow pointing downwards then curving leftwards') + - "⤷": [T: "flèche courbe vers le bas puis la droite"] # 0x2937 (en: 'arrow pointing downwards then curving rightwards') + - "⤸": [T: "arc de cercle droit fléché sens horaire"] # 0x2938 (en: 'right side arc clockwise arrow') + - "⤹": [T: "arc de cercle gauche fléché sens antihoraire"] # 0x2939 (en: 'left side arc anticlockwise arrow') + - "⤺": [T: "arc de cercle supérieur fléché sens antihoraire"] # 0x293a (en: 'top arc anticlockwise arrow', DeepL: 'arc supérieur flèche antihoraire') + - "⤻": [T: "arc de cercle inférieur fléché sens antihoraire"] # 0x293b (en: 'bottom arc anticlockwise arrow', DeepL: 'flèche du bas dans le sens inverse des aiguilles d'une montre') + - "⤼": [T: "arc de cercle fléché sens horaire et signe moins souscrit"] # 0x293c (en: 'top arc clockwise arrow with minus') + - "⤽": [T: "arc de cercle fléché sens antihoraire et signe plus souscrit"] # 0x293d (en: 'top arc anticlockwise arrow with plus') + - "⤾": [T: "demi cercle fléché inférieur droit sens horaire"] # 0x293e (en: 'lower right semicircular clockwise arrow', DeepL: 'flèche semi-circulaire en bas à droite dans le sens des aiguilles d'une montre') + - "⤿": [T: "demi cercle fléché inférieur gauche sens antihoraire"] # 0x293f (en: 'lower left semicircular anticlockwise arrow', DeepL: 'flèche semi-circulaire en bas à gauche dans le sens inverse des aiguilles d'une montre') + - "⥀": [T: "cercle fléché sens antihoraire"] # 0x2940 (en: 'anticlockwise closed circle arrow', DeepL: 'flèche circulaire fermée dans le sens inverse des aiguilles d'une montre') + - "⥁": [T: "cercle fléché sens horaire"] # 0x2941 (en: 'clockwise closed circle arrow', DeepL: 'flèche de cercle fermé dans le sens des aiguilles d'une montre') + - "⥂": [T: "flèche vers la droite surmontant fléchette vers la gauche"] # 0x2942 (en: 'rightwards arrow above short leftwards arrow', DeepL: 'flèche vers la droite au-dessus d'une courte flèche vers la gauche') + - "⥃": [T: "flèche vers la gauche surmontant fléchette vers la droite"] # 0x2943 (en: 'leftwards arrow above short rightwards arrow', DeepL: 'flèche gauche au-dessus d'une courte flèche droite') + - "⥄": [T: "fléchette vers la droite surmontant flèche vers la gauche"] # 0x2944 (en: 'short rightwards arrow above leftwards arrow', DeepL: 'courte flèche vers la droite au-dessus de la flèche vers la gauche') + - "⥅": [T: "flèche droite surmontant signe moins"] # 0x2945 (en: 'rightwards arrow with plus below', MathPlayer: 'flèche vers la droite surmontant signe moins', DeepL: 'flèche vers la droite avec le plus en dessous') + - "⥆": [T: "flèche vers la gauche surmontant signe plus"] # 0x2946 (en: 'leftwards arrow with plus below', DeepL: 'flèche vers la gauche avec le plus en dessous') + - "⥇": [T: "flèche vers la droite à travers x"] # 0x2947 (en: 'rightwards arrow through x', DeepL: 'flèche vers la droite à travers le x') + - "⥈": [T: "petit cercle traversé d'une flèche bilatérale"] # 0x2948 (en: 'left right arrow through circle') + - "⥉": [T: "petit cercle surmonté d'une flèche montante à deux têtes"] # 0x2949 (en: 'upwards two headed arrow from circle') + - "⥊": [T: "harpon à barbillon gauche dressée et barbillon droite baissée"] # 0x294a (en: 'left barb up right barb down harpoon') + - "⥋": [T: "harpon à barbillon gauche baissée et barbillon droite dressée"] # 0x294b (en: 'left barb down right barb up harpoon') + - "⥌": [T: "harpon à barbillon supérieure droite et barbillon inférieure gauche"] # 0x294c (en: 'up barb right down barb left harpoon', DeepL: 'barbe en haut à droite barbe en bas à gauche harpon') + - "⥍": [T: "harpon à barbillon supérieure gauche et barbillon inférieure droite"] # 0x294d (en: 'up barb left down barb right harpoon', DeepL: 'barbe en haut à gauche barbe en bas à droite harpon') + - "⥎": [T: "harpon à barbillon droite et gauche dressées"] # 0x294e (en: 'left barb up right barb up harpoon') + - "⥏": [T: "harpon à barbillon supérieure et inférieure droites"] # 0x294f (en: 'up barb right down barb right harpoon') + - "⥐": [T: "harpon à barbillon droite et gauche baissées"] # 0x2950 (en: 'left barb down right barb down harpoon') + - "⥑": [T: "harpon à barbillon supérieure et inférieure gauches"] # 0x2951 (en: 'up barb left down barb left harpoon') + - "⥒": [T: "harpon à barbillon dressé vers un taquet à gauche"] # 0x2952 (en: 'leftwards harpoon with barb up to bar', MathPlayer: 'harpon vers la gauche à dent dressée contre taquet', DeepL: 'harpon gauche avec ardillon jusqu'à l'ardillon') + - "⥓": [T: "harpon à barbillon dressé vers un taquet à droite"] # 0x2953 (en: 'rightwards harpoon with barb up to bar', MathPlayer: 'harpon vers la droite à dent dressée contre taquet', DeepL: 'harpon droit avec ardillon jusqu'à l'ardillon') + - "⥔": [T: "harpon à barbillon droit vers un taquet en haut"] # 0x2954 (en: 'upwards harpoon with barb right to bar', MathPlayer: 'harpon vers le haut à dent vers la droite contre taquet', DeepL: 'harpon vers le haut avec ardillon de la droite vers l'ardillon') + - "⥕": [T: "harpon à barbillon droit vers un taquet en bas"] # 0x2955 (en: 'downwards harpoon with barb right to bar', MathPlayer: 'harpon vers le bas à dent vers la droite contre taquet', DeepL: 'harpon vers le bas avec barbe à droite de la barre') + - "⥖": [T: "harpon à barbillon baissé vers un taquet à gauche"] # 0x2956 (en: 'leftwards harpoon with barb down to bar', MathPlayer: 'harpon vers la gauche à dent baissée contre taquet', DeepL: 'vers la gauche harpon avec ardillon jusqu'à la barre') + - "⥗": [T: "harpon à barbillon baissé vers un taquet à droite"] # 0x2957 (en: 'rightwards harpoon with barb down to bar', MathPlayer: 'harpon vers la droite à dent baissée contre taquet', DeepL: 'harpon vers la droite avec ardillon vers le bas jusqu'à la barre') + - "⥘": [T: "harpon à barbillon gauche vers un taquet en haut"] # 0x2958 (en: 'upwards harpoon with barb left to bar', MathPlayer: 'harpon vers le haut à dent vers la gauche contre taquet', DeepL: 'harpon vers le haut avec ardillon à gauche vers la barre') + - "⥙": [T: "harpon à barbillon gauche vers un taquet en bas"] # 0x2959 (en: 'downwards harpoon with barb left to bar', MathPlayer: 'harpon vers le bas à dent vers la gauche contre taquet', DeepL: 'harpon descendant avec ardillon gauche à l'ardillon') + - "⥚": [T: "harpon à barbillon dressé d'un taquet vers la gauche"] # 0x295a (en: 'leftwards harpoon with barb up from bar', MathPlayer: 'harpon vers la gauche appuyé à dent dressée', DeepL: 'harpon vers la gauche avec ardillon en haut de la barre') + - "⥛": [T: "harpon à barbillon dressé d'un taquet vers la droite"] # 0x295b (en: 'rightwards harpoon with barb up from bar', MathPlayer: 'harpon vers la droite appuyé à dent dressée', DeepL: 'vers la droite harpon avec ardillon en haut de la barre') + - "⥜": [T: "harpon à barbillon droit d'un taquet vers le haut"] # 0x295c (en: 'upwards harpoon with barb right from bar', MathPlayer: 'harpon vers le haut appuyé à dent vers la droite', DeepL: 'harpon vers le haut avec ardillon vers la droite') + - "⥝": [T: "harpon à barbillon droit d'un taquet vers le bas"] # 0x295d (en: 'downwards harpoon with barb right from bar', MathPlayer: 'harpon vers le bas appuyé à dent vers la droite', DeepL: 'harpon avec ardillon vers le bas à droite de la barre') + - "⥞": [T: "harpon à barbillon baissé d'un taquet vers la gauche"] # 0x295e (en: 'leftwards harpoon with barb down from bar', MathPlayer: 'harpon vers la gauche appuyé à dent baissée', DeepL: 'vers la gauche harpon avec ardillon en bas de la barre') + - "⥟": [T: "harpon à barbillon baissé d'un taquet vers la droite"] # 0x295f (en: 'rightwards harpoon with barb down from bar', MathPlayer: 'harpon vers la droite appuyé à dent baissée', DeepL: 'harpon à droite avec ardillon descendant de la barre') + - "⥠": [T: "harpon à barbillon gauche d'un taquet vers le haut"] # 0x2960 (en: 'upwards harpoon with barb left from bar', MathPlayer: 'harpon vers le haut appuyé à dent vers la gauche', DeepL: 'harpon vers le haut avec ardillon vers la gauche à partir de la barre') + - "⥡": [T: "harpon à barbillon gauche d'un taquet vers le bas"] # 0x2961 (en: 'downwards harpoon with barb left from bar', MathPlayer: 'harpon vers le bas appuyé à dent vers la gauche', DeepL: 'harpon vers le bas avec ardillon à gauche de la barre') + - "⥢": [T: "harpon gauche à dent dressée sur harpon gauche à dent baissée"] # 0x2962 (en: 'leftwards harpoon with barb up above leftwards harpoon with barb down', MathPlayer: 'harpon vers la gauche à dent dressée par-dessus harpon vers la gauche à dent baissée', DeepL: 'vers la gauche harpon avec ardillon vers le haut au-dessus vers la gauche harpon avec ardillon vers le bas') + - "⥣": [T: "harpon vers le haut à dent gauche à côté de harpon vers le haut à dent droite"] # 0x2963 (en: 'upwards harpoon with barb left beside upwards harpoon with barb right', MathPlayer: 'harpon vers le haut à dent vers la gauche à côté de harpon vers le haut à dent vers la droite', DeepL: 'harpon vers le haut avec ardillon à gauche à côté du harpon vers le haut avec ardillon à droite') + - "⥤": [T: "harpon droit à dent dressée par dessus harpon droit à dent baissée"] # 0x2964 (en: 'rightwards harpoon with barb up above rightwards harpoon with barb down', MathPlayer: 'harpon vers la droite à dent dressée par-dessus harpon vers la droite à dent baissée', DeepL: 'vers la droite harpon avec ardillon en haut vers la droite harpon avec ardillon en bas') + - "⥥": [T: "harpon vers le bas à dent gauche à côté de harpon vers le bas à dent droite"] # 0x2965 (en: 'downwards harpoon with barb left beside downwards harpoon with barb right', MathPlayer: 'harpon vers le bas à dent vers la gauche à côté de harpon vers le bas à dent vers la droite', DeepL: 'harpon descendant avec ardillon gauche à côté de harpon descendant avec ardillon droit') + - "⥦": [T: "harpon à dent gauche dressée par dessus harpon à dent droite dressée"] # 0x2966 (en: 'leftwards harpoon with barb up above rightwards harpoon with barb up', MathPlayer: 'harpon à dent gauche dressée par-dessus harpon à dent droite dressée', DeepL: 'harpon gauche avec ardillon vers le haut au-dessus du harpon droit avec ardillon vers le haut') + - "⥧": [T: "harpon à dent gauche baissée par dessus harpon à dent droite baissée"] # 0x2967 (en: 'leftwards harpoon with barb down above rightwards harpoon with barb down', MathPlayer: 'harpon à dent gauche baissée par-dessus harpon à dent droite baissée', DeepL: 'vers la gauche harpon avec ardillon vers le bas au-dessus harpon vers la droite avec ardillon vers le bas') + - "⥨": [T: "harpon à dent droite dressée par dessus harpon à dent gauche dressée"] # 0x2968 (en: 'rightwards harpoon with barb up above leftwards harpoon with barb up', MathPlayer: 'harpon à dent droite dressée par-dessus harpon à dent gauche dressée', DeepL: 'vers la droite harpon avec ardillon en haut vers la gauche harpon avec ardillon en haut') + - "⥩": [T: "harpon à dent droite baissée par dessus harpon à dent gauche baissée"] # 0x2969 (en: 'rightwards harpoon with barb down above leftwards harpoon with barb down', MathPlayer: 'harpon à dent droite baissée par-dessus harpon à dent gauche baissée', DeepL: 'vers la droite harpon avec ardillon vers le bas au-dessus du harpon vers la gauche avec ardillon vers le bas') + - "⥪": [T: "harpon à dent gauche dressée par dessus long trait"] # 0x296a (en: 'leftwards harpoon with barb up above long dash', MathPlayer: 'harpon à dent gauche dressée par-dessus long trait', DeepL: 'vers la gauche harpon avec ardillon au-dessus du tiret long') + - "⥫": [T: "long trait par dessus harpon à dent gauche baissée"] # 0x296b (en: 'leftwards harpoon with barb down below long dash', MathPlayer: 'long trait par-dessus harpon à dent gauche baissée', DeepL: 'vers la gauche harpon avec ardillon sous le tiret long') + - "⥬": [T: "harpon à dent droite dressée par dessus long trait"] # 0x296c (en: 'rightwards harpoon with barb up above long dash', MathPlayer: 'harpon à dent droite dressée par-dessus long trait', DeepL: 'harpon vers la droite avec ardillon au-dessus du tiret long') + - "⥭": [T: "long trait par dessus harpon à dent droite baissée"] # 0x296d (en: 'rightwards harpoon with barb down below long dash', MathPlayer: 'long trait par-dessus harpon à dent droite baissée', DeepL: 'harpon vers la droite avec ardillon vers le bas sous le tiret long') + - "⥮": [T: "harpon vers le haut à dent gauche à côté de harpon vers le bas à dent droite"] # 0x296e (en: 'upwards harpoon with barb left beside downwards harpoon with barb right', MathPlayer: 'harpon vers le haut à dent vers la gauche à côté de harpon vers le bas à dent vers la droite', DeepL: 'harpon vers le haut avec ardillon à gauche à côté du harpon vers le bas avec ardillon à droite') + - "⥯": [T: "harpon vers le bas à dent gauche à côté de harpon vers le haut à dent droite"] # 0x296f (en: 'downwards harpoon with barb left beside upwards harpoon with barb right', MathPlayer: 'harpon vers le bas à dent vers la gauche à côté de harpon vers le haut à dent vers la droite', DeepL: 'harpon vers le bas avec ardillon à gauche à côté du harpon vers le haut avec ardillon à droite') + - "⥰": [T: "flèche en épingle à cheveu droite"] # 0x2970 (en: 'right double arrow with rounded head', MathPlayer: 'flèche en épingle à cheveu vers la droite', DeepL: 'flèche double droite avec tête arrondie') + - "⥱": [T: "flèche vers la droite surmontée d'un égal"] # 0x2971 (en: 'equals above rightwards arrow', MathPlayer: 'flèche vers la droite surmontée d'un égal', DeepL: 'égal au-dessus de la flèche vers la droite') + - "⥲": [T: "flèche vers la droite surmontée d'un tilde"] # 0x2972 (en: 'tilde operator above rightwards arrow', MathPlayer: 'flèche vers la droite surmontée d'un tilde', DeepL: 'opérateur tilde au-dessus de la flèche vers la droite') + - "⥳": [T: "tilde surmonté d'une flèche vers la gauche"] # 0x2973 (en: 'leftwards arrow above tilde operator', MathPlayer: 'tilde surmonté d'une flèche vers la gauche', DeepL: 'flèche vers la gauche au-dessus de l'opérateur tilde') + - "⥴": [T: "tilde surmonté d'une flèche vers la droite"] # 0x2974 (en: 'rightwards arrow above tilde operator', MathPlayer: 'tilde surmonté d'une flèche vers la droite', DeepL: 'flèche vers la droite au-dessus de l'opérateur tilde') + - "⥵": [T: "presque égal à surmonté d'une flèche vers la droite"] # 0x2975 (en: 'rightwards arrow above almost equal to', MathPlayer: 'presque égal à surmonté d'une flèche vers la droite', DeepL: 'flèche vers la droite au-dessus presque égale à') + - "⥶": [T: "inférieur à sur flèche vers la gauche"] # 0x2976 (en: 'less than above leftwards arrow', MathPlayer: 'inférieur à surmonté d'une flèche vers la gauche', DeepL: 'moins que au-dessus de la flèche gauche') + - "⥷": [T: "flèche vers la gauche à travers un inférieur à"] # 0x2977 (en: 'leftwards arrow through less than', DeepL: 'flèche vers la gauche à travers moins que') + - "⥸": [T: "supérieur à sur flèche vers la gauche"] # 0x2978 (en: 'greater than above rightwards arrow', MathPlayer: 'flèche vers la droite surmontée d'un supérieur à', DeepL: 'plus grand que plus haut flèche vers la droite') + - "⥹": [T: "flèche vers la droite surmontée d'un sous ensemble de"] # 0x2979 (en: 'subset above rightwards arrow', MathPlayer: 'flèche vers la droite surmontée d'un sous-ensemble de', DeepL: 'sous-ensemble au-dessus de la flèche vers la droite') + - "⥺": [T: "flèche vers la gauche au travers d'un sous ensemble de"] # 0x297a (en: 'leftwards arrow through subset', DeepL: 'flèche vers la gauche à travers un sous-ensemble') + - "⥻": [T: "flèche gauche surmontée d'un sur ensemble de"] # 0x297b (en: 'superset above leftwards arrow', MathPlayer: 'flèche vers la gauche surmontée d'un sur-ensemble de', DeepL: 'superposition au-dessus de la flèche vers la gauche') + - "⥼": [T: "ancre gauche"] # 0x297c (en: 'left fish tail', MathPlayer: 'ancre vers la gauche', DeepL: 'queue de poisson gauche') + - "⥽": [T: "ancre droite"] # 0x297d (en: 'right fish tail', MathPlayer: 'ancre vers la droite', DeepL: 'queue de poisson droite') + - "⥾": [T: "ancre vers le haut"] # 0x297e (en: 'up fish tail') + - "⥿": [T: "ancre vers le bas"] # 0x297f (en: 'down fish tail') + - "⦀": [T: "délimiteur triple barre verticale"] # 0x2980 (en: 'triple vertical bar delimiter', DeepL: 'triple barre verticale de délimitation') + - "⦁": [T: "boulet"] # 0x2981 (en: 'z notation spot', DeepL: 'z notation spot') + - "⦂": [T: "deux points de la notation z"] # 0x2982 (en: 'z notation type colon', DeepL: 'z notation type colon') + - "⦃": [T: "accolade blanche gauche"] # 0x2983 (en: 'left white brace', DeepL: 'accolade blanche vers la gauche') + - "⦄": [T: "accolade blanche droite"] # 0x2984 (en: 'right white brace', DeepL: 'accolade blanche à droite') + - "⦅": [T: "parenthèse blanche gauche"] # 0x2985 (en: 'left white parenthesis') + - "⦆": [T: "parenthèse blanche droite"] # 0x2986 (en: 'right white parenthesis') + - "⦇": [T: "parenthèse image de gauche en notation z"] # 0x2987 (en: 'z notation left image bracket', DeepL: 'z notation parenthèse gauche de l'image') + - "⦈": [T: "parenthèse image de droite en notation z"] # 0x2988 (en: 'z notation right image bracket', DeepL: 'z notation crochet droit de l'image') + - "⦉": [T: "parenthèse lien gauche en notation z"] # 0x2989 + - "⦊": [T: "parenthèse lien droite en notation z"] # 0x298a + - "⦋": [T: "crochet gauche avec barre souscrite"] # 0x298b (en: 'left square bracket with underbar') + - "⦌": [T: "crochet droit avec barre souscrite"] # 0x298c (en: 'right square bracket with underbar') + - "⦍": [T: "crochet gauche avec trait dans le coin supérieur"] # 0x298d (en: 'left square bracket with tick in top corner') + - "⦎": [T: "crochet droit avec trait dans le coin inférieur"] # 0x298e (en: 'right square bracket with tick in bottom corner') + - "⦏": [T: "crochet gauche avec trait dans le coin inférieur"] # 0x298f (en: 'left square bracket with tick in bottom corner') + - "⦐": [T: "crochet droit avec trait dans le coin supérieur"] # 0x2990 (en: 'right square bracket with tick in top corner') + - "⦑": [T: "chevron gauche pointé"] # 0x2991 (en: 'left angle bracket with dot') + - "⦒": [T: "chevron droit pointé"] # 0x2992 (en: 'right angle bracket with dot') + - "⦓": [T: "parenthèse arc gauche et inférieur à"] # 0x2993 (en: 'left arc less than bracket') + - "⦔": [T: "parenthèse arc droite et supérieur à"] # 0x2994 (en: 'right arc greater than bracket') + - "⦕": [T: "parenthèse double arc droite et supérieur à"] # 0x2995 (en: 'double left arc greater than bracket') + - "⦖": [T: "parenthèse double arc gauche et inférieur à"] # 0x2996 (en: 'double right arc less than bracket') + - "⦗": [T: "crochet noir gauche en écaille"] # 0x2997 (en: 'left black tortoise shell bracket', DeepL: 'équerre noire gauche en écaille de tortue') + - "⦘": [T: "crochet noir droite en écaille"] # 0x2998 (en: 'right black tortoise shell bracket', DeepL: 'équerre noire droite en écaille de tortue') + - "⦙": [T: "clôture pointillée"] # 0x2999 (en: 'dotted fence', DeepL: 'clôture en pointillés') + - "⦚": [T: "ligne verticale en zigzag"] # 0x299a (en: 'vertical zigzag line') + - "⦛": [T: "angle mesuré s'ouvrant vers la gauche"] # 0x299b (en: 'measured angle opening left', DeepL: 'angle mesuré s'ouvrant à gauche') + - "⦜": [T: "variante d'angle avec carré"] # 0x299c (en: 'right angle variant with square', DeepL: 'variante d'angle droit avec carré') + - "⦝": [T: "angle droit mesuré pointé"] # 0x299d (en: 'measured right angle with dot') + - "⦞": [T: "angle avec s inscrit"] # 0x299e (en: 'angle with s inside', DeepL: 'angle avec s à l'intérieur') + - "⦟": [T: "angle aigu"] # 0x299f (en: 'acute angle') + - "⦠": [T: "angle sphérique s'ouvrant vers la gauche"] # 0x29a0 (en: 'spherical angle opening left', DeepL: 'angle sphérique ouverture à gauche') + - "⦡": [T: "angle sphérique s'ouvrant vers le haut"] # 0x29a1 (en: 'spherical angle opening up', DeepL: 'angle sphérique ouverture') + - "⦢": [T: "angle culbuté"] # 0x29a2 (en: 'turned angle', DeepL: 'angle tourné') + - "⦣": [T: "angle réfléchi"] # 0x29a3 (en: 'reversed angle', DeepL: 'angle inversé') + - "⦤": [T: "angle à barre souscrite"] # 0x29a4 (en: 'angle with underbar') + - "⦥": [T: "angle à barre souscrite réfléchi"] # 0x29a5 (en: 'reversed angle with underbar') + - "⦦": [T: "angle oblique s'ouvrant vers le haut"] # 0x29a6 (en: 'oblique angle opening up') + - "⦧": [T: "angle oblique s'ouvrant vers le bas"] # 0x29a7 (en: 'oblique angle opening down') + - "⦨": [T: "angle calculé à bras vers l'est et bras fléché vers le nord est"] # 0x29a8 (en: 'measured angle with open arm ending in arrow pointing up and to the right', MathPlayer: 'angle calculé à bras vers l'est et bras fléché vers le nord-est', DeepL: 'angle mesuré avec bras ouvert se terminant par une flèche pointant vers le haut et la droite') + - "⦩": [T: "angle calculé à bras vers l'ouest et bras fléché vers le nord ouest"] # 0x29a9 (en: 'measured angle with open arm ending in arrow pointing up and to the left', MathPlayer: 'angle calculé à bras vers l'ouest et bras fléché vers le nord-ouest', DeepL: 'angle mesuré avec bras ouvert se terminant par une flèche pointant vers le haut et la gauche') + - "⦪": [T: "angle calculé à bras vers l'est et bras fléché vers le sud est"] # 0x29aa (en: 'measured angle with open arm ending in arrow pointing down and to the right', MathPlayer: 'angle calculé à bras vers l'est et bras fléché vers le sud-est', DeepL: 'angle mesuré avec un bras ouvert se terminant par une flèche pointant vers le bas et la droite') + - "⦫": [T: "angle calculé à bras vers l'ouest et bras fléché vers le sud ouest"] # 0x29ab (en: 'measured angle with open arm ending in arrow pointing down and to the left', MathPlayer: 'angle calculé à bras vers l'ouest et bras fléché vers le sud-ouest', DeepL: 'angle mesuré avec un bras ouvert se terminant par une flèche pointant vers le bas et la gauche') + - "⦬": [T: "angle calculé à bras vers le nord et bras fléché vers le nord est"] # 0x29ac (en: 'measured angle with open arm ending in arrow pointing right and up', MathPlayer: 'angle calculé à bras vers le nord et bras fléché vers le nord-est', DeepL: 'angle mesuré avec bras ouvert se terminant par une flèche pointant vers la droite et le haut') + - "⦭": [T: "angle calculé à bras vers le nord et bras fléché vers le nord ouest"] # 0x29ad (en: 'measured angle with open arm ending in arrow pointing left and up', MathPlayer: 'angle calculé à bras vers le nord et bras fléché vers le nord-ouest', DeepL: 'angle mesuré avec bras ouvert se terminant par une flèche pointant vers la gauche et le haut') + - "⦮": [T: "angle calculé à bras vers le sud et bras fléché vers le sud est"] # 0x29ae (en: 'measured angle with open arm ending in arrow pointing right and down', MathPlayer: 'angle calculé à bras vers le sud et bras fléché vers le sud-est', DeepL: 'angle mesuré avec un bras ouvert se terminant par une flèche pointant vers la droite et le bas') + - "⦯": [T: "angle calculé à bras vers le sud et bras fléché vers le sud ouest"] # 0x29af (en: 'measured angle with open arm ending in arrow pointing left and down', MathPlayer: 'angle calculé à bras vers le sud et bras fléché vers le sud-ouest', DeepL: 'angle mesuré avec le bras ouvert se terminant par une flèche pointant vers la gauche et vers le bas') + - "⦰": [T: "ensemble vide réfléchi"] # 0x29b0 (en: 'reversed empty set') + - "⦱": [T: "ensemble vide barre en chef"] # 0x29b1 (en: 'empty set with overbar') + - "⦲": [T: "ensemble vide petit cercle en chef"] # 0x29b2 (en: 'empty set with small circle above') + - "⦳": [T: "ensemble vide flèche droite en chef"] # 0x29b3 (en: 'empty set with right arrow above') + - "⦴": [T: "ensemble vide flèche gauche en chef"] # 0x29b4 (en: 'empty set with left arrow above') + - "⦵": [T: "cercle avec barre horizontale"] # 0x29b5 (en: 'circle with horizontal bar') + - "⦶": [T: "barre verticale cerclée"] # 0x29b6 (en: 'circled vertical bar') + - "⦷": [T: "parallèles cerclées"] # 0x29b7 (en: 'circled parallel') + - "⦸": [T: "barre oblique inversée cerclée"] # 0x29b8 (en: 'circled reverse solidus', DeepL: 'solidus inversé encerclé') + - "⦹": [T: "perpendiculaire cerclé"] # 0x29b9 (en: 'circled perpendicular') + - "⦺": [T: "cercle divisé par une barre horizontale et une barre verticale dans la moitié supérieure"] # 0x29ba (en: 'circled divided by horizontal bar and top half divided by vertical bar', DeepL: 'encerclé divisé par la barre horizontale et la moitié supérieure divisée par la barre verticale') + - "⦻": [T: "cercle superposé d'un x"] # 0x29bb (en: 'circle with superimposed x') + - "⦼": [T: "division pivoté en sens antihoraire cerclé"] # 0x29bc (en: 'circled anticlockwise rotated division sign', MathPlayer: 'signe division pivoté en sens antihoraire cerclé', DeepL: 'signe de division encerclé et tourné dans le sens inverse des aiguilles d'une montre') + - "⦽": [T: "cercle traversé d'une flèche montante"] # 0x29bd (en: 'up arrow through circle', DeepL: 'flèche vers le haut à travers un cercle') + - "⦾": [T: "puce blanche cerclée"] # 0x29be (en: 'circled white bullet') + - "⦿": [T: "puce cerclée"] # 0x29bf (en: 'circled bullet') + - "⧀": [T: "inférieur à cerclé"] # 0x29c0 (en: 'circled less than') + - "⧁": [T: "supérieur à cerclé"] # 0x29c1 (en: 'circled greater than') + - "⧂": [T: "cercle avec petit cercle à droite"] # 0x29c2 (en: 'circle with small circle to the right') + - "⧃": [T: "cercle avec deux petits traits horizontaux à droite"] # 0x29c3 (en: 'circle with two horizontal strokes to the right') + - "⧄": [T: "oblique encadrée"] # 0x29c4 (en: 'squared rising diagonal slash') + - "⧅": [T: "oblique inversée encadrée"] # 0x29c5 (en: 'squared falling diagonal slash') + - "⧆": [T: "astérisque encadré"] # 0x29c6 (en: 'squared asterisk', DeepL: 'astérisque carré') + - "⧇": [T: "petit cercle encadré"] # 0x29c7 (en: 'squared small circle', DeepL: 'carré petit cercle') + - "⧈": [T: "carré encadré"] # 0x29c8 (en: 'squared square', DeepL: 'square square') + - "⧉": [T: "carrés se chevauchant"] # 0x29c9 (en: 'two joined squares') + - "⧊": [T: "triangle avec point en chef"] # 0x29ca (en: 'triangle with dot above', DeepL: 'triangle surmonté d'un point') + - "⧋": [T: "triangle avec barre souscrite"] # 0x29cb (en: 'triangle with underbar', DeepL: 'triangle avec barre inférieure') + - "⧌": [T: "s inscrit dans un triangle"] # 0x29cc (en: 's in triangle', DeepL: 's dans le triangle') + - "⧍": [T: "triangle à empattements inférieurs"] # 0x29cd (en: 'triangle with serifs at bottom') + - "⧎": [T: "triangle droit sur triangle gauche"] # 0x29ce (en: 'right triangle above left triangle', MathPlayer: 'triangle droit par-dessus triangle gauche', DeepL: 'triangle droit au-dessus du triangle gauche') + - "⧏": [T: "triangle gauche à gauche d'une barre verticale"] # 0x29cf (en: 'left triangle beside vertical bar') + - "⧐": [T: "triangle droit à droite d'une barre verticale"] # 0x29d0 (en: 'vertical bar beside right triangle') + - "⧑": [T: "noeud papillon à aile gauche noire"] # 0x29d1 (en: 'bowtie with left half black', DeepL: 'nœud papillon avec la moitié gauche noire') + - "⧒": [T: "noeud papillon à aile droite noire"] # 0x29d2 (en: 'bowtie with right half black', DeepL: 'nœud papillon avec la moitié droite noire') + - "⧓": [T: "noeud papillon noir"] # 0x29d3 (en: 'black bowtie') + - "⧔": [T: "multiplication à moitié gauche noircie"] # 0x29d4 (en: 'times with left half black', DeepL: 'fois avec moitié noire à gauche') + - "⧕": [T: "multiplication à moitié droite noircie"] # 0x29d5 (en: 'times with right half black', DeepL: 'fois avec moitié droite noire') + - "⧖": [T: "sablier blanc"] # 0x29d6 (en: 'white hourglass') + - "⧗": [T: "sablier noir"] # 0x29d7 (en: 'black hourglass') + - "⧘": [T: "clôture dentelée gauche"] # 0x29d8 (en: 'left wiggly fence', DeepL: 'à gauche clôture ondulée') + - "⧙": [T: "clôture dentelée droite"] # 0x29d9 (en: 'right wiggly fence', DeepL: 'barrière ondulée droite') + - "⧚": [T: "double clôture dentelée gauche"] # 0x29da (en: 'left double wiggly fence') + - "⧛": [T: "double clôture dentelée droite"] # 0x29db + - "⧜": [T: "infini incomplet"] # 0x29dc (en: 'incomplete infinity') + - "⧝": [T: "boucle sur infini"] # 0x29dd (en: 'tie over infinity', DeepL: 'cravate sur l'infini') + - "⧞": [T: "infini nié par une barre verticale"] # 0x29de (en: 'infinity negated with vertical bar') + - "⧟": [T: "multijection à deux têtes"] # 0x29df (en: 'double-ended multimap', DeepL: 'multimap à double extrémité') + - "⧠": [T: "carré ombré"] # 0x29e0 (en: 'square with contoured outline', DeepL: 'carré avec contour contourné') + - "⧡": [T: "augmente avec"] # 0x29e1 (en: 'increases as', DeepL: 'augmente comme') + - "⧢": [T: "produit de permutation"] # 0x29e2 (en: 'shuffle product', DeepL: 'produit de mélange') + - "⧣": [T: "égale à et parallèle à incliné"] # 0x29e3 (en: 'equals sign and slanted parallel') + - "⧤": [T: "égale à et parallèle à incliné surmontés d'un tilde"] # 0x29e4 (en: 'equals sign and slanted parallel with tilde above') + - "⧥": [T: "identique à et parallèle à incliné"] # 0x29e5 (en: 'identical to and slanted parallel') + - "⧦": [T: "gleich stark"] # 0x29e6 + - "⧧": [T: "thermodynamique"] # 0x29e7 (en: 'thermodynamic') + - "⧨": [T: "triangle pointe vers le bas à moitié gauche noire"] # 0x29e8 (en: 'down pointing triangle with left half black', DeepL: 'triangle pointant vers le bas avec la moitié gauche noire') + - "⧩": [T: "triangle pointe vers le bas à moitié droite noire"] # 0x29e9 (en: 'down pointing triangle with right half black', DeepL: 'triangle pointant vers le bas avec la moitié droite noire') + - "⧪": [T: "losange noir à flèche vers le bas"] # 0x29ea (en: 'black diamond with down arrow', DeepL: 'losange noir avec flèche vers le bas') + - "⧫": [T: "rhombe noir"] # 0x29eb (en: 'black lozenge') + - "⧬": [T: "cercle blanc à flèche vers le bas"] # 0x29ec (en: 'white circle with down arrow', DeepL: 'cercle blanc avec flèche vers le bas') + - "⧭": [T: "cercle noir à flèche vers le bas"] # 0x29ed (en: 'black circle with down arrow', DeepL: 'cercle noir avec flèche vers le bas') + - "⧮": [T: "barre d'erreur à carré blanc"] # 0x29ee (en: 'error-barred white square', DeepL: 'carré blanc barré d'erreurs') + - "⧯": [T: "barre d'erreur à carré noir"] # 0x29ef (en: 'error-barred black square', DeepL: 'carré noir barré d'erreurs') + - "⧰": [T: "barre d'erreur à losange blanc"] # 0x29f0 (en: 'error-barred white diamond', DeepL: 'diamant blanc barré d'une erreur') + - "⧱": [T: "barre d'erreur à losange noir"] # 0x29f1 (en: 'error-barred black diamond', DeepL: 'diamant noir barré d'erreurs') + - "⧲": [T: "barre d'erreur à cercle blanc"] # 0x29f2 (en: 'error-barred white circle', DeepL: 'cercle blanc barré d'erreurs') + - "⧳": [T: "barre d'erreur à cercle noir"] # 0x29f3 (en: 'error-barred black circle', DeepL: 'cercle noir barré d'une erreur') + - "⧴": [T: "règle différée"] # 0x29f4 (en: 'rule-delayed') + - "⧵": [T: "opérateur barre oblique inversée"] # 0x29f5 (en: 'reverse solidus operator', DeepL: 'opérateur solidus inversé') + - "⧶": [T: "barre oblique avec barre en chef"] # 0x29f6 (en: 'solidus with overbar') + - "⧷": [T: "barre oblique inversée à traverse horizontale"] # 0x29f7 (en: 'reverse solidus with horizontal stroke', DeepL: 'solidus inversé avec trait horizontal') + - "⧸": [T: "grande barre oblique"] # 0x29f8 (en: 'big solidus', DeepL: 'grand solidus') + - "⧹": [T: "grande barre oblique inversée"] # 0x29f9 (en: 'big reverse solidus', DeepL: 'grand solidus inversé') + - "⧺": [T: "double plus"] # 0x29fa + - "⧻": [T: "triple plus"] # 0x29fb + - "⧼": [T: "chevron vers la gauche courbé"] # 0x29fc (en: 'left pointing curved angle bracket', DeepL: 'équerre courbe pointant vers la gauche') + - "⧽": [T: "chevron vers la droite courbé"] # 0x29fd (en: 'right pointing curved angle bracket', DeepL: 'équerre courbe pointant vers la droite') + - "⧾": [T: "tiny"] # 0x29fe (DeepL: 'minuscule') + - "⧿": [T: "miny"] # 0x29ff (DeepL: 'minime') + - "⨀": [T: "opérateur point cerclé n aire"] # 0x2a00 (en: 'circled dot operator', DeepL: 'point encerclé opérateur') + - "⨁": [T: "opérateur plus cerclé n aire"] # 0x2a01 (en: 'circled plus operator', DeepL: 'opérateur plus encerclé') + - "⨂": [T: "opérateur multiplié par cerclé n aire"] # 0x2a02 (en: 'circled times operator', DeepL: 'opérateur de temps encerclé') + - "⨃": [T: "opérateur union n aire pointé"] # 0x2a03 (en: 'union operator with dot', DeepL: 'opérateur d'union avec point') + - "⨄": [T: "opérateur union n aire avec plus"] # 0x2a04 (en: 'union operator with plus', DeepL: 'opérateur d'union avec plus') + - "⨅": [T: "opérateur intersection carré n aire"] # 0x2a05 (en: 'square intersection operator', DeepL: 'opérateur d'intersection carré') + - "⨆": [T: "opérateur union carré n aire"] # 0x2a06 (en: 'square union operator', DeepL: 'carré opérateur d'union') + - "⨇": [T: "opérateur deux et logiques"] # 0x2a07 (en: 'two logical and operator', DeepL: 'deux opérateur logique et') + - "⨈": [T: "opérateur deux ou logiques"] # 0x2a08 (en: 'two logical or operator', DeepL: 'deux opérateurs logiques ou opérateurs') + - "⨉": [T: "opérateur multiplié par n aire"] # 0x2a09 (en: 'times operator', DeepL: 'fois') + - "⨊": [T: "sommation modulo deux"] # 0x2a0a (en: 'modulo two sum', DeepL: 'somme modulo deux') + - "⨋": [T: "sommation avec intégrale"] # 0x2a0b (en: 'summation with integral') + - "⨌": [T: "intégrale quadruple"] # 0x2a0c (en: 'quadruple integral operator') + - "⨍": [T: "intégrale à partie finie"] # 0x2a0d (en: 'finite part integral') + - "⨎": [T: "intégrale à deux barres horizontales"] # 0x2a0e (en: 'integral with double stroke', DeepL: 'intégrale avec double trait') + - "⨏": [T: "moyenne d'intégrale à barre oblique inversée"] # 0x2a0f (en: 'integral average with slash', DeepL: 'moyenne intégrale avec barre oblique') + - "⨐": [T: "fonction de circulation"] # 0x2a10 (en: 'circulation function') + - "⨑": [T: "intégrale en sens antihoraire"] # 0x2a11 (en: 'anticlockwise integration') + - "⨒": [T: "intégrale de ligne à chemin rectangulaire autour du pôle"] # 0x2a12 (en: 'line integration with rectangular path around pole') + - "⨓": [T: "intégrale de ligne à chemin semi circulaire autour du pôle"] # 0x2a13 (en: 'line integration with semicircular path around pole', MathPlayer: 'intégrale de ligne à chemin semi-circulaire autour du pôle', DeepL: 'intégration d'une ligne avec une trajectoire semi-circulaire autour du poteau') + - "⨔": [T: "intégrale de ligne évitant le pôle"] # 0x2a14 (en: 'line integration not including the pole') + - "⨕": [T: "intégrale autour d'un opérateur point"] # 0x2a15 (en: 'integral around a point operator') + - "⨖": [T: "intégrale quaternion"] # 0x2a16 (en: 'quaternion integral operator') + - "⨗": [T: "intégrale avec flèche vers la gauche à crochet"] # 0x2a17 (en: 'integral with leftwards arrow with hook', MathPlayer: 'intégrale à crosse fléchée vers la gauche', DeepL: 'intégrale avec flèche vers la gauche avec crochet') + - "⨘": [T: "intégrale à signe multiplié par"] # 0x2a18 (en: 'integral with times sign', DeepL: 'intégrale avec signe des temps') + - "⨙": [T: "intégrale à signe intersection"] # 0x2a19 (en: 'integral with intersection', DeepL: 'intégrale avec intersection') + - "⨚": [T: "intégrale à signe union"] # 0x2a1a (en: 'integral with union', DeepL: 'intégrale avec union') + - "⨛": [T: "intégrale à barre en chef"] # 0x2a1b (en: 'integral with overbar', DeepL: 'intégrale avec barre de dépassement') + - "⨜": [T: "intégrale à barre souscrite"] # 0x2a1c (en: 'integral with underbar', DeepL: 'intégrale avec barre inférieure') + - "⨝": [T: "jointure"] # 0x2a1d (en: 'join') + - "⨞": [T: "gros opérateur triangle gauche"] # 0x2a1e (en: 'large left triangle operator', DeepL: 'opérateur grand triangle gauche') + - "⨟": [T: "composition de schémas en notation z"] # 0x2a1f (en: 'z notation schema composition', DeepL: 'z notation composition du schéma') + - "⨠": [T: "tubage de schémas en notation z"] # 0x2a20 (en: 'z notation schema piping', DeepL: 'z notation schema piping') + - "⨡": [T: "projection de schémas en notation z"] # 0x2a21 (en: 'z notation schema projection', DeepL: 'z notation schema projection') + - "⨢": [T: "plus surmonté d'un petit cercle"] # 0x2a22 (en: 'plus sign with circle above') + - "⨣": [T: "plus surmonté d'un circonflexe"] # 0x2a23 (en: 'plus sign with circumflex accent above') + - "⨤": [T: "plus surmonté d'un tilde"] # 0x2a24 (en: 'plus sign with tilde above') + - "⨥": [T: "plus à point souscrit"] # 0x2a25 (en: 'plus sign with dot below') + - "⨦": [T: "plus à tilde souscrit"] # 0x2a26 (en: 'plus sign with tilde below') + - "⨧": [T: "plus à chiffre deux souscrit"] # 0x2a27 (en: 'plus sign with subscript two') + - "⨨": [T: "plus à triangle noir"] # 0x2a28 (en: 'plus sign with black triangle', DeepL: 'signe plus avec triangle noir') + - "⨩": [T: "moins surmonté d'une virgule"] # 0x2a29 (en: 'minus sign with comma above') + - "⨪": [T: "moins à point souscrit"] # 0x2a2a (en: 'minus sign with dot below') + - "⨫": [T: "moins à points descendants"] # 0x2a2b (en: 'minus sign with falling dots', DeepL: 'signe moins avec points de chute') + - "⨬": [T: "moins à points ascendants"] # 0x2a2c (en: 'minus sign with rising dots', DeepL: 'signe moins avec points ascendants') + - "⨭": [T: "plus dans demi cercle gauche"] # 0x2a2d (en: 'plus sign in left half circle', MathPlayer: 'plus dans demi-cercle gauche', DeepL: 'signe plus dans le demi-cercle gauche') + - "⨮": [T: "plus dans demi cercle droit"] # 0x2a2e (en: 'plus sign in right half circle', MathPlayer: 'plus dans demi-cercle droit', DeepL: 'signe plus dans le demi-cercle droit') - "⨯": # 0x2a2f - test: if: "$Verbosity='Terse'" - then: [t: "croix"] # (en: 'cross', DeepL translation) - else: [t: "produit vectoriel"] # (en: 'cross product') - - "⨰": [t: "multiplication à point en chef"] # 0x2a30 (en: 'multiplication sign with dot above', MathPlayer: 'signe multiplication à point en chef', DeepL: 'signe de multiplication avec point au-dessus') - - "⨱": [t: "multiplication à barre souscrite"] # 0x2a31 (en: 'multiplication sign with underbar', MathPlayer: 'signe multiplication à barre souscrite', DeepL: 'signe de multiplication avec barre inférieure') - - "⨲": [t: "produit semi direct fermé en bas"] # 0x2a32 (en: 'semidirect product with bottom closed', DeepL: 'produit semi-direct dont le bas est fermé') - - "⨳": [t: "produit fusionné"] # 0x2a33 (en: 'smash product') - - "⨴": [t: "multiplication dans demi cercle gauche"] # 0x2a34 (en: 'multiplication sign in left half circle', MathPlayer: 'signe multiplication dans demi-cercle gauche', DeepL: 'signe de multiplication dans le demi-cercle gauche') - - "⨵": [t: "multiplication dans demi cercle droit"] # 0x2a35 (en: 'multiplication sign in right half circle', MathPlayer: 'signe multiplication dans demi-cercle droit', DeepL: 'signe de multiplication dans le demi-cercle droit') - - "⨶": [t: "multiplication cerclé circonflexe"] # 0x2a36 (en: 'circled multiplication sign with circumflex accent', MathPlayer: 'signe multiplication cerclé circonflexe', DeepL: 'signe de multiplication encerclé avec accent circonflexe') - - "⨷": [t: "multiplication doublement cerclé"] # 0x2a37 (en: 'multiplication sign in double circle', MathPlayer: 'signe multiplication doublement cerclé', DeepL: 'signe de multiplication dans un double cercle') - - "⨸": [t: "division cerclé"] # 0x2a38 (en: 'circled division sign', MathPlayer: 'signe division cerclé', DeepL: 'signe de division encerclé') - - "⨹": [t: "plus dans triangle"] # 0x2a39 (en: 'plus sign in triangle') - - "⨺": [t: "moins dans triangle"] # 0x2a3a (en: 'minus sign in triangle') - - "⨻": [t: "multiplication dans triangle"] # 0x2a3b (en: 'multiplication sign in triangle', MathPlayer: 'signe multiplication dans triangle', DeepL: 'signe de multiplication dans un triangle') - - "⨼": [t: "produit interieur"] # 0x2a3c (en: 'interior product') - - "⨽": [t: "produit intérieur à droite"] # 0x2a3d (en: 'righthand interior product', DeepL: 'produit intérieur droit') - - "⨾": [t: "composition relationnelle en notation z"] # 0x2a3e (en: 'z notation relational composition', DeepL: 'z notation composition relationnelle') - - "⨿": [t: "amalgamation ou coproduit"] # 0x2a3f (en: 'amalgamation or coproduct') - - "⩀": [t: "intersection pointée"] # 0x2a40 (en: 'intersection with dot') - - "⩁": [t: "union à signe moins"] # 0x2a41 (en: 'union with minus sign', DeepL: 'union avec le signe moins') - - "⩂": [t: "union à barre en chef"] # 0x2a42 (en: 'union with overbar') - - "⩃": [t: "intersection à barre en chef"] # 0x2a43 (en: 'intersection with overbar') - - "⩄": [t: "intersection avec et logique"] # 0x2a44 (en: 'intersection with logical and') - - "⩅": [t: "union avec ou logique"] # 0x2a45 (en: 'union with logical or') - - "⩆": [t: "union par dessus intersection"] # 0x2a46 (en: 'union above intersection', MathPlayer: 'union par-dessus intersection', DeepL: 'union au-dessus de l'intersection') - - "⩇": [t: "intersection par dessus union"] # 0x2a47 (en: 'intersection above union', MathPlayer: 'intersection par-dessus union', DeepL: 'intersection au-dessus de l'union') - - "⩈": [t: "union par dessus bar par dessus intersection"] # 0x2a48 (en: 'union above bar above intersection', MathPlayer: 'union par-dessus bar par-dessus intersection', DeepL: 'union au-dessus de la barre au-dessus de l'intersection') - - "⩉": [t: "intersection par dessus trait par dessus union"] # 0x2a49 (en: 'intersection above bar above union', MathPlayer: 'intersection par-dessus trait par-dessus union', DeepL: 'intersection au-dessus de la barre au-dessus de l'union') - - "⩊": [t: "deux unions soudées côte à côte"] # 0x2a4a (en: 'union beside and joined with union') - - "⩋": [t: "deux intersections soudées côte à côte"] # 0x2a4b (en: 'intersection beside and joined with intersection') - - "⩌": [t: "union fermée à empattements"] # 0x2a4c (en: 'closed union with serifs') - - "⩍": [t: "intersection fermée à empattements"] # 0x2a4d (en: 'closed intersection with serifs') - - "⩎": [t: "deux intersections carrées emboîtées"] # 0x2a4e (en: 'double square intersection', DeepL: 'double intersection carrée') - - "⩏": [t: "deux unions carrées emboîtées"] # 0x2a4f (en: 'double square union', DeepL: 'double union carrée') - - "⩐": [t: "union fermée à empattements et produit fusionné"] # 0x2a50 (en: 'closed union with serifs and smash product') - - "⩑": [t: "et logique à point en chef"] # 0x2a51 (en: 'logical and with dot above', DeepL: 'logique et avec point au-dessus') - - "⩒": [t: "ou logique à point en chef"] # 0x2a52 (en: 'logical or with dot above', DeepL: 'logique ou avec point au-dessus') - - "⩓": [t: "double et logique"] # 0x2a53 (en: 'double logical and') - - "⩔": [t: "double ou logique"] # 0x2a54 (en: 'double logical or') - - "⩕": [t: "deux et logiques entrecroisés"] # 0x2a55 (en: 'two intersecting logical and') - - "⩖": [t: "deux ou logiques entrecroisés"] # 0x2a56 (en: 'two intersecting logical or') + then: [T: "croix"] # (en: 'cross', DeepL translation) + else: [T: "produit vectoriel"] # (en: 'cross product') + - "⨰": [T: "multiplication à point en chef"] # 0x2a30 (en: 'multiplication sign with dot above', MathPlayer: 'signe multiplication à point en chef', DeepL: 'signe de multiplication avec point au-dessus') + - "⨱": [T: "multiplication à barre souscrite"] # 0x2a31 (en: 'multiplication sign with underbar', MathPlayer: 'signe multiplication à barre souscrite', DeepL: 'signe de multiplication avec barre inférieure') + - "⨲": [T: "produit semi direct fermé en bas"] # 0x2a32 (en: 'semidirect product with bottom closed', DeepL: 'produit semi-direct dont le bas est fermé') + - "⨳": [T: "produit fusionné"] # 0x2a33 (en: 'smash product') + - "⨴": [T: "multiplication dans demi cercle gauche"] # 0x2a34 (en: 'multiplication sign in left half circle', MathPlayer: 'signe multiplication dans demi-cercle gauche', DeepL: 'signe de multiplication dans le demi-cercle gauche') + - "⨵": [T: "multiplication dans demi cercle droit"] # 0x2a35 (en: 'multiplication sign in right half circle', MathPlayer: 'signe multiplication dans demi-cercle droit', DeepL: 'signe de multiplication dans le demi-cercle droit') + - "⨶": [T: "multiplication cerclé avec accent circonflexe"] # 0x2a36 (en: 'circled multiplication sign with circumflex accent', MathPlayer: 'signe multiplication cerclé circonflexe', DeepL: 'signe de multiplication encerclé avec accent circonflexe') + - "⨷": [T: "multiplication doublement cerclé"] # 0x2a37 (en: 'multiplication sign in double circle', MathPlayer: 'signe multiplication doublement cerclé', DeepL: 'signe de multiplication dans un double cercle') + - "⨸": [T: "division cerclé"] # 0x2a38 (en: 'circled division sign', MathPlayer: 'signe division cerclé', DeepL: 'signe de division encerclé') + - "⨹": [T: "plus dans triangle"] # 0x2a39 (en: 'plus sign in triangle') + - "⨺": [T: "moins dans triangle"] # 0x2a3a (en: 'minus sign in triangle') + - "⨻": [T: "multiplication dans triangle"] # 0x2a3b (en: 'multiplication sign in triangle', MathPlayer: 'signe multiplication dans triangle', DeepL: 'signe de multiplication dans un triangle') + - "⨼": [T: "produit intérieur"] # 0x2a3c (en: 'interior product') + - "⨽": [T: "produit intérieur à droite"] # 0x2a3d (en: 'righthand interior product', DeepL: 'produit intérieur droit') + - "⨾": [T: "composition relationnelle en notation z"] # 0x2a3e (en: 'z notation relational composition', DeepL: 'z notation composition relationnelle') + - "⨿": [T: "amalgamation ou coproduit"] # 0x2a3f (en: 'amalgamation or coproduct') + - "⩀": [T: "intersection pointée"] # 0x2a40 (en: 'intersection with dot') + - "⩁": [T: "union à signe moins"] # 0x2a41 (en: 'union with minus sign', DeepL: 'union avec le signe moins') + - "⩂": [T: "union à barre en chef"] # 0x2a42 (en: 'union with overbar') + - "⩃": [T: "intersection à barre en chef"] # 0x2a43 (en: 'intersection with overbar') + - "⩄": [T: "intersection avec et logique"] # 0x2a44 (en: 'intersection with logical and') + - "⩅": [T: "union avec ou logique"] # 0x2a45 (en: 'union with logical or') + - "⩆": [T: "union par dessus intersection"] # 0x2a46 (en: 'union above intersection', MathPlayer: 'union par-dessus intersection', DeepL: 'union au-dessus de l'intersection') + - "⩇": [T: "intersection par dessus union"] # 0x2a47 (en: 'intersection above union', MathPlayer: 'intersection par-dessus union', DeepL: 'intersection au-dessus de l'union') + - "⩈": [T: "union par dessus bar par dessus intersection"] # 0x2a48 (en: 'union above bar above intersection', MathPlayer: 'union par-dessus bar par-dessus intersection', DeepL: 'union au-dessus de la barre au-dessus de l'intersection') + - "⩉": [T: "intersection par dessus trait par dessus union"] # 0x2a49 (en: 'intersection above bar above union', MathPlayer: 'intersection par-dessus trait par-dessus union', DeepL: 'intersection au-dessus de la barre au-dessus de l'union') + - "⩊": [T: "deux unions soudées côte à côte"] # 0x2a4a (en: 'union beside and joined with union') + - "⩋": [T: "deux intersections soudées côte à côte"] # 0x2a4b (en: 'intersection beside and joined with intersection') + - "⩌": [T: "union fermée à empattements"] # 0x2a4c (en: 'closed union with serifs') + - "⩍": [T: "intersection fermée à empattements"] # 0x2a4d (en: 'closed intersection with serifs') + - "⩎": [T: "deux intersections carrées emboîtées"] # 0x2a4e (en: 'double square intersection', DeepL: 'double intersection carrée') + - "⩏": [T: "deux unions carrées emboîtées"] # 0x2a4f (en: 'double square union', DeepL: 'double union carrée') + - "⩐": [T: "union fermée à empattements et produit fusionné"] # 0x2a50 (en: 'closed union with serifs and smash product') + - "⩑": [T: "et logique à point en chef"] # 0x2a51 (en: 'logical and with dot above', DeepL: 'logique et avec point au-dessus') + - "⩒": [T: "ou logique à point en chef"] # 0x2a52 (en: 'logical or with dot above', DeepL: 'logique ou avec point au-dessus') + - "⩓": [T: "double et logique"] # 0x2a53 (en: 'double logical and') + - "⩔": [T: "double ou logique"] # 0x2a54 (en: 'double logical or') + - "⩕": [T: "deux et logiques entrecroisés"] # 0x2a55 (en: 'two intersecting logical and') + - "⩖": [T: "deux ou logiques entrecroisés"] # 0x2a56 (en: 'two intersecting logical or') - "⩗": [t: "grand ou pentu"] # 0x2a57 (en: 'sloping large or') - "⩘": [t: "grand et pentu"] # 0x2a58 (en: 'sloping large and') - "⩙": [t: "et et ou logiques entrecroisés"] # 0x2a59 (en: 'logical or overlapping logical and', DeepL: 'logique ou chevauchement logique et') From 449846110b21939be06bdf925f38e024bf6f5c42 Mon Sep 17 00:00:00 2001 From: Olivier Thiffault Date: Sat, 1 Aug 2026 12:59:02 -0400 Subject: [PATCH 48/53] corrections to unicode-full.yaml v6 --- Rules/Languages/fr/unicode-full.yaml | 494 +++++++++++++-------------- 1 file changed, 247 insertions(+), 247 deletions(-) diff --git a/Rules/Languages/fr/unicode-full.yaml b/Rules/Languages/fr/unicode-full.yaml index 9c2d02dbc..a28e2557c 100644 --- a/Rules/Languages/fr/unicode-full.yaml +++ b/Rules/Languages/fr/unicode-full.yaml @@ -2146,253 +2146,253 @@ - "⩔": [T: "double ou logique"] # 0x2a54 (en: 'double logical or') - "⩕": [T: "deux et logiques entrecroisés"] # 0x2a55 (en: 'two intersecting logical and') - "⩖": [T: "deux ou logiques entrecroisés"] # 0x2a56 (en: 'two intersecting logical or') - - "⩗": [t: "grand ou pentu"] # 0x2a57 (en: 'sloping large or') - - "⩘": [t: "grand et pentu"] # 0x2a58 (en: 'sloping large and') - - "⩙": [t: "et et ou logiques entrecroisés"] # 0x2a59 (en: 'logical or overlapping logical and', DeepL: 'logique ou chevauchement logique et') - - "⩚": [t: "et logique à hampe médiane"] # 0x2a5a (en: 'logical and with middle stem') - - "⩛": [t: "ou logique à hampe médiane"] # 0x2a5b (en: 'logical or with middle stem') - - "⩜": [t: "et logique à tiret horizontal"] # 0x2a5c (en: 'logical and with horizontal dash') - - "⩝": [t: "ou logique à tiret horizontal"] # 0x2a5d (en: 'logical or with horizontal dash') - - "⩞": [t: "et logique à deux barres en chef"] # 0x2a5e (en: 'logical and with double overbar', DeepL: 'logique et avec double barre oblique') - - "⩟": [t: "et logique à barre souscrite"] # 0x2a5f (en: 'logical and with underbar') - - "⩠": [t: "et logique à deux barres souscrites"] # 0x2a60 (en: 'logical and with double underbar', DeepL: 'logique et avec double barre inférieure') - - "⩡": [t: "petit v à barre souscrite"] # 0x2a61 (en: 'small vee with underbar', DeepL: 'petit vee avec barre inférieure') - - "⩢": [t: "ou logique à deux barres en chef"] # 0x2a62 (en: 'logical or with double overbar', DeepL: 'logique ou avec double barre oblique') - - "⩣": [t: "ou logique à deux barres souscrites"] # 0x2a63 (en: 'logical or with double underbar', DeepL: 'logique ou avec double barre inférieure') - - "⩤": [t: "antirestriction de domaine en notation z"] # 0x2a64 (en: 'z notation domain antirestriction', DeepL: 'z notation domaine antirestriction') - - "⩥": [t: "antirestriction de codomaine en notation z"] # 0x2a65 (en: 'z notation range antirestriction', DeepL: 'z notation plage antirestriction') - - "⩦": [t: "égal point souscrit"] # 0x2a66 (en: 'equals sign with dot below', MathPlayer: 'signe égal point souscrit', DeepL: 'signe égal avec point en dessous') - - "⩧": [t: "identique à surmonté d'un point"] # 0x2a67 (en: 'identical with dot above', DeepL: 'identique au point ci-dessus') - - "⩨": [t: "deux barres verticales à trois traverses"] # 0x2a68 (en: 'triple horizontal bar with double vertical stroke', DeepL: 'triple barre horizontale avec double trait vertical') - - "⩩": [t: "trois barres verticales à trois traverses"] # 0x2a69 (en: 'triple horizontal bar with triple vertical stroke', DeepL: 'triple barre horizontale avec triple trait vertical') - - "⩪": [t: "opérateur tilde point en chef"] # 0x2a6a (en: 'tilde operator with dot above') - - "⩫": [t: "opérateur tilde à points ascendants"] # 0x2a6b (en: 'tilde operator with rising dots', DeepL: 'opérateur tilde avec points ascendants') - - "⩬": [t: "similaire à moins similaire à"] # 0x2a6c (en: 'similar minus similar', DeepL: 'similaire moins similaire') - - "⩭": [t: "congruent point en chef"] # 0x2a6d (en: 'congruent with dot above') - - "⩮": [t: "Égal astérisque en chef"] # 0x2a6e (en: 'equals with asterisk', DeepL: 'égaux avec astérisque') - - "⩯": [t: "presque égal à circonflexe"] # 0x2a6f (en: 'almost equal to with circumflex accent') - - "⩰": [t: "approximativement égal à ou égal à"] # 0x2a70 (en: 'approximately equal to or equal to') - - "⩱": [t: "plus signe égal en chef"] # 0x2a71 (en: 'equals sign above plus sign') - - "⩲": [t: "égal à signe plus en chef"] # 0x2a72 (en: 'plus sign above equals sign') - - "⩳": [t: "tilde signe égal en chef"] # 0x2a73 (en: 'equals sign above tilde operator') - - "⩴": [t: "double deux points égal à"] # 0x2a74 (en: 'double colon equal', MathPlayer: 'double deux-points égal à', DeepL: 'double deux-points égal') - - "⩵": [t: "deux signes égal à consécutifs"] # 0x2a75 (en: 'two consecutive equals signs') - - "⩶": [t: "trois signes égal à consécutifs"] # 0x2a76 (en: 'three consecutive equals signs', DeepL: 'trois signes égaux consécutifs') - - "⩷": [t: "égal à deux points en chef deux points souscrits"] # 0x2a77 (en: 'equals sign with two dots above and two dots below') - - "⩸": [t: "équivalent quatre points en chef"] # 0x2a78 (en: 'equivalent with four dots above') - - "⩹": [t: "inférieur à avec cercle inscrit"] # 0x2a79 (en: 'less than with circle inside') - - "⩺": [t: "supérieur à avec cercle inscrit"] # 0x2a7a (en: 'greater than with circle inside') - - "⩻": [t: "inférieur à point d'interrogation en chef"] # 0x2a7b (en: 'less than with question mark above') - - "⩼": [t: "supérieur à point d'interrogation en chef"] # 0x2a7c (en: 'greater than with question mark above') - - "⩽": [t: "plus petit ou égal à pentu"] # 0x2a7d (en: 'less than or slanted equal to') - - "⩾": [t: "supérieur à ou égal à pentu"] # 0x2a7e (en: 'greater than or slanted equal to') - - "⩿": [t: "inférieur à ou égal à pentu point inscrit"] # 0x2a7f (en: 'less than or slanted equal to with dot inside') - - "⪀": [t: "supérieur à ou égal à pentu point inscrit"] # 0x2a80 (en: 'greater than or slanted equal to with dot inside') - - "⪁": [t: "inférieur à ou égal à pentu point en chef"] # 0x2a81 (en: 'less than or slanted equal to with dot above') - - "⪂": [t: "supérieur à ou égal à pentu point en chef"] # 0x2a82 (en: 'greater than or slanted equal to with dot above') - - "⪃": [t: "inférieur à ou égal à pentu point en chef droit"] # 0x2a83 (en: 'less than or slanted equal to with dot above right') - - "⪄": [t: "supérieur à ou égal à pentu point en chef gauche"] # 0x2a84 (en: 'greater than or slanted equal to with dot above left') - - "⪅": [t: "inférieur à ou approximatif"] # 0x2a85 (en: 'less than or approximate', DeepL: 'moins que ou approximatif') - - "⪆": [t: "supérieur à ou approximatif"] # 0x2a86 (en: 'greater than or approximate', DeepL: 'plus grand que ou approximatif') - - "⪇": [t: "inférieur à et pas égal à une ligne"] # 0x2a87 (en: 'less than and single line not equal to', DeepL: 'inférieur à et trait simple non égal à') - - "⪈": [t: "supérieur à et pas égal à une ligne"] # 0x2a88 (en: 'greater than and single line not equal to', DeepL: 'plus grand que et trait simple non égal à') - - "⪉": [t: "inférieur à et non approximatif"] # 0x2a89 (en: 'less than and not approximate') - - "⪊": [t: "supérieur à et non approximatif"] # 0x2a8a (en: 'greater than and not approximate') - - "⪋": [t: "inférieur à par dessus égal à deux lignes par dessus supérieur à"] # 0x2a8b (en: 'less than above double line equal above greater than', DeepL: 'moins que au-dessus de la double ligne égal au-dessus de plus grand que') - - "⪌": [t: "supérieur à par dessus égal à deux lignes par dessus inférieur à"] # 0x2a8c (en: 'greater than above double line equal above less than', DeepL: 'plus grand que au-dessus double ligne égal au-dessus moins que') - - "⪍": [t: "inférieur à par dessus similaire à ou égal à"] # 0x2a8d (en: 'less than above similar or equal', MathPlayer: 'inférieur à par-dessus similaire à ou égal à', DeepL: 'moins que plus haut similaire ou égal') - - "⪎": [t: "supérieur à par dessus similaire à ou égal à"] # 0x2a8e (en: 'greater than above similar or equal', MathPlayer: 'supérieur à par-dessus similaire à ou égal à', DeepL: 'plus grand que plus haut similaire ou égal') - - "⪏": [t: "inférieur à par dessus similaire à par dessus supérieur à"] # 0x2a8f (en: 'less than above similar above greater than', MathPlayer: 'inférieur à par-dessus similaire à par-dessus supérieur à', DeepL: 'inférieur à supérieur similaire supérieur supérieur') - - "⪐": [t: "supérieur à par dessus similaire à par dessus inférieur à"] # 0x2a90 (en: 'greater than above similar above less than', MathPlayer: 'supérieur à par-dessus similaire à par-dessus inférieur à', DeepL: 'supérieur à supérieur similaire supérieur inférieur') - - "⪑": [t: "inférieur à par dessus supérieur à par dessus égal à deux lignes"] # 0x2a91 (en: 'less than above greater than above double line equal', MathPlayer: 'inférieur à par-dessus supérieur à par-dessus égal à deux lignes', DeepL: 'moins que plus haut plus grand que plus haut double ligne égale') - - "⪒": [t: "supérieur à par dessus inférieur à par dessus égal à deux lignes"] # 0x2a92 (en: 'greater than above less than above double line equal', MathPlayer: 'supérieur à par-dessus inférieur à par-dessus égal à deux lignes', DeepL: 'plus grand que plus haut moins que plus haut double ligne égale') - - "⪓": [t: "inférieur à par dessus égal à pentu par dessus supérieur à par dessus égal à pentu"] # 0x2a93 (en: 'less than above slanted equal above greater than above slanted equal', MathPlayer: 'inférieur à par-dessus égal à pentu par-dessus supérieur à par-dessus égal à pentu', DeepL: 'inférieur à supérieur égal incliné supérieur supérieur supérieur supérieur égal incliné') - - "⪔": [t: "supérieur à par dessus égal à pentu par dessus inférieur à par dessus égal à pentu"] # 0x2a94 (en: 'greater than above slanted equal above less than above slanted equal', MathPlayer: 'supérieur à par-dessus égal à pentu par-dessus inférieur à par-dessus égal à pentu', DeepL: 'plus grand que au-dessus de l'égal incliné au-dessus de moins que au-dessus de l'égal incliné') - - "⪕": [t: "Égal à incliné ou inférieur à"] # 0x2a95 (en: 'slanted equal to or less than', DeepL: 'incliné égal ou inférieur à') - - "⪖": [t: "Égal à incliné ou supérieur à"] # 0x2a96 (en: 'slanted equal to or greater than', DeepL: 'incliné égal ou supérieur à') - - "⪗": [t: "égal à pentu ou inférieur à point inscrit"] # 0x2a97 (en: 'slanted equal to or less than with dot inside') - - "⪘": [t: "égal à pentu ou supérieur à point inscrit"] # 0x2a98 (en: 'slanted equal to or greater than with dot inside') - - "⪙": [t: "égal à deux lignes ou inférieur à"] # 0x2a99 (en: 'double line equal to or less than') - - "⪚": [t: "égal à deux lignes ou supérieur à"] # 0x2a9a (en: 'double line equal to or greater than') - - "⪛": [t: "inférieur à ou égal à à deux lignes inclinées"] # 0x2a9b (en: 'double line slanted equal to or less than', DeepL: 'double ligne oblique égale ou inférieure à') - - "⪜": [t: "supérieur à ou égal à à deux lignes inclinées"] # 0x2a9c (en: 'double line slanted equal to or greater than', DeepL: 'double trait oblique égal ou supérieur à') - - "⪝": [t: "similaire à ou inférieur à"] # 0x2a9d (en: 'similar or less than') - - "⪞": [t: "similaire à ou supérieur à"] # 0x2a9e (en: 'similar or greater than') - - "⪟": [t: "similaire à par dessus inférieur à par dessus signe égal"] # 0x2a9f (en: 'similar above less than above equals sign', MathPlayer: 'similaire à par-dessus inférieur à par-dessus signe égal', DeepL: 'similaire ci-dessus moins que ci-dessus signe égal') - - "⪠": [t: "similaire à par dessus supérieur à par dessus signe égal"] # 0x2aa0 (en: 'similar above greater than above equals sign', MathPlayer: 'similaire à par-dessus supérieur à par-dessus signe égal', DeepL: 'similaire supérieur supérieur supérieur signe égal') - - "⪡": [t: "deux inférieur à emboîtés"] # 0x2aa1 (en: 'double nested less than') - - "⪢": [t: "deux supérieur à emboîtés"] # 0x2aa2 (en: 'double nested greater than') - - "⪣": [t: "deux inférieur à emboîtés avec barre souscrite"] # 0x2aa3 (en: 'double nested less than with underbar', DeepL: 'double emboîtement moins que avec barre inférieure') - - "⪤": [t: "deux supérieur à entrecroisés"] # 0x2aa4 (en: 'greater than overlapping less than') - - "⪥": [t: "supérieur à à côté de inférieur à"] # 0x2aa5 (en: 'greater than beside less than') - - "⪦": [t: "inférieur à fermé d'un arc"] # 0x2aa6 (en: 'less than closed by curve') - - "⪧": [t: "supérieur à fermé d'un arc"] # 0x2aa7 (en: 'greater than closed by curve') - - "⪨": [t: "inférieur à fermé d'un arc par dessus égal à pentu"] # 0x2aa8 (en: 'less than closed by curve above slanted equal', MathPlayer: 'inférieur à fermé d'un arc par-dessus égal à pentu', DeepL: 'inférieur à fermé par une courbe au-dessus d'un égal incliné') - - "⪩": [t: "supérieur à fermé d'un arc par dessus égal à pentu"] # 0x2aa9 (en: 'greater than closed by curve above slanted equal', MathPlayer: 'supérieur à fermé d'un arc par-dessus égal à pentu', DeepL: 'plus grand que fermé par une courbe au-dessus inclinée égale') - - "⪪": [t: "plus petit que en fourche"] # 0x2aaa (en: 'smaller than') - - "⪫": [t: "plus grand que en fourche"] # 0x2aab (en: 'larger than') - - "⪬": [t: "plus petit ou égal que en fourche"] # 0x2aac (en: 'smaller than or equal to') - - "⪭": [t: "plus grand ou égal que en fourche"] # 0x2aad (en: 'larger than or equal to') - - "⪮": [t: "égal et dos d'âne"] # 0x2aae (en: 'equals sign with bumpy above', MathPlayer: 'signe égal et dos-d'âne', DeepL: 'signe égal avec bosses au-dessus') - - "⪯": [t: "précède par dessus signe égal à une ligne"] # 0x2aaf (en: 'precedes above single line equals sign', MathPlayer: 'précède par-dessus signe égal à une ligne', DeepL: 'précède le signe égal d'une seule ligne') - - "⪰": [t: "suit par dessus signe égal à une ligne"] # 0x2ab0 (en: 'succeeds above single line equals sign', DeepL: 'succède au-dessus d'une ligne simple au signe égal') - - "⪱": [t: "précède par dessus pas égal à une ligne"] # 0x2ab1 (en: 'precedes above single line not equal to', DeepL: 'précède au-dessus d'une seule ligne n'est pas égal à') - - "⪲": [t: "suit par dessus pas égal à une ligne"] # 0x2ab2 (en: 'succeeds above single line not equal to', DeepL: 'réussit au-dessus d'une seule ligne non égale à') - - "⪳": [t: "précède par dessus signe égal"] # 0x2ab3 (en: 'precedes above equals sign', DeepL: 'précède le signe égal') - - "⪴": [t: "suit par dessus signe égal"] # 0x2ab4 (en: 'succeeds above equals sign', DeepL: 'réussit au-dessus du signe égal') - - "⪵": [t: "précède par dessus pas égal à"] # 0x2ab5 (en: 'precedes above not equal to', MathPlayer: 'précède par-dessus pas égal à', DeepL: 'précède plus haut n'est pas égal à') - - "⪶": [t: "suit par dessus pas égal à"] # 0x2ab6 (en: 'succeeds above not equal to', MathPlayer: 'suit par-dessus pas égal à', DeepL: 'succède à n'est pas égal à') - - "⪷": [t: "précède par dessus presque égal à"] # 0x2ab7 (en: 'precedes above almost equal to', DeepL: 'précède le signe presque égal à') - - "⪸": [t: "suit par dessus presque égal à"] # 0x2ab8 (en: 'succeeds above almost equal to', DeepL: 'réussit au-dessus de presque égal à') - - "⪹": [t: "précède par dessus non presque égal à"] # 0x2ab9 (en: 'precedes above not almost equal to', DeepL: 'précède au dessus pas presque égal à') - - "⪺": [t: "suit par dessus non presque égal à"] # 0x2aba (en: 'succeeds above not almost equal to', DeepL: 'réussit au-dessus de n'est pas presque égal à') - - "⪻": [t: "double précède"] # 0x2abb (en: 'double precedes') - - "⪼": [t: "double suit"] # 0x2abc (en: 'double succeeds') - - "⪽": [t: "sous ensemble pointé"] # 0x2abd (en: 'subset with dot', MathPlayer: 'sous-ensemble pointé', DeepL: 'sous-ensemble avec point') - - "⪾": [t: "sur ensemble pointé"] # 0x2abe (en: 'superset with dot', MathPlayer: 'sur-ensemble pointé', DeepL: 'super-ensemble avec point') - - "⪿": [t: "sous ensemble plus souscrit"] # 0x2abf (en: 'subset with plus sign below', MathPlayer: 'sous-ensemble plus souscrit', DeepL: 'sous-ensemble avec le signe plus en dessous') - - "⫀": [t: "sur ensemble plus souscrit"] # 0x2ac0 (en: 'superset with plus sign below', MathPlayer: 'sur-ensemble plus souscrit', DeepL: 'superposition avec le signe plus en dessous') - - "⫁": [t: "sous ensemble à signe de multiplication souscrit"] # 0x2ac1 (en: 'subset with multiplication sign below', MathPlayer: 'sous-ensemble à signe de multiplication souscrit', DeepL: 'sous-ensemble avec signe de multiplication en dessous') - - "⫂": [t: "sur ensemble à signe de multiplication souscrit"] # 0x2ac2 (en: 'superset with multiplication sign below', MathPlayer: 'sur-ensemble à signe de multiplication souscrit', DeepL: 'superset avec signe de multiplication en dessous') - - "⫃": [t: "sous ensemble de ou égal à point en chef"] # 0x2ac3 (en: 'subset of or equal to with dot above', MathPlayer: 'sous-ensemble de ou égal à point en chef', DeepL: 'sous-ensemble de ou égal à avec point au-dessus') - - "⫄": [t: "sur ensemble de ou égal à point en chef"] # 0x2ac4 (en: 'superset of or equal to with dot above', MathPlayer: 'sur-ensemble de ou égal à point en chef', DeepL: 'sur-ensemble de ou égal à avec point au-dessus') - - "⫅": [t: "sous ensemble de par dessus signe égal"] # 0x2ac5 (en: 'subset of above equals sign', DeepL: 'sous-ensemble du signe égal ci-dessus') - - "⫆": [t: "sur ensemble de par dessus signe égal"] # 0x2ac6 (en: 'superset of above equals sign', DeepL: 'sur-ensemble du signe égal ci-dessus') - - "⫇": [t: "sous ensemble de par dessus opérateur tilde"] # 0x2ac7 (en: 'subset of above tilde operator', MathPlayer: 'sous-ensemble de par-dessus opérateur tilde', DeepL: 'sous-ensemble de l'opérateur tilde ci-dessus') - - "⫈": [t: "sur ensemble de par dessus opérateur tilde"] # 0x2ac8 (en: 'superset of above tilde operator', MathPlayer: 'sur-ensemble de par-dessus opérateur tilde', DeepL: 'superset de l'opérateur tilde ci-dessus') - - "⫉": [t: "sous ensemble de par dessus presque égal à"] # 0x2ac9 (en: 'subset of above almost equal to', DeepL: 'sous-ensemble de ce qui précède presque égal à') - - "⫊": [t: "sur ensemble de par dessus presque égal à"] # 0x2aca (en: 'superset of above almost equal to', DeepL: 'superposé de supérieur à presque égal à') - - "⫋": [t: "sous ensemble de par dessus pas égal à"] # 0x2acb (en: 'subset above not equal to', DeepL: 'sous-ensemble supérieur non égal à') - - "⫌": [t: "sur ensemble de par dessus pas égal à"] # 0x2acc (en: 'superset of above not equal to', DeepL: 'superset of above not equal to') - - "⫍": [t: "opérateur boîte carrée ouverte gauche"] # 0x2acd (en: 'square left open box operator', DeepL: 'carré gauche boîte ouverte opérateur') - - "⫎": [t: "opérateur boîte carrée ouverte droite"] # 0x2ace (en: 'square right open box operator', DeepL: 'opérateur de boîte ouverte carrée droite') - - "⫏": [t: "sous ensemble clos"] # 0x2acf (en: 'closed subset', MathPlayer: 'sous-ensemble clos', DeepL: 'sous-ensemble fermé') - - "⫐": [t: "sur ensemble clos"] # 0x2ad0 (en: 'closed superset', MathPlayer: 'sur-ensemble clos', DeepL: 'sur-ensemble fermé') - - "⫑": [t: "sous ensemble clos ou égal à"] # 0x2ad1 (en: 'closed subset or equal to', MathPlayer: 'sous-ensemble clos ou égal à', DeepL: 'sous-ensemble fermé ou égal à') - - "⫒": [t: "sur ensemble clos ou égal à"] # 0x2ad2 (en: 'closed superset or equal to', MathPlayer: 'sur-ensemble clos ou égal à', DeepL: 'super-ensemble fermé ou égal à') - - "⫓": [t: "sous ensemble par dessus sur ensemble"] # 0x2ad3 (en: 'subset above superset', MathPlayer: 'sous-ensemble par-dessus sur-ensemble', DeepL: 'sous-ensemble au-dessus de sur-ensemble') - - "⫔": [t: "sur ensemble par dessus sous ensemble"] # 0x2ad4 (en: 'superset above subset', MathPlayer: 'sur-ensemble par-dessus sous-ensemble', DeepL: 'sur-ensemble au-dessus du sous-ensemble') - - "⫕": [t: "sous ensemble par dessus sous ensemble"] # 0x2ad5 (en: 'subset above subset', MathPlayer: 'sous-ensemble par-dessus sous-ensemble', DeepL: 'sous-ensemble au-dessus d'un sous-ensemble') - - "⫖": [t: "sur ensemble par dessus sur ensemble"] # 0x2ad6 (en: 'superset above superset', MathPlayer: 'sur-ensemble par-dessus sur-ensemble', DeepL: 'superset above superset') - - "⫗": [t: "sur-ensemble à côté de sous-ensemble"] # 0x2ad7 (en: 'superset beside subset', SRE: 'sur ensemble à côté de sous ensemble') - - "⫘": [t: "sur ensemble chaîné à sous ensemble"] # 0x2ad8 (en: 'superset beside and joined by dash with subset', MathPlayer: 'sur-ensemble chaîné à sous-ensemble', DeepL: 'superset beside and joined by dash with subset') - - "⫙": [t: "appartient à ouvert vers le bas"] # 0x2ad9 (en: 'element of opening downwards') - - "⫚": [t: "fourche surmontée d'un t"] # 0x2ada (en: 'pitchfork with tee top') - - "⫛": [t: "intersection transversale"] # 0x2adb (en: 'transversal intersection') - - "⫝̸": [t: "bifurcation (non indépendant)"] # 0x2adc (en: 'forking', DeepL: 'fourche') - - "⫝": [t: "non bifurcation (indépendant)"] # 0x2add (en: 'nonforking', DeepL: 'non fourchu') - - "⫞": [t: "taquet gauche court"] # 0x2ade (en: 'short left tack', DeepL: 'courte virgule à gauche') - - "⫟": [t: "taquet court vers le bas"] # 0x2adf (en: 'short down tack', DeepL: 'épissure courte vers le bas') - - "⫠": [t: "taquet court vers le haut"] # 0x2ae0 (en: 'short up tack', DeepL: 'court vers le haut') - - "⫡": [t: "perpendiculaire à s"] # 0x2ae1 (en: 'perpendicular with s', DeepL: 'perpendiculaire avec s') - - "⫢": [t: "triple tourniquet droit à barre verticale"] # 0x2ae2 (en: 'vertical bar triple right turnstile', DeepL: 'barre verticale triple tourniquet droit') - - "⫣": [t: "tourniquet gauche à double barre verticale"] # 0x2ae3 (en: 'double vertical bar left turnstile', DeepL: 'double barre verticale tourniquet gauche') - - "⫤": [t: "double tourniquet gauche à barre verticale"] # 0x2ae4 (en: 'vertical bar double left turnstile') - - "⫥": [t: "double tourniquet gauche à double barre verticale"] # 0x2ae5 (en: 'double vertical bar double left turnstile', DeepL: 'double barre verticale double tourniquet gauche') - - "⫦": [t: "double barre verticale gauche à traverse"] # 0x2ae6 (en: 'long dash from left member of double vertical') - - "⫧": [t: "taquet court vers le bas avec barre en chef"] # 0x2ae7 (en: 'short down tack with overbar') - - "⫨": [t: "taquet court vers le haut avec barre souscrite"] # 0x2ae8 (en: 'short up tack with underbar') - - "⫩": [t: "taquet court vers le haut par dessus taquet court vers le bas"] # 0x2ae9 (en: 'short up tack above short down tack', MathPlayer: 'taquet court vers le haut par-dessus taquet court vers le bas', DeepL: 'point court vers le haut au-dessus du point court vers le bas') - - "⫪": [t: "double taquet vers le bas"] # 0x2aea (en: 'double down tack', DeepL: 'double amure vers le bas') - - "⫫": [t: "double taquet vers le haut"] # 0x2aeb (en: 'double up tack') - - "⫬": [t: "négation à deux traits"] # 0x2aec (en: 'double stroke not sign', MathPlayer: 'signe négation à deux traits', DeepL: 'double trait ne signe pas') - - "⫭": [t: "négation à deux traits réfléchi"] # 0x2aed (en: 'reversed double stroke not sign', MathPlayer: 'signe négation à deux traits réfléchi', DeepL: 'double trait inversé signe non') - - "⫮": [t: "n'est pas un diviseur de à barre de négation réfléchie"] # 0x2aee (en: 'does not divide with reversed negation slash') - - "⫯": [t: "ligne verticale cercle en chef"] # 0x2aef (en: 'vertical line with circle above') - - "⫰": [t: "ligne verticale cercle souscrit"] # 0x2af0 (en: 'vertical line with circle below') - - "⫱": [t: "taquet vers le bas surmontant un cercle"] # 0x2af1 (en: 'down tack with circle below') - - "⫲": [t: "parallèlle à vertical à une traverse"] # 0x2af2 (en: 'parallel with horizontal stroke') - - "⫳": [t: "parallèle à avec opérateur tilde"] # 0x2af3 (en: 'parallel with tilde operator') - - "⫴": [t: "relation binaire triple barre verticale"] # 0x2af4 (en: 'triple vertical bar binary relation', DeepL: 'triple barre verticale relation binaire') - - "⫵": [t: "triple barre verticale à une traverse"] # 0x2af5 (en: 'triple vertical bar with horizontal stroke', DeepL: 'triple barre verticale avec trait horizontal') - - "⫶": [t: "opérateur trois points"] # 0x2af6 (en: 'triple colon operator', DeepL: 'opérateur triple deux-points') - - "⫷": [t: "trois inférieur à emboîtés"] # 0x2af7 (en: 'triple nested less than', DeepL: 'triple emboîtement moins que') - - "⫸": [t: "trois supérieur à emboîtés"] # 0x2af8 (en: 'triple nested greater than', DeepL: 'triple plus grand que imbriqué') - - "⫹": [t: "inférieur à ou égal à et deux lignes inclinées"] # 0x2af9 (en: 'double line slanted less than or equal to', DeepL: 'double ligne oblique inférieure ou égale à') - - "⫺": [t: "supérieur à ou égal à et deux lignes inclinées"] # 0x2afa (en: 'double line slanted greater than or equal to', DeepL: 'double ligne oblique supérieure ou égale à') - - "⫻": [t: "relation binaire triple oblique"] # 0x2afb (en: 'triple solidus binary relation', DeepL: 'relation binaire triple solidus') - - "⫼": [t: "grand opérateur à trois barres verticales"] # 0x2afc (en: 'large triple vertical bar operator', DeepL: 'grande barre verticale triple opérateur') - - "⫽": [t: "opérateur double oblique"] # 0x2afd (en: 'double solidus operator', DeepL: 'opérateur double solidus') - - "⫾": [t: "barre verticale blanche"] # 0x2afe (en: 'white vertical bar') - - "⫿": [t: "barre verticale blanche n aire"] # 0x2aff (en: 'white vertical bar', DeepL: 'barre verticale blanche') - - "⬀": [t: "flèche blanche nord est"] # 0x2b00 (en: 'north east white arrow', DeepL: 'flèche blanche nord-est') - - "⬁": [t: "flèche blanche nord ouest"] # 0x2b01 (en: 'north west white arrow', DeepL: 'flèche blanche nord-ouest') - - "⬂": [t: "flèche blanche sud est"] # 0x2b02 (en: 'south east white arrow', DeepL: 'sud est flèche blanche') - - "⬃": [t: "flèche blanche sud ouest"] # 0x2b03 (en: 'south west white arrow', DeepL: 'sud ouest flèche blanche') - - "⬄": [t: "flèche blanche bilatérale"] # 0x2b04 (en: 'left right white arrow', DeepL: 'flèche blanche gauche droite') - - "⬅": [t: "flèche noire vers la gauche"] # 0x2b05 (en: 'leftwards black arrow') - - "⬆": [t: "flèche noire vers le haut"] # 0x2b06 (en: 'upwards black arrow', DeepL: 'vers le haut flèche noire') - - "⬇": [t: "flèche noire vers le bas"] # 0x2b07 (en: 'downwards black arrow') - - "⬈": [t: "flèche noire nord est"] # 0x2b08 (en: 'north east black arrow', DeepL: 'flèche noire nord-est') - - "⬉": [t: "flèche noire nord ouest"] # 0x2b09 (en: 'north west black arrow', DeepL: 'nord ouest flèche noire') - - "⬊": [t: "flèche noire sud est"] # 0x2b0a (en: 'south east black arrow', DeepL: 'flèche noire sud-est') - - "⬋": [t: "flèche noire sud ouest"] # 0x2b0b (en: 'south west black arrow') - - "⬌": [t: "flèche noire bilatérale"] # 0x2b0c (en: 'left right black arrow', DeepL: 'flèche noire gauche droite') - - "⬍": [t: "flèche noire haut et bas"] # 0x2b0d (en: 'up down black arrow', DeepL: 'flèche noire haut-bas') - - "⬎": [t: "flèche vers la droite à pointe pliée vers le bas"] # 0x2b0e (en: 'rightwards arrow with tip downwards', DeepL: 'flèche vers la droite avec pointe vers le bas') - - "⬏": [t: "flèche vers la droite à pointe pliée vers le haut"] # 0x2b0f (en: 'rightwards arrow with tip upwards', DeepL: 'flèche vers la droite avec pointe vers le haut') - - "⬐": [t: "flèche vers la gauche à pointe pliée vers le bas"] # 0x2b10 (en: 'leftwards arrow with tip downwards', DeepL: 'flèche vers la gauche avec pointe vers le bas') - - "⬑": [t: "flèche vers la gauche à pointe pliée vers le haut"] # 0x2b11 (en: 'leftwards arrow with tip upwards', DeepL: 'flèche vers la gauche avec pointe vers le haut') - - "⬒": [t: "carré à moitié supérieure noire"] # 0x2b12 (en: 'square with top half black', DeepL: 'carré dont la moitié supérieure est noire') - - "⬓": [t: "carré à moitié inférieure noire"] # 0x2b13 (en: 'square with bottom half black', DeepL: 'carré dont la moitié inférieure est noire') - - "⬔": [t: "carré à moitié diagonale supérieure droite noire"] # 0x2b14 (en: 'square with upper right diagonal half black', DeepL: 'carré dont la diagonale supérieure droite est à moitié noire') - - "⬕": [t: "carré à moitié diagonale inférieure droite noire"] # 0x2b15 (en: 'square with lower left diagonal half black', DeepL: 'carré avec diagonale inférieure gauche demi noire') - - "⬖": [t: "losange à moitié gauche noire"] # 0x2b16 (en: 'diamond with left half black', DeepL: 'diamant avec la moitié gauche noire') - - "⬗": [t: "losange à moitié droite noire"] # 0x2b17 (en: 'diamond with right half black', DeepL: 'diamant dont la moitié droite est noire') - - "⬘": [t: "losange à moitié supérieure noire"] # 0x2b18 (en: 'diamond with top half black', DeepL: 'diamant dont la moitié supérieure est noire') - - "⬙": [t: "losange à moitié inférieure noire"] # 0x2b19 (en: 'diamond with bottom half black', DeepL: 'losange dont la moitié inférieure est noire') - - "⬚": [t: "carré en pointillés"] # 0x2b1a (en: 'box', DeepL: 'boîte') - - "⬛": [t: "grand carré noir"] # 0x2b1b (en: 'black large square') - - "⬜": [t: "grand carré blanc"] # 0x2b1c (en: 'white large square') - - "⬝": [t: "très petit carré noir"] # 0x2b1d (en: 'black very small square', DeepL: 'carré noir très petit') - - "⬞": [t: "très petit carré blanc"] # 0x2b1e (en: 'white very small square', DeepL: 'carré blanc très petit') - - "⬟": [t: "pentagone noir"] # 0x2b1f (en: 'black pentagon') - - "⬠": [t: "pentagone blanc"] # 0x2b20 (en: 'white pentagon') - - "⬡": [t: "hexagone blanc"] # 0x2b21 (en: 'white hexagon') - - "⬢": [t: "hexagone noir"] # 0x2b22 (en: 'black hexagon') - - "⬣": [t: "hexagone noir posé sur un côté"] # 0x2b23 (en: 'horizontal black hexagon', DeepL: 'hexagone noir horizontal') - - "⬤": [t: "grand cercle noir"] # 0x2b24 (en: 'black large circle') - - "⬥": [t: "losange moyen noir"] # 0x2b25 (en: 'black medium diamond', DeepL: 'losange noir moyen') - - "⬦": [t: "losange moyen blanc"] # 0x2b26 (en: 'white medium diamond', DeepL: 'diamant moyen blanc') - - "⬧": [t: "rhombe moyen noir"] # 0x2b27 (en: 'black medium lozenge', DeepL: 'losange moyen noir') - - "⬨": [t: "rhombe moyen blanc"] # 0x2b28 (en: 'white medium lozenge', DeepL: 'losange moyen blanc') - - "⬩": [t: "petit losange noir"] # 0x2b29 (en: 'black small diamond') - - "⬪": [t: "petit rhombe noir"] # 0x2b2a (en: 'black small lozenge', DeepL: 'noir petit losange') - - "⬫": [t: "petit rhombe blanc"] # 0x2b2b (en: 'white small lozenge', DeepL: 'petit losange blanc') - - "⬬": [t: "ellipse horizontale noire"] # 0x2b2c (en: 'black horizontal ellipse') - - "⬭": [t: "ellipse horizontale blanche"] # 0x2b2d (en: 'white horizontal ellipse') - - "⬮": [t: "ellipse verticale noire"] # 0x2b2e (en: 'black vertical ellipse') - - "⬯": [t: "ellipse verticale blanche"] # 0x2b2f (en: 'white vertical ellipse') - - "⬰": [t: "flèche vers la gauche à petit cercle"] # 0x2b30 (en: 'left arrow with small circle', DeepL: 'flèche gauche avec petit cercle') - - "⬱": [t: "trois flèches vers la gauche"] # 0x2b31 (en: 'three leftwards arrows') - - "⬲": [t: "flèche vers la gauche à signe plus cerclé"] # 0x2b32 (en: 'left arrow with circled plus', DeepL: 'flèche gauche avec plus encerclé') - - "⬳": [t: "longue flèche vers la gauche en tire bouchon"] # 0x2b33 (en: 'long leftwards squiggle arrow', DeepL: 'longue flèche gribouillée vers la gauche') - - "⬴": [t: "flèche à deux pointes vers la gauche barrée verticalement"] # 0x2b34 (en: 'leftwards two headed arrow with vertical stroke', DeepL: 'flèche bicéphale gauche avec trait vertical') - - "⬵": [t: "flèche à deux pointes vers la gauche barrée deux fois verticalement"] # 0x2b35 (en: 'leftwards two headed arrow with double vertical stroke', DeepL: 'flèche à deux têtes vers la gauche avec double trait vertical') - - "⬶": [t: "flèche à deux têtes d'un taquet vers la gauche"] # 0x2b36 (en: 'leftwards two headed arrow from bar', DeepL: 'flèche biface gauche à partir de l'ardillon') - - "⬷": [t: "flèche à trois traits et à deux têtes vers la gauche"] # 0x2b37 (en: 'leftwards two headed triple dash arrow', DeepL: 'flèche gauche à deux têtes et triple tiret') - - "⬸": [t: "flèche vers la gauche à fût pointillé"] # 0x2b38 (en: 'leftwards arrow with dotted stem', DeepL: 'vers la gauche flèche avec tige en pointillé') - - "⬹": [t: "flèche empennée vers la gauche barrée verticalement"] # 0x2b39 (en: 'leftwards arrow with tail with vertical stroke', DeepL: 'vers la gauche flèche avec empennage avec trait vertical') - - "⬺": [t: "flèche empennée vers la gauche barrée deux fois verticalement"] # 0x2b3a (en: 'leftwards arrow with tail with double vertical stroke', DeepL: 'vers la gauche flèche avec empennage avec double trait vertical') - - "⬻": [t: "flèche empennée à deux têtes vers la gauche"] # 0x2b3b (en: 'leftwards two headed arrow with tail', DeepL: 'flèche à deux têtes avec empennage vers la gauche') - - "⬼": [t: "flèche empennée à deux têtes vers la gauche barrée verticalement"] # 0x2b3c (en: 'leftwards two headed arrow with tail with vertical stroke', DeepL: 'flèche bicéphale gauche avec empennage et trait vertical') - - "⬽": [t: "flèche empennée à deux têtes vers la gauche barrée deux fois verticalement"] # 0x2b3d (en: 'leftwards two headed arrow with tail with double vertical stroke', DeepL: 'flèche biface gauche avec empennage à double trait vertical') - - "⬾": [t: "flèche vers la gauche au travers un x"] # 0x2b3e (en: 'leftwards arrow through x', DeepL: 'flèche vers la gauche à travers le x') - - "⬿": [t: "flèche vers la gauche bossue"] # 0x2b3f (en: 'wave arrow pointing directly left', DeepL: 'flèche ondulée pointant directement vers la gauche') - - "⭀": [t: "flèche vers la gauche surmontée d'un égal"] # 0x2b40 (en: 'equals sign above leftwards arrow', DeepL: 'signe égal au-dessus de la flèche vers la gauche') - - "⭁": [t: "flèche vers la gauche surmontée d'un tilde"] # 0x2b41 (en: 'reverse tilde operator above leftwards arrow', DeepL: 'opérateur tilde inversé au-dessus de la flèche vers la gauche') - - "⭂": [t: "presque égal à réfléchi surmonté d'une flèche vers la gauche"] # 0x2b42 (en: 'leftwards arrow above reverse almost equal to', DeepL: 'flèche vers la gauche au-dessus de l'inverse presque égal à') - - "⭃": [t: "flèche vers la droite à travers un inférieur à"] # 0x2b43 (en: 'rightwards arrow through greater than', DeepL: 'flèche vers la droite à travers plus grand que') - - "⭄": [t: "flèche vers la droite au travers d'un sous ensemble de"] # 0x2b44 (en: 'rightwards arrow through superset', DeepL: 'flèche vers la droite à travers le super-ensemble') - - "⭅": [t: "quadruple flèche vers la gauche"] # 0x2b45 (en: 'leftwards quadruple arrow', DeepL: 'flèche quadruple vers la gauche') - - "⭆": [t: "quadruple flèche vers la droite"] # 0x2b46 (en: 'rightwards quadruple arrow', DeepL: 'flèche quadruple vers la droite') - - "⭇": [t: "flèche vers la droite surmontée d'un opérateur tilde réfléchi"] # 0x2b47 (en: 'reverse tilde operator above rightwards arrow', DeepL: 'opérateur tilde inversé au-dessus d'une flèche vers la droite') - - "⭈": [t: "presque égal à réfléchi surmonté d'une flèche vers la droite"] # 0x2b48 (en: 'rightwards arrow above reverse almost equal to', DeepL: 'flèche vers la droite au-dessus du revers presque égale à') - - "⭉": [t: "flèche vers la gauche surmontée de l'opérateur tilde"] # 0x2b49 (en: 'tilde operator above leftwards arrow', DeepL: 'opérateur tilde au-dessus de la flèche vers la gauche') - - "⭊": [t: "flèche vers la gauche par dessus presque égal à"] # 0x2b4a (en: 'leftwards arrow above almost equal to', DeepL: 'flèche vers la gauche au-dessus de presque égal à') - - "⭋": [t: "tilde réfléchi surmonté d'une flèche vers la gauche"] # 0x2b4b (en: 'leftwards arrow above reverse tilde operator', DeepL: 'flèche vers la gauche au-dessus de l'opérateur tilde inversé') - - "⭌": [t: "ilde surmonté d'une flèche vers la droite"] # 0x2b4c (en: 'rightwards arrow above reverse tilde operator', DeepL: 'flèche vers la droite au-dessus de l'opérateur tilde inversé') - - "⭐": [t: "étoile blanche moyenne"] # 0x2b50 (en: 'white medium star') + - "⩗": [T: "grand ou incliné"] # 0x2a57 (en: 'sloping large or') + - "⩘": [T: "grand et incliné"] # 0x2a58 (en: 'sloping large and') + - "⩙": [T: "et et ou logiques entrecroisés"] # 0x2a59 (en: 'logical or overlapping logical and', DeepL: 'logique ou chevauchement logique et') + - "⩚": [T: "et logique à hampe médiane"] # 0x2a5a (en: 'logical and with middle stem') + - "⩛": [T: "ou logique à hampe médiane"] # 0x2a5b (en: 'logical or with middle stem') + - "⩜": [T: "et logique à tiret horizontal"] # 0x2a5c (en: 'logical and with horizontal dash') + - "⩝": [T: "ou logique à tiret horizontal"] # 0x2a5d (en: 'logical or with horizontal dash') + - "⩞": [T: "et logique à deux barres en chef"] # 0x2a5e (en: 'logical and with double overbar', DeepL: 'logique et avec double barre oblique') + - "⩟": [T: "et logique à barre souscrite"] # 0x2a5f (en: 'logical and with underbar') + - "⩠": [T: "et logique à deux barres souscrites"] # 0x2a60 (en: 'logical and with double underbar', DeepL: 'logique et avec double barre inférieure') + - "⩡": [T: "petit v à barre souscrite"] # 0x2a61 (en: 'small vee with underbar', DeepL: 'petit vee avec barre inférieure') + - "⩢": [T: "ou logique à deux barres en chef"] # 0x2a62 (en: 'logical or with double overbar', DeepL: 'logique ou avec double barre oblique') + - "⩣": [T: "ou logique à deux barres souscrites"] # 0x2a63 (en: 'logical or with double underbar', DeepL: 'logique ou avec double barre inférieure') + - "⩤": [T: "antirestriction de domaine en notation z"] # 0x2a64 (en: 'z notation domain antirestriction', DeepL: 'z notation domaine antirestriction') + - "⩥": [T: "antirestriction de codomaine en notation z"] # 0x2a65 (en: 'z notation range antirestriction', DeepL: 'z notation plage antirestriction') + - "⩦": [T: "égal point souscrit"] # 0x2a66 (en: 'equals sign with dot below', MathPlayer: 'signe égal point souscrit', DeepL: 'signe égal avec point en dessous') + - "⩧": [T: "identique avec point en chef"] # 0x2a67 (en: 'identical with dot above', DeepL: 'identique au point ci-dessus') + - "⩨": [T: "deux barres verticales à trois traverses"] # 0x2a68 (en: 'triple horizontal bar with double vertical stroke', DeepL: 'triple barre horizontale avec double trait vertical') + - "⩩": [T: "trois barres verticales à trois traverses"] # 0x2a69 (en: 'triple horizontal bar with triple vertical stroke', DeepL: 'triple barre horizontale avec triple trait vertical') + - "⩪": [T: "opérateur tilde point en chef"] # 0x2a6a (en: 'tilde operator with dot above') + - "⩫": [T: "opérateur tilde à points ascendants"] # 0x2a6b (en: 'tilde operator with rising dots', DeepL: 'opérateur tilde avec points ascendants') + - "⩬": [T: "similaire à moins similaire à"] # 0x2a6c (en: 'similar minus similar', DeepL: 'similaire moins similaire') + - "⩭": [T: "congruent avec point en chef"] # 0x2a6d (en: 'congruent with dot above') + - "⩮": [T: "égal avec astérisque"] # 0x2a6e (en: 'equals with asterisk', DeepL: 'égaux avec astérisque') + - "⩯": [T: "presque égal à avec circonflexe"] # 0x2a6f (en: 'almost equal to with circumflex accent') + - "⩰": [T: "approximativement égal à ou égal à"] # 0x2a70 (en: 'approximately equal to or equal to') + - "⩱": [T: "signe égal sur signe plus"] # 0x2a71 (en: 'equals sign above plus sign') + - "⩲": [T: "égal à signe plus en chef"] # 0x2a72 (en: 'plus sign above equals sign') + - "⩳": [T: "égal sur opérateur tilde"] # 0x2a73 (en: 'equals sign above tilde operator') + - "⩴": [T: "double deux points égal à"] # 0x2a74 (en: 'double colon equal', MathPlayer: 'double deux-points égal à', DeepL: 'double deux-points égal') + - "⩵": [T: "deux signes égal à consécutifs"] # 0x2a75 (en: 'two consecutive equals signs') + - "⩶": [T: "trois signes égal à consécutifs"] # 0x2a76 (en: 'three consecutive equals signs', DeepL: 'trois signes égaux consécutifs') + - "⩷": [T: "égal à deux points en chef deux points souscrits"] # 0x2a77 (en: 'equals sign with two dots above and two dots below') + - "⩸": [T: "équivalent quatre points en chef"] # 0x2a78 (en: 'equivalent with four dots above') + - "⩹": [T: "inférieur à avec cercle inscrit"] # 0x2a79 (en: 'less than with circle inside') + - "⩺": [T: "supérieur à avec cercle inscrit"] # 0x2a7a (en: 'greater than with circle inside') + - "⩻": [T: "inférieur à avec point d'interrogation en chef"] # 0x2a7b (en: 'less than with question mark above') + - "⩼": [T: "supérieur à avec point d'interrogation en chef"] # 0x2a7c (en: 'greater than with question mark above') + - "⩽": [T: "plus petit ou égal à incliné"] # 0x2a7d (en: 'less than or slanted equal to') + - "⩾": [T: "supérieur à ou égal à incliné"] # 0x2a7e (en: 'greater than or slanted equal to') + - "⩿": [T: "inférieur à ou égal à incliné point inscrit"] # 0x2a7f (en: 'less than or slanted equal to with dot inside') + - "⪀": [T: "supérieur à ou égal à incliné point inscrit"] # 0x2a80 (en: 'greater than or slanted equal to with dot inside') + - "⪁": [T: "inférieur à ou égal à incliné point en chef"] # 0x2a81 (en: 'less than or slanted equal to with dot above') + - "⪂": [T: "supérieur à ou égal à incliné point en chef"] # 0x2a82 (en: 'greater than or slanted equal to with dot above') + - "⪃": [T: "inférieur à ou égal à incliné point en chef droit"] # 0x2a83 (en: 'less than or slanted equal to with dot above right') + - "⪄": [T: "supérieur à ou égal à incliné point en chef gauche"] # 0x2a84 (en: 'greater than or slanted equal to with dot above left') + - "⪅": [T: "inférieur à ou approximatif"] # 0x2a85 (en: 'less than or approximate', DeepL: 'moins que ou approximatif') + - "⪆": [T: "supérieur à ou approximatif"] # 0x2a86 (en: 'greater than or approximate', DeepL: 'plus grand que ou approximatif') + - "⪇": [T: "inférieur à et pas égal à une ligne"] # 0x2a87 (en: 'less than and single line not equal to', DeepL: 'inférieur à et trait simple non égal à') + - "⪈": [T: "supérieur à et pas égal à une ligne"] # 0x2a88 (en: 'greater than and single line not equal to', DeepL: 'plus grand que et trait simple non égal à') + - "⪉": [T: "inférieur à et non approximatif"] # 0x2a89 (en: 'less than and not approximate') + - "⪊": [T: "supérieur à et non approximatif"] # 0x2a8a (en: 'greater than and not approximate') + - "⪋": [T: "inférieur à par dessus égal à deux lignes par dessus supérieur à"] # 0x2a8b (en: 'less than above double line equal above greater than', DeepL: 'moins que au-dessus de la double ligne égal au-dessus de plus grand que') + - "⪌": [T: "supérieur à par dessus égal à deux lignes par dessus inférieur à"] # 0x2a8c (en: 'greater than above double line equal above less than', DeepL: 'plus grand que au-dessus double ligne égal au-dessus moins que') + - "⪍": [T: "inférieur à par dessus similaire à ou égal à"] # 0x2a8d (en: 'less than above similar or equal', MathPlayer: 'inférieur à par-dessus similaire à ou égal à', DeepL: 'moins que plus haut similaire ou égal') + - "⪎": [T: "supérieur à par dessus similaire à ou égal à"] # 0x2a8e (en: 'greater than above similar or equal', MathPlayer: 'supérieur à par-dessus similaire à ou égal à', DeepL: 'plus grand que plus haut similaire ou égal') + - "⪏": [T: "inférieur à par dessus similaire à par dessus supérieur à"] # 0x2a8f (en: 'less than above similar above greater than', MathPlayer: 'inférieur à par-dessus similaire à par-dessus supérieur à', DeepL: 'inférieur à supérieur similaire supérieur supérieur') + - "⪐": [T: "supérieur à par dessus similaire à par dessus inférieur à"] # 0x2a90 (en: 'greater than above similar above less than', MathPlayer: 'supérieur à par-dessus similaire à par-dessus inférieur à', DeepL: 'supérieur à supérieur similaire supérieur inférieur') + - "⪑": [T: "inférieur à par dessus supérieur à par dessus égal à deux lignes"] # 0x2a91 (en: 'less than above greater than above double line equal', MathPlayer: 'inférieur à par-dessus supérieur à par-dessus égal à deux lignes', DeepL: 'moins que plus haut plus grand que plus haut double ligne égale') + - "⪒": [T: "supérieur à par dessus inférieur à par dessus égal à deux lignes"] # 0x2a92 (en: 'greater than above less than above double line equal', MathPlayer: 'supérieur à par-dessus inférieur à par-dessus égal à deux lignes', DeepL: 'plus grand que plus haut moins que plus haut double ligne égale') + - "⪓": [T: "inférieur à par dessus égal à incliné par dessus supérieur à par dessus égal à incliné"] # 0x2a93 (en: 'less than above slanted equal above greater than above slanted equal', MathPlayer: 'inférieur à par-dessus égal à pentu par-dessus supérieur à par-dessus égal à pentu', DeepL: 'inférieur à supérieur égal incliné supérieur supérieur supérieur supérieur égal incliné') + - "⪔": [T: "supérieur à par dessus égal à incliné par dessus inférieur à par dessus égal à incliné"] # 0x2a94 (en: 'greater than above slanted equal above less than above slanted equal', MathPlayer: 'supérieur à par-dessus égal à pentu par-dessus inférieur à par-dessus égal à pentu', DeepL: 'plus grand que au-dessus de l'égal incliné au-dessus de moins que au-dessus de l'égal incliné') + - "⪕": [T: "égal à incliné ou inférieur à"] # 0x2a95 (en: 'slanted equal to or less than', DeepL: 'incliné égal ou inférieur à') + - "⪖": [T: "égal à incliné ou supérieur à"] # 0x2a96 (en: 'slanted equal to or greater than', DeepL: 'incliné égal ou supérieur à') + - "⪗": [T: "égal à incliné ou inférieur à point inscrit"] # 0x2a97 (en: 'slanted equal to or less than with dot inside') + - "⪘": [T: "égal à incliné ou supérieur à point inscrit"] # 0x2a98 (en: 'slanted equal to or greater than with dot inside') + - "⪙": [T: "égal à deux lignes ou inférieur à"] # 0x2a99 (en: 'double line equal to or less than') + - "⪚": [T: "égal à deux lignes ou supérieur à"] # 0x2a9a (en: 'double line equal to or greater than') + - "⪛": [T: "inférieur à ou égal à à deux lignes inclinées"] # 0x2a9b (en: 'double line slanted equal to or less than', DeepL: 'double ligne oblique égale ou inférieure à') + - "⪜": [T: "supérieur à ou égal à à deux lignes inclinées"] # 0x2a9c (en: 'double line slanted equal to or greater than', DeepL: 'double trait oblique égal ou supérieur à') + - "⪝": [T: "similaire à ou inférieur à"] # 0x2a9d (en: 'similar or less than') + - "⪞": [T: "similaire à ou supérieur à"] # 0x2a9e (en: 'similar or greater than') + - "⪟": [T: "similaire à par dessus inférieur à par dessus signe égal"] # 0x2a9f (en: 'similar above less than above equals sign', MathPlayer: 'similaire à par-dessus inférieur à par-dessus signe égal', DeepL: 'similaire ci-dessus moins que ci-dessus signe égal') + - "⪠": [T: "similaire à par dessus supérieur à par dessus signe égal"] # 0x2aa0 (en: 'similar above greater than above equals sign', MathPlayer: 'similaire à par-dessus supérieur à par-dessus signe égal', DeepL: 'similaire supérieur supérieur supérieur signe égal') + - "⪡": [T: "deux inférieur à emboîtés"] # 0x2aa1 (en: 'double nested less than') + - "⪢": [T: "deux supérieur à emboîtés"] # 0x2aa2 (en: 'double nested greater than') + - "⪣": [T: "deux inférieur à emboîtés avec barre souscrite"] # 0x2aa3 (en: 'double nested less than with underbar', DeepL: 'double emboîtement moins que avec barre inférieure') + - "⪤": [T: "deux supérieur à entrecroisés"] # 0x2aa4 (en: 'greater than overlapping less than') + - "⪥": [T: "supérieur à à côté de inférieur à"] # 0x2aa5 (en: 'greater than beside less than') + - "⪦": [T: "inférieur à fermé d'un arc"] # 0x2aa6 (en: 'less than closed by curve') + - "⪧": [T: "supérieur à fermé d'un arc"] # 0x2aa7 (en: 'greater than closed by curve') + - "⪨": [T: "inférieur à fermé d'un arc par dessus égal à incliné"] # 0x2aa8 (en: 'less than closed by curve above slanted equal', MathPlayer: 'inférieur à fermé d'un arc par-dessus égal à pentu', DeepL: 'inférieur à fermé par une courbe au-dessus d'un égal incliné') + - "⪩": [T: "supérieur à fermé d'un arc par dessus égal à incliné"] # 0x2aa9 (en: 'greater than closed by curve above slanted equal', MathPlayer: 'supérieur à fermé d'un arc par-dessus égal à pentu', DeepL: 'plus grand que fermé par une courbe au-dessus inclinée égale') + - "⪪": [T: "plus petit que en fourche"] # 0x2aaa (en: 'smaller than') + - "⪫": [T: "plus grand que en fourche"] # 0x2aab (en: 'larger than') + - "⪬": [T: "plus petit ou égal que en fourche"] # 0x2aac (en: 'smaller than or equal to') + - "⪭": [T: "plus grand ou égal que en fourche"] # 0x2aad (en: 'larger than or equal to') + - "⪮": [T: "égal avec dos d'âne en chef"] # 0x2aae (en: 'equals sign with bumpy above', MathPlayer: 'signe égal et dos-d'âne', DeepL: 'signe égal avec bosses au-dessus') + - "⪯": [T: "précède par dessus signe égal à une ligne"] # 0x2aaf (en: 'precedes above single line equals sign', MathPlayer: 'précède par-dessus signe égal à une ligne', DeepL: 'précède le signe égal d'une seule ligne') + - "⪰": [T: "suit par dessus signe égal à une ligne"] # 0x2ab0 (en: 'succeeds above single line equals sign', DeepL: 'succède au-dessus d'une ligne simple au signe égal') + - "⪱": [T: "précède par dessus pas égal à une ligne"] # 0x2ab1 (en: 'precedes above single line not equal to', DeepL: 'précède au-dessus d'une seule ligne n'est pas égal à') + - "⪲": [T: "suit par dessus pas égal à une ligne"] # 0x2ab2 (en: 'succeeds above single line not equal to', DeepL: 'réussit au-dessus d'une seule ligne non égale à') + - "⪳": [T: "précède par dessus signe égal"] # 0x2ab3 (en: 'precedes above equals sign', DeepL: 'précède le signe égal') + - "⪴": [T: "suit par dessus signe égal"] # 0x2ab4 (en: 'succeeds above equals sign', DeepL: 'réussit au-dessus du signe égal') + - "⪵": [T: "précède par dessus pas égal à"] # 0x2ab5 (en: 'precedes above not equal to', MathPlayer: 'précède par-dessus pas égal à', DeepL: 'précède plus haut n'est pas égal à') + - "⪶": [T: "suit par dessus pas égal à"] # 0x2ab6 (en: 'succeeds above not equal to', MathPlayer: 'suit par-dessus pas égal à', DeepL: 'succède à n'est pas égal à') + - "⪷": [T: "précède par dessus presque égal à"] # 0x2ab7 (en: 'precedes above almost equal to', DeepL: 'précède le signe presque égal à') + - "⪸": [T: "suit par dessus presque égal à"] # 0x2ab8 (en: 'succeeds above almost equal to', DeepL: 'réussit au-dessus de presque égal à') + - "⪹": [T: "précède par dessus non presque égal à"] # 0x2ab9 (en: 'precedes above not almost equal to', DeepL: 'précède au dessus pas presque égal à') + - "⪺": [T: "suit par dessus non presque égal à"] # 0x2aba (en: 'succeeds above not almost equal to', DeepL: 'réussit au-dessus de n'est pas presque égal à') + - "⪻": [T: "double précède"] # 0x2abb (en: 'double precedes') + - "⪼": [T: "double suit"] # 0x2abc (en: 'double succeeds') + - "⪽": [T: "sous ensemble pointé"] # 0x2abd (en: 'subset with dot', MathPlayer: 'sous-ensemble pointé', DeepL: 'sous-ensemble avec point') + - "⪾": [T: "sur ensemble pointé"] # 0x2abe (en: 'superset with dot', MathPlayer: 'sur-ensemble pointé', DeepL: 'super-ensemble avec point') + - "⪿": [T: "sous ensemble avec plus souscrit"] # 0x2abf (en: 'subset with plus sign below', MathPlayer: 'sous-ensemble plus souscrit', DeepL: 'sous-ensemble avec le signe plus en dessous') + - "⫀": [T: "sur ensemble avec plus souscrit"] # 0x2ac0 (en: 'superset with plus sign below', MathPlayer: 'sur-ensemble plus souscrit', DeepL: 'superposition avec le signe plus en dessous') + - "⫁": [T: "sous ensemble à signe de multiplication souscrit"] # 0x2ac1 (en: 'subset with multiplication sign below', MathPlayer: 'sous-ensemble à signe de multiplication souscrit', DeepL: 'sous-ensemble avec signe de multiplication en dessous') + - "⫂": [T: "sur ensemble à signe de multiplication souscrit"] # 0x2ac2 (en: 'superset with multiplication sign below', MathPlayer: 'sur-ensemble à signe de multiplication souscrit', DeepL: 'superset avec signe de multiplication en dessous') + - "⫃": [T: "sous ensemble de ou égal à point en chef"] # 0x2ac3 (en: 'subset of or equal to with dot above', MathPlayer: 'sous-ensemble de ou égal à point en chef', DeepL: 'sous-ensemble de ou égal à avec point au-dessus') + - "⫄": [T: "sur ensemble de ou égal à point en chef"] # 0x2ac4 (en: 'superset of or equal to with dot above', MathPlayer: 'sur-ensemble de ou égal à point en chef', DeepL: 'sur-ensemble de ou égal à avec point au-dessus') + - "⫅": [T: "sous ensemble de par dessus signe égal"] # 0x2ac5 (en: 'subset of above equals sign', DeepL: 'sous-ensemble du signe égal ci-dessus') + - "⫆": [T: "sur ensemble de par dessus signe égal"] # 0x2ac6 (en: 'superset of above equals sign', DeepL: 'sur-ensemble du signe égal ci-dessus') + - "⫇": [T: "sous ensemble de par dessus opérateur tilde"] # 0x2ac7 (en: 'subset of above tilde operator', MathPlayer: 'sous-ensemble de par-dessus opérateur tilde', DeepL: 'sous-ensemble de l'opérateur tilde ci-dessus') + - "⫈": [T: "sur ensemble de par dessus opérateur tilde"] # 0x2ac8 (en: 'superset of above tilde operator', MathPlayer: 'sur-ensemble de par-dessus opérateur tilde', DeepL: 'superset de l'opérateur tilde ci-dessus') + - "⫉": [T: "sous ensemble de par dessus presque égal à"] # 0x2ac9 (en: 'subset of above almost equal to', DeepL: 'sous-ensemble de ce qui précède presque égal à') + - "⫊": [T: "sur ensemble de par dessus presque égal à"] # 0x2aca (en: 'superset of above almost equal to', DeepL: 'superposé de supérieur à presque égal à') + - "⫋": [T: "sous ensemble de par dessus pas égal à"] # 0x2acb (en: 'subset above not equal to', DeepL: 'sous-ensemble supérieur non égal à') + - "⫌": [T: "sur ensemble de par dessus pas égal à"] # 0x2acc (en: 'superset of above not equal to', DeepL: 'superset of above not equal to') + - "⫍": [T: "opérateur boîte carrée ouverte gauche"] # 0x2acd (en: 'square left open box operator', DeepL: 'carré gauche boîte ouverte opérateur') + - "⫎": [T: "opérateur boîte carrée ouverte droite"] # 0x2ace (en: 'square right open box operator', DeepL: 'opérateur de boîte ouverte carrée droite') + - "⫏": [T: "sous ensemble clos"] # 0x2acf (en: 'closed subset', MathPlayer: 'sous-ensemble clos', DeepL: 'sous-ensemble fermé') + - "⫐": [T: "sur ensemble clos"] # 0x2ad0 (en: 'closed superset', MathPlayer: 'sur-ensemble clos', DeepL: 'sur-ensemble fermé') + - "⫑": [T: "sous ensemble clos ou égal à"] # 0x2ad1 (en: 'closed subset or equal to', MathPlayer: 'sous-ensemble clos ou égal à', DeepL: 'sous-ensemble fermé ou égal à') + - "⫒": [T: "sur ensemble clos ou égal à"] # 0x2ad2 (en: 'closed superset or equal to', MathPlayer: 'sur-ensemble clos ou égal à', DeepL: 'super-ensemble fermé ou égal à') + - "⫓": [T: "sous ensemble par dessus sur ensemble"] # 0x2ad3 (en: 'subset above superset', MathPlayer: 'sous-ensemble par-dessus sur-ensemble', DeepL: 'sous-ensemble au-dessus de sur-ensemble') + - "⫔": [T: "sur ensemble par dessus sous ensemble"] # 0x2ad4 (en: 'superset above subset', MathPlayer: 'sur-ensemble par-dessus sous-ensemble', DeepL: 'sur-ensemble au-dessus du sous-ensemble') + - "⫕": [T: "sous ensemble par dessus sous ensemble"] # 0x2ad5 (en: 'subset above subset', MathPlayer: 'sous-ensemble par-dessus sous-ensemble', DeepL: 'sous-ensemble au-dessus d'un sous-ensemble') + - "⫖": [T: "sur ensemble par dessus sur ensemble"] # 0x2ad6 (en: 'superset above superset', MathPlayer: 'sur-ensemble par-dessus sur-ensemble', DeepL: 'superset above superset') + - "⫗": [T: "sur ensemble à côté de sous ensemble"] # 0x2ad7 (en: 'superset beside subset', SRE: 'sur ensemble à côté de sous ensemble') + - "⫘": [T: "sur ensemble chaîné à sous ensemble"] # 0x2ad8 (en: 'superset beside and joined by dash with subset', MathPlayer: 'sur-ensemble chaîné à sous-ensemble', DeepL: 'superset beside and joined by dash with subset') + - "⫙": [T: "appartient à ouvert vers le bas"] # 0x2ad9 (en: 'element of opening downwards') + - "⫚": [T: "fourche surmontée d'un t"] # 0x2ada (en: 'pitchfork with tee top') + - "⫛": [T: "intersection transversale"] # 0x2adb (en: 'transversal intersection') + - "⫝̸": [T: "bifurcation"] # 0x2adc (en: 'forking', DeepL: 'fourche') + - "⫝": [T: "non bifurcation"] # 0x2add (en: 'nonforking', DeepL: 'non fourchu') + - "⫞": [T: "taquet gauche court"] # 0x2ade (en: 'short left tack', DeepL: 'courte virgule à gauche') + - "⫟": [T: "taquet court vers le bas"] # 0x2adf (en: 'short down tack', DeepL: 'épissure courte vers le bas') + - "⫠": [T: "taquet court vers le haut"] # 0x2ae0 (en: 'short up tack', DeepL: 'court vers le haut') + - "⫡": [T: "perpendiculaire à s"] # 0x2ae1 (en: 'perpendicular with s', DeepL: 'perpendiculaire avec s') + - "⫢": [T: "triple tourniquet droit à barre verticale"] # 0x2ae2 (en: 'vertical bar triple right turnstile', DeepL: 'barre verticale triple tourniquet droit') + - "⫣": [T: "tourniquet gauche à double barre verticale"] # 0x2ae3 (en: 'double vertical bar left turnstile', DeepL: 'double barre verticale tourniquet gauche') + - "⫤": [T: "double tourniquet gauche à barre verticale"] # 0x2ae4 (en: 'vertical bar double left turnstile') + - "⫥": [T: "double tourniquet gauche à double barre verticale"] # 0x2ae5 (en: 'double vertical bar double left turnstile', DeepL: 'double barre verticale double tourniquet gauche') + - "⫦": [T: "double barre verticale gauche à traverse"] # 0x2ae6 (en: 'long dash from left member of double vertical') + - "⫧": [T: "taquet court vers le bas avec barre en chef"] # 0x2ae7 (en: 'short down tack with overbar') + - "⫨": [T: "taquet court vers le haut avec barre souscrite"] # 0x2ae8 (en: 'short up tack with underbar') + - "⫩": [T: "taquet court vers le haut par dessus taquet court vers le bas"] # 0x2ae9 (en: 'short up tack above short down tack', MathPlayer: 'taquet court vers le haut par-dessus taquet court vers le bas', DeepL: 'point court vers le haut au-dessus du point court vers le bas') + - "⫪": [T: "double taquet vers le bas"] # 0x2aea (en: 'double down tack', DeepL: 'double amure vers le bas') + - "⫫": [T: "double taquet vers le haut"] # 0x2aeb (en: 'double up tack') + - "⫬": [T: "négation à deux traits"] # 0x2aec (en: 'double stroke not sign', MathPlayer: 'signe négation à deux traits', DeepL: 'double trait ne signe pas') + - "⫭": [T: "négation à deux traits réfléchi"] # 0x2aed (en: 'reversed double stroke not sign', MathPlayer: 'signe négation à deux traits réfléchi', DeepL: 'double trait inversé signe non') + - "⫮": [T: "n'est pas un diviseur de à barre de négation réfléchie"] # 0x2aee (en: 'does not divide with reversed negation slash') + - "⫯": [T: "ligne verticale cercle en chef"] # 0x2aef (en: 'vertical line with circle above') + - "⫰": [T: "ligne verticale cercle souscrit"] # 0x2af0 (en: 'vertical line with circle below') + - "⫱": [T: "taquet vers le bas surmontant un cercle"] # 0x2af1 (en: 'down tack with circle below') + - "⫲": [T: "parallèlle à vertical à une traverse"] # 0x2af2 (en: 'parallel with horizontal stroke') + - "⫳": [T: "parallèle à avec opérateur tilde"] # 0x2af3 (en: 'parallel with tilde operator') + - "⫴": [T: "relation binaire triple barre verticale"] # 0x2af4 (en: 'triple vertical bar binary relation', DeepL: 'triple barre verticale relation binaire') + - "⫵": [T: "triple barre verticale à une traverse"] # 0x2af5 (en: 'triple vertical bar with horizontal stroke', DeepL: 'triple barre verticale avec trait horizontal') + - "⫶": [T: "opérateur trois points"] # 0x2af6 (en: 'triple colon operator', DeepL: 'opérateur triple deux-points') + - "⫷": [T: "trois inférieur à emboîtés"] # 0x2af7 (en: 'triple nested less than', DeepL: 'triple emboîtement moins que') + - "⫸": [T: "trois supérieur à emboîtés"] # 0x2af8 (en: 'triple nested greater than', DeepL: 'triple plus grand que imbriqué') + - "⫹": [T: "inférieur à ou égal à et deux lignes inclinées"] # 0x2af9 (en: 'double line slanted less than or equal to', DeepL: 'double ligne oblique inférieure ou égale à') + - "⫺": [T: "supérieur à ou égal à et deux lignes inclinées"] # 0x2afa (en: 'double line slanted greater than or equal to', DeepL: 'double ligne oblique supérieure ou égale à') + - "⫻": [T: "relation binaire triple oblique"] # 0x2afb (en: 'triple solidus binary relation', DeepL: 'relation binaire triple solidus') + - "⫼": [T: "grand opérateur à trois barres verticales"] # 0x2afc (en: 'large triple vertical bar operator', DeepL: 'grande barre verticale triple opérateur') + - "⫽": [T: "opérateur double oblique"] # 0x2afd (en: 'double solidus operator', DeepL: 'opérateur double solidus') + - "⫾": [T: "barre verticale blanche"] # 0x2afe (en: 'white vertical bar') + - "⫿": [T: "barre verticale blanche n aire"] # 0x2aff (en: 'white vertical bar', DeepL: 'barre verticale blanche') + - "⬀": [T: "flèche blanche nord est"] # 0x2b00 (en: 'north east white arrow', DeepL: 'flèche blanche nord-est') + - "⬁": [T: "flèche blanche nord ouest"] # 0x2b01 (en: 'north west white arrow', DeepL: 'flèche blanche nord-ouest') + - "⬂": [T: "flèche blanche sud est"] # 0x2b02 (en: 'south east white arrow', DeepL: 'sud est flèche blanche') + - "⬃": [T: "flèche blanche sud ouest"] # 0x2b03 (en: 'south west white arrow', DeepL: 'sud ouest flèche blanche') + - "⬄": [T: "flèche blanche bilatérale"] # 0x2b04 (en: 'left right white arrow', DeepL: 'flèche blanche gauche droite') + - "⬅": [T: "flèche noire vers la gauche"] # 0x2b05 (en: 'leftwards black arrow') + - "⬆": [T: "flèche noire vers le haut"] # 0x2b06 (en: 'upwards black arrow', DeepL: 'vers le haut flèche noire') + - "⬇": [T: "flèche noire vers le bas"] # 0x2b07 (en: 'downwards black arrow') + - "⬈": [T: "flèche noire nord est"] # 0x2b08 (en: 'north east black arrow', DeepL: 'flèche noire nord-est') + - "⬉": [T: "flèche noire nord ouest"] # 0x2b09 (en: 'north west black arrow', DeepL: 'nord ouest flèche noire') + - "⬊": [T: "flèche noire sud est"] # 0x2b0a (en: 'south east black arrow', DeepL: 'flèche noire sud-est') + - "⬋": [T: "flèche noire sud ouest"] # 0x2b0b (en: 'south west black arrow') + - "⬌": [T: "flèche noire bilatérale"] # 0x2b0c (en: 'left right black arrow', DeepL: 'flèche noire gauche droite') + - "⬍": [T: "flèche noire haut et bas"] # 0x2b0d (en: 'up down black arrow', DeepL: 'flèche noire haut-bas') + - "⬎": [T: "flèche vers la droite à pointe pliée vers le bas"] # 0x2b0e (en: 'rightwards arrow with tip downwards', DeepL: 'flèche vers la droite avec pointe vers le bas') + - "⬏": [T: "flèche vers la droite à pointe pliée vers le haut"] # 0x2b0f (en: 'rightwards arrow with tip upwards', DeepL: 'flèche vers la droite avec pointe vers le haut') + - "⬐": [T: "flèche vers la gauche à pointe pliée vers le bas"] # 0x2b10 (en: 'leftwards arrow with tip downwards', DeepL: 'flèche vers la gauche avec pointe vers le bas') + - "⬑": [T: "flèche vers la gauche à pointe pliée vers le haut"] # 0x2b11 (en: 'leftwards arrow with tip upwards', DeepL: 'flèche vers la gauche avec pointe vers le haut') + - "⬒": [T: "carré à moitié supérieure noire"] # 0x2b12 (en: 'square with top half black', DeepL: 'carré dont la moitié supérieure est noire') + - "⬓": [T: "carré à moitié inférieure noire"] # 0x2b13 (en: 'square with bottom half black', DeepL: 'carré dont la moitié inférieure est noire') + - "⬔": [T: "carré à moitié diagonale supérieure droite noire"] # 0x2b14 (en: 'square with upper right diagonal half black', DeepL: 'carré dont la diagonale supérieure droite est à moitié noire') + - "⬕": [T: "carré à moitié diagonale inférieure droite noire"] # 0x2b15 (en: 'square with lower left diagonal half black', DeepL: 'carré avec diagonale inférieure gauche demi noire') + - "⬖": [T: "losange à moitié gauche noire"] # 0x2b16 (en: 'diamond with left half black', DeepL: 'diamant avec la moitié gauche noire') + - "⬗": [T: "losange à moitié droite noire"] # 0x2b17 (en: 'diamond with right half black', DeepL: 'diamant dont la moitié droite est noire') + - "⬘": [T: "losange à moitié supérieure noire"] # 0x2b18 (en: 'diamond with top half black', DeepL: 'diamant dont la moitié supérieure est noire') + - "⬙": [T: "losange à moitié inférieure noire"] # 0x2b19 (en: 'diamond with bottom half black', DeepL: 'losange dont la moitié inférieure est noire') + - "⬚": [T: "carré en pointillés"] # 0x2b1a (en: 'box', DeepL: 'boîte') + - "⬛": [T: "grand carré noir"] # 0x2b1b (en: 'black large square') + - "⬜": [T: "grand carré blanc"] # 0x2b1c (en: 'white large square') + - "⬝": [T: "très petit carré noir"] # 0x2b1d (en: 'black very small square', DeepL: 'carré noir très petit') + - "⬞": [T: "très petit carré blanc"] # 0x2b1e (en: 'white very small square', DeepL: 'carré blanc très petit') + - "⬟": [T: "pentagone noir"] # 0x2b1f (en: 'black pentagon') + - "⬠": [T: "pentagone blanc"] # 0x2b20 (en: 'white pentagon') + - "⬡": [T: "hexagone blanc"] # 0x2b21 (en: 'white hexagon') + - "⬢": [T: "hexagone noir"] # 0x2b22 (en: 'black hexagon') + - "⬣": [T: "hexagone noir posé sur un côté"] # 0x2b23 (en: 'horizontal black hexagon', DeepL: 'hexagone noir horizontal') + - "⬤": [T: "grand cercle noir"] # 0x2b24 (en: 'black large circle') + - "⬥": [T: "losange moyen noir"] # 0x2b25 (en: 'black medium diamond', DeepL: 'losange noir moyen') + - "⬦": [T: "losange moyen blanc"] # 0x2b26 (en: 'white medium diamond', DeepL: 'diamant moyen blanc') + - "⬧": [T: "rhombe moyen noir"] # 0x2b27 (en: 'black medium lozenge', DeepL: 'losange moyen noir') + - "⬨": [T: "rhombe moyen blanc"] # 0x2b28 (en: 'white medium lozenge', DeepL: 'losange moyen blanc') + - "⬩": [T: "petit losange noir"] # 0x2b29 (en: 'black small diamond') + - "⬪": [T: "petit rhombe noir"] # 0x2b2a (en: 'black small lozenge', DeepL: 'noir petit losange') + - "⬫": [T: "petit rhombe blanc"] # 0x2b2b (en: 'white small lozenge', DeepL: 'petit losange blanc') + - "⬬": [T: "ellipse horizontale noire"] # 0x2b2c (en: 'black horizontal ellipse') + - "⬭": [T: "ellipse horizontale blanche"] # 0x2b2d (en: 'white horizontal ellipse') + - "⬮": [T: "ellipse verticale noire"] # 0x2b2e (en: 'black vertical ellipse') + - "⬯": [T: "ellipse verticale blanche"] # 0x2b2f (en: 'white vertical ellipse') + - "⬰": [T: "flèche vers la gauche à petit cercle"] # 0x2b30 (en: 'left arrow with small circle', DeepL: 'flèche gauche avec petit cercle') + - "⬱": [T: "trois flèches vers la gauche"] # 0x2b31 (en: 'three leftwards arrows') + - "⬲": [T: "flèche vers la gauche à signe plus cerclé"] # 0x2b32 (en: 'left arrow with circled plus', DeepL: 'flèche gauche avec plus encerclé') + - "⬳": [T: "longue flèche vers la gauche en tire bouchon"] # 0x2b33 (en: 'long leftwards squiggle arrow', DeepL: 'longue flèche gribouillée vers la gauche') + - "⬴": [T: "flèche à deux pointes vers la gauche barrée verticalement"] # 0x2b34 (en: 'leftwards two headed arrow with vertical stroke', DeepL: 'flèche bicéphale gauche avec trait vertical') + - "⬵": [T: "flèche à deux pointes vers la gauche barrée deux fois verticalement"] # 0x2b35 (en: 'leftwards two headed arrow with double vertical stroke', DeepL: 'flèche à deux têtes vers la gauche avec double trait vertical') + - "⬶": [T: "flèche à deux têtes d'un taquet vers la gauche"] # 0x2b36 (en: 'leftwards two headed arrow from bar', DeepL: 'flèche biface gauche à partir de l'ardillon') + - "⬷": [T: "flèche à trois traits et à deux têtes vers la gauche"] # 0x2b37 (en: 'leftwards two headed triple dash arrow', DeepL: 'flèche gauche à deux têtes et triple tiret') + - "⬸": [T: "flèche vers la gauche à fût pointillé"] # 0x2b38 (en: 'leftwards arrow with dotted stem', DeepL: 'vers la gauche flèche avec tige en pointillé') + - "⬹": [T: "flèche empennée vers la gauche barrée verticalement"] # 0x2b39 (en: 'leftwards arrow with tail with vertical stroke', DeepL: 'vers la gauche flèche avec empennage avec trait vertical') + - "⬺": [T: "flèche empennée vers la gauche barrée deux fois verticalement"] # 0x2b3a (en: 'leftwards arrow with tail with double vertical stroke', DeepL: 'vers la gauche flèche avec empennage avec double trait vertical') + - "⬻": [T: "flèche empennée à deux têtes vers la gauche"] # 0x2b3b (en: 'leftwards two headed arrow with tail', DeepL: 'flèche à deux têtes avec empennage vers la gauche') + - "⬼": [T: "flèche empennée à deux têtes vers la gauche barrée verticalement"] # 0x2b3c (en: 'leftwards two headed arrow with tail with vertical stroke', DeepL: 'flèche bicéphale gauche avec empennage et trait vertical') + - "⬽": [T: "flèche empennée à deux têtes vers la gauche barrée deux fois verticalement"] # 0x2b3d (en: 'leftwards two headed arrow with tail with double vertical stroke', DeepL: 'flèche biface gauche avec empennage à double trait vertical') + - "⬾": [T: "flèche vers la gauche au travers un x"] # 0x2b3e (en: 'leftwards arrow through x', DeepL: 'flèche vers la gauche à travers le x') + - "⬿": [T: "flèche vers la gauche bossue"] # 0x2b3f (en: 'wave arrow pointing directly left', DeepL: 'flèche ondulée pointant directement vers la gauche') + - "⭀": [T: "flèche vers la gauche surmontée d'un égal"] # 0x2b40 (en: 'equals sign above leftwards arrow', DeepL: 'signe égal au-dessus de la flèche vers la gauche') + - "⭁": [T: "flèche vers la gauche surmontée d'un tilde"] # 0x2b41 (en: 'reverse tilde operator above leftwards arrow', DeepL: 'opérateur tilde inversé au-dessus de la flèche vers la gauche') + - "⭂": [T: "presque égal à réfléchi surmonté d'une flèche vers la gauche"] # 0x2b42 (en: 'leftwards arrow above reverse almost equal to', DeepL: 'flèche vers la gauche au-dessus de l'inverse presque égal à') + - "⭃": [T: "flèche vers la droite à travers un inférieur à"] # 0x2b43 (en: 'rightwards arrow through greater than', DeepL: 'flèche vers la droite à travers plus grand que') + - "⭄": [T: "flèche vers la droite au travers d'un sous ensemble de"] # 0x2b44 (en: 'rightwards arrow through superset', DeepL: 'flèche vers la droite à travers le super-ensemble') + - "⭅": [T: "quadruple flèche vers la gauche"] # 0x2b45 (en: 'leftwards quadruple arrow', DeepL: 'flèche quadruple vers la gauche') + - "⭆": [T: "quadruple flèche vers la droite"] # 0x2b46 (en: 'rightwards quadruple arrow', DeepL: 'flèche quadruple vers la droite') + - "⭇": [T: "flèche vers la droite surmontée d'un opérateur tilde réfléchi"] # 0x2b47 (en: 'reverse tilde operator above rightwards arrow', DeepL: 'opérateur tilde inversé au-dessus d'une flèche vers la droite') + - "⭈": [T: "presque égal à réfléchi surmonté d'une flèche vers la droite"] # 0x2b48 (en: 'rightwards arrow above reverse almost equal to', DeepL: 'flèche vers la droite au-dessus du revers presque égale à') + - "⭉": [T: "flèche vers la gauche surmontée de l'opérateur tilde"] # 0x2b49 (en: 'tilde operator above leftwards arrow', DeepL: 'opérateur tilde au-dessus de la flèche vers la gauche') + - "⭊": [T: "flèche vers la gauche par dessus presque égal à"] # 0x2b4a (en: 'leftwards arrow above almost equal to', DeepL: 'flèche vers la gauche au-dessus de presque égal à') + - "⭋": [T: "tilde réfléchi surmonté d'une flèche vers la gauche"] # 0x2b4b (en: 'leftwards arrow above reverse tilde operator', DeepL: 'flèche vers la gauche au-dessus de l'opérateur tilde inversé') + - "⭌": [T: "ilde surmonté d'une flèche vers la droite"] # 0x2b4c (en: 'rightwards arrow above reverse tilde operator', DeepL: 'flèche vers la droite au-dessus de l'opérateur tilde inversé') + - "⭐": [T: "étoile blanche moyenne"] # 0x2b50 (en: 'white medium star') - "⭑": [t: "petite étoile noire"] # 0x2b51 (en: 'black small star') - "⭒": [t: "petite étoile blanche"] # 0x2b52 (en: 'white small star') - "⭓": [t: "pentagone noir pointant vers la droite"] # 0x2b53 (en: 'black right pointing pentagon') From 6f4a6128aedf880685188acd4badb3b5243c5eab Mon Sep 17 00:00:00 2001 From: Olivier Thiffault Date: Wed, 5 Aug 2026 11:57:28 -0400 Subject: [PATCH 49/53] corrections to unicode-full.yaml v7 --- Rules/Languages/fr/unicode-full.yaml | 814 +++++++++++++-------------- 1 file changed, 407 insertions(+), 407 deletions(-) diff --git a/Rules/Languages/fr/unicode-full.yaml b/Rules/Languages/fr/unicode-full.yaml index a28e2557c..12d9f5941 100644 --- a/Rules/Languages/fr/unicode-full.yaml +++ b/Rules/Languages/fr/unicode-full.yaml @@ -2393,413 +2393,413 @@ - "⭋": [T: "tilde réfléchi surmonté d'une flèche vers la gauche"] # 0x2b4b (en: 'leftwards arrow above reverse tilde operator', DeepL: 'flèche vers la gauche au-dessus de l'opérateur tilde inversé') - "⭌": [T: "ilde surmonté d'une flèche vers la droite"] # 0x2b4c (en: 'rightwards arrow above reverse tilde operator', DeepL: 'flèche vers la droite au-dessus de l'opérateur tilde inversé') - "⭐": [T: "étoile blanche moyenne"] # 0x2b50 (en: 'white medium star') - - "⭑": [t: "petite étoile noire"] # 0x2b51 (en: 'black small star') - - "⭒": [t: "petite étoile blanche"] # 0x2b52 (en: 'white small star') - - "⭓": [t: "pentagone noir pointant vers la droite"] # 0x2b53 (en: 'black right pointing pentagon') - - "⭔": [t: "pentagone blanc pointant vers la droite"] # 0x2b54 (en: 'white right pointing pentagon') - - "⭕": [t: "grand cercle gras"] # 0x2b55 (en: 'heavy large circle', DeepL: 'grand cercle lourd') - - "⭖": [t: "ovale gras avec ovale inscrit"] # 0x2b56 (en: 'heavy oval with oval inside', DeepL: 'ovale lourd avec ovale à l'intérieur') - - "⭗": [t: "cercle gras avec cercle inscrit"] # 0x2b57 (en: 'heavy circle with circle inside', DeepL: 'cercle lourd avec cercle à l'intérieur') - - "⭘": [t: "cercle gras"] # 0x2b58 (en: 'heavy circle', DeepL: 'cercle épais') - - "⭙": [t: "sautoir cerclé gras"] # 0x2b59 (en: 'heavy circled saltire', DeepL: 'lourd sautoir encerclé') - - "⸀": [t: "angle droit marqueur de substitution"] # 0x2e00 (en: 'right angle substitution marker', DeepL translation) - - "⸁": [t: "marqueur de substitution d'angle droit en pointillés"] # 0x2e01 (en: 'right angle dotted substitution marker', DeepL translation) - - "⸂": [t: "gauche crochet de substitution"] # 0x2e02 (en: 'left substitution bracket', DeepL translation) - - "⸃": [t: "crochet de substitution droit"] # 0x2e03 (en: 'right substitution bracket', DeepL translation) - - "⸄": [t: "équerre de substitution gauche en pointillé"] # 0x2e04 (en: 'left dotted substitution bracket', DeepL translation) - - "⸅": [t: "parenthèse de substitution en pointillé à droite"] # 0x2e05 (en: 'right dotted substitution bracket', DeepL translation) - - "⸆": [t: "marqueur d'interpolation en relief"] # 0x2e06 (en: 'raised interpolation marker', DeepL translation) - - "⸇": [t: "marqueur d'interpolation en pointillé surélevé"] # 0x2e07 (en: 'raised dotted interpolation marker', DeepL translation) - - "⸈": [t: "marqueur de transposition en pointillés"] # 0x2e08 (en: 'dotted transposition marker marker', DeepL translation) - - "⸉": [t: "équerre de transposition gauche"] # 0x2e09 (en: 'left transposition bracket', DeepL translation) - - "⸊": [t: "équerre de transposition droite"] # 0x2e0a (en: 'right transposition bracket', DeepL translation) - - "⸋": [t: "équerre inversée"] # 0x2e0b (en: 'raised square', DeepL translation) - - "⸌": [t: "crochet d'omission surélevé vers la gauche"] # 0x2e0c (en: 'left raised omission bracket', DeepL translation) - - "⸍": [t: "parenthèse d'omission droite surélevée"] # 0x2e0d (en: 'right raised omission bracket', DeepL translation) - - "⸎": [t: "coronis éditoriale"] # 0x2e0e (en: 'editorial coronis', DeepL translation) - - "⸏": [t: "paragraphe"] # 0x2e0f (en: 'paragraphos', DeepL translation) - - "⸐": [t: "paragraphe fourchu"] # 0x2e10 (en: 'forked paragraphos', DeepL translation) - - "⸑": [t: "paragraphe fourchu inversé"] # 0x2e11 (en: 'reversed forked paragraphos', DeepL translation) - - "⸒": [t: "hypodiastole"] # 0x2e12 (DeepL translation) - - "⸓": [t: "obélisque en pointillé"] # 0x2e13 (en: 'dotted obelos', DeepL translation) - - "⸔": [t: "vers le bas ancora"] # 0x2e14 (en: 'downwards ancora', DeepL translation) - - "⸕": [t: "vers le haut ancora"] # 0x2e15 (en: 'upwards ancora', DeepL translation) - - "⸖": [t: "pointillé angle pointant vers la droite"] # 0x2e16 (en: 'dotted right pointing angle', DeepL translation) - - "⸗": [t: "double trait d'union oblique"] # 0x2e17 (en: 'double oblique hyphen', DeepL translation) - - "⸘": [t: "interrobang inversé"] # 0x2e18 (en: 'inverted interrobang', DeepL translation) - - "⸙": [t: "branche de palmier"] # 0x2e19 (en: 'palm branch', DeepL translation) - - "⸚": [t: "trait d'union avec tréma"] # 0x2e1a (en: 'hyphen with diaeresis', DeepL translation) - - "⸛": [t: "tilde avec anneau au-dessus"] # 0x2e1b (en: 'tilde with ring above', DeepL translation) - - "⸜": [t: "parenthèse inférieure gauche"] # 0x2e1c (en: 'left low paraphrase bracket', DeepL translation) - - "⸝": [t: "paraphrase basse vers la droite"] # 0x2e1d (en: 'right low paraphrase bracket', DeepL translation) - - "⸞": [t: "tilde avec point au-dessus"] # 0x2e1e (en: 'tilde with dot above', DeepL translation) - - "⸟": [t: "tilde avec point en dessous"] # 0x2e1f (en: 'tilde with dot below', DeepL translation) - - "⸠": [t: "barre verticale gauche avec plume"] # 0x2e20 (en: 'left vertical bar with quill', DeepL translation) - - "⸡": [t: "barre verticale droite avec plume"] # 0x2e21 (en: 'right vertical bar with quill', DeepL translation) - - "⸢": [t: "anglet supérieur gauche"] # 0x2e22 (en: 'top left half bracket', DeepL: 'demi-cadratin supérieur gauche') - - "⸣": [t: "anglet supérieur droit"] # 0x2e23 (en: 'top right half bracket', DeepL: 'demi-bracelet supérieur droit') - - "⸤": [t: "anglet inférieur gauche"] # 0x2e24 (en: 'bottom left half bracket', DeepL: 'demi-cadratin en bas à gauche') - - "⸥": [t: "anglet inférieur droit"] # 0x2e25 (en: 'bottom right half bracket', DeepL: 'moitié inférieure droite de l'équerre') - - "⸦": [t: "crampillon couché gauche"] # 0x2e26 (en: 'left sideways u bracket', DeepL: 'flèche gauche en forme de u latéral') - - "⸧": [t: "crampillon couché droit"] # 0x2e27 (en: 'right sideways u bracket', DeepL: 'à droite, latéralement, crochet en u') - - "⸨": [t: "double parenthèse gauche"] # 0x2e28 (en: 'left double parentheses') - - "⸩": [t: "double parenthèse droite"] # 0x2e29 (en: 'right double parentheses') - - "⸪": [t: "deux points sur un point ponctuation"] # 0x2e2a (en: 'two dots over one dot punctuation', DeepL translation) - - "⸫": [t: "un point sur deux points ponctuation"] # 0x2e2b (en: 'one dot over two dots punctuation', DeepL translation) - - "⸬": [t: "ponctuation à quatre points carrés"] # 0x2e2c (en: 'squared four dot punctuation', DeepL translation) - - "⸭": [t: "marque à cinq points"] # 0x2e2d (en: 'five dot mark', DeepL translation) - - "⸮": [t: "point d'interrogation inversé"] # 0x2e2e (en: 'reversed question mark', DeepL translation) - - "ⸯ": [t: "tilde vertical"] # 0x2e2f (en: 'vertical tilde', DeepL translation) - - "⸰": [t: "point d'anneau"] # 0x2e30 (en: 'ring point', DeepL translation) - - "⸱": [t: "séparateur de mots point central"] # 0x2e31 (en: 'word separator middle dot', DeepL translation) - - "⸲": [t: "virgule tournée"] # 0x2e32 (en: 'turned comma', DeepL translation) - - "⸳": [t: "point en relief"] # 0x2e33 (en: 'raised dot', DeepL translation) - - "⸴": [t: "virgule surélevée"] # 0x2e34 (en: 'raised comma', DeepL translation) - - "⸵": [t: "point-virgule tourné"] # 0x2e35 (en: 'turned semicolon', DeepL translation) - - "⸶": [t: "poignard avec garde gauche"] # 0x2e36 (en: 'dagger with left guard', DeepL translation) - - "⸷": [t: "poignard avec garde droite"] # 0x2e37 (en: 'dagger with right guard', DeepL translation) - - "⸸": [t: "poignard tourné"] # 0x2e38 (en: 'turned dagger', DeepL translation) - - "⸹": [t: "demi-signal de section en haut"] # 0x2e39 (en: 'top half section sign', DeepL translation) - - "⸺": [t: "deux tirets em"] # 0x2e3a (en: 'two em dash', DeepL translation) - - "⸻": [t: "trois tirets em"] # 0x2e3b (en: 'three em dash', DeepL translation) - - "〃": [t: "marque ditto"] # 0x3003 (en: 'ditto mark', DeepL translation) - - "〈": [t: "chevron gauche"] # 0x3008 (en: 'left angle bracket', DeepL: 'équerre gauche') - - "〉": [t: "chevron droit"] # 0x3009 (en: 'right angle bracket', DeepL: 'crochet d'angle droit') - - "《": [t: "double chevron gauche"] # 0x300a (en: 'left double angle bracket') - - "》": [t: "double chevron droit"] # 0x300b (en: 'right double angle bracket') - - "「": [t: "anglet gauche"] # 0x300c (en: 'left corner bracket', DeepL: 'parenthèse d'angle gauche') - - "」": [t: "anglet droit"] # 0x300d (en: 'right corner bracket', DeepL: 'crochet d'angle droit') - - "『": [t: "anglet ajouré gauche"] # 0x300e (en: 'left white corner bracket', DeepL: 'gauche équerre blanche') - - "』": [t: "anglet ajouré droit"] # 0x300f (en: 'right white corner bracket', DeepL: 'équerre blanche droite') - - "【": [t: "crochet noir lenticulaire gauche"] # 0x3010 (en: 'left black lenticular bracket', DeepL: 'parenthèse lenticulaire noire gauche') - - "】": [t: "crochet noir lenticulaire droit"] # 0x3011 (en: 'right black lenticular bracket', DeepL: 'support lenticulaire noir droit') - - "〔": [t: "crochet gauche en écaille"] # 0x3014 (en: 'left tortoise shell bracket') - - "〕": [t: "crochet droit en écaille"] # 0x3015 (en: 'right tortoise shell bracket') - - "〖": [t: "crochet blanc lenticulaire gauche"] # 0x3016 (en: 'left white lenticular bracket', DeepL: 'équerre lenticulaire blanche gauche') - - "〗": [t: "crochet blanc lenticulaire droit"] # 0x3017 (en: 'right white lenticular bracket', DeepL: 'équerre lenticulaire blanche droite') - - "〘": [t: "crochet blanc gauche en écaille"] # 0x3018 (en: 'left white tortoise shell bracket', DeepL: 'à gauche, support en écaille de tortue blanche') - - "〙": [t: "crochet blanc droit en écaille"] # 0x3019 (en: 'right white tortoise shell bracket', DeepL: 'support droit en écaille de tortue blanche') - - "〚": [t: "crochet blanc gauche"] # 0x301a (en: 'left white square bracket') - - "〛": [t: "crochet blanc droit"] # 0x301b (en: 'right white square bracket') - - "〜": [t: "trait d'union en esse"] # 0x301c (en: 'wave dash', DeepL: 'vague tiret') - - "〰": [t: "zigzag"] # 0x3030 (en: 'wavy dash', DeepL: 'trait ondulé') - - "㉈": [t: "dix cerclé sur carré noir"] # 0x3248 (en: 'circled number ten on black square', DeepL: 'chiffre dix encerclé sur un carré noir') - - "㉉": [t: "vingt cerclé sur carré noir"] # 0x3249 (en: 'circled number twenty on black square', DeepL: 'chiffre vingt encerclé sur un carré noir') - - "㉊": [t: "trente cerclé sur carré noir"] # 0x324a (en: 'circled number thirty on black square', DeepL: 'chiffre trente encerclé sur un carré noir') - - "㉋": [t: "quarante cerclé sur carré noir"] # 0x324b (en: 'circled number forty on blacks square', DeepL: 'chiffre quarante encerclé sur un carré noir') - - "㉌": [t: "cinquante cerclé sur carré noir"] # 0x324c (en: 'circled number fifty on black square', DeepL: 'chiffre cinquante encerclé sur un carré noir') - - "㉍": [t: "soixante cerclé sur carré noir"] # 0x324d (en: 'circled number sixty on black square', DeepL: 'chiffre soixante encerclé sur un carré noir') - - "㉎": [t: "soixante dix cerclé sur carré noir"] # 0x324e (en: 'circled number seventy on black square', DeepL: 'chiffre soixante-dix encerclé sur un carré noir') - - "㉏": [t: "quatre vingts cerclé sur carré noir"] # 0x324f (en: 'circled number eighty on black square', DeepL: 'chiffre aty encerclé sur un carré noir') - - "㉑": [t: "nombre vingt et un encerclé"] # 0x3251 (en: 'circled number twenty one', DeepL translation) - - "㉒": [t: "chiffre vingt-deux encerclé"] # 0x3252 (en: 'circled number twenty two', DeepL translation) - - "㉓": [t: "numéro vingt-trois encerclé"] # 0x3253 (en: 'circled number twenty three', DeepL translation) - - "㉔": [t: "chiffre vingt-quatre encerclé"] # 0x3254 (en: 'circled number twenty four', DeepL translation) - - "㉕": [t: "chiffre vingt-cinq encerclé"] # 0x3255 (en: 'circled number twenty five', DeepL translation) - - "㉖": [t: "encerclé numéro vingt-six"] # 0x3256 (en: 'circled number twenty six', DeepL translation) - - "㉗": [t: "numéro vingt-sept encerclé"] # 0x3257 (en: 'circled number twenty seven', DeepL translation) - - "㉘": [t: "encerclé nombre vingt à"] # 0x3258 (en: 'circled number twenty eight', DeepL translation) - - "㉙": [t: "numéro vingt-neuf encerclé"] # 0x3259 (en: 'circled number twenty nine', DeepL translation) - - "㉚": [t: "numéro trente encerclé"] # 0x325a (en: 'circled number thirty', DeepL translation) - - "㉛": [t: "encerclé numéro trente et un"] # 0x325b (en: 'circled number thirty one', DeepL translation) - - "㉜": [t: "nombre encerclé trente-deux"] # 0x325c (en: 'circled number thirty two', DeepL translation) - - "㉝": [t: "numéro trente-trois encerclé"] # 0x325d (en: 'circled number thirty three', DeepL translation) - - "㉞": [t: "encadré numéro trente-quatre"] # 0x325e (en: 'circled number thirty four', DeepL translation) - - "㉟": [t: "chiffre trente-cinq encerclé"] # 0x325f (en: 'circled number thirty five', DeepL translation) - - "㊱": [t: "numéro trente-six encerclé"] # 0x32b1 (en: 'circled number thirty six', DeepL translation) - - "㊲": [t: "numéro trente-sept encerclé"] # 0x32b2 (en: 'circled number thirty seven', GPT-5.4 translation) - - "㊳": [t: "numéro trente-huit encerclé"] # 0x32b3 (en: 'circled number thirty eight', GPT-5.4 translation) - - "㊴": [t: "numéro trente-neuf encerclé"] # 0x32b4 (en: 'circled number thirty nine', GPT-5.4 translation) - - "㊵": [t: "numéro quarante encerclé"] # 0x32b5 (en: 'circled number forty', GPT-5.4 translation) - - "㊶": [t: "numéro quarante et un encerclé"] # 0x32b6 (en: 'circled number forty one', GPT-5.4 translation) - - "㊷": [t: "numéro quarante-deux encerclé"] # 0x32b7 (en: 'circled number forty two', GPT-5.4 translation) - - "㊸": [t: "numéro quarante-trois encerclé"] # 0x32b8 (en: 'circled number forty three', GPT-5.4 translation) - - "㊹": [t: "numéro quarante-quatre encerclé"] # 0x32b9 (en: 'circled number forty four', GPT-5.4 translation) - - "㊺": [t: "numéro quarante-cinq encerclé"] # 0x32ba (en: 'circled number forty five', GPT-5.4 translation) - - "㊻": [t: "numéro quarante-six encerclé"] # 0x32bb (en: 'circled number forty six', GPT-5.4 translation) - - "㊼": [t: "numéro quarante-sept encerclé"] # 0x32bc (en: 'circled number forty seven', GPT-5.4 translation) - - "㊽": [t: "numéro quarante-huit encerclé"] # 0x32bd (en: 'circled number forty eight', GPT-5.4 translation) - - "㊾": [t: "numéro quarante-neuf encerclé"] # 0x32be (en: 'circled number forty nine', GPT-5.4 translation) - - "㊿": [t: "numéro cinquante encerclé"] # 0x32bf (en: 'circled number fifty', GPT-5.4 translation) - - "㋌": [t: "mercure"] # 0x32cc (en: 'mercury', DeepL translation) - - "㋍": [t: "ergs"] # 0x32cd (DeepL translation) - - "㋎": [t: "électron-volts"] # 0x32ce (en: 'electron volts', DeepL translation) - - "㋏": [t: "signe de responsabilité limitée"] # 0x32cf (en: 'limited liability sign', DeepL translation) - - "㍱": [t: "hectopascals"] # 0x3371 (DeepL translation) - - "㍲": [t: "daltons"] # 0x3372 (DeepL translation) - - "㍳": [t: "unités astronomiques"] # 0x3373 (en: 'astronomical units', DeepL translation) - - "㍴": [t: "barres"] # 0x3374 (en: 'bars', DeepL translation) - - "㍵": [t: "o v"] # 0x3375 (DeepL translation) - - "㍶": [t: "parsecs"] # 0x3376 (DeepL translation) - - "㍷": [t: "décimètres"] # 0x3377 (en: 'decimeters', DeepL translation) - - "㍸": [t: "décimètres au carré"] # 0x3378 (en: 'decimeters squared', DeepL translation) - - "㍹": [t: "décimètres cubés"] # 0x3379 (en: 'decimeters cubed', DeepL translation) - - "㍺": [t: "unités instrumentales"] # 0x337a (en: 'instrumental units', DeepL translation) - - "㎀": [t: "picoampères"] # 0x3380 (en: 'picoamps', DeepL translation) - - "㎁": [t: "nanoampères"] # 0x3381 (en: 'nanoamps', DeepL translation) - - "㎂": [t: "microampères"] # 0x3382 (en: 'microamps', DeepL translation) - - "㎃": [t: "milliampères"] # 0x3383 (en: 'milliamps', DeepL translation) - - "㎄": [t: "kiloampères"] # 0x3384 (en: 'kiloamps', DeepL translation) - - "㎅": [t: "kilo-octets"] # 0x3385 (en: 'kilobytes', DeepL translation) - - "㎆": [t: "mégaoctets"] # 0x3386 (en: 'megabytes', DeepL translation) - - "㎇": [t: "gigaoctets"] # 0x3387 (en: 'gigabytes', DeepL translation) - - "㎈": [t: "calories"] # 0x3388 (DeepL translation) - - "㎉": [t: "kilocalories"] # 0x3389 (DeepL translation) - - "㎊": [t: "picofarads"] # 0x338a (DeepL translation) - - "㎋": [t: "nanofarads"] # 0x338b (DeepL translation) - - "㎌": [t: "microfarads"] # 0x338c (DeepL translation) - - "㎍": [t: "microgrammes"] # 0x338d (en: 'micrograms', DeepL translation) - - "㎎": [t: "milligrammes"] # 0x338e (en: 'milligrams', DeepL translation) - - "㎏": [t: "kilogrammes"] # 0x338f (en: 'kilograms', DeepL translation) - - "㎐": [t: "hertz"] # 0x3390 (DeepL translation) - - "㎑": [t: "kilohertz"] # 0x3391 (DeepL translation) - - "㎒": [t: "mégahertz"] # 0x3392 (en: 'megahertz', DeepL translation) - - "㎓": [t: "gigahertz"] # 0x3393 (DeepL translation) - - "㎔": [t: "térahertz"] # 0x3394 (en: 'terahertz', DeepL translation) - - "㎕": [t: "microlitres"] # 0x3395 (en: 'microliters', DeepL translation) - - "㎖": [t: "millilitres"] # 0x3396 (en: 'milliliters', DeepL translation) - - "㎗": [t: "décilitres"] # 0x3397 (en: 'deciliters', DeepL translation) - - "㎘": [t: "kilolitres"] # 0x3398 (en: 'kiloliters', DeepL translation) - - "㎙": [t: "femtomètres"] # 0x3399 (en: 'femtometers', DeepL translation) - - "㎚": [t: "nanomètres"] # 0x339a (en: 'nanometers', DeepL translation) - - "㎛": [t: "micromètres"] # 0x339b (en: 'micrometers', DeepL translation) - - "㎜": [t: "millimètres"] # 0x339c (en: 'millimeters', DeepL translation) - - "㎝": [t: "centimètres"] # 0x339d (en: 'centimeters', DeepL translation) - - "㎞": [t: "kilomètres"] # 0x339e (en: 'kilometers', DeepL translation) - - "㎟": [t: "millimètres au carré"] # 0x339f (en: 'millimeters squared', DeepL translation) - - "㎠": [t: "centimètres au carré"] # 0x33a0 (en: 'centimeters squared', DeepL translation) - - "㎡": [t: "mètres au carré"] # 0x33a1 (en: 'meters squared', DeepL translation) - - "㎢": [t: "kilomètres au carré"] # 0x33a2 (en: 'kilometers squared', DeepL translation) - - "㎣": [t: "millimètres au cube"] # 0x33a3 (en: 'millimeters cubed', DeepL translation) - - "㎤": [t: "centimètres cubes"] # 0x33a4 (en: 'centimeters cubed', DeepL translation) - - "㎥": [t: "mètres cubes"] # 0x33a5 (en: 'meters cubed', DeepL translation) - - "㎦": [t: "kilomètres cubes"] # 0x33a6 (en: 'kilometers cubed', DeepL translation) - - "㎧": [t: "mètres par seconde"] # 0x33a7 (en: 'meters per second', DeepL translation) - - "㎨": [t: "mètres par seconde au carré"] # 0x33a8 (en: 'meters per second squared', DeepL translation) - - "㎩": [t: "pascals"] # 0x33a9 (DeepL translation) - - "㎪": [t: "kilopascals"] # 0x33aa (DeepL translation) - - "㎫": [t: "mégapascal"] # 0x33ab (en: 'megapascals', DeepL translation) - - "㎬": [t: "gigapascals"] # 0x33ac (DeepL translation) - - "㎭": [t: "rads"] # 0x33ad (DeepL translation) - - "㎮": [t: "rads par seconde"] # 0x33ae (en: 'rads per second', DeepL translation) - - "㎯": [t: "rads par seconde au carré"] # 0x33af (en: 'rads per second squared', DeepL translation) - - "㎰": [t: "picosecondes"] # 0x33b0 (en: 'picoseconds', DeepL translation) - - "㎱": [t: "nanosecondes"] # 0x33b1 (en: 'nanoseconds', DeepL translation) - - "㎲": [t: "microsecondes"] # 0x33b2 (en: 'microseconds', DeepL translation) - - "㎳": [t: "millisecondes"] # 0x33b3 (en: 'milliseconds', DeepL translation) - - "㎴": [t: "picovolts"] # 0x33b4 (DeepL translation) - - "㎵": [t: "nanovolts"] # 0x33b5 (DeepL translation) - - "㎶": [t: "microvolts"] # 0x33b6 (DeepL translation) - - "㎷": [t: "millivolts"] # 0x33b7 (DeepL translation) - - "㎸": [t: "kilovolts"] # 0x33b8 (DeepL translation) - - "㎹": [t: "mégavolts"] # 0x33b9 (en: 'megavolts', DeepL translation) - - "㎺": [t: "picowatts"] # 0x33ba (DeepL translation) - - "㎻": [t: "nanowatts"] # 0x33bb (DeepL translation) - - "㎼": [t: "microwatts"] # 0x33bc (DeepL translation) - - "㎽": [t: "milliwatts"] # 0x33bd (DeepL translation) - - "㎾": [t: "kilowatts"] # 0x33be (DeepL translation) - - "㎿": [t: "mégawatts"] # 0x33bf (en: 'megawatts', DeepL translation) - - "㏀": [t: "kilo-ohms"] # 0x33c0 (DeepL translation) - - "㏁": [t: "mégaohms"] # 0x33c1 (en: 'megaohms', DeepL translation) - - "㏂": [t: "attomètres"] # 0x33c2 (en: 'attometers', DeepL translation) - - "㏃": [t: "becquerels"] # 0x33c3 (DeepL translation) - - "㏄": [t: "centimètres cubes"] # 0x33c4 (en: 'cubic centimeters', DeepL translation) - - "㏅": [t: "candelas"] # 0x33c5 (DeepL translation) - - "㏆": [t: "coulombs par kilogramme"] # 0x33c6 (en: 'coulombs per kilogram', DeepL translation) - - "㏇": [t: "c majuscule, o, point"] # 0x33c7 (I have no idea what this is) (en: 'cap C, o, period', DeepL translation) - - "㏈": [t: "décibels"] # 0x33c8 (en: 'decibels', DeepL translation) - - "㏉": [t: "gris"] # 0x33c9 (en: 'grays', DeepL translation) - - "㏊": [t: "hectares"] # 0x33ca (DeepL translation) - - "㏋": [t: "cheval-vapeur"] # 0x33cb (en: 'horsepower', DeepL translation) - - "㏌": [t: "pouces"] # 0x33cc (en: 'inches', DeepL translation) - - "㏍": [t: "kilokelvins"] # 0x33cd (DeepL translation) - - "㏎": [t: "kilomètres"] # 0x33ce (en: 'kilometers', DeepL translation) - - "㏏": [t: "nœuds"] # 0x33cf (en: 'knots', DeepL translation) - - "㏐": [t: "lumens"] # 0x33d0 (DeepL translation) - - "㏑": [t: "logarithme naturel"] # 0x33d1 (en: 'natural log', DeepL translation) - - "㏒": [t: "logarithme"] # 0x33d2 (en: 'logarithm', DeepL translation) - - "㏓": [t: "lux"] # 0x33d3 (DeepL translation) - - "㏔": [t: "millibarns"] # 0x33d4 (DeepL translation) - - "㏕": [t: "moulins"] # 0x33d5 (en: 'mills', DeepL translation) - - "㏖": [t: "taupes"] # 0x33d6 (en: 'moles', DeepL translation) - - "㏗": [t: "p h"] # 0x33d7 (DeepL translation) - - "㏘": [t: "picomètres"] # 0x33d8 (en: 'picometers', DeepL translation) - - "㏙": [t: "parties par million"] # 0x33d9 (en: 'parts per million', DeepL translation) - - "㏚": [t: "pétaroentgens"] # 0x33da (en: 'petaroentgens', DeepL translation) - - "㏛": [t: "stéradians"] # 0x33db (en: 'steradians', DeepL translation) - - "㏜": [t: "sieverts"] # 0x33dc (DeepL translation) - - "㏝": [t: "webers"] # 0x33dd (DeepL translation) - - "㏞": [t: "volts par mètre"] # 0x33de (en: 'volts per meter', DeepL translation) - - "㏟": [t: "ampères par mètre"] # 0x33df (en: 'amps per meter', DeepL translation) - - "㏿": [t: "gallons"] # 0x33ff (DeepL translation) - - "": [t: "équivaut au chapeau ci-dessous"] # 0xe900 (en: 'equals with hat below', DeepL translation) - - "": [t: "égal à plus haut"] # 0xe901 (en: 'equals with plus above', DeepL translation) - - "": [t: "égal à plus en dessous"] # 0xe902 (en: 'equals with plus below', DeepL translation) - - "": [t: "tilde avec plus au-dessus"] # 0xe903 (en: 'tilde with plus above', DeepL translation) - - "": [t: "tilde avec plus en dessous"] # 0xe904 (en: 'tilde with plus below', DeepL translation) - - "": [t: "égal double au-dessus de plus grand que"] # 0xe908 (en: 'equal double over greater than', DeepL translation) - - "": [t: "égal double sur moins que"] # 0xe909 (en: 'equal double over less than', DeepL translation) - - "": [t: "contient ou égal à"] # 0xe90a (en: 'contains or equal to', DeepL translation) - - "": [t: "superposé ou égal à"] # 0xe90b (en: 'superset of or equal to', DeepL translation) - - "": [t: "sous-ensemble de ou égal à"] # 0xe90c (en: 'subset of or equal to', DeepL translation) - - "": [t: "égal à inférieur à"] # 0xe90d (en: 'equal over less than', DeepL translation) - - "": [t: "élément de ou égal à"] # 0xe912 (en: 'element of or equal to', DeepL translation) - - "": [t: "égal ou supérieur à"] # 0xe913 (en: 'equal to or greater than', DeepL translation) - - "": [t: "superposition approximative de"] # 0xe914 (en: 'approximate superset of', DeepL translation) - - "": [t: "sous-ensemble approximatif de"] # 0xe915 (en: 'approximate subset of', DeepL translation) - - "": [t: "superposition de avec point inclut comme sous relation"] # 0xe916 (en: 'superset of with dot includes as sub relation', DeepL translation) - - "": [t: "sous-ensemble de avec point est inclus dans comme sous relation"] # 0xe917 (en: 'subset of with dot is included in as sub relation', DeepL translation) - - "": [t: "égal avec point en dessous"] # 0xe918 (en: 'equal with dot below', DeepL translation) - - "": [t: "point gauche sur moins sur point droit"] # 0xe919 (en: 'left dot over minus over right dot', DeepL translation) - - "": [t: "point droit sur moins sur point gauche"] # 0xe91a (en: 'right dot over minus over left dot', DeepL translation) - - "": [t: "presque égal à moins"] # 0xe91f (en: 'almost equal to minus', DeepL translation) - - "": [t: "double coupe carrée"] # 0xe920 (en: 'double square cup', DeepL translation) - - "": [t: "double majuscule carrée"] # 0xe921 (en: 'double square cap', DeepL translation) - - "": [t: "inférieur à égal ou supérieur à"] # 0xe922 (en: 'less than equal to or greater than', DeepL translation) - - "": [t: "tilde avec point"] # 0xe924 (en: 'tilde with dot', DeepL translation) - - "": [t: "tilde avec deux points"] # 0xe925 (en: 'tilde with two dots', DeepL translation) - - "": [t: "inférieur à supérieur ou égal à"] # 0xe926 (en: 'less than greater than or equal to', DeepL translation) - - "": [t: "plus grand que moins que ou égal à"] # 0xe927 (en: 'greater than less than or equal to', DeepL translation) - - "": [t: "équivalent à ou inférieur à"] # 0xe928 (en: 'equivalent to or less than', DeepL translation) - - "": [t: "équivalent ou supérieur à"] # 0xe929 (en: 'equivalent to or greater than', DeepL translation) - - "": [t: "opérateur de boîte ouverte gauche"] # 0xe92a (en: 'left open box operator', DeepL translation) - - "": [t: "opérateur de boîte ouverte à droite"] # 0xe92b (en: 'right open box operator', DeepL translation) - - "": [t: "identique à avec point"] # 0xe92c (en: 'identical to with dot', DeepL translation) - - "": [t: "supérieur à égal ou inférieur"] # 0xe92d (en: 'greater than equal to or less than', DeepL translation) - - "": [t: "opérateur de barre"] # 0xe92e (en: 'bar operator', DeepL translation) - - "": [t: "opérateur double barre"] # 0xe92f (en: 'double bar operator', DeepL translation) - - "": [t: "triple barre opérateur"] # 0xe930 (en: 'triple bar operator', DeepL translation) - - "": [t: "inférieur ou approximativement égal à"] # 0xe932 (en: 'less than or approximately equal to', DeepL translation) - - "": [t: "plus grand que ou à peu près égal à"] # 0xe933 (en: 'greater than or approximately equal to', DeepL translation) - - "": [t: "imbriqué moins que"] # 0xe936 (en: 'nested less than', DeepL translation) - - "": [t: "imbriqué plus grand que"] # 0xe937 (en: 'nested greater than', DeepL translation) - - "": [t: "précède ou équivaut à"] # 0xe93a (en: 'precedes or equivalent to', DeepL translation) - - "": [t: "succède ou équivaut à"] # 0xe93b (en: 'succeeds or equivalent to', DeepL translation) - - "": [t: "précède sur égal"] # 0xe940 (en: 'precedes over equal', DeepL translation) - - "": [t: "succède à égal"] # 0xe941 (en: 'succeeds over equal', DeepL translation) - - "": [t: "moins égal incliné plus grand"] # 0xe942 (en: 'less equal slanted greater', DeepL translation) - - "": [t: "plus grand égal incliné moins"] # 0xe943 (en: 'greater equal slanted less', DeepL translation) - - "": [t: "satisfait par"] # 0xe948 (en: 'satisfied by', DeepL translation) - - "": [t: "s paresseux"] # 0xe949 (en: 'lazy s', DeepL translation) - - "": [t: "pas d'affirmation"] # 0xe94a (en: 'not assertion', DeepL translation) - - "": [t: "double égal"] # 0xe94b (en: 'double equal', DeepL translation) - - "": [t: "triple égal"] # 0xe94c (en: 'triple equal', DeepL translation) - - "": [t: "règle retardée"] # 0xe94d (en: 'rule delayed', DeepL translation) - - "": [t: "délimiteur d'alias"] # 0xe94e (en: 'alias delimiter', DeepL translation) - - "": [t: "sous-groupe normal de avec barre"] # 0xe950 (en: 'normal subgroup of with bar', DeepL translation) - - "": [t: "contient comme un sous-groupe normal avec une barre"] # 0xe951 (en: 'contains as normal subgroup with bar', DeepL translation) - - "": [t: "rond implique"] # 0xe954 (en: 'round implies', DeepL translation) - - "": [t: "sourire sous la barre"] # 0xe955 (en: 'smile under bar', DeepL translation) - - "": [t: "froncement de sourcils sur la barre"] # 0xe956 (en: 'frown over bar', DeepL translation) - - "": [t: "sur-ensemble de ou presque égal à"] # 0xe957 (en: 'superset of or almost equal to', DeepL translation) - - "": [t: "sous-ensemble de ou presque égal à"] # 0xe958 (en: 'subset of or almost equal to', DeepL translation) - - "": [t: "supérieur à presque égal ou inférieur à"] # 0xe959 (en: 'greater than almost equal to or less than', DeepL translation) - - "": [t: "inférieur à presque égal ou supérieur à"] # 0xe95a (en: 'less than almost equal or greater than', DeepL translation) - - "": [t: "double logique ou"] # 0xe95c (en: 'double logical or', DeepL translation) - - "": [t: "double logique et"] # 0xe95d (en: 'double logical and', DeepL translation) - - "": [t: "logique ou avec double barre en dessous"] # 0xe95e (en: 'logical or with double bar below', DeepL translation) - - "": [t: "logique ou avec barre en bas"] # 0xe95f (en: 'logical or with bar below', DeepL translation) - - "": [t: "presque égal sur égal"] # 0xe962 (en: 'almost equal over equal', DeepL translation) - - "": [t: "triangle pointant vers la gauche avec barre bissectrice"] # 0xe964 (en: 'left pointing triangle with bisecting bar', DeepL translation) - - "": [t: "triangle pointant vers la droite avec barre bissectrice"] # 0xe965 (en: 'right pointing triangle with bisecting bar', DeepL translation) - - "": [t: "égal avec ligne supérieure en pointillés"] # 0xe966 (en: 'equals with dotted top line', DeepL translation) - - "": [t: "précède avec deux points"] # 0xe967 (en: 'precedes with colon', DeepL translation) - - "": [t: "réussit avec les deux points"] # 0xe968 (en: 'succeeds with colon', DeepL translation) - - "": [t: "plus petit que ou égal incliné"] # 0xe969 (en: 'smaller than or equal slanted', DeepL translation) - - "": [t: "plus grand ou égal incliné"] # 0xe96a (en: 'larger than or equal slanted', DeepL translation) - - "": [t: "imbriqué très inférieur à"] # 0xe96b (en: 'nested very much less than', DeepL translation) - - "": [t: "imbriqué très supérieur à"] # 0xe96c (en: 'nested very much greater than', DeepL translation) - - "": [t: "différence entre variante"] # 0xe96d (en: 'difference between variant', DeepL translation) - - "": [t: "moins que plus grand que superposé"] # 0xe96e (en: 'less than greater than overlay', DeepL translation) - - "": [t: "logique ou logique et superposition"] # 0xe96f (en: 'logical or logical and overlay', DeepL translation) - - "": [t: "sur-ensemble sur sur-ensemble"] # 0xe970 (en: 'superset over superset', DeepL translation) - - "": [t: "sous-ensemble sur sous-ensemble"] # 0xe971 (en: 'subset over subset', DeepL translation) - - "": [t: "sur-ensemble sur sous-ensemble"] # 0xe972 (en: 'superset over subset', DeepL translation) - - "": [t: "sous-ensemble par rapport à sur-ensemble"] # 0xe973 (en: 'subset over superset', DeepL translation) - - "": [t: "triple barre verticale"] # 0xe979 (en: 'triple vertical bar', DeepL translation) - - "": [t: "points verticaux quadruples appariés"] # 0xe97a (en: 'paired quadruple vertical dots', DeepL translation) - - "": [t: "perpendiculaire au-dessus d'une barre"] # 0xe97b (en: 'perpendicular over bar', DeepL translation) - - "": [t: "tourniquet gauche double barre verticale"] # 0xe97c (en: 'left turnstile double vertical bar', DeepL translation) - - "": [t: "double tourniquet gauche double barre verticale"] # 0xe97d (en: 'double left turnstile double vertical bar', DeepL translation) - - "": [t: "perpendiculaire sur perpendiculaire inversée"] # 0xe97e (en: 'perpendicular over inverted perpendicular', DeepL translation) - - "": [t: "double barre verticale en tourniquet à gauche"] # 0xe97f (en: 'double left turnstile vertical bar', DeepL translation) - - "": [t: "angle sphérique ouverture"] # 0xe980 (en: 'spherical angle opening up', DeepL translation) - - "": [t: "double barre oblique"] # 0xe981 (en: 'double slash', DeepL translation) - - "": [t: "angle droit avec coin"] # 0xe982 (en: 'right angle with corner', DeepL translation) - - "": [t: "barre verticale cerclée"] # 0xe984 (en: 'circled vertical bar', DeepL translation) - - "": [t: "signe de division encerclé"] # 0xe985 (en: 'circled division sign', DeepL translation) - - "": [t: "solidus en pointillé"] # 0xe986 (en: 'dashed solidus', DeepL translation) - - "": [t: "barre oblique inverse en pointillés"] # 0xe987 (en: 'dashed backslash', DeepL translation) - - "": [t: "ligne médiane en pointillés"] # 0xe988 (en: 'dashed mid line', DeepL translation) - - "": [t: "barre verticale en pointillé"] # 0xe989 (en: 'dashed vertical bar', DeepL translation) - - "": [t: "perpendiculaire avec s"] # 0xe98a (en: 'perpendicular with s', DeepL translation) - - "": [t: "angle avec s"] # 0xe98b (en: 'angle with s', DeepL translation) - - "": [t: "angle sphérique ouverture à gauche"] # 0xe98c (en: 'spherical angle opening left', DeepL translation) - - "": [t: "angle ouvrant à gauche"] # 0xe98d (en: 'angle opening left', DeepL translation) - - "": [t: "barre verticale avec double crochet"] # 0xe98e (en: 'vertical bar with double hook', DeepL translation) - - "": [t: "point moyen opérateur radical libre"] # 0xe98f (en: 'medium dot operator free radical', DeepL translation) - - "": [t: "triangle blanc pointant vers le haut au-dessus de la barre"] # 0xe990 (en: 'white up pointing triangle above bar', DeepL translation) - - "": [t: "identique et parallèle à"] # 0xe991 (en: 'identical and parallel to', DeepL translation) - - "": [t: "smash product"] # 0xe992 (DeepL translation) - - "": [t: "triple barre opérateur avec barre horizontale"] # 0xe993 (en: 'triple bar operator with horizontal bar', DeepL translation) - - "": [t: "identique à avec double barre oblique"] # 0xe994 (en: 'identical to with double slash', DeepL translation) - - "": [t: "triple barres croisées"] # 0xe995 (en: 'triple crossed bars', DeepL translation) - - "": [t: "barre verticale sur cercle"] # 0xe996 (en: 'vertical bar over circle', DeepL translation) - - "": [t: "verticale proportionnelle à"] # 0xe997 (en: 'vertical proportional to', DeepL translation) - - "": [t: "dernier quartier de lune noir"] # 0xe998 (en: 'black last quarter moon', DeepL translation) - - "": [t: "premier quartier de lune noir"] # 0xe999 (en: 'black first quarter moon', DeepL translation) - - "": [t: "onde sinusoïdale négative"] # 0xe9a0 (en: 'negative sine wave', DeepL translation) - - "": [t: "point entre parenthèses"] # 0xe9a1 (en: 'parenthesized dot', DeepL translation) - - "": [t: "parenthesiss"] # 0xe9a2 (en: 'parens', DeepL translation) - - "": [t: "sourire blanc"] # 0xe9a3 (en: 'white smile', DeepL translation) - - "": [t: "froncement de sourcils blanc"] # 0xe9a4 (en: 'white frown', DeepL translation) - - "": [t: "hexagone"] # 0xe9a5 (en: 'hexagon', DeepL translation) - - "": [t: "équivalent à plus plus"] # 0xe9a6 (en: 'equivalent to over plus', DeepL translation) - - "": [t: "plus plus équivalent à"] # 0xe9a7 (en: 'plus over equivalent to', DeepL translation) - - "": [t: "empattements à l'intersection"] # 0xe9b0 (en: 'intersection serifs', DeepL translation) - - "": [t: "empattement d'union"] # 0xe9b1 (en: 'union serifs', DeepL translation) - - "": [t: "carré intersection empattements"] # 0xe9b2 (en: 'square intersection serifs', DeepL translation) - - "": [t: "square union serifs"] # 0xe9b3 (DeepL translation) - - "": [t: "précède équivalent à ou succède à"] # 0xe9e0 (en: 'precedes equivalent to or succeeds', DeepL translation) - - "": [t: "réussit équivaut à ou précède"] # 0xe9e1 (en: 'succeeds equivalent to or precedes', DeepL translation) - - "": [t: "précède presque égal à ou succède à"] # 0xe9e2 (en: 'precedes almost equal to or succeeds', DeepL translation) - - "": [t: "réussit presque égal à ou précède"] # 0xe9e3 (en: 'succeeds almost equal to or precedes', DeepL translation) - - "": [t: "inférieur à équivalent ou supérieur à"] # 0xe9f0 (en: 'less than equivalent to or greater than', DeepL translation) - - "": [t: "plus grand que équivalent à ou moins que"] # 0xe9f1 (en: 'greater than equivalent to or less than', DeepL translation) - - "": [t: "pas vert beaucoup moins que"] # 0xea00 (en: 'not vert much less than', DeepL translation) - - "": [t: "pas vert beaucoup plus grand que"] # 0xea01 (en: 'not vert much greater than', DeepL translation) - - "": [t: "pas beaucoup moins que variante"] # 0xea02 (en: 'not much less than variant', DeepL translation) - - "": [t: "pas beaucoup plus grand que variante"] # 0xea03 (en: 'not much greater than variant', DeepL translation) - - "": [t: "moins vert non double égal"] # 0xea04 (en: 'less vert not double equals', DeepL translation) - - "": [t: "gt vert pas double égal"] # 0xea05 (en: 'gt vert not double equals', DeepL translation) - - "": [t: "pas inférieur ou égal à"] # 0xea06 (en: 'not less than or equal to', DeepL translation) - - "": [t: "pas supérieur ou égal à"] # 0xea07 (en: 'not greater than or equal to', DeepL translation) - - "": [t: "ni égal ni inférieur à"] # 0xea09 (en: 'neither equal to nor less than', DeepL translation) - - "": [t: "ne contient pas ou n'est pas égal à"] # 0xea0a (en: 'does not contain or equal to', DeepL translation) - - "": [t: "ni superposé à, ni égal à"] # 0xea0b (en: 'neither superset of nor equal to', DeepL translation) - - "": [t: "ni sous-ensemble de ni égal à"] # 0xea0c (en: 'neither subset of nor equal to', DeepL translation) - - "": [t: "solidus inversé sous-ensemble"] # 0xea0d (en: 'reverse solidus subset', DeepL translation) - - "": [t: "ni égal ni supérieur à"] # 0xea0e (en: 'neither equal to nor greater than', DeepL translation) - - "": [t: "pas moins opérateur tilde"] # 0xea0f (en: 'not minus tilde operator', DeepL translation) - - "": [t: "ni égal ni inférieur à"] # 0xea10 (en: 'neither equal to nor less than', DeepL translation) - - "": [t: "opérateur non tilde"] # 0xea11 (en: 'not tilde operator', DeepL translation) - - "": [t: "pas élément de ou égal à"] # 0xea12 (en: 'not element of or equal to', DeepL translation) - - "": [t: "ni égal ni supérieur à"] # 0xea13 (en: 'neither equal to nor greater than', DeepL translation) - - "": [t: "pas presque égal"] # 0xea14 (en: 'not almost equal', DeepL translation) - - "": [t: "ne succède pas à similaire"] # 0xea15 (en: 'not succeeds similar', DeepL translation) - - "": [t: "inférieur ou égal à avec barre oblique"] # 0xea16 (en: 'less than or slanted equal to with slash', DeepL translation) - - "": [t: "plus grand que ou égal à incliné avec barre oblique"] # 0xea17 (en: 'greater than or slanted equal to with slash', DeepL translation) - - "": [t: "solidus superposé"] # 0xea1a (en: 'superset solidus', DeepL translation) - - "": [t: "ne contient pas"] # 0xea1b (en: 'does not contain', DeepL translation) - - "": [t: "pas inférieur ou égal à"] # 0xea1d (en: 'not less than or equal to', DeepL translation) - - "": [t: "pas supérieur ou égal à"] # 0xea1e (en: 'not greater than or equal to', DeepL translation) - - "": [t: "pas presque égal à moins"] # 0xea1f (en: 'not almost equal to minus', DeepL translation) - - "": [t: "négation point d'appartenance ci-dessus"] # 0xea22 (en: 'negated set membership dot above', DeepL translation) - - "": [t: "pas angle vert"] # 0xea2c (en: 'not vert angle', DeepL translation) - - "": [t: "non parallèle incliné"] # 0xea2d (en: 'not parallel slanted', DeepL translation) - - "": [t: "pas l'opérateur de barre"] # 0xea2e (en: 'not bar operator', DeepL translation) - - "": [t: "pas l'opérateur double barre"] # 0xea2f (en: 'not double bar operator', DeepL translation) - - "": [t: "opérateur de barre non triple"] # 0xea30 (en: 'not triple bar operator', DeepL translation) + - "⭑": [T: "petite étoile noire"] # 0x2b51 (en: 'black small star') + - "⭒": [T: "petite étoile blanche"] # 0x2b52 (en: 'white small star') + - "⭓": [T: "pentagone noir pointant vers la droite"] # 0x2b53 (en: 'black right pointing pentagon') + - "⭔": [T: "pentagone blanc pointant vers la droite"] # 0x2b54 (en: 'white right pointing pentagon') + - "⭕": [T: "grand cercle gras"] # 0x2b55 (en: 'heavy large circle', DeepL: 'grand cercle lourd') + - "⭖": [T: "ovale avec ovale inscrit"] # 0x2b56 (en: 'heavy oval with oval inside', DeepL: 'ovale lourd avec ovale à l'intérieur') + - "⭗": [T: "cercle gras avec cercle inscrit"] # 0x2b57 (en: 'heavy circle with circle inside', DeepL: 'cercle lourd avec cercle à l'intérieur') + - "⭘": [T: "cercle gras"] # 0x2b58 (en: 'heavy circle', DeepL: 'cercle épais') + - "⭙": [T: "sautoir cerclé gras"] # 0x2b59 (en: 'heavy circled saltire', DeepL: 'lourd sautoir encerclé') + - "⸀": [T: "anglet de substitution"] # 0x2e00 (en: 'right angle substitution marker', DeepL translation) + - "⸁": [T: "anglet de substitution pointé"] # 0x2e01 (en: 'right angle dotted substitution marker', DeepL translation) + - "⸂": [T: "crochet de substitution gauche"] # 0x2e02 (en: 'left substitution bracket', DeepL translation) + - "⸃": [T: "crochet de substitution droit"] # 0x2e03 (en: 'right substitution bracket', DeepL translation) + - "⸄": [T: "crochet de substitution gauche pointé"] # 0x2e04 (en: 'left dotted substitution bracket', DeepL translation) + - "⸅": [T: "crochet de substitution droit pointé"] # 0x2e05 (en: 'right dotted substitution bracket', DeepL translation) + - "⸆": [T: "signe d'interpolation élevé"] # 0x2e06 (en: 'raised interpolation marker', DeepL translation) + - "⸇": [T: "signe d'interpolation élevé pointé"] # 0x2e07 (en: 'raised dotted interpolation marker', DeepL translation) + - "⸈": [T: "signe de transposition pointé"] # 0x2e08 (en: 'dotted transposition marker marker', DeepL translation) + - "⸉": [T: "signe de transposition gauche"] # 0x2e09 (en: 'left transposition bracket', DeepL translation) + - "⸊": [T: "signe de transposition droite"] # 0x2e0a (en: 'right transposition bracket', DeepL translation) + - "⸋": [T: "carré élevé"] # 0x2e0b (en: 'raised square', DeepL translation) + - "⸌": [T: "oblique d'omission gauche élevée"] # 0x2e0c (en: 'left raised omission bracket', DeepL translation) + - "⸍": [T: "oblique d'omission droite élevée"] # 0x2e0d (en: 'right raised omission bracket', DeepL translation) + - "⸎": [T: "coronis éditoriale"] # 0x2e0e (en: 'editorial coronis', DeepL translation) + - "⸏": [T: "paragraphos"] # 0x2e0f (en: 'paragraphos', DeepL translation) + - "⸐": [T: "paragraphos fourchu"] # 0x2e10 (en: 'forked paragraphos', DeepL translation) + - "⸑": [T: "paragraphos fourchu inversé"] # 0x2e11 (en: 'reversed forked paragraphos', DeepL translation) + - "⸒": [T: "hypodiastole"] # 0x2e12 (DeepL translation) + - "⸓": [T: "obèle pointé"] # 0x2e13 (en: 'dotted obelos', DeepL translation) + - "⸔": [T: "ancora vers le haut"] # 0x2e14 (en: 'downwards ancora', DeepL translation) + - "⸕": [T: "ancora vers le bas"] # 0x2e15 (en: 'upwards ancora', DeepL translation) + - "⸖": [T: "chevron pointant à droite à deux points"] # 0x2e16 (en: 'dotted right pointing angle', DeepL translation) + - "⸗": [T: "double trait d'union oblique"] # 0x2e17 (en: 'double oblique hyphen', DeepL translation) + - "⸘": [T: "point exclarogatif inversé"] # 0x2e18 (en: 'inverted interrobang', DeepL translation) + - "⸙": [T: "branche de palmier"] # 0x2e19 (en: 'palm branch', DeepL translation) + - "⸚": [T: "trait d'union avec tréma"] # 0x2e1a (en: 'hyphen with diaeresis', DeepL translation) + - "⸛": [T: "tilde avec anneau au-dessus"] # 0x2e1b (en: 'tilde with ring above', DeepL translation) + - "⸜": [T: "oblique de paragraphe ouvrante"] # 0x2e1c (en: 'left low paraphrase bracket', DeepL translation) + - "⸝": [T: "oblique de paragraphe fermante"] # 0x2e1d (en: 'right low paraphrase bracket', DeepL translation) + - "⸞": [T: "tilde avec point au-dessus"] # 0x2e1e (en: 'tilde with dot above', DeepL translation) + - "⸟": [T: "tilde avec point en dessous"] # 0x2e1f (en: 'tilde with dot below', DeepL translation) + - "⸠": [T: "echasse gauche"] # 0x2e20 (en: 'left vertical bar with quill', DeepL translation) + - "⸡": [T: "echasse droite"] # 0x2e21 (en: 'right vertical bar with quill', DeepL translation) + - "⸢": [T: "anglet supérieur gauche"] # 0x2e22 (en: 'top left half bracket', DeepL: 'demi-cadratin supérieur gauche') + - "⸣": [T: "anglet supérieur droit"] # 0x2e23 (en: 'top right half bracket', DeepL: 'demi-bracelet supérieur droit') + - "⸤": [T: "anglet inférieur gauche"] # 0x2e24 (en: 'bottom left half bracket', DeepL: 'demi-cadratin en bas à gauche') + - "⸥": [T: "anglet inférieur droit"] # 0x2e25 (en: 'bottom right half bracket', DeepL: 'moitié inférieure droite de l'équerre') + - "⸦": [T: "crampillon couché gauche"] # 0x2e26 (en: 'left sideways u bracket', DeepL: 'flèche gauche en forme de u latéral') + - "⸧": [T: "crampillon couché droit"] # 0x2e27 (en: 'right sideways u bracket', DeepL: 'à droite, latéralement, crochet en u') + - "⸨": [T: "double parenthèse gauche"] # 0x2e28 (en: 'left double parentheses') + - "⸩": [T: "double parenthèse droite"] # 0x2e29 (en: 'right double parentheses') + - "⸪": [T: "ponctuation deux points sur un point"] # 0x2e2a (en: 'two dots over one dot punctuation', DeepL translation) + - "⸫": [T: "ponctuation un point sur deux points"] # 0x2e2b (en: 'one dot over two dots punctuation', DeepL translation) + - "⸬": [T: "ponctuation quatre points en carrés"] # 0x2e2c (en: 'squared four dot punctuation', DeepL translation) + - "⸭": [T: "marque à cinq points"] # 0x2e2d (en: 'five dot mark', DeepL translation) + - "⸮": [T: "point d'interrogation inversé"] # 0x2e2e (en: 'reversed question mark', DeepL translation) + - "ⸯ": [T: "tilde vertical"] # 0x2e2f (en: 'vertical tilde', DeepL translation) + - "⸰": [T: "point d'anneau"] # 0x2e30 (en: 'ring point', DeepL translation) + - "⸱": [T: "point médian séparateur de mots"] # 0x2e31 (en: 'word separator middle dot', DeepL translation) + - "⸲": [T: "virgule tournée"] # 0x2e32 (en: 'turned comma', DeepL translation) + - "⸳": [T: "point élevé"] # 0x2e33 (en: 'raised dot', DeepL translation) + - "⸴": [T: "virgule élevée"] # 0x2e34 (en: 'raised comma', DeepL translation) + - "⸵": [T: "point-virgule tourné"] # 0x2e35 (en: 'turned semicolon', DeepL translation) + - "⸶": [T: "obèle garde gauche"] # 0x2e36 (en: 'dagger with left guard', DeepL translation) + - "⸷": [T: "obèle garde droite"] # 0x2e37 (en: 'dagger with right guard', DeepL translation) + - "⸸": [T: "obèle tourné"] # 0x2e38 (en: 'turned dagger', DeepL translation) + - "⸹": [T: "moitié supérieure de paragraphe"] # 0x2e39 (en: 'top half section sign', DeepL translation) + - "⸺": [T: "tiret double cadratin"] # 0x2e3a (en: 'two em dash', DeepL translation) + - "⸻": [T: "tiret triple cadratin"] # 0x2e3b (en: 'three em dash', DeepL translation) + - "〃": [T: "guillemet de répétition"] # 0x3003 (en: 'ditto mark', DeepL translation) + - "〈": [T: "chevron gauche"] # 0x3008 (en: 'left angle bracket', DeepL: 'équerre gauche') + - "〉": [T: "chevron droit"] # 0x3009 (en: 'right angle bracket', DeepL: 'crochet d'angle droit') + - "《": [T: "double chevron gauche"] # 0x300a (en: 'left double angle bracket') + - "》": [T: "double chevron droit"] # 0x300b (en: 'right double angle bracket') + - "「": [T: "anglet gauche"] # 0x300c (en: 'left corner bracket', DeepL: 'parenthèse d'angle gauche') + - "」": [T: "anglet droit"] # 0x300d (en: 'right corner bracket', DeepL: 'crochet d'angle droit') + - "『": [T: "anglet blanc gauche"] # 0x300e (en: 'left white corner bracket', DeepL: 'gauche équerre blanche') + - "』": [T: "anglet blanc droit"] # 0x300f (en: 'right white corner bracket', DeepL: 'équerre blanche droite') + - "【": [T: "crochet lenticulaire noir gauche"] # 0x3010 (en: 'left black lenticular bracket', DeepL: 'parenthèse lenticulaire noire gauche') + - "】": [T: "crochet lenticulaire noir droit"] # 0x3011 (en: 'right black lenticular bracket', DeepL: 'support lenticulaire noir droit') + - "〔": [T: "crochet en écaille gauche"] # 0x3014 (en: 'left tortoise shell bracket') + - "〕": [T: "crochet en écaille droit"] # 0x3015 (en: 'right tortoise shell bracket') + - "〖": [T: "crochet lenticulaire blanc gauche"] # 0x3016 (en: 'left white lenticular bracket', DeepL: 'équerre lenticulaire blanche gauche') + - "〗": [T: "crochet lenticulaire blanc droit"] # 0x3017 (en: 'right white lenticular bracket', DeepL: 'équerre lenticulaire blanche droite') + - "〘": [T: "crochet en écaille blanc gauche"] # 0x3018 (en: 'left white tortoise shell bracket', DeepL: 'à gauche, support en écaille de tortue blanche') + - "〙": [T: "crochet en écaille blanc droit"] # 0x3019 (en: 'right white tortoise shell bracket', DeepL: 'support droit en écaille de tortue blanche') + - "〚": [T: "crochet blanc gauche"] # 0x301a (en: 'left white square bracket') + - "〛": [T: "crochet blanc droit"] # 0x301b (en: 'right white square bracket') + - "〜": [T: "trait d'union en esse"] # 0x301c (en: 'wave dash', DeepL: 'vague tiret') + - "〰": [T: "tiret ondulé"] # 0x3030 (en: 'wavy dash', DeepL: 'trait ondulé') + - "㉈": [T: "dix cerclé sur carré noir"] # 0x3248 (en: 'circled number ten on black square', DeepL: 'chiffre dix encerclé sur un carré noir') + - "㉉": [T: "vingt cerclé sur carré noir"] # 0x3249 (en: 'circled number twenty on black square', DeepL: 'chiffre vingt encerclé sur un carré noir') + - "㉊": [T: "trente cerclé sur carré noir"] # 0x324a (en: 'circled number thirty on black square', DeepL: 'chiffre trente encerclé sur un carré noir') + - "㉋": [T: "quarante cerclé sur carré noir"] # 0x324b (en: 'circled number forty on blacks square', DeepL: 'chiffre quarante encerclé sur un carré noir') + - "㉌": [T: "cinquante cerclé sur carré noir"] # 0x324c (en: 'circled number fifty on black square', DeepL: 'chiffre cinquante encerclé sur un carré noir') + - "㉍": [T: "soixante cerclé sur carré noir"] # 0x324d (en: 'circled number sixty on black square', DeepL: 'chiffre soixante encerclé sur un carré noir') + - "㉎": [T: "soixante dix cerclé sur carré noir"] # 0x324e (en: 'circled number seventy on black square', DeepL: 'chiffre soixante-dix encerclé sur un carré noir') + - "㉏": [T: "quatre vingts cerclé sur carré noir"] # 0x324f (en: 'circled number eighty on black square', DeepL: 'chiffre aty encerclé sur un carré noir') + - "㉑": [T: "nombre vingt et un encerclé"] # 0x3251 (en: 'circled number twenty one', DeepL translation) + - "㉒": [T: "nombre vingt-deux encerclé"] # 0x3252 (en: 'circled number twenty two', DeepL translation) + - "㉓": [T: "nombre vingt-trois encerclé"] # 0x3253 (en: 'circled number twenty three', DeepL translation) + - "㉔": [T: "nombre vingt-quatre encerclé"] # 0x3254 (en: 'circled number twenty four', DeepL translation) + - "㉕": [T: "nombre vingt-cinq encerclé"] # 0x3255 (en: 'circled number twenty five', DeepL translation) + - "㉖": [T: "nombre vingt-six encerclé"] # 0x3256 (en: 'circled number twenty six', DeepL translation) + - "㉗": [T: "nombre vingt-sept encerclé"] # 0x3257 (en: 'circled number twenty seven', DeepL translation) + - "㉘": [T: "nombre vingt-huit encerclé"] # 0x3258 (en: 'circled number twenty eight', DeepL translation) + - "㉙": [T: "nombre vingt-neuf encerclé"] # 0x3259 (en: 'circled number twenty nine', DeepL translation) + - "㉚": [T: "nombre trente encerclé"] # 0x325a (en: 'circled number thirty', DeepL translation) + - "㉛": [T: "nombre trente et un encerclé"] # 0x325b (en: 'circled number thirty one', DeepL translation) + - "㉜": [T: "nombre trente-deux nombre"] # 0x325c (en: 'circled number thirty two', DeepL translation) + - "㉝": [T: "nombre trente-trois encerclé"] # 0x325d (en: 'circled number thirty three', DeepL translation) + - "㉞": [T: "nombre trente-quatre encerclé"] # 0x325e (en: 'circled number thirty four', DeepL translation) + - "㉟": [T: "nombre trente-cinq encerclé"] # 0x325f (en: 'circled number thirty five', DeepL translation) + - "㊱": [T: "nombre trente-six encerclé"] # 0x32b1 (en: 'circled number thirty six', DeepL translation) + - "㊲": [T: "nombre trente-sept encerclé"] # 0x32b2 (en: 'circled number thirty seven', GPT-5.4 translation) + - "㊳": [T: "nombre trente-huit encerclé"] # 0x32b3 (en: 'circled number thirty eight', GPT-5.4 translation) + - "㊴": [T: "nombre trente-neuf encerclé"] # 0x32b4 (en: 'circled number thirty nine', GPT-5.4 translation) + - "㊵": [T: "nombre quarante encerclé"] # 0x32b5 (en: 'circled number forty', GPT-5.4 translation) + - "㊶": [T: "nombre quarante et un encerclé"] # 0x32b6 (en: 'circled number forty one', GPT-5.4 translation) + - "㊷": [T: "nombre quarante-deux encerclé"] # 0x32b7 (en: 'circled number forty two', GPT-5.4 translation) + - "㊸": [T: "nombre quarante-trois encerclé"] # 0x32b8 (en: 'circled number forty three', GPT-5.4 translation) + - "㊹": [T: "nombre quarante-quatre encerclé"] # 0x32b9 (en: 'circled number forty four', GPT-5.4 translation) + - "㊺": [T: "nombre quarante-cinq encerclé"] # 0x32ba (en: 'circled number forty five', GPT-5.4 translation) + - "㊻": [T: "nombre quarante-six encerclé"] # 0x32bb (en: 'circled number forty six', GPT-5.4 translation) + - "㊼": [T: "nombre quarante-sept encerclé"] # 0x32bc (en: 'circled number forty seven', GPT-5.4 translation) + - "㊽": [T: "nombre quarante-huit encerclé"] # 0x32bd (en: 'circled number forty eight', GPT-5.4 translation) + - "㊾": [T: "nombre quarante-neuf encerclé"] # 0x32be (en: 'circled number forty nine', GPT-5.4 translation) + - "㊿": [T: "nombre cinquante encerclé"] # 0x32bf (en: 'circled number fifty', GPT-5.4 translation) + - "㋌": [T: "mercure"] # 0x32cc (en: 'mercury', DeepL translation) + - "㋍": [T: "erg"] # 0x32cd (DeepL translation) + - "㋎": [T: "électron-volts"] # 0x32ce (en: 'electron volts', DeepL translation) + - "㋏": [T: "signe de responsabilité limitée"] # 0x32cf (en: 'limited liability sign', DeepL translation) + - "㍱": [T: "hectopascals"] # 0x3371 (DeepL translation) + - "㍲": [T: "daltons"] # 0x3372 (DeepL translation) + - "㍳": [T: "unités astronomiques"] # 0x3373 (en: 'astronomical units', DeepL translation) + - "㍴": [T: "barres"] # 0x3374 (en: 'bars', DeepL translation) + - "㍵": [T: "o v"] # 0x3375 (DeepL translation) + - "㍶": [T: "parsecs"] # 0x3376 (DeepL translation) + - "㍷": [T: "décimètres"] # 0x3377 (en: 'decimeters', DeepL translation) + - "㍸": [T: "décimètres carrés"] # 0x3378 (en: 'decimeters squared', DeepL translation) + - "㍹": [T: "décimètres cubes"] # 0x3379 (en: 'decimeters cubed', DeepL translation) + - "㍺": [T: "unités instrumentales"] # 0x337a (en: 'instrumental units', DeepL translation) + - "㎀": [T: "picoampères"] # 0x3380 (en: 'picoamps', DeepL translation) + - "㎁": [T: "nanoampères"] # 0x3381 (en: 'nanoamps', DeepL translation) + - "㎂": [T: "microampères"] # 0x3382 (en: 'microamps', DeepL translation) + - "㎃": [T: "milliampères"] # 0x3383 (en: 'milliamps', DeepL translation) + - "㎄": [T: "kiloampères"] # 0x3384 (en: 'kiloamps', DeepL translation) + - "㎅": [T: "kilo-octets"] # 0x3385 (en: 'kilobytes', DeepL translation) + - "㎆": [T: "mégaoctets"] # 0x3386 (en: 'megabytes', DeepL translation) + - "㎇": [T: "gigaoctets"] # 0x3387 (en: 'gigabytes', DeepL translation) + - "㎈": [T: "calories"] # 0x3388 (DeepL translation) + - "㎉": [T: "kilocalories"] # 0x3389 (DeepL translation) + - "㎊": [T: "picofarads"] # 0x338a (DeepL translation) + - "㎋": [T: "nanofarads"] # 0x338b (DeepL translation) + - "㎌": [T: "microfarads"] # 0x338c (DeepL translation) + - "㎍": [T: "microgrammes"] # 0x338d (en: 'micrograms', DeepL translation) + - "㎎": [T: "milligrammes"] # 0x338e (en: 'milligrams', DeepL translation) + - "㎏": [T: "kilogrammes"] # 0x338f (en: 'kilograms', DeepL translation) + - "㎐": [T: "hertz"] # 0x3390 (DeepL translation) + - "㎑": [T: "kilohertz"] # 0x3391 (DeepL translation) + - "㎒": [T: "mégahertz"] # 0x3392 (en: 'megahertz', DeepL translation) + - "㎓": [T: "gigahertz"] # 0x3393 (DeepL translation) + - "㎔": [T: "térahertz"] # 0x3394 (en: 'terahertz', DeepL translation) + - "㎕": [T: "microlitres"] # 0x3395 (en: 'microliters', DeepL translation) + - "㎖": [T: "millilitres"] # 0x3396 (en: 'milliliters', DeepL translation) + - "㎗": [T: "décilitres"] # 0x3397 (en: 'deciliters', DeepL translation) + - "㎘": [T: "kilolitres"] # 0x3398 (en: 'kiloliters', DeepL translation) + - "㎙": [T: "femtomètres"] # 0x3399 (en: 'femtometers', DeepL translation) + - "㎚": [T: "nanomètres"] # 0x339a (en: 'nanometers', DeepL translation) + - "㎛": [T: "micromètres"] # 0x339b (en: 'micrometers', DeepL translation) + - "㎜": [T: "millimètres"] # 0x339c (en: 'millimeters', DeepL translation) + - "㎝": [T: "centimètres"] # 0x339d (en: 'centimeters', DeepL translation) + - "㎞": [T: "kilomètres"] # 0x339e (en: 'kilometers', DeepL translation) + - "㎟": [T: "millimètres carrés"] # 0x339f (en: 'millimeters squared', DeepL translation) + - "㎠": [T: "centimètres cubes"] # 0x33a0 (en: 'centimeters squared', DeepL translation) + - "㎡": [T: "mètres carrés"] # 0x33a1 (en: 'meters squared', DeepL translation) + - "㎢": [T: "kilomètres carrés"] # 0x33a2 (en: 'kilometers squared', DeepL translation) + - "㎣": [T: "millimètres cubes"] # 0x33a3 (en: 'millimeters cubed', DeepL translation) + - "㎤": [T: "centimètres cubes"] # 0x33a4 (en: 'centimeters cubed', DeepL translation) + - "㎥": [T: "mètres cubes"] # 0x33a5 (en: 'meters cubed', DeepL translation) + - "㎦": [T: "kilomètres cubes"] # 0x33a6 (en: 'kilometers cubed', DeepL translation) + - "㎧": [T: "mètres par seconde"] # 0x33a7 (en: 'meters per second', DeepL translation) + - "㎨": [T: "mètres par seconde carrés"] # 0x33a8 (en: 'meters per second squared', DeepL translation) + - "㎩": [T: "pascals"] # 0x33a9 (DeepL translation) + - "㎪": [T: "kilopascals"] # 0x33aa (DeepL translation) + - "㎫": [T: "mégapascal"] # 0x33ab (en: 'megapascals', DeepL translation) + - "㎬": [T: "gigapascals"] # 0x33ac (DeepL translation) + - "㎭": [T: "rads"] # 0x33ad (DeepL translation) + - "㎮": [T: "rads par seconde"] # 0x33ae (en: 'rads per second', DeepL translation) + - "㎯": [T: "rads par seconde carrés"] # 0x33af (en: 'rads per second squared', DeepL translation) + - "㎰": [T: "picosecondes"] # 0x33b0 (en: 'picoseconds', DeepL translation) + - "㎱": [T: "nanosecondes"] # 0x33b1 (en: 'nanoseconds', DeepL translation) + - "㎲": [T: "microsecondes"] # 0x33b2 (en: 'microseconds', DeepL translation) + - "㎳": [T: "millisecondes"] # 0x33b3 (en: 'milliseconds', DeepL translation) + - "㎴": [T: "picovolts"] # 0x33b4 (DeepL translation) + - "㎵": [T: "nanovolts"] # 0x33b5 (DeepL translation) + - "㎶": [T: "microvolts"] # 0x33b6 (DeepL translation) + - "㎷": [T: "millivolts"] # 0x33b7 (DeepL translation) + - "㎸": [T: "kilovolts"] # 0x33b8 (DeepL translation) + - "㎹": [T: "mégavolts"] # 0x33b9 (en: 'megavolts', DeepL translation) + - "㎺": [T: "picowatts"] # 0x33ba (DeepL translation) + - "㎻": [T: "nanowatts"] # 0x33bb (DeepL translation) + - "㎼": [T: "microwatts"] # 0x33bc (DeepL translation) + - "㎽": [T: "milliwatts"] # 0x33bd (DeepL translation) + - "㎾": [T: "kilowatts"] # 0x33be (DeepL translation) + - "㎿": [T: "mégawatts"] # 0x33bf (en: 'megawatts', DeepL translation) + - "㏀": [T: "kilo-ohms"] # 0x33c0 (DeepL translation) + - "㏁": [T: "mégaohms"] # 0x33c1 (en: 'megaohms', DeepL translation) + - "㏂": [T: "attomètres"] # 0x33c2 (en: 'attometers', DeepL translation) + - "㏃": [T: "becquerels"] # 0x33c3 (DeepL translation) + - "㏄": [T: "centimètres cubes"] # 0x33c4 (en: 'cubic centimeters', DeepL translation) + - "㏅": [T: "candelas"] # 0x33c5 (DeepL translation) + - "㏆": [T: "coulombs par kilogramme"] # 0x33c6 (en: 'coulombs per kilogram', DeepL translation) + - "㏇": [T: "c majuscule, o, point"] # 0x33c7 (I have no idea what this is) (en: 'cap C, o, period', DeepL translation) + - "㏈": [T: "décibels"] # 0x33c8 (en: 'decibels', DeepL translation) + - "㏉": [T: "gris"] # 0x33c9 (en: 'grays', DeepL translation) + - "㏊": [T: "hectares"] # 0x33ca (DeepL translation) + - "㏋": [T: "cheval-vapeur"] # 0x33cb (en: 'horsepower', DeepL translation) + - "㏌": [T: "pouces"] # 0x33cc (en: 'inches', DeepL translation) + - "㏍": [T: "kilokelvins"] # 0x33cd (DeepL translation) + - "㏎": [T: "kilomètres"] # 0x33ce (en: 'kilometers', DeepL translation) + - "㏏": [T: "noeuds"] # 0x33cf (en: 'knots', DeepL translation) + - "㏐": [T: "lumens"] # 0x33d0 (DeepL translation) + - "㏑": [T: "logarithme naturel"] # 0x33d1 (en: 'natural log', DeepL translation) + - "㏒": [T: "logarithme"] # 0x33d2 (en: 'logarithm', DeepL translation) + - "㏓": [T: "lux"] # 0x33d3 (DeepL translation) + - "㏔": [T: "millibarns"] # 0x33d4 (DeepL translation) + - "㏕": [T: "moulins"] # 0x33d5 (en: 'mills', DeepL translation) + - "㏖": [T: "taupes"] # 0x33d6 (en: 'moles', DeepL translation) + - "㏗": [T: "p h"] # 0x33d7 (DeepL translation) + - "㏘": [T: "picomètres"] # 0x33d8 (en: 'picometers', DeepL translation) + - "㏙": [T: "parties par million"] # 0x33d9 (en: 'parts per million', DeepL translation) + - "㏚": [T: "pétaroentgens"] # 0x33da (en: 'petaroentgens', DeepL translation) + - "㏛": [T: "stéradians"] # 0x33db (en: 'steradians', DeepL translation) + - "㏜": [T: "sieverts"] # 0x33dc (DeepL translation) + - "㏝": [T: "webers"] # 0x33dd (DeepL translation) + - "㏞": [T: "volts par mètre"] # 0x33de (en: 'volts per meter', DeepL translation) + - "㏟": [T: "ampères par mètre"] # 0x33df (en: 'amps per meter', DeepL translation) + - "㏿": [T: "gallons"] # 0x33ff (DeepL translation) + - "": [T: "égal avec circonflexe en dessous"] # 0xe900 (en: 'equals with hat below', DeepL translation) + - "": [T: "égal avec plus au dessus"] # 0xe901 (en: 'equals with plus above', DeepL translation) + - "": [T: "égal avec plus en dessous"] # 0xe902 (en: 'equals with plus below', DeepL translation) + - "": [T: "tilde avec plus au dessus"] # 0xe903 (en: 'tilde with plus above', DeepL translation) + - "": [T: "tilde avec plus en dessous"] # 0xe904 (en: 'tilde with plus below', DeepL translation) + - "": [T: "égal double sur de supérieur à"] # 0xe908 (en: 'equal double over greater than', DeepL translation) + - "": [T: "égal double sur inférieur à"] # 0xe909 (en: 'equal double over less than', DeepL translation) + - "": [T: "contient ou égal à"] # 0xe90a (en: 'contains or equal to', DeepL translation) + - "": [T: "sur ensemble ou égal à"] # 0xe90b (en: 'superset of or equal to', DeepL translation) + - "": [T: "sous ensemble de ou égal à"] # 0xe90c (en: 'subset of or equal to', DeepL translation) + - "": [T: "égal à sur inférieur à"] # 0xe90d (en: 'equal over less than', DeepL translation) + - "": [T: "élément de ou égal à"] # 0xe912 (en: 'element of or equal to', DeepL translation) + - "": [T: "égal ou supérieur à"] # 0xe913 (en: 'equal to or greater than', DeepL translation) + - "": [T: "sur ensemble approximatif de"] # 0xe914 (en: 'approximate superset of', DeepL translation) + - "": [T: "sous ensemble approximatif de"] # 0xe915 (en: 'approximate subset of', DeepL translation) + - "": [T: "sur ensemble de avec point inclut comme sous relation"] # 0xe916 (en: 'superset of with dot includes as sub relation', DeepL translation) + - "": [T: "sous ensemble de avec point inclut comme sous relation"] # 0xe917 (en: 'subset of with dot is included in as sub relation', DeepL translation) + - "": [T: "égal avec point en dessous"] # 0xe918 (en: 'equal with dot below', DeepL translation) + - "": [T: "point gauche sur moins sur point droit"] # 0xe919 (en: 'left dot over minus over right dot', DeepL translation) + - "": [T: "point droit sur moins sur point gauche"] # 0xe91a (en: 'right dot over minus over left dot', DeepL translation) + - "": [T: "presque égal à moins"] # 0xe91f (en: 'almost equal to minus', DeepL translation) + - "": [T: "double coupe carrée"] # 0xe920 (en: 'double square cup', DeepL translation) + - "": [T: "double majuscule carrée"] # 0xe921 (en: 'double square cap', DeepL translation) + - "": [T: "inférieur à égal ou supérieur à"] # 0xe922 (en: 'less than equal to or greater than', DeepL translation) + - "": [T: "tilde avec point"] # 0xe924 (en: 'tilde with dot', DeepL translation) + - "": [T: "tilde avec deux points"] # 0xe925 (en: 'tilde with two dots', DeepL translation) + - "": [T: "inférieur à supérieur ou égal à"] # 0xe926 (en: 'less than greater than or equal to', DeepL translation) + - "": [T: "plus grand que moins que ou égal à"] # 0xe927 (en: 'greater than less than or equal to', DeepL translation) + - "": [T: "équivalent à ou inférieur à"] # 0xe928 (en: 'equivalent to or less than', DeepL translation) + - "": [T: "équivalent ou supérieur à"] # 0xe929 (en: 'equivalent to or greater than', DeepL translation) + - "": [T: "opérateur de boîte ouverte gauche"] # 0xe92a (en: 'left open box operator', DeepL translation) + - "": [T: "opérateur de boîte ouverte à droite"] # 0xe92b (en: 'right open box operator', DeepL translation) + - "": [T: "identique à avec point"] # 0xe92c (en: 'identical to with dot', DeepL translation) + - "": [T: "supérieur à égal ou inférieur"] # 0xe92d (en: 'greater than equal to or less than', DeepL translation) + - "": [T: "opérateur de barre"] # 0xe92e (en: 'bar operator', DeepL translation) + - "": [T: "opérateur double barre"] # 0xe92f (en: 'double bar operator', DeepL translation) + - "": [T: "triple barre opérateur"] # 0xe930 (en: 'triple bar operator', DeepL translation) + - "": [T: "inférieur ou approximativement égal à"] # 0xe932 (en: 'less than or approximately equal to', DeepL translation) + - "": [T: "plus grand que ou à peu près égal à"] # 0xe933 (en: 'greater than or approximately equal to', DeepL translation) + - "": [T: "moins que imbriqué"] # 0xe936 (en: 'nested less than', DeepL translation) + - "": [T: "plus grand que imbriqué"] # 0xe937 (en: 'nested greater than', DeepL translation) + - "": [T: "précède ou équivaut à"] # 0xe93a (en: 'precedes or equivalent to', DeepL translation) + - "": [T: "succède ou équivaut à"] # 0xe93b (en: 'succeeds or equivalent to', DeepL translation) + - "": [T: "précède sur égal"] # 0xe940 (en: 'precedes over equal', DeepL translation) + - "": [T: "succède sur égal"] # 0xe941 (en: 'succeeds over equal', DeepL translation) + - "": [T: "moins égal incliné plus grand"] # 0xe942 (en: 'less equal slanted greater', DeepL translation) + - "": [T: "plus grand égal incliné moins"] # 0xe943 (en: 'greater equal slanted less', DeepL translation) + - "": [T: "satisfait par"] # 0xe948 (en: 'satisfied by', DeepL translation) + - "": [T: "s paresseux"] # 0xe949 (en: 'lazy s', DeepL translation) + - "": [T: "pas d'affirmation"] # 0xe94a (en: 'not assertion', DeepL translation) + - "": [T: "double égal"] # 0xe94b (en: 'double equal', DeepL translation) + - "": [T: "triple égal"] # 0xe94c (en: 'triple equal', DeepL translation) + - "": [T: "règle retardée"] # 0xe94d (en: 'rule delayed', DeepL translation) + - "": [T: "délimiteur d'alias"] # 0xe94e (en: 'alias delimiter', DeepL translation) + - "": [T: "sous-groupe normal de avec barre"] # 0xe950 (en: 'normal subgroup of with bar', DeepL translation) + - "": [T: "contient comme un sous-groupe normal avec une barre"] # 0xe951 (en: 'contains as normal subgroup with bar', DeepL translation) + - "": [T: "implique rond"] # 0xe954 (en: 'round implies', DeepL translation) + - "": [T: "sourire sous la barre"] # 0xe955 (en: 'smile under bar', DeepL translation) + - "": [T: "froncement de sourcils sur la barre"] # 0xe956 (en: 'frown over bar', DeepL translation) + - "": [T: "sur ensemble de ou presque égal à"] # 0xe957 (en: 'superset of or almost equal to', DeepL translation) + - "": [T: "sous ensemble de ou presque égal à"] # 0xe958 (en: 'subset of or almost equal to', DeepL translation) + - "": [T: "supérieur à presque égal ou inférieur à"] # 0xe959 (en: 'greater than almost equal to or less than', DeepL translation) + - "": [T: "inférieur à presque égal ou supérieur à"] # 0xe95a (en: 'less than almost equal or greater than', DeepL translation) + - "": [T: "double ou logique"] # 0xe95c (en: 'double logical or', DeepL translation) + - "": [T: "double et logique"] # 0xe95d (en: 'double logical and', DeepL translation) + - "": [T: "ou logique avec double barre en dessous"] # 0xe95e (en: 'logical or with double bar below', DeepL translation) + - "": [T: "ou logique avec barre en bas"] # 0xe95f (en: 'logical or with bar below', DeepL translation) + - "": [T: "presque égal sur égal"] # 0xe962 (en: 'almost equal over equal', DeepL translation) + - "": [T: "triangle pointant vers la gauche avec barre bissectrice"] # 0xe964 (en: 'left pointing triangle with bisecting bar', DeepL translation) + - "": [T: "triangle pointant vers la droite avec barre bissectrice"] # 0xe965 (en: 'right pointing triangle with bisecting bar', DeepL translation) + - "": [T: "égal avec ligne supérieure en pointillés"] # 0xe966 (en: 'equals with dotted top line', DeepL translation) + - "": [T: "précède avec deux points"] # 0xe967 (en: 'precedes with colon', DeepL translation) + - "": [T: "réussit avec deux points"] # 0xe968 (en: 'succeeds with colon', DeepL translation) + - "": [T: "inférieur à ou égal incliné"] # 0xe969 (en: 'smaller than or equal slanted', DeepL translation) + - "": [T: "supérieur à ou égal incliné"] # 0xe96a (en: 'larger than or equal slanted', DeepL translation) + - "": [T: "très inférieur à imbriqué"] # 0xe96b (en: 'nested very much less than', DeepL translation) + - "": [T: "très supérieur à imbriqué"] # 0xe96c (en: 'nested very much greater than', DeepL translation) + - "": [T: "différence entre variante"] # 0xe96d (en: 'difference between variant', DeepL translation) + - "": [T: "inférieur à supérieur à superposé"] # 0xe96e (en: 'less than greater than overlay', DeepL translation) + - "": [T: "ou logique et logique superposé"] # 0xe96f (en: 'logical or logical and overlay', DeepL translation) + - "": [T: "sur-ensemble sur sur-ensemble"] # 0xe970 (en: 'superset over superset', DeepL translation) + - "": [T: "sous-ensemble sur sous-ensemble"] # 0xe971 (en: 'subset over subset', DeepL translation) + - "": [T: "sur-ensemble sur sous-ensemble"] # 0xe972 (en: 'superset over subset', DeepL translation) + - "": [T: "sous-ensemble sur sur-ensemble"] # 0xe973 (en: 'subset over superset', DeepL translation) + - "": [T: "triple barre verticale"] # 0xe979 (en: 'triple vertical bar', DeepL translation) + - "": [T: "points verticaux quadruples appariés"] # 0xe97a (en: 'paired quadruple vertical dots', DeepL translation) + - "": [T: "perpendiculaire au-dessus d'une barre"] # 0xe97b (en: 'perpendicular over bar', DeepL translation) + - "": [T: "tourniquet gauche double barre verticale"] # 0xe97c (en: 'left turnstile double vertical bar', DeepL translation) + - "": [T: "double tourniquet gauche double barre verticale"] # 0xe97d (en: 'double left turnstile double vertical bar', DeepL translation) + - "": [T: "perpendiculaire sur perpendiculaire inversée"] # 0xe97e (en: 'perpendicular over inverted perpendicular', DeepL translation) + - "": [T: "double barre verticale en tourniquet à gauche"] # 0xe97f (en: 'double left turnstile vertical bar', DeepL translation) + - "": [T: "angle sphérique ouverture"] # 0xe980 (en: 'spherical angle opening up', DeepL translation) + - "": [T: "double barre oblique"] # 0xe981 (en: 'double slash', DeepL translation) + - "": [T: "angle droit avec coin"] # 0xe982 (en: 'right angle with corner', DeepL translation) + - "": [T: "barre verticale cerclée"] # 0xe984 (en: 'circled vertical bar', DeepL translation) + - "": [T: "signe de division cerclé"] # 0xe985 (en: 'circled division sign', DeepL translation) + - "": [T: "solidus en pointillé"] # 0xe986 (en: 'dashed solidus', DeepL translation) + - "": [T: "barre oblique inverse en pointillé"] # 0xe987 (en: 'dashed backslash', DeepL translation) + - "": [T: "ligne médiane en pointillé"] # 0xe988 (en: 'dashed mid line', DeepL translation) + - "": [T: "barre verticale en pointillé"] # 0xe989 (en: 'dashed vertical bar', DeepL translation) + - "": [T: "perpendiculaire avec s"] # 0xe98a (en: 'perpendicular with s', DeepL translation) + - "": [T: "angle avec s"] # 0xe98b (en: 'angle with s', DeepL translation) + - "": [T: "angle sphérique ouverture à gauche"] # 0xe98c (en: 'spherical angle opening left', DeepL translation) + - "": [T: "angle ouvrant à gauche"] # 0xe98d (en: 'angle opening left', DeepL translation) + - "": [T: "barre verticale avec double crochet"] # 0xe98e (en: 'vertical bar with double hook', DeepL translation) + - "": [T: "point moyen opérateur radical libre"] # 0xe98f (en: 'medium dot operator free radical', DeepL translation) + - "": [T: "triangle blanc pointant vers le haut au-dessus de la barre"] # 0xe990 (en: 'white up pointing triangle above bar', DeepL translation) + - "": [T: "identique et parallèle à"] # 0xe991 (en: 'identical and parallel to', DeepL translation) + - "": [T: "smash product"] # 0xe992 (DeepL translation) + - "": [T: "opérateur triple barre avec barre horizontale"] # 0xe993 (en: 'triple bar operator with horizontal bar', DeepL translation) + - "": [T: "identique à avec double barre oblique"] # 0xe994 (en: 'identical to with double slash', DeepL translation) + - "": [T: "triple barres croisées"] # 0xe995 (en: 'triple crossed bars', DeepL translation) + - "": [T: "barre verticale sur cercle"] # 0xe996 (en: 'vertical bar over circle', DeepL translation) + - "": [T: "proportionnelle à verticale"] # 0xe997 (en: 'vertical proportional to', DeepL translation) + - "": [T: "dernier quartier de lune noir"] # 0xe998 (en: 'black last quarter moon', DeepL translation) + - "": [T: "premier quartier de lune noir"] # 0xe999 (en: 'black first quarter moon', DeepL translation) + - "": [T: "onde sinusoïdale négative"] # 0xe9a0 (en: 'negative sine wave', DeepL translation) + - "": [T: "point entre parenthèses"] # 0xe9a1 (en: 'parenthesized dot', DeepL translation) + - "": [T: "parenthèses"] # 0xe9a2 (en: 'parens', DeepL translation) + - "": [T: "sourire blanc"] # 0xe9a3 (en: 'white smile', DeepL translation) + - "": [T: "froncement de sourcils blanc"] # 0xe9a4 (en: 'white frown', DeepL translation) + - "": [T: "hexagone"] # 0xe9a5 (en: 'hexagon', DeepL translation) + - "": [T: "équivalent à sur plus"] # 0xe9a6 (en: 'equivalent to over plus', DeepL translation) + - "": [T: "plus sur équivalent à"] # 0xe9a7 (en: 'plus over equivalent to', DeepL translation) + - "": [T: "empattements à l'intersection"] # 0xe9b0 (en: 'intersection serifs', DeepL translation) + - "": [T: "empattement d'union"] # 0xe9b1 (en: 'union serifs', DeepL translation) + - "": [T: "carré intersection empattements"] # 0xe9b2 (en: 'square intersection serifs', DeepL translation) + - "": [T: "square union serifs"] # 0xe9b3 (DeepL translation) + - "": [T: "précède équivalent à ou succède à"] # 0xe9e0 (en: 'precedes equivalent to or succeeds', DeepL translation) + - "": [T: "réussit équivaut à ou précède"] # 0xe9e1 (en: 'succeeds equivalent to or precedes', DeepL translation) + - "": [T: "précède presque égal à ou succède à"] # 0xe9e2 (en: 'precedes almost equal to or succeeds', DeepL translation) + - "": [T: "réussit presque égal à ou précède"] # 0xe9e3 (en: 'succeeds almost equal to or precedes', DeepL translation) + - "": [T: "inférieur à équivalent ou supérieur à"] # 0xe9f0 (en: 'less than equivalent to or greater than', DeepL translation) + - "": [T: "plus grand que équivalent à ou moins que"] # 0xe9f1 (en: 'greater than equivalent to or less than', DeepL translation) + - "": [T: "pas vert beaucoup moins que"] # 0xea00 (en: 'not vert much less than', DeepL translation) + - "": [T: "pas vert beaucoup plus grand que"] # 0xea01 (en: 'not vert much greater than', DeepL translation) + - "": [T: "pas beaucoup moins que variante"] # 0xea02 (en: 'not much less than variant', DeepL translation) + - "": [T: "pas beaucoup plus grand que variante"] # 0xea03 (en: 'not much greater than variant', DeepL translation) + - "": [T: "moins vert non double égal"] # 0xea04 (en: 'less vert not double equals', DeepL translation) + - "": [T: "gt vert pas double égal"] # 0xea05 (en: 'gt vert not double equals', DeepL translation) + - "": [T: "pas inférieur ou égal à"] # 0xea06 (en: 'not less than or equal to', DeepL translation) + - "": [T: "pas supérieur ou égal à"] # 0xea07 (en: 'not greater than or equal to', DeepL translation) + - "": [T: "ni égal ni inférieur à"] # 0xea09 (en: 'neither equal to nor less than', DeepL translation) + - "": [T: "ne contient pas ou n'est pas égal à"] # 0xea0a (en: 'does not contain or equal to', DeepL translation) + - "": [T: "ni sur ensemble à, ni égal à"] # 0xea0b (en: 'neither superset of nor equal to', DeepL translation) + - "": [T: "ni sous-ensemble de ni égal à"] # 0xea0c (en: 'neither subset of nor equal to', DeepL translation) + - "": [T: "solidus inversé sous-ensemble"] # 0xea0d (en: 'reverse solidus subset', DeepL translation) + - "": [T: "ni égal ni supérieur à"] # 0xea0e (en: 'neither equal to nor greater than', DeepL translation) + - "": [T: "pas moins opérateur tilde"] # 0xea0f (en: 'not minus tilde operator', DeepL translation) + - "": [T: "ni égal ni inférieur à"] # 0xea10 (en: 'neither equal to nor less than', DeepL translation) + - "": [T: "opérateur non tilde"] # 0xea11 (en: 'not tilde operator', DeepL translation) + - "": [T: "pas élément de ou égal à"] # 0xea12 (en: 'not element of or equal to', DeepL translation) + - "": [T: "ni égal ni supérieur à"] # 0xea13 (en: 'neither equal to nor greater than', DeepL translation) + - "": [T: "pas presque égal"] # 0xea14 (en: 'not almost equal', DeepL translation) + - "": [T: "ne succède pas à similaire"] # 0xea15 (en: 'not succeeds similar', DeepL translation) + - "": [T: "inférieur ou égal à avec barre oblique"] # 0xea16 (en: 'less than or slanted equal to with slash', DeepL translation) + - "": [T: "plus grand que ou égal à incliné avec barre oblique"] # 0xea17 (en: 'greater than or slanted equal to with slash', DeepL translation) + - "": [T: "solidus sur ensemble"] # 0xea1a (en: 'superset solidus', DeepL translation) + - "": [T: "ne contient pas"] # 0xea1b (en: 'does not contain', DeepL translation) + - "": [T: "pas inférieur ou égal à"] # 0xea1d (en: 'not less than or equal to', DeepL translation) + - "": [T: "pas supérieur ou égal à"] # 0xea1e (en: 'not greater than or equal to', DeepL translation) + - "": [T: "pas presque égal à moins"] # 0xea1f (en: 'not almost equal to minus', DeepL translation) + - "": [T: "négation point d'appartenance ci-dessus"] # 0xea22 (en: 'negated set membership dot above', DeepL translation) + - "": [T: "pas angle vert"] # 0xea2c (en: 'not vert angle', DeepL translation) + - "": [T: "non parallèle incliné"] # 0xea2d (en: 'not parallel slanted', DeepL translation) + - "": [T: "opérateur non barre"] # 0xea2e (en: 'not bar operator', DeepL translation) + - "": [T: "opérateur non double barre"] # 0xea2f (en: 'not double bar operator', DeepL translation) + - "": [T: "opérateur non triple barre"] # 0xea30 (en: 'not triple bar operator', DeepL translation) - "": [t: "inférieur à mais pas approximativement égal à"] # 0xea32 (en: 'less than but not approximately equal to', DeepL translation) - "": [t: "plus grand que mais pas approximativement égal à"] # 0xea33 (en: 'greater than but not approximately equal to', DeepL translation) - "": [t: "inférieur ou non égal à"] # 0xea34 (en: 'less than or not equal to', DeepL translation) From 31c5c2e57b25abe6e33052052ce780d696b02cc2 Mon Sep 17 00:00:00 2001 From: Olivier Thiffault Date: Thu, 6 Aug 2026 12:06:41 -0400 Subject: [PATCH 50/53] corrections to unicode-full.yaml v8 --- Rules/Languages/fr/unicode-full.yaml | 950 +++++++++++++-------------- 1 file changed, 475 insertions(+), 475 deletions(-) diff --git a/Rules/Languages/fr/unicode-full.yaml b/Rules/Languages/fr/unicode-full.yaml index 12d9f5941..257da86ec 100644 --- a/Rules/Languages/fr/unicode-full.yaml +++ b/Rules/Languages/fr/unicode-full.yaml @@ -2800,351 +2800,351 @@ - "": [T: "opérateur non barre"] # 0xea2e (en: 'not bar operator', DeepL translation) - "": [T: "opérateur non double barre"] # 0xea2f (en: 'not double bar operator', DeepL translation) - "": [T: "opérateur non triple barre"] # 0xea30 (en: 'not triple bar operator', DeepL translation) - - "": [t: "inférieur à mais pas approximativement égal à"] # 0xea32 (en: 'less than but not approximately equal to', DeepL translation) - - "": [t: "plus grand que mais pas approximativement égal à"] # 0xea33 (en: 'greater than but not approximately equal to', DeepL translation) - - "": [t: "inférieur ou non égal à"] # 0xea34 (en: 'less than or not equal to', DeepL translation) - - "": [t: "plus grand que ou non égal à"] # 0xea35 (en: 'greater than or not equal to', DeepL translation) - - "": [t: "non imbriqué moins que"] # 0xea36 (en: 'not nested less than', DeepL translation) - - "": [t: "non imbriqué plus grand que"] # 0xea37 (en: 'not nested greater than', DeepL translation) - - "": [t: "pas beaucoup moins que"] # 0xea38 (en: 'not much less than', DeepL translation) - - "": [t: "pas beaucoup plus grand que"] # 0xea39 (en: 'not much greater than', DeepL translation) - - "": [t: "précède mais n'équivaut pas à"] # 0xea3a (en: 'precedes but not equivalent to', DeepL translation) - - "": [t: "réussit mais n'est pas équivalent à"] # 0xea3b (en: 'succeeds but not equivalent to', DeepL translation) - - "": [t: "précède mais n'est pas égal à"] # 0xea3c (en: 'precedes but not equal to', DeepL translation) - - "": [t: "succède mais n'est pas égal à"] # 0xea3d (en: 'succeeds but not equal to', DeepL translation) - - "": [t: "n'est pas égal ou ne précède pas"] # 0xea3e (en: 'does not equal or precede', DeepL translation) - - "": [t: "n'égale pas ou ne succède pas"] # 0xea3f (en: 'does not equal or succeed', DeepL translation) - - "": [t: "précède mais n'est pas égal à"] # 0xea40 (en: 'precedes but not equal to', DeepL translation) - - "": [t: "succède mais n'est pas égal à"] # 0xea41 (en: 'succeeds but not equal to', DeepL translation) - - "": [t: "ni sous-ensemble de ni égal à"] # 0xea42 (en: 'not subset of nor equal to', DeepL translation) - - "": [t: "n'est pas un super-ensemble de ni égal à"] # 0xea43 (en: 'not superset of nor equal to', DeepL translation) - - "": [t: "sous-ensemble de ou non égal à"] # 0xea44 (en: 'subset of or not equal to', DeepL translation) - - "": [t: "superposé de ou différent de"] # 0xea45 (en: 'superset of or not equal to', DeepL translation) - - "": [t: "ni sous-ensemble de ni égal à"] # 0xea46 (en: 'not subset of nor equal to', DeepL translation) - - "": [t: "n'est pas un super-ensemble de ni égal à"] # 0xea47 (en: 'not superset of nor equal to', DeepL translation) - - "": [t: "non triple moins que"] # 0xea48 (en: 'not triple less than', DeepL translation) - - "": [t: "pas triple plus grand que"] # 0xea49 (en: 'not triple greater than', DeepL translation) - - "": [t: "pas précède les égalités"] # 0xea4c (en: 'not precedes equals', DeepL translation) - - "": [t: "ne succède pas égale"] # 0xea4d (en: 'not succeeds equals', DeepL translation) - - "": [t: "sous-groupe non normal de avec barre"] # 0xea50 (en: 'not normal subgroup of with bar', DeepL translation) - - "": [t: "ne contient pas de sous-groupe normal avec la barre"] # 0xea51 (en: 'does not contain as normal subgroup with bar', DeepL translation) - - "": [t: "pas de différence entre"] # 0xea52 (en: 'not difference between', DeepL translation) - - "": [t: "non géométriquement équivalent à"] # 0xea53 (en: 'not geometrically equivalent to', DeepL translation) - - "": [t: "pas vert similaire"] # 0xea54 (en: 'not vert similar', DeepL translation) - - "": [t: "pas égal ou similaire"] # 0xea55 (en: 'not equal or similar', DeepL translation) - - "": [t: "pas vert approximatif"] # 0xea56 (en: 'not vert approximate', DeepL translation) - - "": [t: "pas approximativement identique à"] # 0xea57 (en: 'not approximately identical to', DeepL translation) - - "": [t: "pas de bosses égales"] # 0xea58 (en: 'not bumpy equals', DeepL translation) - - "": [t: "non bosselé simple égal"] # 0xea59 (en: 'not bumpy single equals', DeepL translation) - - "": [t: "not equal dot"] # 0xea5a (DeepL translation) - - "": [t: "inverse non équivalent"] # 0xea5b (en: 'reverse not equivalent', DeepL translation) - - "": [t: "pas un sous-ensemble carré"] # 0xea60 (en: 'not square subset', DeepL translation) - - "": [t: "pas un super-ensemble carré"] # 0xea61 (en: 'not square superset', DeepL translation) - - "": [t: "pas presque égal sur égal"] # 0xea62 (en: 'not almost equal over equal', DeepL translation) - - "": [t: "pas strictement équivalent à"] # 0xea63 (en: 'not strictly equivalent to', DeepL translation) - - "": [t: "point non congru"] # 0xea64 (en: 'not congruent dot', DeepL translation) - - "": [t: "inversé non égal"] # 0xea65 (en: 'reverse not equal', DeepL translation) - - "": [t: "non vert triangle gauche égal"] # 0xea70 (en: 'not vert left triangle equals', DeepL translation) - - "": [t: "pas vert triangle droit égal"] # 0xea71 (en: 'not vert right triangle equals', DeepL translation) - - "": [t: "non partiel"] # 0xea80 (en: 'not partial', DeepL translation) - - "": [t: "extension de l'embellissement de la flèche"] # 0xeb00 (en: 'arrow embellishment extender', DeepL translation) - - "": [t: "flèche vers la droite sur flèche vers la gauche"] # 0xeb01 (en: 'arrow rightwards over arrow leftwards', DeepL translation) - - "": [t: "flèche vers la droite sur flèche vers la gauche"] # 0xeb02 (en: 'arrow rightwards over arrow leftwards', DeepL translation) - - "": [t: "harpon à droite sur harpon à gauche"] # 0xeb03 (en: 'harpoon right over harpoon left', DeepL translation) - - "": [t: "harpon à droite sur harpon à gauche"] # 0xeb04 (en: 'harpoon right over harpoon left', DeepL translation) - - "": [t: "double flèche nord-est sud-ouest"] # 0xeb05 (en: 'double arrow northeast southwest', DeepL translation) - - "": [t: "double flèche nord-ouest sud-est"] # 0xeb06 (en: 'double arrow northwest southeast', DeepL translation) - - "": [t: "prolongateur de harpon horizontal"] # 0xeb07 (en: 'horizontal harpoon extender', DeepL translation) - - "": [t: "arc de cercle dans le sens inverse des aiguilles d'une montre, flèche vers la gauche"] # 0xeb08 (en: 'anticlockwise arc leftwards arrow', DeepL translation) - - "": [t: "arc antihoraire flèche vers la droite"] # 0xeb09 (en: 'anticlockwise arc rightwards arrow', DeepL translation) - - "": [t: "grande flèche vers la droite"] # 0xeb0b (en: 'large rightwards arrow accent', DeepL translation) - - "": [t: "grande flèche vers la gauche accent"] # 0xeb0c (en: 'large leftwards arrow accent', DeepL translation) - - "": [t: "flèche vers la gauche"] # 0xeb0d (en: 'leftwards arrowhead', DeepL translation) - - "": [t: "flèche vers la droite"] # 0xeb0e (en: 'rightwards arrowhead', DeepL translation) - - "": [t: "grande flèche gauche droite avec trait"] # 0xeb0f (en: 'large left right arrow with stroke', DeepL translation) - - "": [t: "prolongateur horizontal à double flèche"] # 0xeb10 (en: 'horizontal double arrow extender', DeepL translation) - - "": [t: "grande flèche double gauche-droite avec trait"] # 0xeb11 (en: 'large left right double arrow with stroke', DeepL translation) - - "": [t: "flèche vers le bas à gauche de la flèche vers le haut"] # 0xeb12 (en: 'downwards arrow leftwards of upwards arrow', DeepL translation) - - "": [t: "flèche vers la gauche avec l'angle vers le bas"] # 0xeb13 (en: 'leftwards arrow with corner downwards', DeepL translation) - - "": [t: "flèche vers la droite avec coin vers le haut"] # 0xeb14 (en: 'rightwards arrow with corner upwards', DeepL translation) - - "": [t: "flèche vers la gauche avec coin vers le haut"] # 0xeb15 (en: 'leftwards arrow with corner upwards', DeepL translation) - - "": [t: "flèche en demi-cercle supérieur dans le sens inverse des aiguilles d'une montre avec plus"] # 0xeb16 (en: 'anticlockwise top semicircle arrow with plus', DeepL translation) - - "": [t: "flèche demi-cercle supérieure dans le sens des aiguilles d'une montre avec moins"] # 0xeb17 (en: 'clockwise top semicircle arrow with minus', DeepL translation) - - "": [t: "flèche vers la droite avec empennage et trait"] # 0xeb18 (en: 'rightwards arrow with tail with stroke', DeepL translation) - - "": [t: "à droite harpon vers le bas"] # 0xeb19 (en: 'right harpoon down', DeepL translation) - - "": [t: "harpon gauche en bas"] # 0xeb1a (en: 'left harpoon down', DeepL translation) - - "": [t: "harpon gauche droit vers le bas"] # 0xeb1b (en: 'left right harpoon down', DeepL translation) - - "": [t: "flèche gauche droite vers le haut"] # 0xeb1c (en: 'left right harpoon up', DeepL translation) - - "": [t: "harpon de haut en bas à gauche"] # 0xeb1d (en: 'up down harpoon left', DeepL translation) - - "": [t: "haut bas harpon droit"] # 0xeb1e (en: 'up down harpoon right', DeepL translation) - - "": [t: "flèche vers le haut à droite de la flèche vers le bas"] # 0xeb1f (en: 'upwards arrow to the right of downwards arrow', DeepL translation) - - "": [t: "vers la gauche harpon à barre avec ardillon vers le haut"] # 0xeb20 (en: 'leftwards harpoon to bar with barb upwards', DeepL translation) - - "": [t: "flèche vers la droite jusqu'à la barre avec ardillon vers le haut"] # 0xeb21 (en: 'rightwards harpoon to bar with barb upwards', DeepL translation) - - "": [t: "harpon vers la gauche avec ardillon vers le bas"] # 0xeb22 (en: 'leftwards harpoon to bar with barb downwards', DeepL translation) - - "": [t: "harpon vers la droite sur la barre avec ardillon vers le bas"] # 0xeb23 (en: 'rightwards harpoon to bar with barb downwards', DeepL translation) - - "": [t: "harpon vers la gauche à partir d'une barre avec ardillon vers le haut"] # 0xeb24 (en: 'leftwards harpoon from bar with barb upwards', DeepL translation) - - "": [t: "vers la droite harpon de la barre avec ardillon vers le haut"] # 0xeb25 (en: 'rightwards harpoon from bar with barb upwards', DeepL translation) - - "": [t: "harpon gauche de la barre avec ardillon vers le bas"] # 0xeb26 (en: 'leftwards harpoon from bar with barb downwards', DeepL translation) - - "": [t: "vers la droite harpon de la barre avec ardillon vers le bas"] # 0xeb27 (en: 'rightwards harpoon from bar with barb downwards', DeepL translation) - - "": [t: "harpon vers le haut à la barre avec ardillon vers la gauche"] # 0xeb28 (en: 'upwards harpoon to bar with barb leftwards', DeepL translation) - - "": [t: "harpon vers le bas sur la barre avec ardillon vers la gauche"] # 0xeb29 (en: 'downwards harpoon to bar with barb leftwards', DeepL translation) - - "": [t: "vers le haut harpon à barre avec ardillon vers la droite"] # 0xeb2a (en: 'upwards harpoon to bar with barb rightwards', DeepL translation) - - "": [t: "harpon vers le bas sur la barre avec ardillon vers la droite"] # 0xeb2b (en: 'downwards harpoon to bar with barb rightwards', DeepL translation) - - "": [t: "harpon vers le haut à partir de la barre avec ardillon vers la gauche"] # 0xeb2c (en: 'upwards harpoon from bar with barb leftwards', DeepL translation) - - "": [t: "harpon de la barre avec ardillon vers la gauche"] # 0xeb2d (en: 'downwards harpoon from bar with barb leftwards', DeepL translation) - - "": [t: "harpon vers le haut à partir d'une barre avec ardillon vers la droite"] # 0xeb2e (en: 'upwards harpoon from bar with barb rightwards', DeepL translation) - - "": [t: "harpon vers le bas à partir de la barre avec ardillon vers la droite"] # 0xeb2f (en: 'downwards harpoon from bar with barb rightwards', DeepL translation) - - "": [t: "flèche vers le haut vers la barre"] # 0xeb30 (en: 'upwards arrow to bar', DeepL translation) - - "": [t: "flèche vers le bas jusqu'à la barre"] # 0xeb31 (en: 'downwards arrow to bar', DeepL translation) - - "": [t: "harpon vers le haut à gauche du harpon vers le bas"] # 0xeb32 (en: 'upwards harpoon to the left of downwards harpoon', DeepL translation) - - "": [t: "harpon vers le haut à droite du harpon vers le bas"] # 0xeb33 (en: 'upwards harpoon to the right of downwards harpoon', DeepL translation) - - "": [t: "pointe de flèche vers le haut"] # 0xeb34 (en: 'upwards arrowhead', DeepL translation) - - "": [t: "pointe de flèche vers le bas"] # 0xeb35 (en: 'downwards arrowhead', DeepL translation) - - "": [t: "double harpon avec ardillon à gauche vers le bas ardillon à droite vers le haut"] # 0xeb36 (en: 'double harpoon with leftwards barb down rightwards barb up', DeepL translation) - - "": [t: "double harpon avec ardillon gauche en haut ardillon droit en bas"] # 0xeb37 (en: 'double harpoon with leftwards barb up rightwards barb down', DeepL translation) - - "": [t: "flèche vers la gauche au-dessus de la barre"] # 0xeb38 (en: 'leftwards arrow over bar', DeepL translation) - - "": [t: "flèche vers la droite au-dessus de la barre"] # 0xeb39 (en: 'rightwards arrow over bar', DeepL translation) - - "": [t: "flèche vers la gauche sous la barre"] # 0xeb3a (en: 'leftwards arrow under bar', DeepL translation) - - "": [t: "flèche vers la droite sous la barre"] # 0xeb3b (en: 'rightwards arrow under bar', DeepL translation) - - "": [t: "flèche triple gauche droite"] # 0xeb3c (en: 'left right triple arrow', DeepL translation) - - "": [t: "double flèche nord-est sud-est"] # 0xeb3f (en: 'double arrow northeast southeast', DeepL translation) - - "": [t: "flèche en demi-cercle vers la gauche dans le sens inverse des aiguilles d'une montre"] # 0xeb40 (en: 'anticlockwise left semicircle arrow', DeepL translation) - - "": [t: "flèche en demi-cercle dans le sens des aiguilles d'une montre à gauche"] # 0xeb41 (en: 'clockwise left semicircle arrow', DeepL translation) - - "": [t: "cercle ouvert gauche flèche droite gauche"] # 0xeb42 (en: 'left open circle left right arrow', DeepL translation) - - "": [t: "flèche vers la droite au-dessus d'un tilde"] # 0xeb44 (en: 'rightwards arrow over tilde', DeepL translation) - - "": [t: "flèche vers la gauche au-dessus du tilde"] # 0xeb45 (en: 'leftwards arrow over tilde', DeepL translation) - - "": [t: "vers la gauche harpon sur la barre"] # 0xeb48 (en: 'leftwards harpoon over bar', DeepL translation) - - "": [t: "vers la droite harpon sur barre"] # 0xeb49 (en: 'rightwards harpoon over bar', DeepL translation) - - "": [t: "vers la gauche harpon sous la barre"] # 0xeb4a (en: 'leftwards harpoon under bar', DeepL translation) - - "": [t: "vers la droite harpon sous la barre"] # 0xeb4b (en: 'rightwards harpoon under bar', DeepL translation) - - "": [t: "flèche noire vers la gauche"] # 0xeb4c (en: 'squat black leftwards arrow', DeepL translation) - - "": [t: "flèche du demi-cercle droit dans le sens des aiguilles d'une montre"] # 0xeb50 (en: 'clockwise right semicircle arrow', DeepL translation) - - "": [t: "flèche de demi-cercle droit dans le sens inverse des aiguilles d'une montre"] # 0xeb51 (en: 'anticlockwise right semicircle arrow', DeepL translation) - - "": [t: "cercle ouvert gauche harpon gauche droite"] # 0xeb52 (en: 'left open circle left right harpoon', DeepL translation) - - "": [t: "flèche vers le haut à gauche de la barre verticale"] # 0xeb58 (en: 'upwards arrow leftwards of vertical bar', DeepL translation) - - "": [t: "flèche vers le bas à gauche de la barre verticale"] # 0xeb59 (en: 'downwards arrow leftwards of vertical bar', DeepL translation) - - "": [t: "flèche vers le haut à droite de la barre verticale"] # 0xeb5a (en: 'upwards arrow rightwards of vertical bar', DeepL translation) - - "": [t: "flèche vers le bas à droite de la barre verticale"] # 0xeb5b (en: 'downwards arrow rightwards of vertical bar', DeepL translation) - - "": [t: "vers la droite flèche avec crochet allongé vers le bas"] # 0xeb5c (en: 'rightwards arrow with extended downwards hook', DeepL translation) - - "": [t: "flèche gauche avec crochet allongé"] # 0xeb5d (en: 'leftwards arrow with extended hook', DeepL translation) - - "": [t: "flèche vers la gauche avec crochet allongé vers le bas"] # 0xeb5e (en: 'leftwards arrow with extended downwards hook', DeepL translation) - - "": [t: "flèche vers la droite avec crochet allongé"] # 0xeb5f (en: 'rightwards arrow with extended hook', DeepL translation) - - "": [t: "pas flèche droite ondulée"] # 0xeb60 (en: 'not right arrow wavy', DeepL translation) - - "": [t: "pas de flèche droite courbée"] # 0xeb61 (en: 'not right arrow curved', DeepL translation) - - "": [t: "harpon vers le haut à gauche de la barre verticale"] # 0xeb68 (en: 'upwards harpoon leftwards of vertical bar', DeepL translation) - - "": [t: "harpon vers le bas à gauche de la barre verticale"] # 0xeb69 (en: 'downwards harpoon leftwards of vertical bar', DeepL translation) - - "": [t: "harpon vers le haut à droite de la barre verticale"] # 0xeb6a (en: 'upwards harpoon rightwards of vertical bar', DeepL translation) - - "": [t: "harpon vers le bas à droite de la barre verticale"] # 0xeb6b (en: 'downwards harpoon rightwards of vertical bar', DeepL translation) - - "": [t: "flèche double verticale"] # 0xeb6c (en: 'vertical double arrow extender', DeepL translation) - - "": [t: "harpon vertical avec ardillon prolongateur gauche"] # 0xeb6d (en: 'vertical harpoon with barb left extender', DeepL translation) - - "": [t: "harpon vertical avec ardillon prolongateur droit"] # 0xeb6e (en: 'vertical harpoon with barb right extender', DeepL translation) - - "": [t: "harpon droit sur harpon gauche droit"] # 0xeb6f (en: 'right harpoon over left harpoon right', DeepL translation) - - "": [t: "harpon droit sur harpon gauche"] # 0xeb70 (en: 'right harpoon over left harpoon left', DeepL translation) - - "": [t: "harpon gauche sur harpon droit sur harpon droit"] # 0xeb71 (en: 'left harpoon over right harpoon right', DeepL translation) - - "": [t: "harpon gauche sur harpon droit gauche"] # 0xeb72 (en: 'left harpoon over right harpoon left', DeepL translation) - - "": [t: "flèche vers la gauche à partir de la tête de flèche de la barre"] # 0xeb73 (en: 'leftwards arrow from bar arrowhead', DeepL translation) - - "": [t: "vers la gauche flèche droite de l'extension de la barre"] # 0xeb74 (en: 'leftwards rightwards arrow from bar extender', DeepL translation) - - "": [t: "flèche vers la gauche à partir de la queue de l'ardillon"] # 0xeb75 (en: 'leftwards arrow from bar tail', DeepL translation) - - "": [t: "vers la droite flèche de l'empennage"] # 0xeb76 (en: 'rightwards arrow from bar tail', DeepL translation) - - "": [t: "flèche vers la droite à partir de la tête de flèche de la barre"] # 0xeb77 (en: 'rightwards arrow from bar arrowhead', DeepL translation) - - "": [t: "harpon vers le haut à partir de la barre avec ardillon vers la gauche"] # 0xeb78 (en: 'upwards harpoon from bar with barb leftwards arrowhead', DeepL translation) - - "": [t: "flèche vers la droite sur flèche vers la gauche"] # 0xeb79 (en: 'rightwards arrow over leftwards arrow right', DeepL translation) - - "": [t: "flèche vers la droite au-dessus de la flèche vers la gauche"] # 0xeb7a (en: 'rightwards arrow over leftwards arrow left', DeepL translation) - - "": [t: "vers la gauche flèche vers la droite flèche vers la droite"] # 0xeb7b (en: 'leftwards arrow over rightwards arrow right', DeepL translation) - - "": [t: "flèche vers la gauche sur flèche vers la droite à gauche"] # 0xeb7c (en: 'leftwards arrow over rightwards arrow left', DeepL translation) - - "": [t: "flèche vers le haut à partir d'une barre de flèche"] # 0xeb7d (en: 'upwards arrow from bar arrowhead', DeepL translation) - - "": [t: "flèche vers le haut à partir de la queue de la barre"] # 0xeb7e (en: 'upwards arrow from bar tail', DeepL translation) - - "": [t: "flèche vers le bas de la queue de la barre"] # 0xeb7f (en: 'downwards arrow from bar tail', DeepL translation) - - "": [t: "flèche vers le bas à partir de la tête de flèche de la barre"] # 0xeb80 (en: 'downwards arrow from bar arrowhead', DeepL translation) - - "": [t: "harpon vers le bas de la barre avec ardillon vers la droite pointe de flèche"] # 0xeb81 (en: 'downwards harpoon from bar with barb rightwards arrowhead', DeepL translation) - - "": [t: "harpon vers le haut à gauche du harpon vers le bas"] # 0xeb82 (en: 'upwards harpoon to the left of downwards harpoon bottom', DeepL translation) - - "": [t: "harpon vers le haut à gauche de l'extension du harpon vers le bas"] # 0xeb83 (en: 'upwards harpoon to the left of downwards harpoon extender', DeepL translation) - - "": [t: "harpon vers le bas à gauche du harpon vers le haut en haut"] # 0xeb84 (en: 'downwards harpoon to the left of upwards harpoon top', DeepL translation) - - "": [t: "harpon vers le haut à gauche du harpon vers le bas en haut"] # 0xeb85 (en: 'upwards harpoon to the left of downwards harpoon top', DeepL translation) - - "": [t: "harpon vers le bas à gauche de la rallonge du harpon vers le haut"] # 0xeb86 (en: 'downwards harpoon to the left of the upwards harpoon extender', DeepL translation) - - "": [t: "harpon vers le bas à gauche du harpon vers le haut en bas"] # 0xeb87 (en: 'downwards harpoon to the left of the upwards harpoon bottom', DeepL translation) - - "": [t: "flèche vers le haut à gauche de la flèche vers le bas"] # 0xeb88 (en: 'upwards arrow leftwards of downwards arrow bottom', DeepL translation) - - "": [t: "flèche vers le bas à gauche de la flèche vers le haut en haut"] # 0xeb89 (en: 'downwards arrow leftwards of upwards arrow top', DeepL translation) - - "": [t: "flèche vers le haut à gauche de la flèche vers le bas en haut"] # 0xeb8a (en: 'upwards arrow leftwards of downwards arrow top', DeepL translation) - - "": [t: "flèche vers le bas à gauche de la flèche vers le haut en bas"] # 0xeb8b (en: 'downwards arrow leftwards of upwards arrow bottom', DeepL translation) - - "": [t: "flèche vers la gauche flèche vers la droite prolongateur"] # 0xeb8c (en: 'leftwards rightwards arrows extender', DeepL translation) - - "": [t: "extension de la flèche nord-est"] # 0xeb8d (en: 'north east arrow extender', DeepL translation) - - "": [t: "extension de la flèche nord-ouest"] # 0xeb8e (en: 'north west arrow extender', DeepL translation) - - "": [t: "accolade pointant vers le bas à gauche"] # 0xec00 (en: 'down pointing brace left', DeepL translation) - - "": [t: "accolade pointant vers le bas au milieu"] # 0xec01 (en: 'down pointing brace mid', DeepL translation) - - "": [t: "accolade pointant vers le bas à droite"] # 0xec02 (en: 'down pointing brace right', DeepL translation) - - "": [t: "prolongation de l'accolade horizontale"] # 0xec03 (en: 'horizontal brace extender', DeepL translation) - - "": [t: "flèche pointant vers le haut à gauche"] # 0xec04 (en: 'up pointing brace left', DeepL translation) - - "": [t: "accolade pointant vers le haut au milieu"] # 0xec05 (en: 'up pointing brace mid', DeepL translation) - - "": [t: "accolade pointant vers le haut à droite"] # 0xec06 (en: 'up-pointing brace right', DeepL translation) - - "": [t: "barre verticale gauche"] # 0xec07 (en: 'left vertical bar', DeepL translation) - - "": [t: "barre verticale droite"] # 0xec08 (en: 'right vertical bar', DeepL translation) - - "": [t: "double barre verticale gauche"] # 0xec09 (en: 'left double vertical bar', DeepL translation) - - "": [t: "double barre verticale droite"] # 0xec0a (en: 'right double vertical bar', DeepL translation) - - "": [t: "rallonge d'équerre horizontale"] # 0xec0b (en: 'horizontal bracket extender', DeepL translation) - - "": [t: "sous crochet"] # 0xec0c (en: 'under square bracket', DeepL translation) - - "⎵": [t: "crochet vertical inférieur"] # 0x23b5 (en: 'under square bracket') - - "": [t: "sur parenthèse carrée"] # 0xec0d (en: 'over square bracket', DeepL translation) - - "⎴": [t: "crochet vertical supérieur"] # 0x23b4 (en: 'over square bracket') - - "": [t: "sous l'équerre à gauche"] # 0xec0e (en: 'under bracket left', DeepL translation) - - "": [t: "sous crochet à droite"] # 0xec0f (en: 'under bracket right', DeepL translation) - - "": [t: "crochet de substitution à gauche"] # 0xec10 (en: 'over bracket left', DeepL translation) - - "": [t: "plus parenthèse droite"] # 0xec11 (en: 'over bracket right', DeepL translation) - - "": [t: "parenthèse gauche 1"] # 0xec12 (en: 'left parens 1', DeepL translation) - - "": [t: "parenthèse gauche 2"] # 0xec13 (en: 'left parens 2', DeepL translation) - - "": [t: "parenthèse gauche 3"] # 0xec14 (en: 'left parens 3', DeepL translation) - - "": [t: "parenthèse gauche 4"] # 0xec15 (en: 'left parens 4', DeepL translation) - - "": [t: "parenthèse droite 1"] # 0xec16 (en: 'right parens 1', DeepL translation) - - "": [t: "parenthèse droite 2"] # 0xec17 (en: 'right parens 2', DeepL translation) - - "": [t: "parenthèse droite 3"] # 0xec18 (en: 'right parens 3', DeepL translation) - - "": [t: "parenthèse droite 4"] # 0xec19 (en: 'right parens 4', DeepL translation) - - "": [t: "radical 1"] # 0xec1a (DeepL translation) - - "": [t: "radical 2"] # 0xec1b (DeepL translation) - - "": [t: "radical 3"] # 0xec1c (DeepL translation) - - "": [t: "radical 4"] # 0xec1d (DeepL translation) - - "": [t: "radical 5"] # 0xec1e (DeepL translation) - - "": [t: "radical inférieur"] # 0xec1f (en: 'radical bottom', DeepL translation) - - "": [t: "radical vertical extender"] # 0xec20 (DeepL translation) - - "": [t: "radical haut"] # 0xec21 (en: 'radical top', DeepL translation) - - "": [t: "gauche crochet blanc haut"] # 0xec22 (en: 'left white bracket top', DeepL translation) - - "": [t: "parenthèse blanche gauche prolongée"] # 0xec23 (en: 'left white bracket extender', DeepL translation) - - "": [t: "équerre blanche gauche en bas"] # 0xec24 (en: 'left white bracket bottom', DeepL translation) - - "": [t: "droite équerre blanche en haut"] # 0xec25 (en: 'right white bracket top', DeepL translation) - - "": [t: "prolongateur de parenthèse blanche droite"] # 0xec26 (en: 'right white bracket extender', DeepL translation) - - "": [t: "droite parenthèse blanche en bas"] # 0xec27 (en: 'right white bracket bottom', DeepL translation) - - "": [t: "parenthèse blanche gauche"] # 0xec30 (en: 'left white curly bracket', DeepL translation) - - "": [t: "parenthèse blanche droite"] # 0xec31 (en: 'right white curly bracket', DeepL translation) - - "": [t: "signe de division longue"] # 0xec32 (en: 'long division sign', DeepL translation) - - "": [t: "extension du signe de division longue"] # 0xec33 (en: 'long division sign extender', DeepL translation) - - "": [t: "division courte"] # 0xec34 (en: 'short division', DeepL translation) - - "": [t: "double liaison em sud-ouest à nord-est"] # 0xec40 (en: 'double southwest to northeast em bond', DeepL translation) - - "": [t: "double liaison nord-ouest à sud-est"] # 0xec41 (en: 'double northwest to southeast em bond', DeepL translation) - - "": [t: "simple horizontal em bond"] # 0xec42 (en: 'single horizontal em bond', DeepL translation) - - "": [t: "double liaison em horizontale"] # 0xec43 (en: 'double horizontal em bond', DeepL translation) - - "": [t: "triple liaison horizontale em"] # 0xec44 (en: 'triple horizontal em bond', DeepL translation) - - "": [t: "verticale simple em bond"] # 0xec45 (en: 'single vertical em bond', DeepL translation) - - "": [t: "double liaison em verticale"] # 0xec46 (en: 'double vertical em bond', DeepL translation) - - "": [t: "triple liaison verticale em"] # 0xec47 (en: 'triple vertical em bond', DeepL translation) - - "": [t: "moins que em bond"] # 0xec48 (en: 'less than em bond', DeepL translation) - - "": [t: "plus grand que em bond"] # 0xec49 (en: 'greater than em bond', DeepL translation) - - "": [t: "lien horizontal simple"] # 0xec4a (en: 'single horizontal en bond', DeepL translation) - - "": [t: "double lien horizontal en"] # 0xec4b (en: 'double horizontal en bond', DeepL translation) - - "": [t: "triple barre horizontale en bond"] # 0xec4c (en: 'triple horizontal en bond', DeepL translation) - - "": [t: "rectangle en haut à gauche"] # 0xec80 (en: 'top left rectangle', DeepL translation) - - "": [t: "rectangle inférieur gauche"] # 0xec81 (en: 'bottom left rectangle', DeepL translation) - - "": [t: "rectangle en haut à droite"] # 0xec90 (en: 'top right rectangle', DeepL translation) - - "": [t: "rectangle en bas à droite"] # 0xec91 (en: 'bottom right rectangle', DeepL translation) - - "": [t: "synthetic division corner"] # 0xec92 (DeepL translation) - - "": [t: "division synthétique extension horizontale"] # 0xec93 (en: 'synthetic division horizontal extender', DeepL translation) - - "": [t: "extension verticale de la division synthétique"] # 0xec94 (en: 'synthetic division vertical extender', DeepL translation) - - "": [t: "gauche extension du plancher du plafond"] # 0xec95 (en: 'left ceiling floor extender', DeepL translation) - - "": [t: "prolongateur de plafond droit"] # 0xec96 (en: 'right ceiling floor extender', DeepL translation) - - "": [t: "au-dessus de l'extension de l'équerre"] # 0xec97 (en: 'over bracket extender', DeepL translation) - - "": [t: "prolongateur de la barre verticale"] # 0xec98 (en: 'vertical bar extender', DeepL translation) - - "": [t: "double barre verticale gauche"] # 0xec99 (en: 'left double vertical bar extender', DeepL translation) - - "": [t: "barre horizontale prolongée"] # 0xec9a (en: 'horizontal bar extender', DeepL translation) - - "": [t: "sous l'extension de l'équerre"] # 0xec9c (en: 'under bracket extender', DeepL translation) - - "": [t: "parenthèse pointée vers le bas à droite"] # 0xec9d (en: 'down pointing paren right', DeepL translation) - - "": [t: "prolongateur de parenthèse pointant vers le bas"] # 0xec9e (en: 'down pointing paren extender', DeepL translation) - - "": [t: "vers le bas parenthèse pointant vers la gauche"] # 0xec9f (en: 'down pointing paren left', DeepL translation) - - "": [t: "rallonge d'accolade pointant vers le haut"] # 0xeca0 (en: 'up pointing brace extender', DeepL translation) - - "": [t: "parenthèse pointant vers le haut à gauche"] # 0xeca1 (en: 'up pointing paren left', DeepL translation) - - "": [t: "prolongateur de parenthèse pointant vers le haut"] # 0xeca2 (en: 'up pointing paren extender', DeepL translation) - - "": [t: "parenthèse pointant vers le haut à droite"] # 0xeca3 (en: 'up pointing paren right', DeepL translation) - - "": [t: "prolongateur d'accolade pointant vers le bas"] # 0xeca4 (en: 'down pointing brace extender', DeepL translation) - - "": [t: "constante de planck sur deux barres de pi"] # 0xed00 (en: 'planck constant over two pi bar', DeepL translation) - - "": [t: "miroir g"] # 0xed01 (en: 'mirror g', DeepL translation) - - "": [t: "j sans point"] # 0xed02 (en: 'dotless j', DeepL translation) - - "": [t: "digamma"] # 0xed03 (DeepL translation) - - "ϝ": [t: "digamma"] # 0x3dd - - "": [t: ""] # 0xed10 (en: 'd', DeepL translation) - - "ⅆ": [t: "d ajouré en italique"] # 0x2146 (en: 'd', MathPlayer: 'd ajouré minuscule italique', DeepL: 'ⅆ') - - "": [t: ""] # 0xed11 (en: 'e', DeepL translation) - - "ⅇ": [t: "e ajouré en italique"] # 0x2147 (en: 'e', MathPlayer: 'e ajouré minuscule italique', DeepL: 'ⅇ') - - "": [t: ""] # 0xed12 (en: 'i', DeepL translation) - - "ⅈ": [t: "i ajouré en italique"] # 0x2148 (en: 'i', MathPlayer: 'i ajouré minuscule italique', DeepL: 'ⅈ') - - "": [t: ""] # 0xed13 (en: 'j', DeepL translation) + - "": [T: "inférieur à mais pas approximativement égal à"] # 0xea32 (en: 'less than but not approximately equal to', DeepL translation) + - "": [T: "supérieur à mais pas approximativement égal à"] # 0xea33 (en: 'greater than but not approximately equal to', DeepL translation) + - "": [T: "inférieur ou non égal à"] # 0xea34 (en: 'less than or not equal to', DeepL translation) + - "": [T: "supérieur à ou non égal à"] # 0xea35 (en: 'greater than or not equal to', DeepL translation) + - "": [T: "inférieur à non imbriqué"] # 0xea36 (en: 'not nested less than', DeepL translation) + - "": [T: "supérieur à non imbriqué"] # 0xea37 (en: 'not nested greater than', DeepL translation) + - "": [T: "pas beaucoup inférieur à"] # 0xea38 (en: 'not much less than', DeepL translation) + - "": [T: "pas beaucoup supérieur à"] # 0xea39 (en: 'not much greater than', DeepL translation) + - "": [T: "précède mais n'équivaut pas à"] # 0xea3a (en: 'precedes but not equivalent to', DeepL translation) + - "": [T: "succède mais n'est pas équivalent à"] # 0xea3b (en: 'succeeds but not equivalent to', DeepL translation) + - "": [T: "précède mais n'est pas égal à"] # 0xea3c (en: 'precedes but not equal to', DeepL translation) + - "": [T: "succède mais n'est pas égal à"] # 0xea3d (en: 'succeeds but not equal to', DeepL translation) + - "": [T: "n'est pas égal ou ne précède pas"] # 0xea3e (en: 'does not equal or precede', DeepL translation) + - "": [T: "n'est pas égal ou ne succède pas"] # 0xea3f (en: 'does not equal or succeed', DeepL translation) + - "": [T: "précède mais n'est pas égal à"] # 0xea40 (en: 'precedes but not equal to', DeepL translation) + - "": [T: "succède mais n'est pas égal à"] # 0xea41 (en: 'succeeds but not equal to', DeepL translation) + - "": [T: "ni sous ensemble de ni égal à"] # 0xea42 (en: 'not subset of nor equal to', DeepL translation) + - "": [T: "n'est pas un sur ensemble de ni égal à"] # 0xea43 (en: 'not superset of nor equal to', DeepL translation) + - "": [T: "sous ensemble de ou non égal à"] # 0xea44 (en: 'subset of or not equal to', DeepL translation) + - "": [T: "sur ensemble de ou non égal à"] # 0xea45 (en: 'superset of or not equal to', DeepL translation) + - "": [T: "ni sous ensemble de ni égal à"] # 0xea46 (en: 'not subset of nor equal to', DeepL translation) + - "": [T: "n'est pas un sur ensemble de ni égal à"] # 0xea47 (en: 'not superset of nor equal to', DeepL translation) + - "": [T: "non triple moins que"] # 0xea48 (en: 'not triple less than', DeepL translation) + - "": [T: "pas triple supérieur à"] # 0xea49 (en: 'not triple greater than', DeepL translation) + - "": [T: "ne précède pas égale"] # 0xea4c (en: 'not precedes equals', DeepL translation) + - "": [T: "ne succède pas égale"] # 0xea4d (en: 'not succeeds equals', DeepL translation) + - "": [T: "sous-groupe non normal de avec barre"] # 0xea50 (en: 'not normal subgroup of with bar', DeepL translation) + - "": [T: "ne contient pas de sous-groupe normal avec barre"] # 0xea51 (en: 'does not contain as normal subgroup with bar', DeepL translation) + - "": [T: "pas de différence entre"] # 0xea52 (en: 'not difference between', DeepL translation) + - "": [T: "non géométriquement équivalent à"] # 0xea53 (en: 'not geometrically equivalent to', DeepL translation) + - "": [T: "pas vert similaire"] # 0xea54 (en: 'not vert similar', DeepL translation) + - "": [T: "pas égal ou similaire"] # 0xea55 (en: 'not equal or similar', DeepL translation) + - "": [T: "pas vert approximatif"] # 0xea56 (en: 'not vert approximate', DeepL translation) + - "": [T: "pas approximativement identique à"] # 0xea57 (en: 'not approximately identical to', DeepL translation) + - "": [T: "non égale bossu"] # 0xea58 (en: 'not bumpy equals', DeepL translation) + - "": [T: "non égale simple bossu"] # 0xea59 (en: 'not bumpy single equals', DeepL translation) + - "": [T: "not equal dot"] # 0xea5a (DeepL translation) + - "": [T: "non équivalent inversé"] # 0xea5b (en: 'reverse not equivalent', DeepL translation) + - "": [T: "pas un sous ensemble carré"] # 0xea60 (en: 'not square subset', DeepL translation) + - "": [T: "pas un sur ensemble carré"] # 0xea61 (en: 'not square superset', DeepL translation) + - "": [T: "pas presque égal sur égal"] # 0xea62 (en: 'not almost equal over equal', DeepL translation) + - "": [T: "pas strictement équivalent à"] # 0xea63 (en: 'not strictly equivalent to', DeepL translation) + - "": [T: "point non congru"] # 0xea64 (en: 'not congruent dot', DeepL translation) + - "": [T: "non égal inversé"] # 0xea65 (en: 'reverse not equal', DeepL translation) + - "": [T: "triangle gauche non vert égal"] # 0xea70 (en: 'not vert left triangle equals', DeepL translation) + - "": [T: "triangle droit non vert égal"] # 0xea71 (en: 'not vert right triangle equals', DeepL translation) + - "": [T: "non partiel"] # 0xea80 (en: 'not partial', DeepL translation) + - "": [T: "extension de l'embellissement de la flèche"] # 0xeb00 (en: 'arrow embellishment extender', DeepL translation) + - "": [T: "flèche vers la droite sur flèche vers la gauche"] # 0xeb01 (en: 'arrow rightwards over arrow leftwards', DeepL translation) + - "": [T: "flèche vers la droite sur flèche vers la gauche"] # 0xeb02 (en: 'arrow rightwards over arrow leftwards', DeepL translation) + - "": [T: "harpon à droite sur harpon à gauche"] # 0xeb03 (en: 'harpoon right over harpoon left', DeepL translation) + - "": [T: "harpon à droite sur harpon à gauche"] # 0xeb04 (en: 'harpoon right over harpoon left', DeepL translation) + - "": [T: "double flèche nord-est sud-ouest"] # 0xeb05 (en: 'double arrow northeast southwest', DeepL translation) + - "": [T: "double flèche nord-ouest sud-est"] # 0xeb06 (en: 'double arrow northwest southeast', DeepL translation) + - "": [T: "prolongateur de harpon horizontal"] # 0xeb07 (en: 'horizontal harpoon extender', DeepL translation) + - "": [T: "arc antihoraire flèche vers la gauche"] # 0xeb08 (en: 'anticlockwise arc leftwards arrow', DeepL translation) + - "": [T: "arc antihoraire flèche vers la droite"] # 0xeb09 (en: 'anticlockwise arc rightwards arrow', DeepL translation) + - "": [T: "grande flèche vers la droite"] # 0xeb0b (en: 'large rightwards arrow accent', DeepL translation) + - "": [T: "grande flèche vers la gauche accent"] # 0xeb0c (en: 'large leftwards arrow accent', DeepL translation) + - "": [T: "flèche vers la gauche"] # 0xeb0d (en: 'leftwards arrowhead', DeepL translation) + - "": [T: "flèche vers la droite"] # 0xeb0e (en: 'rightwards arrowhead', DeepL translation) + - "": [T: "grande flèche bilatérale avec trait"] # 0xeb0f (en: 'large left right arrow with stroke', DeepL translation) + - "": [T: "prolongateur horizontal à double flèche"] # 0xeb10 (en: 'horizontal double arrow extender', DeepL translation) + - "": [T: "grande flèche double bilatérale avec trait"] # 0xeb11 (en: 'large left right double arrow with stroke', DeepL translation) + - "": [T: "flèche vers le bas à gauche de la flèche vers le haut"] # 0xeb12 (en: 'downwards arrow leftwards of upwards arrow', DeepL translation) + - "": [T: "flèche vers la gauche avec l'angle vers le bas"] # 0xeb13 (en: 'leftwards arrow with corner downwards', DeepL translation) + - "": [T: "flèche vers la droite avec coin vers le haut"] # 0xeb14 (en: 'rightwards arrow with corner upwards', DeepL translation) + - "": [T: "flèche vers la gauche avec coin vers le haut"] # 0xeb15 (en: 'leftwards arrow with corner upwards', DeepL translation) + - "": [T: "flèche en demi-cercle supérieur antihoraire avec plus"] # 0xeb16 (en: 'anticlockwise top semicircle arrow with plus', DeepL translation) + - "": [T: "flèche en demi-cercle supérieure horaire avec moins"] # 0xeb17 (en: 'clockwise top semicircle arrow with minus', DeepL translation) + - "": [T: "flèche vers la droite avec empennage et trait"] # 0xeb18 (en: 'rightwards arrow with tail with stroke', DeepL translation) + - "": [T: "harpon droit vers le bas"] # 0xeb19 (en: 'right harpoon down', DeepL translation) + - "": [T: "harpon gauche vers le bas"] # 0xeb1a (en: 'left harpoon down', DeepL translation) + - "": [T: "harpon bilatéral vers le bas"] # 0xeb1b (en: 'left right harpoon down', DeepL translation) + - "": [T: "flèche bilatérale vers le haut"] # 0xeb1c (en: 'left right harpoon up', DeepL translation) + - "": [T: "harpon de haut en bas à gauche"] # 0xeb1d (en: 'up down harpoon left', DeepL translation) + - "": [T: "harpon de haut en bas à droite"] # 0xeb1e (en: 'up down harpoon right', DeepL translation) + - "": [T: "flèche vers le haut à droite de la flèche vers le bas"] # 0xeb1f (en: 'upwards arrow to the right of downwards arrow', DeepL translation) + - "": [T: "harpon vers la gauche à barre avec ardillon vers le haut"] # 0xeb20 (en: 'leftwards harpoon to bar with barb upwards', DeepL translation) + - "": [T: "flèche vers la droite jusqu'à la barre avec ardillon vers le haut"] # 0xeb21 (en: 'rightwards harpoon to bar with barb upwards', DeepL translation) + - "": [T: "harpon vers la gauche avec ardillon vers le bas"] # 0xeb22 (en: 'leftwards harpoon to bar with barb downwards', DeepL translation) + - "": [T: "harpon vers la droite sur la barre avec ardillon vers le bas"] # 0xeb23 (en: 'rightwards harpoon to bar with barb downwards', DeepL translation) + - "": [T: "harpon vers la gauche à partir d'une barre avec ardillon vers le haut"] # 0xeb24 (en: 'leftwards harpoon from bar with barb upwards', DeepL translation) + - "": [T: "harpon vers la droite de la barre avec ardillon vers le haut"] # 0xeb25 (en: 'rightwards harpoon from bar with barb upwards', DeepL translation) + - "": [T: "harpon vers la gauche de la barre avec ardillon vers le bas"] # 0xeb26 (en: 'leftwards harpoon from bar with barb downwards', DeepL translation) + - "": [T: "harpon vers la droite de la barre avec ardillon vers le bas"] # 0xeb27 (en: 'rightwards harpoon from bar with barb downwards', DeepL translation) + - "": [T: "harpon vers le haut à la barre avec ardillon vers la gauche"] # 0xeb28 (en: 'upwards harpoon to bar with barb leftwards', DeepL translation) + - "": [T: "harpon vers le bas sur la barre avec ardillon vers la gauche"] # 0xeb29 (en: 'downwards harpoon to bar with barb leftwards', DeepL translation) + - "": [T: "harpon vers le haut à barre avec ardillon vers la droite"] # 0xeb2a (en: 'upwards harpoon to bar with barb rightwards', DeepL translation) + - "": [T: "harpon vers le bas sur la barre avec ardillon vers la droite"] # 0xeb2b (en: 'downwards harpoon to bar with barb rightwards', DeepL translation) + - "": [T: "harpon vers le haut à partir de la barre avec ardillon vers la gauche"] # 0xeb2c (en: 'upwards harpoon from bar with barb leftwards', DeepL translation) + - "": [T: "harpon vers la gauche de la barre avec ardillon"] # 0xeb2d (en: 'downwards harpoon from bar with barb leftwards', DeepL translation) + - "": [T: "harpon vers le haut à partir d'une barre avec ardillon vers la droite"] # 0xeb2e (en: 'upwards harpoon from bar with barb rightwards', DeepL translation) + - "": [T: "harpon vers le bas à partir de la barre avec ardillon vers la droite"] # 0xeb2f (en: 'downwards harpoon from bar with barb rightwards', DeepL translation) + - "": [T: "flèche vers le haut vers la barre"] # 0xeb30 (en: 'upwards arrow to bar', DeepL translation) + - "": [T: "flèche vers le bas jusqu'à la barre"] # 0xeb31 (en: 'downwards arrow to bar', DeepL translation) + - "": [T: "harpon vers le haut à gauche du harpon vers le bas"] # 0xeb32 (en: 'upwards harpoon to the left of downwards harpoon', DeepL translation) + - "": [T: "harpon vers le haut à droite du harpon vers le bas"] # 0xeb33 (en: 'upwards harpoon to the right of downwards harpoon', DeepL translation) + - "": [T: "pointe de flèche vers le haut"] # 0xeb34 (en: 'upwards arrowhead', DeepL translation) + - "": [T: "pointe de flèche vers le bas"] # 0xeb35 (en: 'downwards arrowhead', DeepL translation) + - "": [T: "double harpon avec ardillon à gauche vers le bas ardillon à droite vers le haut"] # 0xeb36 (en: 'double harpoon with leftwards barb down rightwards barb up', DeepL translation) + - "": [T: "double harpon avec ardillon gauche en haut ardillon droit en bas"] # 0xeb37 (en: 'double harpoon with leftwards barb up rightwards barb down', DeepL translation) + - "": [T: "flèche vers la gauche au-dessus de la barre"] # 0xeb38 (en: 'leftwards arrow over bar', DeepL translation) + - "": [T: "flèche vers la droite au-dessus de la barre"] # 0xeb39 (en: 'rightwards arrow over bar', DeepL translation) + - "": [T: "flèche vers la gauche sous la barre"] # 0xeb3a (en: 'leftwards arrow under bar', DeepL translation) + - "": [T: "flèche vers la droite sous la barre"] # 0xeb3b (en: 'rightwards arrow under bar', DeepL translation) + - "": [T: "flèche triple gauche droite"] # 0xeb3c (en: 'left right triple arrow', DeepL translation) + - "": [T: "double flèche nord-est sud-est"] # 0xeb3f (en: 'double arrow northeast southeast', DeepL translation) + - "": [T: "flèche en demi-cercle vers la gauche antihoraire"] # 0xeb40 (en: 'anticlockwise left semicircle arrow', DeepL translation) + - "": [T: "flèche en demi-cercle horaire"] # 0xeb41 (en: 'clockwise left semicircle arrow', DeepL translation) + - "": [T: "cercle ouvert gauche flèche droite gauche"] # 0xeb42 (en: 'left open circle left right arrow', DeepL translation) + - "": [T: "flèche vers la droite au-dessus d'un tilde"] # 0xeb44 (en: 'rightwards arrow over tilde', DeepL translation) + - "": [T: "flèche vers la gauche au-dessus du tilde"] # 0xeb45 (en: 'leftwards arrow over tilde', DeepL translation) + - "": [T: "harpon vers la gauche sur la barre"] # 0xeb48 (en: 'leftwards harpoon over bar', DeepL translation) + - "": [T: "harpon vers la droite sur barre"] # 0xeb49 (en: 'rightwards harpoon over bar', DeepL translation) + - "": [T: "harpon vers la gauche sous la barre"] # 0xeb4a (en: 'leftwards harpoon under bar', DeepL translation) + - "": [T: "harpon vers la droite sous la barre"] # 0xeb4b (en: 'rightwards harpoon under bar', DeepL translation) + - "": [T: "flèche noire vers la gauche"] # 0xeb4c (en: 'squat black leftwards arrow', DeepL translation) + - "": [T: "flèche du demi-cercle droit horaire"] # 0xeb50 (en: 'clockwise right semicircle arrow', DeepL translation) + - "": [T: "flèche de demi-cercle droit antihoraire"] # 0xeb51 (en: 'anticlockwise right semicircle arrow', DeepL translation) + - "": [T: "cercle ouvert gauche harpon gauche droite"] # 0xeb52 (en: 'left open circle left right harpoon', DeepL translation) + - "": [T: "flèche vers le haut à gauche de la barre verticale"] # 0xeb58 (en: 'upwards arrow leftwards of vertical bar', DeepL translation) + - "": [T: "flèche vers le bas à gauche de la barre verticale"] # 0xeb59 (en: 'downwards arrow leftwards of vertical bar', DeepL translation) + - "": [T: "flèche vers le haut à droite de la barre verticale"] # 0xeb5a (en: 'upwards arrow rightwards of vertical bar', DeepL translation) + - "": [T: "flèche vers le bas à droite de la barre verticale"] # 0xeb5b (en: 'downwards arrow rightwards of vertical bar', DeepL translation) + - "": [T: "flèche vers la droite avec crochet allongé vers le bas"] # 0xeb5c (en: 'rightwards arrow with extended downwards hook', DeepL translation) + - "": [T: "flèche vers la gauche avec crochet allongé"] # 0xeb5d (en: 'leftwards arrow with extended hook', DeepL translation) + - "": [T: "flèche vers la gauche avec crochet allongé vers le bas"] # 0xeb5e (en: 'leftwards arrow with extended downwards hook', DeepL translation) + - "": [T: "flèche vers la droite avec crochet allongé"] # 0xeb5f (en: 'rightwards arrow with extended hook', DeepL translation) + - "": [T: "flèche pas droite ondulée"] # 0xeb60 (en: 'not right arrow wavy', DeepL translation) + - "": [T: "flèche pas droite courbée"] # 0xeb61 (en: 'not right arrow curved', DeepL translation) + - "": [T: "harpon vers le haut à gauche de la barre verticale"] # 0xeb68 (en: 'upwards harpoon leftwards of vertical bar', DeepL translation) + - "": [T: "harpon vers le bas à gauche de la barre verticale"] # 0xeb69 (en: 'downwards harpoon leftwards of vertical bar', DeepL translation) + - "": [T: "harpon vers le haut à droite de la barre verticale"] # 0xeb6a (en: 'upwards harpoon rightwards of vertical bar', DeepL translation) + - "": [T: "harpon vers le bas à droite de la barre verticale"] # 0xeb6b (en: 'downwards harpoon rightwards of vertical bar', DeepL translation) + - "": [T: "flèche double verticale"] # 0xeb6c (en: 'vertical double arrow extender', DeepL translation) + - "": [T: "harpon vertical avec ardillon prolongateur gauche"] # 0xeb6d (en: 'vertical harpoon with barb left extender', DeepL translation) + - "": [T: "harpon vertical avec ardillon prolongateur droit"] # 0xeb6e (en: 'vertical harpoon with barb right extender', DeepL translation) + - "": [T: "harpon droit sur harpon gauche droit"] # 0xeb6f (en: 'right harpoon over left harpoon right', DeepL translation) + - "": [T: "harpon droit sur harpon gauche"] # 0xeb70 (en: 'right harpoon over left harpoon left', DeepL translation) + - "": [T: "harpon gauche sur harpon droit sur harpon droit"] # 0xeb71 (en: 'left harpoon over right harpoon right', DeepL translation) + - "": [T: "harpon gauche sur harpon droit gauche"] # 0xeb72 (en: 'left harpoon over right harpoon left', DeepL translation) + - "": [T: "flèche vers la gauche à partir de la tête de flèche de la barre"] # 0xeb73 (en: 'leftwards arrow from bar arrowhead', DeepL translation) + - "": [T: "flèche bilatérale de l'extension de la barre"] # 0xeb74 (en: 'leftwards rightwards arrow from bar extender', DeepL translation) + - "": [T: "flèche vers la gauche à partir de la queue de l'ardillon"] # 0xeb75 (en: 'leftwards arrow from bar tail', DeepL translation) + - "": [T: "flèche vers la droite de l'empennage"] # 0xeb76 (en: 'rightwards arrow from bar tail', DeepL translation) + - "": [T: "flèche vers la droite à partir de la tête de flèche de la barre"] # 0xeb77 (en: 'rightwards arrow from bar arrowhead', DeepL translation) + - "": [T: "harpon vers le haut à partir de la barre avec ardillon vers la gauche"] # 0xeb78 (en: 'upwards harpoon from bar with barb leftwards arrowhead', DeepL translation) + - "": [T: "flèche vers la droite sur flèche vers la gauche"] # 0xeb79 (en: 'rightwards arrow over leftwards arrow right', DeepL translation) + - "": [T: "flèche vers la droite au-dessus de flèche vers la gauche"] # 0xeb7a (en: 'rightwards arrow over leftwards arrow left', DeepL translation) + - "": [T: "flèche vers la gauche au-dessus de flèche vers la droite"] # 0xeb7b (en: 'leftwards arrow over rightwards arrow right', DeepL translation) + - "": [T: "flèche vers la gauche sur flèche vers la droite à gauche"] # 0xeb7c (en: 'leftwards arrow over rightwards arrow left', DeepL translation) + - "": [T: "flèche vers le haut à partir d'une barre de flèche"] # 0xeb7d (en: 'upwards arrow from bar arrowhead', DeepL translation) + - "": [T: "flèche vers le haut à partir de la queue de la barre"] # 0xeb7e (en: 'upwards arrow from bar tail', DeepL translation) + - "": [T: "flèche vers le bas de la queue de la barre"] # 0xeb7f (en: 'downwards arrow from bar tail', DeepL translation) + - "": [T: "flèche vers le bas à partir de la tête de flèche de la barre"] # 0xeb80 (en: 'downwards arrow from bar arrowhead', DeepL translation) + - "": [T: "harpon vers le bas de la barre avec ardillon vers la droite pointe de flèche"] # 0xeb81 (en: 'downwards harpoon from bar with barb rightwards arrowhead', DeepL translation) + - "": [T: "harpon vers le haut à gauche du harpon vers le bas"] # 0xeb82 (en: 'upwards harpoon to the left of downwards harpoon bottom', DeepL translation) + - "": [T: "harpon vers le haut à gauche de l'extension du harpon vers le bas"] # 0xeb83 (en: 'upwards harpoon to the left of downwards harpoon extender', DeepL translation) + - "": [T: "harpon vers le bas à gauche du harpon vers le haut en haut"] # 0xeb84 (en: 'downwards harpoon to the left of upwards harpoon top', DeepL translation) + - "": [T: "harpon vers le haut à gauche du harpon vers le bas en haut"] # 0xeb85 (en: 'upwards harpoon to the left of downwards harpoon top', DeepL translation) + - "": [T: "harpon vers le bas à gauche de la rallonge du harpon vers le haut"] # 0xeb86 (en: 'downwards harpoon to the left of the upwards harpoon extender', DeepL translation) + - "": [T: "harpon vers le bas à gauche du harpon vers le haut en bas"] # 0xeb87 (en: 'downwards harpoon to the left of the upwards harpoon bottom', DeepL translation) + - "": [T: "flèche vers le haut à gauche de la flèche vers le bas"] # 0xeb88 (en: 'upwards arrow leftwards of downwards arrow bottom', DeepL translation) + - "": [T: "flèche vers le bas à gauche de la flèche vers le haut en haut"] # 0xeb89 (en: 'downwards arrow leftwards of upwards arrow top', DeepL translation) + - "": [T: "flèche vers le haut à gauche de la flèche vers le bas en haut"] # 0xeb8a (en: 'upwards arrow leftwards of downwards arrow top', DeepL translation) + - "": [T: "flèche vers le bas à gauche de la flèche vers le haut en bas"] # 0xeb8b (en: 'downwards arrow leftwards of upwards arrow bottom', DeepL translation) + - "": [T: "flèche vers la gauche flèche vers la droite prolongateur"] # 0xeb8c (en: 'leftwards rightwards arrows extender', DeepL translation) + - "": [T: "extension de la flèche nord-est"] # 0xeb8d (en: 'north east arrow extender', DeepL translation) + - "": [T: "extension de la flèche nord-ouest"] # 0xeb8e (en: 'north west arrow extender', DeepL translation) + - "": [T: "accolade pointant vers le bas à gauche"] # 0xec00 (en: 'down pointing brace left', DeepL translation) + - "": [T: "accolade pointant vers le bas au milieu"] # 0xec01 (en: 'down pointing brace mid', DeepL translation) + - "": [T: "accolade pointant vers le bas à droite"] # 0xec02 (en: 'down pointing brace right', DeepL translation) + - "": [T: "prolongation de l'accolade horizontale"] # 0xec03 (en: 'horizontal brace extender', DeepL translation) + - "": [T: "flèche pointant vers le haut à gauche"] # 0xec04 (en: 'up pointing brace left', DeepL translation) + - "": [T: "accolade pointant vers le haut au milieu"] # 0xec05 (en: 'up pointing brace mid', DeepL translation) + - "": [T: "accolade pointant vers le haut à droite"] # 0xec06 (en: 'up-pointing brace right', DeepL translation) + - "": [T: "barre verticale gauche"] # 0xec07 (en: 'left vertical bar', DeepL translation) + - "": [T: "barre verticale droite"] # 0xec08 (en: 'right vertical bar', DeepL translation) + - "": [T: "double barre verticale gauche"] # 0xec09 (en: 'left double vertical bar', DeepL translation) + - "": [T: "double barre verticale droite"] # 0xec0a (en: 'right double vertical bar', DeepL translation) + - "": [T: "rallonge d'équerre horizontale"] # 0xec0b (en: 'horizontal bracket extender', DeepL translation) + - "": [T: "sous crochet"] # 0xec0c (en: 'under square bracket', DeepL translation) + - "⎵": [T: "crochet vertical inférieur"] # 0x23b5 (en: 'under square bracket') + - "": [T: "sur parenthèse carrée"] # 0xec0d (en: 'over square bracket', DeepL translation) + - "⎴": [T: "crochet vertical supérieur"] # 0x23b4 (en: 'over square bracket') + - "": [T: "sous crochet à gauche"] # 0xec0e (en: 'under bracket left', DeepL translation) + - "": [T: "sous crochet à droite"] # 0xec0f (en: 'under bracket right', DeepL translation) + - "": [T: "sur crochet à gauche"] # 0xec10 (en: 'over bracket left', DeepL translation) + - "": [T: "sur crochet à droite"] # 0xec11 (en: 'over bracket right', DeepL translation) + - "": [T: "parenthèse gauche 1"] # 0xec12 (en: 'left parens 1', DeepL translation) + - "": [T: "parenthèse gauche 2"] # 0xec13 (en: 'left parens 2', DeepL translation) + - "": [T: "parenthèse gauche 3"] # 0xec14 (en: 'left parens 3', DeepL translation) + - "": [T: "parenthèse gauche 4"] # 0xec15 (en: 'left parens 4', DeepL translation) + - "": [T: "parenthèse droite 1"] # 0xec16 (en: 'right parens 1', DeepL translation) + - "": [T: "parenthèse droite 2"] # 0xec17 (en: 'right parens 2', DeepL translation) + - "": [T: "parenthèse droite 3"] # 0xec18 (en: 'right parens 3', DeepL translation) + - "": [T: "parenthèse droite 4"] # 0xec19 (en: 'right parens 4', DeepL translation) + - "": [T: "radical 1"] # 0xec1a (DeepL translation) + - "": [T: "radical 2"] # 0xec1b (DeepL translation) + - "": [T: "radical 3"] # 0xec1c (DeepL translation) + - "": [T: "radical 4"] # 0xec1d (DeepL translation) + - "": [T: "radical 5"] # 0xec1e (DeepL translation) + - "": [T: "radical inférieur"] # 0xec1f (en: 'radical bottom', DeepL translation) + - "": [T: "radical vertical extender"] # 0xec20 (DeepL translation) + - "": [T: "radical haut"] # 0xec21 (en: 'radical top', DeepL translation) + - "": [T: "crochet blanc haut gauche"] # 0xec22 (en: 'left white bracket top', DeepL translation) + - "": [T: "prolongateur de crochet blanc gauche"] # 0xec23 (en: 'left white bracket extender', DeepL translation) + - "": [T: "crochet blanc gauche en bas"] # 0xec24 (en: 'left white bracket bottom', DeepL translation) + - "": [T: "crochet blanc droit en haut"] # 0xec25 (en: 'right white bracket top', DeepL translation) + - "": [T: "prolongateur de crochet blanc droit"] # 0xec26 (en: 'right white bracket extender', DeepL translation) + - "": [T: "crochet blanc droit en bas"] # 0xec27 (en: 'right white bracket bottom', DeepL translation) + - "": [T: "accolade blanche gauche"] # 0xec30 (en: 'left white curly bracket', DeepL translation) + - "": [T: "accolade blanche droite"] # 0xec31 (en: 'right white curly bracket', DeepL translation) + - "": [T: "signe de division longue"] # 0xec32 (en: 'long division sign', DeepL translation) + - "": [T: "extension du signe de division longue"] # 0xec33 (en: 'long division sign extender', DeepL translation) + - "": [T: "division courte"] # 0xec34 (en: 'short division', DeepL translation) + - "": [T: "liaison cadratin double sud-ouest à nord-est"] # 0xec40 (en: 'double southwest to northeast em bond', DeepL translation) + - "": [T: "liaison cadratin double nord-ouest à sud-est"] # 0xec41 (en: 'double northwest to southeast em bond', DeepL translation) + - "": [T: "liaison cadratin simple horizontale"] # 0xec42 (en: 'single horizontal em bond', DeepL translation) + - "": [T: "liaison cadratin double horizontale"] # 0xec43 (en: 'double horizontal em bond', DeepL translation) + - "": [T: "liaison cadratin triple horizontale"] # 0xec44 (en: 'triple horizontal em bond', DeepL translation) + - "": [T: "liaison cadratin simple verticale"] # 0xec45 (en: 'single vertical em bond', DeepL translation) + - "": [T: "liaison cadratin double verticale"] # 0xec46 (en: 'double vertical em bond', DeepL translation) + - "": [T: "liaison cadratin triple verticale"] # 0xec47 (en: 'triple vertical em bond', DeepL translation) + - "": [T: "inférieur à liaison cadratin"] # 0xec48 (en: 'less than em bond', DeepL translation) + - "": [T: "supérieur à liaison cadratin"] # 0xec49 (en: 'greater than em bond', DeepL translation) + - "": [T: "liaison demi-cadratin simple horizontale"] # 0xec4a (en: 'single horizontal en bond', DeepL translation) + - "": [T: "liaison demi-cadratin double horizontale"] # 0xec4b (en: 'double horizontal en bond', DeepL translation) + - "": [T: "liaison demi-cadratin triple horizontale"] # 0xec4c (en: 'triple horizontal en bond', DeepL translation) + - "": [T: "rectangle supérieur gauche"] # 0xec80 (en: 'top left rectangle', DeepL translation) + - "": [T: "rectangle inférieur gauche"] # 0xec81 (en: 'bottom left rectangle', DeepL translation) + - "": [T: "rectangle supérieur droite"] # 0xec90 (en: 'top right rectangle', DeepL translation) + - "": [T: "rectangle inférieur droite"] # 0xec91 (en: 'bottom right rectangle', DeepL translation) + - "": [T: "synthetic division corner"] # 0xec92 (DeepL translation) + - "": [T: "prolongateur de division synthétique horizontale"] # 0xec93 (en: 'synthetic division horizontal extender', DeepL translation) + - "": [T: "prolongateur de division synthétique verticale"] # 0xec94 (en: 'synthetic division vertical extender', DeepL translation) + - "": [T: "gauche extension du plancher du plafond"] # 0xec95 (en: 'left ceiling floor extender', DeepL translation) + - "": [T: "prolongateur de plafond droit"] # 0xec96 (en: 'right ceiling floor extender', DeepL translation) + - "": [T: "prolongateur de crochet supérieur"] # 0xec97 (en: 'over bracket extender', DeepL translation) + - "": [T: "prolongateur de la barre verticale"] # 0xec98 (en: 'vertical bar extender', DeepL translation) + - "": [T: "double barre verticale gauche"] # 0xec99 (en: 'left double vertical bar extender', DeepL translation) + - "": [T: "prolongateur de barre horizontale"] # 0xec9a (en: 'horizontal bar extender', DeepL translation) + - "": [T: "prolongateur de crochet inférieur"] # 0xec9c (en: 'under bracket extender', DeepL translation) + - "": [T: "parenthèse pointant vers le bas à droite"] # 0xec9d (en: 'down pointing paren right', DeepL translation) + - "": [T: "prolongateur de parenthèse pointant vers le bas"] # 0xec9e (en: 'down pointing paren extender', DeepL translation) + - "": [T: "parenthèse pointant vers le bas à gauche"] # 0xec9f (en: 'down pointing paren left', DeepL translation) + - "": [T: "prolongateur d'accolade pointant vers le haut"] # 0xeca0 (en: 'up pointing brace extender', DeepL translation) + - "": [T: "parenthèse pointant vers le haut à gauche"] # 0xeca1 (en: 'up pointing paren left', DeepL translation) + - "": [T: "prolongateur de parenthèse pointant vers le haut"] # 0xeca2 (en: 'up pointing paren extender', DeepL translation) + - "": [T: "parenthèse pointant vers le haut à droite"] # 0xeca3 (en: 'up pointing paren right', DeepL translation) + - "": [T: "prolongateur d'accolade pointant vers le bas"] # 0xeca4 (en: 'down pointing brace extender', DeepL translation) + - "": [T: "constante de planck sur deux barres de pi"] # 0xed00 (en: 'planck constant over two pi bar', DeepL translation) + - "": [T: "g miroir"] # 0xed01 (en: 'mirror g', DeepL translation) + - "": [T: "j sans point"] # 0xed02 (en: 'dotless j', DeepL translation) + - "": [T: "digamma"] # 0xed03 (DeepL translation) + - "ϝ": [T: "digamma"] # 0x3dd + - "": [T: ""] # 0xed10 (en: 'd', DeepL translation) + - "ⅆ": [T: "d ajouré en italique"] # 0x2146 (en: 'd', MathPlayer: 'd ajouré minuscule italique', DeepL: 'ⅆ') + - "": [T: ""] # 0xed11 (en: 'e', DeepL translation) + - "ⅇ": [T: "e ajouré en italique"] # 0x2147 (en: 'e', MathPlayer: 'e ajouré minuscule italique', DeepL: 'ⅇ') + - "": [T: ""] # 0xed12 (en: 'i', DeepL translation) + - "ⅈ": [T: "i ajouré en italique"] # 0x2148 (en: 'i', MathPlayer: 'i ajouré minuscule italique', DeepL: 'ⅈ') + - "": [T: ""] # 0xed13 (en: 'j', DeepL translation) - "ⅅ": - - spell: "translate('.', 'ⅅ', 'DD')" # 0xed16, 0x2145 + - SPELL: "translate('.', 'ⅅ', 'DD')" # 0xed16, 0x2145 # The private use chars are from MathType - - "": [t: "boucle intégrale du contour dans le sens inverse des aiguilles d'une montre"] # 0xee00 (en: 'anticlockwise contour integral loop', DeepL translation) - - "": [t: "boucle intégrale dans le sens des aiguilles d'une montre"] # 0xee01 (en: 'clockwise contour integral loop', DeepL translation) - - "": [t: ""] # 0xee04 - - "": [t: ""] # 0xee05 - - "": [t: ""] # 0xee06 - - "": [t: ""] # 0xee07 - - "": [t: ""] # 0xee08 - - "": [t: ""] # 0xee09 - - "": [t: ""] # 0xee0a - - "": [t: ""] # 0xee0b - - "": [t: ""] # 0xee0c - - "": [t: "embellissement de l'état des joints"] # 0xee0d (en: 'joint status embellishment', DeepL translation) - - "": [t: "joint status embellishment left"] # 0xee0e (DeepL translation) - - "": [t: "état de l'articulation embellissement droit"] # 0xee0f (en: 'joint status embellishment right', DeepL translation) - - "": [t: "extension de l'embellissement de l'état conjoint"] # 0xee10 (en: 'joint status embellishment extender', DeepL translation) - - "": [t: "boucle intégrale"] # 0xee11 (en: 'integral loop', DeepL translation) - - "": [t: "boucle intégrale double"] # 0xee12 (en: 'integral loop double', DeepL translation) - - "": [t: "boucle intégrale triple"] # 0xee13 (en: 'integral loop triple', DeepL translation) - - "": [t: "expansion boucle intégrale double"] # 0xee15 (en: 'expanding integral loop double', DeepL translation) - - "": [t: "triple boucle intégrale en expansion"] # 0xee16 (en: 'expanding integral loop triple', DeepL translation) - - "": [t: "asymptotiquement égal à l'accent"] # 0xee17 (en: 'asymptotically equal to accent', DeepL translation) - - "": [t: "accent du signe égal"] # 0xee18 (en: 'equal sign accent', DeepL translation) - - "": [t: "quadruple prime"] # 0xee19 (DeepL translation) - - "": [t: "accent bar avec cercle ouvert à gauche"] # 0xee1a (en: 'bar accent with open circle left', DeepL translation) - - "": [t: "barre accentuée avec cercle fermé à gauche"] # 0xee1b (en: 'bar accent with closed circle left', DeepL translation) - - "": [t: "barre d'accent avec cercle ouvert à droite"] # 0xee1c (en: 'bar accent with open circle right', DeepL translation) - - "": [t: "barre d'accentuation avec point de suspension"] # 0xee1d (en: 'bar accent with over dot', DeepL translation) - - "": [t: "barre d'accent avec point en dessous"] # 0xee1e (en: 'bar accent with under dot', DeepL translation) - - "": [t: "accent barré avec point double"] # 0xee1f (en: 'bar accent with double over dot', DeepL translation) - - "": [t: "accent barré avec double point inférieur"] # 0xee20 (en: 'bar accent with double under dot', DeepL translation) - - "": [t: "barre d'accentuation avec caret"] # 0xee21 (en: 'bar accent with caret', DeepL translation) - - "": [t: "accent épais sous la barre"] # 0xee22 (en: 'thick under bar accent', DeepL translation) - - "": [t: "accent barré avec cercle fermé à droite"] # 0xee23 (en: 'bar accent with closed circle right', DeepL translation) - - "": [t: "gros point au-dessus"] # 0xee24 (en: 'large dot above', DeepL translation) - - "": [t: "marque d'alignement"] # 0xef00 (en: 'alignment mark', DeepL translation) - - "": [t: ""] # 0xef01 - - "​": [t: ""] # 0x200b - - "": [t: ""] # 0xef02 - - " ": [t: ""] # 0x2009 - - "": [t: ""] # 0xef03 - - " ": [t: ""] # 0x205f - - "": [t: ""] # 0xef04 - - "": [t: ""] # 0xef05 - - "": [t: ""] # 0xef06 - - "": [t: ""] # 0xef07 - - "": [t: ""] # 0xef08 - - "": [t: ""] # 0xef09 - - "": [t: ""] # 0xef0a - - " ": [t: ""] # 0x200a - - "": [t: ""] # 0xef22 - - "": [t: ""] # 0xef23 - - "": [t: ""] # 0xef24 - - "": [t: ""] # 0xef29 - - "": [t: "terme manquant"] # 0xef41 (en: 'missing term', DeepL translation) - - "": [t: "flèche à gauche de l'intégrale du contour dans le sens des aiguilles d'une montre"] # 0xef80 (en: 'clockwise contour integral arrow on left', DeepL translation) - - "": [t: "intégrale avec carré"] # 0xef81 (en: 'integral with square', DeepL translation) - - "": [t: "intégrale avec barre oblique"] # 0xef82 (en: 'integral with slash', DeepL translation) - - "": [t: "intégrale inversée"] # 0xef83 (en: 'reversed integral', DeepL translation) - - "": [t: "double zéro sur double zéro"] # 0xef90 (en: 'double zero over double zero', DeepL translation) - - "": [t: "zéro avec barre oblique"] # 0xef91 (en: 'zero with slash', DeepL translation) + - "": [T: "boucle intégrale du contour antihoraire"] # 0xee00 (en: 'anticlockwise contour integral loop', DeepL translation) + - "": [T: "boucle intégrale du contour horaire"] # 0xee01 (en: 'clockwise contour integral loop', DeepL translation) + - "": [T: ""] # 0xee04 + - "": [T: ""] # 0xee05 + - "": [T: ""] # 0xee06 + - "": [T: ""] # 0xee07 + - "": [T: ""] # 0xee08 + - "": [T: ""] # 0xee09 + - "": [T: ""] # 0xee0a + - "": [T: ""] # 0xee0b + - "": [T: ""] # 0xee0c + - "": [T: "embellissement de l'état des joints"] # 0xee0d (en: 'joint status embellishment', DeepL translation) + - "": [T: "joint status embellishment left"] # 0xee0e (DeepL translation) + - "": [T: "état de l'articulation embellissement droit"] # 0xee0f (en: 'joint status embellishment right', DeepL translation) + - "": [T: "prolongateur de l'embellissement de l'état conjoint"] # 0xee10 (en: 'joint status embellishment extender', DeepL translation) + - "": [T: "boucle intégrale"] # 0xee11 (en: 'integral loop', DeepL translation) + - "": [T: "boucle intégrale double"] # 0xee12 (en: 'integral loop double', DeepL translation) + - "": [T: "boucle intégrale triple"] # 0xee13 (en: 'integral loop triple', DeepL translation) + - "": [T: "boucle intégrale double en expansion"] # 0xee15 (en: 'expanding integral loop double', DeepL translation) + - "": [T: "boucle intégrale triple en expansion"] # 0xee16 (en: 'expanding integral loop triple', DeepL translation) + - "": [T: "asymptotiquement égal à l'accent"] # 0xee17 (en: 'asymptotically equal to accent', DeepL translation) + - "": [T: "signe égal accent"] # 0xee18 (en: 'equal sign accent', DeepL translation) + - "": [T: "quadruple prime"] # 0xee19 (DeepL translation) + - "": [T: "barre accentuée avec cercle ouvert à gauche"] # 0xee1a (en: 'bar accent with open circle left', DeepL translation) + - "": [T: "barre accentuée avec cercle fermé à gauche"] # 0xee1b (en: 'bar accent with closed circle left', DeepL translation) + - "": [T: "barre accentuée avec cercle ouvert à droite"] # 0xee1c (en: 'bar accent with open circle right', DeepL translation) + - "": [T: "barre accentuée avec point de suspension"] # 0xee1d (en: 'bar accent with over dot', DeepL translation) + - "": [T: "barre accentuée avec point en dessous"] # 0xee1e (en: 'bar accent with under dot', DeepL translation) + - "": [T: "barre accentuée avec point double"] # 0xee1f (en: 'bar accent with double over dot', DeepL translation) + - "": [T: "barre accentuée avec double point inférieur"] # 0xee20 (en: 'bar accent with double under dot', DeepL translation) + - "": [T: "barre accentuée avec caret"] # 0xee21 (en: 'bar accent with caret', DeepL translation) + - "": [T: "accent épais sous la barre"] # 0xee22 (en: 'thick under bar accent', DeepL translation) + - "": [T: "barre accentuée avec cercle fermé à droite"] # 0xee23 (en: 'bar accent with closed circle right', DeepL translation) + - "": [T: "gros point au-dessus"] # 0xee24 (en: 'large dot above', DeepL translation) + - "": [T: "marque d'alignement"] # 0xef00 (en: 'alignment mark', DeepL translation) + - "": [T: ""] # 0xef01 + - "​": [T: ""] # 0x200b + - "": [T: ""] # 0xef02 + - " ": [T: ""] # 0x2009 + - "": [T: ""] # 0xef03 + - " ": [T: ""] # 0x205f + - "": [T: ""] # 0xef04 + - "": [T: ""] # 0xef05 + - "": [T: ""] # 0xef06 + - "": [T: ""] # 0xef07 + - "": [T: ""] # 0xef08 + - "": [T: ""] # 0xef09 + - "": [T: ""] # 0xef0a + - " ": [T: ""] # 0x200a + - "": [T: ""] # 0xef22 + - "": [T: ""] # 0xef23 + - "": [T: ""] # 0xef24 + - "": [T: ""] # 0xef29 + - "": [T: "terme manquant"] # 0xef41 (en: 'missing term', DeepL translation) + - "": [T: "flèche à gauche de l'intégrale du contour horaire"] # 0xef80 (en: 'clockwise contour integral arrow on left', DeepL translation) + - "": [T: "intégrale avec carré"] # 0xef81 (en: 'integral with square', DeepL translation) + - "": [T: "intégrale avec barre oblique"] # 0xef82 (en: 'integral with slash', DeepL translation) + - "": [T: "intégrale inversée"] # 0xef83 (en: 'reversed integral', DeepL translation) + - "": [T: "double zéro sur double zéro"] # 0xef90 (en: 'double zero over double zero', DeepL translation) + - "": [T: "zéro avec barre oblique"] # 0xef91 (en: 'zero with slash', DeepL translation) # fraktur chars in math alphabetic block and also MathType private use area # Some of these are reserved because they were used in Plane 0 -- that shouldn't be an issue other than causing the other chars to not display - "𝔄-𝔜": # 0x1d504 - 0x1d51d ('z' version is reserved) - - spell: "translate('.', '𝔄𝔅𝔆𝔇𝔈𝔉𝔊𝔋𝔌𝔍𝔎𝔏𝔐𝔑𝔒𝔓𝔔𝔕𝔖𝔗𝔘𝔙𝔚𝔛𝔜', 'ABCDEFGHIJKLMNOPQRSTUVWXY')" + - SPELL: "translate('.', '𝔄𝔅𝔆𝔇𝔈𝔉𝔊𝔋𝔌𝔍𝔎𝔏𝔐𝔑𝔒𝔓𝔔𝔕𝔖𝔗𝔘𝔙𝔚𝔛𝔜', 'ABCDEFGHIJKLMNOPQRSTUVWXY')" - T: "gothique" # (DeepL translation) - "-": # 0xf000 - 0xf018 - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXY')" + - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXY')" - T: "gothique" # (DeepL translation) - "𝔞-𝔷": # 0x1d51e - 0x1d537 - - spell: "translate('.', '𝔞𝔟𝔠𝔡𝔢𝔣𝔤𝔥𝔦𝔧𝔨𝔩𝔪𝔫𝔬𝔭𝔮𝔯𝔰𝔱𝔲𝔳𝔴𝔵𝔶𝔷', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '𝔞𝔟𝔠𝔡𝔢𝔣𝔤𝔥𝔦𝔧𝔨𝔩𝔪𝔫𝔬𝔭𝔮𝔯𝔰𝔱𝔲𝔳𝔴𝔵𝔶𝔷', 'abcdefghijklmnopqrstuvwxyz')" - T: "gothique" # (DeepL translation) - "-": # 0xf01a - 0xf033 - - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - T: "gothique" # (DeepL translation) - "𝕬-𝖅": # 0x1D56C - 0x1D585 @@ -3152,106 +3152,106 @@ - T: "gothique" # (DeepL translation) - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf040 - 0xf059 - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - T: "gothique" # (DeepL translation) - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝖆-𝖟": # 0x1d586 - 0x1d59f - SPELL: "translate('.', '𝖆𝖇𝖈𝖉𝖊𝖋𝖌𝖍𝖎𝖏𝖐𝖑𝖒𝖓𝖔𝖕𝖖𝖗𝖘𝖙𝖚𝖛𝖜𝖝𝖞𝖟', 'abcdefghijklmnopqrstuvwxyz')" - T: "gothique" # (DeepL translation) - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf05a - 0xf073 - SPELL: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - T: "gothique" # (DeepL translation) - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) # 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) - - spell: "translate('.', '𝔸𝔹𝔺𝔻𝔼𝔽𝔾𝔿𝕀𝕁𝕂𝕃𝕄𝕅𝕆𝕇𝕈𝕉𝕊𝕋𝕌𝕍𝕎𝕏𝕐', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '𝔸𝔹𝔺𝔻𝔼𝔽𝔾𝔿𝕀𝕁𝕂𝕃𝕄𝕅𝕆𝕇𝕈𝕉𝕊𝕋𝕌𝕍𝕎𝕏𝕐', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - T: "double barre" # (en: 'double struck', DeepL translation) - "-": # 0xf080 - 0xf098 - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - T: "double barre" # (en: 'double struck', DeepL translation) - "𝕒-𝕫": # 0x1d552 - 0x1d56b - - spell: "translate('.', '𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫', 'abcdefghijklmnopqrstuvwxyz')" - T: "double barre" # (en: 'double struck', DeepL translation) - "-": # 0xf09a - 0xf0b3 - - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - T: "double barre" # (en: 'double struck', DeepL translation) - "𝟘-𝟡": # 0x1d7d8 - 0x1d7e1 - - spell: "translate('.', '𝟘𝟙𝟚𝟛𝟜𝟝𝟞𝟟𝟠𝟡', '0123456789')" + - SPELL: "translate('.', '𝟘𝟙𝟚𝟛𝟜𝟝𝟞𝟟𝟠𝟡', '0123456789')" - T: "double barre" # (en: 'double struck', DeepL translation) - "-": # 0xf0c0 - 0xf0c9 - - spell: "translate('.', '', '0123456789')" + - SPELL: "translate('.', '', '0123456789')" - T: "double barre" # (en: 'double struck', DeepL translation) - "": [T: "double barre nahblah"] # 0xf0ca (en: 'double struck nahblah', DeepL translation) - - "": [t: "constante d'euler doublement frappée"] # 0xf0cb (en: 'double struck euler constant', DeepL translation) + - "": [T: "constante d'euler doublement frappée"] # 0xf0cb (en: 'double struck euler constant', DeepL translation) # script chars in math alphabetic block and also MathType private use area - "𝒜-𝒵": # 0x1d49c - 0x1d4b5 - - spell: "translate('.', '𝒜𝒝𝒞𝒟𝒠𝒡𝒢𝒣𝒤𝒥𝒦𝒧𝒨𝒩𝒪𝒫𝒬𝒭𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - t: "script" # (DeepL translation) + - SPELL: "translate('.', '𝒜𝒝𝒞𝒟𝒠𝒡𝒢𝒣𝒤𝒥𝒦𝒧𝒨𝒩𝒪𝒫𝒬𝒭𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - T: "script" # (DeepL translation) - "-": # 0xf100 - 0xf119 - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - t: "script" # (DeepL translation) + - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - T: "script" # (DeepL translation) - "𝒶-𝓏": # 0x1d4b6 - 0x1d4cf - - spell: "translate('.', '𝒶𝒷𝒸𝒹𝒺𝒻𝒼𝒽𝒾𝒿𝓀𝓁𝓂𝓃𝓄𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏', 'abcdefghijklmnopqrstuvwxyz')" - - t: "script" # (DeepL translation) + - SPELL: "translate('.', '𝒶𝒷𝒸𝒹𝒺𝒻𝒼𝒽𝒾𝒿𝓀𝓁𝓂𝓃𝓄𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏', 'abcdefghijklmnopqrstuvwxyz')" + - T: "script" # (DeepL translation) - "-": # 0xf11a - 0xf133 - - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - T: "script" # (DeepL translation) # bold script chars in math alphabetic block and also MathType private use area - "𝓐-𝓩": # 0x1d4d0 - 0x1d4e9 - SPELL: "translate('.', '𝓐𝓑𝓒𝓓𝓔𝓕𝓖𝓗𝓘𝓙𝓚𝓛𝓜𝓝𝓞𝓟𝓠𝓡𝓢𝓣𝓤𝓥𝓦𝓧𝓨𝓩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - t: "script" # (DeepL translation) + - T: "script" # (DeepL translation) - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf140 - 0xf159 - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - t: "script" # (DeepL translation) + - T: "script" # (DeepL translation) - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝓪-𝔃": # 0x1d4ea - 0x1d503 - SPELL: "translate('.', '𝓪𝓫𝓬𝓭𝓮𝓯𝓰𝓱𝓲𝓳𝓴𝓵𝓶𝓷𝓸𝓹𝓺𝓻𝓼𝓽𝓾𝓿𝔀𝔁𝔂𝔃', 'abcdefghijklmnopqrstuvwxyz')" - - t: "script" # (DeepL translation) + - T: "script" # (DeepL translation) - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf15a - 0xf173 - SPELL: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - t: "script" # (DeepL translation) + - T: "script" # (DeepL translation) - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf180 - 0xf199 - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "": # 0xf19a - test: @@ -3269,7 +3269,7 @@ if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "majuscule"] # (en: 'cap', DeepL translation) + then: [T: "majuscule"] # (en: 'cap', DeepL translation) else: [x: "$SpeechOverrides_CapitalLetters"] - "": # 0xf19b - test: @@ -3287,7 +3287,7 @@ if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "majuscule"] # (en: 'cap', DeepL translation) + then: [T: "majuscule"] # (en: 'cap', DeepL translation) else: [x: "$SpeechOverrides_CapitalLetters"] - "": # 0xf19c - test: @@ -3305,427 +3305,427 @@ if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "majuscule"] # (en: 'cap', DeepL translation) + then: [T: "majuscule"] # (en: 'cap', DeepL translation) else: [x: "$SpeechOverrides_CapitalLetters"] # MathType only has a few of the cap Greek letters in PUA - "": # 0xf201 - 0xf209 - - spell: "translate('.', '', 'ΔΨΛΠΣΘΓΩΥ')" + - SPELL: "translate('.', '', 'ΔΨΛΠΣΘΓΩΥ')" - T: "double barre" # (en: 'double struck', DeepL translation) - "-": # 0xf220 - 0xf236 - - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + - SPELL: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - T: "double barre" # (en: 'double struck', DeepL translation) - "": [T: "double barre final sigma"] # 0xf237 (en: 'double struck final sigma', DeepL translation) - - "": [t: "double rho frappé"] # 0xf250 (en: 'double struck rho', DeepL translation) - - "": [t: "phi doublement frappé"] # 0xf251 (en: 'double struck phi', DeepL translation) + - "": [T: "double rho frappé"] # 0xf250 (en: 'double struck rho', DeepL translation) + - "": [T: "phi doublement frappé"] # 0xf251 (en: 'double struck phi', DeepL translation) - "𝐀-𝐙": # 0x1d400 - 0x1d419 - SPELL: "translate('.', '𝐀𝐁𝐂𝐃𝐄𝐅𝐆𝐇𝐈𝐉𝐊𝐋𝐌𝐍𝐎𝐏𝐐𝐑𝐒𝐓𝐔𝐕𝐖𝐗𝐘𝐙', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf260 - 0xf279 - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝐚-𝐳": # 0x1d41a - 0x1d433 - SPELL: "translate('.', '𝐚𝐛𝐜𝐝𝐞𝐟𝐠𝐡𝐢𝐣𝐤𝐥𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐭𝐮𝐯𝐰𝐱𝐲𝐳', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf27a - 0xf293 - SPELL: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝐴-𝑍": # 0x1d434 - 0x1d44d - - spell: "translate('.', '𝐴𝐵𝐶𝐷𝐸𝐹𝐺𝐻𝐼𝐽𝐾𝐿𝑀𝑁𝑂𝑃𝑄𝑅𝑆𝑇𝑈𝑉𝑊𝑋𝑌𝑍', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '𝐴𝐵𝐶𝐷𝐸𝐹𝐺𝐻𝐼𝐽𝐾𝐿𝑀𝑁𝑂𝑃𝑄𝑅𝑆𝑇𝑈𝑉𝑊𝑋𝑌𝑍', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "-": # 0xf294 - 0xf2ad - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "𝑎-𝑧": # 0x1d44e - 0x1d467 - - spell: "translate('.', '𝑎𝑏𝑐𝑑𝑒𝑓𝑔𝑕𝑖𝑗𝑘𝑙𝑚𝑛𝑜𝑝𝑞𝑟𝑠𝑡𝑢𝑣𝑤𝑥𝑦𝑧', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '𝑎𝑏𝑐𝑑𝑒𝑓𝑔𝑕𝑖𝑗𝑘𝑙𝑚𝑛𝑜𝑝𝑞𝑟𝑠𝑡𝑢𝑣𝑤𝑥𝑦𝑧', 'abcdefghijklmnopqrstuvwxyz')" - "-": # 0xf2ae - 0xf2c7 - - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - "𝑨-𝒁": # 0x1d468 - 0x1d481 - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '𝑨𝑩𝑪𝑫𝑬𝑭𝑮𝑯𝑰𝑱𝑲𝑳𝑴𝑵𝑶𝑷𝑸𝑹𝑺𝑻𝑼𝑽𝑾𝑿𝒀𝒁', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf2c8 - 0xf2e1 - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝒂-𝒛": # 0x1d482 - 0x1d49b - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '𝒂𝒃𝒄𝒅𝒆𝒇𝒈𝒉𝒊𝒋𝒌𝒍𝒎𝒏𝒐𝒑𝒒𝒓𝒔𝒕𝒖𝒗𝒘𝒙𝒚𝒛', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf2e2 - 0xf2fb - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝖠-𝖹": # 0x1d5a0 - 0x1d5b9 - - spell: "translate('.', '𝖠𝖡𝖢𝖣𝖤𝖥𝖦𝖧𝖨𝖩𝖪𝖫𝖬𝖭𝖮𝖯𝖰𝖱𝖲𝖳𝖴𝖵𝖶𝖷𝖸𝖹', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '𝖠𝖡𝖢𝖣𝖤𝖥𝖦𝖧𝖨𝖩𝖪𝖫𝖬𝖭𝖮𝖯𝖰𝖱𝖲𝖳𝖴𝖵𝖶𝖷𝖸𝖹', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "-": # 0xf300 - 0xf319 - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "𝖺-𝗓": # 0x1d5ba - 0x1d5d3 - - spell: "translate('.', '𝖺𝖻𝖼𝖽𝖾𝖿𝗀𝗁𝗂𝗃𝗄𝗅𝗆𝗇𝗈𝗉𝗊𝗋𝗌𝗍𝗎𝗏𝗐𝗑𝗒𝗓', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '𝖺𝖻𝖼𝖽𝖾𝖿𝗀𝗁𝗂𝗃𝗄𝗅𝗆𝗇𝗈𝗉𝗊𝗋𝗌𝗍𝗎𝗏𝗐𝗑𝗒𝗓', 'abcdefghijklmnopqrstuvwxyz')" - "-": # 0xf31a - 0xf333 - - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - "𝗔-𝗭": # 0x1d5d4 - 0x1d5ed - SPELL: "translate('.', '𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬𝗭', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf334 - 0xf34d - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝗮-𝘇": # 0x1d5ee - 0x1d607 - SPELL: "translate('.', '𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf34e - 0xf367 - SPELL: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝘈-𝘡": # 0x1d608 - 0x1d621 - # - t: "italic" - - spell: "translate('.', '𝘈𝘉𝘊𝘋𝘌𝘍𝘎𝘏𝘐𝘑𝘒𝘓𝘔𝘕𝘖𝘗𝘘𝘙𝘚𝘛𝘜𝘝𝘞𝘟𝘠𝘡', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + # - T: "italic" + - SPELL: "translate('.', '𝘈𝘉𝘊𝘋𝘌𝘍𝘎𝘏𝘐𝘑𝘒𝘓𝘔𝘕𝘖𝘗𝘘𝘙𝘚𝘛𝘜𝘝𝘞𝘟𝘠𝘡', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "-": # 0xf368 - 0xf381 - # - t: "italic" - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + # - T: "italic" + - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "𝘢-𝘻": # 0x1d622 - 0x1d63b - # - t: "italic" - - spell: "translate('.', '𝘢𝘣𝘤𝘥𝘦𝘧𝘨𝘩𝘪𝘫𝘬𝘭𝘮𝘯𝘰𝘱𝘲𝘳𝘴𝘵𝘶𝘷𝘸𝘹𝘺𝘻', 'abcdefghijklmnopqrstuvwxyz')" + # - T: "italic" + - SPELL: "translate('.', '𝘢𝘣𝘤𝘥𝘦𝘧𝘨𝘩𝘪𝘫𝘬𝘭𝘮𝘯𝘰𝘱𝘲𝘳𝘴𝘵𝘶𝘷𝘸𝘹𝘺𝘻', 'abcdefghijklmnopqrstuvwxyz')" - "-": # 0xf382 - 0xf39b - # - t: "italic" - - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + # - T: "italic" + - SPELL: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - "𝘼-𝙕": # 0x1d63c - 0x1d655 - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '𝘼𝘽𝘾𝘿𝙀𝙁𝙂𝙃𝙄𝙅𝙆𝙇𝙈𝙉𝙊𝙋𝙌𝙍𝙎𝙏𝙐𝙑𝙒𝙓𝙔𝙕', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf39c - 0xf3b5 - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝙖-𝙯": # 0x1d656 - 0x1d66f - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '𝙖𝙗𝙘𝙙𝙚𝙛𝙜𝙝𝙞𝙟𝙠𝙡𝙢𝙣𝙤𝙥𝙦𝙧𝙨𝙩𝙪𝙫𝙬𝙭𝙮𝙯', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf3b6 - 0xf3cf - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝙰-𝚉": # 0x1d670 - 0x1d689 - - spell: "translate('.', '𝙰𝙱𝙲𝙳𝙴𝙵𝙶𝙷𝙸𝙹𝙺𝙻𝙼𝙽𝙾𝙿𝚀𝚁𝚂𝚃𝚄𝚅𝚆𝚇𝚈𝚉', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '𝙰𝙱𝙲𝙳𝙴𝙵𝙶𝙷𝙸𝙹𝙺𝙻𝙼𝙽𝙾𝙿𝚀𝚁𝚂𝚃𝚄𝚅𝚆𝚇𝚈𝚉', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "-": # 0xf3d0 - 0xf3e9 - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - SPELL: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - "𝚊-𝚣": # 0x1d68a - 0x1d6a3 - - spell: "translate('.', '𝚊𝚋𝚌𝚍𝚎𝚏𝚐𝚑𝚒𝚓𝚔𝚕𝚖𝚗𝚘𝚙𝚚𝚛𝚜𝚝𝚞𝚟𝚠𝚡𝚢𝚣', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '𝚊𝚋𝚌𝚍𝚎𝚏𝚐𝚑𝚒𝚓𝚔𝚕𝚖𝚗𝚘𝚙𝚚𝚛𝚜𝚝𝚞𝚟𝚠𝚡𝚢𝚣', 'abcdefghijklmnopqrstuvwxyz')" - "-": # 0xf3ea - 0xf403 - - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - SPELL: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "": [t: "i sans point"] # 0xf404 (en: 'dotless i', DeepL translation) - - "𝚤": [t: "dotless i"] # 0x1d6a4 - - "𝚥": [t: "dotless j"] # 0x1d6a5 + - "": [T: "i sans point"] # 0xf404 (en: 'dotless i', DeepL translation) + - "𝚤": [T: "dotless i"] # 0x1d6a4 + - "𝚥": [T: "dotless j"] # 0x1d6a5 - "𝚨-𝛀": # 0x1d6a8 - 0x1d6c0 - SPELL: "translate('.', '𝚨𝚩𝚪𝚫𝚬𝚭𝚮𝚯𝚰𝚱𝚲𝚳𝚴𝚵𝚶𝚷𝚸𝚹𝚺𝚻𝚼𝚽𝚾𝚿𝛀', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf408 - 0xf420 - SPELL: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝛂-𝛚": # 0x1d6c2 - 0x1d6da - SPELL: "translate('.', '𝛂𝛃𝛄𝛅𝛆𝛇𝛈𝛉𝛊𝛋𝛌𝛍𝛎𝛏𝛐𝛑𝛒𝛓𝛔𝛕𝛖𝛗𝛘𝛙𝛚', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf422 - 0xf43a - SPELL: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - - "": [t: "gras nahblah"] # 0xf421 (en: 'bold nahblah', DeepL translation) - - "𝛁": [t: "symbole mathématique gras nabla"] # 0x1d6c1 (en: 'bold nahblah', DeepL: 'gras nahblah') + - "": [T: "gras nahblah"] # 0xf421 (en: 'bold nahblah', DeepL translation) + - "𝛁": [T: "symbole mathématique gras nabla"] # 0x1d6c1 (en: 'bold nahblah', DeepL: 'gras nahblah') - "𝛛𝛜𝛝𝛞𝛟𝛠𝛡": # 0x1D6DB - 0x1D6E1 - SPELL: "translate('.', '𝛛𝛜𝛝𝛞𝛟𝛠𝛡', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "": # 0xF43C - 0xF441 - SPELL: "translate('.', '', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝛢-𝛺": # 0x1d6e2 - 0x1d6fa - # - t: "italic" - - spell: "translate('.', '𝛢𝛣𝛤𝛥𝛦𝛧𝛨𝛩𝛪𝛫𝛬𝛭𝛮𝛯𝛰𝛱𝛲𝛳𝛴𝛵𝛶𝛷𝛸𝛹𝛺', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + # - T: "italic" + - SPELL: "translate('.', '𝛢𝛣𝛤𝛥𝛦𝛧𝛨𝛩𝛪𝛫𝛬𝛭𝛮𝛯𝛰𝛱𝛲𝛳𝛴𝛵𝛶𝛷𝛸𝛹𝛺', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - "-": # 0xf442 - 0xf45a - # - t: "italic" - - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + # - T: "italic" + - SPELL: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - "𝛼-𝜔": # 0x1d6fc - 0x1d714 - # - t: "italic" - - spell: "translate('.', '𝛼𝛽𝛾𝛿𝜀𝜁𝜂𝜃𝜄𝜅𝜆𝜇𝜈𝜉𝜊𝜋𝜌𝜍𝜎𝜏𝜐𝜑𝜒𝜓𝜔', 'αβγδεζηθικλμνξοπρςστυφχψω')" + # - T: "italic" + - SPELL: "translate('.', '𝛼𝛽𝛾𝛿𝜀𝜁𝜂𝜃𝜄𝜅𝜆𝜇𝜈𝜉𝜊𝜋𝜌𝜍𝜎𝜏𝜐𝜑𝜒𝜓𝜔', 'αβγδεζηθικλμνξοπρςστυφχψω')" - "-": # 0xf45c - 0xf474 - # - t: "italic" - - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" + # - T: "italic" + - SPELL: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "": [t: "italique nahblah"] # 0xf45b (en: 'italic nahblah', DeepL translation) - - "𝛻": [t: "symbole mathématique italique nabla"] # 0x1d6fb (en: 'italic nahblah', DeepL: 'italique nahblah') + - "": [T: "italique nabla"] # 0xf45b (en: 'italic nahblah', DeepL translation) + - "𝛻": [T: "symbole mathématique italique nabla"] # 0x1d6fb (en: 'italic nahblah', DeepL: 'italique nahblah') - "𝜕𝜖𝜗𝜘𝜙𝜚𝜛": # 0x1d715 - 0x1d71b - # - t: "italic" - - spell: "translate('.', '𝜕𝜖𝜗𝜘𝜙𝜚𝜛', '∂εθκφρπ')" + # - T: "italic" + - SPELL: "translate('.', '𝜕𝜖𝜗𝜘𝜙𝜚𝜛', '∂εθκφρπ')" - "": # 0xf475 - 0xf47b - # - t: "italic" - - spell: "translate('.', '', '∂εθκφρπ')" + # - T: "italic" + - SPELL: "translate('.', '', '∂εθκφρπ')" - "𝜜-𝜴": # 0x1d71c - 0x1d734 - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '𝜜𝜝𝜞𝜟𝜠𝜡𝜢𝜣𝜤𝜥𝜦𝜧𝜨𝜩𝜪𝜫𝜬𝜭𝜮𝜯𝜰𝜱𝜲𝜳𝜴', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf47c - 0xf494 - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝜶-𝝎": # 0x1d736 - 0x1d74e - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '𝜶𝜷𝜸𝜹𝜺𝜻𝜼𝜽𝜾𝜿𝝀𝝁𝝂𝝃𝝄𝝅𝝆𝝇𝝈𝝉𝝊𝝋𝝌𝝍𝝎', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf496 - 0xf4ae - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝝏𝝐𝝑𝝒𝝓𝝔𝝕": # 0x1d74f - 0x1d755 - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '𝝏𝝐𝝑𝝒𝝓𝝔𝝕', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "": # 0xf422 - 0xf43a - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - - "𝜵": [t: "symbole mathématique gras italique nabla"] # 0x1d735 (en: 'bold italic nahblah', DeepL: 'gras italique nahblah') - - "": [t: "gras italique nahblah"] # 0xf495 (en: 'bold italic nahblah', DeepL translation) + - "𝜵": [T: "symbole mathématique gras italique nabla"] # 0x1d735 (en: 'bold italic nahblah', DeepL: 'gras italique nahblah') + - "": [T: "gras italique nabla"] # 0xf495 (en: 'bold italic nahblah', DeepL translation) - "𝝖-𝝮": # 0x1d756 - 0x1d76e - SPELL: "translate('.', '𝝖𝝗𝝘𝝙𝝚𝝛𝝜𝝝𝝞𝝟𝝠𝝡𝝢𝝣𝝤𝝥𝝦𝝧𝝨𝝩𝝪𝝫𝝬𝝭𝝮', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf4b6 - 0xf4ce - SPELL: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝝰-𝞈": # 0x1d770 - 0x1d788 - SPELL: "translate('.', '𝝰𝝱𝝲𝝳𝝴𝝵𝝶𝝷𝝸𝝹𝝺𝝻𝝼𝝽𝝾𝝿𝞀𝞁𝞂𝞃𝞄𝞅𝞆𝞇𝞈', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf4d0 - 0xf4e8 - SPELL: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝞉𝞊𝞋𝞌𝞍𝞎𝞏": # 0x1d789 - 0x1d78f - SPELL: "translate('.', '𝞉𝞊𝞋𝞌𝞍𝞎𝞏', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "": # 0xf4e9 - 0xf4ef - SPELL: "translate('.', '', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - - "": [t: "gras nahblah"] # 0xf4cf (en: 'bold nahblah', DeepL translation) - - "𝝯": [t: "symbole mathématique gras sans empattement nabla"] # 0x1d76f (en: 'bold nahblah', DeepL: 'gras nahblah') + - "": [T: "gras nabla"] # 0xf4cf (en: 'bold nahblah', DeepL translation) + - "𝝯": [T: "symbole mathématique gras sans empattement nabla"] # 0x1d76f (en: 'bold nahblah', DeepL: 'gras nahblah') - "𝞐-𝞨": # 0x1d790 - 0x1d7a8 - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '𝞐𝞑𝞒𝞓𝞔𝞕𝞖𝞗𝞘𝞙𝞚𝞛𝞜𝞝𝞞𝞟𝞠𝞡𝞢𝞣𝞤𝞥𝞦𝞧𝞨', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf4f0 - 0xf508 - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝞪-𝟂": # 0x1d7aa - 0x1d7c2 - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '𝞪𝞫𝞬𝞭𝞮𝞯𝞰𝞱𝞲𝞳𝞴𝞵𝞶𝞷𝞸𝞹𝞺𝞻𝞼𝞽𝞾𝞿𝟀𝟁𝟂', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf50a - 0xf522 - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝟃𝟄𝟅𝟆𝟇𝟈𝟉": # 0x1d7c3 - 0x1d7c9 - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '𝟃𝟄𝟅𝟆𝟇𝟈𝟉', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "": # 0xf523 - 0xf529 - # - t: "bold italic" + # - T: "bold italic" - SPELL: "translate('.', '', '∂εθκφρπ')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - - "": [t: "gras nahblah"] # 0xf509 (en: 'bold nahblah', DeepL translation) - - "𝞩": [t: "symbole mathématique sans empattement italique gras nabla"] # 0x1d7a9 (en: 'bold nahblah', DeepL: 'gras nahblah') + - "": [T: "gras nabla"] # 0xf509 (en: 'bold nahblah', DeepL translation) + - "𝞩": [T: "symbole mathématique sans empattement italique gras nabla"] # 0x1d7a9 (en: 'bold nahblah', DeepL: 'gras nahblah') - "-": # 0xf52e - 0xf537 (old MathType) - SPELL: "translate('.', '', '0123456789')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝟎-𝟗": # 0x1d7ce - 0x1d7d7 - SPELL: "translate('.', '𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗', '0123456789')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf52e - 0xf537 (old MathType) - SPELL: "translate('.', '', '0123456789')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "𝟬-𝟵": # 0x1D7EC - 0x1D7F5 - SPELL: "translate('.', '𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵', '0123456789')" - test: if: "not($IgnoreBold)" - then: [t: "gras"] # (en: 'bold', DeepL translation) + then: [T: "gras"] # (en: 'bold', DeepL translation) - "-": # 0xf556 - 0xf55f (old MathType) - - spell: "translate('.', '', '0123456789')" + - SPELL: "translate('.', '', '0123456789')" - "𝟢-𝟫": # 0x1d7e2 - 0x1d7eb - - spell: "translate('.', '𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿', '0123456789')" + - SPELL: "translate('.', '𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿', '0123456789')" - "𝟶-𝟿": # 0x1d7f6 - 0x1d7ff - - spell: "translate('.', '𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿', '0123456789')" + - SPELL: "translate('.', '𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿', '0123456789')" - "": [t: "caractère inconnu"] # 0xf700 (en: 'unknown character', DeepL translation) From ca0ab6502caffc0b45c1d56128db5c3d64b31f11 Mon Sep 17 00:00:00 2001 From: Olivier Thiffault Date: Thu, 6 Aug 2026 12:18:25 -0400 Subject: [PATCH 51/53] corrections to unicode-full.yaml v9 --- Rules/Languages/fr/unicode-full.yaml | 152 +++++++++++++-------------- 1 file changed, 76 insertions(+), 76 deletions(-) diff --git a/Rules/Languages/fr/unicode-full.yaml b/Rules/Languages/fr/unicode-full.yaml index 257da86ec..0e95472bf 100644 --- a/Rules/Languages/fr/unicode-full.yaml +++ b/Rules/Languages/fr/unicode-full.yaml @@ -3728,70 +3728,70 @@ - SPELL: "translate('.', '𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿', '0123456789')" - - "": [t: "caractère inconnu"] # 0xf700 (en: 'unknown character', DeepL translation) - - "": [t: "triangles inférieur droit et inférieur gauche"] # 0xf726 (en: 'lower right and lower left triangles', DeepL translation) - - "": [t: "prolongateur de l'ellipse horizontale"] # 0xf72d (en: 'horizontal ellipsis extender', DeepL translation) - - "": [t: "ligne médiane ellipse horizontale prolongateur"] # 0xf72e (en: 'midline horizontal ellipsis extender', DeepL translation) - - "": [t: "extension de radical"] # 0xf8e5 (en: 'radical extender', DeepL translation) - - "": [t: "extension de flèche verticale"] # 0xf8e6 (en: 'vertical arrow extender', DeepL translation) - - "": [t: "extension de flèche horizontale"] # 0xf8e7 (en: 'horizontal arrow extender', DeepL translation) - - "": [t: "signe enregistré sans empattement"] # 0xf8e8 (en: 'registered sign sans serif', DeepL translation) - - "": [t: "copyright sign sans serif"] # 0xf8e9 (DeepL translation) - - "": [t: "signe de marque sans empattement"] # 0xf8ea (en: 'trade mark sign sans serif', DeepL translation) - - "": [t: "parenthèse gauche en haut"] # 0xf8eb (en: 'left paren top', DeepL translation) - - "": [t: "parenthèse gauche prolongateur"] # 0xf8ec (en: 'left paren extender', DeepL translation) - - "": [t: "parenthèse gauche en bas"] # 0xf8ed (en: 'left paren bottom', DeepL translation) - - "": [t: "parenthèse gauche en haut"] # 0xf8ee (en: 'left bracket top', DeepL translation) - - "": [t: "prolongateur de crochet gauche"] # 0xf8ef (en: 'left bracket extender', DeepL translation) - - "": [t: "accolade gauche en bas"] # 0xf8f0 (en: 'left bracket bottom', DeepL translation) - - "": [t: "accolade gauche en haut"] # 0xf8f1 (en: 'left brace top', DeepL translation) - - "": [t: "accolade gauche au milieu"] # 0xf8f2 (en: 'left brace mid', DeepL translation) - - "": [t: "étai gauche en bas"] # 0xf8f3 (en: 'left brace bottom', DeepL translation) - - "": [t: "prolongateur d'accolade"] # 0xf8f4 (en: 'brace extender', DeepL translation) - - "": [t: "prolongateur intégral"] # 0xf8f5 (en: 'integral extender', DeepL translation) - - "": [t: "parenthèse droite en haut"] # 0xf8f6 (en: 'right paren top', DeepL translation) - - "": [t: "prolongateur de parenthèse à droite"] # 0xf8f7 (en: 'right paren extender', DeepL translation) - - "": [t: "parenthèse droite en bas"] # 0xf8f8 (en: 'right paren bottom', DeepL translation) - - "": [t: "crochet droit en haut"] # 0xf8f9 (en: 'right bracket top', DeepL translation) - - "": [t: "prolongation du crochet droit"] # 0xf8fa (en: 'right bracket extender', DeepL translation) - - "": [t: "équerre droite en bas"] # 0xf8fb (en: 'right bracket bottom', DeepL translation) - - "": [t: "accolade droite haut"] # 0xf8fc (en: 'right brace top', DeepL translation) - - "": [t: "accolade droite milieu"] # 0xf8fd (en: 'right brace mid', DeepL translation) - - "": [t: "triangle droit égal"] # 0xf8fe (en: 'right brace bottom', DeepL translation) - - "": [t: "logo de la pomme"] # 0xf8ff (en: 'apple logo', DeepL translation) - - "ff": [t: "ligature minuscule latine ff"] # 0xfb00 (en: 'ff', DeepL: 'ff') - - "fi": [t: "ligature minuscule latine fi"] # 0xfb01 (en: 'fi', DeepL: 'fi') - - "fl": [t: "ligature minuscule latine fl"] # 0xfb02 (en: 'fl', DeepL: 'fl') - - "ffi": [t: "ligature minuscule latine ffi"] # 0xfb03 (en: 'ffi', DeepL: 'ffi') - - "ffl": [t: "ligature minuscule latine ffl"] # 0xfb04 (en: 'ffl', DeepL: 'ffl') - - "ſt": [t: "ft"] # 0xfb05 (DeepL translation) - - "st": [t: "st"] # 0xfb06 (DeepL translation) - - "﬩": [t: "lettre hébraïque alternative plus"] # 0xfb29 (en: 'hebrew letter alternative plus', DeepL translation) - - "︠": [t: "ligature moitié gauche embellissement"] # 0xfe20 (en: 'ligature left half embellishment', DeepL translation) - - "︡": [t: "ligature moitié droite embellissement"] # 0xfe21 (en: 'ligature right half embellishment', DeepL translation) - - "︢": [t: "double tilde à moitié gauche"] # 0xfe22 (en: 'double tilde left half embellishment', DeepL translation) - - "︣": [t: "double tilde moitié droite embellissement"] # 0xfe23 (en: 'double tilde right half embellishment', DeepL translation) - - "︤": [t: "macron moitié gauche embellissement"] # 0xfe24 (en: 'macron left half embellishment', DeepL translation) - - "︥": [t: "embellissement de la moitié droite du macron"] # 0xfe25 (en: 'macron right half embellishment', DeepL translation) - - "︦": [t: "macron jointif fioriture"] # 0xfe26 (en: 'conjoining macron embellishment', DeepL translation) - - "︵": [t: "forme de présentation de parenthèse gauche verticale"] # 0xfe35 (en: 'over paren') - - "︶": [t: "forme de présentation de parenthèse droite verticale"] # 0xfe36 (en: 'under paren') - - "︷": [t: "forme de présentation d'accolade gauche verticale"] # 0xfe37 (en: 'over brace') - - "︸": [t: "forme de présentation d'accolade droite verticale"] # 0xfe38 (en: 'under brace') - - "︿": [t: "over angle bracket"] # 0xfe3f - - "﹀": [t: "under angle bracket"] # 0xfe40 - - "﹡": [t: "astérisque minuscule"] # 0xfe61 (en: 'small asterisk', DeepL: 'petit astérisque') - - "﹢": [t: "plus minuscule"] # 0xfe62 (en: 'small plus', DeepL: 'petit plus') - - "﹣": [t: "tiret minuscule"] # 0xfe63 (en: 'small minus', DeepL: 'petit moins') - - "﹤": [t: "inférieur à minuscule"] # 0xfe64 (en: 'small less than', DeepL: 'petit moins que') - - "﹥": [t: "supérieur à minuscule"] # 0xfe65 (en: 'small greater than', DeepL: 'petit plus grand que') - - "﹦": [t: "égal à minuscule"] # 0xfe66 (en: 'small equals', DeepL: 'petit égal') - - "+": [t: "plus"] # 0xff0b (en: 'equals sign', DeepL: 'signe égal') - - "<": [t: "inférieur à"] # 0xff1c (en: 'less than', DeepL: 'moins que') - - "=": [t: "égal à"] # 0xff1d (en: 'equals', DeepL: 'égal') - - ">": [t: "supérieur à"] # 0xff1e (en: 'greater than', DeepL: 'plus grand que') - - "\": [t: "barre oblique inversée"] # 0xff3c (en: 'backslash') - - "^": [t: "accent circonflexe"] # 0xff3e (en: 'hat', DeepL: 'chapeau') + - "": [T: "caractère inconnu"] # 0xf700 (en: 'unknown character', DeepL translation) + - "": [T: "triangles inférieur droit et inférieur gauche"] # 0xf726 (en: 'lower right and lower left triangles', DeepL translation) + - "": [T: "prolongateur de l'ellipse horizontale"] # 0xf72d (en: 'horizontal ellipsis extender', DeepL translation) + - "": [T: "prolongateur de ligne médiane ellipse horizontale"] # 0xf72e (en: 'midline horizontal ellipsis extender', DeepL translation) + - "": [T: "prolongateur de de radical"] # 0xf8e5 (en: 'radical extender', DeepL translation) + - "": [T: "prolongateur de de flèche verticale"] # 0xf8e6 (en: 'vertical arrow extender', DeepL translation) + - "": [T: "prolongateur de de flèche horizontale"] # 0xf8e7 (en: 'horizontal arrow extender', DeepL translation) + - "": [T: "signe enregistré sans empattement"] # 0xf8e8 (en: 'registered sign sans serif', DeepL translation) + - "": [T: "copyright sign sans serif"] # 0xf8e9 (DeepL translation) + - "": [T: "signe de marque sans empattement"] # 0xf8ea (en: 'trade mark sign sans serif', DeepL translation) + - "": [T: "parenthèse gauche en haut"] # 0xf8eb (en: 'left paren top', DeepL translation) + - "": [T: "prolongateur de parenthèse gauche"] # 0xf8ec (en: 'left paren extender', DeepL translation) + - "": [T: "parenthèse gauche en bas"] # 0xf8ed (en: 'left paren bottom', DeepL translation) + - "": [T: "parenthèse gauche en haut"] # 0xf8ee (en: 'left bracket top', DeepL translation) + - "": [T: "prolongateur de crochet gauche"] # 0xf8ef (en: 'left bracket extender', DeepL translation) + - "": [T: "accolade gauche en bas"] # 0xf8f0 (en: 'left bracket bottom', DeepL translation) + - "": [T: "accolade gauche en haut"] # 0xf8f1 (en: 'left brace top', DeepL translation) + - "": [T: "accolade gauche au milieu"] # 0xf8f2 (en: 'left brace mid', DeepL translation) + - "": [T: "accolade gauche en bas"] # 0xf8f3 (en: 'left brace bottom', DeepL translation) + - "": [T: "prolongateur d'accolade"] # 0xf8f4 (en: 'brace extender', DeepL translation) + - "": [T: "prolongateur intégral"] # 0xf8f5 (en: 'integral extender', DeepL translation) + - "": [T: "parenthèse droite en haut"] # 0xf8f6 (en: 'right paren top', DeepL translation) + - "": [T: "prolongateur de parenthèse droite"] # 0xf8f7 (en: 'right paren extender', DeepL translation) + - "": [T: "parenthèse droite en bas"] # 0xf8f8 (en: 'right paren bottom', DeepL translation) + - "": [T: "crochet droit en haut"] # 0xf8f9 (en: 'right bracket top', DeepL translation) + - "": [T: "prolongation de crochet droit"] # 0xf8fa (en: 'right bracket extender', DeepL translation) + - "": [T: "accolade droite en bas"] # 0xf8fb (en: 'right bracket bottom', DeepL translation) + - "": [T: "accolade droite en haut"] # 0xf8fc (en: 'right brace top', DeepL translation) + - "": [T: "accolade droite au milieu"] # 0xf8fd (en: 'right brace mid', DeepL translation) + - "": [T: "accolade droite en bas"] # 0xf8fe (en: 'right brace bottom', DeepL translation) + - "": [T: "logo de la pomme"] # 0xf8ff (en: 'apple logo', DeepL translation) + - "ff": [T: "ligature minuscule latine ff"] # 0xfb00 (en: 'ff', DeepL: 'ff') + - "fi": [T: "ligature minuscule latine fi"] # 0xfb01 (en: 'fi', DeepL: 'fi') + - "fl": [T: "ligature minuscule latine fl"] # 0xfb02 (en: 'fl', DeepL: 'fl') + - "ffi": [T: "ligature minuscule latine ffi"] # 0xfb03 (en: 'ffi', DeepL: 'ffi') + - "ffl": [T: "ligature minuscule latine ffl"] # 0xfb04 (en: 'ffl', DeepL: 'ffl') + - "ſt": [T: "ft"] # 0xfb05 (DeepL translation) + - "st": [T: "st"] # 0xfb06 (DeepL translation) + - "﬩": [T: "lettre hébraïque alternative plus"] # 0xfb29 (en: 'hebrew letter alternative plus', DeepL translation) + - "︠": [T: "embellissement ligature moitié gauche"] # 0xfe20 (en: 'ligature left half embellishment', DeepL translation) + - "︡": [T: "embellissement ligature moitié droite"] # 0xfe21 (en: 'ligature right half embellishment', DeepL translation) + - "︢": [T: "embellissement double tilde moitié gauche"] # 0xfe22 (en: 'double tilde left half embellishment', DeepL translation) + - "︣": [T: "embellissement double tilde moitié droite"] # 0xfe23 (en: 'double tilde right half embellishment', DeepL translation) + - "︤": [T: "embellissement macron moitié gauche"] # 0xfe24 (en: 'macron left half embellishment', DeepL translation) + - "︥": [T: "embellissement macron moitié droite"] # 0xfe25 (en: 'macron right half embellishment', DeepL translation) + - "︦": [T: "embellissement macron conjoint"] # 0xfe26 (en: 'conjoining macron embellishment', DeepL translation) + - "︵": [T: "forme de présentation de parenthèse gauche verticale"] # 0xfe35 (en: 'over paren') + - "︶": [T: "forme de présentation de parenthèse droite verticale"] # 0xfe36 (en: 'under paren') + - "︷": [T: "forme de présentation d'accolade gauche verticale"] # 0xfe37 (en: 'over brace') + - "︸": [T: "forme de présentation d'accolade droite verticale"] # 0xfe38 (en: 'under brace') + - "︿": [T: "forme de présentation de chevron gauche vertical"] # 0xfe3f + - "﹀": [T: "forme de présentation de chevron droit vertical"] # 0xfe40 + - "﹡": [T: "astérisque minuscule"] # 0xfe61 (en: 'small asterisk', DeepL: 'petit astérisque') + - "﹢": [T: "plus minuscule"] # 0xfe62 (en: 'small plus', DeepL: 'petit plus') + - "﹣": [T: "tiret minuscule"] # 0xfe63 (en: 'small minus', DeepL: 'petit moins') + - "﹤": [T: "inférieur à minuscule"] # 0xfe64 (en: 'small less than', DeepL: 'petit moins que') + - "﹥": [T: "supérieur à minuscule"] # 0xfe65 (en: 'small greater than', DeepL: 'petit plus grand que') + - "﹦": [T: "égal minuscule"] # 0xfe66 (en: 'small equals', DeepL: 'petit égal') + - "+": [T: "plus"] # 0xff0b (en: 'equals sign', DeepL: 'signe égal') + - "<": [T: "inférieur à"] # 0xff1c (en: 'less than', DeepL: 'moins que') + - "=": [T: "égal"] # 0xff1d (en: 'equals', DeepL: 'égal') + - ">": [T: "supérieur à"] # 0xff1e (en: 'greater than', DeepL: 'plus grand que') + - "\": [T: "barre oblique inversée"] # 0xff3c (en: 'backslash') + - "^": [T: "accent circonflexe"] # 0xff3e (en: 'hat', DeepL: 'chapeau') - "|": # 0xff5c # note: for ClearSpeak and SimpleSpeak, "|" inside of sets is handled at the mrow level, same for 'sets' - with: @@ -3802,19 +3802,19 @@ then_test: if: "$DefaultToGiven" then: [T: "sachant"] # (en: 'given', DeepL translation) - else: [t: "barre verticale"] # (en: 'vertical line', DeepL: 'ligne verticale') + else: [T: "barre verticale"] # (en: 'vertical line', DeepL: 'ligne verticale') - else_if: "not(preceding-sibling::*) or not(following-sibling::*)" - then: [t: "ligne verticale"] # (en: 'vertical line', DeepL translation) + then: [T: "ligne verticale"] # (en: 'vertical line', DeepL translation) - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" - then: [t: "tel que"] # (en: 'such that', DeepL translation) + then: [T: "tel que"] # (en: 'such that', DeepL translation) - else_if: "$ClearSpeak_VerticalLine = 'Given' or $DefaultToGiven" then: [T: "sachant"] # (en: 'given', DeepL translation) - - else: [t: "barre verticale"] # (en: 'divides', DeepL: 'divise') - - "~": [t: "tilde"] # 0xff5e - - "¬": [t: "négation"] # 0xffe2 (en: 'not', DeepL: 'non') - - "←": [t: "flèche vers la gauche demi chasse"] # 0xffe9 (en: 'left arrow', DeepL: 'flèche gauche') - - "↑": [t: "flèche vers le haut demi chasse"] # 0xffea (en: 'up arrow', DeepL: 'flèche vers le haut') - - "→": [t: "flèche vers la droite demi chasse"] # 0xffeb (en: 'right arrow', DeepL: 'flèche droite') - - "↓": [t: "flèche vers le bas demi chasse"] # 0xffec (en: 'down arrow', DeepL: 'flèche vers le bas') - - "": [t: "objet inconnu ou manquant"] # 0xfffc (en: 'unknown or missing object', DeepL translation) - - "�": [t: "unknown or missing character"] # 0xfffd (DeepL: 'caractère inconnu ou manquant') + - else: [T: "barre verticale"] # (en: 'divides', DeepL: 'divise') + - "~": [T: "tilde"] # 0xff5e + - "¬": [T: "négation"] # 0xffe2 (en: 'not', DeepL: 'non') + - "←": [T: "flèche vers la gauche demi chasse"] # 0xffe9 (en: 'left arrow', DeepL: 'flèche gauche') + - "↑": [T: "flèche vers le haut demi chasse"] # 0xffea (en: 'up arrow', DeepL: 'flèche vers le haut') + - "→": [T: "flèche vers la droite demi chasse"] # 0xffeb (en: 'right arrow', DeepL: 'flèche droite') + - "↓": [T: "flèche vers le bas demi chasse"] # 0xffec (en: 'down arrow', DeepL: 'flèche vers le bas') + - "": [T: "objet inconnu ou manquant"] # 0xfffc (en: 'unknown or missing object', DeepL translation) + - "�": [T: "caractère inconnu ou manquant"] # 0xfffd (DeepL: 'caractère inconnu ou manquant') From 74229de8da81c78f09cda045d9d60a11459d2f4b Mon Sep 17 00:00:00 2001 From: Olivier Thiffault Date: Thu, 6 Aug 2026 12:20:07 -0400 Subject: [PATCH 52/53] corrections to unicode-full.yaml v10 --- Rules/Languages/fr/unicode-full.yaml | 178 +++++++++++++-------------- 1 file changed, 89 insertions(+), 89 deletions(-) diff --git a/Rules/Languages/fr/unicode-full.yaml b/Rules/Languages/fr/unicode-full.yaml index 0e95472bf..c7ce25de9 100644 --- a/Rules/Languages/fr/unicode-full.yaml +++ b/Rules/Languages/fr/unicode-full.yaml @@ -48,7 +48,7 @@ - "ʴ": [T: "modificateur petit r tourné"] # 0x2b4 (en: 'modifier small turned r', DeepL translation) - "ʵ": [T: "modificateur petit r tourné avec crochet"] # 0x2b5 (en: 'modifier small turned r with hook', DeepL translation) - "ʶ": # 0x2b6 - - spell: "translate('R', 'R', 'R')" + - SPELL: "translate('R', 'R', 'R')" - T: "modificateur petit inversé" # (en: 'modifier small inverted', DeepL translation) @@ -683,7 +683,7 @@ - test: if: "$Verbosity!='Terse'" then: [T: "le"] # (en: 'the', DeepL translation) - - t: "complément" # (en: 'complement of') + - T: "complément" # (en: 'complement of') - "∂": # 0x2202 - test: if: "$Verbosity='Terse'" @@ -733,7 +733,7 @@ - test: if: "$Verbosity!='Terse' and not(parent::m:set)" # "the set x is an element of ..." sounds bad then: [T: "est"] # (en: 'is', DeepL translation) - - t: "appartient à" # (en: 'an element of') + - T: "appartient à" # (en: 'an element of') # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option else_test: if: "../../self::m:set or ../../../self::m:set" # inside a set @@ -777,22 +777,22 @@ - test: if: "$Verbosity!='Terse'" then: [T: "la"] # (en: 'the', DeepL translation) - - t: "racine carrée" # (en: 'square root of') + - T: "racine carrée" # (en: 'square root of') - "∛": # 0x221b - test: if: "$Verbosity!='Terse'" then: [T: "la"] # (en: 'the', DeepL translation) - - t: "racine cubique" # (en: 'cube root of') + - T: "racine cubique" # (en: 'cube root of') - "∜": # 0x221c - test: if: "$Verbosity!='Terse'" then: [T: "la"] # (en: 'the', DeepL translation) - - t: "racine quatrième" # (en: 'fourth root of') + - T: "racine quatrième" # (en: 'fourth root of') - "∝": # 0x221d - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "proportionnel à" # (en: 'proportional to') + - T: "proportionnel à" # (en: 'proportional to') - "∞": [T: "infini"] # 0x221e (en: 'infinity') - "∟": [T: "angle droit"] # 0x221f (en: 'right angle') - "∠": [T: "angle"] # 0x2220 @@ -819,7 +819,7 @@ - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "rapport" # (en: 'to') + - T: "rapport" # (en: 'to') - "∷": [T: "proportion"] # 0x2237 (en: 'as') - "∸": [T: "moins pointé"] # 0x2238 (en: 'dot minus') - "∹": [T: "excès"] # 0x2239 (en: 'has excess compared to') @@ -827,19 +827,19 @@ - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "proportion géométrique" # (en: 'geometrically proportional to') + - T: "proportion géométrique" # (en: 'geometrically proportional to') - "∻": # 0x223b - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "homothétique" # (en: 'homothetic to') + - T: "homothétique" # (en: 'homothetic to') - "∼": [T: "opérateur tilde"] # 0x223c (en: 'varies with') - "∽": [T: "opérateur tilde renversé"] # 0x223d (en: 'reversed tilde') - "∾": # 0x223e - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "s couché renversé" # (en: 'most positive') + - T: "s couché renversé" # (en: 'most positive') - "∿": [T: "sinusoïde"] # 0x223f (en: 'sine wave') - "≀": [T: "produit couronne"] # 0x2240 (en: 'wreath product') - "≁": [T: "non tilde"] # 0x2241 (en: 'not tilde') @@ -848,75 +848,75 @@ - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "asymptotiquement égal à" # (en: 'asymptotically equal to') + - T: "asymptotiquement égal à" # (en: 'asymptotically equal to') - "≄": # 0x2244 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "non asymptotiquement égal à" # (en: 'not asymptotically equal to') + - T: "non asymptotiquement égal à" # (en: 'not asymptotically equal to') - "≅": # 0x2245 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "approximativement égal à" # (en: 'congruent to') + - T: "approximativement égal à" # (en: 'congruent to') - "≆": # 0x2246 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "approximativement mais non strictement égal à" # (en: 'approximately but not actually equal to') + - T: "approximativement mais non strictement égal à" # (en: 'approximately but not actually equal to') - "≇": # 0x2247 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "ni approximativement ni strictement égal à" # (en: 'not congruent to') + - T: "ni approximativement ni strictement égal à" # (en: 'not congruent to') - "≈": # 0x2248 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "presque égal à" # (en: 'approximately equal to') + - T: "presque égal à" # (en: 'approximately equal to') - "≉": # 0x2249 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "non presque égal à" # (en: 'not approximately equal to') + - T: "non presque égal à" # (en: 'not approximately equal to') - "≊": # 0x224a - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "presque égal ou égal à" # (en: 'approximately equal or equal to') + - T: "presque égal ou égal à" # (en: 'approximately equal or equal to') - "≋": [T: "triple tilde"] # 0x224b - "≌": [T: "entièrement égal à"] # 0x224c (en: 'are all equal to') - "≍": # 0x224d - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "équivalent à" # (en: 'equivalent to') + - T: "équivalent à" # (en: 'equivalent to') - "≎": # 0x224e - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "géométriquement équivalent à" # (en: 'geometrically equivalent to') + - T: "géométriquement équivalent à" # (en: 'geometrically equivalent to') - "≏": # 0x224f - test: if: "$Verbosity!='Terse'" then: [T: "la"] # (en: 'the', DeepL translation) - - t: "différence entre" # (en: 'difference between') + - T: "différence entre" # (en: 'difference between') - "≐": [T: "tend vers la limite"] # 0x2250 (en: 'approaches the limit') - "≑": # 0x2251 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "géométriquement égal à" # (en: 'geometrically equal to') + - T: "géométriquement égal à" # (en: 'geometrically equal to') - "≒": # 0x2252 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "approximativement égal à ou image de" # (en: 'approximately equal to or the image of') + - T: "approximativement égal à ou image de" # (en: 'approximately equal to or the image of') - "≓": # 0x2253 - test: if: "$Verbosity!='Terse'" then: [T: "est l'"] # (en: 'is the', DeepL translation) - - t: "\uF8FEimage de ou approximativement égal à" # (en: 'image of or approximately equal to') + - T: "\uF8FEimage de ou approximativement égal à" # (en: 'image of or approximately equal to') - "≔": [T: "deux-points égal"] # 0x2254 (en: 'colon equals', SRE: 'deux points égal') - "≕": [T: "égal deux points"] # 0x2255 (en: 'equals colon', MathPlayer: 'égal deux-points', DeepL: 'égal colon') - "≖": [T: "rond dans égal"] # 0x2256 (en: 'ring in equal to') @@ -924,14 +924,14 @@ - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "égal avec rond en chef" # (en: 'approximately equal to') + - T: "égal avec rond en chef" # (en: 'approximately equal to') - "≘": [T: "correspond à"] # 0x2258 (en: 'corresponds to') - "≙": [T: "estime"] # 0x2259 (en: 'estimates') - "≚": # 0x225a - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "équiangulaire à" # (en: 'equiangular to') + - T: "équiangulaire à" # (en: 'equiangular to') - "≛": [T: "égal avec étoile en chef"] # 0x225b (en: 'star equals') - "≜": [T: "égal delta"] # 0x225c (en: 'delta equals') - "≝": [T: "égal par définition à"] # 0x225d (en: 'is defined to be') @@ -939,120 +939,120 @@ - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "mesuré par" # (en: 'measured by') + - T: "mesuré par" # (en: 'measured by') - "≟": [T: "égalité en doute"] # 0x225f (en: 'has an unknown relationship with') - "≠": # 0x2260 - test: if: "$Verbosity!='Terse'" then: [T: "n'est"] # (en: 'is', DeepL translation) - - t: "pas égal à" # (en: 'not equal to') + - T: "pas égal à" # (en: 'not equal to') - "≡": # 0x2261 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "identique à" # (en: 'identical to') + - T: "identique à" # (en: 'identical to') - "≢": # 0x2262 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "non identique à" # (en: 'not identical to') + - T: "non identique à" # (en: 'not identical to') - "≣": # 0x2263 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "strictement équivalent à" # (en: 'strictly equivalent to') + - T: "strictement équivalent à" # (en: 'strictly equivalent to') - "≦": [T: "inférieur à sur égal à"] # 0x2266 (en: 'less than over equal to', MathPlayer: 'plus petit que par-dessus égal à', DeepL: 'inférieur à égal à') - "≧": [T: "supérieur à sur égal à"] # 0x2267 (en: 'greater than over equal to', MathPlayer: 'plus grand que par-dessus égal à', DeepL: 'plus grand que sur égal à') - "≨": # 0x2268 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "inférieur mais pas égal à" # (en: 'less than but not equal to') + - T: "inférieur mais pas égal à" # (en: 'less than but not equal to') - "≩": # 0x2269 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "supérieur mais pas égal à" # (en: 'greater than but not equal to') + - T: "supérieur mais pas égal à" # (en: 'greater than but not equal to') - "≪": # 0x226a - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "très inférieur à" # (en: 'much less than') + - T: "très inférieur à" # (en: 'much less than') - "≫": # 0x226b - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "très supérieur à" # (en: 'much greater than') + - T: "très supérieur à" # (en: 'much greater than') - "≬": # 0x226c - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "entre" # (en: 'between') + - T: "entre" # (en: 'between') - "≭": # 0x226d - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "non équivalent à" # (en: 'not equivalent to') + - T: "non équivalent à" # (en: 'not equivalent to') - "≮": # 0x226e - test: if: "$Verbosity!='Terse'" then: [T: "n'est"] # (en: 'is', DeepL translation) - - t: "pas inférieur à" # (en: 'not less than') + - T: "pas inférieur à" # (en: 'not less than') - "≯": # 0x226f - test: if: "$Verbosity!='Terse'" then: [T: "n'est"] # (en: 'is', DeepL translation) - - t: "pas supérieur à" # (en: 'not greater than') + - T: "pas supérieur à" # (en: 'not greater than') - "≰": # 0x2270 - test: if: "$Verbosity!='Terse'" then: [T: "n'est"] # (en: 'is', DeepL translation) - - t: "ni inférieur ni égal à" # (en: 'neither less than nor equal to') + - T: "ni inférieur ni égal à" # (en: 'neither less than nor equal to') - "≱": # 0x2271 - test: if: "$Verbosity!='Terse'" then: [T: "n'est"] # (en: 'is', DeepL translation) - - t: "ni supérieur ni égal à" # (en: 'neither greater than nor equal to') + - T: "ni supérieur ni égal à" # (en: 'neither greater than nor equal to') - "≲": # 0x2272 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "inférieur ou équivalent à" # (en: 'less than or equivalent to') + - T: "inférieur ou équivalent à" # (en: 'less than or equivalent to') - "≳": # 0x2273 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "supérieur ou équivalent à" # (en: 'greater than or equivalent to') + - T: "supérieur ou équivalent à" # (en: 'greater than or equivalent to') - "≴": # 0x2274 - test: if: "$Verbosity!='Terse'" then: [T: "n'est"] # (en: 'is', DeepL translation) - - t: "ni inférieur ni équivalent à" # (en: 'neither less than nor equivalent to') + - T: "ni inférieur ni équivalent à" # (en: 'neither less than nor equivalent to') - "≵": # 0x2275 - test: if: "$Verbosity!='Terse'" then: [T: "n'est"] # (en: 'is', DeepL translation) - - t: "ni supérieur ni équivalent à" # (en: 'neither greater than nor equivalent to') + - T: "ni supérieur ni équivalent à" # (en: 'neither greater than nor equivalent to') - "≶": # 0x2276 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "inférieur ou supérieur à" # (en: 'less than or greater than') + - T: "inférieur ou supérieur à" # (en: 'less than or greater than') - "≷": # 0x2277 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "supérieur ou inférieur à" # (en: 'greater than or less than') + - T: "supérieur ou inférieur à" # (en: 'greater than or less than') - "≸": # 0x2278 - test: if: "$Verbosity!='Terse'" then: [T: "n'est"] # (en: 'is', DeepL translation) - - t: "ni inférieur ni supérieur à" # (en: 'neither less than nor greater than') + - T: "ni inférieur ni supérieur à" # (en: 'neither less than nor greater than') - "≹": # 0x2279 - test: if: "$Verbosity!='Terse'" then: [T: "n'est"] # (en: 'is', DeepL translation) - - t: "ni supérieur ni inférieur à" # (en: 'neither greater than nor less than') + - T: "ni supérieur ni inférieur à" # (en: 'neither greater than nor less than') - "≺": [T: "précède"] # 0x227a (en: 'precedes') - "≻": [T: "suit"] # 0x227b (en: 'succeeds') - "≼": [T: "précède ou est égal à"] # 0x227c (en: 'precedes or is equal to') @@ -1065,42 +1065,42 @@ - test: if: "$Verbosity!='Terse'" then: [T: "est un"] # (en: 'is a', DeepL translation) - - t: "sous-ensemble de" # (en: 'subset of', SRE: 'sous ensemble de') + - T: "sous-ensemble de" # (en: 'subset of', SRE: 'sous ensemble de') - "⊃": # 0x2283 - test: if: "$Verbosity!='Terse'" then: [T: "est un"] # (en: 'is a', DeepL translation) - - t: "sur-ensemble de" # (en: 'superset of', SRE: 'sur ensemble de') + - T: "sur-ensemble de" # (en: 'superset of', SRE: 'sur ensemble de') - "⊄": # 0x2284 - test: if: "$Verbosity!='Terse'" then: [T: "n'est"] # (en: 'is', DeepL translation) - - t: "pas un sous-ensemble de" # (en: 'not a subset of', SRE: 'pas un sous ensemble de') + - T: "pas un sous-ensemble de" # (en: 'not a subset of', SRE: 'pas un sous ensemble de') - "⊅": # 0x2285 - test: if: "$Verbosity!='Terse'" then: [T: "n'est"] # (en: 'is', DeepL translation) - - t: "pas un sur-ensemble de" # (en: 'not a superset of', SRE: 'pas un sur ensemble de') + - T: "pas un sur-ensemble de" # (en: 'not a superset of', SRE: 'pas un sur ensemble de') - "⊆": # 0x2286 - test: if: "$Verbosity!='Terse'" then: [T: "est un"] # (en: 'is a', DeepL translation) - - t: "sous ensemble de ou égal à" # (en: 'subset of or equal to', MathPlayer: 'sous-ensemble ou égal à', DeepL: 'sous-ensemble de ou égal à') + - T: "sous ensemble de ou égal à" # (en: 'subset of or equal to', MathPlayer: 'sous-ensemble ou égal à', DeepL: 'sous-ensemble de ou égal à') - "⊇": # 0x2287 - test: if: "$Verbosity!='Terse'" then: [T: "est un"] # (en: 'is a', DeepL translation) - - t: "sur ensemble de ou égal à" # (en: 'superset of or equal to', MathPlayer: 'sur-ensemble ou égal à', DeepL: 'superposé ou égal à') + - T: "sur ensemble de ou égal à" # (en: 'superset of or equal to', MathPlayer: 'sur-ensemble ou égal à', DeepL: 'superposé ou égal à') - "⊈": # 0x2288 - test: if: "$Verbosity!='Terse'" then: [T: "n'est"] # (en: 'is', DeepL translation) - - t: "ni un sous ensemble de ni égal à" # (en: 'neither a subset of nor equal to', MathPlayer: 'ni un sous-ensemble ni égal à', DeepL: 'ni un sous-ensemble de ni égal à') + - T: "ni un sous ensemble de ni égal à" # (en: 'neither a subset of nor equal to', MathPlayer: 'ni un sous-ensemble ni égal à', DeepL: 'ni un sous-ensemble de ni égal à') - "⊉": # 0x2289 - test: if: "$Verbosity!='Terse'" then: [T: "n'est"] # (en: 'is', DeepL translation) - - t: "ni un sur ensemble de ni égal à" # (en: 'neither a superset of nor equal to', MathPlayer: 'ni un sur-ensemble ni égal à', DeepL: 'ni un surensemble de, ni égal à') + - T: "ni un sur ensemble de ni égal à" # (en: 'neither a superset of nor equal to', MathPlayer: 'ni un sur-ensemble ni égal à', DeepL: 'ni un surensemble de, ni égal à') - "⊊": [T: "sous ensemble de mais pas égal à"] # 0x228a (en: 'subset of with not equal to', MathPlayer: 'sous-ensemble mais pas égal à', DeepL: 'sous-ensemble de avec non égal à') - "⊋": [T: "sur ensemble de mais pas égal à"] # 0x228b (en: 'superset of with not equal to', MathPlayer: 'sur-ensemble mais pas égal à', DeepL: 'superposition de avec non égal à') - "⊌": [T: "multiensemble"] # 0x228c (en: 'multiset') @@ -1132,14 +1132,14 @@ - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "taquet vers le haut" # (en: 'bottom') + - T: "taquet vers le haut" # (en: 'bottom') - "⊦": [T: "assertion"] # 0x22a6 (en: 'reduces to') - "⊧": [T: "modélise"] # 0x22a7 (en: 'models') - "⊨": # 0x22a8 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "vrai" # (en: 'true') + - T: "vrai" # (en: 'true') - "⊩": [T: "oblige"] # 0x22a9 (en: 'forces') - "⊪": [T: "barre verticale triple avec tourniquet à droite"] # 0x22aa (en: 'triple vertical bar right turnstile') - "⊫": [T: "barre verticale double avec tourniquet à droite double"] # 0x22ab (en: 'double vertical bar double right turnstile') @@ -1148,7 +1148,7 @@ - test: if: "$Verbosity!='Terse'" then: [T: "n'est"] # (en: 'is', DeepL translation) - - t: "pas vrai" # (en: 'not true') + - T: "pas vrai" # (en: 'not true') - "⊮": [T: "n'oblige pas"] # 0x22ae (en: 'does not force') - "⊯": [T: "non barre verticale double avec tourniquet à droite double"] # 0x22af (en: 'negated double vertical bar double right turnstile', MathPlayer: 'non-barre verticale double avec tourniquet à droite double', DeepL: 'négation double barre verticale double tourniquet droit') - "⊰": [T: "précède sous relation"] # 0x22b0 (en: 'precedes under relation') @@ -1157,24 +1157,24 @@ - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "sous groupe normal de" # (en: 'a normal subgroup of', MathPlayer: 'sous-groupe normal de', DeepL: 'un sous-groupe normal de') + - T: "sous groupe normal de" # (en: 'a normal subgroup of', MathPlayer: 'sous-groupe normal de', DeepL: 'un sous-groupe normal de') - "⊳": [T: "contient comme sous groupe normal"] # 0x22b3 (en: 'contains as a normal subgroup', MathPlayer: 'contient comme sous-groupe normal', DeepL: 'contient un sous-groupe normal') - "⊴": # 0x22b4 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "sous groupe normal de ou égal à" # (en: 'a normal subgroup of or equal to', MathPlayer: 'sous-groupe normal ou égal à', DeepL: 'un sous-groupe normal de ou égal à') + - T: "sous groupe normal de ou égal à" # (en: 'a normal subgroup of or equal to', MathPlayer: 'sous-groupe normal ou égal à', DeepL: 'un sous-groupe normal de ou égal à') - "⊵": [T: "contient comme sous-groupe normal de ou égal à"] # 0x22b5 (en: 'contains as a normal subgroup or equal to', SRE: 'contient comme sous groupe normal ou égal à') - "⊶": # 0x22b6 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "original de" # (en: 'the original of') + - T: "original de" # (en: 'the original of') - "⊷": # 0x22b7 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "image de" # (en: 'an image of') + - T: "image de" # (en: 'an image of') - "⊸": [T: "multijection"] # 0x22b8 (en: 'multimap') - "⊹": [T: "matrice hermitienne conjuguée"] # 0x22b9 (en: 'hermitian conjugate matrix') - "⊺": [T: "intercale"] # 0x22ba (en: 'intercalate') @@ -1201,22 +1201,22 @@ - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "produit semi direct à gauche de facteur normal" # (en: 'the left normal factor semidirect product of', MathPlayer: 'produit semi-direct à gauche de facteur normal', DeepL: 'le facteur normal gauche produit semi-direct de') + - T: "produit semi direct à gauche de facteur normal" # (en: 'the left normal factor semidirect product of', MathPlayer: 'produit semi-direct à gauche de facteur normal', DeepL: 'le facteur normal gauche produit semi-direct de') - "⋊": # 0x22ca - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "produit semi direct à droite de facteur normal" # (en: 'the right normal factor semidirect product of', MathPlayer: 'produit semi-direct à droite de facteur normal', DeepL: 'le facteur normal droit produit semi-direct de') + - T: "produit semi direct à droite de facteur normal" # (en: 'the right normal factor semidirect product of', MathPlayer: 'produit semi-direct à droite de facteur normal', DeepL: 'le facteur normal droit produit semi-direct de') - "⋋": # 0x22cb - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "produit semi direct à gauche" # (en: 'the left semidirect product of', MathPlayer: 'produit semi-direct à gauche', DeepL: 'le produit semi-direct gauche de') + - T: "produit semi direct à gauche" # (en: 'the left semidirect product of', MathPlayer: 'produit semi-direct à gauche', DeepL: 'le produit semi-direct gauche de') - "⋌": # 0x22cc - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "produit semi direct à droite" # (en: 'the right semidirect product of', MathPlayer: 'produit semi-direct à droite', DeepL: 'le produit semi-direct droit de') + - T: "produit semi direct à droite" # (en: 'the right semidirect product of', MathPlayer: 'produit semi-direct à droite', DeepL: 'le produit semi-direct droit de') - "⋍": [T: "égal tilde renversé"] # 0x22cd (en: 'reversed tilde equals') - "⋎": [T: "ou logique recourbé"] # 0x22ce (en: 'curly logical or') - "⋏": [T: "et logique recourbé"] # 0x22cf (en: 'curly logical and') @@ -1224,74 +1224,74 @@ - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "sous ensemble double" # (en: 'a double subset of', MathPlayer: 'sous-ensemble double', DeepL: 'un double sous-ensemble de') + - T: "sous ensemble double" # (en: 'a double subset of', MathPlayer: 'sous-ensemble double', DeepL: 'un double sous-ensemble de') - "⋑": # 0x22d1 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "sur ensemble double" # (en: 'a double superset of', MathPlayer: 'sur-ensemble double', DeepL: 'un double superset de') + - T: "sur ensemble double" # (en: 'a double superset of', MathPlayer: 'sur-ensemble double', DeepL: 'un double superset de') - "⋒": # 0x22d2 - test: if: "$Verbosity!='Terse'" then: [T: "le"] # (en: 'the', DeepL translation) - - t: "intersection double" # (en: 'double intersection of') + - T: "intersection double" # (en: 'double intersection of') - "⋓": # 0x22d3 - test: if: "$Verbosity!='Terse'" then: [T: "le"] # (en: 'the', DeepL translation) - - t: "union double" # (en: 'double union of') + - T: "union double" # (en: 'double union of') - "⋔": # 0x22d4 - test: if: "$Verbosity!='Terse'" then: [T: "la"] # (en: 'the', DeepL translation) - - t: "fourche" # (en: 'proper intersection of') + - T: "fourche" # (en: 'proper intersection of') - "⋕": # 0x22d5 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "égal et parallèle à" # (en: 'equal to and parallel to') + - T: "égal et parallèle à" # (en: 'equal to and parallel to') - "⋖": [T: "inférieur à avec point"] # 0x22d6 (en: 'less than with dot') - "⋗": [T: "supérieur à avec point"] # 0x22d7 (en: 'greater than with dot') - "⋘": # 0x22d8 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "considérablement inférieur à" # (en: 'very much less than') + - T: "considérablement inférieur à" # (en: 'very much less than') - "⋙": # 0x22d9 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "considérablement supérieur à" # (en: 'very much greater than') + - T: "considérablement supérieur à" # (en: 'very much greater than') - "⋚": # 0x22da - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "inférieur ou égal ou supérieur à" # (en: 'less than equal to or greater than') + - T: "inférieur ou égal ou supérieur à" # (en: 'less than equal to or greater than') - "⋛": # 0x22db - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "supérieur ou égal ou inférieur à" # (en: 'greater than equal to or less than') + - T: "supérieur ou égal ou inférieur à" # (en: 'greater than equal to or less than') - "⋜": # 0x22dc - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "égal ou inférieur à" # (en: 'equal to or less than') + - T: "égal ou inférieur à" # (en: 'equal to or less than') - "⋝": # 0x22dd - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "égal ou supérieur à" # (en: 'equal to or greater than') + - T: "égal ou supérieur à" # (en: 'equal to or greater than') - "⋞": # 0x22de - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "égal ou précède" # (en: 'equal to or precedes') + - T: "égal ou précède" # (en: 'equal to or precedes') - "⋟": # 0x22df - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "égal ou suit" # (en: 'equal to or succeeds') + - T: "égal ou suit" # (en: 'equal to or succeeds') - "⋠": [T: "ni précédant ni égal à"] # 0x22e0 (en: 'does not precede nor is equal to') - "⋡": [T: "ni suivant ni égal à"] # 0x22e1 (en: 'does not succeed nor is equal to') - "⋢": [T: "ni image carrée de ni égal à"] # 0x22e2 (en: 'not square image of or equal to') @@ -1302,25 +1302,25 @@ - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "inférieur mais non équivalent à" # (en: 'less than but not equivalent to') + - T: "inférieur mais non équivalent à" # (en: 'less than but not equivalent to') - "⋧": # 0x22e7 - test: if: "$Verbosity!='Terse'" then: [T: "est"] # (en: 'is', DeepL translation) - - t: "supérieur mais non équivalent à" # (en: 'greater than but not equivalent to') + - T: "supérieur mais non équivalent à" # (en: 'greater than but not equivalent to') - "⋨": [T: "précédant mais non équivalent à"] # 0x22e8 (en: 'precedes but is not equivalent to') - "⋩": [T: "suivant mais non équivalent à"] # 0x22e9 (en: 'succeeds but is not equivalent to') - "⋪": # 0x22ea - test: if: "$Verbosity!='Terse'" then: [T: "n'est"] # (en: 'is', DeepL translation) - - t: "pas un sous groupe normal de" # (en: 'not a normal subgroup of', MathPlayer: 'pas un sous-groupe normal de', DeepL: 'n'est pas un sous-groupe normal de') + - T: "pas un sous groupe normal de" # (en: 'not a normal subgroup of', MathPlayer: 'pas un sous-groupe normal de', DeepL: 'n'est pas un sous-groupe normal de') - "⋫": [T: "ne contient pas comme sous groupe normal"] # 0x22eb (en: 'does not contain as a normal subgroup', MathPlayer: 'ne contient pas comme sous-groupe normal', DeepL: 'ne contient pas de sous-groupe normal') - "⋬": # 0x22ec - test: if: "$Verbosity!='Terse'" then: [T: "n'est"] # (en: 'is', DeepL translation) - - t: "ni sous groupe normal de ni égal à" # (en: 'not a normal subgroup of nor is equal to', MathPlayer: 'ni sous-groupe normal ni égal à', DeepL: 'n'est pas un sous-groupe normal de ni est égal à') + - T: "ni sous groupe normal de ni égal à" # (en: 'not a normal subgroup of nor is equal to', MathPlayer: 'ni sous-groupe normal ni égal à', DeepL: 'n'est pas un sous-groupe normal de ni est égal à') - "⋭": [T: "ni égal ni contenant comme sous groupe normal"] # 0x22ed (en: 'does not contain as a normal subgroup nor is equal to', MathPlayer: 'ni égal ni contenant comme sous- groupe normal', DeepL: 'ne contient pas de sous-groupe normal et n'est pas égal à') - "⋮": [T: "trois points suspendus"] # 0x22ee (en: 'vertical ellipsis') - "⋯": [T: "trois points médians"] # 0x22ef (en: 'dot dot dot') @@ -1414,7 +1414,7 @@ - "⏥": [T: "planéité"] # 0x23e5 (en: 'flatness', DeepL translation) - "⏦": # 0x23e6 - SPELL: "ac" - - t: "courant" # (en: 'current', DeepL translation) + - T: "courant" # (en: 'current', DeepL translation) - "⏧": [T: "intersection électrique"] # 0x23e7 (en: 'electrical intersection', DeepL translation) - "①-⑨": # 0x2460 - 0x2469 - SPELL: "translate('.', '①②③④⑤⑥⑦⑧⑨', '123456789')" @@ -1445,7 +1445,7 @@ - "⒇": [T: "vingt entre parenthèses"] # 0x2487 (en: 'parenthesized twenty', DeepL translation) - "⒈-⒐": # 0x2488 - 0x2491 - SPELL: "translate('.', '⒈⒉⒊⒋⒌⒍⒎⒏⒐', '123456789')" - - t: "avec point" # (en: 'with period', DeepL translation) + - T: "avec point" # (en: 'with period', DeepL translation) - "⒑": [T: "dix avec point"] # 0x2491 (en: 'ten with period', DeepL translation) - "⒒": [T: "onze avec point"] # 0x2492 (en: 'eleven with period', DeepL translation) - "⒓": [T: "douze avec point"] # 0x2493 (en: 'twelve with period', DeepL translation) From 66ee930b1971268f49a2485a835737b706558da3 Mon Sep 17 00:00:00 2001 From: Olivier Thiffault Date: Thu, 6 Aug 2026 13:45:35 -0400 Subject: [PATCH 53/53] fixed broken unit tests --- tests/Languages/fr/alphabets.rs | 2 +- tests/Languages/fr/shared.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Languages/fr/alphabets.rs b/tests/Languages/fr/alphabets.rs index b14926fc8..b94dae805 100644 --- a/tests/Languages/fr/alphabets.rs +++ b/tests/Languages/fr/alphabets.rs @@ -403,7 +403,7 @@ fn enclosed_numbers() -> Result<()> { let expr = " ,"; test("fr", "SimpleSpeak", expr, "1 encerclé virgule, 9 encerclé")?; let expr = " ,"; - test("fr", "SimpleSpeak", expr, "un encerclé de noir, virgule; numéro cinquante encerclé")?; + test("fr", "SimpleSpeak", expr, "un encerclé de noir, virgule; nombre cinquante encerclé")?; let expr = " ,"; test("fr", "SimpleSpeak", expr, "1 entre parenthèses, virgule, 9 entre parenthèses")?; let expr = " ,"; diff --git a/tests/Languages/fr/shared.rs b/tests/Languages/fr/shared.rs index b63588b52..a6a41d86a 100644 --- a/tests/Languages/fr/shared.rs +++ b/tests/Languages/fr/shared.rs @@ -21,7 +21,7 @@ fn modified_vars() -> Result<()> { x ^ + t "; - test("fr", "SimpleSpeak", expr, "a accent grave, b tilde, c diacritique brève; b diacritique caron; c accent grave; plus r caron plus; x point, y point en chef; z tréma; u V diacritique trois points en chef; v W diacritique quatre points en chef; plus x accent circonflexe; plus vecteur t")?; + test("fr", "SimpleSpeak", expr, "a accent grave, b tilde, c diacritique brève; b diacritique caron; c accent grave; plus r caron plus; x point, y point en chef; z tréma, u trois points, v quatre points; plus x accent circonflexe; plus vecteur t")?; Ok(()) }