From 1d28f85cd22e0df3e0fab67a13d79999c019e171 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20Gro=C3=9F?= Date: Thu, 2 Apr 2026 22:44:48 +0200 Subject: [PATCH 01/43] Correct image tag in README.md Fix HTML entities in the README file. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9351917e..de080bb0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # MathCAT: Math Capable Assistive Technology - +The MathCAT logo with a cat sitting on the text MathCAT is a library that supports conversion of MathML to: @@ -17,4 +17,4 @@ There are four related projects that make use of MathCAT: MathCAT is used in many assistive technologies including NVDA and JAWS. -For more information, see the [full documentation](https://nsoiffer.github.io/MathCAT/). \ No newline at end of file +For more information, see the [full documentation](https://nsoiffer.github.io/MathCAT/). From 40b8631ebde34b6c8a8bc95ed6413073b4c9f8cb Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Fri, 3 Apr 2026 12:45:36 -0700 Subject: [PATCH 02/43] Fix some problems with bad mmultiscripts. re-fixes #485 Fixes #544 Added/fixed tests for these. --- src/canonicalize.rs | 62 +++++++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/src/canonicalize.rs b/src/canonicalize.rs index 03eccde7..a9e70867 100644 --- a/src/canonicalize.rs +++ b/src/canonicalize.rs @@ -622,22 +622,11 @@ impl CanonicalizeContext { "munderover" | "msubsup" => if n_children != 3 { bail!("{} should have 3 children:\n{}", element_name, mml_to_string(mathml)); }, - "mmultiscripts" => { - let has_prescripts = mathml.children().iter() - .any(|&child| name(as_element(child)) == "mprescripts"); - if has_prescripts ^ (n_children.is_multiple_of(2)) { - bail!("{} has the wrong number of children:\n{}", element_name, mml_to_string(mathml)); - } - }, - "mlongdiv" => if n_children < 3 { - bail!("{} should have at least 3 children:\n{}", element_name, mml_to_string(mathml)); - }, _ => if n_children != 2 { bail!("{} should have 2 children:\n{}", element_name, mml_to_string(mathml)); }, } - } - if matches!(element_name, "mtd" | "mtr" | "mlabeledtr") { + } else if matches!(element_name, "mtd" | "mtr" | "mlabeledtr") { let parent_name = name(get_parent(mathml)); if (element_name == "mtr" || element_name == "mlabeledtr") && parent_name != "mtable" { bail!("Illegal MathML: {} is not a child of mtable. Parent is {}", element_name, mml_to_string(get_parent(mathml))); @@ -645,8 +634,18 @@ impl CanonicalizeContext { bail!("Illegal MathML: mtd is not a child of {}. Parent is {}", parent_name, mml_to_string(get_parent(mathml))); } } - let children = mathml.children(); - if element_name == "semantics" { + else if element_name == "mmultiscripts" { + let has_prescripts = mathml.children().iter() + .any(|&child| name(as_element(child)) == "mprescripts"); + if has_prescripts ^ (n_children.is_multiple_of(2)) { + bail!("{} has the wrong number of children:\n{}", element_name, mml_to_string(mathml)); + } + } else if element_name == "mlongdiv" { + if n_children < 3 { + bail!("{} should have at least 3 children:\n{}", element_name, mml_to_string(mathml)); + } + } else if element_name == "semantics" { + let children = mathml.children(); if children.is_empty() { return Ok( () ); } else { @@ -662,16 +661,16 @@ impl CanonicalizeContext { } return CanonicalizeContext::assure_mathml(presentation_element); } - } - if !IsNode::is_mathml(mathml) { + } else if !IsNode::is_mathml(mathml) { if element_name == "annotation-xml" { bail!("'annotation-xml' element is not child of 'semantics' element"); } else { bail!("'{}' is not a valid MathML element", element_name); } } + // valid MathML element and not a leaf -- check the children - for child in children { + for child in mathml.children() { CanonicalizeContext::assure_mathml( as_element(child) )?; } return Ok( () ); @@ -771,7 +770,8 @@ impl CanonicalizeContext { name(parent).to_string() }; let parent_requires_child = ELEMENTS_WITH_FIXED_NUMBER_OF_CHILDREN.contains(&parent_name) || - matches!(parent_name.as_ref(), "mtr" | "mlabeledtr" | "mtable"); + matches!(parent_name.as_ref(), "mtr" | "mlabeledtr" | "mtable") || + parent_name == "mmultiscripts"; // handle empty leaves -- leaving it empty causes problems with the speech rules if is_leaf(mathml) && !EMPTY_ELEMENTS.contains(element_name) && as_text(mathml).is_empty() { @@ -781,7 +781,9 @@ impl CanonicalizeContext { if mathml.children().is_empty() && !EMPTY_ELEMENTS.contains(element_name) { if element_name == "mrow" && mathml.attribute(INTENT_ATTR).is_none() { // if it is an empty mrow that doesn't need to be there, get rid of it. Otherwise, replace it with an mtext - if parent_name == "mmultiscripts" { // MathML Core dropped "none" in favor of , but MathCAT is written with + if parent_name == "mmultiscripts" && !mathml.preceding_siblings().is_empty() { + // MathML Core dropped "none" in favor of , but MathCAT is written with + // Do substitutions for the scripts, not the base set_mathml_name(mathml, "none"); return Some(mathml); } @@ -1112,6 +1114,7 @@ impl CanonicalizeContext { // cleaning children can add or delete subsequent children, so we need to constantly update the children (and mathml) let mut children = mathml.children(); let mut i = 0; + while i < children.len() { if let Some(child) = children[i].element() { match self.clean_mathml(child) { @@ -1418,7 +1421,7 @@ impl CanonicalizeContext { } - /// looks for pairs of (letter, pseudoscript) such as x' or p'q' all inside of a single token element + /// looks for pairs of (letter, pseudo-script) such as x' or p'q' all inside of a single token element fn split_apart_pseudo_scripts<'a>(mi: Element<'a>) -> Option> { static IS_DEGREES_C_OR_F: LazyLock = LazyLock::new(|| Regex::new(r"[°º][CF]").unwrap()); @@ -1562,7 +1565,7 @@ impl CanonicalizeContext { i += 2; } } - if new_children.len() == 1 { + if new_children.len() <= 2 { // base only, or base and mathml = as_element(new_children[0]); } else { mathml.replace_children(new_children); @@ -6754,9 +6757,20 @@ mod canonicalize_tests { #[test] fn empty_mmultiscripts_485() -> Result<()> { let test_str = " "; - let target_str = " -   - "; + let target_str = ""; // shouldn't get to the point of comparing because the input is illegal. + let err = are_strs_canonically_equal_result(test_str, target_str, &[]) + .expect_err("empty mmultiscripts should be rejected"); + assert!( + err.to_string().contains("mmultiscripts has the wrong number of children:\n "), + "unexpected error message: {err}" + ); + Ok(()) + } + + #[test] + fn empty_mmultiscripts_544() -> Result<()> { + let test_str = ""; + let target_str = "  "; are_strs_canonically_equal_result(test_str, target_str, &[]) } From 031f546ff2aabf7208e1115b89b2bf1ebb7ba2fd Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Fri, 3 Apr 2026 12:44:55 -0700 Subject: [PATCH 03/43] fix typos in comments --- src/chemistry.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/chemistry.rs b/src/chemistry.rs index f538bbe8..afce0197 100644 --- a/src/chemistry.rs +++ b/src/chemistry.rs @@ -858,7 +858,7 @@ fn likely_chem_equation(mathml: Element) -> isize { // mrow -- check the children to see if we are likely to be a chemical equation // concentrations should either be unscripted or have a superscript that isn't a charge - // they occur in mrows or mfracs + // they occur in an mrow or mfrac if IsBracketed::is_bracketed(mathml, "[", "]", false, true) { let parent_name = name(get_parent(mathml)); if parent_name == "mfrac" || parent_name == "mrow" || parent_name == "math" || @@ -1703,7 +1703,7 @@ pub fn likely_chem_element(mathml: Element) -> isize { if as_text(mathml).trim().is_empty() { return 0; // whitespace } else if is_chemical_element(mathml) { - // single letter = 1; single letter with mathvarinat="normal" = 2; double = 3 -- all elements are ASCII + // single letter = 1; single letter with mathvariant="normal" = 2; double = 3 -- all elements are ASCII return (if text.len() == 1 { if mathml.attribute_value("mathvariant").unwrap_or_default() == "normal" {2} else {1} } else { From b46db4aa36c5a25d719d02a061b7120361212032 Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Fri, 3 Apr 2026 15:46:33 -0700 Subject: [PATCH 04/43] Some fixes that I thought were part of 40b8631ebde34b6c8a8bc95ed6413073b4c9f8cb Small cleanup for dealing with U+2212 -> '-': something was fixed but code was left and commented out. Removing that simplifes the check. --- src/canonicalize.rs | 87 ++++++++++++++------------------------------- 1 file changed, 27 insertions(+), 60 deletions(-) diff --git a/src/canonicalize.rs b/src/canonicalize.rs index a9e70867..4d32f864 100644 --- a/src/canonicalize.rs +++ b/src/canonicalize.rs @@ -622,11 +622,22 @@ impl CanonicalizeContext { "munderover" | "msubsup" => if n_children != 3 { bail!("{} should have 3 children:\n{}", element_name, mml_to_string(mathml)); }, + "mmultiscripts" => { + let has_prescripts = mathml.children().iter() + .any(|&child| name(as_element(child)) == "mprescripts"); + if has_prescripts ^ (n_children.is_multiple_of(2)) { + bail!("{} has the wrong number of children:\n{}", element_name, mml_to_string(mathml)); + } + }, + "mlongdiv" => if n_children < 3 { + bail!("{} should have at least 3 children:\n{}", element_name, mml_to_string(mathml)); + }, _ => if n_children != 2 { bail!("{} should have 2 children:\n{}", element_name, mml_to_string(mathml)); }, } - } else if matches!(element_name, "mtd" | "mtr" | "mlabeledtr") { + } + if matches!(element_name, "mtd" | "mtr" | "mlabeledtr") { let parent_name = name(get_parent(mathml)); if (element_name == "mtr" || element_name == "mlabeledtr") && parent_name != "mtable" { bail!("Illegal MathML: {} is not a child of mtable. Parent is {}", element_name, mml_to_string(get_parent(mathml))); @@ -634,18 +645,8 @@ impl CanonicalizeContext { bail!("Illegal MathML: mtd is not a child of {}. Parent is {}", parent_name, mml_to_string(get_parent(mathml))); } } - else if element_name == "mmultiscripts" { - let has_prescripts = mathml.children().iter() - .any(|&child| name(as_element(child)) == "mprescripts"); - if has_prescripts ^ (n_children.is_multiple_of(2)) { - bail!("{} has the wrong number of children:\n{}", element_name, mml_to_string(mathml)); - } - } else if element_name == "mlongdiv" { - if n_children < 3 { - bail!("{} should have at least 3 children:\n{}", element_name, mml_to_string(mathml)); - } - } else if element_name == "semantics" { - let children = mathml.children(); + let children = mathml.children(); + if element_name == "semantics" { if children.is_empty() { return Ok( () ); } else { @@ -661,16 +662,16 @@ impl CanonicalizeContext { } return CanonicalizeContext::assure_mathml(presentation_element); } - } else if !IsNode::is_mathml(mathml) { + } + if !IsNode::is_mathml(mathml) { if element_name == "annotation-xml" { bail!("'annotation-xml' element is not child of 'semantics' element"); } else { bail!("'{}' is not a valid MathML element", element_name); } } - // valid MathML element and not a leaf -- check the children - for child in mathml.children() { + for child in children { CanonicalizeContext::assure_mathml( as_element(child) )?; } return Ok( () ); @@ -770,8 +771,7 @@ impl CanonicalizeContext { name(parent).to_string() }; let parent_requires_child = ELEMENTS_WITH_FIXED_NUMBER_OF_CHILDREN.contains(&parent_name) || - matches!(parent_name.as_ref(), "mtr" | "mlabeledtr" | "mtable") || - parent_name == "mmultiscripts"; + matches!(parent_name.as_ref(), "mtr" | "mlabeledtr" | "mtable"); // handle empty leaves -- leaving it empty causes problems with the speech rules if is_leaf(mathml) && !EMPTY_ELEMENTS.contains(element_name) && as_text(mathml).is_empty() { @@ -781,9 +781,7 @@ impl CanonicalizeContext { if mathml.children().is_empty() && !EMPTY_ELEMENTS.contains(element_name) { if element_name == "mrow" && mathml.attribute(INTENT_ATTR).is_none() { // if it is an empty mrow that doesn't need to be there, get rid of it. Otherwise, replace it with an mtext - if parent_name == "mmultiscripts" && !mathml.preceding_siblings().is_empty() { - // MathML Core dropped "none" in favor of , but MathCAT is written with - // Do substitutions for the scripts, not the base + if parent_name == "mmultiscripts" { // MathML Core dropped "none" in favor of , but MathCAT is written with set_mathml_name(mathml, "none"); return Some(mathml); } @@ -1114,7 +1112,6 @@ impl CanonicalizeContext { // cleaning children can add or delete subsequent children, so we need to constantly update the children (and mathml) let mut children = mathml.children(); let mut i = 0; - while i < children.len() { if let Some(child) = children[i].element() { match self.clean_mathml(child) { @@ -1421,7 +1418,7 @@ impl CanonicalizeContext { } - /// looks for pairs of (letter, pseudo-script) such as x' or p'q' all inside of a single token element + /// looks for pairs of (letter, pseudoscript) such as x' or p'q' all inside of a single token element fn split_apart_pseudo_scripts<'a>(mi: Element<'a>) -> Option> { static IS_DEGREES_C_OR_F: LazyLock = LazyLock::new(|| Regex::new(r"[°º][CF]").unwrap()); @@ -1565,7 +1562,7 @@ impl CanonicalizeContext { i += 2; } } - if new_children.len() <= 2 { // base only, or base and + if new_children.len() == 1 { mathml = as_element(new_children[0]); } else { mathml.replace_children(new_children); @@ -3432,28 +3429,9 @@ impl CanonicalizeContext { _ => mo_text, }; }; - mo_text = match mo_text { - "\u{2212}" => "-", - // FIX: this needs to be after all expr the "|" has been fully canonicalized. At this point, any parent mrow/siblings is in flux - // "\u{007C}" => { // vertical line -> divides - // if a number or variable (lower case single letter) precedes and follows "|", switch to divides (a bit questionable...) - // debug!("canonicalize_mo_text parent:\n{}", mml_to_string(parent)); - // let precedes = mo.preceding_siblings(); - // let follows = mo.following_siblings(); - // if precedes.is_empty() || follows.is_empty() { - // "\u{007C}" - // } else { - // let before = as_element(precedes[0]); - // let after = as_element(follows[0]); - // let before_ok = name(before) == "mn" || - // (name(before) == "mi" && IS_LIKELY_SCALAR_VARIABLE.is_match(as_text(before))); - // let after_ok = name(after) == "mn" || - // (name(after) == "mi" && IS_LIKELY_SCALAR_VARIABLE.is_match(as_text(after))); - // if before_ok && after_ok {"\u{2224}"} else {"\u{007C}"} - // } - // }, - _ => mo_text, - }; + if mo_text == "\u{2212}" { + mo_text = "-"; + } mo.set_text(mo_text); } @@ -6757,20 +6735,9 @@ mod canonicalize_tests { #[test] fn empty_mmultiscripts_485() -> Result<()> { let test_str = " "; - let target_str = ""; // shouldn't get to the point of comparing because the input is illegal. - let err = are_strs_canonically_equal_result(test_str, target_str, &[]) - .expect_err("empty mmultiscripts should be rejected"); - assert!( - err.to_string().contains("mmultiscripts has the wrong number of children:\n "), - "unexpected error message: {err}" - ); - Ok(()) - } - - #[test] - fn empty_mmultiscripts_544() -> Result<()> { - let test_str = ""; - let target_str = "  "; + let target_str = " +   + "; are_strs_canonically_equal_result(test_str, target_str, &[]) } From afb24de28b7ced7be3c5333b3a19601e3f603292 Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Fri, 3 Apr 2026 16:40:06 -0700 Subject: [PATCH 05/43] Fix #545 -- data-split not getting removed --- src/canonicalize.rs | 8 ++++++++ src/chemistry.rs | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/canonicalize.rs b/src/canonicalize.rs index 4d32f864..81459efd 100644 --- a/src/canonicalize.rs +++ b/src/canonicalize.rs @@ -2302,6 +2302,7 @@ impl CanonicalizeContext { while name(base) == "mrow" && base.children().len() == 1 { // the base may be wrapped with mrows base = as_element(base.children()[0]); + base.remove_attribute(SPLIT_TOKEN); } base.set_text(text); return Some(last_child); @@ -6488,6 +6489,13 @@ mod canonicalize_tests { are_strs_canonically_equal_result(test_str, target_str, &[]) } + #[test] + fn merge_mi_bug_545() -> Result<()> { + let test_str = "SIN-1"; + let target_str = "SIN-1"; + are_strs_canonically_equal_result(test_str, target_str, &[]) + } + #[test] fn parent_bug_94() -> Result<()> { // This is a test to make sure the crash in the bug report doesn't happen. diff --git a/src/chemistry.rs b/src/chemistry.rs index afce0197..1f81e9f5 100644 --- a/src/chemistry.rs +++ b/src/chemistry.rs @@ -635,7 +635,7 @@ fn is_changed_after_unmarking_chemistry(mathml: Element) -> bool { let split_child = as_element(children_of_script[0]); new_script_children.append(&mut children_of_script); mathml.replace_children(new_script_children); // temporarily has bad number of children - debug!("After making bad script:\n{}", mml_to_string(mathml)); + // debug!("After making bad script:\n{}", mml_to_string(mathml)); if let Err(err) = merge_element(split_child) { panic!("{}", err); } From 68671f41810d2012bbcf22e5337c40afb9f864a6 Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Fri, 3 Apr 2026 16:46:26 -0700 Subject: [PATCH 06/43] comment out some debug statements --- src/chemistry.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/chemistry.rs b/src/chemistry.rs index 1f81e9f5..30908194 100644 --- a/src/chemistry.rs +++ b/src/chemistry.rs @@ -1374,7 +1374,7 @@ pub fn likely_adorned_chem_formula(mathml: Element) -> isize { let mut empty_superscript = false; if tag_name == "msup" || tag_name == "msubsup" { - debug!("likely_adorned_chem_formula: mathml\n{}", mml_to_string(mathml)); + // debug!("likely_adorned_chem_formula: mathml\n{}", mml_to_string(mathml)); let superscript = as_element(children[if tag_name == "msup" {1} else {2}]); empty_superscript = name(superscript) == "mtext" && as_text(superscript).trim().is_empty(); if !empty_superscript { @@ -1485,7 +1485,7 @@ pub fn likely_adorned_chem_formula(mathml: Element) -> isize { likelihood += likely_chem_formula(base); } - debug!("returning from likely_adorned_chem_formula: likelihood={}, mathml\n{}", likelihood, mml_to_string(mathml)); + // debug!("returning from likely_adorned_chem_formula: likelihood={}, mathml\n{}", likelihood, mml_to_string(mathml)); return likelihood; From de0fc56ade3e2fb0db8f9030f3dee4ad66f7d167 Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Fri, 3 Apr 2026 12:45:36 -0700 Subject: [PATCH 07/43] Fix some problems with bad mmultiscripts. re-fixes #485 Fixes #544 Added/fixed tests for these. --- src/canonicalize.rs | 62 +++++++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/src/canonicalize.rs b/src/canonicalize.rs index 81459efd..04938f5e 100644 --- a/src/canonicalize.rs +++ b/src/canonicalize.rs @@ -622,22 +622,11 @@ impl CanonicalizeContext { "munderover" | "msubsup" => if n_children != 3 { bail!("{} should have 3 children:\n{}", element_name, mml_to_string(mathml)); }, - "mmultiscripts" => { - let has_prescripts = mathml.children().iter() - .any(|&child| name(as_element(child)) == "mprescripts"); - if has_prescripts ^ (n_children.is_multiple_of(2)) { - bail!("{} has the wrong number of children:\n{}", element_name, mml_to_string(mathml)); - } - }, - "mlongdiv" => if n_children < 3 { - bail!("{} should have at least 3 children:\n{}", element_name, mml_to_string(mathml)); - }, _ => if n_children != 2 { bail!("{} should have 2 children:\n{}", element_name, mml_to_string(mathml)); }, } - } - if matches!(element_name, "mtd" | "mtr" | "mlabeledtr") { + } else if matches!(element_name, "mtd" | "mtr" | "mlabeledtr") { let parent_name = name(get_parent(mathml)); if (element_name == "mtr" || element_name == "mlabeledtr") && parent_name != "mtable" { bail!("Illegal MathML: {} is not a child of mtable. Parent is {}", element_name, mml_to_string(get_parent(mathml))); @@ -645,8 +634,18 @@ impl CanonicalizeContext { bail!("Illegal MathML: mtd is not a child of {}. Parent is {}", parent_name, mml_to_string(get_parent(mathml))); } } - let children = mathml.children(); - if element_name == "semantics" { + else if element_name == "mmultiscripts" { + let has_prescripts = mathml.children().iter() + .any(|&child| name(as_element(child)) == "mprescripts"); + if has_prescripts ^ (n_children.is_multiple_of(2)) { + bail!("{} has the wrong number of children:\n{}", element_name, mml_to_string(mathml)); + } + } else if element_name == "mlongdiv" { + if n_children < 3 { + bail!("{} should have at least 3 children:\n{}", element_name, mml_to_string(mathml)); + } + } else if element_name == "semantics" { + let children = mathml.children(); if children.is_empty() { return Ok( () ); } else { @@ -662,16 +661,16 @@ impl CanonicalizeContext { } return CanonicalizeContext::assure_mathml(presentation_element); } - } - if !IsNode::is_mathml(mathml) { + } else if !IsNode::is_mathml(mathml) { if element_name == "annotation-xml" { bail!("'annotation-xml' element is not child of 'semantics' element"); } else { bail!("'{}' is not a valid MathML element", element_name); } } + // valid MathML element and not a leaf -- check the children - for child in children { + for child in mathml.children() { CanonicalizeContext::assure_mathml( as_element(child) )?; } return Ok( () ); @@ -771,7 +770,8 @@ impl CanonicalizeContext { name(parent).to_string() }; let parent_requires_child = ELEMENTS_WITH_FIXED_NUMBER_OF_CHILDREN.contains(&parent_name) || - matches!(parent_name.as_ref(), "mtr" | "mlabeledtr" | "mtable"); + matches!(parent_name.as_ref(), "mtr" | "mlabeledtr" | "mtable") || + parent_name == "mmultiscripts"; // handle empty leaves -- leaving it empty causes problems with the speech rules if is_leaf(mathml) && !EMPTY_ELEMENTS.contains(element_name) && as_text(mathml).is_empty() { @@ -781,7 +781,9 @@ impl CanonicalizeContext { if mathml.children().is_empty() && !EMPTY_ELEMENTS.contains(element_name) { if element_name == "mrow" && mathml.attribute(INTENT_ATTR).is_none() { // if it is an empty mrow that doesn't need to be there, get rid of it. Otherwise, replace it with an mtext - if parent_name == "mmultiscripts" { // MathML Core dropped "none" in favor of , but MathCAT is written with + if parent_name == "mmultiscripts" && !mathml.preceding_siblings().is_empty() { + // MathML Core dropped "none" in favor of , but MathCAT is written with + // Do substitutions for the scripts, not the base set_mathml_name(mathml, "none"); return Some(mathml); } @@ -1112,6 +1114,7 @@ impl CanonicalizeContext { // cleaning children can add or delete subsequent children, so we need to constantly update the children (and mathml) let mut children = mathml.children(); let mut i = 0; + while i < children.len() { if let Some(child) = children[i].element() { match self.clean_mathml(child) { @@ -1418,7 +1421,7 @@ impl CanonicalizeContext { } - /// looks for pairs of (letter, pseudoscript) such as x' or p'q' all inside of a single token element + /// looks for pairs of (letter, pseudo-script) such as x' or p'q' all inside of a single token element fn split_apart_pseudo_scripts<'a>(mi: Element<'a>) -> Option> { static IS_DEGREES_C_OR_F: LazyLock = LazyLock::new(|| Regex::new(r"[°º][CF]").unwrap()); @@ -1562,7 +1565,7 @@ impl CanonicalizeContext { i += 2; } } - if new_children.len() == 1 { + if new_children.len() <= 2 { // base only, or base and mathml = as_element(new_children[0]); } else { mathml.replace_children(new_children); @@ -6743,9 +6746,20 @@ mod canonicalize_tests { #[test] fn empty_mmultiscripts_485() -> Result<()> { let test_str = " "; - let target_str = " -   - "; + let target_str = ""; // shouldn't get to the point of comparing because the input is illegal. + let err = are_strs_canonically_equal_result(test_str, target_str, &[]) + .expect_err("empty mmultiscripts should be rejected"); + assert!( + err.to_string().contains("mmultiscripts has the wrong number of children:\n "), + "unexpected error message: {err}" + ); + Ok(()) + } + + #[test] + fn empty_mmultiscripts_544() -> Result<()> { + let test_str = ""; + let target_str = "  "; are_strs_canonically_equal_result(test_str, target_str, &[]) } From 20769fea0ab633f7bbcacd061910c5d3aa5f27e6 Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Mon, 6 Apr 2026 11:29:51 -0700 Subject: [PATCH 08/43] fix up grammar issue and also Orca mention --- docs/index.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/index.md b/docs/index.md index bc7335b5..0cdf8953 100644 --- a/docs/index.md +++ b/docs/index.md @@ -6,9 +6,9 @@ is a library that supports conversion of MathML to: * Braille (Nemeth, UEB Technical, and eventually other braille math codes) * Navigation of math (in multiple ways including overviews) -A goal of MathCAT is to be an easy to use library for screen readers and other assistive technology to use to produce high quality speech and/or braille from MathML. It is a follow-on project from MathPlayer (see below) and uses lessons learned from it to produce even higher quality speech, navigation, and braille. MathCAT takes advantage of some new ideas the [MathML Working Group](https://mathml-refresh.github.io/charter-drafts/math-2020.html) is developing to allow authors to express their intent when they use a notation. E.g., $(3, 6)$ could be a point in the plane or an open interval, or even a shorthand notation for the greatest common divisor. When that information is conveyed in the MathML, MathCAT will use it to generate more natural sounding speech. +A goal of MathCAT is to be an easy-to-use library for screen readers and other assistive technology to use to produce high quality speech and/or braille from MathML. It is a follow-on project from MathPlayer (see below) and uses lessons learned from it to produce even higher quality speech, navigation, and braille. MathCAT takes advantage of some new ideas that the [MathML Working Group](https://mathml-refresh.github.io/charter-drafts/math-2020.html) is developing to allow authors to express their intent when they use a notation. E.g., $(3, 6)$ could be a point in the plane or an open interval, or even a shorthand notation for the greatest common divisor. When that information is conveyed in the MathML, MathCAT will use it to generate more natural sounding speech. -Todo: incorporation of third party libraries to support a common subset of TeX math commands along with ASCIIMath. +To do: incorporation of third party libraries to support a common subset of TeX math commands along with ASCIIMath. # Documentation for different MathCAT Users @@ -22,7 +22,7 @@ There are many different audiences for MathCAT and each audience has different i # Some Technical Details MathCAT is written in Rust and can be built to interface with many languages. To date there are interfaces for: * [C/C++](https://github.com/NSoiffer/MathCATForC) -* [Python](https://github.com/NSoiffer/MathCATForPython) -- this is used by an [NVDA add-on](https://addons.nvda-project.org/addons/MathCAT.en.html). I hope to eventually get it incorporated into [Orca](https://help.gnome.org/users/orca/stable) which is written in Python. +* [Python](https://github.com/NSoiffer/MathCATForPython) -- this is used by an [NVDA add-on](https://addons.nvda-project.org/addons/MathCAT.en.html) and the Linux screen reader [Orca](https://help.gnome.org/users/orca/stable), both of which are written in Python. * [Java](https://github.com/mwhapples/MathCAT4J) -- this is currently being used to experiment with MathCAT in [BrailleBlaster](https://www.brailleblaster.org/). * [WebAssembly (Wasm, sort of JavaScript)](https://github.com/NSoiffer/MathCATDemo/) -- this is used for a web demo of MathCAT. @@ -54,22 +54,22 @@ A demo to show off some of MathCAT's features and also as an aid for debugging w Future work includes: -* More languages. If you would like to translate to a language that is not currently supported, please create an issue in the [MathCAT GitHub repo](https://github.com/daisy/MathCAT/issues) +* More languages. If you would like to translate to a language that is not currently supported, please create an issue in the [MathCAT GitHub repo](https://github.com/daisy/MathCAT/issues). * More braille language support. To add support for another braille code, I need three things: * a spec for the language * access to a braille expert in that language who can answer questions that I have about the spec * someone who is willing to copy at least 200 examples from the spec into a form that is used for tests (MathML, Unicode braille string). That might take 30 or more hours. - If you can bring together the required elements to help out, please create an issue in the [MathCAT GitHub repo](https://github.com/daisy/MathCAT/issues) + If you can bring together the required elements to help out, please create an issue in the [MathCAT GitHub repo](https://github.com/daisy/MathCAT/issues). * Conversion _from_ braille _to_ MathML * Work on 2D versions of the braille codes for use on multiline refreshable braille displays such as the Monarch and Canute 360. ## Why MathCAT? -MathCAT is a follow-on to MathPlayer. I developed MathPlayer's accessibility while at Design Science starting back in 2004 after I joined Design Science. At the time, MathPlayer was chiefly designed to be a C++ plugin to Internet Explorer (IE) that displayed MathML on web pages. For quite some time, it was the most complete MathML implementation available. The original work for display of math was done by Design Science's founder Paul Topping and its chief technology officer, the late Robert Miner. Eventually, for numerous reasons, IE withdrew the interface that MathPlayer used for display and did not implement a replacement as the world was moving towards using JavaScript in the browser and not allowing security threats posed by external code. This left MathPlayer as an accessibility-only library called by other programs (chiefly NVDA). MathPlayer was proprietary, but was given away for free. +MathCAT is a follow-on to MathPlayer. I developed MathPlayer's accessibility while at Design Science starting in 2004, shortly after I joined the company. At the time, MathPlayer was chiefly designed to be a C++ plugin to Internet Explorer (IE) that displayed MathML on web pages. For quite some time, it was the most complete MathML implementation available. The original work for display of math was done by Design Science's founder Paul Topping and its chief technology officer, the late Robert Miner. Eventually, for numerous reasons, IE withdrew the interface that MathPlayer used for display and did not implement a replacement as the world was moving towards using JavaScript in the browser and not allowing security threats posed by external code. This left MathPlayer as an accessibility-only library called by other programs (chiefly NVDA). MathPlayer was proprietary, but was given away for free. -In early 2017, I left Design Science. Later in the year, WIRIS bought Design Science. I volunteered to add bug fixes for free to MathPlayer and initially they were supportive of that. But when it came time to do a release, a number of the people around at the time of the buyout had left and the remaining team was not interested in supporting MathPlayer. That decision was not finalized until late 2020. In 2021, I started work on a replacement to MathPlayer. As a challenge, I decided to learn Rust and did the implementation in Rust. For those not familiar with Rust, it is a low level language that is type safe and memory safe, but not automatically garbage collected or reference counted. It is often touted as a safer replacement to C/C++. +In early 2017, I left Design Science. Later in the year, WIRIS bought Design Science. I volunteered to add bug fixes for free to MathPlayer and initially they were supportive of that. But when it came time to do a release, a number of the people around at the time of the buyout had left and the remaining team was not interested in supporting MathPlayer. That decision was not finalized until late 2020. In 2021, I started work on a replacement for MathPlayer. As a challenge, I decided to learn Rust and did the implementation in Rust. For those not familiar with Rust, it is a low-level language that is type safe and memory safe, but not automatically garbage collected or reference counted. It is often touted as a safer replacement for C/C++. Rust is quite efficient. On a Core i7-770K machine (higher end processor circa 2017), the moderate-size expression @@ -107,7 +107,7 @@ Rust is quite efficient. On a Core i7-770K machine (higher end processor circa 2 takes about 4ms to generate the ClearSpeak string "_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_" along with the Nemeth braille string "⠑⠘⠤⠹⠂⠌⠆⠼⠈⠡⠷⠹⠭⠤⠨⠍⠌⠨⠎⠼⠾⠘⠘⠆". -This time is split approximately: 2ms to clean up the MathML + 1ms for speech generation + 1ms for braille generation. This includes time to make sure all the rule files are up to date, which turns out is quite expensive. A preference can be set to turn the checks off (the file checks are mainly useful for debugging). With the check turned off, the time drops to 2.3ms. +This time is split approximately: 2ms to clean up the MathML + 1ms for speech generation + 1ms for braille generation. This includes time to make sure all the rule files are up to date, which turns out to be quite expensive. A preference can be set to turn the checks off (the file checks are mainly useful for debugging). With the check turned off, the time drops to 2.3ms. On a higher end (2025) Intel Core Ultra 9 285, the (single processor) time for generating speech + braille is ~1ms.
@@ -150,18 +150,18 @@ On a higher end (2025) Intel Core Ultra 9 285, the (single processor) time for g
MathCAT uses external rules to generate speech and braille. -These take about 40ms to load; this load only happens the first time the rules are used, or if the speech style, language, or other external preference is changed. An additional 50ms are required to load the full Unicode files for speech and braille, -but studies have shown that a vast majority of English K-14 math material uses a surprisingly small number of characters. +These take about 40ms to load; this load only happens the first time the rules are used, or if the speech style, language, or other external preference is changed. An additional 50ms is required to load the full Unicode files for speech and braille, but studies have shown that a vast majority of English K-14 math material uses a surprisingly small number of characters. Using open source math books, the initial load should cover at least 99.99% of the characters used in expressions encountered in English K-14 math textbooks. -The library is about ~3mb in size. +The library is ~3 MB in size. If you are working on an in-browser solution (i.e., you are using JavaScript or some other browser-based language), MathCAT is probably not the best tool for you (although I will probably factor the [MathCATDemo](https://github.com/NSoiffer/MathCATDemo/) into a JavaScript interface on which the demo is built). Instead, take a look at [Speech rule engine](https://github.com/zorkow/speech-rule-engine) (SRE) by Volker Sorge. It is written in TypeScript and will likely meet your needs for an in-browser solution unless braille is important; MathCAT supports multiple braille codes and at least for Nemeth Code, is higher quality. # Acknowledgements + Several people helped out in various ways with the project. I am very grateful for all their help! -* David Carlisle -- provided invaluable help figuring out some xpath matches +* David Carlisle -- provided invaluable help figuring out some XPath matches * Susan Jolly -- provided lots of patient guidance on Nemeth and UEB generation along with feedback on what is right and wrong. On top of that, she also guided me as I tried to work out chemistry heuristics. * Elaine A. Moore -- helped me to figure out what should and should not be said for chemistry, along with what makes sense as chemistry and what doesn't. * Richard Orme -- did all the work for the MathCAT NVDA settings dialog. @@ -173,7 +173,7 @@ Translators: * Chinese (Traditional) -- Hon-Jang Yang * Finnish -- Sami Määttä, Accessibility Library Celia, and Essi Viippola, freelancer * German -- Nazli Andjic, Robert Graf and Paul Libbrecht (IU International University of Applied Sciences) -* Indonesian -- Dr. Pinta Deniyanti Sampoerno, M.Si; Dr. Meiliasari, S.Pd., M.Sc; and Ari Hendarno, S.Pd., M.kom +* Indonesian -- Dr. Pinta Deniyanti Sampoerno, M.Si; Dr. Meiliasari, S.Pd., M.Sc; and Ari Hendarno, S.Pd., M.Kom. * Norwegian -- Marthe Gjelstad, National Library of Norway, Kvile * Spanish -- Noelia Ruiz Martínez (also helped with NVDA add-on development) and María Allo Roldán * Swedish -- Tim Arborealis Lötberg, Swedish Agency for Accessible Media (MTM) and Anders Eklund, SPSM @@ -194,6 +194,6 @@ I then joined Design Science, Inc (DSI) which had an interest in making math acc For more information about what happened to MathPlayer and how MathCAT came to be, see the [Why MathCAT?](#why-mathcat) section. -All along, I've been pushing to make math work on the web and make it accessible. While at Wolfram Research, I helped launch the W3C MathML effort and have been involved with the working group ever since. I currently co-chair the W3C Math Working Group. I've been a member on several other committees over the years pushing strongly to make sure they incorporated math accessibility into their standards. Some of these groups include NIMAS, EPUB, and PDF/UA. +All along, I've been pushing to make math work on the web and make it accessible. While at Wolfram Research, I helped launch the W3C MathML effort and have been involved with the working group ever since. I currently co-chair the W3C Math Working Group. I've been a member on several other committees over the years pushing strongly to make sure they incorporated math accessibility into their standards. Some of these groups include NIMAS, EPUB, and PDF/UA. I'm very honored that in 2023, the National Federation of the Blind gave me the $25,000 Jacob Bolotin award. I donated $15,000 of that to the _open collective_ to improve MathML support in browsers. [Click this link for how you can help improve MathML support in browsers](https://opencollective.com/mathml-core-support). From 6caf07fc592c749f86b13468056310e4dc04bc39 Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Mon, 6 Apr 2026 11:30:31 -0700 Subject: [PATCH 09/43] change the debugger --- .vscode/launch.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 881c2ee4..c36edbd2 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -6,7 +6,7 @@ "configurations": [ { "name": "(Windows) Launch", - "type": "cppvsdbg", // "lldb", + "type": "lldb", "request": "launch", "program": "${workspaceRoot}/target/debug/mathcat.exe", "args": [], @@ -16,7 +16,7 @@ }, { "name": "Run Test Debugger", - "type": "cppvsdbg", // "lldb", + "type": "lldb", "request": "launch", "program": "${workspaceRoot}/target/debug/mathcat.exe", "args": [], From 839156b21a3858db3a036187fd0db9cd1ba27170 Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Tue, 7 Apr 2026 12:59:22 -0700 Subject: [PATCH 10/43] update the Kurzweil description --- docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index 0cdf8953..c0b32a7c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -45,7 +45,7 @@ Some other screen readers that use MathCAT: * The Linux Orca screen reader incorporates MathCAT for speech, navigation, and braille. * Dolphin EasyReader uses MathCAT. -* Kurzweil 3000 makes use of MathCAT, and that support includes synchronized highlighting as the math is spoken. +* Kurzweil 3000 incorporates MathCAT’s speech and highlights the matching subexpression in dual colors as it is spoken, providing clear visual tracking for sighted users. * Microsoft Narrator has announced they will be using MathCAT in an upcoming version. [_Other companies_: if you have incorporated MathCAT into your product and would like to be mentioned here, please contact me by email or add an issue to update the documentation] From 564fb8d2b65314888540975c4044e623666bfe81 Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Tue, 7 Apr 2026 13:01:34 -0700 Subject: [PATCH 11/43] tweak the wording --- docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index c0b32a7c..4b510d69 100644 --- a/docs/index.md +++ b/docs/index.md @@ -41,7 +41,7 @@ MathCAT's Nemeth braille is substantially better than that provided by MathPlaye A number of other assistive technologies have incorporated MathCAT into their products. Notable among these is Vispero/JAWS. JAWS currently supports MathCAT's speech in English and Spanish; braille support includes Nemeth and UEB. Other languages and braille codes are on the way, so stay tuned. You can use all speech, navigation, and braille navigation commands that MathCAT provides from within the JAWS Math Viewer. MathCAT settings are available through the JAWS Settings Center. -Some other screen readers that use MathCAT: +Other assistive technology that use MathCAT: * The Linux Orca screen reader incorporates MathCAT for speech, navigation, and braille. * Dolphin EasyReader uses MathCAT. From 26629eb6f3f4507ee4ed1b03722a151f9a8f1701 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Arborealis=20L=C3=B6tberg?= <143188129+TimArborealis@users.noreply.github.com> Date: Tue, 14 Apr 2026 13:25:22 +0200 Subject: [PATCH 12/43] User guides in English & Swedish + Swedish settings dialogue I went over the English user guide for MathCAT and created a new version to replace the current one. I aimed to make it less technical and easier to read. See the file User_guide_for_MathCAT_en.md. Note that it was written a while ago, so it needs revising to account for - MathCAT now being native to NVDA, - an up-to-date means of contact, and - possibly new navigation features? (I decided it caused confusion to mention features not developed yet so I removed them at the time of writing). Please feel free to edit or add to it in any way. Anvandarguide_till_MathCAT_sv.md is a Swedish translation of the new, easy-to-read English user guide. Please notify me of changes to the English one and I can keep the Swedish one updated accordingly. nvda.mo is a Swedish translation of the NVDA settings dialogue. --- docs/Anvandarguide_till_MathCAT_sv.md | 129 ++++++++++++++++++++++++++ docs/User_guide_for_MathCAT_en.md | 129 ++++++++++++++++++++++++++ docs/nvda.mo | Bin 0 -> 7890 bytes 3 files changed, 258 insertions(+) create mode 100644 docs/Anvandarguide_till_MathCAT_sv.md create mode 100644 docs/User_guide_for_MathCAT_en.md create mode 100644 docs/nvda.mo diff --git a/docs/Anvandarguide_till_MathCAT_sv.md b/docs/Anvandarguide_till_MathCAT_sv.md new file mode 100644 index 00000000..33e2c70c --- /dev/null +++ b/docs/Anvandarguide_till_MathCAT_sv.md @@ -0,0 +1,129 @@ +# Användarguide till MathCAT + +MathCAT är ett verktyg som används ihop med en skärmläsare. Med hjälp av MathCAT kan du få matematiska uttryck upplästa. MathCAT gör också så att matematik kan visas på en punktskriftsskärm. + + +Just nu finns MathCAT på svenska bara tillgängligt om du använder skärmläsaren NVDA. [På NVDA:s hemsida kan du läsa om hur du laddar ner och använder NVDA (sidan är på engelska).](https://www.nvaccess.org/download/) Sedan behöver du ladda ner MathCAT som tillägg. [Här kan du ladda ner MathCAT som tillägg till NVDA (sidan är på engelska)](https://nvda-addons.org/). + +Om du använder JAWS kan du just nu bara använda MathCAT på engelska. Då kommer MathCAT inbyggt, du behöver alltså inte intstallera det som tillägg. + +## Börja använda MathCAT + +Använd skärmläsaren på en hemsida eller i en e-bok som vanligt. När du kommer till ett matematiskt uttryck kommer skärmläsaren att läsa upp det automatiskt. Om du vill undersöka uttrycket närmare kan du aktivera navigeringsläget genom att trycka mellanslag. I NVDA kan du också använda NVDA-tangenten+Alt+M. Om du vill lämna navigeringsläget kan du trycka Escape. + +### Här är de vanligaste tangentbordskommandona + +- För att gå vänster, höger, upp eller ner inne i ett matematiskt uttryck, använd piltangenterna. +- Inne i en tabell, gå mellan cellerna genom att trycka CTRL+piltangenterna. +- För att gå till början av ett uttryck, tryck Home. För att gå till slutet av ett uttryck, tryck End. +- För att höra din nuvarande position, tryck mellanslag. +- För att ändra navigeringsläge, tryck Shift+upp/ner. De olika navigeringslägena finns beskrivna här: Navigering. + +När du navigerar i ett uttryck kan du trycka CTRL+C för att kopiera MathML-koden för den aktuella delen av uttrycket. + +Det finns många fler möjligheter när du navigerar i matematiska uttryck. Alla funktioner finns beskrivna här: Alla navigeringskommandon. + +## Anpassa MathCAT efter dina behov + +Det finns många möjligheter för att ställa in MathCAT utifrån dina behov. Du hittar inställningarna genom att trycka NVDA-tangenten+N sedan Inställningar, sedan MathCAT Settings. Under Kategorier finns tre valmöjligheter: Tal, Navigering och Punktskrift. + +### Tal + +Du kan välja mellan följande inställningar för tal. Under varje inställning hittar du en lista över alla valmöjligheter med en kort beskrivning. Standardinställningen, den som gäller om du inte gör något val, står inom hakparenteser. + +- Funktionsnedsättning: + - \[Blindhet.\] Utläsningen är helt entydig. + - Synnedsättning. Utläsningen är kortare. + - Inlärningssvårigheter. Utläsningen är kortare. +- Språk: (standardinställningen är samma som språket som skärmläsaren är inställd på) + - Engelska (en) + - Spanska (es) + - Indonesiska (id) + - \[Svenska (sv)\] + - Vietnamesiska (vi) + - Kinesiska, traditionell (zh-tw) +- Tal-läge: + - \[ClearSpeak.\] Uttryck läses upp ungefär som läraren hade sagt dem i ett klassrum. + - SimpleSpeak. Uttrycken läses upp mer kortfattat. Utläsningen är inte alltid entydig. +- Pratighet: + - Kortfattad. ”Extra” ord som t.ex. ”ur” i ”kvadratroten ur x” har tagits bort. Utläsningen är inte alltid entydig och ibland blir grammatiken konstig. + - \[Medium.\] En kompromiss mellan kortfattad och pratig. + - Pratig. Allt läses ut. Utläsningen är entydig. +- Relativ hastighet: + - \[100\], kan justeras mellan 1 och 1000. Ändrar hur snabbt matte läses upp jämfört med skärmläsarens hastighet. Siffran betyder procent. 100 motsvarar samma hastighet, mindre blir långsammare och mer blir snabbare. +- Pausfaktor: + - \[1\], kan justeras mellan 0 och 10. Ändrar hur långa pauserna blir när matteuttryck läses upp. +- Matteljud: + - \[Inget.\] + - Pip. Ett pipljud spelas upp före och efter varje matteuttryck. +- Kemi: + - \[Läs ut.\] Kemiska formler läses ut, t.ex. ”H två O” för $H_2O$. + - Av. ”H nedsänkt 2 O” för $H_2O$. + +### Navigering + +Med hjälp av MathCAT kan du undersöka ett uttryck närmare genom att navigera i det, det vill säga gå runt och läsa en bit i taget. I inställningarna för Navigering kan du välja hur det ska gå till, och hur detaljerad information du vill ha. + +Under varje inställning hittar du en lista över alla valmöjligheter med en kort beskrivning. Standardinställningen, den som gäller om du inte gör något val, står inom hakparenteser. + +- Navigeringsläge som används när du börjar gå in i ett uttryck: + - \[Översiktligt.\] Gå mellan matematiska bitar av ett uttryck (t.ex. täljare, nämnare, exponenter, uttryck inom parenteser). + - Enkelt. Gå mellan ord, förutom när du kommer till ett avgränsat uttryck, t.ex. ett rotuttryck. Då läses hela det uttrycket upp. + - Teckenläge. Gå mellan ord eller tal. Zooma in för att läsa upp varje bokstav eller siffra för sig. + +Om du vill ändra navigeringsläge medan du går runt i ett uttryck kan du trycka Shift+Uppåtpil för att gå till Översiktligt från Enkelt (eller från Teckenläge till Enkelt). Om du trycker Shift+Nedåtpil går du från Översiktligt till Enkelt (eller från Enkelt till Teckenläge). Uppåt ger alltså mer översikt medan nedåt går djupare in i detalj. + +Det finns också en ruta som du kan kryssa i för att navigeringsläget ska återställas varje gång du går in i ett uttryck. Som standard är den inte ikryssad. + +- Utläsning som används när du börjar gå runt i ett uttryck: + - \[Läs upp.\] Läser upp den del av uttrycket där du befinner dig. + - Beskriv/översikt. Ger en översikt över det aktuella uttrycket. + +Det finns också en ruta som du kan kryssa i för att utläsningsläget ska återställas varje gång du går in i ett uttryck. Som standard är den ikryssad. + +- Zooma ut automatiskt när en bit av ett uttryck (t.ex. en rot) har lästs upp. + - \[På.\] (rutan ikryssad) + - Av. (inte ikryssad) +- Pratighet för navigering: + - Kortfattad. ”Extra” ord som t.ex. ”ur” i ”kvadratroten ur x” har tagits bort. Utläsningen är inte alltid entydig och ibland blir grammatiken konstig. + - \[Medium.\] En kompromiss mellan kortfattad och pratig. + - Pratig. Allt läses ut. Utläsningen är entydig. + +### Punktskrift + +Du kan välja mellan följande inställningar för punktskrift. Under varje inställning hittar du en lista över alla valmöjligheter. Standardinställningen, den som gäller om du inte gör något val, står inom hakparenteser. + +- Varianter av punktskriftsnotation för matematik som visas på punktskriftsskärmen: + - CMU. + - \[Nemeth.\] + - Svenska. + - UEB. + - Vietnam. +- Punkt 7 & 8 markerar följande position i navigeringsläget: + - Av. + - Första tecknen. + - \[Ändpunkterna.\] + - Alla. + +## Alla navigeringskommandon + +Tabellen visar alla kommandon du kan använda för att navigera i matematiska uttryck. I första kolumnen står namnet på en tangent. I andra kolumnen beskrivs vad som händer om du trycker på tangenten. I tredje kolumnen beskrivs vad som händer om du håller ner Control och sedan trycker på tangenten. I fjärde kolumnen beskrivs vad som händer om du håller ner Shift och sedan trycker på tangenten. I femte kolumnen beskrivs vad som händer om du håller ner Control och Shift och sedan trycker på tangenten. + +OBS: Instruktionen för matriser gäller också för ekvationssystem och liknande uppställningar. De går att navigera i som om de vore tabeller. + +| Tangent | Enbart tangenten | +Ctrl | +Shift | +Ctrl+Shift | +| --- | --- | --- | --- | --- | +| Vänsterpil | Gå till föregående | I tabell: gå till föregående cell

I matris: gå till föregående element

(Ctrl+Alt+Vänsterpil kan också användas) | Läs föregående | Beskriv föregående | +| Högerpil | Gå till nästa | I tabell: gå till nästa cell

I matris: gå till nästa element

(Ctrl+Alt+Högerpil kan också användas) | Läs nästa | Beskriv nästa | +| Uppåtpil | Zooma ut | I tabell: gå till cellen över

I matris: gå till elementet över

(Ctrl+Alt+Uppåtpil kan också användas) | Ändra navigeringsläge till mer översiktligt | Zooma ut hela vägen | +| Nedåtpil | Zooma in | I tabell: gå till cell under
I matris: gå till elementet under

(Ctrl+Alt+Nedåtpil kan också användas) | Ändra navigeringsläge till mer detaljerat | Zooma in hela vägen | +| Enter | Nuvarande position (aktuella delen av uttrycket) | Nuvarande position (hela uttrycket) | | | +| Siffror 1-10 (0 är 10) | Gå till markör | Placera ut markör | Läs upp markör | Beskriv markör | +| Mellanslag | Läs nuvarande | Läs nuvarande cell | Ändra tal-läge till Läs eller Beskriv | Beskriv nuvarande | +| Home | Gå till början av uttrycket | Gå till början av raden | I matris: Gå till början av kolumnen

I kolumn: Gå till översta elementet | | +| End | Gå till slutet av uttrycket | Gå till slutet av raden | I matris: Gå till slutet av kolumnen

I kolumn: Gå till nedersta elementet | | +| Backsteg | Gå tillbaka till senaste positionen | | | | + +## Har du synpunkter eller behöver du hjälp? + +MathCAT är ett verktyg som från början är utvecklat på engelska. Myndigheten för tillgängliga medier (MTM) och Specialpedagogiska Skolmyndigheten (SPSM) har översatt det till svenska. Har du synpunkter på översättningen, eller behöver du hjälp med att börja använda MathCAT? Kontakta oss gärna på [info@mtm.se](mailto:info@mtm.se) eller [spsm@spsm.se](mailto:spsm@spsm.se). Skriv MathCAT i ärenderaden på ditt mejl. \ No newline at end of file diff --git a/docs/User_guide_for_MathCAT_en.md b/docs/User_guide_for_MathCAT_en.md new file mode 100644 index 00000000..c63431a8 --- /dev/null +++ b/docs/User_guide_for_MathCAT_en.md @@ -0,0 +1,129 @@ +# User guide for MathCAT + +MathCAT is a tool used together with a screen reader. Through MathCAT, you can have mathematical expressions read aloud. MatCAT can also make mathematics accessible through a braille display. + + +If you are using the screen reader NVDA you have to download MathCAT as an addon. [You can download MathCAT as an addon for NVDA here.](https://nvda-addons.org/) + +If you are using JAWS, MathCAT comes built-in, which means you don’t have to install it as an addon. + +## Get started with MathCAT + +Use your screen reader on a web page or in an e-book as usual. When you get to a mathematical expression, the screen reader will read it out automatically. If you want to investigate the expression more closely you can activate the navigation mode by pressing Space. In NVDA, the NVDA-key+Alt+M can also be used. If you want to leave the navigation mode, press Escape. + +### The most common keyboard shortcuts are these + +- Move left, right, upp or down inside a mathematical expression, use the arrow keys. +- Inside a table, move between cells by using CTRL+arrow keys. +- Move to the beginning of an expression by pressing Home. Move to the end of an expression by pressing End. +- To hear your current position, press Space. +- To change navigation mode, press Shift+up/down. The navigation modes are described here: Navigation + +When you navigate inside an expression you can use CTRL+C to copy the MathML code for the current node of the expression. + +There are many more possibilities when you navigate inside mathematical expressions. All features are described here: All navigation commands + +## Adapt MathCAT to your needs + +There are many possibilities to adjust MathCAT to fit your needs. You can find the settings by pressing the NVDA-key+N, then Settings, then MathCAT settings. Below Categories there are three options: Speech, Navigation and Braille. + +### Speech + +You can choose between the following settings for speech. Below each setting you can find a list of all options with a short description. The default setting, the one that is active if you don’t make a choice, is written inside square brackets. + +- Disability: + - \[Blindness.\] The readout is unambiguous. + - Low vision. The readout is shorter. + - Learning disability. The readout is shorter. +- Language: (the default setting is the same as the language the screen reader is set to) + - \[English (en)\] + - Spanish (es) + - Indonesian (id) + - Swedish (sv) + - Vietnamese (vi) + - Chinese, traditional (zh-tw) +- Speech style: + - \[ClearSpeak.\] Expressions are spoken approximately like a teacher would have said them in a classroom. + - SimpleSpeak. Expressions are spoken more concicely. The reading is sometimes ambiguous. +- Verbosity: + - Terse. “Extra” words such as “the” and “of” in “the square root of x” have been removed. + - \[Medium.\] A compromise between Terse and Verbose. + - Verbose. Everything is read out. The readout is unambiguous. +- MathRate: + - \[100\], can be adjusted between 1 and 1000. Changes how fast math is spoken compared with the screen reader’s velocity. The number means percent. 100 corresponds to the same speed, less means slower and more means faster. +- Pause factor: + - \[1\], can be adjusted between 0 and 10. Changes how long the pauses are when math is read out. +- Math Sound: + - \[None.\] + - Beep. A beep is played before and after every math expression. +- Chemistry: + - \[Read out.\] Chemical formulae are read out, e.g. “H two O” for $H_2O$. + - Off. “H sub 2 O” for $H_2O$. + +### Navigation + +Through MathCAT you can investigate an expression in detail by navigating inside it, that is, moving around and reading it piece-by-piece. In the settings for Navigation you can choose how to do this, and how detailed information you want. + +Below each setting you can find a list of all options with a short description. The default setting, the one that is active if you don’t make a choice, is written inside square brackets. + +- Navigation mode used when you enter an expression: + - \[Enhanced mode.\] Move between mathematically meaningful parts of an expression (e.g. numerator, denominator, exponents, expressions within parentheses). + - Simple mode. Move between words, except when you get to a defined expression, e.g. a square root. Then the entire expression is read out. + - Character mode. Move between words or numbers. Zoom in to read each letter or digit separately. + +If you want to change navigation mode while navigating an expression you can use Shift+Up to go to Enhanced from Simple (or from Character mode to Simple). If you use Shift+Down you go from Enhanced to Simple (or from Simple to Character mode). I.e., upwards means overview while downwards means more detailed. + +There is also a tick box which you can select for the navigation mode to reset every time you enter an expression. By default it is not selected. + +- Speech after move mode: + - \[Read.\] Reads out the part of the expression where you are. + - Describe. Gives an overview of the selected expression. + +There is also a tick box which you can select for the speech after move mode to be reset every time you enter an expression. By default it is selected. + +- Zoom out automatically when part of an expression (e.g. a root) has been read out. + - \[On.\] (box selected) + - Off. (box not selected) +- Verbosity for navigation: + - Terse. “Extra” words such as “the” and “of” in “the square root of x” have been removed. + - \[Medium.\] A compromise between Terse and Verbose. + - Verbose. Everything is read out. The readout is unambiguous. + +### Braille + +You can choose between the following settings for braille. Below each setting you can find a list of all options. The default setting, the one that is active if you don’t make a choice, is written inside square brackets. + +- Braille notation for mathematics to be shown on the braille display: + - CMU. + - \[Nemeth.\] + - Swedish. + - UEB. + - Vietnam. +- Dot 7 & 8 mark the following position in the navigation mode: + - Off. + - The first characters. + - \[End points.\] + - All. + +## All navigation commands + +The table shows all the commands you can use for navigating inside a mathematical expression. In the first column is the name of a key. In the second column is described what happens if you press the key. In the third column is described what happens if you press Control and then the key. In the fourth column is described what happens if you press Shift and then the key. In the fifth column is described what happens if you press Control and Shift and the key. + +Note: tabular math means mathematical content in a table structure such as a matrix or a system of equations. They can be navigated like a table. + +| Key | Unmodified | \+ Ctrl | \+ Shift | +Cntrl+Shift | +| --- | --- | --- | --- | --- | +| Left | Move to previous | In table: move to previous cell In tabular math: move to previous element
Note: Ctrl+Alt+Left can also be used | Read previous | Describe previous | +| Right | Move to next | In table: move to next cell
In tabular math: move to next element
Note: Ctrl+Alt+Right can also be used | Read next | Describe next | +| Up | Zoom out | In table: move to cell above
In tabular math: move to element above
Note: Ctrl+Alt+Up can also be used | Change Navigation Mode (Enhanced/Simple/Character) to larger | Zoom out all the way | +| Down | Zoom in | In table: move to cell below
In tabular math: move to element below
Note: Ctrl+Alt+Down can also be used | Change Navigation Mode (Enhanced/Simple/Character) to smaller | Zoom in all the way | +| Enter | Where am I | Global Where am I |   |   | +| Numbers
1-10 (0 is 10) | Jump to Place Marker | Set placemarker | Read Placemarker | Describe Placemarker | +| Space | Read current | Read Current cell | Toggle “speech mode” to read or describe | Describe current | +| Home | Move to start of expression | Move to start of line | In tabular math: Move to start of column

In column: Move to element at top | | +| End | Move to end of expression | Move to end of line | In tabular math: Move to end of column

In column: Move to element at bottom | | +| Backspace | Move back to last position | | | | + +## Do you have feedback on MathCAT? + + \ No newline at end of file diff --git a/docs/nvda.mo b/docs/nvda.mo new file mode 100644 index 0000000000000000000000000000000000000000..16646599b2d3bbf99f1379aff2f6c245a15e2623 GIT binary patch literal 7890 zcmcJTUyL199mfv{{#ii~MFj4u^|D>qwp&`dOE=wZZ8QPr-Z^{k^v<0b z=FGkALeQANlZhcQ^5C1Meb9tAQzMB{xG_c_jERwi#AtXiAtv%W1>SO#QU}0$!F!R72afXm{3r7ByadX+pMoO8UxJT-{{@+@9)>BA(?L-9 zJHo%4!PB7Z>x1Lq)8Hid6Hw0oXHewz4^ZU$&*J$%;9Wdle`}5!6nb-@tXl--+)sdq zKnu$HpMjqTe*uboUI#@kZ-CR_-@t|Il)4ilck=v=+mIRf47iU2{05Zy@4&R2_xjJ| z=e-#e{ValrOq~KnKOQLj|DYKEVSz7!vj5LPk@G8{@ckAj=eX{(Io<-U@_ZNgD42rt z;LG4i@NE!Ls1u*d={*TTLN!6z_nY7>_&itxUj;=E?|>{-*WIBMM^<-$qTl;LS>FN| zz;A(%p}=2*dw9MT=McIzP|iOOihLKrhrt&>(f1z;{39rOcnuV}{2fGu>R;eNa0Dd^ zE`dV-1yJa}42nEo0fpb+fufJ!gQCYbLD~PU0{;z)9B#ZjKgaE$yk7zD1D^ne?sK5X z{X5_s_&pGHyG!^UCh$j54_24a_AEM8PWk%!pu{l(Zg_$6+Ui=0(1(V@soE;+Br zUi2WB$X|2s<(BI!+z)YM67CXzmrLw?k{cIxF+=3Jn;X|xySPPu5<6zOH?CbvUe-D^ zzp7VEmIYDMR;yJto20Rg{dJvsnK>|e=FFM1 zUN0YK#|r{;n@K$*6rU}qt)*Tg3*tzh3$m7ux*fyYIMuWD)Oc;31syhjCh@w~Jh{fy zIDK+@V&d739UY(3o37c8m$r4}$&#g+>0o+#UtHNM6KAcrUh%9BqRga8YBC-Uj5b=H z>~2y!I(L3{JfAbCvslYHx1_djt8KR>9u0`kCapL!9izQ4X?b;%9T*J~Z&W9(1EZsJ zm8^x_@)=hgFNx2Ys|sdvYJVY^EqR|2-kp-RKHG!5pWGzUo$0}geC?Yk?gUY;ysZ>5 zIq{xkw?oBDPQEAV?@cqgCN_!cDi*tqVkW1AcZ7%kY^|Ef>1))@Oz9&A)ol3K)mYqD zIF*_YLp7fy;kugdW^u>Mf`)!NjypQ;I)|S+tfM$%IF7737zU9a8OyKK3&PNps9D(3 zjo3GO4R=n>T52o?9~$ikHVM6TTT_R;s9{1NGtD>+j0}}NsSbrfQjfjVSBK(c9k=cU zO}8rq8%PQ_ZEQ?AY-}S9>SjFdnY0&}b7~>-lNf)u{A$TQzFJ6ASP3Fscf1nm9G5k1 zjnR*vK0L3Dn-RuM$Fy%U&IEySUCF~WFSH54?ArIUnU_jH9zHxFS46ul(?^2TW_lyU zsYgvjXblU@h~tSdjg}m=rjD90QAdMjE9B1dSnS7{)eq`jyYzk+4;$SyHBlzKU;w_U zsblE7>4jR-$I>E{x{<#vUyEMU?0QX>FB&h6R}aD0buT7lP zR_N+;EfeWdAmf;IDbC^`%+8b8GPY*mv;nblEQlcPg~8K>0ijm2J*yk5EnK7qqiqnm z5rJ5=yj;eN3CZVL0fKCiU+M-XIZh*v&|BB|)sZqv9LqEbu^0HpmZF!inVTZo=q5>= zW@B0gz0k(xh#lH#6svEg7;6XlTgkqqMaI!!r&USPxpGO>h;>~DR(w`J)eTTQd^Y2l zT{e*})~uUsY=i4MJ}=2|6PrS?)8)`4F!HBkI*1x!*PSjuij&gg2rO%j=~D{_^(y8T z1r0A8(}$K$>D?=d7X`L8zRbD1&91R#&tPK_!|A|elFjX4e-}`&g2*Q@*s5Mly~u`n zFp`LHs1*>6jNZ))ADzdM7w#F;$0DDsYXdJD)5W&Aq=&XJ=L4H<99;H~IeDtH;Vq={ zA%LLCCh^QxOAEv7bBW8kQdny#QB&+>X;Cd1Kj?PU;~P*S- zS+dQ*uN>?)ZDlpC>8R&>m0^2-q?yLu#8!iNWcftpq{#zw<*-52TbY=tOit;^ zncCio2PUQ_CPo%Ln^j7;B)90*prhvzDvvJ~c5Iy8l9_D%A)asGS{=q!)V)8;| zAtHv5J8F7=J;+ARRPw|~V^Pz~FFVC<-Vs%{MU`Wb&H5L@P#n@r-?cev_dFl} zNMjh&-IUHK(8XBU8*L2ipgZz|T-v&W4axpzvASqy1$mit3f!_Cxc0_~xZdhtI!i{N z(%ZUF{lEL8tDSF~GWvt-Z(=fC)W6V)at(Yi-OUc9`#v-|@7`8#Bi#?ONwFa@cEjFx z+NF3BDBHPfs;|+Zcp5Tgw6$$ARR2OsPSQBKrfQ{DVFnqh(WY8Ub=bdPsc{i}-p8~| zrk1-=JG1RHSi9`EEn6O{(T>!o6i-S2qD}_Wt!=X%^8eG9{K52vS4(SMU-Aq*A>YQQLu7QGU2;^KY@ej%HJut;lAxAE0v?CKq zAKd9*h}030Fe%iM%WeNcmI=SKOlJwnNp3IFCebBHTtJ_x>`kTMY*8Y}TNaa6C@Ln&0EcF^UN3!5w<23+zHu~c_r44A8yV+~pNm>UpcFlMD9D^@uR zAMA-YaI(i zygFhXgvh(PNCl4MI6>5w4ofU7Ke1c5U5jPgUeRLFRr4^^WbvUSZ?I(CZDD(yir+)r z*s|R+X;lxOUa!%kSe?fskJ#!W3ZFS>w1mcPD#^SDGodtLd?|8G81Ketm#D|&$7MV) zUN9i%g}zML=*iqzDEdy){>8QvlLX;r|67l&3Z>y(9ymx< z3sKvInOY?HyX?Elcd2DcXLp?39R?m)Q^#rE$ee!vo6mJ7Ig3~> zH5=aS)Q2-U2W``v){RK3(;i+}4`cnn~ literal 0 HcmV?d00001 From b1ec36b3288d8408546101bdb8ffd9408b520504 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20Gro=C3=9F?= Date: Wed, 22 Apr 2026 04:56:32 +0200 Subject: [PATCH 13/43] Change `isize` to `i32` (#550) * Change `isize` to `i32` for better consistency and alignment with expected use cases. * fix clippy --- src/canonicalize.rs | 2 +- src/chemistry.rs | 42 +++++++++++++++++++----------------------- 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/src/canonicalize.rs b/src/canonicalize.rs index 04938f5e..e1a26353 100644 --- a/src/canonicalize.rs +++ b/src/canonicalize.rs @@ -3671,7 +3671,7 @@ impl CanonicalizeContext { if state_likelihood > 0 { right_sibling.set_attribute_value(MAYBE_CHEMISTRY, state_likelihood.to_string().as_str()); // at this point, we know both node and right_sibling are positive, so we have at least a maybe - if state_likelihood + node_chem_likelihood.unwrap().parse::().unwrap() > 2 { + if state_likelihood + node_chem_likelihood.unwrap().parse::().unwrap() > 2 { return FunctionNameCertainty::False; } else { return FunctionNameCertainty::Maybe diff --git a/src/chemistry.rs b/src/chemistry.rs index 30908194..9fdf621c 100644 --- a/src/chemistry.rs +++ b/src/chemistry.rs @@ -51,9 +51,9 @@ use crate::errors::*; use std::sync::LazyLock; -pub static NOT_CHEMISTRY: isize = -10000; // should overwhelm any positive signal -static NOT_CHEMISTRY_THRESHOLD: isize = -10000/2; // value for testing -- that way some can be added to NOT_CHEMISTRY and still meet the test -static CHEMISTRY_THRESHOLD: isize = 5; // if this changes, change CHEMISTRY_THRESHOLD_STR +pub static NOT_CHEMISTRY: i32 = -10000; // should overwhelm any positive signal +static NOT_CHEMISTRY_THRESHOLD: i32 = -10000/2; // value for testing -- that way some can be added to NOT_CHEMISTRY and still meet the test +static CHEMISTRY_THRESHOLD: i32 = 5; // if this changes, change CHEMISTRY_THRESHOLD_STR /// this might be chemistry -- should only exist during canonicalization @@ -471,12 +471,8 @@ pub fn scan_and_mark_chemistry(mathml: Element) -> bool { } // returns the marked attr value or None -fn get_marked_value(mathml: Element) -> Option { - if let Some(value) = mathml.attribute_value(MAYBE_CHEMISTRY) { - return Some(value.parse().unwrap()); - } else { - return None; - } +fn get_marked_value(mathml: Element) -> Option { + return mathml.attribute_value(MAYBE_CHEMISTRY).map(|value| value.parse().unwrap()); } /// Sets the attr 'chem' @@ -848,7 +844,7 @@ fn is_chemistry_sanity_check(mathml: Element) -> bool { /// Looks at the children of the element and uses heuristics to decide whether this is a chemical equation. /// This assumes canonicalization of characters has happened -fn likely_chem_equation(mathml: Element) -> isize { +fn likely_chem_equation(mathml: Element) -> i32 { // mfrac -- could be a ratio of concentrations if name(mathml) != "mrow" && name(mathml) != "mtd" && name(mathml) != "mfrac" { return NOT_CHEMISTRY; @@ -953,7 +949,7 @@ fn likely_chem_equation(mathml: Element) -> isize { /// could be a number, a state ("(l)", "(g)", etc), or a number followed by a state -fn likely_chem_subscript(subscript: Element) -> isize { +fn likely_chem_subscript(subscript: Element) -> i32 { let subscript_name = name(subscript); if subscript_name == "mn" && !as_text(subscript).contains('.') { return 0; // not really much chem info about an integer subscript @@ -990,7 +986,7 @@ fn small_roman_to_number(text: &str) -> &str { } -fn likely_chem_superscript(sup: Element) -> isize { +fn likely_chem_superscript(sup: Element) -> i32 { // either one or more '+'s (or '-'s) or a number followed by +/- // also could be state (en.wikipedia.org/wiki/Nuclear_chemistry#PUREX_chemistry) // bullet is radical (en.wikipedia.org/wiki/Radical_(chemistry)#Depiction_in_chemical_reactions); mhchem uses dot operator @@ -1055,7 +1051,7 @@ fn likely_chem_superscript(sup: Element) -> isize { child.set_attribute_value(CHEM_FORMULA_OPERATOR, "1"); // value doesn't really matter } } - let likely = 2*text.len() as isize; + let likely = 2*text.len() as i32; sup.set_attribute_value(MAYBE_CHEMISTRY, &likely.to_string()); return likely; } @@ -1069,7 +1065,7 @@ fn likely_chem_superscript(sup: Element) -> isize { /// * an operator that represents a bond /// * fences around a chemical formula /// * an mrow made up of only chemical formulas -fn likely_chem_formula(mathml: Element) -> isize { +fn likely_chem_formula(mathml: Element) -> i32 { // debug!("start likely_chem_formula:\n{}", mml_to_string(mathml)); if let Some(value) = get_marked_value(mathml) { return value; // already marked @@ -1149,7 +1145,7 @@ fn likely_chem_formula(mathml: Element) -> isize { return likelihood; - fn likely_mrow_chem_formula(mrow: Element) -> isize { + fn likely_mrow_chem_formula(mrow: Element) -> i32 { // For parens, the only reason to add them is to group the children and then indicate that there is more than one molecule if IsBracketed::is_bracketed(mrow, "(", ")", false, false) || IsBracketed::is_bracketed(mrow, "[", "]", false, false) { @@ -1353,7 +1349,7 @@ fn is_generalized_salt(elements: &[&str]) -> bool { /// Note: msubsup cleaning for an empty script hasn't happened and we consider an empty script a sign of attempting to vertically align sub/superscripts /// /// Note: 'mathml' is not necessarily canonicalized -pub fn likely_adorned_chem_formula(mathml: Element) -> isize { +pub fn likely_adorned_chem_formula(mathml: Element) -> i32 { if !matches!(name(mathml), "msub" | "msup" | "msubsup" | "mmultiscripts") { return NOT_CHEMISTRY; } @@ -1519,7 +1515,7 @@ fn is_single_char_matching(leaf_text: &str, pred: impl Fn(char) -> bool) -> bool return false; } -fn likely_chem_formula_operator(mathml: Element) -> isize { +fn likely_chem_formula_operator(mathml: Element) -> i32 { // mostly from chenzhijin.com/en/article/Useful%20Unicode%20for%20Chemists (Arrows and Other) // also en.wikipedia.org/wiki/Chemical_formula#Condensed_formula #[derive(PartialEq, Eq)] @@ -1608,7 +1604,7 @@ fn likely_chem_formula_operator(mathml: Element) -> isize { } /// This assumes canonicalization of characters has happened -fn likely_chem_equation_operator(mathml: Element) -> isize { +fn likely_chem_equation_operator(mathml: Element) -> i32 { fn is_chem_equation_operator(ch: char) -> bool { matches!(ch, '+' | '=' | '-' | '·' | '℃' | '°' | '‡' | '∆' | '×' | '\u{2062}') @@ -1678,7 +1674,7 @@ static SMALL_UPPER_ROMAN_NUMERAL: LazyLock = LazyLock::new(|| Regex::new( /// look for "(s), "(l)", "(g)", "(aq)" (could also use [...]) /// this might be called before canonicalization, but in clean_chemistry_mrow, we made sure "( xxx )" is grouped properly -pub fn likely_chem_state(mathml: Element) -> isize { +pub fn likely_chem_state(mathml: Element) -> i32 { if IsBracketed::is_bracketed(mathml, "(", ")", false, false) || IsBracketed::is_bracketed(mathml, "[", "]", false, false) { @@ -1687,7 +1683,7 @@ pub fn likely_chem_state(mathml: Element) -> isize { if contents_name == "mi" || contents_name == "mtext" { let text = as_text(contents); if text == "s" || text == "l" ||text == "g" ||text == "aq" { - return text.len() as isize + 1; // hack to count chars -- works because all are ASCII + return text.len() as i32 + 1; // hack to count chars -- works because all are ASCII }; } } @@ -1695,7 +1691,7 @@ pub fn likely_chem_state(mathml: Element) -> isize { } /// Returns the likelihood that the arg is an element -pub fn likely_chem_element(mathml: Element) -> isize { +pub fn likely_chem_element(mathml: Element) -> i32 { static NUCLEAR_SYMBOLS: [&str; 6] = ["e", "p", "n", "α", "β","γ"]; assert!(name(mathml) == "mi" || name(mathml) == "mtext", "{} is not 'mi' or 'mtext'", name(mathml)); @@ -1704,11 +1700,11 @@ pub fn likely_chem_element(mathml: Element) -> isize { return 0; // whitespace } else if is_chemical_element(mathml) { // single letter = 1; single letter with mathvariant="normal" = 2; double = 3 -- all elements are ASCII - return (if text.len() == 1 { + return if text.len() == 1 { if mathml.attribute_value("mathvariant").unwrap_or_default() == "normal" {2} else {1} } else { 3 - }) as isize; + }; } else if NUCLEAR_SYMBOLS.contains(&text) { return 0; // not much special about them; From 94920a2dab5ed3d065a450db78cf60efd49b1a0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20Gro=C3=9F?= Date: Wed, 22 Apr 2026 05:14:49 +0200 Subject: [PATCH 14/43] fix assertions in chemistry.rs (#552) --- src/chemistry.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/chemistry.rs b/src/chemistry.rs index 9fdf621c..aaf1314b 100644 --- a/src/chemistry.rs +++ b/src/chemistry.rs @@ -1273,7 +1273,7 @@ fn has_c_h_o(elements: &[&str]) -> bool { fn is_structural(elements: &[&str]) -> bool { - assert!(!elements.len() > 1); // already handled + assert!(elements.len() > 1); // already handled // debug!("is_structural: {:?}", elements); let mut element_set = HashSet::with_capacity(elements.len()); @@ -1310,7 +1310,7 @@ fn collect_elements(mrow: Element<'_>) -> Option> { /// check to make sure elements are ordered alphabetically /// Actually check Hill's system that puts 'C' followed by 'H' first if 'C' is present fn is_alphabetical(elements: &[&str]) -> bool { - assert!(!elements.len() > 1); // already handled + assert!(elements.len() > 1); // already handled // debug!("is_alphabetical: {:?}", elements); let mut elements = elements; if elements[1..].contains(&"C") { // "C" must be first if present @@ -1325,7 +1325,7 @@ fn is_alphabetical(elements: &[&str]) -> bool { fn is_ordered_by_electronegativity(elements: &[&str]) -> bool { // HPO_4^2 (Mono-hydrogen phosphate) doesn't fit this pattern, nor does HCO_3^- (Hydrogen carbonate) and some others // FIX: drop "H" from the ordering?? - assert!(!elements.len() > 1); // already handled + assert!(elements.len() > 1); // already handled return elements.windows(2).all(|pair| CHEMICAL_ELEMENT_ELECTRONEGATIVITY.get(pair[0]).unwrap() < CHEMICAL_ELEMENT_ELECTRONEGATIVITY.get(pair[1]).unwrap()); } From eba39ac99fbc5265424d2ba0584fa4a0c18e287e Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Tue, 21 Apr 2026 22:40:55 -0700 Subject: [PATCH 15/43] clippy fixes --- src/braille.rs | 16 +++--- src/chemistry.rs | 13 ++--- src/definitions.rs | 12 ++--- src/interface.rs | 6 +-- src/navigate.rs | 115 ++++++++++++++++++++++------------------- src/shim_filesystem.rs | 22 ++++---- src/speech.rs | 34 ++++++------ src/xpath_functions.rs | 2 +- tests/common/mod.rs | 30 +++++------ 9 files changed, 126 insertions(+), 124 deletions(-) diff --git a/src/braille.rs b/src/braille.rs index fde9b922..b944578f 100644 --- a/src/braille.rs +++ b/src/braille.rs @@ -3107,31 +3107,31 @@ mod tests { set_preference("BrailleNavHighlight", "Off").unwrap(); set_preference("BrailleCode", "Nemeth").unwrap(); - let braille = get_braille("")?; + let _braille = get_braille("")?; let answers= &[2, 3, 3, 3, 3, 4, 7, 8, 9, 9, 10, 13, 12, 14, 12, 15, 17, 19, 21, 10, 4, 23, 25, 4]; let answers = answers.map(|num| format!("id-{}", num)); debug!("\n*** Testing Nemeth ***"); - for i in 0..braille.chars().count() { + for (i, answer) in answers.iter().enumerate() { debug!("\n=== i={} ===", i); let instant = Instant::now(); let (id, _offset) = crate::interface::get_navigation_node_from_braille_position(i)?; N_PROBES.with(|n| {debug!("test {:2} #probes = {}", i, n.borrow())}); debug!("Time taken: {}ms", instant.elapsed().as_millis()); - assert_eq!(answers[i], id, "\nNemeth test ith position={}", i); + assert_eq!(*answer, id, "\nNemeth test ith position={}", i); } set_preference("BrailleCode", "UEB").unwrap(); - let braille = get_braille("")?; + let _braille = get_braille("")?; let answers= &[0, 0, 0, 2, 3, 3, 3, 3, 4, 7, 7, 8, 9, 9, 10, 13, 12, 14, 14, 15, 15, 17, 17, 19, 19, 21, 10, 4, 4, 23, 23, 25, 25, 4, 0, 0]; let answers = answers.map(|num| format!("id-{}", num)); debug!("\n\n*** Testing UEB ***"); - for i in 0..braille.chars().count() { + for (i, answer) in answers.iter().enumerate() { debug!("\n=== i={} ===", i); let instant = Instant::now(); let (id, _offset) = crate::interface::get_navigation_node_from_braille_position(i)?; N_PROBES.with(|n| {debug!("test {:2} #probes = {}", i, n.borrow())}); debug!("Time taken: {}ms", instant.elapsed().as_millis()); - assert_eq!(answers[i], id, "\nUEB test ith position={}", i); + assert_eq!(*answer, id, "\nUEB test ith position={}", i); } set_preference("BrailleCode", "CMU").unwrap(); let braille = get_braille("")?; @@ -3139,13 +3139,13 @@ mod tests { let answers = answers.map(|num| format!("id-{}", num)); debug!("\n\n*** Testing CMU ***"); debug!("Braille: {}", braille); - for i in 0..braille.chars().count() { + for (i, answer) in answers.iter().enumerate() { debug!("\n=== i={} ===", i); let instant = Instant::now(); let (id, _offset) = crate::interface::get_navigation_node_from_braille_position(i)?; N_PROBES.with(|n| {debug!("test {:2} #probes = {}", i, n.borrow())}); debug!("Time taken: {}ms", instant.elapsed().as_millis()); - assert_eq!(answers[i], id, "\nCMU test ith position={}", i); + assert_eq!(*answer, id, "\nCMU test ith position={}", i); } return Ok( () ); } diff --git a/src/chemistry.rs b/src/chemistry.rs index aaf1314b..6538d0ce 100644 --- a/src/chemistry.rs +++ b/src/chemistry.rs @@ -1296,11 +1296,8 @@ fn collect_elements(mrow: Element<'_>) -> Option> { elements.push(as_text(base)); } // else skip and let recursive likely_chem_formula call check the contents }, - "mo" => { - if likely_chem_formula_operator(child) < 0 { - return None; - } - }, + "mo" if likely_chem_formula_operator(child) < 0 => return None, + "mo" => (), _ => (), // let loop in likely_chem_formula() deal with all the negatives } } @@ -1891,7 +1888,7 @@ mod chem_tests { let test = if test.starts_with("{}", test)}; - let new_package = parser::parse(&test); + let new_package = parser::parse(test); if let Err(e) = new_package { panic!("Invalid MathML input:\n{}\nError is: {}", &test, &e.to_string()); } @@ -2010,13 +2007,13 @@ mod chem_tests { H4 (N H 2 ) 2
"#; - assert!( parse_mathml_string(test, |mathml| is_order_ok(mathml)) ); + assert!( parse_mathml_string(test, is_order_ok) ); let test = r#" Fe O (O H ) "#; - assert!( parse_mathml_string(test, |mathml| is_order_ok(mathml)) ); + assert!( parse_mathml_string(test, is_order_ok) ); let test = r#" // R-4.4.3.3 -- Chain compound doesn't fit rules but should be accepted Br S diff --git a/src/definitions.rs b/src/definitions.rs index ddf9b583..489c25b6 100644 --- a/src/definitions.rs +++ b/src/definitions.rs @@ -325,13 +325,13 @@ mod tests { // Rule::DefinitionList //debug!("variable_def_list {} is\n{}", yaml_to_type(variable_def_list), yaml_to_string(variable_def_list, 0)); for variable_def in variable_def_list.as_vec().unwrap() { - if let Err(e) = build_values(variable_def, true, &Path::new("")) { + if let Err(e) = build_values(variable_def, true, Path::new("")) { bail!("{}", crate::interface::errors_to_string(&e.context(format!("in file {:?}", numbers)))); } } return Ok(vec![]); }; - compile_rule(&numbers, defs_build_fn).unwrap(); + compile_rule(numbers, defs_build_fn).unwrap(); SPEECH_DEFINITIONS.with(|defs| { let defs = defs.borrow(); let names = defs.get_vec("NumbersTens"); @@ -351,13 +351,13 @@ mod tests { // Rule::DefinitionList //debug!("variable_def_list {} is\n{}", yaml_to_type(variable_def_list), yaml_to_string(variable_def_list, 0)); for variable_def in variable_def_list.as_vec().unwrap() { - if let Err(e) = build_values(variable_def, true, &Path::new("")) { + if let Err(e) = build_values(variable_def, true, Path::new("")) { bail!("{}", crate::interface::errors_to_string(&e.context(format!("in file {:?}", likely_function_names)))); } } return Ok(vec![]); }; - compile_rule(&likely_function_names, defs_build_fn).unwrap(); + compile_rule(likely_function_names, defs_build_fn).unwrap(); SPEECH_DEFINITIONS.with(|defs| { let defs = defs.borrow(); let names = defs.get_hashset("LikelyFunctionNames"); @@ -376,13 +376,13 @@ mod tests { // Rule::DefinitionList //debug!("variable_def_list {} is\n{}", yaml_to_type(variable_def_list), yaml_to_string(variable_def_list, 0)); for variable_def in variable_def_list.as_vec().unwrap() { - if let Err(e) = build_values(variable_def, true, &Path::new("")) { + if let Err(e) = build_values(variable_def, true, Path::new("")) { bail!("{}", crate::interface::errors_to_string(&e.context(format!("in file {:?}", units)))); } } return Ok(vec![]); }; - compile_rule(&units, defs_build_fn).unwrap(); + compile_rule(units, defs_build_fn).unwrap(); SPEECH_DEFINITIONS.with(|defs| { let defs = defs.borrow(); let names = defs.get_hashmap("Units"); diff --git a/src/interface.rs b/src/interface.rs index 0be1ebe2..9eb786d1 100644 --- a/src/interface.rs +++ b/src/interface.rs @@ -1112,12 +1112,12 @@ mod tests { let test_package = &parser::parse(test).expect("Failed to parse input"); let test_doc = test_package.as_document(); trim_doc(&test_doc); - debug!("test:\n{}", mml_to_string(get_element(&test_package))); + debug!("test:\n{}", mml_to_string(get_element(test_package))); let target_package = &parser::parse(target).expect("Failed to parse input"); let target_doc = target_package.as_document(); trim_doc(&target_doc); - debug!("target:\n{}", mml_to_string(get_element(&target_package))); + debug!("target:\n{}", mml_to_string(get_element(target_package))); match is_same_doc(&test_doc, &target_doc) { Ok(_) => return true, @@ -1188,7 +1188,7 @@ mod tests { let package1 = &parser::parse(whitespace_str).expect("Failed to parse input"); let doc1 = package1.as_document(); trim_doc(&doc1); - debug!("doc1:\n{}", mml_to_string(get_element(&package1))); + debug!("doc1:\n{}", mml_to_string(get_element(package1))); let package2 = parser::parse(different_str).expect("Failed to parse input"); let doc2 = package2.as_document(); diff --git a/src/navigate.rs b/src/navigate.rs index 7ba5d84c..6b209343 100644 --- a/src/navigate.rs +++ b/src/navigate.rs @@ -415,13 +415,20 @@ pub fn do_navigate_command_string(mathml: Element, nav_command: &'static str) -> }; if rate != "100" { match tts.as_str() { - "SSML" => if !cumulative_speech.starts_with("{}", &rate, &cumulative_speech); - }, - "SAPI5" => if !cumulative_speech.starts_with("{}'>", - 10.0*(0.01*rate.parse::().unwrap_or(100.0)).log(3.0), cumulative_speech); - }, + "SSML" => { + if !cumulative_speech.starts_with("{}", &rate, &cumulative_speech); + } + } + "SAPI5" => { + if !cumulative_speech.starts_with("{}", + 10.0 * (0.01 * rate.parse::().unwrap_or(100.0)).log(3.0), + cumulative_speech + ); + } + } _ => (), // do nothing } } @@ -1035,7 +1042,7 @@ mod tests { init_default_prefs(mathml_str, "Enhanced"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomIn", mathml, "msup"); test_command("ZoomIn", mathml, "base"); test_command("ZoomIn", mathml, "base"); @@ -1061,7 +1068,7 @@ mod tests { debug!("--- Enhanced ---"); MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomIn", mathml, "msup"); test_command("MoveNext", mathml, "id-3"); }); @@ -1070,7 +1077,7 @@ mod tests { debug!("--- Simple ---"); MATHML_INSTANCE.with(|package_instance: &RefCell| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomIn", mathml, "msup"); test_command("MoveNext", mathml, "id-3"); }); @@ -1079,7 +1086,7 @@ mod tests { debug!("--- Character ---"); MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomIn", mathml, "base"); test_command("MoveNext", mathml, "exp"); }); @@ -1119,7 +1126,7 @@ mod tests { init_default_prefs(mathml_str, "Enhanced"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); set_preference("NavMode", "Enhanced")?; debug!("\n------EnhancedMode----------"); test_command("ZoomIn", mathml, "id-2"); @@ -1145,7 +1152,7 @@ mod tests { init_default_prefs(mathml_str, "Enhanced"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomInAll", mathml, "base"); return Ok( () ); }); @@ -1161,7 +1168,7 @@ mod tests { init_default_prefs(mathml_str, "Enhanced"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); NAVIGATION_STATE.with(|nav_stack| { nav_stack.borrow_mut().push(NavigationPosition{ current_node: "base".to_string(), @@ -1188,7 +1195,7 @@ mod tests { init_default_prefs(mathml_str, "Enhanced"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); NAVIGATION_STATE.with(|nav_stack| { nav_stack.borrow_mut().push(NavigationPosition{ current_node: "base".to_string(), @@ -1217,7 +1224,7 @@ mod tests { init_default_prefs(mathml_str, "Enhanced"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); NAVIGATION_STATE.with(|nav_stack| { nav_stack.borrow_mut().push(NavigationPosition{ current_node: "id-4".to_string(), @@ -1258,7 +1265,7 @@ mod tests { init_default_prefs(mathml_str, "Enhanced"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); NAVIGATION_STATE.with(|nav_stack| { nav_stack.borrow_mut().push(NavigationPosition{ current_node: "id-7".to_string(), @@ -1289,7 +1296,7 @@ mod tests { init_default_prefs(mathml_str, "Enhanced"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); NAVIGATION_STATE.with(|nav_stack| { nav_stack.borrow_mut().push(NavigationPosition{ current_node: "base".to_string(), @@ -1320,7 +1327,7 @@ mod tests { init_default_prefs(mathml_str, "Enhanced"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); NAVIGATION_STATE.with(|nav_stack| { nav_stack.borrow_mut().push(NavigationPosition{ current_node: "denom".to_string(), @@ -1361,7 +1368,7 @@ mod tests { init_default_prefs(mathml_str, "Enhanced"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); NAVIGATION_STATE.with(|nav_stack| { nav_stack.borrow_mut().push(NavigationPosition{ current_node: "id-2".to_string(), @@ -1414,7 +1421,7 @@ mod tests { init_default_prefs(mathml_str, "Character"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); assert_eq!("zoomed in all of the way; 1", test_command("ZoomInAll", mathml, "id-2")); assert_eq!("move right; plus", test_command("MoveNext", mathml, "id-3")); assert_eq!("move right; in base; x", test_command("MoveNext", mathml, "id-5")); @@ -1445,7 +1452,7 @@ mod tests { init_default_prefs(mathml_str, "Enhanced"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); assert_eq!("zoom in; the log base 2", test_command("ZoomIn", mathml, "id-2")); assert_eq!("zoom in; in base; 2", test_command("ZoomIn", mathml, "id-4")); assert_eq!("zoomed in all of the way; 2", test_command("ZoomIn", mathml, "id-4")); @@ -1473,7 +1480,7 @@ mod tests { init_default_prefs(mathml_str, "Enhanced"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); assert_eq!("zoom in; the log base 2, cubed", test_command("ZoomIn", mathml, "id-2")); assert_eq!("zoom in; in base; the log base 2", test_command("ZoomIn", mathml, "id-2-log-base")); assert_eq!("zoom in; in base; 2", test_command("ZoomIn", mathml, "id-4")); @@ -1494,7 +1501,7 @@ mod tests { init_default_prefs(mathml_str, "Enhanced"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); set_preference("NavMode", "Enhanced").unwrap(); debug!("Enhanced mode"); do_commands(mathml)?; @@ -1544,7 +1551,7 @@ mod tests { init_default_prefs(mathml_str, "Character"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); assert_eq!("zoomed in all of the way; in base; open bracket", test_command("ZoomInAll", mathml, "id-3")); assert_eq!("move right; in base; cap c o", test_command("MoveNext", mathml, "id-5")); assert_eq!("move right; in subscript; 6", test_command("MoveNext", mathml, "id-6")); @@ -1589,7 +1596,7 @@ mod tests { init_default_prefs(mathml_str, "Character"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomInAll", mathml, "id-2"); test_command("MoveNext", mathml, "id-3"); test_command("MoveNext", mathml, "id-6"); @@ -1625,7 +1632,7 @@ mod tests { init_default_prefs(mathml_str, "Character"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); debug!("Character mode"); do_commands(mathml)?; set_preference("NavMode", "Simple").unwrap(); @@ -1675,7 +1682,7 @@ mod tests { init_default_prefs(mathml_str, "Simple"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); do_commands(mathml)?; set_preference("NavMode", "Simple").unwrap(); do_commands(mathml)?; @@ -1717,7 +1724,7 @@ mod tests { init_default_prefs(mathml_str, "Character"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomInAll", mathml, "id-3"); assert_eq!("move right; in denominator; y", test_command("MoveNext", mathml, "id-4")); assert_eq!("move right; out of denominator; z", test_command("MoveNext", mathml, "id-6")); @@ -1741,7 +1748,7 @@ mod tests { init_default_prefs(mathml_str, "Character"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomInAll", mathml, "id-3"); assert_eq!("zoomed in to first character; t", test_command("ZoomIn", mathml, "id-3")); assert_eq!("move right; o", test_command("MoveNext", mathml, "id-3")); @@ -1778,7 +1785,7 @@ mod tests { init_default_prefs(mathml_str, "Enhanced"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomIn", mathml, "id-2"); assert_eq!("move right; times", test_command("MoveNext", mathml, "id-3")); assert_eq!("move right; 1 minus x", test_command("MoveNext", mathml, "id-6")); @@ -1810,7 +1817,7 @@ mod tests { set_preference("SpeechStyle", "ClearSpeak").unwrap(); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomIn", mathml, "id-2"); assert_eq!("move right; open paren", test_command("MoveNext", mathml, "id-5")); assert_eq!("move right; 1", test_command("MoveNext", mathml, "id-7")); @@ -1881,7 +1888,7 @@ mod tests { init_default_prefs(mathml_str, "Enhanced"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomInAll", mathml, "nav-4"); test_command("MoveCellNext", mathml, "nav-6"); test_command("MoveCellNext", mathml, "nav-8"); @@ -1962,7 +1969,7 @@ mod tests { init_default_prefs(mathml_str, "Character"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); NAVIGATION_STATE.with(|nav_stack| { nav_stack.borrow_mut().push(NavigationPosition{ current_node: "nav-8".to_string(), @@ -2005,7 +2012,7 @@ mod tests { init_default_prefs(mathml_str, "Character"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("MoveStart", mathml, "a"); test_command("SetPlacemarker0", mathml, "a"); test_command("MoveEnd", mathml, "c"); @@ -2030,7 +2037,7 @@ mod tests { set_preference("SpeechStyle", "ClearSpeak").unwrap(); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); NAVIGATION_STATE.with(|nav_stack| { nav_stack.borrow_mut().push(NavigationPosition{ current_node: "exp".to_string(), @@ -2068,7 +2075,7 @@ mod tests { set_preference("AutoZoomOut", "False")?; return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomInAll", mathml, "2"); test_command("MoveNext", mathml, "a"); test_command("MoveNext", mathml, "x"); @@ -2094,7 +2101,7 @@ mod tests { set_preference("AutoZoomOut", "False")?; return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomIn", mathml, "frac"); test_command("ZoomIn", mathml, "num"); test_command("MoveNext", mathml, "denom"); @@ -2133,7 +2140,7 @@ mod tests { return MATHML_INSTANCE.with(|package_instance| { debug!("--- Testing mode {mode} ---"); let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomIn", mathml, "id-9"); debug!("\nStart zoom in"); match mode { @@ -2192,7 +2199,7 @@ mod tests { init_default_prefs(mathml_str, "Enhanced"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomIn", mathml, "row-1"); let speech = test_command("MoveNext", mathml, "row-2"); assert_eq!(speech, "move right; row 2; 5, negative 6"); @@ -2227,7 +2234,7 @@ mod tests { init_default_prefs(mathml_str, "Enhanced"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomIn", mathml, "id-2"); let speech = test_command("MoveNext", mathml, "id-6"); // tables need to check their parent for proper speech @@ -2258,7 +2265,7 @@ mod tests { set_preference("SpeechStyle", "ClearSpeak").unwrap(); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); let speech = test_command("ZoomIn", mathml, "row-1"); assert_eq!(speech, "zoom in; row 1; 9, negative 13"); let speech = test_command("MoveNext", mathml, "row-2"); @@ -2296,7 +2303,7 @@ mod tests { set_preference("SpeechStyle", "ClearSpeak").unwrap(); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomIn", mathml, "row-1"); let speech = test_command("MovePrevious", mathml, "row-1"); assert_eq!(speech, "move left; start of math"); @@ -2334,7 +2341,7 @@ mod tests { set_preference("SpeechStyle", "ClearSpeak").unwrap(); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); let speech = test_command("ZoomIn", mathml, "id-4"); assert_eq!(speech, "zoom in; in base; 2 x"); let speech = test_command("MoveNext", mathml, "id-9"); @@ -2359,7 +2366,7 @@ mod tests { set_preference("SpeechStyle", "ClearSpeak").unwrap(); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); debug!("Character mode"); let speech = test_command("MoveStart", mathml, "id-2"); assert_eq!(speech, "move to start of math; open paren"); @@ -2428,7 +2435,7 @@ mod tests { init_default_prefs(mathml_str, "Simple"); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); let speech = test_command("ZoomIn", mathml, "id-3-literal-1"); assert_eq!(speech, "zoom in; 1"); let speech = test_command("MoveNext", mathml, "id-3-literal-2"); @@ -2460,7 +2467,7 @@ mod tests { set_preference("SpeechStyle", "ClearSpeak").unwrap(); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); let speech = test_command("ZoomIn", mathml, "2"); assert_eq!(speech, "zoom in; 2"); let speech = test_command("MoveNext", mathml, "abs"); @@ -2496,7 +2503,7 @@ mod tests { set_preference("SpeechStyle", "SimpleSpeak").unwrap(); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomIn", mathml, "frac"); let speech = test_command("ReadCurrent", mathml, "frac"); assert_eq!(speech, "read current; fraction, b plus 1, over 3, end fraction"); @@ -2524,7 +2531,7 @@ mod tests { set_preference("SpeechStyle", "SimpleSpeak").unwrap(); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); let speech = test_command("ZoomOutAll", mathml, "mrow"); assert_eq!(speech, "zoomed out all of the way; 1 plus 2 plus 3 plus 4 plus 5 plus 6 plus 7"); let speech = test_command("ReadCurrent", mathml, "mrow"); @@ -2549,7 +2556,7 @@ mod tests { set_preference("SpeechStyle", "SimpleSpeak").unwrap(); return MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); let speech = test_command("ZoomIn", mathml, "id-2"); assert_eq!(speech, "zoom in; x"); let speech = test_command("ToggleZoomLockUp", mathml, "id-2"); @@ -2597,7 +2604,7 @@ mod tests { set_preference("NavMode", "Enhanced").unwrap(); MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomInAll", mathml, "2"); test_command("MoveNext", mathml, "msup"); test_command("MoveNext", mathml, "plus"); @@ -2609,7 +2616,7 @@ mod tests { set_preference("NavMode", "Simple").unwrap(); MATHML_INSTANCE.with(|package_instance: &RefCell| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomInAll", mathml, "2"); test_command("MoveNext", mathml, "msup"); test_command("MoveNext", mathml, "plus"); @@ -2622,7 +2629,7 @@ mod tests { set_preference("NavMode", "Character").unwrap(); MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomIn", mathml, "2"); test_command("MoveNext", mathml, "x"); test_command("MoveNext", mathml, "3"); @@ -2638,7 +2645,7 @@ mod tests { set_preference("NavMode", "Character").unwrap(); MATHML_INSTANCE.with(|package_instance| { let package_instance = package_instance.borrow(); - let mathml = get_element(&*package_instance); + let mathml = get_element(&package_instance); test_command("ZoomIn", mathml, "2"); }); } diff --git a/src/shim_filesystem.rs b/src/shim_filesystem.rs index 80669627..085d9024 100644 --- a/src/shim_filesystem.rs +++ b/src/shim_filesystem.rs @@ -66,7 +66,7 @@ cfg_if! { // Here we gather up the zip files that were found and iterate over them non-recursively. // Note: there shouldn't be embedded zip files in these files (if there are, they won't be unzipped) let zip_files = FILES.with(|files| files.borrow().iter() - .filter_map(|(name, archive_path)| if name.ends_with(".zip") { Some((name.clone(), archive_path.clone())) } else { None } ) + .filter_map(|(name, archive_path)| if name.ends_with(".zip") { Some((name.clone(), *archive_path)) } else { None } ) .collect::>() ); // debug!("Found {:?} embedded zip files", zip_files); @@ -75,7 +75,7 @@ cfg_if! { let mut inner_archive = get_zip_archive(bytes.as_slice())?; // debug!(" internal zip file {} has {} files", zip_file_name, inner_archive.len()); let new_containing_dir = zip_file_name.rsplit_once("/").map(|(before, _)| before).unwrap_or(""); - read_zip_file(&new_containing_dir, &mut inner_archive, Some(archive_path.main))?; + read_zip_file(new_containing_dir, &mut inner_archive, Some(archive_path.main))?; } // FILES.with(|files| { // let files = files.borrow(); @@ -85,7 +85,7 @@ cfg_if! { } /// Get the bytes for a file in the zip archive (intended for embedded zip files) - fn get_bytes_from_index<'a>(archive: &mut ZipArchive>, index: usize) -> Result> { + fn get_bytes_from_index(archive: &mut ZipArchive>, index: usize) -> Result> { let mut file = archive.by_index(index) .map_err(|e| anyhow!(format!("Error getting index={} from zip archive: {}", index, e)) )?; let mut contents = Vec::new(); @@ -144,14 +144,14 @@ cfg_if! { if FILES.with(|files| files.borrow().is_empty()) { let _ignore_result = initialize_static_vars(); } - return FILES.with(|files| files.borrow().contains_key(&canonicalize_path_separators(&path)) ); + return FILES.with(|files| files.borrow().contains_key(&canonicalize_path_separators(path)) ); } pub fn is_dir_shim(path: &Path) -> bool { if FILES.with(|files| files.borrow().is_empty()) { let _ignore_result = initialize_static_vars(); } - return DIRECTORIES.with(|dirs| dirs.borrow().contains(&canonicalize_path_separators(&path)) ); + return DIRECTORIES.with(|dirs| dirs.borrow().contains(&canonicalize_path_separators(path)) ); } /// Find files in 'dir' that end with 'ending' (e.g., "_Rules.yaml") @@ -164,12 +164,12 @@ cfg_if! { let dir_name = canonicalize_path_separators(dir); for file_name in files.keys() { - if let Some(dir_relative_name) = file_name.strip_prefix(&dir_name) { - if file_name.ends_with(ending) { - // this could be (e.g.) xxx_Rules.yaml or it could be subdir/xxx_Rules.yaml - let file_name = dir_relative_name.split_once("/").map(|(_, after)| after).unwrap_or(dir_relative_name); - answer.push( file_name.to_string() ); - } + if let Some(dir_relative_name) = file_name.strip_prefix(&dir_name) && + file_name.ends_with(ending) + { + // this could be (e.g.) xxx_Rules.yaml or it could be subdir/xxx_Rules.yaml + let file_name = dir_relative_name.split_once("/").map(|(_, after)| after).unwrap_or(dir_relative_name); + answer.push(file_name.to_string()); } } // debug!("find_files_in_dir_that_ends_with_shim: in dir '{}' found {:?}", dir.display(), answer); diff --git a/src/speech.rs b/src/speech.rs index 71fdae55..455901a6 100644 --- a/src/speech.rs +++ b/src/speech.rs @@ -1167,27 +1167,25 @@ impl MyXPath { i += 1; }, '\'' => inside_quote = !inside_quote, - '(' => { - if !inside_quote { - count += 1; - } + '(' if !inside_quote => { + count += 1; // FIX: it would be more efficient to spot "DEBUG" preceding this and recurse rather than matching the whole string and recursing }, - ')' => { - if !inside_quote { - count -= 1; - if count == 0 { - let arg = &chars[1..i].iter().collect::(); - let escaped_arg = arg.replace('"', "\\\""); - // DEBUG(...) may be inside 'arg' -- recurse - let processed_arg = MyXPath::add_debug_string_arg(arg)?; - - // DEBUG(...) may be in the remainder of the string -- recurse - let processed_rest = MyXPath::add_debug_string_arg(&chars[i+1..].iter().collect::())?; - return Ok( format!("({processed_arg}, \"{escaped_arg}\"){processed_rest}") ); - } + '(' => (), + ')' if !inside_quote => { + count -= 1; + if count == 0 { + let arg = &chars[1..i].iter().collect::(); + let escaped_arg = arg.replace('"', "\\\""); + // DEBUG(...) may be inside 'arg' -- recurse + let processed_arg = MyXPath::add_debug_string_arg(arg)?; + + // DEBUG(...) may be in the remainder of the string -- recurse + let processed_rest = MyXPath::add_debug_string_arg(&chars[i+1..].iter().collect::())?; + return Ok( format!("({processed_arg}, \"{escaped_arg}\"){processed_rest}") ); } }, + ')' => (), _ => (), } i += 1; @@ -2094,7 +2092,7 @@ impl fmt::Display for SpeechRules { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { writeln!(f, "SpeechRules '{}'\n{})", self.name, self.pref_manager.borrow())?; let mut rules_vec: Vec<(&String, &Vec>)> = self.rules.iter().collect(); - rules_vec.sort_by(|(tag_name1, _), (tag_name2, _)| tag_name1.cmp(tag_name2)); + rules_vec.sort_by_key(|(tag_name, _)| tag_name.as_str()); for (tag_name, rules) in rules_vec { writeln!(f, " {}: #patterns {}", tag_name, rules.len())?; }; diff --git a/src/xpath_functions.rs b/src/xpath_functions.rs index e08329af..be5ecc85 100644 --- a/src/xpath_functions.rs +++ b/src/xpath_functions.rs @@ -1453,7 +1453,7 @@ mod tests { crate::interface::set_rules_dir(super::super::abs_rules_dir_path()).unwrap(); let result = crate::definitions::read_definitions_file(true); if let Err(e) = result { - panic!("unable to read 'Rules/Languages/en/definitions.yaml\n{}", e.to_string()); + panic!("unable to read 'Rules/Languages/en/definitions.yaml\n{e}"); } } diff --git a/tests/common/mod.rs b/tests/common/mod.rs index 7d6d1b98..564f8265 100644 --- a/tests/common/mod.rs +++ b/tests/common/mod.rs @@ -1,5 +1,5 @@ //! Useful functionality for testing -#[cfg(test)] +#![allow(clippy::needless_return)] use regex::Regex; use std::panic::{catch_unwind, AssertUnwindSafe}; @@ -23,7 +23,7 @@ pub fn init_logger() { pub fn abs_rules_dir_path() -> String { cfg_if::cfg_if! { if #[cfg(feature = "include-zip")] { - return "Rules".to_string(); + "Rules".to_string() } else { return std::env::current_exe().unwrap().parent().unwrap() .join("../../../Rules") @@ -37,7 +37,7 @@ pub fn abs_rules_dir_path() -> String { #[allow(dead_code)] // used in testing fn strip_spaces(str: &str) -> String { static SPACES: LazyLock = LazyLock::new(|| Regex::new(r" +").unwrap()); - return String::from(SPACES.replace_all(str, " ")); + String::from(SPACES.replace_all(str, " ")) } #[allow(dead_code)] // used in testing @@ -83,7 +83,7 @@ pub fn test(language: &str, style: &str, mathml: &str, speech: &str) -> Result<( check_answer(mathml, speech, &format!("{}/{}", language, style)); Ok(()) })); - return report_any_panic(result); + report_any_panic(result) } // Compare the result of speaking the mathml input to the output 'speech' @@ -102,7 +102,7 @@ pub fn test_prefs(language: &str, speech_style: &str, test_prefs: Vec<(&str, &st check_answer(mathml, speech, &format!("{}/{} with prefs {:#?}", language, speech_style, test_prefs)); Ok(()) })); - return report_any_panic(result); + report_any_panic(result) } // Compare the result of speaking the mathml input to the output 'speech' @@ -111,7 +111,7 @@ pub fn test_prefs(language: &str, speech_style: &str, test_prefs: Vec<(&str, &st #[allow(non_snake_case)] pub fn test_ClearSpeak(language: &str, pref_name: &str, pref_value: &str, mathml: &str, speech: &str) -> Result<()> { let prefs = vec![(pref_name, pref_value)]; - return test_prefs(language, "ClearSpeak", prefs, mathml, speech); + test_prefs(language, "ClearSpeak", prefs, mathml, speech) } // Compare the result of speaking the mathml input to the output 'speech' @@ -119,7 +119,7 @@ pub fn test_ClearSpeak(language: &str, pref_name: &str, pref_value: &str, mathml #[allow(dead_code)] // used in testing #[allow(non_snake_case)] pub fn test_ClearSpeak_prefs(language: &str, prefs: Vec<(&str, &str)>, mathml: &str, speech: &str) -> Result<()> { - return test_prefs(language, "ClearSpeak", prefs, mathml, speech); + test_prefs(language, "ClearSpeak", prefs, mathml, speech) } // Compare the result of brailling the mathml input to the output (Unicode) 'braille' @@ -139,7 +139,7 @@ pub fn test_braille(code: &str, mathml: &str, braille: &str) -> Result<()> { match code { "Vietnam" => set_preference("Language", "vi").unwrap(), "CMU" => set_preference("Language", "es").unwrap(), - "UEB" | "Nemeth" | _ => set_preference("Language", "en").unwrap(), + _ => set_preference("Language", "en").unwrap(), } if let Err(e) = set_mathml(mathml) { panic!("{}", errors_to_string(&e)); @@ -150,7 +150,7 @@ pub fn test_braille(code: &str, mathml: &str, braille: &str) -> Result<()> { }; Ok(()) })); - return report_any_panic(result); + report_any_panic(result) } #[allow(dead_code)] // used in testing @@ -166,7 +166,7 @@ pub fn test_braille_prefs(code: &str, test_prefs: Vec<(&str, &str)>, mathml: &st match code { "Vietnam" => set_preference("Language", "vi").unwrap(), "CMU" => set_preference("Language", "es").unwrap(), - "UEB" | "Nemeth" | _ => set_preference("Language", "en").unwrap(), + _ => set_preference("Language", "en").unwrap(), } set_preference("UseSpacesAroundAllOperators", "false").unwrap(); // makes testing simpler @@ -183,7 +183,7 @@ pub fn test_braille_prefs(code: &str, test_prefs: Vec<(&str, &str)>, mathml: &st }; Ok(()) })); - return report_any_panic(result); + report_any_panic(result) } #[allow(dead_code)] @@ -247,10 +247,10 @@ pub fn test_intent(mathml: &str, target: &str, test_prefs: Vec<(&str, &str)>) -> for child in children { clean_attrs(child.element().unwrap()); } - return mathml; + mathml } - return report_any_panic(result); + report_any_panic(result) } /// This is a prototype function to test whether 'from_braille' (or whatever gets called) is cannonically the same as 'mathml' @@ -270,7 +270,7 @@ pub fn test_from_braille(code: &str, mathml: &str, braille: &str) -> Result<()> match code { "Vietnam" => set_preference("Language", "vi").unwrap(), "CMU" => set_preference("Language", "es").unwrap(), - "UEB" | "Nemeth" | _ => set_preference("Language", "en").unwrap(), + _ => set_preference("Language", "en").unwrap(), } if let Err(e) = set_mathml(mathml) { panic!("{}", errors_to_string(&e)); @@ -281,5 +281,5 @@ pub fn test_from_braille(code: &str, mathml: &str, braille: &str) -> Result<()> assert!(libmathcat::are_strs_canonically_equal(mathml, braille, &["data-changed", "data-id-added"])); Ok(()) })); - return report_any_panic(result); + report_any_panic(result) } From ffa0cdd6bedc46e7c9166fc8090fbe3e9c9595f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20Gro=C3=9F?= Date: Wed, 22 Apr 2026 18:15:07 +0200 Subject: [PATCH 16/43] allow more whitespace before audit-ignore comment --- PythonScripts/audit_translations/parsers.py | 3 ++- PythonScripts/audit_translations/tests/test_parsers.py | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/PythonScripts/audit_translations/parsers.py b/PythonScripts/audit_translations/parsers.py index 421ebb77..bf64843e 100644 --- a/PythonScripts/audit_translations/parsers.py +++ b/PythonScripts/audit_translations/parsers.py @@ -4,6 +4,7 @@ Handles parsing of rule files and unicode files to extract rule information. """ +import re from pathlib import Path from typing import Any @@ -127,7 +128,7 @@ def parse_unicode_file(content: str, data: Any) -> list[RuleInfo]: def has_audit_ignore(content: str) -> bool: """Check if the rule content contains an audit-ignore comment""" - return "# audit-ignore" in content + return re.search(r"#\s*audit-ignore\b", content) is not None def find_untranslated_text_entries(node: Any) -> list[UntranslatedEntry]: diff --git a/PythonScripts/audit_translations/tests/test_parsers.py b/PythonScripts/audit_translations/tests/test_parsers.py index ed252cde..e6513945 100644 --- a/PythonScripts/audit_translations/tests/test_parsers.py +++ b/PythonScripts/audit_translations/tests/test_parsers.py @@ -21,6 +21,14 @@ def test_detects_audit_ignore_comment(self): """Ensure detects audit ignore comment.""" assert has_audit_ignore("- name: foo\n # audit-ignore\n tag: bar") + def test_detects_audit_ignore_with_extra_spaces(self): + """Ensure detects audit ignore when the comment has extra spaces.""" + assert has_audit_ignore("- name: foo\n # audit-ignore\n tag: bar") + + def test_detects_audit_ignore_with_tab_after_hash(self): + """Ensure detects audit ignore when the comment uses a tab after the hash.""" + assert has_audit_ignore("- name: foo\n #\taudit-ignore\n tag: bar") + def test_detects_inline_audit_ignore(self): """Ensure detects inline audit ignore.""" assert has_audit_ignore("- name: foo # audit-ignore") From 54c3a77170b6268aba0251fb400356bd2995f8cf Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Wed, 22 Apr 2026 16:46:47 -0700 Subject: [PATCH 17/43] clippy fixes --- src/navigate.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/navigate.rs b/src/navigate.rs index 6b209343..cde77463 100644 --- a/src/navigate.rs +++ b/src/navigate.rs @@ -415,20 +415,18 @@ pub fn do_navigate_command_string(mathml: Element, nav_command: &'static str) -> }; if rate != "100" { match tts.as_str() { - "SSML" => { - if !cumulative_speech.starts_with(" { cumulative_speech = format!("{}", &rate, &cumulative_speech); } - } - "SAPI5" => { - if !cumulative_speech.starts_with(" { cumulative_speech = format!( "{}", 10.0 * (0.01 * rate.parse::().unwrap_or(100.0)).log(3.0), cumulative_speech ); } - } _ => (), // do nothing } } From 90e68d81546f4c5bff1c0171608f719dbd29b9e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Arborealis=20L=C3=B6tberg?= <143188129+TimArborealis@users.noreply.github.com> Date: Thu, 23 Apr 2026 10:30:33 +0200 Subject: [PATCH 18/43] New translator's guide A revised translator's guide to replace the old one. Written by me, @MartheGjelstad and @AndersEkl. Proofread and verified by @NSoiffer. --- docs/new_translators_guide_MathCAT_revised.md | 561 ++++++++++++++++++ 1 file changed, 561 insertions(+) create mode 100644 docs/new_translators_guide_MathCAT_revised.md diff --git a/docs/new_translators_guide_MathCAT_revised.md b/docs/new_translators_guide_MathCAT_revised.md new file mode 100644 index 00000000..35742047 --- /dev/null +++ b/docs/new_translators_guide_MathCAT_revised.md @@ -0,0 +1,561 @@ +# A translator's guide to MathCAT + +This guide explains how to create or update a MathCAT translation, using Portuguese as example target language. + +Most of this guide focuses on **speech (TTS) translation**. If you are working on Braille, you should still read the main workflow first, because much of the setup and testing process is similar. Then go to the section on [Braille translation](#braille-translation) to see what is different. + +You do **not** need to be an experienced programmer to do this work well. Several successful translators started with only basic programming knowledge and no previous experience with YAML or Rust. What matters most is that you know your target language well, understand how mathematics is normally spoken or written in that language, and are willing to test carefully. + +A background in mathematics is very helpful. You do not need to be a professional mathematician, but you do need to recognize when something sounds awkward, unclear, or mathematically misleading. If you are a native speaker and are comfortable with mathematics at about university level, that is a strong starting point. + +## Time estimate + +A full translation takes time, especially if you want it to be reliable and pleasant to use. + +Based on real projects, a thorough TTS translation may take around **300–450 hours**. A Braille translation may take around **160–240 hours**. That can vary a lot depending on how good your starting point is, whether a similar language already exists, and how much previous programming experience you have. + +## Need help getting started? + +This guide was written by Marthe Gjelstad, Tim Arborealis Lötberg and Anders Eklund, who made the Norwegian and Swedish translations of MathCAT. If you need help getting started, we're happy to help. Get in touch with us at: + +**[mathcat-wg@daisylists.org](mailto:mathcat-wg@daisylists.org)** + +--- + +## Recommended workflow + +A good workflow for translating MathCAT looks like this: + +1. Set up your working copy +2. Update and audit the translation +3. Listen to the speech early +4. Add and run tests +5. Learn about speech modes and verbosity settings +6. Work on the rule files +7. Review with a mathematician +8. Do user testing +9. Submit the translation +10. Keep the translation up-to-date + +--- + +## Step 1: Set up your working copy + +### Get the repository + +MathCAT is hosted on GitHub. + +If you have never used GitHub before, do not let that put you off. For translation work, you only need a small part of it. In practice, you just need to get a copy of the project, edit files, and save your changes. + +The easiest way to get started is often with **GitHub Desktop**: +[https://desktop.github.com/](https://desktop.github.com/) + +Basic workflow: + +1. Fork the MathCAT repository. +2. Clone it to your computer. +3. Work in your own branch, for example `pt`. + +That is enough to get started. + +### Install the tools you need + +You will need a few tools. It sounds like a lot at first, but each one has a clear purpose. + +* Git: [https://git-scm.com/](https://git-scm.com/) +* GitHub Desktop: [https://desktop.github.com/](https://desktop.github.com/) +* A code editor, for example VS Code: [https://code.visualstudio.com/](https://code.visualstudio.com/) +* Rust: [https://rust-lang.org/tools/install/](https://rust-lang.org/tools/install/) +* NVDA: [https://www.nvaccess.org/download/](https://www.nvaccess.org/download/) +* MathCAT (installed from the NVDA Add-on Store) + +Rust is only needed to run the automated tests. You do not need to learn Rust as a programming language in order to translate MathCAT. + +--- + +## Step 2: Update and audit the translation + +Before you start translating, make sure your language files match the current English structure. If you skip this step, you may spend time fixing problems that are really caused by outdated files. + +### Use the audit tool + +Documentation: +[https://github.com/daisy/MathCAT/blob/main/PythonScripts/audit_translations/README.md](https://github.com/daisy/MathCAT/blob/main/PythonScripts/audit_translations/README.md) + +Use the audit tool to find missing rules in the “pt” files. Add these rules to the “pt” files. The documentation contains detailed instructions on how to use the tool, so start there. + +### Start from a similar language if possible + +If a language that is grammatically very similar to yours already exists, it is often better to start from that instead of from English or from a machine-generated translation. + +For example, the Norwegian translation started from Swedish. That can save a lot of time, especially in places where grammar and word order differ from English in systematic ways. But, remember to use the audit tool to look for missing rules before you start translating to your own language. + +--- + +## Step 3: Listen to the speech early + +Listening to the output as you go along will help you identify errors early. A translation can look perfectly fine in a YAML file and still sound awkward, repetitive, or confusing when spoken. A good procedure is to listen to some expressions through a screen reader after each file has been translated. + +### Set up NVDA with your local rules + +1. Download NVDA: [https://www.nvaccess.org/download/](https://www.nvaccess.org/download/) +2. In NVDA, open **Tools → Add-on Store** and install MathCAT. +3. Make a copy of your language folder, for example `pt`, and add it to: + +```text +%AppData%\nvda\addons\MathCAT\globalPlugins\MathCAT\Rules\Languages +``` + +This makes it possible to listen to your local translation in NVDA. + +### Try real expressions + +A practical way to test speech is to take MathML expressions from the Rust test files and put them into a simple HTML document. Then open that file and listen with NVDA. + +Make one change at a time, listen again, and keep notes. This is an efficient way to learn how the rules behave in practice. + +--- + +## Step 4: Add and run tests + +Automated tests are a core part of the workflow. They help you catch syntax errors, document the speech you expect, and make sure future MathCAT changes do not silently break your translation. It is helpful to translate the tests as you work on the translation and not save them for last. + +In `MathCAT/tests`, open `languages.rs` and add (in the case of Portuguese): + +```rust +mod pt; +``` + +Then in `MathCAT/tests/Languages`: + +1. Copy `en.rs` to `pt.rs`. +2. Copy the `en` folder to `pt`. + +If you only choose one speech style at first, you can remove or comment out the other one. + +In each test, replace `"en"` with `"pt"`. + +Once that is done, run: + +```bash +cargo test Languages::pt +``` + +The first time, many tests will probably fail. That is normal. + +### Understanding test failures + +A typical failure report will show something like this: + +```rust +left: "1 half" +right: "1 halv" +``` + +The important part is the comparison: + +* `left` is the expected text written in the test +* `right` is the text MathCAT actually produced + +If the generated output is correct, copy it into the test. If it is wrong, fix the rule instead. + +It can actually be faster to run the tests before translating all the expected output. Then you can use the failure messages to see what MathCAT already produces in your language, and copy the correct ones into place. + +### Example of a simple test + +```rust +#[test] +fn common_fraction_half() -> Result<()> { + let expr = " + 1 2 + "; + test("pt", "ClearSpeak", expr, "um meio")?; + return Ok(()); +} +``` + +Here: + +* `common_fraction_half` is the name of the test +* `expr` contains the MathML expression +* `"pt"` is the language code +* `"ClearSpeak"` is the speech mode +* `"um meio"` is the expected spoken output + +### Example with preferences + +Some tests use `test_prefs` so that you can check a rule under specific settings. + +```rust +#[test] +fn common_fraction_tenths() -> Result<()> { + let expr = " + 17 10 + "; + test_prefs("en", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "17 tenths")?; + test_prefs("en", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Ordinal")], expr, "17 tenths")?; + return Ok(()); +} +``` + +In this kind of test: + +* `test_prefs` runs the expression with specific preferences +* `vec![]` contains those preferences +* `("Verbosity", "Medium")` sets the verbosity level +* `("ClearSpeak_Fractions", "Auto")` sets a ClearSpeak preference + +MathCAT also adds pauses in some places. In the test strings, these show up as punctuation such as commas and semicolons. So if a test almost matches, always check whether the real difference is pausing rather than wording. + +--- + +## Step 5: Learn about speech modes and verbosity settings + +There are two main speech modes: ClearSpeak and SimpleSpeak. The paper [A Comparison of Different Styles of Speech for Mathematics](https://scholarworks.calstate.edu/downloads/5t34sv64c), written by Neil, includes a good explanation of the difference between the two speech styles. In short: + +* ClearSpeak is supposed to be similar to how a teacher would say a mathematical expression in a classroom. +* SimpleSpeak speaks simple expressions compactly. For example $\frac{x}{y} + 1$ is spoken as "x over y plus one". There are no bracketing words to indicate where the fraction begins and ends. This is because both the numerator and denominator are simple. The expression $\frac{x}{y+1}$ is spoken as "fraction, x over y plus one, end fraction". Here, bracketing words are used because the denominator is not simple. + +It is up to you if you want to translate both speech styles or just focus on one. The translated speech styles may be more or less different from one another than the English ones depending on what variety of spoken math makes sense in the target language. + +MathCAT also supports the verbosity levels **Terse**, **Medium**, and **Verbose**. It is up to you as a translator to what degree these levels should differ in your language. In some cases, the natural translation may collapse two English variants into one (such as when the word "the" does not exist in the target language). In others, there may be several ways of speaking an expression where there is only one option in English. That is all fine. Clarity matters more than forcing artificial differences. + +For ClearSpeak there are many different preferences. These are used in the rules and in the tests. You can read about the preferences here: [ClearSpeak Preferences](https://github.com/daisy/MathCAT/blob/main/docs/ClearSpeakRulesAndPreferences.docx). At the moment, the preferences are not visible for users in the MathCAT settings in NVDA. + +--- + +## Step 6: Work on the rule files + +### Which files need translating? + +Most of your work will be in YAML rule files. If you're translating to Portuguese, your language files will be inside the folder `MathCAT\Rules\Languages\pt`. It contains the following files to translate: + +* `ClearSpeak_Rules.yaml` +* `definitions.yaml` +* `navigate.yaml` +* `overview.yaml` (optional) +* `SimpleSpeak_Rules.yaml` +* `unicode.yaml` +* `unicode-full.yaml` (semi-optional) + +The subfolder `MathCAT\Rules\Languages\pt\SharedRules` contains shorter rules that are the building blocks that the rules in both `ClearSpeak_Rules.yaml` and `SimpleSpeak_Rules.yaml` are made from. All of these need translating as well. + +### Where to start + +It can be helpful to start out with for example `ClearSpeak_Rules.yaml` and a few of the files in the `SharedRules`, to get a feel of how the rules work. + +Many of the changes which need to be made will be discovered through the tests, as stated above. However, the files `unicode.yaml`, `unicode-full.yaml`, `navigate.yaml` and `definitions.yaml` are not sufficiently covered by the tests. These especially need a lot of manual attention. + +Do not spend a lot of time going through `unicode-full.yaml` at first. It is several thousand lines long, and most of the symbols are very rarely used in real life (some won't even render in VS Code). This file can be saved for last, and it is enough to look through it and check the most recognisable symbols. + +Likewise, the file `overview.yaml` is less critical than the others, because it does not affect the reading of mathematical expressions directly. However, it provides screen readers with access to short structural summaries of expressions, and so it is worth going over eventually. + +### What to do + +Your main task will be to locate all yaml key names `t:`, which correspond to text strings to be spoken. Lowercase `t:` means the text has not yet been translated. Verify (if the auto translation happens to be correct) or change the translation until you are happy with it. Once this is done, change it into a capital `T:` to indicate you have gone over it. + +The same procedure of capitalization applies to all instances of `ct:`, `ot:`, `spell:`, `pronounce:` and `IfThenElse:`. However, these are far less frequent than `t:`. + +### Adapting or writing custom rules + +The tests cover most of the rules in the rule files. However, there can be grammatical things in Portuguese that do not exist in English, and are not covered by the tests. It is therefore a good idea to go through all the rules to check that everything looks correct. + +When there are grammatical differences, it will not be enough to simply change the text strings. Then, the rules need to be adapted, or new rules added. It is a good idea to write new tests to cover entirely new rules, to make sure your output is correct. Don't be afraid of trial-and-error until you get it right. + +Here follows a crash course in the anatomy of a MathCAT rule. Each rule describes when it applies and what should be spoken. The main parts are: + +* `name` — the name of the rule +* `tag` — the MathML element the rule applies to +* `match` — the condition that must be true for the rule to apply +* `replace` — the output and actions MathCAT should use + +Inside `replace`, some common commands are: + +* `t:` — text to speak +* `ct:` — concatenate text without a space in front +* `ot:` — optional text, used to avoid repeated words +* `x:` — an XPath expression +* `test:` — conditional logic +* `pause:` — a pause in the speech +* `bookmark:` — used for synchronized highlighting + +#### Example 1 + +```yaml +- name: squared + tag: power + match: "*[2][self::m:mn][.='2'] and $ClearSpeak_Exponents = 'Auto'" + replace: + - x: "*[1]" + - bookmark: "*[2]/@id" + - t: "squared" # phrase(7 'squared' equals 49) +``` + +This rule states that if a power has exponent 2 and the preference for `ClearSpeak_Exponents` is set to `Auto`, then the output should be “base squared”. For example, $x^2$ would be spoken as “x squared”. + +A few things are worth noticing here: + +* The `match` says what expressions the rule applies to. +* The expression after `x` is an XPath expression. It retrieves the first child of a power element, which would be the base. +* The expression after `t` is text that must be translated. When the string is translated and verified, capitalize the `t`. + +#### Example 2 + +```yaml +- 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 " + - " (*[1][self::m:mrow][count(*)=3][ " + - " *[1][self::m:mn] and " + - " *[2][self::m:mo][.='⁢'] and " + - " *[3][self::m:mi or self::m:mtext][string-length(.)>1] ]) ) and" + - " ((*[2][self::m:mi or self::m:mtext][string-length(.)>1]) or " + - " (*[2][self::m:mrow][count(*)=3][ " + - " *[1][self::m:mn] and " + - " *[2][self::m:mo][.='⁢'] and " + - " *[3][self::m:mi or self::m:mtext][string-length(.)>1] ]) )" + - ")" + replace: + - x: "*[1]" + - t: "over" # phrase(the fraction 3 'over' 4) + - x: "*[2]" + - test: + if: "$ClearSpeak_Fractions='EndFrac' or $ClearSpeak_Fractions='OverEndFrac'" + then: + - pause: short + - t: "end fraction" # phrase(7 over 8 'end fraction') + - pause: short +``` + +For this rule to apply, several constraints must be satisfied. They are all listed in `match`. + +In plain language, the rule says: + +* The preference `ClearSpeak_Fractions` should not be `General` or `GeneralEndFrac`, **and** +* the numerator is a text string with length more than 1, or a number invisibly multiplied with a text string with length more than 1, **and** +* the denominator satisfies the same constraints as the numerator. + +If all of that is satisfied, the fraction will be spoken as “numerator over denominator”. If `ClearSpeak_Fractions` is set to `EndFrac` or `OverEndFrac`, there will also be a short pause before “end fraction” is spoken. + +For example, the output for the expression $\frac{\text{meter}}{\text{second}}$ would be “meter over second”. + +--- + +## Step 7: Review with a mathematician + +Once you have a fairly complete translation, it is a very good idea to ask a mathematician, mathematics teacher, or another strong subject expert who is a native speaker of the language to review a representative set of outputs. + +A useful way to do this is to prepare a set of example expressions together with transcripts of what MathCAT says. Then ask the reviewer to go through them and flag anything that sounds mathematically odd, ambiguous, or unusual. + +This kind of review is important because a translation can be grammatically correct and still not sound like real mathematics. A subject expert can often catch problems in terminology, symbol naming, and the way larger structures are spoken. + +That said, you may not always be able to satisfy every request perfectly. Sometimes the way screen readers work, or the way MathCAT is structured, means that the most mathematically elegant wording is not the most usable one. + +--- + +## Step 8: Do user testing + +If you are not yourself a proficient screen reader user, user testing is essential. + +The best testers are blind users who are comfortable with mathematics, especially STEM users if you can find them. Give them a local version of MathCAT with your translation, together with an HTML file containing representative MathML expressions. + +It helps to let users try it on their own first. After that, meet with them and go through more examples together. Ask them not only whether the wording is correct, but whether the structure is clear, whether the pauses help, and whether the output matches what they are used to hearing. + +This matters because spoken math is not judged only by correctness. It also has to be usable in real screen reader workflows. In practice, user feedback should often weigh more heavily than theoretical preferences about grammar, especially when the disagreement is really about clarity or navigation rather than mathematical meaning. + +--- + +## Step 9: Submit the translation + +Before you open a pull request or share your translation, it’s worth doing one final pass to make sure everything is in good shape. This helps avoid unnecessary back-and-forth and makes the review process smoother. + +### Final checklist + +Go through the following: + +#### Files and structure + +* Your language files are up to date with the current English structure +* No rules are missing (audit tool has been run) +* No obvious leftover English text remains + +#### Translation status + +* All reviewed text has been changed from `t:` to `T:` (and `ct:` → `CT:`, `ot:` → `OT:` etc.) +* You have consciously reviewed wording, not just auto-translated it + +#### Speech output + +* You have listened to a representative set of expressions in NVDA +* Output sounds natural and unambiguous in your language +* Pauses and structure make sense when listening + +#### Tests + +* Tests have been added for your language +* All tests pass: + + ```bash + cargo test Languages::pt + ``` + +* Expected outputs in tests match your intended speech (including pauses) + +#### Expert review + +* A mathematician or subject expert has reviewed representative output +* Major terminology or structure issues have been addressed + +#### User testing + +* At least some testing has been done with screen reader users +* Feedback on clarity and usability has been considered + +### Submitting your translation + +Once you are satisfied with the checklist: + +1. **Commit your changes** in your branch (for example `pt`) +2. **Push your branch** to GitHub +3. **Open a pull request** against the main MathCAT repository + +In your pull request, it helps to include: + +* A short description of the translation +* What has been completed (e.g. ClearSpeak, SimpleSpeak, tests) +* Any known limitations or areas that still need work + +After that, maintainers will review your work and may suggest changes before merging. + +### When will the translation become available for users? + +Once your translation is merged into MathCAT: + +* It will become part of future MathCAT releases +* Users will be able to select your language in supported screen readers (such as NVDA) + +If you want to use it immediately before an official release, you can: + +* keep using your local rules folder in NVDA, or +* install a development version of MathCAT that includes your changes + +--- + +## Step 10: Keep the translation up-to-date + +A translation is never “finished” in a strict sense. Even after merging, you will likely find small improvements over time—especially as users start working with real content. + +Furthermore, the English version is still under active development, and you will want to include new features in your translation. To keep your translation in sync, you may use the [Translation audit tool](https://github.com/daisy/MathCAT/blob/main/PythonScripts/audit_translations/README.md). + + + +--- + +## Braille translation + +Braille translation follows a similar overall workflow, but there are some important differences. + +Before starting work on the Braille rules, it is important to establish what standard is used in your country for writing mathematics. Some countries have established Braille codes, while others use some other kind of notation such as LaTeX or ASCIIMath. You need to decide early which standard MathCAT should follow. + +If a Braille standard similar to yours already exists, it may be useful as a starting point. Otherwise, you will probably need to start more or less from scratch. + +### Braille files + +For a new Braille language, you will need to create three `.yaml` files in `Rules\Braille\your-braille-language`: + +1. `xxx_Rules.yaml` — where `xxx` is the name of your Braille code. This contains the rules that translate MathML into Braille. +2. `unicode.yaml` — this contains translations of the more common characters. +3. `unicode-full.yaml` — this contains the rest of the character translations. + +The reason for having two Unicode files is practical: keeping the common characters in a shorter file helps startup time. + +### An example from Swedish + +The Swedish Braille translation followed the official Swedish Braille code for mathematics, which was a 6-dot standard intended for printed Braille. There was no established 8-dot standard for mathematics, so the translation had to be built around the only recognized standard that existed. + +The Swedish work also showed that source standards are not always strict enough for software. Some printed standards allow spacing to follow the printed source. In MathCAT, that is not enough. The rules need to be explicit, so you may need to resolve inconsistencies and make firm decisions about spacing. + +### Testing Braille + +The basic idea is similar to TTS testing, but the tests check Braille Unicode instead of speech strings. + +A practical way to work is to write Rust tests with expected Braille output taken from the national standard or from agreed examples. Then run the tests, inspect failures, and refine the rules until the output matches. + +The Swedish translation used examples taken straight from the Swedish Braille code, especially for arithmetic, fractions, subscript and superscript, and basic functions. That turned out to be a good way to ground the rules in a real standard. + +### Braille-specific challenges + +Braille work often raises issues that do not come up in speech translation. For example: + +* the standard may be incomplete or inconsistent +* the standard may assume printed context instead of machine-generated output +* some symbols may not have clear established representations +* spacing may need to be made stricter than the source standard suggests + +### Braille user testing + +Braille user testing is just as important as speech user testing. + +In the Swedish work, testers used NVDA together with the Braille viewer so that the output could be monitored during remote sessions. That made it possible to observe the output even when the reviewers themselves were not reading the physical Braille display. + +As with speech, the goal is not only technical correctness. The output should also be readable, consistent, and useful in real workflows. + +--- + +## Appendix + +### Practical advice for working efficiently + +AI tools can be useful when you are drafting translations, exploring alternative phrasings, or trying to understand a difficult rule. They can also help when you need to write or edit rules. + +However, they should always be treated as assistants, not authorities. Automatic translations always need checking by a human, and rule changes always need testing with real output. + +More generally, it helps to make one change at a time, test often, and discuss difficult cases with other translators or subject experts when you can. + +### Troubleshooting + +If something does not work as expected, check indentation first. YAML errors are common and can be surprisingly hard to spot. If you use VS Code, it can be useful to download a YAML extension to help you find YAML errors. + +Also check the test output carefully and listen again. Many problems are easier to hear than to see. + +### XPath + +Many parts of a speech rule make use of XPath. This is a popular and well-documented method for selecting parts of an XML document. A web search will turn up many tutorials. Those not familiar with XPath are encouraged to read some. The implementation of XPath used by MathCAT is a slightly extended version of XPath 1.0. + +MathCAT usage tends to use only a few features of XPath. It also makes use of some custom functions. Here is a short explanation of common XPath usage: + +| usage | meaning | +| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `*` | matches all children | +| `[...]` | selects nodes from the current match | +| `*[1]` | selects first child | +| `*[self::m:mn]` | selects all children that are `mn` elements. Note that `m` is used to indicate that the element is in the MathML namespace. | +| `*[1][self::m:mn]` | select the first child as long as it is an `mn` element | +| `*[1][self::m:mo][text()='-']` | select the first child as long as it is an `mo` element whose content is ‘-‘. This could also be written as `*[1][text()='-']` because other nodes probably won’t have the content `-`, but an `mtext` element could have that, so specifying the element name is safest. | +| `count(*[2]/*)` | the number of children of the second child | +| `count(preceding-sibling::*)+1` | add 1 to the number of siblings before the current element | + +MathCAT adds some custom functions to make writing rules easier: + +| function | meaning | +| ---------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `IsNode(nodes, type)` | Returns true if all of the nodes are of the same type. Type can be one of:
"simple" -- a defined set of elements in ClearSpeak
"leaf" -- one of the MathML leaf elements
"2D" -- a 2D node such as `mfrac` or `mroot`
"modified" – the node has a script or something over/under it
"scripts" – the node has a subscript and/or superscript
"common_fraction" – integer numerator and denominator | +| `ToOrdinal` | | +| `ToCommonFraction` | | +| `IsBracketed(openChar, closeChar, requiresComma)` | | +| `BaseNode(node)` | Returns the base (recursively) of a scripted node | +| `IsInDefinition(node, name)` | Returns true if node is a member of the list ‘name’ (defined in definitions.yaml) | +| `IfThenElse(test, then-part, else-part)` | Returns `then-part` if the test is true, otherwise `else-part`. All arguments are XPath expressions | +| `DistanceFromLeaf(node, left_side, treat_2d_elements_as_tokens)` | Returns the distance from the current node to the leftmost or rightmost leaf (0 for a character, 1 for a token). If `left_side` is `true`, traversal follows the leftmost child to the leaf; otherwise it follows the right side. If `treat_2d_elements_as_tokens` is `true`, two-dimensional notations such as fractions are treated as single tokens (like leaves). | +| `EdgeNode(node, "left"/"right", stopNodeName)` | Returns the stopNode if at left/right edge of named ancestor node. `stopNodeName` can also be `"2D"`. The original node is returned if no match is found. Note: if `stopNodeName` is `"math"`, then punctuation is taken into account since it is not really part of the math | +| `DEBUG(xpath)` | Really helpful for debugging – it will be added to debug output | + +These are used by Nemeth Rules: + +| function | meaning | +| -------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| `NestingChars` | Used by mfrac, msqrt, and mroot rules to repeat the chars the appropriate number of times | +| `BrailleChars` | Used by token elements to deal with the complicated rearrangement of various Nemeth indicators such as capitalization and font face | From e2b6e1c9f7a7e46ddef6400878467c0c365016d1 Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Fri, 24 Apr 2026 00:41:57 -0700 Subject: [PATCH 19/43] Fix #532. Fix extra "the" in expression by converting many `t:`s to `ot:`s. However, I still needed to fix up the handling of them in speech.rs by allowing for an optional `ot` marker. I took this opportunity to clean up the function a little now that I know Rust better (it was over 5 years old). --- Rules/Languages/en/ClearSpeak_Rules.yaml | 10 ++-- Rules/Languages/en/SharedRules/default.yaml | 4 +- Rules/Languages/en/SharedRules/general.yaml | 8 +-- Rules/Languages/en/SharedRules/geometry.yaml | 4 +- Rules/Languages/en/SimpleSpeak_Rules.yaml | 6 +-- Rules/Languages/en/unicode-full.yaml | 16 +++--- Rules/Languages/en/unicode.yaml | 4 +- src/speech.rs | 54 +++++++++++--------- tests/Languages/en/ClearSpeak/mroot.rs | 2 +- 9 files changed, 56 insertions(+), 52 deletions(-) diff --git a/Rules/Languages/en/ClearSpeak_Rules.yaml b/Rules/Languages/en/ClearSpeak_Rules.yaml index 7b6afd61..45983d71 100644 --- a/Rules/Languages/en/ClearSpeak_Rules.yaml +++ b/Rules/Languages/en/ClearSpeak_Rules.yaml @@ -34,7 +34,7 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' square root of 25) + then: [ot: "the"] # phrase('the' square root of 25) - test: if: "$ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" then: @@ -65,7 +65,7 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase(6 is 'the' square root of 36) + then: [ot: "the"] # phrase(6 is 'the' square root of 36) - test: if: "$ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" then: @@ -262,7 +262,7 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' third power of 2) + then: [ot: "the"] # phrase('the' third power of 2) - bookmark: "*[2]/@id" - test: if: "*[2][self::m:mn][not(contains(., '.'))]" @@ -478,7 +478,7 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' absolute value of 25) + then: [ot: "the"] # phrase('the' absolute value of 25) - x: "$WordToSay" - t: "of" # phrase(the absolute value 'of' 25) - x: "*[1]" @@ -611,7 +611,7 @@ - bookmark: "@id" - test: if: "$Verbosity!='Terse' and not(IsNode(following-sibling::*[2],'simple'))" - then: [t: "the"] # phrase('the' square root of 25) + then: [ot: "the"] # phrase('the' square root of 25) - test: - if: ".='log'" then: [t: "log"] diff --git a/Rules/Languages/en/SharedRules/default.yaml b/Rules/Languages/en/SharedRules/default.yaml index 2a715c5a..23de9c71 100644 --- a/Rules/Languages/en/SharedRules/default.yaml +++ b/Rules/Languages/en/SharedRules/default.yaml @@ -120,7 +120,7 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase("'the' root of x") + then: [ot: "the"] # phrase("'the' root of x") - t: "root" - test: if: "$Verbosity!='Terse'" @@ -138,7 +138,7 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase("'the' root of x") + then: [ot: "the"] # phrase("'the' root of x") - t: "root with index" # phrase("the 'root with index' 3 of 5") - x: "*[1]" - pause: short diff --git a/Rules/Languages/en/SharedRules/general.yaml b/Rules/Languages/en/SharedRules/general.yaml index d6feca1d..c1bca23b 100644 --- a/Rules/Languages/en/SharedRules/general.yaml +++ b/Rules/Languages/en/SharedRules/general.yaml @@ -154,7 +154,7 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' square root of 25 equals 5) + then: [ot: "the"] # phrase('the' square root of 25 equals 5) - x: "*[1]" - t: "from" # phrase(subtracting 5 'from' 10 gives 5) - x: "*[2]" @@ -171,7 +171,7 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' square root of 25 equals 5) + then: [ot: "the"] # phrase('the' square root of 25 equals 5) - x: "*[1]" - t: "over" # phrase(2 'over' 3 equals two thirds) - x: "*[2]" @@ -185,7 +185,7 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' square root of 25 equals 5) + then: [ot: "the"] # phrase('the' square root of 25 equals 5) - x: "*[1]" - t: "of" # phrase(the square root 'of' 25 equals 5) - x: "*[2]" @@ -472,7 +472,7 @@ - bookmark: "@id" - test: - if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' logarithm function is used in mathematics) + then: [ot: "the"] # phrase('the' logarithm function is used in mathematics) - test: - if: ".= 'log'" then: [t: "log"] # phrase(the 'log' function is used in mathematics) diff --git a/Rules/Languages/en/SharedRules/geometry.yaml b/Rules/Languages/en/SharedRules/geometry.yaml index 1b2fe2a7..8dc1a946 100644 --- a/Rules/Languages/en/SharedRules/geometry.yaml +++ b/Rules/Languages/en/SharedRules/geometry.yaml @@ -38,7 +38,7 @@ replace: - test: if: "$Verbosity='Verbose'" - then: [t: "the"] # phrase('the' arc A B C) + then: [ot: "the"] # phrase('the' arc A B C) - t: "arc" # phrase(the 'arc' A B C) - x: "*[1]" - x: "*[2]" @@ -64,7 +64,7 @@ replace: - test: if: "$Verbosity='Verbose'" - then: [t: "the"] # phrase('the' point at 1, 2) + then: [ot: "the"] # phrase('the' point at 1, 2) - t: "point" # phrase(the 'point' at 1, 2) - test: if: "$Verbosity='Verbose'" diff --git a/Rules/Languages/en/SimpleSpeak_Rules.yaml b/Rules/Languages/en/SimpleSpeak_Rules.yaml index e9b65427..e831adaa 100644 --- a/Rules/Languages/en/SimpleSpeak_Rules.yaml +++ b/Rules/Languages/en/SimpleSpeak_Rules.yaml @@ -34,7 +34,7 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # phrase('the' square root of x) + then: [ot: "the"] # phrase('the' square root of x) - t: "square root" # phrase(the 'square root' of x) - test: if: "$Verbosity!='Terse'" @@ -52,7 +52,7 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] + then: [ot: "the"] - test: if: "*[2][self::m:mn and not(contains(., '.'))]" then_test: @@ -181,7 +181,7 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "the"] # # phrase('the' fourth power of 10) + then: [ot: "the"] # # phrase('the' fourth power of 10) - bookmark: "*[2]/@id" - test: if: "*[2][self::m:mn][not(contains(., '.'))]" diff --git a/Rules/Languages/en/unicode-full.yaml b/Rules/Languages/en/unicode-full.yaml index eb4a6cbe..beb3e800 100644 --- a/Rules/Languages/en/unicode-full.yaml +++ b/Rules/Languages/en/unicode-full.yaml @@ -676,7 +676,7 @@ - "∁": # 0x2201 - test: if: "$Verbosity!='Terse'" - then: [t: "the"] + then: [ot: "the"] - t: "complement of" - "∂": # 0x2202 - test: @@ -770,17 +770,17 @@ - "√": # 0x221a - test: if: "$Verbosity!='Terse'" - then: [t: "the"] + then: [ot: "the"] - t: "square root of" - "∛": # 0x221b - test: if: "$Verbosity!='Terse'" - then: [t: "the"] + then: [ot: "the"] - t: "cube root of" - "∜": # 0x221c - test: if: "$Verbosity!='Terse'" - then: [t: "the"] + then: [ot: "the"] - t: "fourth root of" - "∝": # 0x221d - test: @@ -893,7 +893,7 @@ - "≏": # 0x224f - test: if: "$Verbosity!='Terse'" - then: [t: "the"] + then: [ot: "the"] - t: "difference between" - "≐": [t: "approaches the limit"] # 0x2250 - "≑": # 0x2251 @@ -1227,17 +1227,17 @@ - "⋒": # 0x22d2 - test: if: "$Verbosity!='Terse'" - then: [t: "the"] + then: [ot: "the"] - t: "double intersection of" - "⋓": # 0x22d3 - test: if: "$Verbosity!='Terse'" - then: [t: "the"] + then: [ot: "the"] - t: "double union of" - "⋔": # 0x22d4 - test: if: "$Verbosity!='Terse'" - then: [t: "the"] + then: [ot: "the"] - t: "proper intersection of" - "⋕": # 0x22d5 - test: diff --git a/Rules/Languages/en/unicode.yaml b/Rules/Languages/en/unicode.yaml index a9020c0f..0a0b9136 100644 --- a/Rules/Languages/en/unicode.yaml +++ b/Rules/Languages/en/unicode.yaml @@ -377,7 +377,7 @@ - "∆": # 0x2206 - test: if: "$Verbosity!='Terse'" - then: [t: "the"] + then: [ot: "the"] - t: "laplacian of" - "∈": # 0x2208 - test: @@ -471,7 +471,7 @@ - "√": # 0x221a - test: if: "$Verbosity!='Terse'" - then: [t: "the"] + then: [ot: "the"] - t: "square root of" - "∝": # 0x221d - test: diff --git a/src/speech.rs b/src/speech.rs index 455901a6..7a00671e 100644 --- a/src/speech.rs +++ b/src/speech.rs @@ -924,35 +924,39 @@ impl ReplacementArray { // concatenation (removal of spaces) is saved for the top level because they otherwise are stripped at the wrong sometimes return Ok( replacement_strings.join(" ") ); - fn is_repetitive<'a>(prev: &str, optional: &'a str) -> Option<&'a str> { - // OPTIONAL_INDICATOR surrounds the optional text + /// delete an optional text (in 'next') that is repetitive at the end of 'prev' + /// we do this by looking for the optional text marker, and if present, check for repetition at end of previous string + /// if repetitive, we delete the optional string + fn is_repetitive<'a>(prev: &str, next: &'a str) -> Option<&'a str> { + // OPTIONAL_INDICATOR optionally surrounds the end of 'prev'(ignoring trailing whitespace) + // OPTIONAL_INDICATOR surrounds the start of 'next' // minor optimization -- lots of short strings and the OPTIONAL_INDICATOR takes a few bytes, so skip the check for those strings - if optional.len() <= 2 * OPTIONAL_INDICATOR_LEN { + if next.len() <= 2 * OPTIONAL_INDICATOR_LEN { return None; } - + // should be exactly one match -- ignore more than one for now - match optional.find(OPTIONAL_INDICATOR) { - None => return None, - Some(start_index) => { - let optional_word_start_slice = &optional[start_index + OPTIONAL_INDICATOR_LEN..]; - // now find the end - match optional_word_start_slice.find(OPTIONAL_INDICATOR) { - None => panic!("Internal error: missing end optional char -- text handling is corrupted!"), - Some(end_index) => { - let optional_word = &optional_word_start_slice[..end_index]; - // debug!("check if '{}' is repetitive", optional_word); - // debug!(" prev: '{}', next '{}'", prev, optional); - let prev = prev.trim_end().as_bytes(); - if prev.len() > optional_word.len() && - &prev[prev.len()-optional_word.len()..] == optional_word.as_bytes() { - return Some( optional_word_start_slice[optional_word.len() + OPTIONAL_INDICATOR_LEN..].trim_start() ); - } else { - return None; - } - } - } - } + let i_start = next.find(OPTIONAL_INDICATOR)?; + let start_repeat_word_in_next = &next[i_start + OPTIONAL_INDICATOR_LEN..]; + let i_end = start_repeat_word_in_next.find(OPTIONAL_INDICATOR) + .unwrap_or_else(|| panic!("Internal error: missing end optional char -- text handling is corrupted!")); + let repeat_word = &start_repeat_word_in_next[..i_end]; + // debug!("check if '{}' is repetitive, end_index={}", repeat_word, i_end); + // debug!(" prev: '{}', next '{}'", prev, next); + + let prev_trimmed = prev.trim_end(); + let ends_with_word = prev_trimmed.len() > repeat_word.len() && prev_trimmed.ends_with(repeat_word); + let ends_with_wrapped_word = + prev_trimmed + .strip_suffix(OPTIONAL_INDICATOR) + .and_then(|s| s.strip_suffix(repeat_word)) + .and_then(|s| s.strip_suffix(OPTIONAL_INDICATOR)) + .is_some(); + if ends_with_word || ends_with_wrapped_word { + // debug!(" is repetitive"); + Some(start_repeat_word_in_next[i_end + OPTIONAL_INDICATOR_LEN..].trim_start()) // remove repeat word and OPTIONAL_INDICATOR + } else { + None } } } diff --git a/tests/Languages/en/ClearSpeak/mroot.rs b/tests/Languages/en/ClearSpeak/mroot.rs index 92198c05..37fcd26a 100644 --- a/tests/Languages/en/ClearSpeak/mroot.rs +++ b/tests/Languages/en/ClearSpeak/mroot.rs @@ -61,7 +61,7 @@ fn mroot_simple_pos_end_with_neg_root() -> Result<()> { "; test_ClearSpeak("en", "ClearSpeak_Roots", "PosNegSqRoot", expr, - "the negative cube root of x; minus the positive square root of x")?; + "the negative cube root of x; minus, the positive square root of x")?; return Ok(()); } From 126a72198889f33d37a1cd72253568ab36d4578d Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Fri, 24 Apr 2026 12:46:04 -0700 Subject: [PATCH 20/43] Add test for #532 --- tests/Languages/en/ClearSpeak/mroot.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/Languages/en/ClearSpeak/mroot.rs b/tests/Languages/en/ClearSpeak/mroot.rs index 37fcd26a..63c196b7 100644 --- a/tests/Languages/en/ClearSpeak/mroot.rs +++ b/tests/Languages/en/ClearSpeak/mroot.rs @@ -161,3 +161,11 @@ fn simple_fraction_power() -> Result<()> { return Ok(()); } + +#[test] +fn no_double_the_532() -> Result<()> { + let expr = "423"; + test("en", "ClearSpeak", expr, "the cube root of the square root of 42")?; + return Ok(()); + +} From 9eee95ded1807671d85cbb6b8f590b6b26b99eb9 Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Sat, 25 Apr 2026 15:58:11 -0700 Subject: [PATCH 21/43] remove extraneous blank line --- Rules/Languages/en/navigate.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/Rules/Languages/en/navigate.yaml b/Rules/Languages/en/navigate.yaml index 7559b422..92874f03 100644 --- a/Rules/Languages/en/navigate.yaml +++ b/Rules/Languages/en/navigate.yaml @@ -212,7 +212,6 @@ # ********* ZoomIn *************** - name: zoom-in-leaf - tag: "*" match: "($NavCommand = 'ZoomIn' or $NavCommand = 'ZoomInAll') and IsNode(., 'leaf')" replace: From fb0bd57441a452b60f923dee668f1fee6346d44a Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Sat, 25 Apr 2026 15:59:12 -0700 Subject: [PATCH 22/43] Minor cleanup that removed a call that was in two places and could be cleaned up to be in just one --- src/navigate.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/navigate.rs b/src/navigate.rs index cde77463..13a28d4c 100644 --- a/src/navigate.rs +++ b/src/navigate.rs @@ -590,23 +590,22 @@ pub fn do_navigate_command_string(mathml: Element, nav_command: &'static str) -> // Speak/Overview of where we landed (if we are supposed to speak it) -- use intent, not nav_intent // Note: NavMode might have changed, so we need to recheck the mode to see if we use LiteralSpeak let literal_speak = nav_state.mode == "Character"; - let node_speech = match speak(mathml, intent, &nav_position, literal_speak, use_read_rules) { + let node_speech_result = speak(mathml, intent, &nav_position, literal_speak, use_read_rules); + remove_literal_property(mathml, add_literal, properties); + let node_speech = match node_speech_result { Ok(speech) => speech, Err(e) => { - remove_literal_property(mathml, add_literal, properties); if e.to_string() == crate::speech::NAV_NODE_SPEECH_NOT_FOUND { bail!("Internal error: With {}/{} in {} mode, can't {} from expression with id '{}' inside:\n{}", rules.pref_manager.as_ref().borrow().pref_to_string("Language"), rules.pref_manager.as_ref().borrow().pref_to_string("SpeechStyle"), &nav_state.mode, nav_command, &nav_position.current_node, mml_to_string(if literal_speak {mathml} else {intent})); - } else { - return Err(e); } - }, + return Err(e); + } }; - remove_literal_property(mathml, add_literal, properties); - // debug!("node_speech: '{}'", node_speech); + // debug!("node_speech: '{}', speech: '{}'\n", node_speech, speech); if node_speech.is_empty() { // try again in loop return Ok( (speech, false)); @@ -1004,8 +1003,10 @@ mod tests { NAVIGATION_STATE.with(|nav_stack| { let (start_id, _) = nav_stack.borrow().get_navigation_mathml_id(mathml); match do_navigate_command_string(mathml, command) { - Err(e) => panic!("\nStarting at '{}', '{} failed.\n{}", - start_id, command, &crate::interface::errors_to_string(&e)), + Err(e) => { + panic!("\nStarting at '{}', '{} failed.\n{}", + start_id, command, &crate::interface::errors_to_string(&e)) + }, Ok(nav_speech) => { let nav_speech = nav_speech.trim_end_matches(&[' ', ',', ';']); // debug!("Full speech: {}", nav_speech); @@ -1317,7 +1318,6 @@ mod tests { #[test] fn move_to_start() -> Result<()> { - init_logger(); let mathml_str = " b2! d From 67f34cb5b51478e0f6ea01796eac592a7e993b8b Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Mon, 27 Apr 2026 23:13:24 -0700 Subject: [PATCH 23/43] fix potential security problem where somehow a person puts in a path for Language, BrailleCode, or SpeechStyle. I limited those to letters and '-' and '_' ( e.g., en-us ). Added tests. --- src/prefs.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/prefs.rs b/src/prefs.rs index 25ed4f60..67108ee2 100644 --- a/src/prefs.rs +++ b/src/prefs.rs @@ -734,6 +734,13 @@ impl PreferenceManager { panic!("Internal error: set_string_pref called on invalid PreferenceManager -- error message\n{}", &self.error); }; + // verify language, braille, and SpeechStyle because these are used as access into the file system + // should be an ascii string with only letters, dashes, and underscores + if matches!(key, "Language" | "BrailleCode" | "SpeechStyle") && + !value.chars().all(|c| matches!(c, 'a'..='z' | 'A'..='Z' | '_' | '-')) { + bail!("{} is an invalid value! Must contains only ascii letters, '_', or'-'", key); + } + // don't do an update if the value hasn't changed let mut is_user_pref = true; if let Some(pref_value) = self.api_prefs.prefs.get(key) { @@ -1152,6 +1159,17 @@ cfg_if::cfg_if! {if #[cfg(not(feature = "include-zip"))] { }); } + #[test] + fn test_illegal_pref_values() { + PREF_MANAGER.with(|pref_manager| { + let mut pref_manager = pref_manager.borrow_mut(); + pref_manager.initialize(abs_rules_dir_path()).unwrap(); + assert!(pref_manager.set_string_pref("Language", "../../../my/path").is_err()); + assert!(pref_manager.set_string_pref("BrailleCode", "C:\\my\\path").is_err()); + assert!(pref_manager.set_string_pref("SpeechStyle", "/my/path").is_err()); + }); + } + #[test] #[ignore] // this is an ugly test for #262 -- it changes the prefs file and so is a bad thing in general fn test_up_to_date() { From 97ae493be0c2c5b8710f485f6d242938e18ffc22 Mon Sep 17 00:00:00 2001 From: nsoiffer Date: Mon, 27 Apr 2026 23:14:47 -0700 Subject: [PATCH 24/43] add Russian translator --- docs/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/index.md b/docs/index.md index 4b510d69..c4c71317 100644 --- a/docs/index.md +++ b/docs/index.md @@ -175,6 +175,7 @@ Translators: * German -- Nazli Andjic, Robert Graf and Paul Libbrecht (IU International University of Applied Sciences) * Indonesian -- Dr. Pinta Deniyanti Sampoerno, M.Si; Dr. Meiliasari, S.Pd., M.Sc; and Ari Hendarno, S.Pd., M.Kom. * Norwegian -- Marthe Gjelstad, National Library of Norway, Kvile +* Russian -- Danil Kostenkov * Spanish -- Noelia Ruiz Martínez (also helped with NVDA add-on development) and María Allo Roldán * Swedish -- Tim Arborealis Lötberg, Swedish Agency for Accessible Media (MTM) and Anders Eklund, SPSM * Vietnamese -- Dang Hoai Phúc and Trang Pham From bfb0d4f4d27480d1d61772ed970420e2a91349bf Mon Sep 17 00:00:00 2001 From: NSoiffer Date: Mon, 7 Apr 2025 15:23:34 -0700 Subject: [PATCH 25/43] Initial seeding for Russian --- Rules/Languages/ru/ClearSpeak_Rules.yaml | 791 ++++ Rules/Languages/ru/SharedRules/calculus.yaml | 56 + Rules/Languages/ru/SharedRules/default.yaml | 714 ++++ Rules/Languages/ru/SharedRules/general.yaml | 1048 +++++ Rules/Languages/ru/SharedRules/geometry.yaml | 79 + .../ru/SharedRules/linear-algebra.yaml | 36 + Rules/Languages/ru/SimpleSpeak_Rules.yaml | 347 ++ Rules/Languages/ru/definitions.yaml | 376 ++ Rules/Languages/ru/navigate.yaml | 1744 ++++++++ Rules/Languages/ru/overview.yaml | 120 + Rules/Languages/ru/unicode-full.yaml | 3646 +++++++++++++++++ Rules/Languages/ru/unicode.yaml | 549 +++ 12 files changed, 9506 insertions(+) create mode 100644 Rules/Languages/ru/ClearSpeak_Rules.yaml create mode 100644 Rules/Languages/ru/SharedRules/calculus.yaml create mode 100644 Rules/Languages/ru/SharedRules/default.yaml create mode 100644 Rules/Languages/ru/SharedRules/general.yaml create mode 100644 Rules/Languages/ru/SharedRules/geometry.yaml create mode 100644 Rules/Languages/ru/SharedRules/linear-algebra.yaml create mode 100644 Rules/Languages/ru/SimpleSpeak_Rules.yaml create mode 100644 Rules/Languages/ru/definitions.yaml create mode 100644 Rules/Languages/ru/navigate.yaml create mode 100644 Rules/Languages/ru/overview.yaml create mode 100644 Rules/Languages/ru/unicode-full.yaml create mode 100644 Rules/Languages/ru/unicode.yaml diff --git a/Rules/Languages/ru/ClearSpeak_Rules.yaml b/Rules/Languages/ru/ClearSpeak_Rules.yaml new file mode 100644 index 00000000..50dd8fcb --- /dev/null +++ b/Rules/Languages/ru/ClearSpeak_Rules.yaml @@ -0,0 +1,791 @@ +--- +- 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: "минус" # phrase(10 'minus' 4 equals 6) + - x: "translate(text(), '-_', '')" + +- name: default + tag: square-root + match: "." + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # phrase('the' square root of 25) + - test: + if: $ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd' + then: + - bookmark: "*[1]/@id" + - test: + if: parent::*[self::m:minus and count(*)=1] + then: [t: "отрицательное"] # phrase(minus 4 is a 'negative' number) + else: [t: "положительное"] # phrase(10 is a 'positive' number) + - t: "квадратный корень" # phrase(8 is the 'square root' of 64) + - test: + if: "$Verbosity!='Terse'" + then: [t: "из"] # phrase(the square root 'of' 5) + else: [pause: short] + - x: "*[1]" + - test: + - if: "$ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" + then: + - pause: short + - t: "end root" # phrase(the square root of x 'end root') + - pause: medium + - else_if: "IsNode(*[1], 'simple')" + then: [pause: short] + else: [pause: long] + +- name: default + tag: root + match: "." + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "квадратный корень 36"] # 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: "отрицательное"] # phrase(minus 6 is a 'negative' number) + else: [t: "положительное"] # phrase(10 is a 'positive' number) + - test: + if: "*[2][self::m:mn and not(contains(., '.'))]" + then_test: + - if: "*[2][.='2']" + then: [t: "квадратный корень"] # phrase(5 is the 'square root' of 25) + - else_if: "*[2][.='3']" + then: [t: "корень куба"] # phrase(5 is the 'cube root' of 625) + - else: [x: "ToOrdinal(*[2])", t: "корень"] # phrase(the square 'root' of 25) + else: + - test: + if: "*[2][self::m:mi][string-length(.)=1]" + then: + - x: "*[2]" + - pronounce: [{text: "-th"}, {ipa: "θ"}, {sapi5: "th"}, {eloquence: "T"}] + else: {x: "*[2]"} + - t: "корень" # phrase(the square 'root' of 36) + - test: + if: "$Verbosity!='Terse'" + then: [t: "из"] # phrase(the square root 'of' 36) + - x: "*[1]" + - test: + if: $ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd' + then: + - pause: short + - t: "end root" # phrase(start the fifth root of x 'end root') + - pause: medium + else_test: + if: IsNode(*[1], 'simple') + then: [pause: short] + else: [pause: long] + +# The 'negative' rule interacts with the msqrt/mroot rules as those might pick off this case ("the negative square root of x") +- name: negative_and_positive + tag: [plus, minus] + match: "count(*)=1 and contains(@data-intent-property, ':prefix:')" + replace: + - test: + if: + - "*[1][self::m:square-root or self::m:root] and" + - "($ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd')" + then: {t: ""} + else: + - bookmark: "@id" + - test: + if: "self::m:minus" + then: [t: "отрицательное"] # phrase(minus 5 is a 'negative' number) + else: [t: "положительное"] # 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 self::*[3][contains(@data-intent-property, ':unit')])] and + BaseNode(*[1])[contains(@data-intent-property, ':unit') or (self::m:mrow and self::*[3][contains(@data-intent-property, ':unit')])]" + replace: + - x: "*[1]" + - t: "перемещение" # 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(., '.')) and ($ClearSpeak_Fractions='Ordinal' or text()<20)] and" + - "*[2][self::m:mn][not(contains(., '.')) 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: common-fraction-mixed-number + tag: fraction + match: + - "preceding-sibling::*[1][self::m:mo][.='⁤'] and" # preceding element is invisible plus + - "($ClearSpeak_Fractions='Auto' or $ClearSpeak_Fractions='Ordinal' or $ClearSpeak_Fractions='EndFrac') and" + - "*[1][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or text()<20)] and" + - "*[2][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or (2<= text() and text()<=10))]" + 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: "а"] + - t: "дробь" # phrase(the 'fraction' with 3 over 4) + - x: "*[1]" + - t: "над" # 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: "конец фракции" # 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: "над" # phrase(the fraction 3 'over' 4) + - x: "*[2]" + - test: + if: "$ClearSpeak_Fractions='EndFrac' or $ClearSpeak_Fractions='OverEndFrac'" + then: + - pause: short + - t: "конец фракции" # phrase(7 over 8 'end fraction') + - pause: short + +- name: default + tag: fraction + match: "." + replace: + - ot: "квадратный тут 25" # phrase(5 is 'the' square toot of 25) + - t: "фракция с числителем" # phrase(the 'fraction with numerator' 6) + - test: + if: not(IsNode(*[1], 'simple')) + then: [pause: medium] + - x: "*[1]" + - pause: medium + - t: "и знаменатель" # 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: "конечной фракцией" # 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: "обратное"] # phrase(8 over 5 is the 'inverse' of 5 over 8) + else_test: + if: $ClearSpeak_Trig = 'ArcTrig' + then: [bookmark: "*[2]/@id", t: "дуга", x: "*[1]"] # phrase(the 'arc' of a circle) + else: [bookmark: "*[2]/@id", t: "обратное", x: "*[1]"] # default/Auto # phrase(8 over 5 is the 'inverse' of 5 over 8) + +- 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: "квадрат"] # phrase(25 equals 5 'squared') + else: [t: "кубиками"] # 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: "а"] # 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: "сила" # 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: "поднято до показателя" # phrase(5 'raised to the exponent' x plus 1) + - pause: short + - x: "*[2]" + - pause: short + - t: "конечный показатель" # phrase(5 raised to the exponent x plus 1 'end exponent') + +- name: AfterPower-default + tag: power + match: "$ClearSpeak_Exponents = 'AfterPower'" + replace: + - x: "*[1]" + - t: "поднялся на власть" # 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: "квадрат" # 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: "кубик" # phrase(5 'cubed' equals 125) + +- name: simple-integer + tag: power + match: "*[2][self::m:mn][not(contains(., '.'))]" + replace: + - x: "*[1]" + - t: "до" # 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: "власти"] # 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: "до" # phrase(2 raised 'to the' power 7) + - x: "*[2]" + - test: + if: "$ClearSpeak_Exponents != 'Ordinal'" + then: [t: "власти"] # phrase(2 raised to the 'power' 7) + +- name: simple-var + tag: power + match: "*[2][self::m:mi][string-length(.)=1]" + replace: + - x: "*[1]" + - t: "до" # phrase(3 raised 'to the' power 7) + - x: "*[2]" + - pronounce: [{text: "-th"}, {ipa: "θ"}, {sapi5: "th"}, {eloquence: "T"}] + - test: + if: "$ClearSpeak_Exponents != 'Ordinal'" + then: [t: "власти"] # phrase(2 raised to the 'power' 7) + +# match nested exponent, where the nested exponent is has the power 2 or 3 (n below) +# [xxx]^n, - [xxx]^n, [xxx] var^n, -[xxx] var^n +# 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: "поднят до" # phrase(x 'raised to the' second power) + - x: "*[2]" + - t: "сила" # 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: "поднят до" # phrase(x 'raised to the' second power) + - x: "*[2]" + - t: "сила" # 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: "поднят до" # phrase(x 'raised to the' second power) + - x: "*[2]" + - t: "сила" # 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: "поднят до" # phrase(x 'raised to the' second power) + - x: "*[2]" + - t: "сила" # 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: "поднят до экспонента" # phrase(x is 'raised to the exponent') + - pause: short + - x: "*[2]" + - pause: short + - t: "конечный показатель" # phrase(and now 'end exponent' has been reached) + +- name: default + tag: power + match: "." + replace: + - x: "*[1]" + - t: "поднят до" # phrase(x 'raised to the' second power) + - x: "*[2]" + - t: "сила" # 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: "а"] # phrase('the' absolute value of 25) + - x: "$WordToSay" + - t: "из" # phrase(the absolute value 'of' 25) + - x: "*[1]" + - test: + if: "$ClearSpeak_AbsoluteValue = 'AbsEnd'" + then: + - pause: short + - t: "конец" # phrase('end' absolute value) + - x: "$WordToSay" + - pause: short + +- name: set + tag: set + match: "." + replace: + - test: + - if: "count(*)=0" + then: [t: "пустой набор"] # phrase('the empty set') + - else_if: "count(*)=2" + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # phrase('the' empty set) + - t: "пустой набор" # phrase(the 'empty set') + - else_if: "count(*[1]/*)=3 and *[1]/*[2][self::m:mo][.=':' or .='|' or .='∣']" + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # phrase('the' set of all integers) + - t: "набор чисел" # phrase(this is a 'set of' numbers) + - test: + if: $ClearSpeak_Sets != 'woAll' + then: [t: "всех"] # phrase(the set of 'all' integers) + - x: "*[1]/*[1]" + - t: "так что" # phrase(the set S 'such that' x is less than y) + - x: "*[1]/*[3]" + else: + - test: + if: $ClearSpeak_Sets != 'SilentBracket' + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # phrase('the' set of integers) + - t: "набор" # phrase(this is a 'set' of integers) + - x: "*[1]" + +- # intervals are controlled by a ClearSpeak Preference -- parens/brackets don't have to match, so we avoid IsBracketed + # alternatively, we could have four (or ten) rules, but there is a lot of duplication if we do that + # 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: "интервал от " # 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: "не"] # phrase(the interval from a to b 'not' including b) + - t: "в том числе " # 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: "или"] # phrase(the interval including a 'or' b ) + - else_if: "name(.)='closed-interval'" + then: [t: "и"] # phrase(the interval including a 'and' b) + else: [t: "но"] # phrase(the interval including a 'but' not b) + # 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: "не"] # phrase(the interval 'not' including a) + - t: "включая" # 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: "выберите" # 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: "ряд" # phrase(the first 'row' of a matrix) + - x: "count(preceding-sibling::*)+1" + - test: + if: .[self::m:mlabeledtr] + then: + - t: "с меткой" # phrase(the line 'with label' first equation) + - x: "*[1]/*" + - pause: short + - pause: medium + - test: + if: .[self::m:mlabeledtr] + then: [x: "*[position()>1]"] + else: {x: "*"} + +- # handle both log and ln + name: ClearSpeak-log + tag: mrow + variables: [{log_is_simple: "IsNode(*[3],'simple')"}] + match: + - "count(*)=3 and" + - "*[1][self::m:mi][.='log' or .='ln'] and" + - "*[2][self::m:mo][.='⁡']" + replace: + - test: + if: "$log_is_simple" + then_test: + - if: "*[1][.='log']" + then: [t: "log"] # phrase(the 'log' of x) + - else_if: $ClearSpeak_Log = 'LnAsNaturalLog' + then: [t: "натуральный журнал"] # phrase(the 'natural log' of the product of 2 numbers) + else: [spell: "'ln'"] + else: + - test: + if: "$Verbosity!='Terse' and not(log_is_simple)" + then: [t: "а"] # phrase('the' square root of 25) + - test: + - if: "*[1][.='log']" + then: [t: "бревно"] + - else_if: $ClearSpeak_Log = 'LnAsNaturalLog' + then: [t: "естественный журнал"] # phrase(the 'natural log' of x) + else: [spell: "'ln'"] + - t: "из" # phrase(the natural log 'of' x) + - pause: short + - x: "*[3]" + +- 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: "случай"] # 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: "линия"] # phrase(this is the first 'line' of three lines) + - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" + then: [t: "ограничение"] # phrase(this is the first 'constraint' of three constraints) + - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" + then: [t: "уравнение"] # phrase(this is the first 'equation' of three equations) + - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" + then: [t: "ряд"] # phrase(this is the first 'row' of three rows) + - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" + then: [t: "шаг"] # phrase(this is the first 'step' of three steps) + # else 'None -- don't say anything' + - test: + - if: "$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: "случае"] # phrase(in this 'case' x is not equal to y) + - else_if: "$ClearSpeak_MultiLineLabel = 'Auto' or $ClearSpeak_MultiLineLabel = 'Line'" # already dealt with Auto/Case + then: [t: "линия"] # phrase(the straight 'line' between x and y) + - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" + then: [t: "ограничение"] # phrase(there is a 'constraint' on possible values) + - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" + then: [t: "уравнение"] # phrase(the 'equation' pi r squared gives the area of a circle) + - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" + then: [t: "строке"] # phrase(the values on the top 'row' are relevant) + - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" + then: [t: "шаг"] # phrase(this is a 'step' by step process) + # else 'None -- don't say anything' + - x: "count(preceding-sibling::*[not(contains(@data-intent-property, ':continued-row:'))]) + 1" + - test: + if: "self::m:mlabeledtr" + then: + - t: "с меткой" # 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: "раз"] # 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: "раз" # phrase(5 'times' 3 equals 15) + +- name: no-say-parens + tag: mrow + match: + - "parent::*[not(self::m:msup) and not(self::m:msub) and not(self::m:msubsup) and not(self::m:power) and" + - " not(self::m:math) ] and " # rule out [x] standing alone + - "( IsBracketed(., '(', ')') or IsBracketed(., '[', ']') ) and " + - "not( $ClearSpeak_Functions = 'None' and " + - " (preceding-sibling::*[1][.='⁡'] or following-sibling::*[1][.='⁡']) ) and " + - "not( $ClearSpeak_ImpliedTimes = 'None' and " + - " (preceding-sibling::*[1][.='⁢'] or following-sibling::*[1][.='⁢']) ) and " + - "IsNode(*[2], 'simple') and" + - "not(preceding-sibling::*[1][.='\u2062' and @data-function-guess]) and" + - "not(ancestor-or-self::*[contains(@data-intent-property, ':literal:')])" + # missing clause: 'a positive fraction that is spoken as an ordinal + # (either by the Ordinal preference or by the default rules)' + replace: + - x: "*[2]" + +- include: "SharedRules/geometry.yaml" +- include: "SharedRules/linear-algebra.yaml" +- include: "SharedRules/general.yaml" +- include: "SharedRules/default.yaml" diff --git a/Rules/Languages/ru/SharedRules/calculus.yaml b/Rules/Languages/ru/SharedRules/calculus.yaml new file mode 100644 index 00000000..a5ad70a0 --- /dev/null +++ b/Rules/Languages/ru/SharedRules/calculus.yaml @@ -0,0 +1,56 @@ +--- + +- name: laplacian + tag: laplacian + match: "count(*) <= 1" # can be on ∇^2 or on enclosing mrow + replace: + - t: "лапласиан" # phrase('laplacian' of x) -- "LahPlahsian" sounds better with speech engines tested + - test: + if: "count(*) = 1" + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "из"] # phrase(function 'of' one variable) -- note OneCore voices spell out "div" + - test: + if: "not(IsNode(*[1], 'leaf'))" + then: [pause: short] + - x: "*[1]" + +- name: divergence + tag: divergence + match: "count(*) = 1" + replace: + - test: + if: "$Verbosity='Terse'" + then: [t: "div"] # phrase('div' is short for divergence) -- note OneCore voices spell out "div" + else: [t: "дивергенция"] # phrase('divergence of' this function from the mean) + - test: + if: "not(IsNode(*[1], 'leaf'))" + then: [pause: short] + - x: "*[1]" + +- name: curl + tag: curl + match: "count(*) = 1" + replace: + - t: "керл" # phrase(the 'curl of' a field) + - test: + if: "$Verbosity!='Terse'" + then: [t: "из"] # phrase(function 'of' one variable) -- note OneCore voices spell out "div" + - test: + if: "not(IsNode(*[1], 'leaf'))" + then: [pause: short] + - x: "*[1]" + +- name: gradient + tag: gradient + match: "count(*) = 1" + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "градиент"] # phrase(the hill has a 'gradient of' five percent) + else: [t: "del"] # phrase(the delete key is labeled 'del') + - test: + if: "not(IsNode(*[1], 'leaf'))" + then: [pause: short] + - x: "*[1]" diff --git a/Rules/Languages/ru/SharedRules/default.yaml b/Rules/Languages/ru/SharedRules/default.yaml new file mode 100644 index 00000000..fa8293ab --- /dev/null +++ b/Rules/Languages/ru/SharedRules/default.yaml @@ -0,0 +1,714 @@ +--- +#default rules shared among several speech rules +- name: default + tag: math + match: "." + replace: + - with: + variables: + - ClearSpeak_Fractions: "IfThenElse($Verbosity='Verbose' and $ClearSpeak_Fractions='Auto', 'EndFrac', $ClearSpeak_Fractions)" + - ClearSpeak_AbsoluteValue: "IfThenElse($Verbosity='Verbose' and $ClearSpeak_AbsoluteValue='Auto', 'AbsEnd', $ClearSpeak_AbsoluteValue)" + - ClearSpeak_Roots: "IfThenElse($Verbosity='Verbose' and $ClearSpeak_Roots='Auto', 'RootEnd', $ClearSpeak_Roots)" + - ClearSpeak_Matrix: "IfThenElse($Verbosity='Verbose' and $ClearSpeak_Matrix='Auto', 'EndMatrix', $ClearSpeak_Matrix)" + + - MatchingPause: false() + # should be set at mtable level, but unknown intents make that impossible to know + - IsColumnSilent: false() + replace: + - test: + if: "$MathRate = 100" + then: [x: "*"] + else: + - rate: + value: "$MathRate" + replace: [x: "*"] + +- name: empty-mrow + tag: mrow + match: "not(*)" + replace: + - t: "полем" # say nothing -- placeholder + +- name: default + tag: mrow + match: "." + replace: + - insert: + nodes: "*" + replace: [pause: auto] + +- name: default + tag: mn + match: "." + replace: + - bookmark: "@id" + - x: "translate(., $BlockSeparators, '')" # remove digit block separators + +- name: default + tag: [mo, mtext] + match: "." + replace: + - bookmark: "@id" + - x: "text()" + +- name: default + tag: mi + match: "." + replace: + - bookmark: "@id" + - test: + - if: "string-length(.) = 1 and text() != '_'" # need unicode.tdl to kick in for single letter tokens + then: [x: "text()"] + - else_if: "@data-chem-element" # NavMode=Character needs this + then: [spell: "text()", pause: "short"] + else: [x: "translate(., '-_\u00A0', ' ')"] # from intent literals or from extra spaces added (which get deleted) + +- name: default + tag: ms + match: "." + replace: + - t: "строка" # phrase('the string' is long) + - pause: short + - x: "text()" + +- name: default + tag: mstyle + match: "." + replace: [x: "*"] + + +- name: literal-simple + # don't include nested fractions. E.g, fraction a plus b over c + 1 end fraction" is ambiguous + # by simplistic SimpleSpeak's rules "b over c" is a fraction, but if we say nested fractions + # are never simple, then any 'over' applies only to enclosing "fraction...end fraction" pair. + tag: mfrac + match: + - "(IsNode(*[1],'leaf') and IsNode(*[2],'leaf')) and" + - "not(ancestor::*[name() != 'mrow'][1]/self::m:fraction)" # FIX: can't test for mrow -- what should be used??? + replace: + - x: "*[1]" + - t: "фракция x " # phrase("the fraction x 'over' y") + - x: "*[2]" + - pause: short + +- name: literal-default + tag: mfrac + match: "." + replace: + - t: "начать" # phrase("'start' fraction x over y end of fraction") + - pause: short + - x: "*[1]" + - test: + if: "not(IsNode(*[1],'leaf'))" + then: [pause: short] + - t: "фракция x " # phrase("the fraction x 'over' y") + - test: + if: "not(IsNode(*[2],'leaf'))" + then: [pause: short] + - x: "*[2]" + - pause: short + - test: + if: "$Impairment = 'Blindness'" + then: [t: "начало фракции x над y "] # phrase("start of fraction x over y 'end over'") + - pause: medium + + +# not sure what really should be said for these since we should not assume they are square roots +- name: literal-default + tag: msqrt + match: "." + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "корень x"] # phrase("'the' root of x") + - t: "корень" + - test: + if: "$Verbosity!='Terse'" + then: [t: "корень"] # phrase("the root 'of' x") + - x: "*[1]" + - pause: short + - test: + if: "not(IsNode(*[1],'leaf')) or $Impairment = 'Blindness'" + then: [t: "корень x "] # phrase("root of x 'end root symbol'") + +# not sure what really should be said for these since we should not assume they are square roots +- name: literal-default + tag: mroot + match: "." + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "корень x"] # phrase("'the' root of x") + - t: "корень с индексом" # phrase("the 'root with index' 3 of 5") + - x: "*[1]" + - pause: short + - t: "корень" # phrase("the root 'of' x") + - x: "*[2]" + - pause: short + - test: + if: "not(IsNode(*[2],'leaf'))" + then: [t: "корень x "] # phrase("root of x 'end root symbol'") + + +- name: simple-sub + tag: indexed-by + # invisible comma -- want "x 1 when subscript is an integer" + match: "count(*)=2 and $Verbosity='Terse' and *[2][self::m:mn and translate(., '.,', '')=.]" + replace: + - x: "*[1]" + - x: "*[2]" + - pause: short + +- name: no-end-sub + tag: indexed-by + match: "count(*)=2 and *[2][self::m:mrow and *[2][.='⁣']]" + replace: + - x: "*[1]" + - t: "sub" # phrase(x 'sub' 2) + - x: "*[2]" + - pause: short + +# otherwise let definitions/default infix handle it + +- name: literal + tag: msub + match: "." + replace: + - x: "*[1]" + - test: + if: "not($Verbosity='Terse' and *[2][self::m:mn and not(translate(., '.,', '')!=.)])" # just say "x 1" for terse vs "x sub 1" + then: [t: "sub"] # phrase(x 'sub' 2) + - x: "*[2]" + + +- name: literal + tag: [msup, msubsup] + match: "." + replace: + - x: "*[1]" + - test: + if: "name(.)='msubsup'" + then: + - t: "sub" # phrase(x 'sub' 2) + - x: "*[2]" + - test: + if: "*[last()][translate(., '′″‴⁗†‡°*', '')='']" + then: [x: "*[last()]"] + else_test: + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" # FIX: is this test necessary? + then: + - t: "super" # phrase(x 'super' 2) + - x: "*[last()]" + - test: + if: "not(IsNode(*[last()], 'simple')) or $Impairment = 'Blindness'" + then: [t: "end of super"] # phrase(x super 2 'end of super') + else: + - test: + if: "$Verbosity='Verbose'" + then: [t: "суперпид"] + else: [t: "супер"] + - x: "*[last()]" + - test: + if: "$Verbosity='Verbose'" + then: [t: "конец superscript"] + else: [t: "конец супер"] + +- name: default + tag: munder + match: "." + replace: + - test: + if: "not(IsNode(*[1], 'leaf'))" + then: [t: "количество"] # phrase(phrase(x 'quantity' with y above it) + - x: "*[1]" + - t: "с" # phrase(x 'with' z below it) + - x: "*[2]" + - t: "ниже" # phrase(x with z 'below' it) + +- name: diacriticals + tag: mover + match: "*[1][self::m:mi] and *[2][translate(., '\u0306\u030c.\u00A8\u02D9\u20DB\u20DC`^ˇ~→¯_', '')='']" + replace: + - x: "*[1]" + - x: "*[2]" + +- name: default + tag: mover + match: "." + replace: + - test: + if: "not(IsNode(*[1], 'leaf'))" + then: [t: "количество"] # phrase(phrase(the 'quantity' x plus 1 with y above it) + - x: "*[1]" + - t: "с" # phrase(x modified 'with' y above it) + - x: "*[2]" + - t: "с" # phrase(x modified 'with' y above it) + +- name: default + tag: munderover + match: "." + replace: + - test: + if: "not(IsNode(*[1], 'leaf'))" + then: [t: "количество"] # phrase(the 'quantity' x plus 1 with y above it) + - x: "*[1]" + - t: "с" # phrase(x modified 'with' y above it) + - x: "*[2]" + - t: "ниже и" # phrase(x modified with y 'below and' y above it) + - x: "*[3]" + - t: "выше" # phrase(x modified with y 'above' it) + +- name: default + # Here we support up to 2 prescripts and up to 4 postscripts -- that should cover all reasonable cases + # If there are more, we just dump them out without regard to sup/super :-( + # FIX: this could use more special cases + # There is (currently) no way in MathCAT to deal with n-ary arguments other than "all" ('*') or an individual entry ('*[1]'). + tag: mmultiscripts + match: "." + variables: + # computing the number of postscripts is messy because of being optionally present -- we use "mod" to get the count right + - Prescripts: "m:mprescripts/following-sibling::*" + - NumChildren: "count(*)" # need to stash this since the count is wrong inside '*[...]' below + - Postscripts: "*[position()>1 and position() < (last() + ($NumChildren mod 2) -count($Prescripts))]" + replace: + - x: "*[1]" + - test: + if: "$Prescripts" # more common case + then: + - with: + variables: + - PreSubscript: "IfThenElse($Verbosity='Verbose', 'pre subscript', 'pre sub')" + - PreSuperscript: "IfThenElse($Verbosity='Verbose', 'pre superscript', 'pre super')" + replace: + - test: # only bother announcing if there is more than one prescript + if: "count($Prescripts) > 2" + then: + - t: "с" # phrase(substitute x 'with' y) + - x: "count($Prescripts) div 2" + - t: "рецепты" # phrase(in this equation certain 'prescripts' apply) + - pause: short + - test: + if: "not($Prescripts[1][self::m:none])" + then: + - x: "$PreSubscript" + - x: "$Prescripts[1]" + - test: + if: "not($Prescripts[1][self::m:none] or $Prescripts[2][self::m:none])" + then: [t: "и"] # phrase(10 is greater than 8 'and' less than 15) + - test: + if: "not($Prescripts[2][self::m:none])" + then: + - x: "$PreSuperscript" + - x: "$Prescripts[2]" + - pause: short + - test: + if: "count($Prescripts) > 2" # more common case + then: + - test: + if: "not($Prescripts[3][self::m:none])" + then: + - x: "$PreSubscript" + - x: "$Prescripts[3]" + - test: + if: "not($Prescripts[3][self::m:none] or $Prescripts[4][self::m:none])" + then: [t: "и"] # phrase(10 is grater than 8 'and' less than 15) + - test: + if: "not($Prescripts[4][self::m:none])" + then: + - x: "$PreSuperscript" + - x: "$Prescripts[4]" + - test: + if: "count($Prescripts) > 4" # give up and just dump them out so at least the content is there + then: + - t: "и чередующиеся рецепты" # phrase(in this case there are values 'and alternating prescripts') + - x: "$Prescripts[position() > 4]" + - t: "конечные рецепты" # phrase(This is where 'end prescripts' occurs) + - test: + if: "$Postscripts" + then: + - with: + variables: + - PostSubscript: "IfThenElse($Verbosity='Verbose', 'subscript', 'sub')" + - PostSuperscript: "IfThenElse($Verbosity='Verbose', 'superscript', 'super')" + replace: + - test: # only bother announcing if there is more than one postscript + if: "count($Postscripts) > 2" + then: + - test: + if: "$Prescripts" + then: [t: "и"] # phrase(10 is greater than 8 'and' less than 15) + - t: "с" # phrase(substitute x 'with' y) + - x: "count($Postscripts) div 2" + - t: "постскриптов" # phrase(this material includes several 'postscripts') + - pause: short + - test: + if: "not($Postscripts[1][self::m:none])" + then: + - x: "$PostSubscript" + - x: "$Postscripts[1]" + - test: + if: "not($Postscripts[1][self::m:none] or $Postscripts[2][self::m:none])" + then: [t: "и"] # phrase(10 is greater than 8 'and' less than 15) + - test: + if: "not($Postscripts[2][self::m:none])" + then: + - x: "$PostSuperscript" + - x: "$Postscripts[2]" + - test: + if: "count($Postscripts) > 2" + then: + - test: + if: "not($Postscripts[3][self::m:none])" + then: + - x: "$PostSubscript" + - x: "$Postscripts[3]" + - test: + if: "not($Postscripts[3][self::m:none] or $Postscripts[4][self::m:none])" + then: [t: "и"] # phrase(10 is greater than 8 'and' less than 15) + - test: + if: "not($Postscripts[4][self::m:none])" + then: + - x: "$PostSuperscript" + - x: "$Postscripts[4]" + - test: + if: "count($Postscripts) > 4" + then: + - test: + if: "not($Postscripts[5][self::m:none])" + then: + - x: "$PostSubscript" + - x: "$Postscripts[5]" + - test: + if: "not($Postscripts[5][self::m:none] or $Postscripts[6][self::m:none])" + then: [t: "и"] # phrase(10 is greater than 8 'and' less than 15) + - test: + if: "not($Postscripts[6][self::m:none])" + then: + - x: "$PostSuperscript" + - x: "$Postscripts[6]" + - test: + if: "count($Postscripts) > 6" + then: + - test: + if: "not($Postscripts[7][self::m:none])" + then: + - x: "$PostSubscript" + - x: "$Postscripts[7]" + - test: + if: "not($Postscripts[7][self::m:none] or $Postscripts[8][self::m:none])" + then: [t: "и"] # phrase(10 is less than 15 'and' greater than 5) + - test: + if: "not($Postscripts[8][self::m:none])" + then: + - x: "$PostSuperscript" + - x: "$Postscripts[8]" + - test: + if: "count($Postscripts) > 8" # give up and just dump them out so at least the content is there + then: + - t: "и чередующиеся сценарии" # phrase(this situation involves complexities 'and alternating scripts') + - x: "$Postscripts[position() > 8]" + - t: "конечные сценарии" # phrase(At this point 'end scripts' occurs) + +- name: default + tag: mtable + variables: [IsColumnSilent: false()] + match: "." + replace: + - t: "стол с" # phrase(the 'table with' 3 rows) + - x: count(*) + - test: + if: count(*)=1 + then: [t: "строкой"] # phrase(the table with 1 'row') + else: [t: "рядами"] # phrase(the table with 3 'rows') + - t: "и " # phrase(the table with 3 rows 'and' 4 columns) + - x: "count(*[1]/*)" + - test: + if: "count(*[1]/*)=1" + then: [t: "столбцом"] # phrase(the table with 3 rows and 1 'column') + else: [t: "столбцами"] # phrase(the table with 3 rows and 4 'columns') + - pause: long + - 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: "ряд" # phrase(the first 'row' of a matrix) + - x: "count(preceding-sibling::*)+1" + - test: + if: .[self::m:mlabeledtr] + then: + - t: "с меткой" # phrase(the line 'with label' first equation) + - x: "*[1]/*" + - pause: short + - pause: medium + - test: + if: .[self::m:mlabeledtr] + then: [x: "*[position()>1]"] + else: {x: "*"} + +- 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: "столбец" # phrase(the first 'column' of the matrix) + - x: "count(preceding-sibling::*)+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: "пустое поле" # 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: "коробка", pause: short] # phrase(the 'box' around the expression) + - test: + if: ".[contains(@notation,'roundedbox')]" + then: [t: "круглая коробка", pause: short] # phrase(the 'round box' around the expression) + - test: + if: ".[contains(@notation,'circle')]" + then: [t: "круг", pause: short] # phrase(the 'circle' around the expression) + - 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: "на странице" # phrase(draw a straight 'line' on the page) + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' left ')]" + then: [t: "слева", pause: short] # phrase(line on 'left' of the expression) + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' right ')]" + then: [t: "праве", pause: short] # phrase(line on 'right' of the expression) + - test: + if: ".[contains(@notation,'top')]" + then: [t: "вершине", pause: short] # phrase(line on 'top' of the expression) + - test: + if: ".[contains(@notation,'bottom')]" + then: [t: "дне", 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: "вверх по диагонали", pause: short] # phrase(the line runs 'up diagonal') + - test: + if: ".[contains(@notation,'downdiagonalstrike')]" + then: [t: "вниз по диагонали", pause: short] # phrase(the line runs 'down diagonal') + - test: + if: ".[contains(@notation,'verticalstrike')]" + then: [t: "вертикальная", pause: short] # phrase(the line is 'vertical') + - test: + if: ".[contains(@notation,'horizontalstrike')]" + then: [t: "горизонтальная", pause: short] # phrase(the line is 'horizontal') + - t: "вычеркнуть" # phrase(please 'cross out' the incorrect answer) + - pause: short + - test: + if: ".[contains(@notation,'uparrow')]" + then: [t: "стрелой вверх", pause: short] # phrase(direction is shown by the 'up arrow') + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' downarrow ')]" + then: [t: "стрелка вниз", pause: short] # phrase(the trend is shown by the 'down arrow') + - test: + if: ".[contains(@notation,'leftarrow')]" + then: [t: "стрелка левого", pause: short] # phrase(the 'left arrow' indicates going back) + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' rightarrow ')]" + then: [t: "стрелка правого", pause: short] # phrase(the 'right arrow' indicates moving forward) + - test: + if: ".[contains(@notation,'northeastarrow')]" + then: [t: "северо -восточной стрелкой", pause: short] # phrase(direction is indicated by the 'northeast arrow') + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' southeastarrow ')]" + then: [t: "юго -восточной стрелой", pause: short] # phrase(direction is shown by the 'southeast arrow') + - test: + if: ".[contains(concat(' ', normalize-space(@notation), ' '), ' southwestarrow ')]" + then: [t: "юго -западной стрелкой", pause: short] # phrase(direction is shown by the 'southwest arrow') + - test: + if: ".[contains(@notation,'northwestarrow')]" + then: [t: "северо -западной стрелкой", pause: short] # phrase(direction is shown by the 'northwest arrow') + - test: + if: ".[contains(@notation,'updownarrow')]" + then: [t: "двойной вертикальной стрелкой", pause: short] # phrase(upward movement is indicated by the 'double ended vertical arrow') + - test: + if: ".[contains(@notation,'leftrightarrow')]" + then: [t: "горизонтальной стрелкой", pause: short] # phrase(progress is indicated by the 'double ended horizontal arrow') + - test: + if: ".[contains(@notation,'northeastsouthwestarrow')]" + then: [t: "двойной диагональной стрелкой", pause: short] # phrase(trend is indicated by the 'double ended up diagonal arrow') + - test: + if: ".[contains(@notation,'northwestsoutheastarrow')]" + then: [t: "двойной оконной диагональной стрелкой", pause: short] # phrase(trend is indicated by the 'double ended down diagonal arrow') + - test: + if: ".[contains(@notation,'actuarial')]" + then: [t: "актуарный символ", pause: short] # phrase(the 'actuarial symbol' represents a specific quantity) + - test: + if: ".[contains(@notation,'madrub')]" + then: [t: "арабский факторный символ", pause: short] # phrase(the 'arabic factorial symbol' represents a factorial operation) + - test: + if: ".[contains(@notation,'phasorangle')]" + then: [t: "угол фазора", 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: "символ длинного деления", pause: short] # phrase(the 'long division symbol' indicates a long division calculation) + - test: + if: ".[contains(@notation,'radical')]" + then: [t: "квадратный корень", pause: short] # phrase(5 is the 'square root' of 25) + - t: "заключающимися" # phrase(parentheses are 'enclosing' part of the equation) + - test: + if: "*[self::m:mtext and .=' ']" + then: [t: "пространство"] # otherwise there is complete silence # phrase(there is a 'space' between the words) + else: [x: "*"] + - test: + if: "$Impairment = 'Blindness' and ( $SpeechStyle != 'SimpleSpeak' or not(IsNode(*[1], 'leaf')) )" + then: [t: "конечного корпуса"] # phrase(reached the 'end enclosure' point) + - pause: short + +- name: semantics + tag: "semantics" + match: "*[@encoding='MathML-Presentation']" + replace: + - x: "*[@encoding='MathML-Presentation']/*[1]" + +- name: semantics-default + tag: "semantics" + match: . + replace: + - x: "*[1]" + +- name: apply-function + tag: "apply-function" + match: . + replace: + - x: "*[1]" + - t: "применяется к" # phrase(the function sine 'applied to' x plus y) + - x: "*[2]" + + +# Here are the intent hints that need to be handled: 'prefix' | 'infix' | 'postfix' | 'function' | 'silent' +- name: silent-intent + # uncaught intent -- the args have been inserted in the order of speech + tag: "*" + match: "count(*)>0 and contains(@data-intent-property, ':silent:')" + replace: + - x: "*" + - test: + if: "IsNode(., '2D')" + then: [pause: short] + else: [pause: auto] + +- name: prefix-intent + # uncaught intent -- the args have been inserted in the order of speech + tag: "*" + match: "count(*)>0 and contains(@data-intent-property, ':prefix:')" + replace: + - x: "SpeakIntentName(name(.), $Verbosity, 'prefix')" + - x: "*" + - test: + if: "not( IsBracketed(., '', '') or IsNode(*[last()], 'simple') )" + then: [x: "SpeakBracketingIntentName(name(.), $Verbosity, 'prefix', 'end')"] + - test: + if: "IsNode(., '2D')" + then: [pause: short] + else: [pause: auto] + +- name: postfix-intent + # uncaught intent -- the args have been inserted in the order of speech + tag: "*" + match: "count(*)>0 and contains(@data-intent-property, ':postfix:')" + replace: + - test: + if: "$Impairment = 'Blindness' and not( IsBracketed(., '', '') or IsNode(*[1], 'simple') )" + then: [x: "SpeakBracketingIntentName(name(.), $Verbosity, 'postfix', 'start')"] + - x: "*" + - x: "SpeakIntentName(name(.), $Verbosity, 'postfix')" + +- name: infix-intent + # uncaught intent -- the args have been inserted in the order of speech + tag: "*" + match: "count(*)>0 and contains(@data-intent-property, ':infix:')" + replace: + - test: + if: "$Impairment = 'Blindness' and not( IsBracketed(., '', '') or IsNode(*[1], 'simple') )" + then: [x: "SpeakBracketingIntentName(name(.), $Verbosity, 'infix', 'start')"] + - test: + if: "count(*) = 1" # in cases such as continued-row, plus/minus might have just one child + then: + - x: "SpeakIntentName(name(.), $Verbosity, 'infix')" + - pause: auto + - x: "*[1]" + else: + - insert: + nodes: "*" + replace: [x: "SpeakIntentName(name(.), $Verbosity, 'infix')", pause: auto] + - test: + if: "$Impairment = 'Blindness' and not( IsBracketed(., '', '') or IsNode(*[last()], 'simple') )" + then: [x: "SpeakBracketingIntentName(name(.), $Verbosity, 'infix', 'end')"] + - test: + if: "IsNode(., '2D')" # add (probably) a slightly longer pause if this came from a 2D node + then: [pause: short] + else: [pause: auto] + +- name: function-intent + # uncaught intent -- speak as foo of arg1 comma arg2 .... The MathML spec requires arguments to functions + tag: "*" + match: "count(*)>0" + replace: + - x: "SpeakIntentName(name(.), $Verbosity, 'function')" + - test: + if: "$Verbosity != 'Terse' and not(contains(@data-intent-property, ':literal:')) and + not(count(*)=2 and (IsInDefinition(*[1], 'TrigFunctionNames') or IsInDefinition(name(.), 'TerseFunctionNames')) and IsNode(*[2], 'simple'))" + then: [t: "из", pause: auto] # phrase(sine 'of' 5) + - insert: + nodes: "*" + replace: + - test: + if: "not(contains(@data-intent-property, ':literal:'))" + then: [x: "','"] + - pause: auto + - test: + # speak "end ..." if not bracketed or last child is not simple and not last node + if: "$Impairment = 'Blindness' and not(*[last()][IsBracketed(., '', '') or IsNode(., 'simple')] )" + then: [x: "SpeakBracketingIntentName(name(.), $Verbosity, 'function', 'end')"] + - test: + if: "IsNode(., '2D')" + then: [pause: short] + else: [pause: auto] + + +- name: default-text + # unknown leaf -- just speak the text -- could be a literal intent + tag: "*" + match: "." + replace: + - x: "translate(name(), '-_', ' ')" diff --git a/Rules/Languages/ru/SharedRules/general.yaml b/Rules/Languages/ru/SharedRules/general.yaml new file mode 100644 index 00000000..cb95e515 --- /dev/null +++ b/Rules/Languages/ru/SharedRules/general.yaml @@ -0,0 +1,1048 @@ +--- + +# number-sets are a little messy in that the base was converted to a number-set, so we have to match that (simple) case last +- name: pos-neg-number-sets + tag: number-sets + match: "count(*)=2 and *[2][.='+' or .='-']" + replace: + - test: + if: "$Verbosity!='Terse'" + then: + - t: "а" # phrase('the' square root of 25 equals 5) + - bookmark: "*[2]/@id" + - test: + - if: "*[2][.='+']" + then: [t: "положительных"] # phrase(set of all 'positive' integers less than 10) + else: [t: "негативных"] # phrase(set of all 'negative' integers less than minus 10) + - bookmark: "*[1]/@id" + - test: + - if: "*[1][.='ℂ']" + then: [t: "комплексные числа"] # phrase('complex numbers' consist of two parts) + - else_if: "*[1][.='ℕ']" + then: [t: "натуральные числа"] # phrase('natural numbers' are numbers from 1 to infinity) + - else_if: "*[1][.='ℚ']" + then: [t: "рациональные числа"] # phrase('rational numbers' are the fraction of 2 integers) + - else_if: "*[1][.='ℝ']" + then: [t: "реальные числа"] # phrase('real numbers' can be both positive and negative) + - else_if: "*[1][.='ℤ']" + then: [t: "целые числа"] # phrase(positive 'integers' are natural numbers above 0) + else: [x: "*[1][text()]"] # shouldn't happen + +- name: dimension-number-sets + + # should be single digit integer at this point (e.g, R^3) + 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: "комплексные числа"] # phrase('the complex numbers' include 2 parts) + - else_if: ".='ℕ'" + then: [t: "натуральные числа"] # phrase('the natural numbers' begin at 1) + - else_if: ".='ℚ'" + then: [t: "рациональные числа"] # phrase('the rational numbers' are the fraction of 2 integers) + - else_if: ".='ℝ'" + then: [t: "реальные числа"] # phrase('the real numbers' can be both positive and negative) + - else_if: ".='ℤ'" + then: [t: "целые числа"] # phrase('the integers' are natural numbers above 0) + else: [x: "text()"] # shouldn't happen + +- name: real-part + tag: real-part + match: "." + replace: + - bookmark: "@id" + - t: "реальная часть" # 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: "воображаемая часть" # 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: "оценивается в" # 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: "оценивается в" # phrase(results were 'evaluated at' this point) + - pause: auto + - x: "*[3]" + - t: "минус то же выражение, которое оценивается в" # phrase(this result is 'minus the same expression evaluated at' an earlier point) + - 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: "перестановки значений" # phrase(the solution involves several 'permutations of' values) + - x: "*[1]" + +- name: intervals + tag: [open-interval, open-closed-interval, closed-interval, closed-open-interval] + match: "count(*)=2" + replace: + - test: + if: "$Verbosity!='Terse'" + then: + - t: "а" # phrase('the' square root of 25 equals 5) + - x: "translate(name(.),'-', ' ')" + - test: + if: "$Verbosity!='Terse'" + then: + - t: "от" # phrase(subtracting 5 'from' 10 gives 5) + - x: "*[1]" + - t: "до" # phrase(adding 6 'to' 6 equals 12) + - x: "*[2]" + else: + - x: "*[1]" + - t: "запятую" # phrase(use a 'comma' to divide large numbers or as a decimal point) + - x: "*[2]" + +- name: default-point + tag: point + match: "count(*)=2" + replace: + - test: + if: "$Verbosity!='Terse'" + then: + - t: "а" # phrase('the' square root of 25 equals 5) + - t: "точка" # phrase(a decimal 'point' indicates the fraction component of a number) + - x: "*[1]" + - t: "запятую" # phrase(use a 'comma' to divide large numbers or as a decimal point) + - x: "*[2]" + +- name: bigop-both + tag: large-op + match: "count(*) = 3" + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # phrase('the' square root of 25 equals 5) + - x: "*[1]" + - t: "от" # phrase(subtracting 5 'from' 10 gives 5) + - x: "*[2]" + - t: "до" # phrase(adding 6 'to' 6 equals 12) + - x: "*[3]" + - test: + if: "following-sibling::*" + then: [t: "из"] # phrase(the square root 'of' 25 equals 5) + +- name: bigop-under + tag: large-op + match: "count(*)=2" + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # phrase('the' square root of 25 equals 5) + - x: "*[1]" + - t: "над" # phrase(2 'over' 3 equals two thirds) + - x: "*[2]" + - test: + if: "following-sibling::*" + then: [t: "из"] # phrase(the square root 'of' 25 equals 5) + +- name: largeop + tag: mrow + match: "count(*)=2 and IsInDefinition(*[1], 'LargeOperators')" + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # phrase('the' square root of 25 equals 5) + - x: "*[1]" + - t: "из" # phrase(the square root 'of' 25 equals 5) + - x: "*[2]" + +- name: repeating-decimal + tag: repeating-decimal + match: "." + replace: + - x: "*[1]" + - t: "с повторяющимися цифрами" # 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: "индекс"] # phrase(a 'subscript' may be used to indicate an index) + else: [t: "суб"] # phrase(the result is 'sub' optimal) + - x: "*[2]" + - test: + if: "not(IsNode(*[2],'leaf') and $Impairment = 'Blindness')" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "конечного индекса"] # phrase(this is the 'end subscript' position) + else: [t: "конечного суб"] # phrase(this is the 'end sub' position) + - 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: "суперкрипта"] # phrase(a 'superscript' number indicates raised to a power) + else: [t: "супер"] # phrase(this is a 'super' set of numbers) + - x: "*[3]" + - pause: short + + +# 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: "$Verbosity != 'Terse' and contains(@data-intent-property, ':unit')" + variables: + # we need to look at preceding-sibling::*[2] because invisible times should have been added + # if in a fraction, only count if we are in the numerator + - IsSingular: "(parent::m:mrow and preceding-sibling::*[2][self::m:mn and . = 1]) or + (ancestor::*[2][self::m:mrow] and parent::m:fraction and + (preceding-sibling::* or parent::*[preceding-sibling::*[2][self::m:mn and . = 1]]) + )" + - Prefix: "''" + - Word: "''" + replace: + - bookmark: "@id" + - test: + # is the whole string match a SI Unit without a prefix? + - if: "DefinitionValue(., 'Speech', 'SIUnits') != ''" + then: + - set_variables: [Word: "DefinitionValue(., 'Speech', 'SIUnits')"] + - else_if: "DefinitionValue(., 'Speech', 'UnitsWithoutPrefixes') != ''" + then: + - set_variables: [Word: "DefinitionValue(., 'Speech', 'UnitsWithoutPrefixes')"] + - else_if: "DefinitionValue(., 'Speech', 'EnglishUnits') != ''" + then: + - set_variables: [Word: "DefinitionValue(., 'Speech', 'EnglishUnits')"] + + # do the first two chars match "da" and the remainder match an SIUnit + - else_if: "string-length(.) >= 3 and + substring(., 1, 2) = 'da' and + DefinitionValue(substring(., 3), 'Speech', 'SIUnits') != ''" + then: + - set_variables: + - Prefix: "DefinitionValue('da', 'Speech', 'SIPrefixes')" + - Word: "DefinitionValue(substring(., 3), 'Speech', 'SIUnits')" + + # does the first char match a prefix and the remainder match an SIUnit + - else_if: "string-length(.) >= 2 and + DefinitionValue(substring(., 1, 1), 'Speech', 'SIPrefixes') != '' and + DefinitionValue(substring(., 2), 'Speech', 'SIUnits') != ''" + then: + - set_variables: + - Prefix: "DefinitionValue(substring(., 1, 1), 'Speech', 'SIPrefixes')" + - Word: "DefinitionValue(substring(., 2), 'Speech', 'SIUnits')" + + # not a known unit -- just speak the text, possibly as a plural + - else: + - set_variables: + - Word: "text()" + + # somewhat complicated logic to avoid spaces around "-" as in "centi-grams" vs "centi - grams" -- probably doesn't matter + - test: + if: "$Prefix = ''" + then: + - test: + - if: "$IsSingular" + # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets the prefix concatenated to the base + then: [x: "$Word"] + - else_if: "DefinitionValue($Word, 'Speech', 'PluralForms') != ''" + then: [x: "DefinitionValue($Word, 'Speech', 'PluralForms')"] + else: [x: "$Word", ct: "с"] + else: + - x: "$Prefix" + - ct: "-" + - test: + - if: "$IsSingular" + # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets the prefix concatenated to the base + then: [x: "concat('\uF8FE', $Word)"] + - else_if: "DefinitionValue($Word, 'Speech', 'PluralForms') != ''" + then: [x: "concat('\uF8FE', DefinitionValue($Word, 'Speech', 'PluralForms'))"] + else: [x: "concat('\uF8FE', $Word)", ct: "с"] + + +- name: sin + tag: mi + match: ".='sin'" + replace: + - bookmark: "@id" + - t: "синус" # phrase(the 'sine' of the angle) +- name: cos + tag: mi + match: ".='cos'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "cos"] # phrase('cos' is the abbreviation for cosine) + else: [t: "косинус"] # phrase(find the 'cosine' in a right-angle triangle) +- name: tan + tag: mi + match: ".='tan' or .='tg'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "тан"] # phrase(the 'tan' is the ratio of the opposite to the adjacent side of a right-angled triangle) + else: [t: "касательная"] # phrase(a 'tangent' is a straight line that touches a curve) +- name: sec + tag: mi + match: ".='sec'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "искать"] # phrase(to 'seek' a solution) + else: [t: "secant"] # phrase(a 'secant' intersects a curve at two or more points) +- name: csc + tag: mi + match: ".='csc'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "cosecant"] # phrase(we will 'cosecant' a solution) + else: [t: "cosecant"] # phrase(the 'cosecant' is the reciprocal of the secant) +- name: cot + tag: mi + match: ".='cot'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "котангент"] # phrase(find the 'cotangent' in a right-angle triangle) + else: [t: "котангент"] # phrase(the 'cotangent' is the reciprocal of the tangent) + +- name: sinh + tag: mi + match: ".='sinh'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "синч"] # phrase(the word 'sinch' is an abbreviation for hyperbolic sine) + else: [t: "гиперболический синус"] # phrase(the 'hyperbolic sine' is used in mathematics) +- name: cosh + tag: mi + match: ".='cosh'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "cosh"] # phrase('cosh' is an abbreviation of hyperbolic cosine) + else: [t: "гиперболический косинус"] # phrase(the 'hyperbolic cosine' is a mathematical function) +- name: tanh + tag: mi + match: ".='tanh'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "танч"] # phrase('tanch' is shorthand for hyperbolic tangent) + else: [t: "гиперболическая касательная"] # phrase('hyperbolic tangent' is a mathematical function) +- name: sech + tag: mi + match: ".='sech'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "шек"] # phrase('sheck' is shorthand for hyperbolic secant) + else: [t: "гиперболический секунд"] # phrase('hyperbolic secant' is a mathematical function) +- name: csch + tag: mi + match: ".='csch'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "coscheck"] # phrase('cosheck' is shorthand for hyperbolic cosecant) + else: [t: "гиперболический коскант"] # phrase('hyperbolic cosecant' is a mathematical function) +- name: coth + tag: mi + match: ".='coth'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "cotanch"] # phrase('cotanch' is shorthand for hyperbolic cotangent) + else: [t: "гиперболический котангент"] # phrase(the 'hyperbolic cotangent' is a mathematical function) +- name: exponential + tag: mi + match: ".='exp'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "экс"] # phrase('exp' means exponential function) + else: [t: "экспоненциальная"] # phrase('exponential' function) +- name: covariance + tag: mi + match: ".='Cov'" + replace: + - bookmark: "@id" + - test: + if: "$Verbosity='Terse'" + then: [t: "cov"] # phrase('Cov' is shorthand for the covariance function) + else: [t: "ковариации"] # phrase('covariance' function) + +- + name: log # handle both log and ln (if in an mrow, 'intents' are used) + tag: mi + match: ".='log' or .='ln'" + replace: + - bookmark: "@id" + - test: + - if: "$Verbosity!='Terse'" + then: [t: "а"] # phrase('the' logarithm function is used in mathematics) + + - test: + - if: ".= 'log'" + then: [t: "log"] # phrase(the 'log' function is used in mathematics) + - else_if: "$Verbosity='Terse'" + then: [spell: "'ln'"] + else: [t: "natural log"] # phrase(the 'natural log' function is used in mathematics) + + +- name: multi-line + # that eliminates the need for the if: else_if: ... + # IDEA: set a variable with the word to say for the row (e.g., RowLabel = Row/Case/Line/...) + tag: [piecewise, system-of-equations, lines] + match: "." + variables: + # Wikipedia has some tables where all the entire first column is empty (e.g., https://en.wikipedia.org/wiki/List_of_trigonometric_identities) + - LineCount: "count(*[not(contains(@data-intent-property, ':continued-row:'))])" + - NextLineIsContinuedRow: "false()" # default value + - IsColumnSilent: true() + replace: + - x: "$LineCount" + - test: + - if: "self::m:piecewise" + then: [t: "случай"] # phrase(this is the first 'case' of three cases) + - else_if: "self::m:system-of-equations" + then: [t: "уравнение"] # phrase(this is the first 'equation' of three equations) + else: [t: "линия"] # phrase(this is the first 'line' of three lines) + - test: + - if: "$LineCount != 1" + then: [ct: "с"] # plural + - pause: short + - x: "*" + - pause: long + + +- name: default-multiline + tag: [mtr, mlabeledtr] + match: "parent::m:piecewise or parent::m:system-of-equations or parent::m:lines" + variables: [NextLineIsContinuedRow: "following-sibling::*[1][contains(@data-intent-property, ':continued-row:')]"] + replace: + - test: + if: "not($LineCount=1 or contains(@data-intent-property, ':continued-row:'))" + then: + - pause: medium + - test: + - if: "parent::m:piecewise" + then: [t: "дело"] # phrase('case' 1 of 10 cases) + - else_if: "parent::m:system-of-equations" + then: [t: "уравнение"] # phrase('equation' 1 of 10 equations) + else: [t: "линия"] # phrase('line 1 of 10 lines) + - x: "count(preceding-sibling::*[not(contains(@data-intent-property, ':continued-row:'))]) + 1" + - test: + if: "self::m:mlabeledtr" + then: + - t: "с меткой" # phrase(the diagram is complete 'with label') + - x: "*[1]/*" + - test: + if: "not(contains(@data-intent-property, ':continued-row:'))" + then: [pause: medium] + - test: + if: "self::m:mlabeledtr" + then: [x: "*[position()>1]"] + else: [x: "*"] + +- name: default-multiline + tag: mtd + match: "parent::*[parent::m:piecewise or parent::m:system-of-equations or parent::m:lines]" + variables: [LongPause: "$SpeechStyle = 'ClearSpeak' and $ClearSpeak_MultiLinePausesBetweenColumns = 'Long'"] + replace: + - test: + if: "IsInDefinition(*[1], 'ComparisonOperators')" + then: [pause: short] + - test: + if: "*[1][@data-added!='missing-content']" + then: [x: "*"] + - test: + # no pause after each element; medium pause if last element in a row; long pause for last element in matrix unless ClearSpeak override + - if: "count(following-sibling::*) = 0 and not($NextLineIsContinuedRow)" + then_test: + if: "count(../following-sibling::*) > 0" + then_test: + if: "$LongPause" + then: [pause: long] + else: [pause: medium] + else_test: + if: "IsInDefinition(*[1], 'ComparisonOperators')" + then: [pause: short] + else: [pause: auto] + +# Matrix/Determinant rules +# matrix and determinant are the same other than "matrix"/"determinant" based on the bracketing chars +# the pausing logic is pushed down to the +# the rules either speak the s (to get "row n") or the s. "column n" spoken if $IsColumnSilent is false +- name: 1x1-matrix + tag: [matrix, determinant] + variables: [IsColumnSilent: true()] + match: "count(*)=1 and *[self::m:mtr][count(*) = 1]" + replace: + - ot: "the" # phrase('the' 1 by 1 matrix M) + - t: "1 по 1" # phrase(the '1 by 1' matrix) + - test: + if: "self::m:determinant" # just need to check the first bracket since we know it must be (, [, or | + then: [t: "определитель"] # phrase(the 2 by 2 'determinant')) + else: [t: "матрица"] # phrase(the 2 by 2 'matrix') + + - t: "с входом" # phrase(the 2 by 2 matrix 'with entry' x) + - x: "*[1]/*" + +# simpler reading methods for special case matrices +- name: zero-matrix + tag: matrix + # select all the non-zero entries -- if there are none of them, then it is a zero matrix + match: "not( */*/*[not(self::m:mn and .= 0)] )" + replace: + - t: "the" # phrase('the' 1 by 2 matrix M) + - x: count(*) + - t: "от" # phrase(the 1 'by' 2 matrix) + - x: count(*[self::m:mtr][1]/*) + - t: "нулевая матрица" # phrase(the 2 by 2 'zero matrix') + - pause: long + +- name: identity-matrix + tag: matrix + # select all the non-zero entries...if they are not on the diagonal, or are != 1 + # if there are any of them, then this isn't an identity matrix + match: + - "count(*) = count(*[1]/*) and " + - "not( */*/*[not(self::m:mn and .= 0)]" + - " [count(../preceding-sibling::*)!=count(../../preceding-sibling::*) or .!= 1]" + - " )" + replace: + - t: "the" # phrase('the' 1 by 2 matrix M) + - x: count(*) + - t: "от" # phrase(the 1 'by' 2 matrix) + - x: count(*[self::m:mtr][1]/*) + - t: "матрица идентичности" # phrase(the 2 by 2 'identity matrix') + - pause: long + +- name: diagonal-matrix + tag: matrix + # select all the non-zero entries...if they are not on the diagonal + # if there are any of them, then this isn't an identity matrix + match: + - "count(*) = count(*[1]/*) and " + - "not( */*/*[not(self::m:mn and .= 0)]" + - " [count(../preceding-sibling::*)!=count(../../preceding-sibling::*)]" + - " )" + replace: + - t: "матрица 1 на 2" # phrase('the' 1 by 2 matrix) + - x: count(*) + - t: "от" # phrase(the 1 'by' 2 matrix) + - x: count(*[self::m:mtr][1]/*) + - t: "диагональная матрица" # phrase(the 2 by 2 'diagonal matrix') + - pause: long + - insert: + # this lists the diagonal 'mtd's to be read, and they say "column nnn" before reading the contents + # there seems to be an xpath bug -- without the parens, the match fails for the + # test Languages::en::mtable::diagonal_matrix due to match failure (the third matching element seems to be missing) + nodes: "(*/*/*[not(self::m:mn and .= 0)]/..)" + replace: [pause: auto] + - pause: long + +# simpler reading methods for smaller matrices if the entries are simple +- name: 2-or-3x1-matrix + tag: matrix + variables: [IsColumnSilent: true()] + 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: "а" # phrase('the' 2 by 2 matrix M) + - x: count(*) + - t: "на 1 столбец" # phrase(the 2 'by 1 column' matrix) + - test: + if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" + then: [t: "вектор"] # phrase(the 2 by 2 'vector') + else: [t: "матрица"] # phrase(the 2 by 2 'matrix') + - pause: long + - x: "*/*" + - test: + if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" + then: + - t: "конец" # phrase('end' of matrix) + - test: + if: $ClearSpeak_Matrix = 'EndVector' + then: [t: "вектор"] # phrase(the 2 column 'vector') + else: [t: "матрица"] # phrase(the 2 by 2 'matrix') + +- name: default-column-matrix + tag: matrix + variables: [IsColumnSilent: true()] + match: "*[self::m:mtr][count(*) = 1]" + replace: + - t: "а" # phrase('the' 2 by 2 matrix M) + - x: "count(*)" + - t: "на 1 столбец" # phrase(the 2 'by 1 column' matrix) + - test: + if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" + then: [t: "вектор"] # phrase(the 2 column 'vector') + else: [t: "матрица"] # phrase(the 2 by 2 'matrix') + - pause: long + - x: "*" # select the rows (mtr) + - test: + if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" + then: [t: "конец матрицы"] # phrase(the 'end of matrix' has been reached) + +- 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: "матрица 1 от" # phrase('the 1 by' 2 matrix) + - x: count(*/*) + - t: "строк" # phrase(the 1 by 4 'row' matrix) + - test: + if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" + then: [t: "1 от"] # phrase('the 1 by' 2 row 'vector') + else: [t: "1 от "] # phrase('the 1 by' 2 'matrix') + - pause: long + - x: "*/*" + - test: + if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" + then: + - t: "конец" # phrase(the 'end' of matrix has been reached) + - test: + if: $ClearSpeak_Matrix = 'EndMatrix' + then: [t: "матрица"] # phrase(the 2 by 2 'matrix') + else: [t: "вектор"] # phrase(the 2 by 1 'vector') + +- name: default-row-matrix + tag: matrix + variables: [IsColumnSilent: "$SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix = 'SilentColNum'"] + match: "count(*)=1" # one row + replace: + - t: "матрица 1 от" # phrase('the 1 by' 2 matrix) + - x: "count(*/*)" + - t: "ряд" # phrase(the 1 by 2 'row' matrix) + - test: + if: "$ClearSpeak_Matrix = 'Vector' or $ClearSpeak_Matrix = 'EndVector'" + then: [t: "вектор"] # phrase(the 2 by 1 'vector') + else: [t: "матрица"] # phrase(the 2 by 2 'matrix') + - pause: long + - pause: medium + - x: "*/*" # select the cols (mtd) + - test: + if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" + then: + - t: "конец" # phrase(the 'end' of matrix has been reached) + - test: + if: $ClearSpeak_Matrix = 'EndMatrix' + then: [t: "матрица"] # phrase(the 2 by 2 'matrix') + else: [t: "вектор"] # phrase(the 2 by 1 'vector') + +- name: simple-small-matrix + tag: [matrix, determinant] + match: + - "$ClearSpeak_Matrix != 'SpeakColNum' and " # "simple" isn't used for this preference + - (count(*)<=3 and count(*[1]/*)<=3) and # no bigger than a 3x3 matrix + - IsNode(*/*/*,'simple') # IsNode() returns true if all the nodes are simple + variables: [IsColumnSilent: "$SpeechStyle = 'SimpleSpeak' or ($SpeechStyle = 'ClearSpeak' and $ClearSpeak_Matrix != 'SpeakColNum')"] + replace: + - t: "the" # phrase('the' 1 by 2 matrix M) + - x: count(*) + - t: "от" # phrase(the 1 'by' 2 matrix) + - x: count(*[self::m:mtr][1]/*) + - test: + if: "self::m:determinant" + then: [t: "определитель"] # phrase(the 2 by 2 'determinant') + else: [t: "матрица"] # phrase(the 2 by 2 'matrix') + - pause: long + - x: "*" + - test: + if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" + then: + - t: "конец" # phrase(the 'end' of matrix has been reached) + - test: + if: "self::m:determinant" + then: [t: "определитель"] # phrase(the 2 by 2 'determinant') + else: [t: "матрица"] # phrase(the 2 by 2 'matrix') + +- 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: "от" # phrase(the 1 'by' 2 matrix) + - x: "count(*[self::m:mtr][1]/*)" + - test: + if: "self::m:determinant" + then: [t: "определитель"] # phrase(the 2 by 2 'determinant') + else: [t: "матрица"] # phrase(the 2 by 2 'matrix') + - pause: long + - x: "*" + - test: + if: "$ClearSpeak_Matrix = 'EndMatrix' or $ClearSpeak_Matrix = 'EndVector'" + then: + - t: "конец" # phrase(the 'end' of matrix has been reached) + - test: + if: "self::m:determinant" + then: [t: "определитель"] # phrase(the 2 by 2 'determinant') + else: [t: "матрица"] # phrase(the 2 by 2 'matrix's) + +- name: chemistry-msub + tag: [chemical-formula] + match: "*[1][.='msub']" + replace: + - x: "*[2]" + - test: + if: "$Verbosity='Verbose'" + then: [t: "script"] # phrase(H 'subscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sub"] # phrase(H 'sub' 2) + - x: "*[3]" + +- name: dimension-by + tag: mrow + match: dimension-product + replace: + - insert: + nodes: "*" + replace: [t: "по", pause: auto] # phrase(3 'by' 5 matrix) + +- name: chemistry-msup + tag: [chemical-formula] + match: "count(*)=3 and *[1][.='msup']" + replace: + - x: "*[2]" + - test: + if: "$Verbosity='Verbose'" + then: [t: "superscript"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "super"] # phrase(H 'super' 2) + - x: "*[3]" + - test: + if: "following-sibling::*[1][.='+' or .='-']" # a little lazy -- assumes chemistry superscripts end with + or - + then: [pause: medium] + +- + # There currently is no way to do sub/super for n-ary number of args + # Instead, we just deal with up to two prescripts and up to four postscripts (repeating blocks of similar code [UGLY!]) + # This hopefully covers all reasonable cases... + name: chemistry-scripts + tag: [chemical-formula, chemical-nuclide] + variables: + # computing the number of postscripts is messy because of being optionally present -- we use "mod" to get the count right + - Prescripts: "m:mprescripts/following-sibling::*" + - NumChildren: "count(*)" # need to stash this since the count is wrong inside '*[...]' below + - Postscripts: "*[position()>1 and position() < (last() + ($NumChildren mod 2) -count($Prescripts))]" + match: . # should only be msubsup or mmultiscripts at this point + replace: + - test: + if: "$Prescripts" # we have at least one pre sub/super + then: + # nuclide: speak the superscript first + - test: + if: "not($Prescripts[2][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "superscript"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "super"] # phrase(H 'super' 2) + - x: "$Prescripts[2]" + - pause: "short" + - test: + if: "not($Prescripts[1][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "индекс"] # phrase(a 'subscript' may be used to indicate an index) + else_test: + if: "$Verbosity='Medium'" + then: [t: "суб"] # phrase(here is a 'sub' total) + - x: "$Prescripts[1]" + - pause: "short" + - test: + if: "count($Prescripts) > 2" # can this happen for chemistry??? we allow for one *extra* pre sub/super pair + then: + - test: + if: "not($Prescripts[4][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "superscript"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "super"] # phrase(H 'super' 2) + - x: "$Prescripts[4]" + - pause: "short" + - test: + if: "not($Prescripts[3][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "script"] # phrase(H 'subscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sub"] # phrase(H 'sub' 2) + - x: "$Prescripts[3]" + - pause: "short" + - x: "*[1]" # base + - test: + if: "$Postscripts" + then: + - test: + if: "not($Postscripts[1][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "suppript"] # phrase(phrase(H 'subscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sub"] # phrase(phrase(H 'sub' 2) + - x: "$Postscripts[1]" + - pause: "short" + - test: + if: "not($Postscripts[2][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "superscript"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "super"] # phrase(H 'super' 2) + - x: "$Postscripts[2]" + - pause: "short" + - test: + if: "count($Postscripts) > 2" + then: + - test: + if: "not($Postscripts[3][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "script"] # phrase(H 'subscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sub"] # phrase(H 'sub' 2) + - x: "$Postscripts[3]" + - pause: "short" + - test: + if: "not($Postscripts[4][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "superscript"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "super"] # phrase(H 'super' 2) + - x: "$Postscripts[4]" + - pause: "short" + - test: + if: "count($Postscripts) > 4" + then: + - test: + if: "not($Postscripts[5][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "script"] # phrase(H 'subscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sub"] # phrase(H 'sub' 2) + - x: "$Postscripts[5]" + - pause: "short" + - test: + if: "not($Postscripts[6][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "superscript"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "super"] # phrase(H 'super' 2) + - x: "$Postscripts[6]" + - pause: "short" + - test: + if: "count($Postscripts) > 6" + then: + - test: + if: "not($Postscripts[7][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "script"] # phrase(H 'subscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "sub"] # phrase(H 'sub' 2) + - x: "$Postscripts[7]" + - pause: "short" + - test: + if: "not($Postscripts[8][self::m:none])" + then: + - test: + if: "$Verbosity='Verbose'" + then: [t: "superscript"] # phrase(H 'superscript' 2) + else_test: + if: "$Verbosity='Medium'" + then: [t: "super"] # phrase(H 'super' 2) + - x: "$Postscripts[8]" + - pause: "short" + - test: + if: "$Postscripts[last()][not(self::m:none)] and following-sibling::*[1][.='+' or .='-']" + then: [pause: medium] + +- name: chemistry + tag: chemical-equation + match: "." + replace: + - x: "*" + +- name: chemical-element + tag: chemical-element + match: "." + replace: + - bookmark: "@id" + - spell: text() + - pause: short + +- name: chemical-state + tag: chemical-state + match: "count(*)=1" + replace: + - bookmark: "*[1]/@id" + - test: + - if: ".='s'" + then: [t: "твердый"] # phrase(Boron is a 'solid' in its natural state) + - else_if: ".='l'" + then: [t: "жидкость"] # phrase(water is a 'liquid') + - else_if: ".='g'" + then: [t: "газ"] # phrase(hydrogen is a 'gas' ) + else: [t: "водный"] # phrase(an 'aqueous' solution is contained in water) + - 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: "единственная связь"] # phrase(a 'single bond' is formed when two atoms share one pair of electrons) + - else_if: ".='=' or .='∷'" + then: [t: "двойная связь"] # phrase(a 'double bond' may occur when two atoms share two pairs of electrons) + - else_if: ".='≡'" + then: [t: "тройная связь"] # phrase(a 'triple bond' occurs when two atoms share three pairs of electrons) + - else_if: ".='≣'" + then: [t: "четырехкратная связь"] # phrase(a 'quadruple bond' occurs when two atoms share four pairs of electrons) + else: [x: "text()"] + +- name: chemical-formula-operator + tag: chemical-formula-operator + 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: "формы"] # phrase(hydrogen and oxygen 'forms' water ) + else: [t: "реагирует на образование"] # phrase(hydrogen and oxygen 'reacts to form' water) + - else_if: ".='⇌' or .='\u1f8d2'" + then: [t: "находится в равновесии с"] # phrase(a reactant 'is in equilibrium with' a product) + - else_if: ".='\u1f8d4'" + then: [t: "находится в равновесии, смещено влево с"] # phrase(the reactant 'is in equilibrium biased to the left with' the product) + - else_if: ".='\u1f8d3'" + then: [t: "находится в равновесии, смещено вправо с"] # phrase(the reactant 'is in equilibrium biased to the right with' the product) + else: [x: "*"] + +- name: chemical-equation-operator + tag: chemical-equation-operator + match: "." + replace: + - bookmark: "@id" + - x: "text()" + +- name: none + tag: none + match: "../../*[self::m:chemical-formula or self::m:chemical-nuclide]" + replace: + - t: "" # don't say anything + +- name: ignore-intent-wrapper + tag: intent-wrapper + match: "." + replace: + - x: "*" diff --git a/Rules/Languages/ru/SharedRules/geometry.yaml b/Rules/Languages/ru/SharedRules/geometry.yaml new file mode 100644 index 00000000..9863f40a --- /dev/null +++ b/Rules/Languages/ru/SharedRules/geometry.yaml @@ -0,0 +1,79 @@ +--- + +- name: line-segment + tag: line-segment + match: "count(*)=2" + replace: + - test: + if: "$Verbosity='Verbose'" + then: + - t: "линейный сегмент от" # phrase('the line segment from' A to B) + - x: "*[1]" + - t: "до" # phrase(the line segment from A 'to' B) + - x: "*[2]" + else: + - t: "линейный сегмент" # phrase(the 'line segment' A B) + - x: "*[1]" + - x: "*[2]" + +- name: geometry-ray + tag: ray + match: "count(*)=2" + replace: + - test: + if: "$Verbosity='Verbose'" + then: + - t: "луч от " # phrase('the ray from' A to B) + - x: "*[1]" + - t: "до" # phrase(the ray from A 'to' B) + - x: "*[2]" + else: + - t: "луча" # phrase(the 'ray'A B) + - x: "*[1]" + - x: "*[2]" + +- name: geometry-arc + tag: arc + match: "count(*)=2" + replace: + - test: + if: "$Verbosity='Verbose'" + then: [t: "а"] # phrase('the' arc A B C) + - t: "дуга" # phrase(the 'arc' A B C) + - x: "*[1]" + - x: "*[2]" + +- name: measure-of-angle + tag: measure-of-angle + match: "count(*)=3" + replace: + - test: + if: "$Verbosity='Verbose'" + then: + - t: "мера угла" # phrase('the measure of the angle' ABC) + else: + - t: "мера угла" # phrase('measure of angle' ABC) + - x: "*[1]" + - x: "*[2]" + - x: "*[3]" + + +- name: coordinate + tag: coordinate + match: "." + replace: + - test: + if: "$Verbosity='Verbose'" + then: [t: "а"] # phrase('the' point at 1, 2) + - t: "точка" # phrase(the 'point' at 1, 2) + - test: + if: "$Verbosity='Verbose'" + then: [t: "в"] # phrase('the' point at 1, 2) + - pause: short + - insert: + nodes: "*" + replace: [t: "comma", pause: auto] # phrase(f of x 'comma' y) + - pause: short + - test: + if: "($SpeechStyle='ClearSpeak' and $Verbosity='Verbose') or not(IsNode(*[last()],'leaf'))" + then: [t: "конечная точка"] # phrase(start point, 'end point') diff --git a/Rules/Languages/ru/SharedRules/linear-algebra.yaml b/Rules/Languages/ru/SharedRules/linear-algebra.yaml new file mode 100644 index 00000000..974007bb --- /dev/null +++ b/Rules/Languages/ru/SharedRules/linear-algebra.yaml @@ -0,0 +1,36 @@ +--- + +- name: scalar-determinant + tag: determinant + match: "count(*)=1 and not(*[1][self::m:mtr])" + replace: + - test: + if: "$Verbosity='Verbose'" + then: + - t: "а" # phrase('the' square root of 25 equals 5) + - t: "определяющий" # phrase(the 'determinant' of a matrix) + - test: + if: "$Verbosity!='Terse'" + then: + - t: "из" # phrase(systems 'of' linear equations) + - x: "*[1]" + - test: + if: "not(IsNode(*[1], 'simple')) and $Impairment = 'Blindness'" + then: [t: "конец определителя"] # phrase('end determinant' of a matrix) + + +- name: subscripted-norm + tag: subscripted-norm + match: "count(*)=2" + replace: + - test: + if: "$Verbosity='Verbose'" + then: + - t: "а" # phrase('the' square root of 25 equals 5) + - x: "*[2]" + - t: "норма" # phrase(the 'norm' can be a measure of distance) + - test: + if: "$Verbosity!='Terse'" + then: + - t: "из" # phrase(systems 'of' linear equations) + - x: "*[1]" diff --git a/Rules/Languages/ru/SimpleSpeak_Rules.yaml b/Rules/Languages/ru/SimpleSpeak_Rules.yaml new file mode 100644 index 00000000..19980f05 --- /dev/null +++ b/Rules/Languages/ru/SimpleSpeak_Rules.yaml @@ -0,0 +1,347 @@ +--- +- 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: "минус" # phrase(x 'minus' y) + - x: "translate(text(), '-_', '')" + +- name: default + tag: square-root + match: "." + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # phrase('the' square root of x) + - t: "квадратный корень" # phrase(the 'square root' of x) + - test: + if: "$Verbosity!='Terse'" + then: [t: "из"] # phrase(the square root 'of' x) + else: [pause: short] + - x: "*[1]" + - test: + if: "IsNode(*[1], 'leaf') or $Impairment != 'Blindness'" + then: [pause: short] + else: [t: "end of root", pause: short] # phrase(start the square root of x 'end of root') + +- name: default + tag: root + match: "." + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] + - test: + if: "*[2][self::m:mn and not(contains(., '.'))]" + then_test: + - if: "*[2][.='2']" + then: [t: "квадратный корень"] # phrase(the 'square root' of x) + - else_if: "*[2][.='3']" + then: [t: "корень куба"] # phrase(the 'cube root' of x) + - else: [x: "ToOrdinal(*[2])", t: "корень"] # phrase(the square 'root' of 25) + else: + - test: + if: "*[2][self::m:mi][string-length(.)=1]" + then: + - x: "*[2]" + - pronounce: [{text: "-th"}, {ipa: "θ"}, {sapi5: "th"}, {eloquence: "T"}] + else: [x: "*[2]"] + - t: "корень" # phrase(the square 'root' of) + - test: + if: "$Verbosity!='Terse'" + then: [t: "из"] # phrase(the square root 'of' x) + - x: "*[1]" + - test: + if: "IsNode(*[1], 'leaf') or $Impairment != 'Blindness'" + then: [pause: short] + else: [t: "end of root", pause: short] # phrase(start the fifth root of x 'end of root') + +# Fraction rules +# Mixed numbers mostly "just work" because the invisible char reads as "and" and other parts read properly on their own +- name: common-fraction + tag: fraction + match: + - "*[1][self::m:mn][not(contains(., '.')) and text()<20] and" + - "*[2][self::m:mn][not(contains(., '.')) and 2<= text() and text()<=10]" + variables: [IsPlural: "*[1]!=1"] + replace: + - x: "*[1]" + - x: "ToOrdinal(*[2], true(), $IsPlural)" # extra args specify fractional ordinal and whether it is plural + +- name: common-fraction-mixed-number + tag: fraction + match: + - "preceding-sibling::*[1][self::m:mo][.='⁤'] and" # preceding element is invisible plus + - "*[1][self::m:mn][not(contains(., '.'))] and" + - "*[2][self::m:mn][not(contains(., '.'))]" + variables: [IsPlural: "*[1]!=1"] + replace: + - x: "*[1]" + - x: "ToOrdinal(*[2], true(), $IsPlural)" # extra args specify fractional ordinal and whether it is plural + + +# Units (e.g., meters per second) +- name: per-fraction + tag: fraction + match: "BaseNode(*[1])[contains(@data-intent-property, ':unit') or (self::m:mrow and self::*[3][contains(@data-intent-property, ':unit')])] and + BaseNode(*[1])[contains(@data-intent-property, ':unit') or (self::m:mrow and self::*[3][contains(@data-intent-property, ':unit')])]" + replace: + - x: "*[1]" + - t: "перемещение" # phrase('5 meters 'per' second) + - x: "*[2]" + +- name: simple + # don't include nested fractions. E.g, fraction a plus b over c + 1 end fraction" is ambiguous + # by simplistic SimpleSpeak's rules "b over c" is a fraction, but if we say nested fractions + # are never simple, then any 'over' applies only to enclosing "fraction...end fraction" pair. + tag: fraction + match: + - "(IsNode(*[1],'leaf') and IsNode(*[2],'leaf')) and" + - "not(ancestor::*[name() != 'mrow'][1]/self::m:fraction)" # FIX: can't test for mrow -- what should be used??? + replace: + - x: "*[1]" + - t: "над" # phrase(the fraction 3 'over' 4) + - x: "*[2]" + - pause: short + +- name: default + tag: fraction + match: "." + replace: + - test: + if: "$Impairment = 'Blindness'" + then: [t: "фракция"] # phrase(the 'fraction' 3 over 4) + - pause: short + - x: "*[1]" + - test: + if: "not(IsNode(*[1],'leaf'))" + then: [pause: short] + - t: "над" # phrase(the fraction 3 'over' 4) + - test: + if: "not(IsNode(*[2],'leaf'))" + then: [pause: short] + - x: "*[2]" + - pause: short + - test: + if: "$Impairment = 'Blindness'" + then: [t: "конец фракции"] # phrase(start 7 over 8 'end of fraction') + - pause: medium + +# rules for functions raised to a power +# these could have been written on 'mrow' but putting them on msup seems more specific +# to see if it is a function, we look right to see if the following sibling is apply-function +- name: inverse-function + tag: inverse-function + match: "." + replace: + - t: "обратный" # phrase(the 'inverse' of f) + - x: "*[1]" + +- name: function-squared-or-cubed + tag: power + match: + - "*[2][self::m:mn][.='2' or .='3'] and" + - "following-sibling::*[1][self::m:mo][.='⁡']" #invisible function apply + replace: + - x: "*[1]" + - bookmark: "*[2]/@id" + - test: + if: "*[2][.=2]" + then: [t: "квадрат"] # phrase(5 'squared' equals 25) + else: [t: "кубик"] # phrase(5 'cubed' equals 125) +- name: function-power + tag: power + match: + - "following-sibling::*[1][self::m:mo][.='⁡']" #invisible function apply + replace: + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # # phrase('the' fourth power of 10) + - bookmark: "*[2]/@id" + - test: + if: "*[2][self::m:mn][not(contains(., '.'))]" + then: [x: "ToOrdinal(*[2])"] + else: [x: "*[2]"] + - t: "сила" # phrase(the fourth 'power of' 2) + - pause: short + - x: "*[1]" + +# non-function rules for power +- name: squared-or-cubed + tag: power + match: "*[2][self::m:mn][.='2' or .='3']" + replace: + - x: "*[1]" + - bookmark: "*[2]/@id" + - test: + if: "*[2][.=2]" + then: [t: "квадрат"] # phrase(5 'squared' equals 25) + else: [t: "кубик"] # phrase(5 'cubed' equals 125) + +- name: simple-integer + tag: power + match: "*[2][self::m:mn][not(contains(., '.'))]" + replace: + - x: "*[1]" + - t: "в" # phrase(15 raised 'to the' second power equals 225) + - test: + if: "*[2][.>0]" + then: {x: "ToOrdinal(*[2])"} + else: {x: "*[2]"} +- name: simple-negative-integer + tag: power + match: + - "*[2][self::m:minus and count(*)=1 and" + - " *[1][self::m:mn][not(contains(., '.'))]]" + replace: + - x: "*[1]" + - t: "в" # phrase(15 raised 'to the' second power equals 225) + - x: "*[2]" +- name: simple-var + tag: power + match: "*[2][self::m:mi][string-length(.)=1]" + replace: + - x: "*[1]" + - t: "в" # phrase(15 raised 'to the' second power equals 225) + - x: "*[2]" + - pronounce: [{text: "-th"}, {ipa: "θ"}, {sapi5: "th"}, {eloquence: "T"}] + +- name: simple + tag: power + match: "IsNode(*[2], 'leaf')" + replace: + - x: "*[1]" + - t: "в" # phrase(15 raised 'to the' second power equals 225) + - x: "*[2]" + +- name: nested + # it won't end in "power" if the exponent is simple enough + # FIX: not that important, but this misses the case where the nested exp is a negative integer (change test if this is fixed) + # ending nested exponents with "...power power" sounds bad + tag: power + match: + - "*[2][" + - " (self::m:power and not(IsNode(*[2], 'leaf'))) or" # non-simple nested superscript + - " self::m:mrow[*[last()][self::m:power[not(IsNode(*[2], 'leaf'))]]]" # same as above but at the end of an mrow # FIX: need to figure out linear replacement + - " ]" + replace: + - x: "*[1]" + - t: "поднято до" # phrase(15 'raised to the' second power equals 225) + - x: "*[2]" + - pause: short + - test: + if: "$Impairment = 'Blindness'" + then: + - t: "конец показателя" # phrase(start 2 raised to the exponent 4 'end of exponent') + - pause: short + else: + - pause: medium + +- name: default + tag: power + match: "." + replace: + - x: "*[1]" + - t: "поднято до" # phrase(15 'raised to the' second power equals 225) + - x: "*[2]" + - t: "власти" # phrase(15 raised to the second 'power' equals 225) + - pause: short + +# +# Some rules on mrows +# +- name: set + tag: set + match: "." + replace: + - test: + - if: "count(*)=0" + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # phrase('the' empty set) + - t: "пустым набором" # phrase(when a set contains no value it is called an 'empty set' and this is valid) + - else_if: "count(*[1]/*)=3 and *[1]/*[2][self::m:mo][.=':' or .='|' or .='∣']" + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # phrase('the' set of all integers) + - t: "набор всех" # phrase(the 'set of all' positive integers less than 10) + - x: "*[1]/*[1]" + - t: "так что" # phrase(x 'such that' x is less than y) + - x: "*[1]/*[3]" + else: + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # phrase('the' set of integers) + - t: "набор" # phrase(here is a 'set' of numbers) + - x: "*[1]" + +- name: times + tag: mo + match: + # say "times" when invisible times is followed by parens or a superscript that has a base with parens or "|"s + # added: say times is the superscript is not simple + # if we aren't sure if it is times or not, don't say anything + - ".='⁢' and" + - "not(@data-function-guess) and (" + - "not(ancestor-or-self::*[contains(@data-intent-property, ':literal:')]) and " + - " following-sibling::*[1][" + - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|') or " + - " self::m:matrix or self::m:determinant or self::m:binomial or" # followed by parens + - " self::m:square-root or self::m:msqrt or self::m:root or self::m:mroot or" + - " (self::m:msub or self::m:msubsup or" + - " ((self::m:msup or self::m:power) and not(IsNode(*[1], 'leaf') and *[2][self::m:mn and (.=2 or '.=3')]))) and " # followed by msup, etc. + - " (*[1][self::m:mrow[IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')] or " + - " self::m:matrix or self::m:determinant] or" # base has parens + - " not(IsNode(*[2], 'simple')) or " + - " (self::m:msubsup and not(IsNode(*[3], 'simple')))" + - " )" + - " ]" # other possibility is the preceding element has parens (but not the following) + - " or " + - " preceding-sibling::*[1][" + - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')]" # followed by parens + - " )" + replace: + - t: "раз" # phrase(7 'times' 5 equals 35) + +- name: no-say-parens + tag: mrow + match: + - "parent::*[not(self::m:msup) and not(self::m:msub) and not(self::m:msubsup) and not(self::m:power) and" + - " not(self::m:math) ] and " # rule out [x] standing alone + - "( IsBracketed(., '(', ')') or IsBracketed(., '[', ']') ) and " + - "( IsNode(*[2], 'simple') ) and" + - "not(preceding-sibling::*[1][.='\u2062' and @data-function-guess]) and" + - "not(ancestor-or-self::*[contains(@data-intent-property, ':literal:')])" + # missing clause: 'a positive fraction that is spoken as an ordinal + # (either by the Ordinal preference or by the default rules_' + replace: + - x: "*[2]" + +- include: "SharedRules/geometry.yaml" +- include: "SharedRules/linear-algebra.yaml" +- include: "SharedRules/general.yaml" +- include: "SharedRules/default.yaml" diff --git a/Rules/Languages/ru/definitions.yaml b/Rules/Languages/ru/definitions.yaml new file mode 100644 index 00000000..5da10e97 --- /dev/null +++ b/Rules/Languages/ru/definitions.yaml @@ -0,0 +1,376 @@ +--- +- include: "../../definitions.yaml" + +# If an "intent" is used, the 'terse:medium:verbose' speech for the intent name is given here for a prefix||infix||postfix||function fixity +# If only one ":" is used, it the first part is used for 'terse' and the second part is used for 'medium' and 'verbose' +# If no ":"s are used, the same speech is used for all forms +# If bracketing words make sense, they are separated with ";"s +# Intent mappings must specify whether they are "prefix", "infix", "postfix", or "function" with an "=" sign +# If there are multiple fixities (e.g., see transpose), they are separated with "|| +# for readability, spaces can be used around any of the delimiter characters +# Note: if there are multiple fixities, the first one is used if the fixity is not given in the intent +- IntentMappings: { + "indexed-by": "infix= ; sub; end sub: end sub: end subscript", + "modified-variable": "silent= ", + "say-super": "infix=super: superscript: superscript", # used with 'mo' for superscripts (e.g, "<") + "skip-super": "silent=", # used with 'mo' for superscripts (e.g, "*") + + "absolute-value": "function= ; absolute value: the absolute value: the absolute value; end absolute value", + "binomial": "infix=binomial; choose; end binomial", + # "closed-interval": "other=closed-interval; from,to; end closed-interval", + "greatest-common-divisor": "function=gcd: the gcd: the greatest common divisor", + "imaginary-part": "function=imaginary part, the imaginary part, the imaginary part", + "least-common-multiple": "function=lcm:the lcm:the least common multiple", + # "large-op": "infix=over || other=from,to", + "limit": "prefix=limit as: the limit as: the limit as", + "lim-sup": "prefix=lim sup as: the limit superior as: the limit superior as", + "lim-inf": "prefix=lim inf as: the limit inferior as : the limit inferior as", + "logarithm-with-base": "prefix=log base: the log base: the log base", + "natural-logarithm": "function=l n: natural log: natural log", + "minus": "infix=minus || prefix=negative", + "plus": "infix=plus || prefix=positive", + # "pochhammer": "infix=permutations of", # arguments are in reverse order, so can't work here + "real-part": "function=the real part", + + "transpose": "postfix=transpose || function=transpose", + "norm": "function=; norm: norm: norm; end norm", + "trace": "function=;trace : trace: the trace; end trace", + "dimension": "function=; dimension : dimension: the dimension; end dimension", + "homomorphism": "function= ; homomorphism : homomorphism: the homomorphism; end homomorphism", + "kernel": "function= ; kernel : kernel: the kernel; end kernel", + "vector": "function= ; vector || prefix=vector", + "cross-product": "infix=cross: cross product: cross product", + "dot-product": "infix=dot: dot product: dot:dot product", + + "divergence": "function= ; dihv: divergence: divergence; end divergence", + "curl": "function= ; curl; end curl", + "gradient": "function= ; del: gradient: gradient; end gradient", + "laplacian": "function=lahplahsian", # speech engines don't do a good job with "laplacian" + + "chemistry-concentration": "function= ; concentration: concentration of: the concentration of; end concentration", + } + # Names of functions that in terse mode don't say "of" (or it's equivalent in other languages) + +- TerseFunctionNames: { + "divergence", "gradient", "curl" + } + +- NavigationParts: { + "large-op": "base; lower limit; upper limit", + "mfrac": "numerator;denominator", + "fraction": "numerator;denominator", + "msqrt": "root", + "square-root": "root", + "mroot": "root;root index", + "root": "root;root index", + "msub": "base;subscript", + "sub": "base;subscript", + "msup": "base;superscript", + "say-super": "base;superscript", + "skip-super": "base;superscript", + "power": "base;exponent", + "msubsup": "base;subscript;superscript", + "munder": "base;under limit", + "mover": "base;upper limit", + "munderover": "base;under limit;upper limit", + + # words for moving into and out of one of the parts (e.g., "move right 'out of' numerator, 'in' denominator") + # it's a hack to put them here, but at least they are grouped with the other navigation parts + "in": "in", + "out": "out of", + } + +- OperatorIntentRenaming: { + "dimension-product": "by" + } + +- KnownWords: { + # MathCAT will put together some runs of three or more mi's (a common mistake), but skips those in alphabetical order. + # This is a list of exceptions so that they do get put together. Don't list words with repeated letters. + + # I asked bard and chatgpt for formula words that are alphabetical, and they failed. + # Here are the words I managed to find, but it almost certainly not complete. Change the list for other languages. + "Abel", "aery", "ails", "airy", "amps", "cents", "flux", "flow", "knot", + } + +- SIPrefixes: { + "Q": "quetta", "R": "ronna", "Y": "yotta", "Z": "zetta", "E": "exa", "P": "peta", "T": "tera", "G": "giga", "M": "mega", "k": "kilo", "h": "hecto", "da": "deka", + "d": "deci", "c": "centi", "m": "milli", "µ": "micro", "n": "nano", "p": "pico", "f": "femto", "a": "atto", "z": "zepto", "y": "yocto", "r": "ronto", "q": "quecto" + } + +# this is a list of all units that accept SIPrefixes +# from www.bipm.org/documents/20126/41483022/SI-Brochure-9-EN.pdf +# Prefixes may be used with any of the 29 SI units with special names +# The SI prefixes can be used with several of accepted units, but not, for example, with the non-SI units of time. +- SIUnits: { + # base units + "A": "amp", + "cd": "candela", + "K": "kelvin", "K": "kelvin", # U+212A + "g": "gram", + "m": "metre", # British spelling works for US also + "mol": "mole", + "s": "second", "sec": "second", # "sec" not actually legal + + # derived units + "Bq": "becquerel", + "C": "coulomb", + "°C": "degree celsius", "℃": "degree celsius", # should only take negative powers + "F": "farad", + "Gy": "gray", + "H": "henry", + "Hz": "hertz", + "J": "joule", + "kat": "kattel", + "lm": "lumen", + "lx": "lux", + "N": "newton", + "Ω": "ohm", "Ω": "ohm", # Greek Cap letter, U+2126 OHM SIGN + "Pa": "pascal", + "S": "siemens", + "Sv": "sievert", + "T": "tesla", + "V": "volt", + "W": "watt", + "Wb": "weber", + + # accepted (plus a few variants) that take SI prefixes + "l": "litre", "L": "litre", "ℓ": "litre", # Should only take negative powers; British spelling works for US also + "t": "metric ton", # should only take positive powers + "Da": "dalton", + "Np": "neper", # should only take negative powers + "u": "atomic mass unit", # 'u' is correct: https://en.wikipedia.org/wiki/Dalton_(unit) + "eV": "electronvolt", + "rad": "radian", # should only take negative powers + "sr": "sterradion", # should only take negative powers + + # others that take a prefix + "a": "annum", # should only take positive powers + "as": "arcsecond", # see en.wikipedia.org/wiki/Minute_and_second_of_arc + + # technically wrong, but used in practice with SI Units + "b": "bit", # should only take positive powers + "B": "byte", # should only take positive powers + "Bd": "baud", # should only take positive powers + } + + +- UnitsWithoutPrefixes: { + # time + "″": "second", "\"": "second", + "′": "minute", "'": "minute","min": "minute", + "h": "hour", "hr": "hour", "Hr": "hour", + "d": "day", "dy": "day", + "w": "week", "wk": "week", + "y": "year", "yr": "year", + + # angles + "°": "degree", "deg": "degree", # should only take negative powers + "arcmin": "arcminute", + "amin": "arcminute", + "am": "arcminute", + "MOA": "arcminute", + "arcsec": "arcsecond", + "asec": "arcsecond", + + # distance + "au": "astronomical unit", "AU": "astronomical unit", + "ltyr": "light year", "ly": "light year", + "pc": "parsec", + "Å": "angstrom", "Å": "angstrom", # U+00C5 and U+212B + "fm": "fermi", + + # others + "ha": "hectare", + # "B": "bel", # "B" more commonly means bytes + "dB": "decibel", # already logarithmic, so not used with SI prefixes + + "amu": "atomic mass unit", + "atm": "atmosphere", + "bar": "bar", + "cal": "calorie", + "Ci": "curie", + "grad": "gradian", + "M": "molar", + "R": "roentgen", + "rpm": "revolution per minute", + "℧": "m-h-o", + "dyn": "dyne", + "erg": "erg", + + # powers of 2 used with bits and bytes + "Kib": "kibi-bit", "Mib": "mebi-bit", "Gib": "gibi-bit", "Tib": "tebi-bit", "Pib": "pebi-bit", "Eib": "exbi-bit", "Zib": "zebi-bit", "Yib": "yobi-bit", + "KiB": "kibi-byte", "MiB": "mebi-byte", "GiB": "gibi-byte", "TiB": "tebi-byte", "PiB": "pebi-byte", "EiB": "exbi-byte", "ZiB": "zebi-byte", "YiB": "yobi-byte", + } + + # this will only be used if the language is English, so it can be empty for other countries +- EnglishUnits: { + # length + "in": "inch", + "ft": "foot", + "mi": "mile", + "rd": "rod", + "li": "link", + "ch": "chain", + + # area + "sq in": "square inch", "sq. in": "square inch", "sq. in.": "square inch", + "sq ft": "square foot", "sq. ft": "square foot", "sq. ft.": "square foot", + "sq yd": "square yard", "sq. yd": "square yard", "sq. yd.": "square yard", + "sq mi": "square mile", "sq. mi": "square mile", "sq. mi.": "square mile", + "ac": "acre", + "FBM": "board foot", + + # volume + "cu in": "cubic inch", "cu. in": "cubic inch", "cu. in.": "cubic inch", + "cu ft": "cubic foot", "cu. ft": "cubic foot", "cu. ft.": "cubic foot", + "cu yd": "cubic yard", "cu. yd": "cubic yard", "cu. yd.": "cubic yard", + "bbl": "barrel", "BBL": "barrel", + "pk": "peck", + "bu": "bushel", + "tsp": "teaspoon", + "tbl": "tablespoon", + + # liquid + "fl dr": "fluid drams", + "fl oz": "fluid ounce", + "gi": "gill", + "cp": "cup", "cup": "cup", + "pt": "pint", + "qt": "quart", + "gal": "gallon", + + # weight + "gr": "grain", + "dr": "dram", + "oz": "ounce", "℥": "ounce", + "lb": "pound", + "cwt": "hundredweight", + "dwt": "pennyweight", + "oz t": "troy ounce", + "lb t": "troy pound", + + # energy + "hp": "horsepower", + "BTU": "BTU", + "°F": "degree fahrenheit", "℉": "degree fahrenheit", + + # other + "mph": "mile per hour", + "mpg": "mile per gallon", + } + +- PluralForms: { + # FIX: this needs to be flushed out + "inch": "inches", "square inch": "square inches", "cubic inch": "cubic inches", + "foot": "feet", "square foot": "square feet", "cubic foot": "cubic feet", + "board foot": "board feet", + "degree celsius": "degrees celsius", + "degree fahrenheit": "degrees fahrenheit", + "hertz": "hertz", + "siemens": "siemens", + "revolution per minute": "revolutions per minute", + "mile per hour": "miles per hour", + "mile per gallon": "miles per gallon", + } + +# Lines starting with "#" are a comment +# Each definition in this file is of the form +# - name: { "...", "..." "..." } +# For numbers, +# - name: [] "...", "..." "..." ] + + +# ---------------- Cardinal and Ordinal Numbers -------------------------- +# The following definitions are used to convert numbers to words +# The are mainly used for ordinals, of which there are two cases: +# 1. Regular ordinals: first, second, third, ... +# 2. Ordinals used in the denominator of fractions (e.g, one half, one third) +# When used in the denominator of fractions, a plural version might be +# used (e.g., two halves, two thirds) +# Although a lot of languages are regular after a few entries, for generality, +# the following lists should be filled out even though they are the same +# or easily derived from others in many languages (e.g, an 's' is added for plurals). +# The larger ordinal numbers (e.g, millionth) is used when there are only +# '0's after that decimal place (e.g., 23000000).:w + +# All definitions start 0, 10, 100, etc. + +# The definitions for the "ones" should extend until a regular pattern begins +# The minimum length is 10. + +# For English, a regular pattern starts at twenty +- NumbersOnes: [ +«ноль», «один», «два», «три», «четыре», «пять», «шесть», «семь», «восемь», «девять», +«десять», «одиннадцать», «двенадцать», «тринадцать», «четырнадцать», «пятнадцать», «шестнадцать», +«семнадцать», «восемнадцать», «девятнадцать» + ] + +- NumbersOrdinalOnes: [ +«ноль», «первый», «второй», «третий», «четвертый», «пятый», «шестой», «седьмой», «восьмой», «девятый», +«десятый», «одиннадцатый», «двенадцатый», «тринадцатый», «четырнадцатый», «пятнадцатый», «шестнадцатый», +«семнадцатый», «восемнадцатый», «девятнадцатый» + ] + +- NumbersOrdinalPluralOnes: [ +«ноль», «первый», «секунды», «терции», «четвертые», «пятые», «шестые», «седьмые», «восьмые», «девятые», +«десятые», «одиннадцатые», «двенадцатые», «тринадцатые», «четырнадцатые», «пятнадцатые», «шестнадцатые», +«семнадцатые», «восемнадцатые», «девятнадцатые» + ] + + # stop when regularity begins +- NumbersOrdinalFractionalOnes: [ +«ноль», «первый», «половина» + ] + + # stop when regularity begins +- NumbersOrdinalFractionalPluralOnes: [ +«нули», «первые», «половинки» + ] + + + # What to use for multiples of 10 +- NumbersTens: [ +"", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто" + ] + +- NumbersOrdinalTens: [ +"", "десятый", "двадцатый", "тридцатый", "сороковой", "пятидесятый", "шестидесятый", "семидесятый", "восьмидесятый", "девяностый" + ] + +- NumbersOrdinalPluralTens: [ +"", "десятые", "двадцатые", "тридцатые", "сороковые", "пятидесятые", "шестидесятые", "семидесятые", "восьмидесятые", "девяностые" + ] + + +- NumbersHundreds: [ +"", "сто", "двести", "триста", "четыреста", "пятьсот", +« шестьсот », «семьсот», «восемьсот», «девятьсот» + ] + +- NumbersOrdinalHundreds: [ +"", "сотый", "двухсотый", "трёхсотый", "четырёхсотый", "пятисотый", +« шестисотый », «семисотый», «восьмисотый», «девятисотый» + ] + +- NumbersOrdinalPluralHundreds: [ +"", "сотые", "две сотых", "три сотых", "четыре сотых", "пять сотых", +« шесть сотых», «семь сотых», «восемь сотых», «девять сотых» + ] + + + # At this point, hopefully the language is regular. If not, code needs to be written +- NumbersLarge: [ +"", "тысяча", "миллион", "миллиард", "триллион", "квадриллион", + «квинтиллион», «секстиллион», «септиллион», «октиллион», «нониллион», + ] + +- NumbersOrdinalLarge: [ +"", "тысячная", "миллионная", "миллиардная", "триллионная", "квадриллионная", +«квинтиллионный», «секстиллионный», «септиллионный», «октиллионный», «нониллионный» + ] + +- NumbersOrdinalPluralLarge: [ +"", "тысячные", "миллионные", "миллиардные", "триллионные", "квадриллионные", +«квинтиллионы», «секстиллионы», «септиллионы», «октиллионы», «нониллионы» + ] diff --git a/Rules/Languages/ru/navigate.yaml b/Rules/Languages/ru/navigate.yaml new file mode 100644 index 00000000..449e1291 --- /dev/null +++ b/Rules/Languages/ru/navigate.yaml @@ -0,0 +1,1744 @@ +--- +# Documentation: +# +# The general form for many rules is: +# 1. Say the command if this is first rule to fire (MatchCounter) and depending upon "NavVerbosity"s value +# 2. Say info about moving into/out of 2D structures +# 3. Set some variables and possibly recurse. +# If recursing, "MatchCounter" should be incremented. +# If stopping, "NavNode" should be set. +# +# The meaning of NavVerbosity: +# * Verbose -- always echo the command and end points (e.g., "can't move right") +# * Medium -- only echo the command for obscure commands like the placemarker commands; also say end points +# * Terse -- no echo of commands or end points +# +# For the second item, a common set of rules is used. These rules require the variable "Move2D" +# to be set along with "Child2D", where "Move2D" is either 'in' or 'out'. +# +# In addition, the navigation rules make use of two functions: +# +# int DistanceFromLeaf(node, leftSide, treat2DElementsAsTokens) +# Returns the distance (number of children) until a leaf is reached by traversing the leftmost/rightmost child +# If 'treat2DElementsAsTokens' is true, then 2D notations such as fractions are treated like leaves +# A leaf has distance == 0 +# +# EdgeNode(node, "left"/"right", stopNodeName) +# Returns the stopNode if at left/right edge of named ancestor node. 'stopNodeName' can also be "2D" +# If the stopNode isn't found, the original node is returned +# Note: if stopNodeName=="math", then punctuation is taken into account since it isn't really part of the math +# +# A few other variables are of importance to Navigation +# NavMode -- Enhanced, Simple, Character +# ReadZoomLevel -- -1 for Enhanced, otherwise the distance from leaf the rules should maintain +# PlaceMarkerIndex + +# Note: the rules for saying a command and announcing what is said when moving in/out of a 2d exprs are hacks +# They depend upon special variables "SayCommand" and "Move2D" being set and if they are, the rules are activated. +# If/when functions can be defined in a rules file, it is likely these would be much better done via those functions +# as they would likely be much more efficient and also cleaner. + +# Rules for announcing the command +- name: say-command + tag: "!*" + match: "$SayCommand != ''" # value should be '', 'true', or 'false' + variables: [Prefix: "''"] + replace: + - test: + - if: "$MatchCounter = 0 and $SayCommand = 'true'" + then_test: + - if: "self::m:math and starts-with($NavCommand, 'ZoomOut')" + then: [t: "увеличение все еще", pause: "medium"] + - else_if: "IsNode(., 'leaf') and starts-with($NavCommand, 'ZoomIn')" + then: [t: "увеличение на все пути", pause: "medium"] + else: + - test: + - if: "starts-with($NavCommand, 'Zoom')" + then: [set_variables: [Prefix: "'zoom'"]] # phrase('zoom' in to see more details) + - else_if: "starts-with($NavCommand, 'Move')" + then: [set_variables: [Prefix: "'move'"]] # phrase('move' to next entry in table) + - else_if: "starts-with($NavCommand, 'Read')" + then: [set_variables: [Prefix: "'read'"]] # phrase('read' to next entry in table) + - else_if: "starts-with($NavCommand, 'Describe')" + then: [set_variables: [Prefix: "'describe'"]] # phrase('describe' to next entry in table) + - test: + if: "$Prefix != ''" + then: + - x: "$Prefix" + - test: + - if: "substring($NavCommand, string-length($Prefix)+1) = 'In'" + then: [t: "in"] # phrase(zoom 'in' to see more details) + - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'InAll'" + # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets "ed" concatenated to "zoom" + then: [t: "все путь"] # phrase(zoom 'out all the way' to see more details) + - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Out'" + then: [t: "out"] # phrase(zoom 'out' to see more details) + - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'OutAll'" + # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets "ed" concatenated to "zoom" + then: [t: "все путь"] # phrase(zoom 'out all the way' to see more details) + - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Next'" + then: [t: "право"] # phrase(move to the 'right') + - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Previous'" + then: [t: "левый"] # phrase(move to the 'left') + - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Current'" + then: [t: "нынешним"] # phrase(who is the 'current' president) + - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'LineStart'" + then: [t: "на начало линии"] # phrase(move 'to start of line') + - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'LineEnd'" + then: [t: "к концу линии"] # phrase(move 'to end of line') + - pause: "medium" + - set_variables: [MatchCounter: "1"] + + +# Rules for speaking what happens when moving into or out of a notation +- name: into-or-out-of-mfrac + tag: "*" + match: "$Move2D != '' and (@data-from-mathml='mfrac' or self::m:mfrac)" + replace: + - x: "$Move2D" + - test: + if: "count($Child2D/preceding-sibling::*)=0" + then: [t: "числитель"] # phrase(the 'numerator' of a fraction) + else: [t: "знаменатель"] # phrase(the 'denominator' of a fraction) + - pause: "medium" + +- name: into-or-out-of-msqrt + tag: "*" + match: "$Move2D != '' and (@data-from-mathml='msqrt' or self::m:msqrt)" + replace: + - x: "$Move2D" + - t: "квадратный корень" # phrase(the 'square root' of x) + - pause: "medium" + +- name: into-or-out-of-mroot + tag: "*" + match: "$Move2D != '' and (@data-from-mathml='mroot' or self::m:mroot)" + replace: + - x: "$Move2D" + - test: + if: "count($Child2D/preceding-sibling::*)=0" + then: [t: "корень"] # phrase(the cube 'root' of x) + else: [t: "корневой индекс"] # phrase(the 'root index' of x is 3) + - pause: "medium" + +- name: into-or-out-of-msub + tag: "*" + match: "$Move2D != '' and (@data-from-mathml='msub' or self::m:msub)" + replace: + - x: "$Move2D" + - test: + if: "count($Child2D/preceding-sibling::*)=0" + then: [t: "база"] # phrase(the 'base' of the power) + else: [t: "sepcript"] # phrase(x with 'subscript' 2) + - pause: "medium" + +- name: into-or-out-of-msup + tag: "*" + match: "$Move2D != '' and (@data-from-mathml='msup' or self::m:msup)" + replace: + - x: "$Move2D" + - test: + if: "not($Child2D/preceding-sibling::*)" + then: [t: "база"] # phrase(the 'base' of the power) + else: [t: "superscript"] # phrase(x with 'superscript' 2) # FIX: it would be better to use the word used when reading (power, exponent, ...) + - pause: "medium" + +- name: into-or-out-of-msubsup + tag: "*" + match: "$Move2D != '' and (@data-from-mathml='msubsup' or self::m:msubsup)" + replace: + - x: "$Move2D" + - test: + - if: "not($Child2D/preceding-sibling::*)" + then: [t: "база"] # phrase(the 'base' of the power) + - else_if: "count($Child2D/preceding-sibling::*)=1" + then: [t: "sepcript"] # phrase(x with 'subscript' 2) + else: [t: "superscript"] # phrase(x with 'superscript' 2) # FIX: it would be better to use the word used when reading (power, exponent, ...) + - pause: "medium" + +- name: into-or-out-of-munder + tag: "*" + match: "$Move2D != '' and (@data-from-mathml='munder' or self::m:munder)" + replace: + - x: "$Move2D" + - test: + if: "count($Child2D/preceding-sibling::*)=0" + then: [t: "база"] # phrase(the 'base' of the power) + else: [t: "нижний предел"] # phrase(the 'lower limit' of the function is zero) + - pause: "medium" + +- name: into-or-out-of-mover + tag: "*" + match: "$Move2D != '' and @data-from-mathml='mover' or self::m:mover" + replace: + - x: "$Move2D" + - test: + if: "count($Child2D/preceding-sibling::*)=0" + then: [t: "база"] # phrase(the 'base' of the power) + else: [t: "верхний предел"] # phrase(the 'upper limit' of the function is zero) + - pause: "medium" + +- name: into-or-out-of-munderover + tag: "*" + match: "$Move2D != '' and (@data-from-mathml='munderover' or self::m:munderover)" + replace: + - x: "$Move2D" + - test: + - if: "count($Child2D/preceding-sibling::*)=0" + then: [t: "база"] # phrase(the 'base' of the power) + - else_if: "count($Child2D/preceding-sibling::*)=1" + then: [t: "нижний предел"] # phrase(the 'lower limit' of the function is zero) + else: [t: "верхний предел"] # phrase(the 'upper limit' of the function is zero) + - pause: "medium" + +- name: into-or-out-of-mmultiscripts + tag: "*" + match: "$Move2D != '' and (@data-from-mathml='mmultiscripts' or self::m:mmultiscripts)" + replace: + - test: + if: "name($Child2D)!='none'" + then: + - with: + variables: + - NumPrecedingSiblings: "count($Child2D/preceding-sibling::*)" + replace: + - x: "$Move2D" + - test: + - if: "$NumPrecedingSiblings=0" + then: [t: "база"] # phrase(the 'base' of the power) + - else_if: "$Child2D/preceding-sibling::*[self::m:mprescripts]" # are we before mprescripts and hence are postscripts + then: + - test: # in postscripts -- base shifts by one + if: "$NumPrecedingSiblings mod 2 = 0" + then: [t: "sepcript"] # phrase(x with 'subscript' 2) + else: [t: "superscript"] # phrase(x with 'superscript' 2) + else: + - test: + if: "$NumPrecedingSiblings mod 2 = 0" + then: [t: "pre-superscript"] # phrase(x with 'pre-superscript' 2) + else: [t: "pre-subscript"] # phrase(x with 'pre-subscript' 2) + - pause: "medium" + +- name: into-or-out-of-mtd + tag: mtd + match: "$Move2D = 'in'" + replace: + - t: "столбец" # phrase(the first 'column' in the table) + - x: "count($Child2D/preceding-sibling::*)+1" + - pause: "medium" + +- name: into-or-out-of-mtr + tag: [mtr, mlabeledtr] + match: "$Move2D = 'in'" + replace: + - t: "столбец" + - x: "count($Child2D/preceding-sibling::*)+1" + - pause: "medium" + +- name: default-move + # nothing to do (not 2D) -- need to catch $Move2D though so rules based on NavCommand don't trigger + tag: "*" + match: "$Move2D != ''" + replace: [] + +# ********* Go back to last position *************** +# This is first since start/end position shouldn't matter +- name: move-last-location + + + tag: "*" + match: "$NavCommand = 'MoveLastLocation'" + replace: + - test: + if: "$NavVerbosity != 'Terse'" + then: + - test: + - if: "$PreviousNavCommand = 'ZoomIn'" + then: [t: "отменить zoom in"] # phrase('undo zoom in') + - else_if: "$PreviousNavCommand = 'ZoomOut'" + then: [t: "отменить увеличение"] # phrase('undo zoom out') + - else_if: "$PreviousNavCommand = 'ZoomInAll'" + then: [t: "отменить масштабирование на все пути"] # phrase('undo zooming in all the way') + - else_if: "$PreviousNavCommand = 'ZoomOutAll'" + then: [t: "отменить увеличиваясь на весь путь"] # phrase('undo zooming out all the way') + - else_if: "$PreviousNavCommand = 'MovePrevious' or $PreviousNavCommand = 'MovePreviousZoom'" + then: [t: "отменить движение влево"] # phrase('undo move left') + - else_if: "$PreviousNavCommand = 'MoveNext' or $PreviousNavCommand = 'MoveNextZoom'" + then: [t: "отменить направо"] # phrase('undo move right') + - else_if: "$PreviousNavCommand = 'None'" + then: [t: "нет предыдущей команды"] # phrase('no previous command') + - pause: "medium" + - set_variables: [NavNode: "@id"] + +# many times, for typographic reasons, people include punctuation at the end of a math expr +# these rules detect that and skip speaking it (should be similar regular rule) +- name: skip-punct-at-end-zoom-in + tag: mrow + match: + - "($NavCommand = 'ZoomIn' or $NavCommand = 'ZoomInAll' or $NavCommand = 'MoveNextZoom' or $NavCommand = 'MovePreviousZoom') and" + - " parent::m:math and count(*)=2 and" + - " *[2][translate(.,'.,;:?', '')='']" + replace: + - x: "*[1]" + +# ********* ZoomIn *************** +- name: zoom-in-leaf + + tag: "*" + match: "($NavCommand = 'ZoomIn' or $NavCommand = 'ZoomInAll') and IsNode(., 'leaf')" + replace: + - test: + if: "$MatchCounter = 0 and $NavVerbosity != 'Terse'" + then: [t: "расширение на весь путь", pause: "long"] # phrase('zoomed in all of the way') + - test: + if: "$ReadZoomLevel!=-1" + then: + - set_variables: [ReadZoomLevel: "0"] + - set_variables: [NavNode: "@id"] + +# special case of zooming into a table -- move to the first row (if only one row, first column) +- name: zoom-in-table + tag: mtable + match: "$NavCommand = 'ZoomIn'" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "count(*)=1" + then: + - set_variables: [NavNode: "*[1]/*[1]/@id"] + else: + - set_variables: [NavNode: "*[1]/@id"] + +- name: zoom-in-mrow-in-math + # Moving to first or last is meaningless the 'math' has only an 'mrow' inside -- dig inside and do it again + tag: math + match: "count(*)=1 and ($NavCommand = 'ZoomIn' or $NavCommand = 'MoveNextZoom' or $NavCommand = 'MovePreviousZoom')" + replace: + - test: + if: "$NavCommand = 'MovePreviousZoom'" + then: [x: "*[last()]"] + else: [x: "*[1]"] + +- # For msqrt and menclose, if the single child isn't an mrow, don't zoom in + name: zoom-in-again + # If there is only one child, this isn't an interesting move -- zoom in again + tag: "*" + match: + - "($NavCommand = 'ZoomIn' or " + - " ($NavCommand = 'MoveNextZoom' or $NavCommand = 'MovePreviousZoom') and $NavMode='Enhanced') and " + - "count(*)=1 and + (*[1][self::m:mrow or @data-from-mathml='mrow'] and + not(@data-from-mathml='msqrt' or self::m:msqrt or @data-from-mathml='menclose' or self::m:menclose))" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "$NavCommand = 'MovePreviousZoom'" + then: [x: "*[last()]"] + else: [x: "*[1]"] + +- name: zoom-in-enhanced + + tag: "*" + match: "$NavCommand = 'ZoomIn' and $NavMode='Enhanced'" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + - if: "self::m:mtr or self::m:mlabeledtr" + then: + - with: + variables: [Move2D: "'in'", Child2D: "*[1]/*[1]"] # phrase('in' the denominator) + replace: [x: "."] + - set_variables: [NavNode: "*[1]/*[1]/@id"] # skip mtd + - else_if: "*[1][self::m:mrow and IsBracketed(., '(', ')', false) or IsBracketed(., '[', ']', false)]" # auto zoom + then: + - with: + variables: [Move2D: "'in'", Child2D: "*[1]"] # phrase('in' the denominator) + replace: [x: "."] + - set_variables: [NavNode: "*[1]/*[2]/@id"] # skip parens/brackets + else: + - with: + variables: [Move2D: "'in'", Child2D: "*[1]"] # phrase('in' the denominator) + replace: [x: "."] + - set_variables: [NavNode: "*[1]/@id"] + +- name: zoom-in-2D-not-enhanced + tag: "*" + match: "$NavCommand = 'ZoomIn' and $NavMode!='Enhanced' and (IsNode(., '2D') or not(IsNode(., 'mathml')))" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - with: + variables: [Move2D: "'in'", Child2D: "*[1]"] # phrase('in' the denominator) + replace: [x: "."] + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "*[1]"] + +- name: zoom-in-default + tag: "*" + match: "$NavCommand = 'ZoomIn'" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - with: + variables: [Move2D: "'in'", Child2D: "*[1]"] # phrase('in' the denominator) + replace: [x: "."] + - test: + if: "$NavMode='Character'" + then: [x: "*[1]"] + else_test: + if: "self::m:mtd" + then: [x: "*[1]"] + else: + - test: + if: "$ReadZoomLevel!=-1" + then: + - set_variables: [ReadZoomLevel: "DistanceFromLeaf(*[1], true, $NavMode!='Character')"] + - set_variables: [NavNode: "*[1]/@id"] + +- name: zoom-in-all-default + tag: "*" + match: "$NavCommand = 'ZoomInAll'" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - with: + variables: [Move2D: "'in'", Child2D: "*[1]"] # phrase('in' the denominator) + replace: [x: "."] + - x: "*[1]" + +- name: zoom-out + tag: math + match: "$NavCommand = 'ZoomOut' or $NavCommand = 'ZoomOutAll'" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - set_variables: [NavNode: "*[1]/@id"] # no-op for $NavCommand = 'ZoomOut' + +- name: skip-punct-at-end-zoom-out + tag: mrow + match: + - "($NavCommand = 'ZoomOut' or $NavCommand = 'ZoomOutAll') and" + - " parent::m:math and count(*)=2 and" + - " *[2][translate(.,'.,;:?', '')='']" + replace: + - x: ".." + +- name: zoom-out-top + tag: "*" + match: + - "($NavCommand = 'ZoomOut' or $NavCommand = 'ZoomOutAll') and" + - "parent::m:math " + replace: + - x: ".." # let math rule deal with it + +- name: zoom-out-all-default + tag: "*" + match: "$NavCommand = 'ZoomOutAll'" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - with: + variables: [Move2D: "'out of'", Child2D: "."] + replace: [x: ".."] + - x: ".." + +# deal with internal zooming: MoveNextZoom and MovePreviousZoom + +# start with Enhanced mode +- name: move-zoom-enhanced + tag: "*" + match: + - "($NavCommand = 'MoveNextZoom' or $NavCommand = 'MovePreviousZoom') and " + - "$NavMode = 'Enhanced'" + replace: + - with: + variables: [Move2D: "'in'", Child2D: "*[1]"] # phrase('in' the denominator) + replace: [x: "."] + - test: + - if: "count(*)> 1 or IsNode(., 'leaf') or + @data-from-mathml='msqrt' or self::m:msqrt or @data-from-mathml='menclose' or self::m:menclose" + then: [set_variables: [NavNode: "@id"]] + else: [x: "*[1]"] + +- name: move-next-zoom-not-enhanced + # $ReadZoomLevel must be >= 0 + tag: "*" + match: "$NavCommand = 'MoveNextZoom'" + replace: + #don't bother with MatchCounter since we only get here if > 1 + - test: + if: "$ReadZoomLevel >= DistanceFromLeaf(., false, $NavMode!='Character')" + then: + # - with: + # variables: [Move2D: "'in'", Child2D: "following-sibling::*[1]"] # phrase('in' the denominator) + # replace: [x: ".."] + - set_variables: [NavNode: "@id"] + else: + - with: + variables: [Move2D: "'in'", Child2D: "*[1]"] # phrase('in' the denominator) + replace: [x: "."] + - x: "*[1]" + +- name: move-previous-zoom-not-enhanced + # $ReadZoomLevel must be >= 0 + tag: "*" + match: "$NavCommand = 'MovePreviousZoom'" + replace: + #don't bother with MatchCounter since we only get here if > 1 + - test: + if: "$ReadZoomLevel >= DistanceFromLeaf(., true, $NavMode!='Character')" + then: + # - with: + # variables: [Move2D: "'in'", Child2D: "preceding-sibling::*[1]"] # phrase('in' the denominator) + # replace: [x: ".."] + - set_variables: [NavNode: "@id"] + else: + - with: + variables: [Move2D: "'in'", Child2D: "*[last()]"] # phrase('in' the denominator) + replace: [x: "."] + - x: "*[last()]" + +# ********* ZoomOut *************** +- name: zoom-out-default + + + tag: mtd + match: "$Move2D = '' and ($NavCommand = 'ZoomOut')" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + # we need to speak it here + - t: "ряд" # phrase(the first 'row' of the matrix) + # if we let the speech rules speak the row, it is given just the MathML for the row, so the row # will always be '1' + - x: "count(../preceding-sibling::*)+1" + - pause: medium + - set_variables: [NavNode: "../@id"] + +- name: zoom-out + # a row around a single element -- these might duplicate the position/offset, so we jump an extra level here + tag: "*" + match: "$NavCommand = 'ZoomOut'" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "$NavMode='Enhanced' and parent::*[self::m:mrow and IsBracketed(., '(', ')', false) or IsBracketed(., '[', ']', false)]" + then: [x: ".."] # auto-zoom: move out a level and retry + else: + - with: + variables: [Move2D: "'out of'", Child2D: "."] + replace: [x: ".."] + - test: + if: "parent::m:mtd" + then: [x: ".."] + else: + - test: + if: "$ReadZoomLevel!=-1" + then: [set_variables: [ReadZoomLevel: "DistanceFromLeaf(.., true, $NavMode!='Character')"]] + - set_variables: [NavNode: "../@id"] + +# ********* MoveStart/End *************** +- name: math-move-to-start-or-end + tag: math + match: "$NavCommand = 'MoveStart' or $NavCommand = 'MoveLineStart' or $NavCommand = 'MoveEnd' or $NavCommand = 'MoveLineEnd'" + replace: + - with: + variables: [MatchCounter: "$MatchCounter + 1"] + replace: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - test: + - if: "$NavCommand = 'MoveStart'" + then: [t: "перейти на начало математики"] # phrase('move to start of math') + - else_if: "$NavCommand = 'MoveLineStart'" + then: [t: "перейти на начало линии"] # phrase('move to start of line') + - else_if: "$NavCommand = 'MoveEnd'" + then: [t: "перейти к концу математики"] # phrase('move to end of math') + else: [t: "перейти к концу линии"] # "$NavCommand = 'MoveLineEnd'" # phrase('move to end of line') + - pause: "medium" + - test: + if: "$NavCommand = 'MoveStart' or $NavCommand = 'MoveLineStart'" + then: + # move inside of the mrow inside of 'math' or inside the fraction, etc (hence two levels down) + # Note: an apparent bug in the xpath code doesn't let me use IfThenElse for the 2 if: then: below + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: + - test: + if: "*[1]/*[1]" # could be a x, so no grandchild + then: [x: "*[1]/*[1]"] + else: [x: "*[1]"] + else: + - with: + variables: [NavCommand: "'MovePreviousZoom'"] + replace: + - test: + if: "*[last()]/*[last()]" # could be a x, so no grandchild + then: [x: "*[last()]/*[last()]"] + else: [x: "*[last()]"] + +# We stop when the parent is 2d (e.g., frac), but not if in leaf base of msub/msup/msubsup/mmultiscripts because that's really on the same line +- name: move-to-start-or-end-2d + tag: "*" + match: + - "($NavCommand = 'MoveLineStart' or $NavCommand = 'MoveLineEnd') and IsNode(.., '2D') and" + - "not( IsNode(., 'leaf') and" + - " parent::*[1][self::m:msub or self::m:msup or self::m:msubsup or self::m:mmultiscripts or" + - " @data-from-mathml='msub' or @data-from-mathml='msup' or" + - " @data-from-mathml='msubsup' or @data-from-mathml='mmultiscripts'" + - " ] )" + replace: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - test: + if: "$NavCommand = 'MoveLineStart'" + then: [t: "перейти на начало линии"] # phrase('move to start of line') + else: [t: "перейти к концу линии"] # "$NavCommand = 'MoveLineEnd'" # phrase('move to end of line') + - pause: "medium" + - test: + if: "self::m:mrow or @data-from-mathml = 'mrow'" + then_test: + if: "$NavCommand = 'MoveLineStart'" + then: + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "*[1]"] + else: + - with: + variables: [NavCommand: "'MovePreviousZoom'"] + replace: [x: "*[last()]"] + else: [set_variables: [NavNode: "@id"]] + +- name: move-to-start-or-end-default + tag: "*" + match: "$NavCommand = 'MoveStart' or $NavCommand = 'MoveLineStart' or $NavCommand = 'MoveEnd' or $NavCommand = 'MoveLineEnd'" + replace: + - with: + variables: [MatchCounter: "$MatchCounter + 1"] + replace: [x: ".."] + +# Table-related movement +# Typically, we need to zoom out to the mtd level, then we move the appropriate direction +- name: not-in-table + + + tag: math + match: + - "$NavCommand='MoveCellPrevious' or $NavCommand='MoveCellNext' or" + - "$NavCommand='MoveCellUp' or $NavCommand='MoveCellDown' or" + - "$NavCommand='MoveColumnStart' or $NavCommand='MoveColumnEnd' or" + - "$NavCommand='ReadCellCurrent'" + replace: + - t: "не в таблице" # phrase('not in table') + - pause: long + - set_variables: [SpeakExpression: "'false'"] + +- name: move-cell-previous + tag: mtd + match: "$NavCommand='MoveCellPrevious'" + replace: + - test: + if: "preceding-sibling::*" + then: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "двигайся влево" # phrase('move left') + - pause: short + - test: + if: "$NavVerbosity != 'Terse'" + then: + - t: "столбец" # phrase(the first 'column' of the table) + - x: "count(preceding-sibling::*)" + - pause: medium + - test: + if: "$NavMode='Character'" + then: + - with: + variables: [NavCommand: "'MovePreviousZoom'"] + replace: [x: "preceding-sibling::*[1]"] + else: + - set_variables: [NavNode: "preceding-sibling::*[1]/*[1]/@id"] + else: + - t: "нет предыдущего столбца" # phrase('no previous column' in the table) + - set_variables: [SpeakExpression: "'false'"] + +- name: move-cell-next + tag: mtd + match: "$NavCommand='MoveCellNext'" + replace: + - test: + if: "following-sibling::*" + then: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "двигайся вправо" # phrase('move right') + - pause: short + - test: + if: "$NavVerbosity != 'Terse'" + then: + - t: "столбец" # phrase(the first 'column' in the table) + - x: "count(preceding-sibling::*)+2" + - pause: medium + - test: + if: "$NavMode='Character'" + then: + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "following-sibling::*[1]"] + else: + - set_variables: [NavNode: "following-sibling::*[1]/*[1]/@id"] + else: + - t: "нет следующего столбца" # phrase('no next column' in the table) + - set_variables: [SpeakExpression: "'false'"] + +- name: move-cell-up + tag: mtd + match: "$NavCommand='MoveCellUp'" + replace: + - test: + if: "../preceding-sibling::*" + then: + - with: + variables: [Column: "count(preceding-sibling::*)+1"] # store this because otherwise the value is used in the wrong context below + replace: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "перейти на вверх" # phrase('move up' to previous row in the table) + - pause: short + - test: + if: "$NavVerbosity != 'Terse'" + then: + - t: "строка" # phrase(the previous 'row' in the table) + - x: "count(../preceding-sibling::*)" + - pause: short + - t: "столбец" # phrase(the previous 'column' in the table) + - x: "count(preceding-sibling::*)+1" + - pause: medium + - test: + if: "$NavMode='Character'" + then: + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "../preceding-sibling::*[1]/*[$Column]"] + else: + - set_variables: [NavNode: "../preceding-sibling::*[1]/*[$Column]/*[1]/@id"] + else: + - t: "нет предыдущей строки" # phrase('no previous row' in the table) + - set_variables: [SpeakExpression: "'false'"] + +- name: move-cell-down + tag: mtd + match: "$NavCommand='MoveCellDown'" + replace: + - test: + if: "../following-sibling::*" + then: + - with: + variables: [Column: "count(preceding-sibling::*)+1"] # store this because otherwise the value is used in the wrong context below + replace: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "двигаться вниз" # phrase('move down to the next row in the table) + - pause: short + - test: + if: "$NavVerbosity != 'Terse'" + then: + - t: "строка" # phrase(the next 'row' in the table) + - x: "count(../preceding-sibling::*)+2" + - pause: short + - t: "столбец" # phrase(the next 'column' in the table) + - x: "count(preceding-sibling::*)+1" + - pause: medium + - test: + if: "$NavMode='Character'" + then: + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "../following-sibling::*[1]/*[$Column]"] + else: + - set_variables: [NavNode: "../following-sibling::*[1]/*[$Column]/*[1]/@id"] + else: + - t: "нет следующей строки" # phrase('no next row' in the table) + - set_variables: [SpeakExpression: "'false'"] + +- name: move-cell-up + tag: [mtr, mlabeledtr] + match: "$NavCommand='MoveCellUp'" + replace: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "перейти к предыдущей строке" # phrase('move to previous row' to the previous row in the table) + - pause: medium + - test: + if: "preceding-sibling::*" + then: + - test: + if: "$NavMode='Character'" + then: + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "preceding-sibling::*[1]"] + else: + - set_variables: [NavNode: "preceding-sibling::*[1]/@id"] + else: + - t: "нет предыдущей строки" # phrase('no previous row' in the table) + - set_variables: [SpeakExpression: "'false'"] + +- name: move-cell-down + tag: [mtr, mlabeledtr] + match: "$NavCommand='MoveCellDown'" + replace: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "перейти к следующей строке" # phrase('move to next row' to the next row in the table) + - pause: medium + - test: + if: "following-sibling::*" + then: + - test: + if: "$NavMode='Character'" + then: + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "following-sibling::*[1]"] + else: + - set_variables: [NavNode: "following-sibling::*[1]/@id"] + else: + - t: "нет следующей строки" # phrase('no next row' in the table) + - set_variables: [SpeakExpression: "'false'"] + +- name: move-cell-previous + # if a row is selected, there is no previous/next column, so this is trivial + tag: [mtr, mlabeledtr] + match: "$NavCommand='MoveCellPrevious'" + replace: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "перейти к предыдущему столбцу" # phrase('move to previous column' to the previous row in the table) + - pause: medium + - t: "нет предыдущего столбца" # phrase('no previous column' in the table) + - set_variables: [SpeakExpression: "'false'"] + +- name: move-cell-next + # if a row is selected, there is no previous/next column, so this is trivial + tag: [mtr, mlabeledtr] + match: "$NavCommand='MoveCellNext'" + replace: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "перейти на вверх" # phrase('move up' to the previous row in the table) + - pause: medium + - t: "нет следующей строки" # phrase('no next row' in the table) + - set_variables: [SpeakExpression: "'false'"] + +- name: default-read-cell + tag: "*" + match: "$NavCommand='ReadCellCurrent'" + replace: + - with: + variables: [MTD: "ancestor::m:mtd"] + replace: + - test: + if: "$MTD" + then: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "прочитайте текущую запись" # phrase('read current entry' in the table) + - pause: medium + - test: + if: "$NavVerbosity != 'Terse'" + then: + - t: "строка" # phrase(the previous 'row' in the table) + - x: "count($MTD[1]/../preceding-sibling::*)+1" + - t: "столбец" # phrase(the previous 'column' in the table) + - x: "count($MTD[1]/preceding-sibling::*)+1" + - pause: short + - set_variables: [NavNode: "$MTD[1]/*[1]/@id"] + else: + - t: "не в таблице" # phrase('not in table' or matrix) + - pause: long + - set_variables: [SpeakExpression: "'false'"] + +# mtd ? ( $NavCommand='MoveColumnStart' ) +# => MoveColStart { +# ruleRef = name(^^match); +# column = index(match); +# ::StartPosition = ^^match[0][index(match)][0].dfs; +# ::EndPosition = ^^match[0][index(match)][0].offset; +# }; + +# mtd ? ( $NavCommand='MoveColumnEnd' ) +# => MoveColEnd { +# ruleRef = name(^^match); +# column = index(match); +# ::StartPosition = ^^match[count(^^match)-1][index(match)][0].dfs; +# ::EndPosition = ^^match[count(^^match)-1][index(match)][0].offset; +# }; + + + +# # Rules for columnar math (mstack and mlongdiv) -- each row is an msrow or mscarries except for the start of mlongdiv +# # FIX: not dealing with different number of digits on different lines +# # FIX: not dealing with + (etc) on same line if they are on the right side (Dutch, others) +# # FIX: not dealing with intervening msline (say it and move on??) +# # FIX: not dealing with carries well +# # FIX: not dealing with navigation of first three children of mlongdiv +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# ($NavCommand="MovePrevious" || $NavCommand='MoveCellPrevious') && has_previous(match) ) +# => MoveCell { +# ruleRef = name(^^match); +# wordRef = "previous"; +# ::StartPosition = previous(match).dfs; +# ::EndPosition = previous(match).offset; +# }; + +# # no previous child -- in first column -- don't move +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# ($NavCommand="MovePrevious" || $NavCommand='MoveCellPrevious' ) ) +# => MoveCell { +# ruleRef = name(^^match); +# wordRef = "previous"; +# childIndex = -1; # key to know what to say for each notation +# ::SpeakAfterMove = false; +# }; + +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# ($NavCommand="MoveNext" || $NavCommand='MoveCellNext') && has_next(match) ) +# => MoveCell { +# ruleRef = name(^^match); +# wordRef = "next"; +# ::StartPosition = next(match).dfs; +# ::EndPosition = next(match).offset; +# }; + +# # no next child -- in first column -- don't move +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# ($NavCommand="MoveNext" || $NavCommand='MoveCellNext' ) ) +# => MoveCell { +# ruleRef = name(^^match); +# wordRef = "next"; +# childIndex = -1; # key to know what to say for each notation +# ::SpeakAfterMove = false; +# }; + +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# $NavCommand='MoveCellUp' && has_previous(^^match) ) +# => MoveCell { +# ruleRef = name(^^match); +# wordRef = "up"; +# ::StartPosition = ^^^match[index(^^match)-1][-1][index(match)-count(^match)].dfs; +# ::EndPosition = ^^^match[index(^^match)-1][-1][index(match)-count(^match)].offset; +# }; + +# # no previous child -- in first column -- don't move +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# $NavCommand='MoveCellUp' ) +# => MoveCell { +# ruleRef = name(^^match); +# wordRef = "up"; +# childIndex = -1; # key to know what to say for each notation +# ::SpeakAfterMove = false; +# }; + +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# $NavCommand='MoveCellDown' && has_next(^^match) ) +# => MoveCell { +# ruleRef = name(^^match); +# wordRef = "down"; +# ::StartPosition = ^^^match[index(^^match)+1][-1][index(match)-count(^match)].dfs; +# ::EndPosition = ^^^match[index(^^match)+1][-1][index(match)-count(^match)].offset; +# }; + +# # no previous child -- in first column -- don't move +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# $NavCommand='MoveCellDown' ) +# => MoveCell { +# ruleRef = name(^^match); +# wordRef = "down"; +# childIndex = -1; # key to know what to say for each notation +# ::SpeakAfterMove = false; +# }; + +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# $NavCommand='MoveColumnStart' ) +# => MoveColStart { +# ruleRef = name(^^match); +# column = index(match); +# ::StartPosition = ^^^match[0][-1][index(match)-count(^match)].dfs; +# ::EndPosition = ^^^match[0][-1][index(match)-count(^match)].offset; +# }; + +# char ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# $NavCommand='MoveColumnEnd' ) +# => MoveColEnd { +# ruleRef = name(^^match); +# column = index(match); +# ::StartPosition = ^^^match[count(^^^match)-1][-1][index(match)-count(^match)].dfs; +# ::EndPosition = ^^^match[count(^^^match)-1][-1][index(match)-count(^match)].offset; +# }; + +# any ? ( (name(match)=="mn" || name(match)=="none") && +# has_parent(match) && name(^match)=="mscarries" && +# ($NavCommand="MovePrevious" || $NavCommand='MoveCellPrevious') && has_previous(match) ) +# => MoveCell { +# ruleRef = name(^match); +# wordRef = "previous"; +# ::StartPosition = previous(match).dfs; +# ::EndPosition = previous(match).offset; +# }; + +# # no previous child -- in first column -- don't move +# any ? ( (name(match)=="mn" || name(match)=="none") && +# has_parent(match) && name(^match)=="mscarries" && +# ($NavCommand="MovePrevious" || $NavCommand='MoveCellPrevious') ) +# => MoveCell { +# ruleRef = name(^match); +# wordRef = "previous"; +# childIndex = -1; # key to know what to say for each notation +# ::SpeakAfterMove = false; +# }; + +# any ? ( (name(match)=="mn" || name(match)=="none") && +# has_parent(match) && name(^match)=="mscarries" && +# ($NavCommand="MoveNext" || $NavCommand='MoveCellNext') && has_next(match) ) +# => MoveCell { +# ruleRef = name(^match); +# wordRef = "next"; +# ::StartPosition = next(match).dfs; +# ::EndPosition = next(match).offset; +# }; + +# # no next child -- in last column -- don't move +# any ? ( (name(match)=="mn" || name(match)=="none") && +# has_parent(match) && name(^match)=="mscarries" && +# ($NavCommand="MoveNext" || $NavCommand='MoveCellNext') ) +# => MoveCell { +# ruleRef = name(^match); +# wordRef = "next"; +# childIndex = -1; # key to know what to say for each notation +# ::SpeakAfterMove = false; +# }; + +# any ? ( (name(match)=="mn" || name(match)=="none") && +# has_parent(match) && name(^match)=="mscarries" && +# $NavCommand='MoveCellUp' && has_previous(^match) ) +# => MoveCell { +# ruleRef = name(^match); +# wordRef = "up"; +# ::StartPosition = ^^match[index(^match)-1][index(match)-count(^match)].dfs; +# ::EndPosition = ^^match[index(^match)-1][index(match)-count(^match)].offset; +# }; + +# # no previous child -- in first row -- don't move +# any ? ( (name(match)=="mn" || name(match)=="none") && +# has_parent(match) && name(^match)=="mscarries" && +# $NavCommand='MoveCellUp' ) +# => MoveCell { +# ruleRef = name(^match); +# wordRef = "up"; +# childIndex = -1; # key to know what to say for each notation +# ::SpeakAfterMove = false; +# }; + +# any ? ( (name(match)=="mn" || name(match)=="none") && +# has_parent(match) && name(^match)=="mscarries" && +# $NavCommand='MoveCellDown' && has_next(^match) ) +# => MoveCell { +# ruleRef = name(^match); +# wordRef = "down"; +# ::StartPosition = ^^match[index(^match)+1][-1][index(match)-count(^match)].dfs; +# ::EndPosition = ^^match[index(^match)+1][-1][index(match)-count(^match)].offset; +# }; + +# # no next child -- in last row -- don't move +# any ? ( (name(match)=="mn" || name(match)=="none") && +# has_parent(match) && name(^match)=="mscarries" && +# $NavCommand='MoveCellDown' ) +# => MoveCell { +# ruleRef = name(^match); +# wordRef = "down"; +# childIndex = -1; # key to know what to say for each notation +# ::SpeakAfterMove = false; +# }; + +# mn ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# $NavCommand='MoveColumnStart' ) +# => MoveColStart { +# ruleRef = name(^^match); +# column = index(match); +# ::StartPosition = ^^^match[0][-1][index(match)-count(^match)].dfs; +# ::EndPosition = ^^^match[0][-1][index(match)-count(^match)].offset; +# }; + +# mn ? ( has_parent(match, 2) && name(^match)=="mn" && name(^^match)=="msrow" && +# $NavCommand='MoveColumnEnd' ) +# => MoveColEnd { +# ruleRef = name(^^match); +# column = index(match); +# ::StartPosition = ^^^match[count(^^^match)-1][-1][index(match)-count(^match)].dfs; +# ::EndPosition = ^^^match[count(^^^match)-1][-1][index(match)-count(^match)].offset; +# }; + + + +- name: default-cell-move + + tag: "*" + match: + - "$NavCommand='MoveCellPrevious' or $NavCommand='MoveCellNext' or" + - "$NavCommand='MoveCellUp' or $NavCommand='MoveCellDown' or" + - "$NavCommand='MoveColumnStart' or $NavCommand='MoveColumnEnd' or" + - "$NavCommand='ReadCellCurrent'" + replace: + - test: + if: "ancestor::m:mtd" + then: + - x: "ancestor::m:mtd[1]" # try again on an mtd node + else: + - t: "не в таблице" # phrase('not in table' or matrix) + - pause: long + - set_variables: [SpeakExpression: "'false'"] + +# ======== Move/Read/Describe Next rules ================= + +# skip 'none' +- name: move-next-none + tag: "none" + match: + - "($NavCommand = 'MoveNext' or $NavCommand = 'ReadNext' or $NavCommand = 'DescribeNext' or $NavCommand = 'DescribePrevious' or $NavCommand = 'MoveNextZoom') and" + - "parent::*[1][name(.)='mmultiscripts'] and following-sibling::*" + replace: + - with: + variables: [Following: "following-sibling::*[1]"] + replace: + # two 'none's in a row -- move over and try again; one 'none', zoom in on next + - test: + if: "$Following[name(.)='none']" + then: [x: "$Following"] + else: + - with: + variables: [Move2D: "'in'", Child2D: "$Following"] # phrase('in' the denominator) + replace: [x: ".."] + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "$Following"] + +# skip 'none' +- name: move-previous-none + tag: "none" + match: + - "($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious' or $NavCommand = 'MovePreviousZoom') and" + - "parent::*[1][name(.)='mmultiscripts'] and preceding-sibling::*" + replace: + - with: + variables: [Preceding: "preceding-sibling::*[1]"] + replace: + # two 'none's in a row -- move over and try again; one 'none', zoom in on preceding + - test: + if: "$Preceding[name(.)='none']" + then: [x: "$Preceding"] + else: + - with: + variables: [Move2D: "'in'", Child2D: "$Preceding"] # phrase('in' the denominator) + replace: [x: ".."] + - with: + variables: [NavCommand: "'MovePreviousZoom'"] + replace: [x: "$Preceding"] + + + +# skip invisible chars except for Enhanced mode when "times" should be read +- name: move-next-invisible + tag: "*" + match: + - "($NavCommand = 'MoveNext' or $NavCommand = 'ReadNext' or $NavCommand = 'DescribeNext') and" + - "following-sibling::*[1][name(.)='mo' and translate(., '\u2061\u2062\u2063\u2064', '')='']" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "following-sibling::*[1][.='\u2062' or .='\u2064'] and + ($NavMode='Enhanced' or ($NavMode='Simple' and following-sibling::*[2][not(IsNode(., 'mathml'))]))" # invisible times and plus + then: [set_variables: [NavNode: "following-sibling::*[1]/@id"]] + else: [x: "following-sibling::*[1]"] + +- name: move-next-no-auto-zoom-at-edge + # at edge of 2D and in a mode where moving right isn't an option + tag: "*" + variables: [EdgeNode: "EdgeNode(., 'right', '2D')"] + match: "$NavCommand = 'MoveNext' and $NavMode!='Character' and not($AutoZoomOut) and $EdgeNode/@id!=@id" + replace: + - test: + if: "$MatchCounter = 0 and $NavVerbosity = 'Verbose'" + then: + - t: "не могу двигаться правильно" # phrase('cannot move right') + - pause: medium + - with: + variables: [Move2D: "'end of'", Child2D: "$EdgeNode/*[last()]"] + replace: [x: "$EdgeNode"] + - pause: long + - set_variables: [SpeakExpression: "'false'"] + +- name: move-next-no-auto-zoom-at-edge-math + # at edge of math -- no where to go (must be after we rule out being at the edge of 2D) because we want to speak that + tag: "*" + match: + - "($NavCommand = 'MoveNext' or $NavCommand = 'ReadNext' or $NavCommand = 'DescribeNext') and" + - "(self::m:math or name(EdgeNode(., 'right', 'math'))='math')" # at edge of math + replace: + - test: + if: "$MatchCounter = 0 and $NavVerbosity = 'Verbose'" + then: + - t: "не могу" # phrase('cannot' move right in expression) + - test: + - if: "$NavCommand = 'MoveNext'" + then: [t: "перейти"] # phrase('move' to next entry in table) + - else_if: "$NavCommand = 'ReadNext'" + then: [t: "читать"] # phrase('read' next entry in table) + else: [t: "опишите"] # phrase('describe' next entry in table) + - t: "правильно" # phrase(move 'right') + - pause: short + - t: "конец математики" # phrase(move 'end of math') + - pause: long + - set_variables: [SpeakExpression: "'false'"] + +- name: move-next-auto-zoom-up-one-level + # Last child or in auto-zoom'd in-- move up a level and try again + # Note: we've already checked the for the case where we are at an edge and should not AutoZoomOut + tag: "*" + match: + - "($NavCommand = 'MoveNext' or $NavCommand = 'ReadNext' or $NavCommand = 'DescribeNext') and" + - "( not(following-sibling::*) or" + - " ( $NavMode='Enhanced' and " + - " count(following-sibling::*)=1 and (IsBracketed(.., '(', ')') or IsBracketed(.., '[', ']'))" + - " )" + - ")" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "following-sibling::*" + then: + - with: + variables: [Move2D: "'in'", Child2D: "."] # phrase('in' the denominator) + replace: [x: ".."] + else: + - with: + variables: [Move2D: "'out of'", Child2D: "."] + replace: [x: ".."] + - x: ".." + +# At this point, if XXXNext, then we know there is must be a right sibling +- name: move-next-default + tag: mtd + match: "$Move2D = '' and ($NavCommand = 'MoveNext' or $NavCommand = 'ReadNext' or $NavCommand = 'DescribeNext')" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "following-sibling::*" + then: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "столбец" # phrase(the previous 'column' in the table) + - x: "count(preceding-sibling::*)+2" + - pause: short + - test: + if: "$NavMode = 'Character'" + then: + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "following-sibling::*[1]"] + else: [set_variables: [NavNode: "following-sibling::*[1]/*[1]/@id"]] + else: + - x: ".." # try again at the row level + +- name: move-next-default + tag: [mtr, mlabeledtr] + match: "$Move2D = '' and + ($NavCommand = 'MoveNext' or $NavCommand = 'ReadNext' or $NavCommand = 'DescribeNext') and + following-sibling::*" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "$NavMode = 'Character'" + then: + - with: + variables: [NavCommand: "'MoveNextZoom'"] + replace: [x: "following-sibling::*[1]"] + else: + - set_variables: [NavNode: "following-sibling::*[1]/@id"] + +- name: move-next-auto-zoom-parens + # auto-zoom into next child if next child is parenthesized expr + tag: "*" + match: + - "($NavCommand = 'MoveNext' or $NavCommand = 'ReadNext' or $NavCommand = 'DescribeNext') and" + - "$NavMode='Enhanced' and" + - "parent::m:mrow and following-sibling::* and" + - "following-sibling::*[1][self::m:mrow and count(*)=3 and " #exclude empty parens + - " (IsBracketed(., '(', ')') or IsBracketed(., '[', ']'))" + - " ]" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - set_variables: [NavNode: "following-sibling::*[1]/*[2]/@id"] + +# normal cases for MoveNext +- name: move-next-locked-zoom-level + # locked zoom level + tag: "*" + match: + - "($NavCommand = 'MoveNext' or $NavCommand = 'ReadNext' or $NavCommand = 'DescribeNext') and" + - "$ReadZoomLevel>=0" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + # if in base (nothing before), we must be moving to a script, so "in" will be said + if: "preceding-sibling::* and following-sibling::*[1][name(.)='none']" + then: + - with: + variables: [Move2D: "'out of'", Child2D: "."] + replace: [x: ".."] + - with: + variables: [MatchCounter: "$MatchCounter + 1"] + replace: [x: "following-sibling::*[1]"] # skip over 'none' + else: + - with: + variables: [Move2D: "'in'", Child2D: "following-sibling::*[1]"] # phrase('in' the denominator) + replace: [x: ".."] + - with: + variables: [MatchCounter: "$MatchCounter + 1", NavCommand: "'MoveNextZoom'"] + replace: [x: "following-sibling::*[1]"] + +- name: move-next-default + tag: "*" + match: "$NavCommand = 'MoveNext' or $NavCommand = 'ReadNext' or $NavCommand = 'DescribeNext'" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "following-sibling::*[1][@data-from-mathml='none' or @data-from-mathml='mprescripts']" + then: [x: "following-sibling::*[1]"] + else: + - test: + if: "IsNode(.., '2D') or not(IsNode(.., 'mathml'))" + then: + - with: + variables: [Move2D: "'in'", Child2D: "following-sibling::*[1]"] # phrase('in' the denominator) + replace: [x: ".."] + - set_variables: [NavNode: "following-sibling::*[1]/@id"] + +# ======== Move/Read/Describe Previous rules ================= + +# skip invisible chars except for Enhanced mode when "times" should be read +- name: move-previous-invisible + tag: "*" + match: + - "($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious') and" + - "preceding-sibling::*[1][name(.)='mo' and translate(., '\u2061\u2062\u2063\u2064', '')='']" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - with: + variables: [MatchCounter: "$MatchCounter + 1"] + replace: + - test: + if: "preceding-sibling::*[1][.='\u2062' or .='\u2064'] and $NavMode='Enhanced'" # invisible times and plus + then: [set_variables: [NavNode: "preceding-sibling::*[1]/@id"]] + else: [x: "preceding-sibling::*[1]"] + +# two rules for when can't move left +- name: move-previous-no-auto-zoom-at-edge + # at edge of 2D and in a mode where moving left isn't an option + tag: "*" + variables: [EdgeNode: "EdgeNode(., 'left', '2D')"] + match: "$NavCommand = 'MovePrevious' and $NavMode!='Character' and not($AutoZoomOut) and $EdgeNode/@id!=@id" + replace: + - test: + if: "$MatchCounter = 0 and $NavVerbosity = 'Verbose' and $NavCommand = 'MovePrevious'" + then: + - t: "не могу двигаться влево" # phrase('cannot move left' in expression) + - pause: medium + - with: + variables: [Move2D: "'end of'", Child2D: "$EdgeNode/*[1]"] + replace: [x: "$EdgeNode"] + - pause: long + +- name: move-previous-no-auto-zoom-at-edge-of-math + # at edge of math -- no where to go (must be after we rule out being at the edge of 2D) because we want to speak that + tag: "*" + match: + - "($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious') and" + - "(self::m:math or name(EdgeNode(., 'left', 'math'))='math')" + replace: + - t: "начало математики" # phrase('start of math') + - pause: long + - set_variables: [SpeakExpression: "'false'"] + +- name: move-previous-at-end + tag: "*" + match: + - "($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious') and" + - "name(EdgeNode(., 'left', 'math'))='math'" # at edge of math + replace: + - test: + if: "$MatchCounter = 0 and $NavVerbosity = 'Verbose'" + then: + - t: "не могу двигаться влево" # phrase('cannot move left') + - pause: short + - with: + variables: [Move2D: "'start of'", Child2D: "."] + replace: [x: "."] + - pause: long + - set_variables: [SpeakExpression: "'false'"] + +- name: move-previous-auto-zoom-up-one-level + # Last child or in auto-zoom'd in-- move up a level and try again + # Note: we've already checked the for the case where we are at an edge and should not AutoZoomOut + tag: "*" + match: + - "($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious') and" + - "( not(preceding-sibling::*) or" + - " ( $NavMode='Enhanced' and " + - " count(preceding-sibling::*)=1 and (IsBracketed(.., '(', ')') or IsBracketed(.., '[', ']'))" + - " )" + - ")" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "preceding-sibling::*" + then: + - with: + variables: [Move2D: "'in'", Child2D: "."] # phrase('in' the denominator) + replace: [x: ".."] + else: + - with: + variables: [Move2D: "'out of'", Child2D: "."] + replace: [x: ".."] + - x: ".." + +- name: move-previous-auto-zoom-parens + # auto-zoom into previous child if previous child is parenthesized expr + # Note: there is an asymmetry here from MoveNext because the base of a scripted might have parens for grouping, but not true for the script + tag: "*" + match: + - "($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious') and" + - "$NavMode='Enhanced' and" + - "preceding-sibling::* and" + - "(parent::m:mrow or parent::m:msub or parent::m:msup or" + - " (count(preceding-sibling::*)=1 and (parent::m:msubsup or parent::m:mmultiscripts))" # make sure moving into base + - ") and" + - "preceding-sibling::*[1][self::m:mrow and count(*)=3 and " #exclude empty parens + - " (IsBracketed(., '(', ')') or IsBracketed(., '[', ']'))" + - " ]" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "not(parent::m:mrow)" + then: + - with: + variables: [Move2D: "'in'", Child2D: "preceding-sibling::*[1]"] # phrase('in' the denominator) + replace: [x: ".."] + - set_variables: [NavNode: "preceding-sibling::*[1]/*[2]/@id"] + +# normal cases for MovePrevious + +- name: move-previous-default + tag: mtd + match: "$Move2D = '' and + ($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious') and + preceding-sibling::*" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - t: "столбец" # phrase(the first 'column' in the table) + - x: "count(preceding-sibling::*)" + - pause: short + - test: + if: "$NavMode = 'Character'" + then: + - with: + variables: [NavCommand: "'MovePreviousZoom'"] + replace: [x: "preceding-sibling::*[1]"] + else: [set_variables: [NavNode: "preceding-sibling::*[1]/*[last()]/@id"]] + +- name: move-previous-default + tag: [mtr, mlabeledtr] + match: "$Move2D = '' and ($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious')" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "preceding-sibling::*" + then: + - test: + if: "$NavMode = 'Character'" + then: + - with: + variables: [NavCommand: "'MovePreviousZoom'"] + replace: [x: "preceding-sibling::*[1]"] + else: + - set_variables: [NavNode: "preceding-sibling::*[1]/@id"] + else: [x: ".."] # try again for after + +- name: move-previous-locked-zoom-level + # locked zoom level + tag: "*" + match: + - "($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious') and" + - "$ReadZoomLevel>=0" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + # if moving into base (nothing before), we must be moving to the base, so "in" will be said + if: "count(preceding-sibling::*) > 2 and preceding-sibling::*[1][name(.)='none']" + then: + - with: + variables: [Move2D: "'out of'", Child2D: "."] + replace: [x: ".."] + - x: "preceding-sibling::*[1]" # skip over 'none' + else: + - with: + variables: [Move2D: "'in'", Child2D: "preceding-sibling::*[1]"] # phrase('in' the denominator) + replace: [x: ".."] + - with: + variables: [NavCommand: "'MovePreviousZoom'"] + replace: [x: "preceding-sibling::*[1]"] + +- name: move-previous-default + tag: "*" + match: "$NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious'" + replace: + - with: + variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] + replace: [x: "."] + - test: + if: "preceding-sibling::*[1][@data-from-mathml='none' or @data-from-mathml='mprescripts']" + then: [x: "preceding-sibling::*[1]"] + else: + - test: + if: "IsNode(.., '2D') or not(IsNode(.., 'mathml'))" + then: + - with: + variables: [Move2D: "'in'", Child2D: "preceding-sibling::*[1]"] # phrase('in' the denominator) + replace: [x: ".."] + - set_variables: [NavNode: "preceding-sibling::*[1]/@id"] + +# ********* ReadZoomLevel toggle *************** +# These set ::NavMode + +- name: toggle-mode-up + tag: "*" + match: "$NavCommand = 'ToggleZoomLockUp'" + replace: + - test: + - if: "$NavMode = 'Enhanced'" + then: + - t: "персонаж" # phrase(a mathematical 'character') + - set_variables: [NavMode: "'Character'", ReadZoomLevel: "1"] + - else_if: "$NavMode = 'Character'" + then: + - t: "простой" # phrase(a 'simple' way to do something) + - set_variables: [NavMode: "'Simple'", ReadZoomLevel: "1"] + - else: + - t: "улучшенный" # phrase(an 'enhanced' way to do something) + - set_variables: [NavMode: "'Enhanced'", ReadZoomLevel: "-1"] + - t: "режим" # phrase(a simple 'mode' of use) + - pause: long + - test: + - if: "$NavMode != 'Enhanced'" # potentially need to zoom to the sibling + then: + - with: + variables: [MatchCounter: "$MatchCounter + 1", NavCommand: "'MoveNextZoom'"] + replace: [x: "."] + +- name: toggle-mode-down + tag: "*" + match: "$NavCommand = 'ToggleZoomLockDown'" + replace: + - test: + - if: "$NavMode = 'Enhanced'" + then: + - t: "простой" # phrase(an 'simple' way to do something) + - set_variables: [NavMode: "'Simple'", ReadZoomLevel: "1"] + - else_if: "$NavMode = 'Character'" + then: + - t: "улучшенный" # phrase(an 'enhanced' way to do something) + - set_variables: [NavMode: "'Enhanced'", ReadZoomLevel: "-1"] + - else: + - t: "персонаж" # phrase(a mathematical 'character') + - set_variables: [NavMode: "'Character'", ReadZoomLevel: "1"] + - t: "режим" # phrase(a simple 'mode' of use) + - pause: long + - test: + - if: "$NavMode != 'Enhanced'" # potentially need to zoom to the sibling + then: + - with: + variables: [MatchCounter: "$MatchCounter + 1", NavCommand: "'MoveNextZoom'"] + replace: [x: "."] + +- name: toggle-speech-describe + tag: "*" + match: "$NavCommand = 'ToggleSpeakMode'" + replace: + - test: + if: "$Overview = 'true'" + then: + - t: "говорите выражение после движения" # phrase('speak expression after move') + - pause: long + - set_variables: [Overview: "'false'"] + else: + - t: "обзор выражения после движения" # phrase('overview of expression after move') + - pause: long + - set_variables: [Overview: "'true'"] + +- name: current + tag: "*" + match: "$NavCommand = 'ReadCurrent' or $NavCommand = 'DescribeCurrent'" + replace: + - test: + if: "$NavVerbosity = 'Verbose'" + then: + - test: + - if: "$NavCommand = 'ReadCurrent'" + then: [t: "читать"] # phrase('read' next entry in table) + else: [t: "опишите"] # phrase('describe' next entry in table) + - t: "текущая" # phrase('current' entry in table) + - pause: long + - set_variables: [NavNode: "@id"] + +# this needs to be near the end because we only test for 'Describe', "Read", etc., and we don't want to get 'DescribeNext', etc. +- name: placemarker + + tag: "*" + match: + - "starts-with($NavCommand, 'Read') or " + - "starts-with($NavCommand, 'Describe') or " + - "starts-with($NavCommand, 'MoveTo')" + replace: + - test: + if: "$NavVerbosity != 'Terse'" + then: + - test: + - if: "starts-with($NavCommand, 'Read')" + then: [t: "читать"] # phrase('read' next entry in table) + - else_if: "starts-with($NavCommand, 'Describe')" + then: [t: "опишите"] # phrase('describe' next entry in table) + - else_if: "starts-with($NavCommand, 'MoveTo')" + then: [t: "перейти к"] # phrase('move to' the next entry in table) + else: [t: "установите"] # phrase('set' the value of the next entry in table) + - t: "заполнитель" # phrase('placeholder' for the value) + - x: "$PlaceMarkerIndex" + - pause: long + - set_variables: [NavNode: "$PlaceMarker"] + +- name: set-placemarker + tag: "*" + match: "starts-with($NavCommand, 'SetPlacemarker')" + replace: + - test: + if: "$NavVerbosity != 'Terse'" + then: + - t: "установите заполнителя" # phrase('set placeholder' to the value) + - x: "$PlaceMarkerIndex" + - pause: long + - set_variables: [NavNode: "@id"] + +# ********* WhereAmI *************** + +# FIX: WhereAmI needs support from the Rust code to loop around and do speech at each iteration. +# Alternatively, it could insert a special token that Rust code does a "replace" on with the speech (e.g. SPEECH_AT{id}) +# or a new command "speak" which takes a node id +- name: where-am-i-start + tag: "*" + match: "($NavCommand = 'WhereAmI' or $NavCommand = 'WhereAmIAll') and $MatchCounter = 0" + replace: + - translate: "@id" + - pause: long + - with: + variables: [MatchCounter: "$MatchCounter + 1"] + replace: [x: ".."] + +- name: where-am-i-stop + tag: "*" + match: + - "($NavCommand = 'WhereAmI' or $NavCommand = 'WhereAmIAll') and $MatchCounter > 0 and" + # stopping conditions + - "(self::m:math or " + - " parent::*[self::m:math and (count(*)=1 or (count(*)=2 and *[2][.=',' or .='.' or .=';' or .='?']) ) ] " + - ")" + replace: + - test: + if: "$NavCommand = 'WhereAmI'" + then: + - t: "внутри ничего больше" # phrase('inside of nothing more') + - pause: long + - set_variables: [SpeakExpression: "'false'"] + else: + - t: "внутри" # phrase('inside' a big expression) + - pause: medium + - set_variables: [NavNode: "@id"] + +- name: where-am-i-middle + tag: "*" + match: "$NavCommand = 'WhereAmI' or $NavCommand = 'WhereAmIAll'" + replace: + - t: "внутри" # phrase('inside' a big expression) + - pause: medium + - test: + - if: "$NavMode='Enhanced' and parent::*[self::m:mrow and IsBracketed(., '(', ')', false) or IsBracketed(., '[', ']', false)]" + then: [x: ".."] # auto-zoom up + - else_if: "$NavCommand = 'WhereAmI'" + then: [set_variables: [NavNode: "@id"]] + else: + - translate: "@id" + - pause: long + - x: '..' diff --git a/Rules/Languages/ru/overview.yaml b/Rules/Languages/ru/overview.yaml new file mode 100644 index 00000000..e91653ac --- /dev/null +++ b/Rules/Languages/ru/overview.yaml @@ -0,0 +1,120 @@ +--- +# Provide an overview/outline/description of the math +# MathPlayer just tried to shorten things like "mfrac" by just saying "fraction" +# For mrow, it say up to 5 operands and just say "and n more things" for the rest +# This results in strings of varying length. Given human memory is about 7 words long, +# it would be better to aim for 7 words (maybe aim for a range of 6-10 words). +# Idea: +# Start by generating a terse form of the speech +# At every step when the strings are being joined +# a) if the #words <= 7, return the joined string +# b) otherwise, set verbosity to 'overview' and regenerate the expression and use that +# There is a balance that you want to maximize the info given, so 10 words is likely better then 3. +# That might mean that at the top level, we may want to allow the first few children to expand + + +- name: overview-default + tag: [mfrac, fraction] + match: "." + replace: + - test: + if: "IsNode(*[1], 'simple') and IsNode(*[2], 'simple')" + then: + - x: "*[1]" + - t: "над" + - x: "*[2]" + else: + - t: "фракция" + +- name: overview-default + tag: [msqrt, "square-root"] + match: "." + replace: + - t: "квадратный корень" + - test: + if: "IsNode(*[1], 'simple')" + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "из"] + - x: "*[1]" + +- name: overview-default + tag: [mroot, root] + match: "." + replace: + - test: + if: "*[2][self::m:mn]" + then_test: + - if: "*[2][.='2']" + then: [t: "квадратный корень"] + - else_if: "*[2][.='3']" + then: [t: "куб корень"] + - else_if: "*[2][not(contains(., '.'))]" + then: [x: "ToOrdinal(*[2])", t: "корень"] + else: + - test: + if: "*[2][self::m:mi][string-length(.)=1]" + then: + - x: "*[2]" + - pronounce: [{text: "-th"}, {ipa: "θ"}, {sapi5: "th"}, {eloquence: "T"}] + else: {x: "*[2]"} + - t: "корень" + - test: + if: "IsNode(*[1], 'simple')" + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "из"] + - x: "*[1]" + +- name: matrix-override + tag: mrow + match: + - "*[2][self::m:mtable] and" + - "(IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|'))" + replace: + - t: "а" + - x: count(*[2]/*) + - t: "к" + - x: count(*[2]/*[self::m:mtr][1]/*) + - test: + if: "*[1][.='|']" # just need to check the first bracket since we know it must be (, [, or | + then: [t: "определяющий"] + else: [t: "матрица"] + +- name: overview-default + tag: mtable + match: "." + replace: + - t: "а" + - x: count(*[2]/*) + - t: "к" + - x: count(*[2]/*[self::m:mtr][1]/*) + - t: "стол" + +- name: short-mrow + tag: mrow + match: "count(*)<6" + replace: + - insert: + nodes: "*" + replace: [pause: auto] + +- name: long-mrow + tag: mrow + match: "." + replace: + - x: "*[1]" + - pause: auto + - x: "*[2]" + - pause: auto + - x: "*[3]" + - pause: auto + - x: "*[4]" + - pause: auto + - x: "*[5]" + - pause: auto + - t: "и так далее" + +- include: "SimpleSpeak_Rules.yaml" diff --git a/Rules/Languages/ru/unicode-full.yaml b/Rules/Languages/ru/unicode-full.yaml new file mode 100644 index 00000000..de912201 --- /dev/null +++ b/Rules/Languages/ru/unicode-full.yaml @@ -0,0 +1,3646 @@ +--- + + + - "¢": [t: "центы"] # 0xa2 (en: 'cents', google translation) + - "£": [t: "фунт"] # 0xa3 (en: 'pounds', google translation) + - "¤": [t: "валютный знак"] # 0xa4 (en: 'currency sign', google translation) + - "¥": [t: "иена"] # 0xa5 (en: 'yen', google translation) + - "¦": [t: "сломанный бар"] # 0xa6 (en: 'broken bar', google translation) + - "§": [t: "раздел"] # 0xa7 (en: 'section', google translation) + - "¨": [t: "двойная точка"] # 0xa8 (en: 'double dot', google translation) + - "©": [t: "авторское право"] # 0xa9 (en: 'copyright', google translation) + - "ª": [t: "женский орден -индикатор"] # 0xaa (en: 'feminine ordinal indicator', google translation) + - "¬": [t: "нет"] # 0xac (en: 'not', google translation) + - "«": [t: "оценка с двойным углом."] # 0xab (en: 'left-pointing double angle quote mark', google translation) + - "¯": # 0xaf + - test: + if: "ancestor::m:modified-variable and preceding-sibling::*[1][self::m:mi]" + then: [t: "бар"] # (en: 'bar', google translation) + else: [t: "линия"] # (en: 'line', google translation) + - "²": [t: "два"] # 0xb2 (en: 'two', google translation) + - "³": [t: "три"] # 0xb3 (en: 'three', google translation) + - "´": [t: "острый"] # 0xb4 (en: 'acute', google translation) + - "µ": [t: "микро"] # 0xb5 (en: 'micro', google translation) + - "¹": [t: "один"] # 0xb9 (en: 'one', google translation) + - "º": [t: "мужской орден -индикатор"] # 0xb9 (en: 'masculine ordinal indicator', google translation) + - "·": + - test: + if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolDot = 'Auto'" + then: [t: "раз"] # (en: 'times', google translation) + else: [t: "умножить"] # (en: 'dot') + - "×": # 0xd7 + - test: + if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolX = 'Auto'" + then: [t: "раз"] # (en: 'times', google translation) + else_test: + if: $ClearSpeak_MultSymbolX = 'By' + then: [t: "к"] # (en: 'by', google translation) + else: [t: "умножить"] # (en: 'cross') + - "÷": [t: "разделить на"] # 0xf7 (en: 'divided by') + - "¡": [t: "перевернутый восклицательный знак"] # 0xa1 (en: 'inverted exclamation mark', google translation) + - "¶": [t: "абзац"] # 0xb6 (en: 'paragraph mark', google translation) + - "¿": [t: "перевернутый вопрос"] # 0xbf (en: 'inverted question mark', google translation) + + - "ʰ": [t: "модификатор маленький h"] # 0x2b0 (en: 'modifier small h', google translation) + - "ʱ": [t: "модификатор маленький h с крючком"] # 0x2b1 (en: 'modifier small h with hook', google translation) + - "ʲ": [t: "модификатор small j"] # 0x2b2 (en: 'modifier small j', google translation) + - "ʳ": [t: "модификатор маленький r"] # 0x2b3 (en: 'modifier small r', google translation) + - "ʴ": [t: "модификатор маленький повернут r"] # 0x2b4 (en: 'modifier small turned r', google translation) + - "ʵ": [t: "модификатор small turn r r с крючком"] # 0x2b5 (en: 'modifier small turned r with hook', google translation) + - "ʶ": # 0x2b6 + - t: "модификатор маленький перевернутый" # (en: 'modifier small inverted', google translation) + - spell: "translate('R', 'R', 'R')" + + - "ʷ": [t: "модификатор маленький w"] # 0x2b7 (en: 'modifier small w', google translation) + - "ʸ": [t: "модификатор маленький y"] # 0x2b8 (en: 'modifier small y', google translation) + - "ʹ": [t: "модификатор prime"] # 0x2b9 (en: 'modifier prime', google translation) + - "ʺ": [t: "модификатор double prime"] # 0x2ba (en: 'modifier double prime', google translation) + - "ʻ": [t: "модификатор стал запятой"] # 0x2bb (en: 'modifier turned comma', google translation) + - "ʼ": [t: "модификатор апостроф"] # 0x2bc (en: 'modifier apostrophe', google translation) + - "ʽ": [t: "модификатор обратный запятой"] # 0x2bd (en: 'modifier reversed comma', google translation) + - "ʾ": [t: "модификатор справа наполовину кольцо"] # 0x2be (en: 'modifier right half ring', google translation) + - "ʿ": [t: "модификатор оставил половину кольца"] # 0x2bf (en: 'modifier left half ring', google translation) + - "ˀ": [t: "модификатор глоттальная остановка"] # 0x2c0 (en: 'modifier glottal stop', google translation) + - "ˁ": [t: "модификатор поменял глоттальную остановку"] # 0x2c1 (en: 'modifier reversed glottal stop', google translation) + - "˂": [t: "модификатор левой стрелки"] # 0x2c2 (en: 'modifier left arrowhead', google translation) + - "˃": [t: "модификатор правой стрелки"] # 0x2c3 (en: 'modifier right arrowhead', google translation) + - "˄": [t: "модификатор вверх стрел"] # 0x2c4 (en: 'modifier up arrowhead', google translation) + - "˅": [t: "модификатор вниз стрел"] # 0x2c5 (en: 'modifier down arrowhead', google translation) + - "ˆ": [t: "модификатор объединенный акцент"] # 0x2c6 (en: 'modifier circumflex accent', google translation) + - "ˇ": [t: "проверять"] # 0x2c7 (en: 'check', google translation) + - "ˈ": [t: "модификатор вертикальной линии"] # 0x2c8 (en: 'modifier vertical line', google translation) + - "ˉ": [t: "модификатор макрон"] # 0x2c9 (en: 'modifier macron', google translation) + - "ˊ": [t: "модификатор острый акцент"] # 0x2ca (en: 'modifier acute accent', google translation) + - "ˋ": [t: "модификатор могильный акцент"] # 0x2cb (en: 'modifier grave accent', google translation) + - "ˌ": [t: "модификатор низкой вертикальной линии"] # 0x2cc (en: 'modifier low vertical line', google translation) + - "ˍ": [t: "модификатор низкий макрон"] # 0x2cd (en: 'modifier low macron', google translation) + - "ˎ": [t: "модификатор низкий могильный акцент"] # 0x2ce (en: 'modifier low grave accent', google translation) + - "ˏ": [t: "модификатор низкий острый акцент"] # 0x2cf (en: 'modifier low acute accent', google translation) + - "ː": [t: "модификатор треугольная толстая кишка"] # 0x2d0 (en: 'modifier triangular colon', google translation) + - "ˑ": [t: "модификатор половина треугольной толстой кишки"] # 0x2d1 (en: 'modifier half triangular colon', google translation) + - "˒": [t: "модификатор центрирован правой половиной кольца"] # 0x2d2 (en: 'modifier centered right half ring', google translation) + - "˓": [t: "модификатор центральный левый половинный кольцо"] # 0x2d3 (en: 'modifier centered left half ring', google translation) + - "˔": [t: "модификатор вверх"] # 0x2d4 (en: 'modifier up tadck', google translation) + - "˕": [t: "модификатор вниз"] # 0x2d5 (en: 'modifier down tack', google translation) + - "˖": [t: "модификатор плюс знак"] # 0x2d6 (en: 'modifier plus sign', google translation) + - "˗": [t: "модификатор минус знак"] # 0x2d7 (en: 'modifier minus sign', google translation) + - "˘": [t: "бреве"] # 0x2d8 (en: 'breve', google translation) + - "˙": [t: "точка"] # 0x2d9 (en: 'dot', google translation) + - "˚": [t: "кольцо выше"] # 0x2da (en: 'ring above', google translation) + - "˛": [t: "огонек"] # 0x2db (en: 'ogonek', google translation) + - "˜": [t: "маленькая тильда"] # 0x2dc (en: 'small tilde', google translation) + - "˝": [t: "двойной острый акцент"] # 0x2dd (en: 'double acute accent', google translation) + - "˞": [t: "модификатор rhotic hook"] # 0x2de (en: 'modifier rhotic hook', google translation) + - "˟": [t: "модификатор cross accent"] # 0x2df (en: 'modifier cross accent', google translation) + - "ˠ": [t: "модификатор маленькой гамма"] # 0x2e0 (en: 'modifier small gamma', google translation) + - "ˡ": [t: "модификатор маленький l"] # 0x2e1 (en: 'modifier small l', google translation) + - "ˢ": [t: "модификатор маленький с"] # 0x2e2 (en: 'modifier small s', google translation) + - "ˣ": [t: "модификатор маленький x"] # 0x2e3 (en: 'modifier small x', google translation) + - "ˤ": [t: "модификатор небольшой обратной глоттальной остановки"] # 0x2e4 (en: 'modifier small reversed glottal stop', google translation) + - "˥": [t: "модификатор лишний тональный батончик"] # 0x2e5 (en: 'modifier extra-high tone bar', google translation) + - "˦": [t: "модификатор высокого тона"] # 0x2e6 (en: 'modifier high tone bar', google translation) + - "˧": [t: "модификатор среднего тона"] # 0x2e7 (en: 'modifier mid tone bar', google translation) + - "˨": [t: "модификатор с низким тоном"] # 0x2e8 (en: 'modifier low tone bar', google translation) + - "˩": [t: "модификатор экстра-низко-тон"] # 0x2e9 (en: 'modifier extra-low tone bar', google translation) + - "˪": [t: "модификатор инь, выходящий по тональной марке"] # 0x2ea (en: 'modifier yin departing tone mark', google translation) + - "˫": [t: "модификатор ян уходящего тон"] # 0x2eb (en: 'modifier yang departing tone mark', google translation) + - "ˬ": [t: "модификатор голоса"] # 0x2ec (en: 'modifier voicing', google translation) + - "˭": [t: "модификатор бездиочный"] # 0x2ed (en: 'modifier unaspirated', google translation) + - "ˮ": [t: "модификатор двойной апостроф"] # 0x2ee (en: 'modifier double apostrophe', google translation) + - "˯": [t: "модификатор низкого вниз стрелы"] # 0x2ef (en: 'modifier low down arrowhead', google translation) + - "˰": [t: "модификатор низкий вверх стрел"] # 0x2f0 (en: 'modifier low up arrowhead', google translation) + - "˱": [t: "модификатор низкий левый стрелок"] # 0x2f1 (en: 'modifier low left arrowhead', google translation) + - "˲": [t: "модификатор низкого правого стрелка"] # 0x2f2 (en: 'modifier low right arrowhead', google translation) + - "˳": [t: "модификатор низкий кольцо"] # 0x2f3 (en: 'modifier low ring', google translation) + - "˴": [t: "модификатор среднего могилы"] # 0x2f4 (en: 'modifier middle grave accent', google translation) + - "˵": [t: "модификатор среднего двойного могилы"] # 0x2f5 (en: 'modifier middle double grave accent', google translation) + - "˶": [t: "модификатор среднего двойного острого акцента"] # 0x2f6 (en: 'modifier middle double acute accent', google translation) + - "˷": [t: "модификатор низкий тильде"] # 0x2f7 (en: 'modifier low tilde', google translation) + - "˸": [t: "модификатор поднял толстую кишку"] # 0x2f8 (en: 'modifier raised colon', google translation) + - "˹": [t: "модификатор начинается высокий тон"] # 0x2f9 (en: 'modifier begin high tone', google translation) + - "˺": [t: "модификатор заканчивает высокий тон"] # 0x2fa (en: 'modifier end high tone', google translation) + - "˻": [t: "модификатор начинается с низким тоном"] # 0x2fb (en: 'modifier begin low tone', google translation) + - "˼": [t: "модификатор заканчивается низким тоном"] # 0x2fc (en: 'modifier end low tone', google translation) + - "˽": [t: "модификатор полка"] # 0x2fd (en: 'modifier shelf', google translation) + - "˾": [t: "модификатор открытая полка"] # 0x2fe (en: 'modifier open shelf', google translation) + - "˿": [t: "модификатор низкий левый стрелка"] # 0x2ff (en: 'modifier low left arrow', google translation) + - "̀": [t: "могильный акцент украшения"] # 0x300 (en: 'grave accent embellishment', google translation) + - "́": [t: "острый акцентный украшение"] # 0x301 (en: 'acute accent embellishment', google translation) + - "̂": [t: "окружающий акцент украшения"] # 0x302 (en: 'circumflex accent embellishment', google translation) + - "̃": [t: "тильде украшает"] # 0x303 (en: 'tilde embellishment', google translation) + - "̄": [t: "макрон украшает"] # 0x304 (en: 'macron embellishment', google translation) + - "̅": [t: "вручительская варенья"] # 0x305 (en: 'overbar embellishment', google translation) + - "̆": [t: "бреве украшения"] # 0x306 (en: 'breve embellishment', google translation) + - "̇": [t: "точка над украшением"] # 0x307 (en: 'dot above embellishment', google translation) + - "̈": [t: "украшение диарезиса"] # 0x308 (en: 'diaeresis embellishment', google translation) + - "̉": [t: "крючок над украшением"] # 0x309 (en: 'hook above embellishment', google translation) + - "̊": [t: "кольцо над украшением"] # 0x30a (en: 'ring above embellishment', google translation) + - "̋": [t: "двойное острое акцентное украшение"] # 0x30b (en: 'double acute accent embellishment', google translation) + - "̌": [t: "проверять"] # 0x30c (en: 'check', google translation) + - "̍": [t: "вертикальная линия над украшением"] # 0x30d (en: 'vertical line above embellishment', google translation) + - "̎": [t: "двойная вертикальная линия над украшением"] # 0x30e (en: 'double vertical line above embellishment', google translation) + - "̏": [t: "двойной могильный акцент украшения"] # 0x30f (en: 'double grave accent embellishment', google translation) + - "̐": [t: "кендрабинду украшает"] # 0x310 (en: 'candrabindu embellishment', google translation) + - "̑": [t: "перевернутое украшение бреве"] # 0x311 (en: 'inverted breve embellishment', google translation) + - "̒": [t: "повернут запятую над украшением"] # 0x312 (en: 'turned comma above embellishment', google translation) + - "̓": [t: "запятая над украшением"] # 0x313 (en: 'comma above embellishment', google translation) + - "̔": [t: "обратная запятая над украшением"] # 0x314 (en: 'reversed comma above embellishment', google translation) + - "̕": [t: "запятая над правым украшением"] # 0x315 (en: 'comma above right embellishment', google translation) + - "̖": [t: "могильный акцент ниже украшения"] # 0x316 (en: 'grave accent below embellishment', google translation) + - "̗": [t: "острый акцент ниже украшения"] # 0x317 (en: 'acute accent below embellishment', google translation) + - "̘": [t: "левая привязка под украшением"] # 0x318 (en: 'left tack below embellishment', google translation) + - "̙": [t: "правая привязка под украшением"] # 0x319 (en: 'right tack below embellishment', google translation) + - "̚": [t: "левый угол над украшением"] # 0x31a (en: 'left angle above embellishment', google translation) + - "̛": [t: "рога в украшении"] # 0x31b (en: 'horn embellishment', google translation) + - "̜": [t: "полево половина кольца под украшением"] # 0x31c (en: 'left half ring below embellishment', google translation) + - "̝": [t: "вверх по приукрашиванию"] # 0x31d (en: 'up tack below embellishment', google translation) + - "̞": [t: "вниз по привязке"] # 0x31e (en: 'down tack below embellishment', google translation) + - "̟": [t: "плюс знак ниже украшения"] # 0x31f (en: 'plus sign below embellishment', google translation) + - "̠": [t: "знак минус ниже украшения"] # 0x320 (en: 'minus sign below embellishment', google translation) + - "̡": [t: "палатализированный крюк под украшением"] # 0x321 (en: 'palatalized hook below embellishment', google translation) + - "̢": [t: "ретрофлексный крюк под украшением"] # 0x322 (en: 'retroflex hook below embellishment', google translation) + - "̣": [t: "точка ниже украшения"] # 0x323 (en: 'dot below embellishment', google translation) + - "̤": [t: "диарезис ниже украшения"] # 0x324 (en: 'diaeresis below embellishment', google translation) + - "̥": [t: "кольцо ниже украшения"] # 0x325 (en: 'ring below embellishment', google translation) + - "̦": [t: "запятая ниже украшения"] # 0x326 (en: 'comma below embellishment', google translation) + - "̧": [t: "седия украшения"] # 0x327 (en: 'cedilla embellishment', google translation) + - "̨": [t: "огонек украшает"] # 0x328 (en: 'ogonek embellishment', google translation) + - "̩": [t: "вертикальная линия под украшением"] # 0x329 (en: 'vertical line below embellishment', google translation) + - "̪": [t: "мост ниже украшения"] # 0x32a (en: 'bridge below embellishment', google translation) + - "̫": [t: "перевернутая двойная арка ниже украшения"] # 0x32b (en: 'inverted double arch below embellishment', google translation) + - "̬": [t: "карон ниже украшения"] # 0x32c (en: 'caron below embellishment', google translation) + - "̭": [t: "окружающий акцент под украшением"] # 0x32d (en: 'circumflex accent below embellishment', google translation) + - "̮": [t: "бреве под украшением"] # 0x32e (en: 'breve below embellishment', google translation) + - "̯": [t: "перевернутый бреве под украшением"] # 0x32f (en: 'inverted breve below embellishment', google translation) + - "̰": [t: "тильда ниже украшения"] # 0x330 (en: 'tilde below embellishment', google translation) + - "̱": [t: "макрон ниже украшения"] # 0x331 (en: 'macron below embellishment', google translation) + - "̲": [t: "низкая линия украшения"] # 0x332 (en: 'low line embellishment', google translation) + - "̳": [t: "двойная низкая линейная украшения"] # 0x333 (en: 'double low line embellishment', google translation) + - "̴": [t: "тильде наложение украшений"] # 0x334 (en: 'tilde overlay embellishment', google translation) + - "̵": [t: "краткое инсультное наложение"] # 0x335 (en: 'short stroke overlay embellishment', google translation) + - "̶": [t: "длинное инсульт украшает"] # 0x336 (en: 'long stroke overlay embellishment', google translation) + - "̷": [t: "короткое наложение solidus"] # 0x337 (en: 'short solidus overlay embellishment', google translation) + - "̸": [t: "длинное наложение solidus"] # 0x338 (en: 'long solidus overlay embellishment', google translation) + - "̹": [t: "правое половина кольца под украшением"] # 0x339 (en: 'right half ring below embellishment', google translation) + - "̺": [t: "перевернутый мост под украшением"] # 0x33a (en: 'inverted bridge below embellishment', google translation) + - "̻": [t: "квадрат ниже украшения"] # 0x33b (en: 'square below embellishment', google translation) + - "̼": [t: "seagull ниже украшения"] # 0x33c (en: 'seagull below embellishment', google translation) + - "̽": [t: "x выше украшения"] # 0x33d (en: 'x above embellishment', google translation) + - "̾": [t: "вертикальное украшение тильды"] # 0x33e (en: 'vertical tilde embellishment', google translation) + - "̿": [t: "двойное оберное украшение"] # 0x33f (en: 'double overline embellishment', google translation) + - "̀": [t: "могильный тон марк украшения"] # 0x340 (en: 'grave tone mark embellishment', google translation) + - "́": [t: "острый тонус марк украшения"] # 0x341 (en: 'acute tone mark embellishment', google translation) + - "͆": [t: "мост выше"] # 0x346 (en: 'bridge above', google translation) + + - "ΪΫϏ": # 0x3aa, 0x3ab, 0x3cf + - test: + if: "$CapitalLetters_Beep" + then: + - audio: + value: "beep.mp4" + replace: [] + - test: + if: "$CapitalLetters_UseWord" + then_test: + if: "$SpeechOverrides_CapitalLetters = ''" + then_test: + if: "$Impairment = 'Blindness'" + then: [t: "пропусков"] # (en: 'cap', google translation) + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [spell: "translate('.', 'ΪΫϏ', 'ιυϗ')"] + - t: "с диалитикой" # (en: 'with dialytika', google translation) + - "ϊ": [t: "йота с диалитикой"] # 0x3ca (en: 'iota with dialytika') + - "ϋ": [t: "ипсилон с диалитикой"] # 0x3cb (en: 'upsilon with dialytika') + - "ό": [t: "омикрон с тоносом"] # 0x3cc (en: 'omicron with tonos') + - "ύ": [t: "ипсилон с тоносом"] # 0x3cd (en: 'upsilon with tonos') + - "ώ": [t: "омега с тоносом"] # 0x3ce (en: 'omega with tonos') + - "ϐ": [t: "бета"] # 0x3d0 (en: 'beta') + - "ϑ": [t: "тета"] # 0x3d1 (en: 'theta') + - "ϒ": [t: "ипсилон с крючком"] # 0x3d2 (en: 'upsilon with hook') + - "ϓ": [t: "ипсилон с акутом и крючком"] # 0x3d3 (en: 'upsilon with acute and hook') + - "ϔ": [t: "ипсилон с диэрезисом и крючком"] # 0x3d4 (en: 'upsilon with diaeresis and hook') + - "ϕ": [t: "фи"] # 0x3d5 (en: 'phi') + - "ϖ": [t: "пи"] # 0x3d6 (en: 'pi') + - "ϗ": [t: "кай"] # 0x3d7 (en: 'kai') + - "Ϙ": [t: "верхний архаичный коппа"] # 0x3d8 (en: 'cap archaic koppa', google translation) + - "ϙ": [t: "архаичная коппа"] # 0x3d9 (en: 'archaic koppa') + - "ϵ": [t: "полулунный эпсилон"] # 0x3f5 (en: 'epsilon') + - "϶": [t: "обратный полулунный эпсилон"] # 0x3f6 (en: 'reversed epsilon') + - "А-Я": # 0x410 - 0x42f + - test: + if: "$CapitalLetters_Beep" + then: + - audio: + value: "beep.mp4" + replace: [] + - test: + if: "$CapitalLetters_UseWord" + then_test: + if: "$SpeechOverrides_CapitalLetters = ''" + then_test: + if: "$Impairment = 'Blindness'" + then: [t: "пропусков"] # (en: 'cap', google translation) + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [spell: "translate('.', 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', 'абвгдежзийклмнопрстуфхцчшщъыьэюя')"] + - "а": [t: "а"] # 0x430 (en: 'a', google translation) + - "б": [t: "быть"] # 0x431 (en: 'be', google translation) + - "в": [t: "вежливый"] # 0x432 (en: 've', google translation) + - "г": [t: "ghe"] # 0x433 (google translation) + - "д": [t: "де"] # 0x434 (en: 'de', google translation) + - "е": [t: "те"] # 0x435 (en: 'ie', google translation) + - "ж": [t: "же"] # 0x436 (en: 'zhe', google translation) + - "з": [t: "ze"] # 0x437 (google translation) + - "и": [t: "и"] # 0x438 (en: 'i', google translation) + - "й": [t: "короткий я"] # 0x439 (en: 'short i', google translation) + - "к": [t: "категория"] # 0x43a (en: 'ka', google translation) + - "л": [t: "эль"] # 0x43b (en: 'el', google translation) + - "м": [t: "эм"] # 0x43c (en: 'em', google translation) + - "н": [t: "поступка"] # 0x43d (en: 'en', google translation) + - "о": [t: "о"] # 0x43e (en: 'o', google translation) + - "п": [t: "финиш"] # 0x43f (en: 'pe', google translation) + - "р": [t: "эр"] # 0x440 (en: 'er', google translation) + - "с": [t: "эс"] # 0x441 (en: 'es', google translation) + - "т": [t: "театр"] # 0x442 (en: 'te', google translation) + - "у": [t: "у"] # 0x443 (en: 'u', google translation) + - "ф": [t: "эф"] # 0x444 (en: 'ef', google translation) + - "х": [t: "ха"] # 0x445 (en: 'ha', google translation) + - "ц": [t: "нога"] # 0x446 (en: 'tse', google translation) + - "ч": [t: "костюм"] # 0x447 (en: 'che', google translation) + - "ш": [t: "ша"] # 0x448 (en: 'sha', google translation) + - "щ": [t: "шша"] # 0x449 (en: 'shcha', google translation) + - "ъ": [t: "жесткий знак"] # 0x44a (en: 'hard sign', google translation) + - "ы": [t: "еру"] # 0x44b (en: 'yeru', google translation) + - "ь": [t: "мягкий знак"] # 0x44c (en: 'soft sign', google translation) + - "э": [t: "э"] # 0x44d (en: 'e', google translation) + - "ю": [t: "ю"] # 0x44e (en: 'yu', google translation) + - "я": [t: "я"] # 0x44f (en: 'ya', google translation) + - "؆": [t: "арабский корень куба"] # 0x606 (en: 'Arabic-Indic cube root', google translation) + - "؇": [t: "арабский индикатор четвертый корень"] # 0x607 (en: 'Arabic-Indic fourth root', google translation) + - "؈": [t: "арабский рэй"] # 0x608 (en: 'Arabic ray', google translation) + - "‐": [t: "дефис"] # 0x2010 (en: 'hyphen', google translation) + - "‑": [t: "дефис"] # 0x2011 (en: 'hyphen', google translation) + - "‒": [t: "фигура dash"] # 0x2012 (en: 'figure dash', google translation) + - "–": [t: "en dash"] # 0x2013 (google translation) + - "—": [t: "em dash"] # 0x2014 (google translation) + - "―": [t: "горизонтальный батончик"] # 0x2015 (en: 'horizontal bar', google translation) + - "‖": [t: "двойная вертикальная линия"] # 0x2016 (en: 'double vertical line', google translation) + - "†": [t: "кинжал"] # 0x2020 (en: 'dagger', google translation) + - "‡": [t: "двойной кинжал"] # 0x2021 (en: 'double dagger', google translation) + + - " - ": [t: "‡"] # 0x2000 - 0x2007 (en: ' ', google translation) + + - "•": # 0x2022 + - test: + if: "@data-chem-formula-op" + then: [t: "точка"] # (en: 'dot', google translation) + else: [t: "пуля"] # (en: 'bullet', google translation) + + - "…": # 0x2026 + test: + if: + - "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_Ellipses = 'Auto' or" + # must be ClearSpeak and $ClearSpeak_Ellipses = 'AndSoOn' + # speak '…' as 'and so on...' unless expr starts with '…' + - "../*[1][.='…']" + then: [t: "точка точка дот"] # (en: 'dot dot dot', google translation) + else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' + if: "count(following-sibling::*) = 0" + then: [t: "и так далее"] # (en: 'and so on', google translation) + else: [t: "и так далее"] # (en: 'and so on up to', google translation) + + - "‰": [t: "за мил"] # 0x2030 (en: 'per mille', google translation) + - "‱": [t: "за десять тысяч"] # 0x2031 (en: 'per ten thousand', google translation) + - "′": [t: "штрих"] # 0x2032 (en: 'prime') + - "″": [t: "двойной штрих"] # 0x2033 (en: 'double prime') + - "‴": [t: "тройной штрих"] # 0x2034 (en: 'triple prime') + - "‵": [t: "обратный штрих"] # 0x2035 (en: 'reversed prime') + - "‶": [t: "обратный двойной штрих"] # 0x2036 (en: 'reversed double prime') + - "‷": [t: "обратный тройной простой"] # 0x2037 (en: 'reversed triple prime', google translation) + - "‸": [t: "в"] # 0x2038 (en: 'to the', google translation) + - "‹": [t: "одиночный левый угол угла цитата"] # 0x2039 (en: 'single left pointing angle quote mark', google translation) + - "›": [t: "одиночный правый угол цитата цитата"] # 0x203a (en: 'single right pointing angle quote mark', google translation) + - "‼": [t: "двойной фактор"] # 0x203c (en: 'double factorial', google translation) + - "⁄": [t: "разделен на"] # 0x2044 (en: 'divided by', google translation) + - "⁅": [t: "левый квадратный кронштейн с перо"] # 0x2045 (en: 'left square bracket with quill', google translation) + - "⁆": [t: "правый квадратный кронштейн с перо"] # 0x2046 (en: 'right square bracket with quill', google translation) + - "※": [t: "справочная марка"] # 0x203b (en: 'reference mark', google translation) + - "‿": [t: "под галстуком"] # 0x203F (en: 'under tie', google translation) + - "⁀": [t: "галстук"] # 0x2040 (en: 'tie', google translation) + - "⁎": [t: "низкий звездочка"] # 0x204e (en: 'low asterisk', google translation) + - "⁏": [t: "обратный полуколон"] # 0x204f (en: 'reversed semicolon', google translation) + - "⁐": [t: "закрыть"] # 0x2050 (en: 'close up', google translation) + - "⁑": [t: "две вертикальные звездочки"] # 0x2051 (en: 'two vertical asterisks', google translation) + - "⁒": [t: "коммерческий минус знак"] # 0x2052 (en: 'commercial minus sign', google translation) + - "⁗": [t: "четырехкратный prime"] # 0x2057 (en: 'quadruple prime', google translation) + - "⁠": [t: ""] # 0x2060 + - "⁰": [t: "к нулевой власти"] # 0x2070 (en: 'to the zeroth power', google translation) + - "ⁱ": [t: "к силе эйхт"] # 0x2071 (en: 'to the eihth power', google translation) + - "⁴": [t: "к четвертой силе"] # 0x2074 (en: 'to the fourth power', google translation) + - "⁵": [t: "к пятой силе"] # 0x2075 (en: 'to the fifth power', google translation) + - "⁶": [t: "к шестой силе"] # 0x2076 (en: 'to the sixth power', google translation) + - "⁷": [t: "к седьмой власти"] # 0x2077 (en: 'to the seventh power', google translation) + - "⁸": [t: "к ath power"] # 0x2078 (en: 'to the eighth power', google translation) + - "⁹": [t: "к девятой силе"] # 0x2079 (en: 'to the ninth power', google translation) + - "⁺": [t: "superscript plus sign"] # 0x207a (google translation) + - "⁻": [t: "superscript минус"] # 0x207b (en: 'superscript minus', google translation) + - "⁼": [t: "superscript equals sign"] # 0x207c (google translation) + - "⁽": [t: "superscript left sakesisetise"] # 0x207d (en: 'superscript left parenthesis', google translation) + - "⁾": [t: "право скобок"] # 0x207e (en: 'superscript right parenthesis', google translation) + - "ⁿ": [t: "к власти энн"] # 0x207f (en: 'to the ennth power', google translation) + - "₀": [t: "суб -ноль"] # 0x2080 (en: 'sub zero', google translation) + - "₁": [t: "подставка"] # 0x2081 (en: 'sub one', google translation) + - "₂": [t: "подставка два"] # 0x2082 (en: 'sub two', google translation) + - "₃": [t: "подставка три"] # 0x2083 (en: 'sub three', google translation) + - "₄": [t: "подставка четверка"] # 0x2084 (en: 'sub four', google translation) + - "₅": [t: "подставка пяти"] # 0x2085 (en: 'sub five', google translation) + - "₆": [t: "sub six"] # 0x2086 (google translation) + - "₇": [t: "sub seven"] # 0x2087 (google translation) + - "₈": [t: "саб"] # 0x2088 (en: 'sub eight', google translation) + - "₉": [t: "sub девять"] # 0x2089 (en: 'sub nine', google translation) + - "₊": [t: "подписк плюс знак"] # 0x208a (en: 'subscript plus sign', google translation) + - "₋": [t: "подписка минус знак"] # 0x208b (en: 'subscript minus sign', google translation) + - "₌": [t: "подписк равна значению"] # 0x208c (en: 'subscript equals sign', google translation) + - "₍": [t: "подписк остался в скобках"] # 0x208d (en: 'subscript left parenthesis', google translation) + - "₎": [t: "подписк право с клеса"] # 0x208e (en: 'subscript right parenthesis', google translation) + - "ₐ": [t: "подсуд а"] # 0x2090 (en: 'sub A', google translation) + - "ₑ": [t: "саб"] # 0x2091 (en: 'sub E', google translation) + - "ₒ": [t: "саб"] # 0x2092 (en: 'sub O', google translation) + - "ₓ": [t: "суб"] # 0x2093 (en: 'sub X', google translation) + - "ₕ": [t: "сабл"] # 0x2095 (en: 'sub H', google translation) + - "ₖ": [t: "суб"] # 0x2096 (en: 'sub K', google translation) + - "ₗ": [t: "сабл"] # 0x2097 (en: 'sub L', google translation) + - "ₘ": [t: "саб м"] # 0x2098 (en: 'sub M', google translation) + - "ₙ": [t: "суб"] # 0x2099 (en: 'sub N', google translation) + - "ₚ": [t: "суб -п"] # 0x209a (en: 'sub P', google translation) + - "ₛ": [t: "sub s"] # 0x209b (en: 'sub S', google translation) + - "ₜ": [t: "суб т"] # 0x209c (en: 'sub T', google translation) + - "₠": [t: "европейская текущая единица"] # 0x20a0 (en: 'european currenty units', google translation) + - "₡": [t: "колонс"] # 0x20a1 (en: 'colons', google translation) + - "₢": [t: "крузейро"] # 0x20a2 (en: 'cruzeiro', google translation) + - "₣": [t: "франк"] # 0x20a3 (en: 'franc', google translation) + - "₤": [t: "лира"] # 0x20a4 (en: 'lira', google translation) + - "₥": [t: "мельницы"] # 0x20a5 (en: 'mills', google translation) + - "₦": [t: "найра"] # 0x20a6 (en: 'naira', google translation) + - "₧": [t: "пезета"] # 0x20a7 (en: 'peseta', google translation) + - "₨": [t: "рупии"] # 0x20a8 (en: 'rupees', google translation) + - "₩": [t: "выиграл"] # 0x20a9 (en: 'won', google translation) + - "₪": [t: "новые шекели"] # 0x20aa (en: 'new sheqels', google translation) + - "₫": [t: "донг"] # 0x20ab (en: 'dong', google translation) + - "€": [t: "евро"] # 0x20ac (en: 'euros', google translation) + - "₭": [t: "кип"] # 0x20ad (en: 'kip', google translation) + - "₮": [t: "тугрик"] # 0x20ae (en: 'tugrik', google translation) + - "₯": [t: "драхма"] # 0x20af (en: 'drachma', google translation) + - "₰": [t: "немецкие копейки"] # 0x20b0 (en: 'german pennies', google translation) + - "₱": [t: "песо"] # 0x20b1 (en: 'pesos', google translation) + - "₲": [t: "гуаранис"] # 0x20b2 (en: 'guaranis', google translation) + - "₳": [t: "австралии"] # 0x20b3 (en: 'australs', google translation) + - "₴": [t: "гривния"] # 0x20b4 (en: 'hryvnias', google translation) + - "₵": [t: "седис"] # 0x20b5 (en: 'cedis', google translation) + - "₶": [t: "ливр турнуа"] # 0x20b6 (en: 'livre tournois', google translation) + - "₷": [t: "spesmilos"] # 0x20b7 (google translation) + - "₸": [t: "тенги"] # 0x20b8 (en: 'tenges', google translation) + - "₹": [t: "индийские рупии"] # 0x20b9 (en: 'indian rupees', google translation) + - "₺": [t: "турецкие лирас"] # 0x20ba (en: 'turkish liras', google translation) + - "⃐": [t: "левый гарпун над украшением"] # 0x20d0 (en: 'left harpoon above embellishment', google translation) + - "⃑": [t: "правый гарпун над украшением"] # 0x20d1 (en: 'right harpoon above embellishment', google translation) + - "⃒": [t: "длинная вертикальная линия наложения"] # 0x20d2 (en: 'long vertical line overlay embellishment', google translation) + - "⃓": [t: "короткая вертикальная линия наложения"] # 0x20d3 (en: 'short vertical line overlay embellishment', google translation) + - "⃔": [t: "стрелка против часовой стрелки над украшением"] # 0x20d4 (en: 'anticlockwise arrow above embellishment', google translation) + - "⃕": [t: "стрелка по часовой стрелке над украшением"] # 0x20d5 (en: 'clockwise arrow above embellishment', google translation) + - "⃖": [t: "левая стрелка над украшением"] # 0x20d6 (en: 'left arrow above embellishment', google translation) + - "⃗": [t: "правая стрелка над украшением"] # 0x20d7 (en: 'right arrow above embellishment', google translation) + - "⃘": [t: "кольцо наложения украшения"] # 0x20d8 (en: 'ring overlay embellishment', google translation) + - "⃙": [t: "по часовой стрелке приукрашивание"] # 0x20d9 (en: 'clockwise ring overlay embellishment', google translation) + - "⃚": [t: "окружающееся в борту с часовой стрельбой"] # 0x20da (en: 'anticlockwise ring overlay embellishment', google translation) + - "⃛": [t: "тройная точка"] # 0x20db (en: 'triple dot', google translation) + - "⃜": [t: "четырехкратная точка"] # 0x20dc (en: 'quadruple dot', google translation) + - "⃝": [t: "прилагая круговой украшение"] # 0x20dd (en: 'enclosing circle embellishment', google translation) + - "⃞": [t: "прилагая квадратные украшения"] # 0x20de (en: 'enclosing square embellishment', google translation) + - "⃟": [t: "прилагая алмазные украшения"] # 0x20df (en: 'enclosing diamond embellishment', google translation) + - "⃠": [t: "прилагая круговую обратную скользу"] # 0x20e0 (en: 'enclosing circle backslash embellishment', google translation) + - "⃡": [t: "стрелка влево справа над украшением"] # 0x20e1 (en: 'left right arrow above embellishment', google translation) + - "⃢": [t: "прилагая в кражу экрана"] # 0x20e2 (en: 'enclosing screen embellishment', google translation) + - "⃣": [t: "приложение украшения keyuppercase"] # 0x20e3 (en: 'enclosing keycap embellishment', google translation) + - "⃤": [t: "прилагаясь вверх, указывающее треугольное украшение"] # 0x20e4 (en: 'enclosing upward pointing triangle embellishment', google translation) + - "⃥": [t: "обратное наложение solidus"] # 0x20e5 (en: 'reverse solidus overlay embellishment', google translation) + - "⃦": [t: "двойное украшение инсульта"] # 0x20e6 (en: 'double verticle stroke embellishment', google translation) + - "⃧": [t: "аннуитетный символ украшения"] # 0x20e7 (en: 'annuity symbol embellishment', google translation) + - "⃨": [t: "тройной недостаточный родовой"] # 0x20e8 (en: 'triple underdot', google translation) + - "⃩": [t: "широкий мост над украшением"] # 0x20e9 (en: 'wide bridge above embellishment', google translation) + - "⃪": [t: "слева стрелка наложения"] # 0x20ea (en: 'leftwards arrow overlay embellishment', google translation) + - "⃫": [t: "длинное двойное наложение solidus"] # 0x20eb (en: 'long double solidus overlay embellishment', google translation) + - "⃬": [t: "прямо гарпун с барб вниз по украшению"] # 0x20ec (en: 'rightwards harpoon with barb downwards embellishment', google translation) + - "⃭": [t: "левый гарпун с барб вниз по украшению"] # 0x20ed (en: 'leftwards harpoon with barb downwards embellishment', google translation) + - "⃮": [t: "левая стрелка ниже украшения"] # 0x20ee (en: 'left arrow below embellishment', google translation) + - "⃯": [t: "правая стрелка ниже украшения"] # 0x20ef (en: 'right arrow below embellishment', google translation) + - "⃰": [t: "звездочка над украшением"] # 0x20f0 (en: 'asterisk above embellishment', google translation) + - "℄": [t: "символ центральной линии"] # 0x2104 (en: 'center line symbol', google translation) + - "℅": [t: "заботиться о"] # 0x2105 (en: 'care of', google translation) + - "℆": [t: "када уна"] # 0x2106 (en: 'cada una', google translation) + - "ℇ": [t: "постоянная эйлера"] # 0x2107 (en: 'euler's constant', google translation) + - "℈": [t: "смешивание"] # 0x2108 (en: 'scruples', google translation) + - "℉": [t: "степени фаренгейт"] # 0x2109 (en: 'degrees fahrenheit', google translation) + - "ℊ": [t: "сценарий g"] # 0x210a (en: 'script g', google translation) + - "ℌℑℨℭ": # 0x210c, 0x2111, 0x2128, 0x212d + - t: "фрактур" # (en: 'fraktur', google translation) + - spell: "translate('.', 'ℌℑℨℭ', 'HIZC')" + + - "ℍℙℾℿ": # 0x210d, 0x2119, 0x213e, 0x213f + - t: "двойной удар" # (en: 'double struck', google translation) + - spell: "translate('.', 'ℍℙℾℿ', 'HPΓΠ')" + + - "ℎ": [t: "планка постоянная"] # 0x210e (en: 'planck constant', google translation) + - "ℏ": [t: "h бар"] # 0x210f (en: 'h bar', google translation) + + - "ℐℒ℘ℬℰℱℳ": # 0x2110, 0x2112, 0x2118, 0x2130, 0x2131, 0x2133 + - t: "сценарий" # (en: 'script', google translation) + - spell: "translate('.', 'ℐℒ℘ℬℰℱℳ', 'ILPBEFM')" + + - "ℓ": [t: "скрипт л"] # 0x2113 (en: 'script l', google translation) + - "℔": [t: "фунт"] # 0x2114 (en: 'pounds', google translation) + - "№": [t: "число"] # 0x2116 (en: 'number', google translation) + - "℥": [t: "унции"] # 0x2125 (en: 'ounces', google translation) + - "Ω": [t: "ом"] # 0x2126 (en: 'ohms', google translation) + - "℧": [t: "mhos"] # 0x2127 (google translation) + - "℩": [t: "повернута йота"] # 0x2129 (en: 'turned iota', google translation) + - "K": [t: "кельвин"] # 0x212a (en: 'kelvin', google translation) + - "Å": [t: "ангстры"] # 0x212b (en: 'angstroms', google translation) + - "ℯ": [t: "сценарий e"] # 0x212f (en: 'script e', google translation) + + # coalesced some chars that use cap letters + - "Ⅎ℺⅁⅂⅃⅄": # 0x2132, 0x213a, 0x2141, 0x2142, 0x2143, 0x2144 + - test: + - if: "'.' = '℺'" + then: [t: "вращается"] # (en: 'rotated', google translation) + - else_if: "'.' = 'Ⅎ'" + then: [t: "перевернутый"] # (en: 'turned', google translation) + - else_if: "'.' = '⅃'" + then: [t: "обратный безэриф"] # (en: 'reversed sans-serif', google translation) + else: [t: "повернулся без зарисования"] # (en: 'turned sans-serif', google translation) + - spell: "translate('.', 'Ⅎ℺⅁⅂⅃⅄', 'FQGLLY')" + + - "ℴ": [t: "сценарий o"] # 0x2134 (en: 'script o', google translation) + - "ℵ": [t: "первый трансфинит кардинал"] # 0x2135 (en: 'first transfinite cardinal', google translation) + - "ℶ": [t: "второй трансфинит кардинал"] # 0x2136 (en: 'second transfinite cardinal', google translation) + - "ℷ": [t: "третий трансфинит кардинал"] # 0x2137 (en: 'third transfinite cardinal', google translation) + - "ℸ": [t: "четвертый трансфинит кардинал"] # 0x2138 (en: 'fourth transfinite cardinal', google translation) + - "ℼ": [t: "двойной удар пи"] # 0x213c (en: 'double struck pi', google translation) + - "ℽ": [t: "двойной удар гамма"] # 0x213d (en: 'double struck gamma', google translation) + - "⅀": [t: "двойное поражение n-ary summation"] # 0x2140 (en: 'double struck n-ary summation', google translation) + - "⅋": [t: "повернул амперс и"] # 0x214b (en: 'turned ampersand', google translation) + - "⅌": [t: "перемещение"] # 0x214c (en: 'per', google translation) + - "ⅎ": [t: "повернулся ф"] # 0x214e (en: 'turned F', google translation) + - "¼": [t: "одна четверть"] # 0x00bc (en: 'one quarter', google translation) + - "½": [t: "половина"] # 0x00bd (en: 'one half', google translation) + - "¾": [t: "три четверти"] # 0x00be (en: 'three quarters', google translation) + - "⅐": [t: "один седьмой"] # 0x2150 (en: 'one seventh', google translation) + - "⅑": [t: "один девятый"] # 0x2151 (en: 'one ninth', google translation) + - "⅒": [t: "одна десятая"] # 0x2152 (en: 'one tenth', google translation) + - "⅓": [t: "треть"] # 0x2153 (en: 'one third', google translation) + - "⅔": [t: "две трети"] # 0x2154 (en: 'two thirds', google translation) + - "⅕": [t: "один пятый"] # 0x2155 (en: 'one fifth', google translation) + - "⅖": [t: "два пятых"] # 0x2156 (en: 'two fifths', google translation) + - "⅗": [t: "три пятых"] # 0x2157 (en: 'three fifths', google translation) + - "⅘": [t: "четыре пятых"] # 0x2158 (en: 'four fifths', google translation) + - "⅙": [t: "один шестой"] # 0x2159 (en: 'one sixth', google translation) + - "⅚": [t: "пять шестых"] # 0x215a (en: 'five sixths', google translation) + - "⅛": [t: "один ат"] # 0x215b (en: 'one eighth', google translation) + - "⅜": [t: "три афи"] # 0x215c (en: 'three eighths', google translation) + - "⅝": [t: "пять ат"] # 0x215d (en: 'five eighths', google translation) + - "⅞": [t: "семь ат"] # 0x215e (en: 'seven eighths', google translation) + - "⅟": [t: "один"] # 0x215f (en: 'one over', google translation) + - "Ⅰ": [t: "Ⅰ"] # 0x2160 (en: 'I', google translation) + - "Ⅱ": [t: "я i"] # 0x2161 (en: 'I I', google translation) + - "Ⅲ": [t: "я я я"] # 0x2162 (en: 'I I I', google translation) + - "Ⅳ": [t: "я v"] # 0x2163 (en: 'I V', google translation) + - "Ⅴ": [t: "Ⅴ"] # 0x2164 (en: 'V', google translation) + - "Ⅵ": [t: "v i"] # 0x2165 (en: 'V I', google translation) + - "Ⅶ": [t: "v i i"] # 0x2166 (en: 'V I I', google translation) + - "Ⅷ": [t: "v i i i"] # 0x2167 (en: 'V I I I', google translation) + - "Ⅸ": [t: "я x"] # 0x2168 (en: 'I X', google translation) + - "Ⅹ": [t: "Ⅹ"] # 0x2169 (en: 'X', google translation) + - "Ⅺ": [t: "x i"] # 0x216a (en: 'X I', google translation) + - "Ⅻ": [t: "x i i"] # 0x216b (en: 'X I I', google translation) + - "Ⅼ": [t: "Ⅼ"] # 0x216c (en: 'L', google translation) + - "Ⅽ": [t: "Ⅽ"] # 0x216d (en: 'C', google translation) + - "Ⅾ": [t: "Ⅾ"] # 0x216e (en: 'D', google translation) + - "Ⅿ": [t: "Ⅿ"] # 0x216f (en: 'M', google translation) + - "ⅰ": [t: "ⅰ"] # 0x2170 (en: 'I', google translation) + - "ⅱ": [t: "я i"] # 0x2171 (en: 'I I', google translation) + - "ⅲ": [t: "я я я"] # 0x2172 (en: 'I I I', google translation) + - "ⅳ": [t: "я v"] # 0x2173 (en: 'I V', google translation) + - "ⅴ": [t: "ⅴ"] # 0x2174 (en: 'V', google translation) + - "ⅵ": [t: "v i"] # 0x2175 (en: 'V I', google translation) + - "ⅶ": [t: "v i i"] # 0x2176 (en: 'V I I', google translation) + - "ⅷ": [t: "v i i i"] # 0x2177 (en: 'V I I I', google translation) + - "ⅸ": [t: "я x"] # 0x2178 (en: 'I X', google translation) + - "ⅹ": [t: "ⅹ"] # 0x2179 (en: 'X', google translation) + - "ⅺ": [t: "x i"] # 0x217a (en: 'X I', google translation) + - "ⅻ": [t: "x i i"] # 0x217b (en: 'X I I', google translation) + - "ⅼ": [t: "ⅼ"] # 0x217c (en: 'L', google translation) + - "ⅽ": [t: "ⅽ"] # 0x217d (en: 'C', google translation) + - "ⅾ": [t: "ⅾ"] # 0x217e (en: 'D', google translation) + - "ⅿ": [t: "ⅿ"] # 0x217f (en: 'M', google translation) + - "↉": [t: "нулевые трети"] # 0x2189 (en: 'zero thirds', google translation) + - "←": [t: "стрелка влево"] # 0x2190 (en: 'leftwards arrow', google translation) + - "↑": [t: "вверх стрелой"] # 0x2191 (en: 'upwards arrow', google translation) + - "→": [t: "стрелка вправо"] # 0x2192 (en: 'rightwards arrow', google translation) + - "↓": [t: "вниз стрелы"] # 0x2193 (en: 'downwards arrow', google translation) + - "↔": [t: "левая стрелка справа"] # 0x2194 (en: 'left right arrow', google translation) + - "↕": [t: "вверх вниз стрел"] # 0x2195 (en: 'up down arrow', google translation) + - "↖": [t: "северо -западный стрелка"] # 0x2196 (en: 'north west arrow', google translation) + - "↗": # 0x2197 + - test: + if: "ancestor::*[2][self::m:limit]" + then: [t: "подходы снизу"] # (en: 'approaches from below', google translation) + else: [t: "северо -восточный стрела"] # (en: 'north east arrow', google translation) + + - "↘": # 0x2198 + - test: + if: "ancestor::*[2][self::m:limit]" + then: [t: "подходы сверху"] # (en: 'approaches from above', google translation) + else: [t: "юго -восточная стрела"] # (en: 'south east arrow', google translation) + + - "↙": [t: "юго -западный стрелка"] # 0x2199 (en: 'south west arrow', google translation) + - "↚": [t: "стрелка влево с ходом"] # 0x219a (en: 'leftwards arrow with stroke', google translation) + - "↛": [t: "стрелка вправо с ударом"] # 0x219b (en: 'rightwards arrow with stroke', google translation) + - "↜": [t: "левая волновая стрелка"] # 0x219c (en: 'leftwards wave arrow', google translation) + - "↝": [t: "правая волновая стрелка"] # 0x219d (en: 'rightwards wave arrow', google translation) + - "↞": [t: "слева две головы стрелы"] # 0x219e (en: 'leftwards two headed arrow', google translation) + - "↟": [t: "вверху две головные стрелы"] # 0x219f (en: 'upwards two headed arrow', google translation) + - "↠": [t: "права две головные стрелы"] # 0x21a0 (en: 'rightwards two headed arrow', google translation) + - "↡": [t: "вниз по двум головным стрелкам"] # 0x21a1 (en: 'downwards two headed arrow', google translation) + - "↢": [t: "стрелка влево с хвостом"] # 0x21a2 (en: 'leftwards arrow with tail', google translation) + - "↣": [t: "стрелка вправо с хвостом"] # 0x21a3 (en: 'rightwards arrow with tail', google translation) + - "↤": [t: "стрелка влево из бара"] # 0x21a4 (en: 'leftwards arrow from bar', google translation) + - "↥": [t: "стрелка вверх от бара"] # 0x21a5 (en: 'upwards arrow from bar', google translation) + - "↦": [t: "стрелка вправо из бара"] # 0x21a6 (en: 'rightwards arrow from bar', google translation) + - "↧": [t: "стрелка вниз от бара"] # 0x21a7 (en: 'downwards arrow from bar', google translation) + - "↨": [t: "вверх вниз стрел с базой"] # 0x21a8 (en: 'up down arrow with base', google translation) + - "↩": [t: "стрелка влево с крючком"] # 0x21a9 (en: 'leftwards arrow with hook', google translation) + - "↪": [t: "стрелка вправо с крючком"] # 0x21aa (en: 'rightwards arrow with hook', google translation) + - "↫": [t: "стрелка влево с петлей"] # 0x21ab (en: 'leftwards arrow with loop', google translation) + - "↬": [t: "стрелка вправо с петлей"] # 0x21ac (en: 'rightwards arrow with loop', google translation) + - "↭": [t: "левая стрелка правой волны"] # 0x21ad (en: 'left right wave arrow', google translation) + - "↮": [t: "левая стрелка вправо с ударом"] # 0x21ae (en: 'left right arrow with stroke', google translation) + - "↯": [t: "вниз zigzag arrow"] # 0x21af (en: 'downwards zigzag arrow', google translation) + - "↰": [t: "стрелка вверх с наконечником влево"] # 0x21b0 (en: 'upwards arrow with tip leftwards', google translation) + - "↱": [t: "стрелка вверх с наконечником вправо"] # 0x21b1 (en: 'upwards arrow with tip rightwards', google translation) + - "↲": [t: "стрелка вниз с наконечником слева"] # 0x21b2 (en: 'downwards arrow with tip leftwards', google translation) + - "↳": [t: "стрелка вниз с наконечником вправо"] # 0x21b3 (en: 'downwards arrow with tip rightwards', google translation) + - "↴": [t: "стрелка вправо с углом вниз"] # 0x21b4 (en: 'rightwards arrow with corner downwards', google translation) + - "↵": [t: "стрелка вниз с углом налево"] # 0x21b5 (en: 'downwards arrow with corner leftwards', google translation) + - "↶": [t: "стрелка в верхней части часовой стрелки"] # 0x21b6 (en: 'anticlockwise top semicircle arrow', google translation) + - "↷": [t: "верхняя стрелка по часовой стрелке"] # 0x21b7 (en: 'clockwise top semicircle arrow', google translation) + - "↸": [t: "северо -западный стрела до длинного бара"] # 0x21b8 (en: 'north west arrow to long bar', google translation) + - "↹": [t: "стрелка слева, чтобы пройти вправо, стрелу в бар"] # 0x21b9 (en: 'leftwards arrow to bar over rightwards arrow to bar', google translation) + - "↺": [t: "стрелка с открытым кругом"] # 0x21ba (en: 'anticlockwise open circle arrow', google translation) + - "↻": [t: "по часовой стрелке открытый круг стрелы"] # 0x21bb (en: 'clockwise open circle arrow', google translation) + - "↼": [t: "оставил гарпун вверх"] # 0x21bc (en: 'left harpoon up', google translation) + - "↽": [t: "оставил гарпун вниз"] # 0x21bd (en: 'left harpoon down', google translation) + - "↾": [t: "вверх по гарпуне правильно"] # 0x21be (en: 'up harpoon right', google translation) + - "↿": [t: "вверх по гарпуне ушел"] # 0x21bf (en: 'up harpoon left', google translation) + - "⇀": [t: "правый гарпун вверх"] # 0x21c0 (en: 'right harpoon up', google translation) + - "⇁": [t: "правый гарпун вниз"] # 0x21c1 (en: 'right harpoon down', google translation) + - "⇂": [t: "вниз по гарпуне справа"] # 0x21c2 (en: 'down harpoon right', google translation) + - "⇃": [t: "вниз по гарпуне ушел"] # 0x21c3 (en: 'down harpoon left', google translation) + - "⇄": [t: "стрелка вправо над стрелкой влево"] # 0x21c4 (en: 'rightwards arrow over leftwards arrow', google translation) + - "⇅": [t: "вверх стрелка слева от стрелы вниз"] # 0x21c5 (en: 'upwards arrow leftwards of downwards arrow', google translation) + - "⇆": [t: "стрелка слева направо"] # 0x21c6 (en: 'leftwards arrow over rightwards arrow', google translation) + - "⇇": [t: "левые парные стрелы"] # 0x21c7 (en: 'leftwards paired arrows', google translation) + - "⇈": [t: "вверх парные стрелы"] # 0x21c8 (en: 'upwards paired arrows', google translation) + - "⇉": [t: "правые парные стрелы"] # 0x21c9 (en: 'rightwards paired arrows', google translation) + - "⇊": [t: "вниз в парных стрелках"] # 0x21ca (en: 'downwards paired arrows', google translation) + - "⇋": [t: "левый гарпун над правым гарпуном"] # 0x21cb (en: 'left harpoon over right harpoon', google translation) + - "⇌": [t: "правый гарпун над левым гарпуном"] # 0x21cc (en: 'right harpoon over left harpoon', google translation) + - "⇍": [t: "слева двойная стрелка с ходом"] # 0x21cd (en: 'leftwards double arrow with stroke', google translation) + - "⇎": [t: "левая правая двойная стрелка с ходом"] # 0x21ce (en: 'left right double arrow with stroke', google translation) + - "⇏": [t: "права двойная стрелка с ходом"] # 0x21cf (en: 'rightwards double arrow with stroke', google translation) + - "⇐": [t: "левая двойная стрелка"] # 0x21d0 (en: 'leftwards double arrow', google translation) + - "⇑": [t: "вверх двойной стрелы"] # 0x21d1 (en: 'upwards double arrow', google translation) + - "⇒": [t: "права двойная стрелка"] # 0x21d2 (en: 'rightwards double arrow', google translation) + - "⇓": [t: "вниз двойной стрелы"] # 0x21d3 (en: 'downwards double arrow', google translation) + - "⇔": [t: "левая правая двойная стрелка"] # 0x21d4 (en: 'left right double arrow', google translation) + - "⇕": [t: "вниз по двойной стрелке"] # 0x21d5 (en: 'up down double arrow', google translation) + - "⇖": [t: "северо -западный двойной стрела"] # 0x21d6 (en: 'north west double arrow', google translation) + - "⇗": [t: "северо -восток двойной стрелы"] # 0x21d7 (en: 'north east double arrow', google translation) + - "⇘": [t: "юго -восточный двойной стрела"] # 0x21d8 (en: 'south east double arrow', google translation) + - "⇙": [t: "юго -западный двойной стрела"] # 0x21d9 (en: 'south west double arrow', google translation) + - "⇚": [t: "левая тройная стрелка"] # 0x21da (en: 'leftwards triple arrow', google translation) + - "⇛": [t: "прямо тройная стрелка"] # 0x21db (en: 'rightwards triple arrow', google translation) + - "⇜": [t: "слева стрелка"] # 0x21dc (en: 'leftwards squiggle arrow', google translation) + - "⇝": [t: "права средь стрелка"] # 0x21dd (en: 'rightwards squiggle arrow', google translation) + - "⇞": [t: "стрелка вверх с двойным ходом"] # 0x21de (en: 'upwards arrow with double stroke', google translation) + - "⇟": [t: "стрелка вниз с двойным ходом"] # 0x21df (en: 'downwards arrow with double stroke', google translation) + - "⇠": [t: "левая пунктирная стрела"] # 0x21e0 (en: 'leftwards dashed arrow', google translation) + - "⇡": [t: "вверх пунктирная стрелка"] # 0x21e1 (en: 'upwards dashed arrow', google translation) + - "⇢": [t: "прямо сразу же пунктирная стрелка"] # 0x21e2 (en: 'rightwards dashed arrow', google translation) + - "⇣": [t: "вниз потерпели стрелку"] # 0x21e3 (en: 'downwards dashed arrow', google translation) + - "⇤": [t: "стрелка слева до бара"] # 0x21e4 (en: 'leftwards arrow to bar', google translation) + - "⇥": [t: "право стрелы в бар"] # 0x21e5 (en: 'rightwards arrow to bar', google translation) + - "⇦": [t: "левая белая стрела"] # 0x21e6 (en: 'leftwards white arrow', google translation) + - "⇧": [t: "вверх белая стрела"] # 0x21e7 (en: 'upwards white arrow', google translation) + - "⇨": [t: "прямо белая стрелка"] # 0x21e8 (en: 'rightwards white arrow', google translation) + - "⇩": [t: "вниз белая стрелка"] # 0x21e9 (en: 'downwards white arrow', google translation) + - "⇪": [t: "вверх белая стрелка из бара"] # 0x21ea (en: 'upwards white arrow from bar', google translation) + - "⇫": [t: "вверх белая стрела на пьедестале"] # 0x21eb (en: 'upwards white arrow on pedestal', google translation) + - "⇬": [t: "вверх белая стрелка на пьедестале с горизонтальной баром"] # 0x21ec (en: 'upwards white arrow on pedestal with horizontal bar', google translation) + - "⇭": [t: "вверх белая стрелка на пьедестале с вертикальным баром"] # 0x21ed (en: 'upwards white arrow on pedestal with vertical bar', google translation) + - "⇮": [t: "вверх белая двойная стрелка"] # 0x21ee (en: 'upwards white double arrow', google translation) + - "⇯": [t: "вверх белая двойная стрелка на пьедестале"] # 0x21ef (en: 'upwards white double arrow on pedestal', google translation) + - "⇰": [t: "прямо белая стрелка от стены"] # 0x21f0 (en: 'rightwards white arrow from wall', google translation) + - "⇱": [t: "стрелка северо -запада в угол"] # 0x21f1 (en: 'north west arrow to corner', google translation) + - "⇲": [t: "юго -восточная стрела в угол"] # 0x21f2 (en: 'south east arrow to corner', google translation) + - "⇳": [t: "вниз по белой стрелке"] # 0x21f3 (en: 'up down white arrow', google translation) + - "⇴": [t: "стрелка правой с маленьким кругом"] # 0x21f4 (en: 'right arrow with small circle', google translation) + - "⇵": [t: "вниз стрелка слева от стрелы вверх"] # 0x21f5 (en: 'downwards arrow leftwards of upwards arrow', google translation) + - "⇶": [t: "три правых стрела"] # 0x21f6 (en: 'three rightwards arrows', google translation) + - "⇷": [t: "стрелка влево с вертикальным ходом"] # 0x21f7 (en: 'leftwards arrow with vertical stroke', google translation) + - "⇸": [t: "стрелка вправо с вертикальным ходом"] # 0x21f8 (en: 'rightwards arrow with vertical stroke', google translation) + - "⇹": [t: "стрелка влево справа с вертикальным ходом"] # 0x21f9 (en: 'left right arrow with vertical stroke', google translation) + - "⇺": [t: "стрелка влево с двойным вертикальным ходом"] # 0x21fa (en: 'leftwards arrow with double vertical stroke', google translation) + - "⇻": [t: "стрелка вправо с двойным вертикальным ходом"] # 0x21fb (en: 'rightwards arrow with double vertical stroke', google translation) + - "⇼": [t: "стрелка влево правой с двойным вертикальным ходом"] # 0x21fc (en: 'left right arrow with double vertical stroke', google translation) + - "⇽": [t: "слева открытая стрелка"] # 0x21fd (en: 'leftwards open headed arrow', google translation) + - "⇾": [t: "вправо открыто голова стрелы"] # 0x21fe (en: 'rightwards open headed arrow', google translation) + - "⇿": [t: "влево справа открытая стрелка"] # 0x21ff (en: 'left right open headed arrow', google translation) + - "∀": [t: "для всех"] # 0x2200 (en: 'for all') + - "∁": # 0x2201 + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # (en: 'the', google translation) + - t: "дополнение" # (en: 'complement of') + - "∂": # 0x2202 + - test: + if: "$Verbosity='Terse'" + then: [t: "частично"] # (en: 'partial', google translation) + else: [t: "частный дифференциал"] # (en: 'partial derivative') + - "∃": [t: "существует"] # 0x2203 (en: 'there exists') + - "∄": [t: "не существует"] # 0x2204 (en: 'there does not exist') + - "∅": [t: "пустое множество"] # 0x2205 (en: 'empty set') + - "∆": # 0x2206 + - test: + if: "following-sibling::*" + then_test: + if: "$Verbosity!='Terse'" + then: [t: "лахплахан"] # "LahPlahsian" sounds better than "laplacian" in speech engines tested (en: 'the LahPlahsian of', google translation) + else: [t: "инкремент"] # (en: 'LahPlahsian') + else: [t: "инкремент"] # (en: 'LahPlahsian') + + - "∇": [t: "набла"] # 0x2207 (en: 'nahblah') + - "∉": # 0x2209 + # rule is identical to 0x2208 + - test: + if: "$SpeechStyle != 'ClearSpeak'" + then: [t: "не элемент"] # (en: 'is not an element of', google translation) + # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option + else_test: + if: "../../self::m:set or ../../../self::m:set" # inside a set + then_test: + - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' + then: [t: "не в"] # (en: 'not in', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "не член"] # (en: 'not member of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "не элемент"] # (en: 'not element of', google translation) + - else: [t: "не принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to') + else_test: + - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "не является членом"] # (en: 'is not a member of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "не элемент"] # (en: 'is not an element of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'In' + then: [t: "не в"] # (en: 'is not in', google translation) + - else: [t: "не принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'does not belong to') + - "∊": # 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: "является"] # (en: 'is', google translation) + - t: "малое принадлежит" # (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: 'in', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "член"] # (en: 'member of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "элемент"] # (en: 'element of', google translation) + - else: [t: "малое принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to') + else_test: + - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "является членом"] # (en: 'is a member of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "элемент"] # (en: 'is an element of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'In' + then: [t: "находится в"] # (en: 'is in', google translation) + - else: [t: "малое принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to') + - "∋": [t: "содержит как член"] # 0x220b (en: 'contains the member') + - "∌": [t: "не содержит как член"] # 0x220c (en: 'does not contain the member') + - "∍": [t: "малое содержит как член"] # 0x220d (en: 'contains the member') + - "∎": [t: "конец доказательства"] # 0x220e (en: 'end of proof') + - "∏": [t: "эн-арное произведение"] # 0x220f (en: 'product') + - "∐": [t: "эн-арный сомножитель"] # 0x2210 (en: 'coproduct') + - "∑": [t: "эн-арная сумма"] # 0x2211 (en: 'sum') + - "−": [t: "минус"] # 0x2212 (en: 'minus') + - "∓": [t: "минус плюс"] # 0x2213 (en: 'minus or plus') + - "∔": [t: "плюс с точкой"] # 0x2214 (en: 'dot plus') + - "∕": [t: "знак деления"] # 0x2215 (en: 'divided by') + - "∖": [t: "разность множеств"] # 0x2216 (en: 'set minus') + - "∗": [t: "оператор звёздочка"] # 0x2217 (en: 'times') + - "∘": [t: "кольцо"] # 0x2218 (en: 'composed with') + - "∙": # 0x2219 + - test: + if: "@data-chem-formula-op" + then: [t: "точка"] # (en: 'dot', google translation) + else: [t: "буллит"] # (en: 'times') + + - "√": # 0x221a + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # (en: 'the', google translation) + - t: "квадратный корень" # (en: 'square root of') + - "∛": # 0x221b + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # (en: 'the', google translation) + - t: "кубический корень" # (en: 'cube root of') + - "∜": # 0x221c + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # (en: 'the', google translation) + - t: "корень четвёртой степени" # (en: 'fourth root of') + - "∝": # 0x221d + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "пропорционально" # (en: 'proportional to') + - "∞": [t: "бесконечность"] # 0x221e (en: 'infinity') + - "∟": [t: "правый угол"] # 0x221f (en: 'right angle') + - "∠": [t: "угол"] # 0x2220 (en: 'angle') + - "∡": [t: "измеримый угол"] # 0x2221 (en: 'measured angle') + - "∢": [t: "сферический угол"] # 0x2222 (en: 'spherical angle') + - "∣": [t: "делит"] # 0x2223 (en: 'divides') + - "∤": [t: "не делит"] # 0x2224 (en: 'does not divide') + - "∧": [t: "логическое и"] # 0x2227 (en: 'and') + - "∨": [t: "логическое или"] # 0x2228 (en: 'or') + - "∩": [t: "пересечение"] # 0x2229 (en: 'intersection') + - "∪": [t: "объединение"] # 0x222a (en: 'union') + - "∫": [t: "интеграл"] # 0x222b (en: 'integral') + - "∬": [t: "двойной интеграл"] # 0x222c (en: 'double integral') + - "∭": [t: "тройной интеграл"] # 0x222d (en: 'triple integral') + - "∮": [t: "интеграл по контуру"] # 0x222e (en: 'contour integral') + - "∯": [t: "поверхностный интеграл"] # 0x222f (en: 'surface integral') + - "∰": [t: "интеграл по объёму"] # 0x2230 (en: 'volume integral') + - "∱": [t: "круговой интеграл"] # 0x2231 (en: 'clockwise integral') + - "∲": [t: "круговой интеграл по контуру"] # 0x2232 (en: 'clockwise contour integral') + - "∳": [t: "антикруговой интеграл по контуру"] # 0x2233 (en: 'anticlockwise contour integral') + - "∴": [t: "следовательно"] # 0x2234 (en: 'therefore') + - "∵": [t: "поскольку"] # 0x2235 (en: 'because') + - "∶": # 0x2236 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "отношение" # (en: 'to') + - "∷": [t: "пропорция"] # 0x2237 (en: 'as') + - "∸": [t: "минус с точкой"] # 0x2238 (en: 'dot minus') + - "∹": [t: "превышает"] # 0x2239 (en: 'has excess compared to') + - "∺": # 0x223a + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "геометрическая пропорция" # (en: 'geometrically proportional to') + - "∻": # 0x223b + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "гомотетия" # (en: 'homothetic to') + - "∼": [t: "тильда"] # 0x223c (en: 'varies with') + - "∽": [t: "обратная тильда"] # 0x223d (en: 'reversed tilde') + - "∾": # 0x223e + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "перевёрнутая плавная s" # (en: 'most positive') + - "∿": [t: "синусоидальная волна"] # 0x223f (en: 'sine wave') + - "≀": [t: "скрученное произведение"] # 0x2240 (en: 'wreath product') + - "≁": [t: "не эквивалентно"] # 0x2241 (en: 'not tilde') + - "≂": [t: "тильда с минусом"] # 0x2242 (en: 'minus tilde') + - "≃": # 0x2243 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "асимптотически равно" # (en: 'asymptotically equal to') + - "≄": # 0x2244 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "не равно асимптотически" # (en: 'not asymptotically equal to') + - "≅": # 0x2245 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "конгруэнтность" # (en: 'congruent to') + - "≆": # 0x2246 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "приблизительно но не точно равно" # (en: 'approximately but not actually equal to') + - "≇": # 0x2247 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "не равно приблизительно или точно" # (en: 'not congruent to') + - "≈": # 0x2248 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "приблизительно равно" # (en: 'approximately equal to') + - "≉": # 0x2249 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "не приблизительно равно" # (en: 'not approximately equal to') + - "≊": # 0x224a + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "приблизительно равно или равно" # (en: 'approximately equal or equal to') + - "≋": [t: "тройная тильда"] # 0x224b (en: 'triple tilde') + - "≌": [t: "все равно"] # 0x224c (en: 'are all equal to') + - "≍": # 0x224d + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "Эквивалентно" # (en: 'equivalent to') + - "≎": # 0x224e + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "Геометрически эквивалентно" # (en: 'geometrically equivalent to') + - "≏": # 0x224f + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # (en: 'the', google translation) + - t: "разность между" # (en: 'difference between') + - "≐": [t: "стремится к пределу"] # 0x2250 (en: 'approaches the limit') + - "≑": # 0x2251 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "геометрически равно" # (en: 'geometrically equal to') + - "≒": # 0x2252 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "приблизительно равно или есть образ" # (en: 'approximately equal to or the image of') + - "≓": # 0x2253 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is the', google translation) + - t: "есть образ или приблизительно равно" # (en: 'image of or approximately equal to') + - "≔": [t: "равно с двоеточием"] # 0x2254 (en: 'colon equals') + - "≕": [t: "равно с двоеточием"] # 0x2255 (en: 'equals colon') + - "≖": [t: "равно с кругом"] # 0x2256 (en: 'ring in equal to') + - "≗": # 0x2257 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "равно с кругом" # (en: 'approximately equal to') + - "≘": [t: "соответствует"] # 0x2258 (en: 'corresponds to') + - "≙": [t: "охватывает"] # 0x2259 (en: 'estimates') + - "≚": # 0x225a + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "изогонально равно" # (en: 'equiangular to') + - "≛": [t: "равно со звёздочкой"] # 0x225b (en: 'star equals') + - "≜": [t: "равно с дельтой"] # 0x225c (en: 'delta equals') + - "≝": [t: "равно по определению"] # 0x225d (en: 'is defined to be') + - "≞": # 0x225e + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "измеряется" # (en: 'measured by') + - "≟": [t: "равно с вопросительным знаком"] # 0x225f (en: 'has an unknown relationship with') + - "≠": # 0x2260 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "не равно" # (en: 'not equal to') + - "≡": # 0x2261 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "тождественно равно" # (en: 'identical to') + - "≢": # 0x2262 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "не равно тождественно" # (en: 'not identical to') + - "≣": # 0x2263 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "строго эквивалентно" # (en: 'strictly equivalent to') + - "≦": [t: "меньше над равно"] # 0x2266 (en: 'less than over equal to') + - "≧": [t: "больше над равно"] # 0x2267 (en: 'greater than over equal to') + - "≨": # 0x2268 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "меньше но не равно" # (en: 'less than but not equal to') + - "≩": # 0x2269 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "больше но не равно" # (en: 'greater than but not equal to') + - "≪": # 0x226a + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "много меньше" # (en: 'much less than') + - "≫": # 0x226b + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "много больше" # (en: 'much greater than') + - "≬": # 0x226c + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "между" # (en: 'between') + - "≭": # 0x226d + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "не эквивалентно" # (en: 'not equivalent to') + - "≮": # 0x226e + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "не меньше" # (en: 'not less than') + - "≯": # 0x226f + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "не больше" # (en: 'not greater than') + - "≰": # 0x2270 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "ни меньше ни равно" # (en: 'neither less than nor equal to') + - "≱": # 0x2271 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "ни больше ни равно" # (en: 'neither greater than nor equal to') + - "≲": # 0x2272 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "меньше или эквивалентно" # (en: 'less than or equivalent to') + - "≳": # 0x2273 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "больше или эквивалентно" # (en: 'greater than or equivalent to') + - "≴": # 0x2274 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "ни меньше ни эквивалентно" # (en: 'neither less than nor equivalent to') + - "≵": # 0x2275 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "ни больше ни эквивалентно" # (en: 'neither greater than nor equivalent to') + - "≶": # 0x2276 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "меньше или больше" # (en: 'less than or greater than') + - "≷": # 0x2277 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "больше или меньше" # (en: 'greater than or less than') + - "≸": # 0x2278 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "ни меньше ни больше" # (en: 'neither less than nor greater than') + - "≹": # 0x2279 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "ни больше ни меньше" # (en: 'neither greater than nor less than') + - "≺": [t: "предшествует"] # 0x227a (en: 'precedes') + - "≻": [t: "следует за"] # 0x227b (en: 'succeeds') + - "≼": [t: "предшествует или равно"] # 0x227c (en: 'precedes or is equal to') + - "≽": [t: "следует за или равно"] # 0x227d (en: 'succeeds or is equal to') + - "≾": [t: "предшествует или эквивалентно"] # 0x227e (en: 'precedes or is equivalent to') + - "≿": [t: "следует за или эквивалентно"] # 0x227f (en: 'succeeds or is equivalent to') + - "⊀": [t: "не предшествует"] # 0x2280 (en: 'does not precede') + - "⊁": [t: "не следует за"] # 0x2281 (en: 'does not succeed') + - "⊂": # 0x2282 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является а"] # (en: 'is a', google translation) + - t: "подмножество" # (en: 'subset of') + - "⊃": # 0x2283 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является а"] # (en: 'is a', google translation) + - t: "надмножество" # (en: 'superset of') + - "⊄": # 0x2284 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "не подмножество" # (en: 'not a subset of') + - "⊅": # 0x2285 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "не надмножество" # (en: 'not a superset of') + - "⊆": # 0x2286 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является а"] # (en: 'is a', google translation) + - t: "подмножество или равно" # (en: 'subset of or equal to') + - "⊇": # 0x2287 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является а"] # (en: 'is a', google translation) + - t: "надмножество или равно" # (en: 'superset of or equal to') + - "⊈": # 0x2288 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "ни подмножество ни равно" # (en: 'neither a subset of nor equal to') + - "⊉": # 0x2289 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "ни надмножество ни равно" # (en: 'neither a superset of nor equal to') + - "⊊": [t: "подмножество но не равно"] # 0x228a (en: 'subset of with not equal to') + - "⊋": [t: "надмножество но не равно"] # 0x228b (en: 'superset of with not equal to') + - "⊌": [t: "мультимножество"] # 0x228c (en: 'multiset') + - "⊍": [t: "умножение мультимножеств"] # 0x228d (en: 'multiset multiplication') + - "⊎": [t: "объединение мультимножеств"] # 0x228e (en: 'multiset union') + - "⊏": [t: "образ в квадрате"] # 0x228f (en: 'square image of') + - "⊐": [t: "прообраз в квадрате"] # 0x2290 (en: 'square original of') + - "⊑": [t: "образ в квадрате или равно"] # 0x2291 (en: 'square image of or equal to') + - "⊒": [t: "прообраз в квадрате или равно"] # 0x2292 (en: 'square original of or equal to') + - "⊓": [t: "пересечение в квадрате"] # 0x2293 (en: 'square cap') + - "⊔": [t: "объединение в квадрате"] # 0x2294 (en: 'square cup') + - "⊕": [t: "плюс в круге"] # 0x2295 (en: 'circled plus') + - "⊖": [t: "минус в круге"] # 0x2296 (en: 'circled minus') + - "⊗": [t: "произведение в круге"] # 0x2297 (en: 'circled times') + - "⊘": [t: "дробная черта в круге"] # 0x2298 (en: 'circled slash') + - "⊙": [t: "точка в круге"] # 0x2299 (en: 'circled dot operator') + - "⊚": [t: "кольцо в круге"] # 0x229a (en: 'circled ring') + - "⊛": [t: "звёздочка в круге"] # 0x229b (en: 'circled asterisk') + - "⊜": [t: "равно в круге"] # 0x229c (en: 'circled equals') + - "⊝": [t: "дефис в круге"] # 0x229d (en: 'circled dash') + - "⊞": [t: "плюс в квадрате"] # 0x229e (en: 'squared plus') + - "⊟": [t: "минус в квадрате"] # 0x229f (en: 'squared minus') + - "⊠": [t: "произведение в квадрате"] # 0x22a0 (en: 'squared times') + - "⊡": [t: "точка в квадрате"] # 0x22a1 (en: 'squared dot operator') + - "⊢": [t: "шеврон вправо"] # 0x22a2 (en: 'proves') + - "⊣": [t: "шеврон влево"] # 0x22a3 (en: 'does not yield') + - "⊤": [t: "шеврон вниз"] # 0x22a4 (en: 'top') + - "⊥": # 0x22a5 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "перпендикулярно" # (en: 'bottom') + - "⊦": [t: "высказывание"] # 0x22a6 (en: 'reduces to') + - "⊧": [t: "модулирует"] # 0x22a7 (en: 'models') + - "⊨": # 0x22a8 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "истина" # (en: 'true') + - "⊩": [t: "влечёт"] # 0x22a9 (en: 'forces') + - "⊪": [t: "тройная вертикальная черта с перекладиной справа"] # 0x22aa (en: 'triple vertical bar right turnstile') + - "⊫": [t: "двойная вертикальная черта с двойной перекладиной справа"] # 0x22ab (en: 'double vertical bar double right turnstile') + - "⊬": [t: "не доказано"] # 0x22ac (en: 'does not prove') + - "⊭": # 0x22ad + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "не истина" # (en: 'not true') + - "⊮": [t: "не влечёт"] # 0x22ae (en: 'does not force') + - "⊯": [t: "двойная вертикальная черта с двойной перекладиной справа с отрицанием"] # 0x22af (en: 'negated double vertical bar double right turnstile') + - "⊰": [t: "предшествует относительно"] # 0x22b0 (en: 'precedes under relation') + - "⊱": [t: "следует за относительно"] # 0x22b1 (en: 'succeeds under relation') + - "⊲": # 0x22b2 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "нормальная подгруппа" # (en: 'a normal subgroup of') + - "⊳": [t: "содержит как нормальную подгруппу"] # 0x22b3 (en: 'contains as a normal subgroup') + - "⊴": # 0x22b4 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "нормальная подгруппа или равно" # (en: 'a normal subgroup of or equal to') + - "⊵": [t: "содержит как нормальную подгруппу или равно"] # 0x22b5 (en: 'contains as a normal subgroup or equal to') + - "⊶": # 0x22b6 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "прообраз" # (en: 'the original of') + - "⊷": # 0x22b7 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "образ" # (en: 'an image of') + - "⊸": [t: "многозначное отображение"] # 0x22b8 (en: 'multimap') + - "⊹": [t: "Эрмитово сопряжение матрицы"] # 0x22b9 (en: 'hermitian conjugate matrix') + - "⊺": [t: "включение"] # 0x22ba (en: 'intercalate') + - "⊻": [t: "исключающее или"] # 0x22bb (en: 'xor') + - "⊼": [t: "и с отрицанием"] # 0x22bc (en: 'nand') + - "⊽": [t: "или с отрицанием"] # 0x22bd (en: 'nor') + - "⊾": [t: "правый угол с дугой"] # 0x22be (en: 'right angle with arc') + - "⊿": [t: "треугольник вершиной вправо"] # 0x22bf (en: 'right triangle') + - "⋀": [t: "эн-арное логическое и"] # 0x22c0 (en: 'logical and') + - "⋁": [t: "эн-арное логическое или"] # 0x22c1 (en: 'logical or') + - "⋂": [t: "эн-арное пересечение"] # 0x22c2 (en: 'intersection') + - "⋃": [t: "эн-арное объединение"] # 0x22c3 (en: 'union') + - "⋄": [t: "ромб"] # 0x22c4 (en: 'diamond operator') + - "⋅": # 0x22c5 + - test: + if: "@data-chem-formula-op" + then: [t: "точка"] # (en: 'dot', google translation) + else: [t: "оператор точка"] # (en: 'times') + + - "⋆": [t: "оператор звёздочка"] # 0x22c6 (en: 'times') + - "⋇": [t: "кратность деления"] # 0x22c7 (en: 'division times') + - "⋈": [t: "бабочка"] # 0x22c8 (en: 'bowtie') + - "⋉": # 0x22c9 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "полупрямое произведение с нормальным фактором слева" # (en: 'the left normal factor semidirect product of') + - "⋊": # 0x22ca + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "полупрямое произведение с нормальным фактором справа" # (en: 'the right normal factor semidirect product of') + - "⋋": # 0x22cb + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "левое полупрямое произведение" # (en: 'the left semidirect product of') + - "⋌": # 0x22cc + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "правое полупрямое произведение" # (en: 'the right semidirect product of') + - "⋍": [t: "обратное волнистое равно"] # 0x22cd (en: 'reversed tilde equals') + - "⋎": [t: "волнистое логическое или"] # 0x22ce (en: 'curly logical or') + - "⋏": [t: "волнистое логическое и"] # 0x22cf (en: 'curly logical and') + - "⋐": # 0x22d0 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "двойное подмножество" # (en: 'a double subset of') + - "⋑": # 0x22d1 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "двойное надмножество" # (en: 'a double superset of') + - "⋒": # 0x22d2 + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # (en: 'the', google translation) + - t: "двойное пересечение" # (en: 'double intersection of') + - "⋓": # 0x22d3 + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # (en: 'the', google translation) + - t: "двойное объединение" # (en: 'double union of') + - "⋔": # 0x22d4 + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # (en: 'the', google translation) + - t: "вилка" # (en: 'proper intersection of') + - "⋕": # 0x22d5 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "равно и параллельно" # (en: 'equal to and parallel to') + - "⋖": [t: "меньше с точкой"] # 0x22d6 (en: 'less than with dot') + - "⋗": [t: "больше с точкой"] # 0x22d7 (en: 'greater than with dot') + - "⋘": # 0x22d8 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "очень много меньше" # (en: 'very much less than') + - "⋙": # 0x22d9 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "очень много больше" # (en: 'very much greater than') + - "⋚": # 0x22da + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "меньше равно или больше" # (en: 'less than equal to or greater than') + - "⋛": # 0x22db + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "больше равно или меньше" # (en: 'greater than equal to or less than') + - "⋜": # 0x22dc + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "равно или меньше" # (en: 'equal to or less than') + - "⋝": # 0x22dd + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "равно или больше" # (en: 'equal to or greater than') + - "⋞": # 0x22de + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "равно или предшествует" # (en: 'equal to or precedes') + - "⋟": # 0x22df + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "равно или следует за" # (en: 'equal to or succeeds') + - "⋠": [t: "не предшествует или равно"] # 0x22e0 (en: 'does not precede nor is equal to') + - "⋡": [t: "не следует за или равно"] # 0x22e1 (en: 'does not succeed nor is equal to') + - "⋢": [t: "не образ в квадрате или равно"] # 0x22e2 (en: 'not square image of or equal to') + - "⋣": [t: "не прообраз в квадрате или равно"] # 0x22e3 (en: 'not square original of or equal to') + - "⋤": [t: "образ в квадрате или не равно"] # 0x22e4 (en: 'square image of or not equal to') + - "⋥": [t: "прообраз в квадрате или не равно"] # 0x22e5 (en: 'square original of or not equal to') + - "⋦": # 0x22e6 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "меньше но не эквивалентно" # (en: 'less than but not equivalent to') + - "⋧": # 0x22e7 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "больше но не эквивалентно" # (en: 'greater than but not equivalent to') + - "⋨": [t: "предшествует но не эквивалентно"] # 0x22e8 (en: 'precedes but is not equivalent to') + - "⋩": [t: "следует за но не эквивалентно"] # 0x22e9 (en: 'succeeds but is not equivalent to') + - "⋪": # 0x22ea + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "не содержится как нормальная подгруппа" # (en: 'not a normal subgroup of') + - "⋫": [t: "не содержит как нормальную подгруппу"] # 0x22eb (en: 'does not contain as a normal subgroup') + - "⋬": # 0x22ec + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "не содержится как нормальная подгруппа или равно" # (en: 'not a normal subgroup of nor is equal to') + - "⋭": [t: "не содержит как нормальную подгруппу или равно"] # 0x22ed (en: 'does not contain as a normal subgroup nor is equal to') + - "⋮": [t: "вертикальное многоточие"] # 0x22ee (en: 'vertical ellipsis') + - "⋯": [t: "внутристрочное горизонтальное многоточие"] # 0x22ef (en: 'dot dot dot') + - "⋰": [t: "диагональное многоточие сверху вправо"] # 0x22f0 (en: 'upwards diagonal ellipsis') + - "⋱": [t: "диагональное многоточие снизу вправо"] # 0x22f1 (en: 'diagonal ellipsis') + - "⋲": [t: "принадлежит с длинным горизонтальным штрихом"] # 0x22f2 (en: 'element of with long horizontal stroke') + - "⋳": [t: "принадлежит с вертикальной чертой в конце горизонтального штриха"] # 0x22f3 (en: 'element of with vertical bar at end of horizontal stroke') + - "⋴": [t: "малое принадлежит с вертикальной чертой в конце горизонтального штриха"] # 0x22f4 (en: 'element of with vertical bar at end of horizontal stroke') + - "⋵": [t: "принадлежит с точкой сверху"] # 0x22f5 (en: 'element of with dot above') + - "⋶": [t: "принадлежит с чертой сверху"] # 0x22f6 (en: 'element of with overbar') + - "⋷": [t: "малое принадлежит с чертой сверху"] # 0x22f7 (en: 'element of with overbar') + - "⋸": [t: "принадлежит с чертой снизу"] # 0x22f8 (en: 'element of with underbar') + - "⋹": [t: "принадлежит с двумя горизонтальными штрихами"] # 0x22f9 (en: 'element of with two horizontal strokes') + - "⋺": [t: "содержит с длинным горизонтальным штрихом"] # 0x22fa (en: 'contains with long horizontal stroke') + - "⋻": [t: "содержит с вертикальной чертой в конце горизонтального штриха"] # 0x22fb (en: 'contains with vertical bar at end of horizontal stroke') + - "⋼": [t: "малое содержит с вертикальной чертой в конце горизонтального штриха"] # 0x22fc (en: 'contains with vertical bar at end of horizontal stroke') + - "⋽": [t: "содержит с чертой сверху"] # 0x22fd (en: 'contains with overbar') + - "⋾": [t: "малое содержит с чертой сверху"] # 0x22fe (en: 'contains with overbar') + - "⋿": [t: "знак принадлежности z-нотации"] # 0x22ff (en: 'z notation bag membership') + - "⌀": [t: "диаметр"] # 0x2300 (en: 'diameter', google translation) + - "⌁": [t: "электрическая стрелка"] # 0x2301 (en: 'electric arrow', google translation) + - "⌂": [t: "дом"] # 0x2302 (en: 'house', google translation) + - "⌃": [t: "вверх стрел"] # 0x2303 (en: 'up arrowhead', google translation) + - "⌄": [t: "вниз стрелка"] # 0x2304 (en: 'down arrowhead', google translation) + - "⌅": [t: "проектив"] # 0x2305 (en: 'projective', google translation) + - "⌆": [t: "перспектива"] # 0x2306 (en: 'perspective', google translation) + - "⌇": [t: "волнистая линия"] # 0x2307 (en: 'wavy line', google translation) + - "⌈": [t: "левый потолок"] # 0x2308 (en: 'left ceiling', google translation) + - "⌉": [t: "правый потолок"] # 0x2309 (en: 'right ceiling', google translation) + - "⌊": [t: "левый пол"] # 0x230a (en: 'left floor', google translation) + - "⌋": [t: "правый этаж"] # 0x230b (en: 'right floor', google translation) + - "⌌": [t: "нижний правый урожай"] # 0x230c (en: 'bottom right crop', google translation) + - "⌍": [t: "внизу левый урожай"] # 0x230d (en: 'bottom left crop', google translation) + - "⌎": [t: "верхний правый урожай"] # 0x230e (en: 'top right crop', google translation) + - "⌏": [t: "верхний левый урожай"] # 0x230f (en: 'top left crop', google translation) + - "⌐": [t: "перевернулся, а не знак"] # 0x2310 (en: 'reversed not sign', google translation) + - "⌑": [t: "квадратный лозонь"] # 0x2311 (en: 'square lozenge', google translation) + - "⌒": [t: "дуговой"] # 0x2312 (en: 'arc', google translation) + - "⌓": [t: "сегмент"] # 0x2313 (en: 'segment', google translation) + - "⌔": [t: "сектор"] # 0x2314 (en: 'sector', google translation) + - "⌕": [t: "телефон рекордер"] # 0x2315 (en: 'telephone recorder', google translation) + - "⌖": [t: "индикатор положения перекрестие"] # 0x2316 (en: 'position indicator crosshairs', google translation) + - "⌗": [t: "viewdata square"] # 0x2317 (google translation) + - "⌘": [t: "знак интереса"] # 0x2318 (en: 'place of interest sign', google translation) + - "⌙": [t: "не повернул знак"] # 0x2319 (en: 'turned not sign', google translation) + - "⌚": [t: "смотреть"] # 0x231a (en: 'watch', google translation) + - "⌛": [t: "песочные часы"] # 0x231b (en: 'hourglass', google translation) + - "⌜": [t: "верхний левый угол"] # 0x231c (en: 'top left corner', google translation) + - "⌝": [t: "верхний правый угол"] # 0x231d (en: 'top right corner', google translation) + - "⌞": [t: "нижний левый угол"] # 0x231e (en: 'bottom left corner', google translation) + - "⌟": [t: "нижний правый угол"] # 0x231f (en: 'bottom right corner', google translation) + - "⌠": [t: "верхняя половина интеграла"] # 0x2320 (en: 'top half integral', google translation) + - "⌡": [t: "интеграл нижней половины"] # 0x2321 (en: 'bottom half integral', google translation) + - "⌢": [t: "хмуриться"] # 0x2322 (en: 'frown', google translation) + - "⌣": [t: "улыбка"] # 0x2323 (en: 'smile', google translation) + - "⌤": [t: "вверх стрелка между двумя горизонтальными стержнями"] # 0x2324 (en: 'up arrowhead between two horizontal bars', google translation) + - "⌥": [t: "вариант ключа"] # 0x2325 (en: 'option key', google translation) + - "⌦": [t: "стереть вправо"] # 0x2326 (en: 'erase to the right', google translation) + - "⌧": [t: "x в прямоугольной коробке"] # 0x2327 (en: 'x in a rectangle box', google translation) + - "⌨": [t: "клавиатура"] # 0x2328 (en: 'keyboard', google translation) + - "〈": [t: "левый угловой кронштейн"] # 0x2329 (en: 'left pointing angle bracket', google translation) + - "〉": [t: "кронштейн с углом правого направления"] # 0x232a (en: 'right pointing angle bracket', google translation) + - "⌫": [t: "стереть слева"] # 0x232b (en: 'erase to the left', google translation) + - "⌬": [t: "бензол кольцо"] # 0x232c (en: 'benzene ring', google translation) + - "⌭": [t: "цилиндричность"] # 0x232d (en: 'cylindricity', google translation) + - "⌮": [t: "все вокруг профиля"] # 0x232e (en: 'all around profile', google translation) + - "⌯": [t: "симметрия"] # 0x232f (en: 'symmetry', google translation) + - "⌰": [t: "полное выпуск"] # 0x2330 (en: 'total runout', google translation) + - "⌱": [t: "измерение происхождение"] # 0x2331 (en: 'dimension origin', google translation) + - "⌲": [t: "конический конус"] # 0x2332 (en: 'conical taper', google translation) + - "⌳": [t: "склон"] # 0x2333 (en: 'slope', google translation) + - "⌴": [t: "countbore"] # 0x2334 (en: 'counterbore', google translation) + - "⌵": [t: "countersink"] # 0x2335 (google translation) + - "⌶": [t: "apl i beam"] # 0x2336 (google translation) + - "⌽": [t: "apl circle stile"] # 0x233d (google translation) + - "⌿": [t: "apl slash bar"] # 0x233f (google translation) + - "⍰": [t: "неизвестная коробка"] # 0x2370 (en: 'unknown box', google translation) + - "⍼": [t: "правый угол с нисходящим зигзагообразной стрелкой"] # 0x237c (en: 'right angle with downwards zigzag arrow', google translation) + - "⎔": [t: "шестигранник"] # 0x2394 (en: 'hexagon', google translation) + - "⎕": [t: "коробка"] # 0x2395 (en: 'box', google translation) + - "⎶": [t: "нижний квадратный кронштейн над верхним квадратным кронштейном"] # 0x23b6 (en: 'bottom square bracket over top square bracket', google translation) + - "⏜": [t: "лучшая скобка"] # 0x23dc (en: 'top paren', google translation) + - "⏝": [t: "нижняя скобка"] # 0x23dd (en: 'bottom paren', google translation) + - "⏞": [t: "лучшая скоба"] # 0x23de (en: 'top brace', google translation) + - "⏟": [t: "нижняя скоба"] # 0x23df (en: 'bottom brace', google translation) + - "⏠": [t: "лучшая кронштейна для черепахи"] # 0x23e0 (en: 'top tortoise shell bracket', google translation) + - "⏡": [t: "нижняя черепаха скорлупа"] # 0x23e1 (en: 'bottom tortoise shell bracket', google translation) + - "⏢": [t: "белый трапеция"] # 0x23e2 (en: 'white trapezium', google translation) + - "⏣": [t: "бензол прямо с кругом"] # 0x23e3 (en: 'benzene right with circle', google translation) + - "⏤": [t: "прямо"] # 0x23e4 (en: 'straightness', google translation) + - "⏥": [t: "плоскостность"] # 0x23e5 (en: 'flatness', google translation) + - "⏦": # 0x23e6 + - spell: "ac" + - t: "текущий" # (en: 'current', google translation) + - "⏧": [t: "электрическое пересечение"] # 0x23e7 (en: 'electrical intersection', google translation) + - "①-⑨": # 0x2460 - 0x2469 + - t: "кружит" # (en: 'circled', google translation) + - spell: "translate('.', '①②③④⑤⑥⑦⑧⑨', '123456789')" + - "⑩": [t: "кружит десять"] # 0x2469 (en: 'circled ten', google translation) + - "⑪": [t: "обернуто одиннадцать"] # 0x246a (en: 'circled eleven', google translation) + - "⑫": [t: "обернуло двенадцать"] # 0x246b (en: 'circled twelve', google translation) + - "⑬": [t: "кругло тринадцать"] # 0x246c (en: 'circled thirteen', google translation) + - "⑭": [t: "кружит четырнадцать"] # 0x246d (en: 'circled fourteen', google translation) + - "⑮": [t: "кружит пятнадцать"] # 0x246e (en: 'circled fifteen', google translation) + - "⑯": [t: "кружит шестнадцать"] # 0x246f (en: 'circled sixteen', google translation) + - "⑰": [t: "обведено семнадцатью"] # 0x2470 (en: 'circled seventeen', google translation) + - "⑱": [t: "обведенный атин"] # 0x2471 (en: 'circled eighteen', google translation) + - "⑳": [t: "кружит двадцать"] # 0x2473 (en: 'circled twenty', google translation) + - "⑴-⑼": # 0x2474 - 0x247d + - t: "скобки" # (en: 'parenthesized', google translation) + - spell: "translate('.', '⑴⑵⑶⑷⑸⑹⑺⑻⑼', '123456789')" + - "⑽": [t: "круженные скобки, которые десять"] # 0x247d (en: 'parenthesized ten', google translation) + - "⑾": [t: "кламок, это одиннадцать"] # 0x247e (en: 'parenthesized eleven', google translation) + - "⑿": [t: "кламок, это двенадцать"] # 0x247f (en: 'parenthesized twelve', google translation) + - "⒀": [t: "скобки, это тринадцать"] # 0x2480 (en: 'parenthesized thirteen', google translation) + - "⒁": [t: "скобки, это четырнадцать"] # 0x2481 (en: 'parenthesized fourteen', google translation) + - "⒂": [t: "скобки, это пятнадцать"] # 0x2482 (en: 'parenthesized fifteen', google translation) + - "⒃": [t: "круженные скобки, это шестнадцать"] # 0x2483 (en: 'parenthesized sixteen', google translation) + - "⒄": [t: "кламок, это семнадцать"] # 0x2484 (en: 'parenthesized seventeen', google translation) + - "⒅": [t: "скобки, это атин"] # 0x2485 (en: 'parenthesized eighteen', google translation) + - "⒆": [t: "кламок, это девятнадцать"] # 0x2486 (en: 'parenthesized nineteen', google translation) + - "⒇": [t: "скобки, это двадцать"] # 0x2487 (en: 'parenthesized twenty', google translation) + - "⒈-⒐": # 0x2488 - 0x2491 + - spell: "translate('.', '⒈⒉⒊⒋⒌⒍⒎⒏⒐', '123456789')" + - t: "с периодом" # (en: 'with period', google translation) + - "⒑": [t: "десять с периодом"] # 0x2491 (en: 'ten with period', google translation) + - "⒒": [t: "одиннадцать с периодом"] # 0x2492 (en: 'eleven with period', google translation) + - "⒓": [t: "двенадцать с периодом"] # 0x2493 (en: 'twelve with period', google translation) + - "⒔": [t: "тринадцать с периодом"] # 0x2494 (en: 'thirteen with period', google translation) + - "⒕": [t: "четырнадцать с периодом"] # 0x2495 (en: 'fourteen with period', google translation) + - "⒖": [t: "пятнадцать с периодом"] # 0x2496 (en: 'fifteen with period', google translation) + - "⒗": [t: "шестнадцать с периодом"] # 0x2497 (en: 'sixteen with period', google translation) + - "⒘": [t: "семнадцать с периодом"] # 0x2498 (en: 'seventeen with period', google translation) + - "⒙": [t: "с периодом"] # 0x2499 (en: 'eighteen with period', google translation) + - "⒚": [t: "девятнадцать с периодом"] # 0x249a (en: 'nineteen with period', google translation) + - "⒛": [t: "двадцать с периодом"] # 0x249b (en: 'twenty with period', google translation) + - "⒜-⒵": # 0x249c - 0x24b5 + - t: "скобки" # (en: 'parenthesized', google translation) + - spell: "translate('.', '⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵', 'abcdefghijklmnopqrstuvwxyz')" + + - "Ⓐ-ⓩ": # 0x24b6 - 0x24cf + - t: "кружит" # (en: 'circled', google translation) + - spell: "translate('.', 'ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "ⓐ-ⓩ": # 0x24d0 - 0x24e9 + - t: "кружит" # (en: 'circled', google translation) + - spell: "translate('.', 'ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ', 'abcdefghijklmnopqrstuvwxyz')" + - "⓪": [t: "обведено ноль"] # 0x24ea (en: 'circled zero', google translation) + - "⓫": [t: "черный кружок одиннадцать"] # 0x24eb (en: 'black circled eleven', google translation) + - "⓬": [t: "черный кружок двенадцать"] # 0x24ec (en: 'black circled twelve', google translation) + - "⓭": [t: "черный кружит тринадцать"] # 0x24ed (en: 'black circled thirteen', google translation) + - "⓮": [t: "черный кружит четырнадцать"] # 0x24ee (en: 'black circled fourteen', google translation) + - "⓯": [t: "черный кружит пятнадцать"] # 0x24ef (en: 'black circled fifteen', google translation) + - "⓰": [t: "черный кружит шестнадцать"] # 0x24f0 (en: 'black circled sixteen', google translation) + - "⓱": [t: "черный кружок семнадцать"] # 0x24f1 (en: 'black circled seventeen', google translation) + - "⓲": [t: "черный кружит атин"] # 0x24f2 (en: 'black circled eighteen', google translation) + - "⓳": [t: "черный кружок девятнадцать"] # 0x24f3 (en: 'black circled nineteen', google translation) + - "⓴": [t: "черный кружит двадцать"] # 0x24f4 (en: 'black circled twenty', google translation) + - "⓵-⓽": # 0x24f5 - 0x24fe + - t: "двойной обведенный" # (en: 'double circled', google translation) + - spell: "translate('.', '⓵⓶⓷⓸⓹⓺⓻⓼⓽', '123456789')" + - "⓾": [t: "двойной обведка десять"] # 0x24fe (en: 'double circled ten', google translation) + - "⓿": [t: "черный кружок ноль"] # 0x24ff (en: 'black circled zero', google translation) + - "■": [t: "черный квадрат"] # 0x25a0 (en: 'black square', google translation) + - "□": [t: "белый квадрат"] # 0x25a1 (en: 'white square', google translation) + - "▢": [t: "белый квадрат с округлыми углами"] # 0x25a2 (en: 'white square with rounded corners', google translation) + - "▣": [t: "белый квадрат, содержащий маленький черный квадрат"] # 0x25a3 (en: 'white square containing small black square', google translation) + - "▤": [t: "квадрат с горизонтальной заполнением"] # 0x25a4 (en: 'square with horizontal fill', google translation) + - "▥": [t: "квадрат с вертикальной заполнением"] # 0x25a5 (en: 'square with vertical fill', google translation) + - "▦": [t: "квадрат с ортогональной заполнением crosshatch"] # 0x25a6 (en: 'square with orthogonal crosshatch fill', google translation) + - "▧": [t: "квадрат с верхним левым к нижним правым заполнением"] # 0x25a7 (en: 'square with upper left to lower right fill', google translation) + - "▨": [t: "квадрат с верхним правом к нижней левой заполнению"] # 0x25a8 (en: 'square with upper right to lower left fill', google translation) + - "▩": [t: "квадрат с диагональной заполнением crosshatch"] # 0x25a9 (en: 'square with diagonal crosshatch fill', google translation) + - "▪": [t: "черный маленький квадрат"] # 0x25aa (en: 'black small square', google translation) + - "▫": [t: "белый маленький квадрат"] # 0x25ab (en: 'white small square', google translation) + - "▬": [t: "черный прямоугольник"] # 0x25ac (en: 'black rectangle', google translation) + - "▭": [t: "белый прямоугольник"] # 0x25ad (en: 'white rectangle', google translation) + - "▮": [t: "черный вертикальный прямоугольник"] # 0x25ae (en: 'black vertical rectangle', google translation) + - "▯": [t: "белый вертикальный прямоугольник"] # 0x25af (en: 'white vertical rectangle', google translation) + - "▰": [t: "черный параллелограмм"] # 0x25b0 (en: 'black parallelogram', google translation) + - "▱": [t: "белый параллелограмм"] # 0x25b1 (en: 'white parallelogram', google translation) + - "▲": [t: "черный, указывающий треугольник"] # 0x25b2 (en: 'black up pointing triangle', google translation) + - "△": [t: "треугольник"] # 0x25b3 (en: 'white up pointing triangle') + - "▴": [t: "черный, указывая маленький треугольник"] # 0x25b4 (en: 'black up pointing small triangle', google translation) + - "▵": [t: "белый, указывая маленький треугольник"] # 0x25b5 (en: 'white up pointing small triangle', google translation) + - "▶": [t: "черный правый треугольник"] # 0x25b6 (en: 'black right pointing triangle', google translation) + - "▷": [t: "белый правый треугольник"] # 0x25b7 (en: 'white right pointing triangle', google translation) + - "▸": [t: "черный правый указывает на маленький треугольник"] # 0x25b8 (en: 'black right pointing small triangle', google translation) + - "▹": [t: "белый правый указывает на маленький треугольник"] # 0x25b9 (en: 'white right pointing small triangle', google translation) + - "►": [t: "черный правый указатель"] # 0x25ba (en: 'black right pointing pointer', google translation) + - "▻": [t: "белый указатель правого указателя"] # 0x25bb (en: 'white right pointing pointer', google translation) + - "▼": [t: "черный вниз по направлению треугольника"] # 0x25bc (en: 'black down pointing triangle', google translation) + - "▽": [t: "белый вниз по направлению треугольника"] # 0x25bd (en: 'white down pointing triangle', google translation) + - "▾": [t: "черный, указывая маленький треугольник"] # 0x25be (en: 'black down pointing small triangle', google translation) + - "▿": [t: "белый вниз, указывая маленький треугольник"] # 0x25bf (en: 'white down pointing small triangle', google translation) + - "◀": [t: "черный левый треугольник"] # 0x25c0 (en: 'black left pointing triangle', google translation) + - "◁": [t: "белый левый треугольник"] # 0x25c1 (en: 'white left pointing triangle', google translation) + - "◂": [t: "черный влево указывает на маленький треугольник"] # 0x25c2 (en: 'black left pointing small triangle', google translation) + - "◃": [t: "белый влево указывает на маленький треугольник"] # 0x25c3 (en: 'white left pointing small triangle', google translation) + - "◄": [t: "черный левый указатель"] # 0x25c4 (en: 'black left pointing pointer', google translation) + - "◅": [t: "белый влево указатель указатель"] # 0x25c5 (en: 'white left pointing pointer', google translation) + - "◆": [t: "черный бриллиант"] # 0x25c6 (en: 'black diamond', google translation) + - "◇": [t: "белый бриллиант"] # 0x25c7 (en: 'white diamond', google translation) + - "◈": [t: "белый бриллиант, содержащий черный маленький бриллиант"] # 0x25c8 (en: 'white diamond containing black small diamond', google translation) + - "◉": [t: "рыбей"] # 0x25c9 (en: 'fisheye', google translation) + - "◊": [t: "лозонг"] # 0x25ca (en: 'lozenge', google translation) + - "○": [t: "белый круг"] # 0x25cb (en: 'white circle', google translation) + - "◌": [t: "пунктирный круг"] # 0x25cc (en: 'dotted circle', google translation) + - "◍": [t: "круг с вертикальной заполнением"] # 0x25cd (en: 'circle with vertical fill', google translation) + - "◎": [t: "bullseye"] # 0x25ce (google translation) + - "●": [t: "черный круг"] # 0x25cf (en: 'black circle', google translation) + - "◐": [t: "круг с левой половиной черной"] # 0x25d0 (en: 'circle with left half black', google translation) + - "◑": [t: "круг с правой половиной черной"] # 0x25d1 (en: 'circle with right half black', google translation) + - "◒": [t: "круг с нижней половиной черной"] # 0x25d2 (en: 'circle with lower half black', google translation) + - "◓": [t: "круг с верхней половиной черной"] # 0x25d3 (en: 'circle with upper half black', google translation) + - "◔": [t: "круг с верхним правым квадрантом черным"] # 0x25d4 (en: 'circle with upper right quadrant black', google translation) + - "◕": [t: "круг со всеми, кроме верхнего левого квадранта черного"] # 0x25d5 (en: 'circle with all but upper left quadrant black', google translation) + - "◖": [t: "оставил половину черного круга"] # 0x25d6 (en: 'left half black circle', google translation) + - "◗": [t: "правый половина черного круга"] # 0x25d7 (en: 'right half black circle', google translation) + - "◘": [t: "обратная пуля"] # 0x25d8 (en: 'inverse bullet', google translation) + - "◙": [t: "обратный белый круг"] # 0x25d9 (en: 'inverse white circle', google translation) + - "◚": [t: "верхняя половина обратного белого круга"] # 0x25da (en: 'upper half inverse white circle', google translation) + - "◛": [t: "нижняя половина обратного белого круга"] # 0x25db (en: 'lower half inverse white circle', google translation) + - "◜": [t: "верхняя левая квадрантная круговая дуга"] # 0x25dc (en: 'upper left quadrant circular arc', google translation) + - "◝": [t: "верхний правый квадрант круглая дуга"] # 0x25dd (en: 'upper right quadrant circular arc', google translation) + - "◞": [t: "круглая дуга нижнего правого квадранта"] # 0x25de (en: 'lower right quadrant circular arc', google translation) + - "◟": [t: "круглая дуга нижнего левого квадранта"] # 0x25df (en: 'lower left quadrant circular arc', google translation) + - "◠": [t: "верхняя половина круга"] # 0x25e0 (en: 'upper half circle', google translation) + - "◡": [t: "нижний половинный круг"] # 0x25e1 (en: 'lower half circle', google translation) + - "◢": [t: "черный треугольник в нижнем правом"] # 0x25e2 (en: 'black lower right triangle', google translation) + - "◣": [t: "черный нижний левый треугольник"] # 0x25e3 (en: 'black lower left triangle', google translation) + - "◤": [t: "черный верхний левый треугольник"] # 0x25e4 (en: 'black upper left triangle', google translation) + - "◥": [t: "черный верхний правый треугольник"] # 0x25e5 (en: 'black upper right triangle', google translation) + - "◦": [t: "композиция"] # 0x25e6 (en: 'composition', google translation) + - "◧": [t: "квадрат с левой половиной черной"] # 0x25e7 (en: 'square with left half black', google translation) + - "◨": [t: "квадрат с правой половиной черной"] # 0x25e8 (en: 'square with right half black', google translation) + - "◩": [t: "квадрат с верхней левой половиной черной"] # 0x25e9 (en: 'square with upper left half black', google translation) + - "◪": [t: "квадрат с правой правой половиной черной"] # 0x25ea (en: 'square with lower right half black', google translation) + - "◫": [t: "белый квадрат с пополам"] # 0x25eb (en: 'white square with bisecting line', google translation) + - "◬": [t: "белый, указывающий треугольник с точкой"] # 0x25ec (en: 'white up pointing triangle with dot', google translation) + - "◭": [t: "укажите треугольник с левой половиной черной"] # 0x25ed (en: 'up pointing triangle with left half black', google translation) + - "◮": [t: "укажите треугольник с правой половиной черной"] # 0x25ee (en: 'up pointing triangle with right half black', google translation) + - "◯": [t: "большой круг"] # 0x25ef (en: 'large circle', google translation) + - "◰": [t: "белый квадрат с верхним левым квадрантом"] # 0x25f0 (en: 'white square with upper left quadrant', google translation) + - "◱": [t: "белый квадрат с нижним левым квадрантом"] # 0x25f1 (en: 'white square with lower left quadrant', google translation) + - "◲": [t: "белый квадрат с нижним правым квадрантом"] # 0x25f2 (en: 'white square with lower right quadrant', google translation) + - "◳": [t: "белый квадрат с верхним правым квадрантом"] # 0x25f3 (en: 'white square with upper right quadrant', google translation) + - "◴": [t: "белый круг с верхним левым квадрантом"] # 0x25f4 (en: 'white circle with upper left quadrant', google translation) + - "◵": [t: "белый круг с нижним левым квадрантом"] # 0x25f5 (en: 'white circle with lower left quadrant', google translation) + - "◶": [t: "белый круг с нижним правым квадрантом"] # 0x25f6 (en: 'white circle with lower right quadrant', google translation) + - "◷": [t: "белый круг с верхним правым квадрантом"] # 0x25f7 (en: 'white circle with upper right quadrant', google translation) + - "◸": [t: "верхний левый треугольник"] # 0x25f8 (en: 'upper left triangle', google translation) + - "◹": [t: "верхний правый треугольник"] # 0x25f9 (en: 'upper right triangle', google translation) + - "◺": [t: "нижний левый треугольник"] # 0x25fa (en: 'lower left triangle', google translation) + - "◻": [t: "квадрат"] # 0x25fb (en: 'white medium square') + - "◼": [t: "черный средний квадрат"] # 0x25fc (en: 'black medium square', google translation) + - "◽": [t: "белый средний маленький квадрат"] # 0x25fd (en: 'white medium small square', google translation) + - "◾": [t: "черный средний маленький квадрат"] # 0x25fe (en: 'black medium small square', google translation) + - "◿": [t: "нижний правый треугольник"] # 0x25ff (en: 'lower right triangle', google translation) + - "★": [t: "черная звезда"] # 0x2605 (en: 'black star', google translation) + - "☆": [t: "белая звезда"] # 0x2606 (en: 'white star', google translation) + - "☉": [t: "солнце"] # 0x2609 (en: 'sun', google translation) + - "☌": [t: "соединение"] # 0x260c (en: 'conjuction', google translation) + - "☒": [t: "балла на баллов с x"] # 0x2612 (en: 'ballot box with x', google translation) + - "☽": [t: "восковая луна"] # 0x263d (en: 'waxing moon', google translation) + - "☾": [t: "убывающая луна"] # 0x263e (en: 'waning moon', google translation) + - "☿": [t: "меркурий"] # 0x263f (en: 'mercury', google translation) + - "♀": [t: "женский"] # 0x2640 (en: 'female', google translation) + - "♁": [t: "земля"] # 0x2641 (en: 'earth', google translation) + - "♂": [t: "мужской"] # 0x2642 (en: 'male', google translation) + - "♃": [t: "юпитер"] # 0x2643 (en: 'jupiter', google translation) + - "♄": [t: "сатурн"] # 0x2644 (en: 'saturn', google translation) + - "♅": [t: "уран"] # 0x2645 (en: 'uranus', google translation) + - "♆": [t: "нептун"] # 0x2646 (en: 'neptune', google translation) + - "♇": [t: "плутон"] # 0x2647 (en: 'pluto', google translation) + - "♈": [t: "овен"] # 0x2648 (en: 'aries', google translation) + - "♉": [t: "телец"] # 0x2649 (en: 'taurus', google translation) + - "♩": [t: "четверть примечания"] # 0x2669 (en: 'quarter note', google translation) + - "♭": [t: "плоский"] # 0x266d (en: 'flat', google translation) + - "♮": [t: "множество натуральных чисел"] # 0x266e (en: 'natural') + - "♯": [t: "острый"] # 0x266f (en: 'sharp', google translation) + - "♠": [t: "черная лопата костюма"] # 0x2660 (en: 'black spade suit', google translation) + - "♡": [t: "белый сердечный костюм"] # 0x2661 (en: 'white heart suit', google translation) + - "♢": [t: "белый бриллиантовый костюм"] # 0x2662 (en: 'white diamond suit', google translation) + - "♣": [t: "черный клубный костюм"] # 0x2663 (en: 'black club suit', google translation) + - "♤": [t: "белая локомочная костюм"] # 0x2664 (en: 'white spade suit', google translation) + - "♥": [t: "черный сердечный костюм"] # 0x2665 (en: 'black heart suit', google translation) + - "♦": [t: "черный бриллиантовый костюм"] # 0x2666 (en: 'black diamond suit', google translation) + - "♧": [t: "белый клубный костюм"] # 0x2667 (en: 'white club suit', google translation) + - "⚀": [t: "умереть лицо 1"] # 0x2680 (en: 'die face 1', google translation) + - "⚁": [t: "умереть лицо 2"] # 0x2681 (en: 'die face 2', google translation) + - "⚂": [t: "умереть лицо 3"] # 0x2682 (en: 'die face 3', google translation) + - "⚃": [t: "умереть лицо 4"] # 0x2683 (en: 'die face 4', google translation) + - "⚄": [t: "умереть лицо 5"] # 0x2684 (en: 'die face 5', google translation) + - "⚅": [t: "умереть лицо 6"] # 0x2685 (en: 'die face 6', google translation) + - "⚆": [t: "белый круг с точкой справа"] # 0x2686 (en: 'white circle with dot right', google translation) + - "⚇": [t: "белый круг с двумя точками"] # 0x2687 (en: 'white circle wiht two dots', google translation) + - "⚈": [t: "черный круг с точкой справа"] # 0x2688 (en: 'black circle with dot right', google translation) + - "⚉": [t: "черный круг с двумя точками"] # 0x2689 (en: 'black circle wiht two dots', google translation) + - "⚪": [t: "средний белый круг"] # 0x26aa (en: 'medium white circle', google translation) + - "⚫": [t: "средний черный круг"] # 0x26ab (en: 'medium black circle', google translation) + - "⚬": [t: "средний маленький белый круг"] # 0x26ac (en: 'medium small white circle', google translation) + - "⚲": [t: "средний"] # 0x26b2 (en: 'neuter', google translation) + - "✓": [t: "отметка"] # 0x2713 (en: 'check mark', google translation) + - "✠": [t: "мальтийский крест"] # 0x2720 (en: 'maltese cross', google translation) + - "✪": [t: "кружная белая звезда"] # 0x272a (en: 'circled white star', google translation) + - "✶": [t: "шесть пинтированной черной звезды"] # 0x2736 (en: 'six pionted black star', google translation) + - "❨": [t: "средние левые скобки - орнамент"] # 0x2768 (en: 'medium left parentheses ornament', google translation) + - "❩": [t: "средние правые скобки - орнамент"] # 0x2769 (en: 'medium right parentheses ornament', google translation) + - "❪": [t: "средняя сплюснутая левая скобка - орнамент"] # 0x276a (en: 'medium flattened left parentheses ornament', google translation) + - "❫": [t: "средняя сплющенная правая скобка орнамент"] # 0x276b (en: 'medium flattened right parentheses ornament', google translation) + - "❬": [t: "средний левый угловой скобки"] # 0x276c (en: 'medium left-pointing angle bracket ornament', google translation) + - "❭": [t: "средний правый угловой кронштейн орнамент"] # 0x276d (en: 'medium right-pointing angle bracket ornament', google translation) + - "❮": [t: "тяжелый левый угловой котировочный орнамент"] # 0x276e (en: 'heavy left-pointing angle quotation mark ornament', google translation) + - "❯": [t: "тяжелый правый угол угла для кавычки"] # 0x276f (en: 'heavy right-pointing angle quotation mark ornament', google translation) + - "❰": [t: "тяжелый левый угловой скобок украшен"] # 0x2770 (en: 'heavy left-pointing angle bracket ornament', google translation) + - "❱": [t: "тяжелый правый угловой скобок украшен"] # 0x2771 (en: 'heavy right-pointing angle bracket ornament', google translation) + - "❲": [t: "светлый левый орнамент с кронштейном черепахи"] # 0x2772 (en: 'light left tortoise shell bracket ornament', google translation) + - "❳": [t: "светлый правый черепаховый скорбящий орнамент"] # 0x2773 (en: 'light right tortoise shell bracket ornament', google translation) + - "❴": [t: "средний левый прудовый орнамент"] # 0x2774 (en: 'medium left brace ornament', google translation) + - "❵": [t: "средний правый скоба орнамент"] # 0x2775 (en: 'medium right brace ornament', google translation) + - "❶": [t: "черный кружит один"] # 0x2776 (en: 'black circled one', google translation) + - "❷": [t: "черный кружит два"] # 0x2777 (en: 'black circled two', google translation) + - "❸": [t: "черный кружит три"] # 0x2778 (en: 'black circled three', google translation) + - "❹": [t: "черный кружит четыре"] # 0x2779 (en: 'black circled four', google translation) + - "❺": [t: "черный кружит пять"] # 0x277a (en: 'black circled five', google translation) + - "❻": [t: "черный кружит шесть"] # 0x277b (en: 'black circled six', google translation) + - "❼": [t: "черный кружит семь"] # 0x277c (en: 'black circled seven', google translation) + - "❽": [t: "черный кружит в"] # 0x277d (en: 'black circled eight', google translation) + - "❾": [t: "черный кружит девять"] # 0x277e (en: 'black circled nine', google translation) + - "❿": [t: "черный кружит десять"] # 0x277f (en: 'black circled ten', google translation) + - "➀": [t: "обведенный без засечка"] # 0x2780 (en: 'circled sans serif one', google translation) + - "➁": [t: "обведено без засечка два"] # 0x2781 (en: 'circled sans serif two', google translation) + - "➂": [t: "обведено без засечка"] # 0x2782 (en: 'circled sans serif three', google translation) + - "➃": [t: "обведено без засечка четверка"] # 0x2783 (en: 'circled sans serif four', google translation) + - "➄": [t: "circled sans serif five"] # 0x2784 (google translation) + - "➅": [t: "обведено без засечка шесть"] # 0x2785 (en: 'circled sans serif six', google translation) + - "➆": [t: "обведено без засечка семь"] # 0x2786 (en: 'circled sans serif seven', google translation) + - "➇": [t: "обведено без засечка в"] # 0x2787 (en: 'circled sans serif eight', google translation) + - "➈": [t: "обведено без засечка девять"] # 0x2788 (en: 'circled sans serif nine', google translation) + - "➉": [t: "обведено без засечка"] # 0x2789 (en: 'circled sans serif ten', google translation) + - "➊": [t: "черный кружок без засечка"] # 0x278a (en: 'black circled sans serif one', google translation) + - "➋": [t: "черный кружок без засечка два"] # 0x278b (en: 'black circled sans serif two', google translation) + - "➌": [t: "черный кружок без засечка три"] # 0x278c (en: 'black circled sans serif three', google translation) + - "➍": [t: "черный кружок без засечка четыре"] # 0x278d (en: 'black circled sans serif four', google translation) + - "➎": [t: "черный кружок без засечка пять"] # 0x278e (en: 'black circled sans serif five', google translation) + - "➏": [t: "черный кружок без засеяния шесть"] # 0x278f (en: 'black circled sans serif six', google translation) + - "➐": [t: "черный кружок без засеяния"] # 0x2790 (en: 'black circled sans serif seven', google translation) + - "➑": [t: "черный кружок без засечка в"] # 0x2791 (en: 'black circled sans serif eight', google translation) + - "➒": [t: "черный кружок без засеяния девять"] # 0x2792 (en: 'black circled sans serif nine', google translation) + - "➓": [t: "черный кружок без засечка"] # 0x2793 (en: 'black circled sans serif ten', google translation) + - "➔": [t: "тяжелая широкая правая стрела"] # 0x2794 (en: 'heavy wide-headed rightwards arrow', google translation) + - "➕": [t: "тяжелый плюс знак"] # 0x2795 (en: 'heavy plus sign', google translation) + - "➖": [t: "тяжелый минус знак"] # 0x2796 (en: 'heavy minus sign', google translation) + - "➗": [t: "знак тяжелой дивизии"] # 0x2797 (en: 'heavy division sign', google translation) + - "➘": [t: "тяжелая юго -восточная стрела"] # 0x2798 (en: 'heavy south east arrow', google translation) + - "➙": [t: "тяжелая справа стрелы"] # 0x2799 (en: 'heavy rightwards arrow', google translation) + - "➚": [t: "тяжелая северо -восточная стрела"] # 0x279a (en: 'heavy north east arrow', google translation) + - "➛": [t: "стрелка вправо"] # 0x279b (en: 'drafting point rightwards arrow', google translation) + - "➜": [t: "тяжелая круглая стрелка вправо"] # 0x279c (en: 'heavy round-tipped rightwards arrow', google translation) + - "➝": [t: "треугольник с головой справа"] # 0x279d (en: 'triangle-headed rightwards arrow', google translation) + - "➞": [t: "тяжелый треугольный голод справа от стрелы"] # 0x279e (en: 'heavy triangle-headed rightwards arrow', google translation) + - "➟": [t: "убитый треугольник с головой справа"] # 0x279f (en: 'dashed triangle-headed rightwards arrow', google translation) + - "➠": [t: "тяжелый пунктирный треугольник с головой справа"] # 0x27a0 (en: 'heavy dashed triangle-headed rightwards arrow', google translation) + - "➡": [t: "черная справа стрелы"] # 0x27a1 (en: 'black rightwards arrow', google translation) + - "➢": [t: "три d вершина освещены стрелкой вправо"] # 0x27a2 (en: 'three d top lighted rightwards arrow', google translation) + - "➣": [t: "три д дно освещены вправо стрел"] # 0x27a3 (en: 'three d bottom lighted rightwards arrow', google translation) + - "➤": [t: "черный вправо стрел"] # 0x27a4 (en: 'black rightwards arrowhead', google translation) + - "➥": [t: "тяжелая черная изогнутая вниз и вправо стрел"] # 0x27a5 (en: 'heavy black curved downwards and rightwards arrow', google translation) + - "➦": [t: "тяжелая черная изогнутая стрелка вверх и вправо"] # 0x27a6 (en: 'heavy black curved upwards and rightwards arrow', google translation) + - "➧": [t: "приседание черное вправо стрел"] # 0x27a7 (en: 'squat black rightwards arrow', google translation) + - "➨": [t: "тяжелая вогнутая черная черная стрелка"] # 0x27a8 (en: 'heavy concave-pointed black rightwards arrow', google translation) + - "➩": [t: "стрелка вправо с правой потертой вправо"] # 0x27a9 (en: 'right-shaded white rightwards arrow', google translation) + - "➪": [t: "стрелка вправо налево"] # 0x27aa (en: 'left-shaded white rightwards arrow', google translation) + - "➫": [t: "стрелка с затенением с задней частью"] # 0x27ab (en: 'back-tilted shadowed white rightwards arrow', google translation) + - "➬": [t: "стрелка спереди с передним наклоном"] # 0x27ac (en: 'front-tilted shadowed white rightwards arrow', google translation) + - "➭": [t: "тяжелая белая в нижней части белой стрелы вправо"] # 0x27ad (en: 'heavy lower right-shadowed white rightwards arrow', google translation) + - "➮": [t: "тяжелая верхняя правая белая стрелка вправо"] # 0x27ae (en: 'heavy upper right-shadowed white rightwards arrow', google translation) + - "➯": [t: "стрелка с надписью с надписью с надписью"] # 0x27af (en: 'notched lower right-shadowed white rightwards arrow', google translation) + - "➱": [t: "стрелка с надписью с надписью с надписью"] # 0x27b1 (en: 'notched upper right-shadowed white rightwards arrow', google translation) + - "➲": [t: "кругл тяжелый белый вправо стрел"] # 0x27b2 (en: 'circled heavy white rightwards arrow', google translation) + - "➳": [t: "белоснежка вправо стрел"] # 0x27b3 (en: 'white-feathered rightwards arrow', google translation) + - "➴": [t: "чернокожая юго-восточная стрела"] # 0x27b4 (en: 'black-feathered south east arrow', google translation) + - "➵": [t: "чернокожие вправо стрел"] # 0x27b5 (en: 'black-feathered rightwards arrow', google translation) + - "➶": [t: "чернокожая северо-восточная стрела"] # 0x27b6 (en: 'black-feathered north east arrow', google translation) + - "➷": [t: "тяжелая чернокожая юго-восточная стрела"] # 0x27b7 (en: 'heavy black-feathered south east arrow', google translation) + - "➸": [t: "тяжелая чернокожая стрелка вправо"] # 0x27b8 (en: 'heavy black-feathered rightwards arrow', google translation) + - "➹": [t: "тяжелая чернокожая северо-восточная стрела"] # 0x27b9 (en: 'heavy black-feathered north east arrow', google translation) + - "➺": [t: "teradrop-barbed вправо стрел"] # 0x27ba (en: 'teradrop-barbed rightwards arrow', google translation) + - "➻": [t: "тяжелая слезоточивая капля стрелка вправо"] # 0x27bb (en: 'heavy teardrop-shanked rightwards arrow', google translation) + - "➼": [t: "клин-хвост вправо стрел"] # 0x27bc (en: 'wedge-tailed rightwards arrow', google translation) + - "➽": [t: "тяжелая клинохволока вправо стрел"] # 0x27bd (en: 'heavy wedge-tailed rightwards arrow', google translation) + - "➾": [t: "открытая стрелка вправо"] # 0x27be (en: 'open-outlined rightwards arrow', google translation) + - "⟀": [t: "трехмерный угол"] # 0x27c0 (en: 'three dimensional angle', google translation) + - "⟁": [t: "белый треугольник, содержащий маленький белый треугольник"] # 0x27c1 (en: 'white triangle containing small white triangle', google translation) + - "⟂": # 0x27c2 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "перпендикулярно" # (en: 'perpendicular to', google translation) + - "⟃": # 0x27c3 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "открытая подмножество" # (en: 'an open subset of', google translation) + - "⟄": # 0x27c4 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "открытый суперсет" # (en: 'an open superset of', google translation) + - "⟅": [t: "левый s-образный мешок разделитель"] # 0x27c5 (en: 'left s-shaped bag delimiter', google translation) + - "⟆": [t: "правая s-образная сумка разделителя"] # 0x27c6 (en: 'right s-shaped bag delimiter', google translation) + - "⟇": [t: "или с точкой внутри"] # 0x27c7 (en: 'or with dot inside', google translation) + - "⟈": [t: "обратный солидус предшествует подмножеству"] # 0x27c8 (en: 'reverse solidus preceding subset', google translation) + - "⟉": [t: "суперсет предшествует солидному"] # 0x27c9 (en: 'superset preceding solidus', google translation) + - "⟊": [t: "вертикальная планка с горизонтальным ходом"] # 0x27ca (en: 'vertical bar with horizontal stroke', google translation) + - "⟋": [t: "математический восходящий диагональ"] # 0x27cb (en: 'mathematical rising diagonal', google translation) + - "⟌": [t: "длинное подразделение"] # 0x27cc (en: 'long division', google translation) + - "⟍": [t: "математический падающий диагональ"] # 0x27cd (en: 'mathematical falling diagonal', google translation) + - "⟎": [t: "квадратный логический и"] # 0x27ce (en: 'squared logical and', google translation) + - "⟏": [t: "квадратный логический или"] # 0x27cf (en: 'squared logical or', google translation) + - "⟐": [t: "белый бриллиант с центрированной точкой"] # 0x27d0 (en: 'white diamond with centered dot', google translation) + - "⟑": [t: "и с точкой"] # 0x27d1 (en: 'and with dot', google translation) + - "⟒": [t: "элемент открытия вверх"] # 0x27d2 (en: 'element of opening upwards', google translation) + - "⟓": [t: "нижний правый угол с точкой"] # 0x27d3 (en: 'lower right corner with dot', google translation) + - "⟔": [t: "верхний левый угол с точкой"] # 0x27d4 (en: 'upper left corner with dot', google translation) + - "⟕": [t: "оставлено внешним соединением"] # 0x27d5 (en: 'left outer join', google translation) + - "⟖": [t: "прямое внешнее соединение"] # 0x27d6 (en: 'right outer join', google translation) + - "⟗": [t: "полное внешнее соединение"] # 0x27d7 (en: 'full outer join', google translation) + - "⟘": [t: "большой притяжение"] # 0x27d8 (en: 'large up tack', google translation) + - "⟙": [t: "большой вниз"] # 0x27d9 (en: 'large down tack', google translation) + - "⟚": [t: "левый и правый двойной турникет"] # 0x27da (en: 'left and right double turnstile', google translation) + - "⟛": [t: "левый и правый притяжение"] # 0x27db (en: 'left and right tack', google translation) + - "⟜": [t: "оставил мультимап"] # 0x27dc (en: 'left multimap', google translation) + - "⟝": [t: "длинная правая притяжение"] # 0x27dd (en: 'long right tack', google translation) + - "⟞": [t: "долгое левое"] # 0x27de (en: 'long left tack', google translation) + - "⟟": [t: "вверх по кругу выше"] # 0x27df (en: 'up tack with circle above', google translation) + - "⟠": [t: "lozenge, разделенный горизонтальным правлением"] # 0x27e0 (en: 'lozenge divided by horizontal rule', google translation) + - "⟡": [t: "белый вогнутый бриллиант"] # 0x27e1 (en: 'white concave sided diamond', google translation) + - "⟢": [t: "белый вогнутый бриллиант с левым тиком"] # 0x27e2 (en: 'white concave sided diamond with leftwards tick', google translation) + - "⟣": [t: "белый вогнутый бриллиант с правой клеткой"] # 0x27e3 (en: 'white concave sided diamond with rightwards tick', google translation) + - "⟤": [t: "белый квадрат с левой частью"] # 0x27e4 (en: 'white square with leftwards tick', google translation) + - "⟥": [t: "белый квадрат с правой клеткой"] # 0x27e5 (en: 'white square with rightwards tick', google translation) + - "⟦": [t: "левый белый квадратный кронштейн"] # 0x27e6 (en: 'left white square bracket', google translation) + - "⟧": [t: "правый белый квадратный кронштейн"] # 0x27e7 (en: 'right white square bracket', google translation) + - "⟨": [t: "левый угловой кронштейн"] # 0x27e8 (en: 'left angle bracket', google translation) + - "⟩": [t: "правый угловой кронштейн"] # 0x27e9 (en: 'right angle bracket', google translation) + - "⟪": [t: "левый двухугольный кронштейн"] # 0x27ea (en: 'left double angle bracket', google translation) + - "⟫": [t: "правый двойной угловой кронштейн"] # 0x27eb (en: 'right double angle bracket', google translation) + - "⟬": [t: "оставил белую черепаховую скорлупу"] # 0x27ec (en: 'left white tortoise shell bracket', google translation) + - "⟭": [t: "правый белый кронштейн с черепахой"] # 0x27ed (en: 'right white tortoise shell bracket', google translation) + - "⟮": [t: "осталось сплющенной скобки"] # 0x27ee (en: 'left flattened parenthesis', google translation) + - "⟯": [t: "правый сплющенной скобок"] # 0x27ef (en: 'right flattened parenthesis', google translation) + - "⟰": [t: "вверх четырехкратной стрелы"] # 0x27f0 (en: 'upwards quadruple arrow', google translation) + - "⟱": [t: "вниз по четыре раза стрелка"] # 0x27f1 (en: 'downwards quadruple arrow', google translation) + - "⟲": [t: "антиколевая стрельба по обрыванию круга"] # 0x27f2 (en: 'anticlockwise gapped circle arrow', google translation) + - "⟳": [t: "по часовой стрелке защелкивая стрелка"] # 0x27f3 (en: 'clockwise gapped circle arrow', google translation) + - "⟴": [t: "правая стрелка с circled plus"] # 0x27f4 (en: 'right arrow with circled plus', google translation) + - "⟵": [t: "длинная левая стрела"] # 0x27f5 (en: 'long leftwards arrow', google translation) + - "⟶": [t: "длинная справа стрелы"] # 0x27f6 (en: 'long rightwards arrow', google translation) + - "⟷": [t: "длинная левая стрелка вправо"] # 0x27f7 (en: 'long left right arrow', google translation) + - "⟸": [t: "длинная слева двойная стрела"] # 0x27f8 (en: 'long leftwards double arrow', google translation) + - "⟹": [t: "длинная направо двойная стрелка"] # 0x27f9 (en: 'long rightwards double arrow', google translation) + - "⟺": [t: "длинная левая правая двойная стрелка"] # 0x27fa (en: 'long left right double arrow', google translation) + - "⟻": [t: "длинная стрелка влево из бара"] # 0x27fb (en: 'long leftwards arrow from bar', google translation) + - "⟼": [t: "длинная стрелка вправо из бара"] # 0x27fc (en: 'long rightwards arrow from bar', google translation) + - "⟽": [t: "длинная слева двойная стрелка из бара"] # 0x27fd (en: 'long leftwards double arrow from bar', google translation) + - "⟾": [t: "длинная направо с двойной стрелкой из бара"] # 0x27fe (en: 'long rightwards double arrow from bar', google translation) + - "⟿": [t: "длинные направо suggle arrow"] # 0x27ff (en: 'long rightwards squiggle arrow', google translation) + - "⤀": [t: "пряга две головные стрелки с вертикальным ходом"] # 0x2900 (en: 'rightwards two headed arrow with vertical stroke', google translation) + - "⤁": [t: "права два головая стрелка с двойным вертикальным ходом"] # 0x2901 (en: 'rightwards two headed arrow with double vertical stroke', google translation) + - "⤂": [t: "левая двойная стрелка с вертикальным ходом"] # 0x2902 (en: 'leftwards double arrow with vertical stroke', google translation) + - "⤃": [t: "права двойная стрелка с вертикальным ходом"] # 0x2903 (en: 'rightwards double arrow with vertical stroke', google translation) + - "⤄": [t: "левая правая двойная стрелка с вертикальным ходом"] # 0x2904 (en: 'left right double arrow with vertical stroke', google translation) + - "⤅": [t: "прямо сразу же две головой стрелы из бара"] # 0x2905 (en: 'rightwards two headed arrow from bar', google translation) + - "⤆": [t: "слева двойная стрелка из бара"] # 0x2906 (en: 'leftwards double arrow from bar', google translation) + - "⤇": [t: "права двойная стрелка из бара"] # 0x2907 (en: 'rightwards double arrow from bar', google translation) + - "⤈": [t: "стрелка вниз с горизонтальным ходом"] # 0x2908 (en: 'downwards arrow with horizontal stroke', google translation) + - "⤉": [t: "стрелка вверх с горизонтальным ходом"] # 0x2909 (en: 'upwards arrow with horizontal stroke', google translation) + - "⤊": [t: "вверх тройной стрелкой"] # 0x290a (en: 'upwards triple arrow', google translation) + - "⤋": [t: "вниз по тройной стрелке"] # 0x290b (en: 'downwards triple arrow', google translation) + - "⤌": [t: "слева двойная стрелка"] # 0x290c (en: 'leftwards double dash arrow', google translation) + - "⤍": [t: "право двойная стрелка"] # 0x290d (en: 'rightwards double dash arrow', google translation) + - "⤎": [t: "левая тройная стрелка"] # 0x290e (en: 'leftwards triple dash arrow', google translation) + - "⤏": [t: "права тредная дапа"] # 0x290f (en: 'rightwards triple dash arrow', google translation) + - "⤐": [t: "прямо два голова triple dash arrow"] # 0x2910 (en: 'rightwards two headed triple dash arrow', google translation) + - "⤑": [t: "стрелка вправо с пунктирным стеблем"] # 0x2911 (en: 'rightwards arrow with dotted stem', google translation) + - "⤒": [t: "вверх стрелой в бар"] # 0x2912 (en: 'upwards arrow to bar', google translation) + - "⤓": [t: "вниз стрелы в бар"] # 0x2913 (en: 'downwards arrow to bar', google translation) + - "⤔": [t: "стрелка вправо с хвостом и вертикальным ходом"] # 0x2914 (en: 'rightwards arrow with tail and vertical stroke', google translation) + - "⤕": [t: "стрелка вправо с хвостом и двойным вертикальным ходом"] # 0x2915 (en: 'rightwards arrow with tail and double vertical stroke', google translation) + - "⤖": [t: "права два головая стрела с хвостом"] # 0x2916 (en: 'rightwards two headed arrow with tail', google translation) + - "⤗": [t: "пряга две головные стрелки с хвостом с вертикальным ходом"] # 0x2917 (en: 'rightwards two headed arrow with tail with vertical stroke', google translation) + - "⤘": [t: "пряга две головные стрелки с хвостом с двойным вертикальным ходом"] # 0x2918 (en: 'rightwards two headed arrow with tail with double vertical stroke', google translation) + - "⤙": [t: "левый хвост стрелы"] # 0x2919 (en: 'leftwards arrow tail', google translation) + - "⤚": [t: "права стрелка хвост"] # 0x291a (en: 'rightwards arrow tail', google translation) + - "⤛": [t: "левый двойной стрелок хвост"] # 0x291b (en: 'leftwards double arrow tail', google translation) + - "⤜": [t: "права двойной стрелок хвост"] # 0x291c (en: 'rightwards double arrow tail', google translation) + - "⤝": [t: "стрелка слева до заполненного алмаза"] # 0x291d (en: 'leftwards arrow to filled diamond', google translation) + - "⤞": [t: "стрелка вправо до наполненного бриллианта"] # 0x291e (en: 'rightwards arrow to filled diamond', google translation) + - "⤟": [t: "стрелка влево от бара до наполненного алмаза"] # 0x291f (en: 'leftwards arrow from bar to filled diamond', google translation) + - "⤠": [t: "стрелка вправо от бара до наполненного алмаза"] # 0x2920 (en: 'rightwards arrow from bar to filled diamond', google translation) + - "⤡": [t: "северо -западный и юго -восточный стрелка"] # 0x2921 (en: 'north west and south east arrow', google translation) + - "⤢": [t: "северо -восток и юго -западный стрела"] # 0x2922 (en: 'north east and south west arrow', google translation) + - "⤣": [t: "стрелка северо -запада с крючком"] # 0x2923 (en: 'north west arrow with hook', google translation) + - "⤤": [t: "стрелка на северо -восток с крючком"] # 0x2924 (en: 'north east arrow with hook', google translation) + - "⤥": [t: "юго -восточная стрела с крючком"] # 0x2925 (en: 'south east arrow with hook', google translation) + - "⤦": [t: "юго -западная стрела с крючком"] # 0x2926 (en: 'south west arrow with hook', google translation) + - "⤧": [t: "северо -западный стрела и северо -восточный стрела"] # 0x2927 (en: 'north west arrow and north east arrow', google translation) + - "⤨": [t: "северо -восточный стрела и юго -восточная стрела"] # 0x2928 (en: 'north east arrow and south east arrow', google translation) + - "⤩": [t: "юго -восточная стрела и юго -западный стрела"] # 0x2929 (en: 'south east arrow and south west arrow', google translation) + - "⤪": [t: "юго -западная стрела и северо -западный стрелка"] # 0x292a (en: 'south west arrow and north west arrow', google translation) + - "⤫": [t: "повышение диагонального пересечения падающих диагональ"] # 0x292b (en: 'rising diagonal crossing falling diagonal', google translation) + - "⤬": [t: "падение диагонального пересечения, поднимающееся диагональ"] # 0x292c (en: 'falling diagonal crossing rising diagonal', google translation) + - "⤭": [t: "юго -восточная стрелка, пересекающая северо -восточную стрелу"] # 0x292d (en: 'south east arrow crossing north east arrow', google translation) + - "⤮": [t: "северо -восток стрелы, пересекающая юго -восточную стрелу"] # 0x292e (en: 'north east arrow crossing south east arrow', google translation) + - "⤯": [t: "падение диагонального пересечения северо -востока стрелы"] # 0x292f (en: 'falling diagonal crossing north east arrow', google translation) + - "⤰": [t: "повышение диагонального пересечения юго -восточной стрелы"] # 0x2930 (en: 'rising diagonal crossing south east arrow', google translation) + - "⤱": [t: "северо -восточный стрелка пересекает северо -западный стрел"] # 0x2931 (en: 'north east arrow crossing north west arrow', google translation) + - "⤲": [t: "северо -западный стрела, пересекающая северо -восток стрелы"] # 0x2932 (en: 'north west arrow crossing north east arrow', google translation) + - "⤳": [t: "волна стрелка, указывающая прямо прямо вправо"] # 0x2933 (en: 'wave arrow pointing directly right', google translation) + - "⤴": [t: "стрелка указывает вправо, затем скручивается вверх"] # 0x2934 (en: 'arrow pointing rightwards then curving upwards', google translation) + - "⤵": [t: "стрелка указывает вправо, затем изогнулась вниз"] # 0x2935 (en: 'arrow pointing rightwards then curving downwards', google translation) + - "⤶": [t: "стрелка указывает вниз, а затем изогнут влево"] # 0x2936 (en: 'arrow pointing downwards then curving leftwards', google translation) + - "⤷": [t: "стрелка указывает вниз, а затем изогнут вправо"] # 0x2937 (en: 'arrow pointing downwards then curving rightwards', google translation) + - "⤸": [t: "стрелка правой боковой дуги по часовой стрелке"] # 0x2938 (en: 'right side arc clockwise arrow', google translation) + - "⤹": [t: "стрелка левой стороны против часовой стрелки"] # 0x2939 (en: 'left side arc anticlockwise arrow', google translation) + - "⤺": [t: "верхняя дуга против часовой стрелы"] # 0x293a (en: 'top arc anticlockwise arrow', google translation) + - "⤻": [t: "нижняя дуга против часовой стрелки"] # 0x293b (en: 'bottom arc anticlockwise arrow', google translation) + - "⤼": [t: "верхняя дуговая стрелка с минус"] # 0x293c (en: 'top arc clockwise arrow with minus', google translation) + - "⤽": [t: "верхняя дуга против часовой стрелки с плюсом"] # 0x293d (en: 'top arc anticlockwise arrow with plus', google translation) + - "⤾": [t: "нижняя правая полукруглая стрелка по часовой стрелке"] # 0x293e (en: 'lower right semicircular clockwise arrow', google translation) + - "⤿": [t: "левый левый полукруглый стрелка против часовой стрелки"] # 0x293f (en: 'lower left semicircular anticlockwise arrow', google translation) + - "⥀": [t: "стрелка против часовой стрелки"] # 0x2940 (en: 'anticlockwise closed circle arrow', google translation) + - "⥁": [t: "по часовой стрелке закрытый круг стрелы"] # 0x2941 (en: 'clockwise closed circle arrow', google translation) + - "⥂": [t: "стрелка вправо над короткой левой стрелкой"] # 0x2942 (en: 'rightwards arrow above short leftwards arrow', google translation) + - "⥃": [t: "стрелка влево над короткой стрелой вправо"] # 0x2943 (en: 'leftwards arrow above short rightwards arrow', google translation) + - "⥄": [t: "короткая стрелка вправо над стрельбой влево"] # 0x2944 (en: 'short rightwards arrow above leftwards arrow', google translation) + - "⥅": [t: "стрелка вправо с плюсом ниже"] # 0x2945 (en: 'rightwards arrow with plus below', google translation) + - "⥆": [t: "стрелка влево с плюсом ниже"] # 0x2946 (en: 'leftwards arrow with plus below', google translation) + - "⥇": [t: "стрелка вправо через x"] # 0x2947 (en: 'rightwards arrow through x', google translation) + - "⥈": [t: "левая стрелка справа через круг"] # 0x2948 (en: 'left right arrow through circle', google translation) + - "⥉": [t: "вверху две головы стрелы из круга"] # 0x2949 (en: 'upwards two headed arrow from circle', google translation) + - "⥊": [t: "левый барб вверх по правой барб вниз по гарпуне"] # 0x294a (en: 'left barb up right barb down harpoon', google translation) + - "⥋": [t: "левый барб вниз по правой барб вверх по гарпуне"] # 0x294b (en: 'left barb down right barb up harpoon', google translation) + - "⥌": [t: "вверх барб прямо вниз по левому гарпуне"] # 0x294c (en: 'up barb right down barb left harpoon', google translation) + - "⥍": [t: "вверх по барб налево барб правой гарпун"] # 0x294d (en: 'up barb left down barb right harpoon', google translation) + - "⥎": [t: "левый барб вверх по правой барб -харпун"] # 0x294e (en: 'left barb up right barb up harpoon', google translation) + - "⥏": [t: "вверх барб прямо вниз, барб правый гарпун"] # 0x294f (en: 'up barb right down barb right harpoon', google translation) + - "⥐": [t: "левый барб вниз по правой барб вниз по гарпуне"] # 0x2950 (en: 'left barb down right barb down harpoon', google translation) + - "⥑": [t: "вверх барб оставил барб, покинув гарпун"] # 0x2951 (en: 'up barb left down barb left harpoon', google translation) + - "⥒": [t: "левый гарпун с барб до бар"] # 0x2952 (en: 'leftwards harpoon with barb up to bar', google translation) + - "⥓": [t: "прямо гарпун с барб до бара"] # 0x2953 (en: 'rightwards harpoon with barb up to bar', google translation) + - "⥔": [t: "вверх гарпун с барб прямо к баре"] # 0x2954 (en: 'upwards harpoon with barb right to bar', google translation) + - "⥕": [t: "вниз по гарпуне с барб прямо к бар"] # 0x2955 (en: 'downwards harpoon with barb right to bar', google translation) + - "⥖": [t: "слева гарпун с барб до бара"] # 0x2956 (en: 'leftwards harpoon with barb down to bar', google translation) + - "⥗": [t: "прямо гарпун с барб до бара"] # 0x2957 (en: 'rightwards harpoon with barb down to bar', google translation) + - "⥘": [t: "вверх гарпун с кобкой, оставленной в бар"] # 0x2958 (en: 'upwards harpoon with barb left to bar', google translation) + - "⥙": [t: "вниз по гарпуне с кобкой, оставленной в бар"] # 0x2959 (en: 'downwards harpoon with barb left to bar', google translation) + - "⥚": [t: "слева гарпун с барб из бара"] # 0x295a (en: 'leftwards harpoon with barb up from bar', google translation) + - "⥛": [t: "прямо гарпун с барб из бара"] # 0x295b (en: 'rightwards harpoon with barb up from bar', google translation) + - "⥜": [t: "вверх гарпун с барб прямо из бара"] # 0x295c (en: 'upwards harpoon with barb right from bar', google translation) + - "⥝": [t: "вниз по гарпуне с барб прямо из бара"] # 0x295d (en: 'downwards harpoon with barb right from bar', google translation) + - "⥞": [t: "налево гарпун с барб вниз от бара"] # 0x295e (en: 'leftwards harpoon with barb down from bar', google translation) + - "⥟": [t: "прямо гарпун с барб вниз от бара"] # 0x295f (en: 'rightwards harpoon with barb down from bar', google translation) + - "⥠": [t: "вверх гарпун с барб слева от бара"] # 0x2960 (en: 'upwards harpoon with barb left from bar', google translation) + - "⥡": [t: "вниз по гарпуне с кобкой слева от бара"] # 0x2961 (en: 'downwards harpoon with barb left from bar', google translation) + - "⥢": [t: "налево гарпун с барб вверх по левому гарпуне с барб вниз"] # 0x2962 (en: 'leftwards harpoon with barb up above leftwards harpoon with barb down', google translation) + - "⥣": [t: "вверх гарпун с кобкой слева рядом вверх вверх гарпун с барком справа"] # 0x2963 (en: 'upwards harpoon with barb left beside upwards harpoon with barb right', google translation) + - "⥤": [t: "прямо гарпун с барб вверх по правой гарпуне с барб"] # 0x2964 (en: 'rightwards harpoon with barb up above rightwards harpoon with barb down', google translation) + - "⥥": [t: "вниз по гарпуне с кобкой слева рядом вниз по гарпуне с барком справа"] # 0x2965 (en: 'downwards harpoon with barb left beside downwards harpoon with barb right', google translation) + - "⥦": [t: "влево гарпун с барб вверх по правой гарпуне с барб"] # 0x2966 (en: 'leftwards harpoon with barb up above rightwards harpoon with barb up', google translation) + - "⥧": [t: "влево гарпун с барб вниз по правой гарпуне с барб вниз"] # 0x2967 (en: 'leftwards harpoon with barb down above rightwards harpoon with barb down', google translation) + - "⥨": [t: "вправо гарпун с барб над левым гарпуном с барб"] # 0x2968 (en: 'rightwards harpoon with barb up above leftwards harpoon with barb up', google translation) + - "⥩": [t: "вправо гарпун с барб вниз над левым гарпуном с барб вниз"] # 0x2969 (en: 'rightwards harpoon with barb down above leftwards harpoon with barb down', google translation) + - "⥪": [t: "слева гарпун с барб наверху длинного хранения"] # 0x296a (en: 'leftwards harpoon with barb up above long dash', google translation) + - "⥫": [t: "слева гарпун с барб внизу длинной чертой"] # 0x296b (en: 'leftwards harpoon with barb down below long dash', google translation) + - "⥬": [t: "прямо гарпун с барб наверху длинной чертой"] # 0x296c (en: 'rightwards harpoon with barb up above long dash', google translation) + - "⥭": [t: "прямо гарпун с барб внизу длинной чертой"] # 0x296d (en: 'rightwards harpoon with barb down below long dash', google translation) + - "⥮": [t: "вверх по гарпуне с кобкой слева рядом с вниз по гарпуне с барком справа"] # 0x296e (en: 'upwards harpoon with barb left beside downwards harpoon with barb right', google translation) + - "⥯": [t: "вниз по гарпуне с кобкой слева рядом с горной вверх с барком справа"] # 0x296f (en: 'downwards harpoon with barb left beside upwards harpoon with barb right', google translation) + - "⥰": [t: "правая двойная стрелка с округлой головой"] # 0x2970 (en: 'right double arrow with rounded head', google translation) + - "⥱": [t: "равняется над стрельбой справа"] # 0x2971 (en: 'equals above rightwards arrow', google translation) + - "⥲": [t: "оператор тильде выше стрелы справа"] # 0x2972 (en: 'tilde operator above rightwards arrow', google translation) + - "⥳": [t: "стрелка влево над оператором тильды"] # 0x2973 (en: 'leftwards arrow above tilde operator', google translation) + - "⥴": [t: "стрелка вправо над оператором тильды"] # 0x2974 (en: 'rightwards arrow above tilde operator', google translation) + - "⥵": [t: "стрелка вправо выше почти равна"] # 0x2975 (en: 'rightwards arrow above almost equal to', google translation) + - "⥶": [t: "меньше, чем выше левой стрелы"] # 0x2976 (en: 'less than above leftwards arrow', google translation) + - "⥷": [t: "стрелка слева через меньше"] # 0x2977 (en: 'leftwards arrow through less than', google translation) + - "⥸": [t: "больше, чем выше, стрелка вправо"] # 0x2978 (en: 'greater than above rightwards arrow', google translation) + - "⥹": [t: "подмножество выше стрелки справа"] # 0x2979 (en: 'subset above rightwards arrow', google translation) + - "⥺": [t: "стрелка влево через подмножество"] # 0x297a (en: 'leftwards arrow through subset', google translation) + - "⥻": [t: "суперсет над стрелкой влево"] # 0x297b (en: 'superset above leftwards arrow', google translation) + - "⥼": [t: "оставил рыбный хвост"] # 0x297c (en: 'left fish tail', google translation) + - "⥽": [t: "правый рыбный хвост"] # 0x297d (en: 'right fish tail', google translation) + - "⥾": [t: "вверх по рыбному хвосту"] # 0x297e (en: 'up fish tail', google translation) + - "⥿": [t: "вниз по рыбному хвосту"] # 0x297f (en: 'down fish tail', google translation) + - "⦀": [t: "тройной вертикальный разделитель"] # 0x2980 (en: 'triple vertical bar delimiter', google translation) + - "⦁": [t: "z letation spot"] # 0x2981 (en: 'z notation spot', google translation) + - "⦂": [t: "z обозначения типа толстой кишки"] # 0x2982 (en: 'z notation type colon', google translation) + - "⦃": [t: "оставил белую скобу"] # 0x2983 (en: 'left white brace', google translation) + - "⦄": [t: "правая белая скоба"] # 0x2984 (en: 'right white brace', google translation) + - "⦅": [t: "левая белая скобкатиз"] # 0x2985 (en: 'left white parenthesis', google translation) + - "⦆": [t: "правый белый скол"] # 0x2986 (en: 'right white parenthesis', google translation) + - "⦇": [t: "z letation left image cracket"] # 0x2987 (en: 'z notation left image bracket', google translation) + - "⦈": [t: "z обозначения правильный кронштейн изображения"] # 0x2988 (en: 'z notation right image bracket', google translation) + - "⦉": [t: "z обозначения левого связующего кронштейна"] # 0x2989 (en: 'z notation left binding bracket', google translation) + - "⦊": [t: "z обозначение правого связующего кронштейна"] # 0x298a (en: 'z notation right binding bracket', google translation) + - "⦋": [t: "левый квадратный кронштейн с андербаром"] # 0x298b (en: 'left square bracket with underbar', google translation) + - "⦌": [t: "правый квадратный кронштейн с андербаром"] # 0x298c (en: 'right square bracket with underbar', google translation) + - "⦍": [t: "левый квадратный кронштейн с тиком в верхнем углу"] # 0x298d (en: 'left square bracket with tick in top corner', google translation) + - "⦎": [t: "правый квадратный кронштейн с клелем в нижнем углу"] # 0x298e (en: 'right square bracket with tick in bottom corner', google translation) + - "⦏": [t: "левый квадратный кронштейн с клелем в нижнем углу"] # 0x298f (en: 'left square bracket with tick in bottom corner', google translation) + - "⦐": [t: "правый квадратный кронштейн с тиком в верхнем углу"] # 0x2990 (en: 'right square bracket with tick in top corner', google translation) + - "⦑": [t: "левый угловой кронштейн с точкой"] # 0x2991 (en: 'left angle bracket with dot', google translation) + - "⦒": [t: "правой угловой кронштейн с точкой"] # 0x2992 (en: 'right angle bracket with dot', google translation) + - "⦓": [t: "левая дуга меньше, чем кронштейна"] # 0x2993 (en: 'left arc less than bracket', google translation) + - "⦔": [t: "правая дуга больше, чем кронштейна"] # 0x2994 (en: 'right arc greater than bracket', google translation) + - "⦕": [t: "двойная левая дуга больше, чем кронштейна"] # 0x2995 (en: 'double left arc greater than bracket', google translation) + - "⦖": [t: "двойная правая дуга меньше, чем кронштейна"] # 0x2996 (en: 'double right arc less than bracket', google translation) + - "⦗": [t: "оставленный черный кронштейн с панциркой черепахи"] # 0x2997 (en: 'left black tortoise shell bracket', google translation) + - "⦘": [t: "правый черный кронштейн shell"] # 0x2998 (en: 'right black tortoise shell bracket', google translation) + - "⦙": [t: "пунктирный забор"] # 0x2999 (en: 'dotted fence', google translation) + - "⦚": [t: "вертикальная зигзагообразная линия"] # 0x299a (en: 'vertical zigzag line', google translation) + - "⦛": [t: "измеренное угловое отверстие слева"] # 0x299b (en: 'measured angle opening left', google translation) + - "⦜": [t: "вариант правого угла с квадратом"] # 0x299c (en: 'right angle variant with square', google translation) + - "⦝": [t: "измеренный правый угол с точкой"] # 0x299d (en: 'measured right angle with dot', google translation) + - "⦞": [t: "угол с s внутри"] # 0x299e (en: 'angle with s inside', google translation) + - "⦟": [t: "острый угол"] # 0x299f (en: 'acute angle', google translation) + - "⦠": [t: "сферический угол открывается слева"] # 0x29a0 (en: 'spherical angle opening left', google translation) + - "⦡": [t: "сферический угол открывается"] # 0x29a1 (en: 'spherical angle opening up', google translation) + - "⦢": [t: "повернут угол"] # 0x29a2 (en: 'turned angle', google translation) + - "⦣": [t: "обратный угол"] # 0x29a3 (en: 'reversed angle', google translation) + - "⦤": [t: "угол с андербаром"] # 0x29a4 (en: 'angle with underbar', google translation) + - "⦥": [t: "обратный угол с помощью подножия"] # 0x29a5 (en: 'reversed angle with underbar', google translation) + - "⦦": [t: "косой угол открывается"] # 0x29a6 (en: 'oblique angle opening up', google translation) + - "⦧": [t: "косой угол открывается вниз"] # 0x29a7 (en: 'oblique angle opening down', google translation) + - "⦨": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей вверх и вправо"] # 0x29a8 (en: 'measured angle with open arm ending in arrow pointing up and to the right', google translation) + - "⦩": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей вверх и влево"] # 0x29a9 (en: 'measured angle with open arm ending in arrow pointing up and to the left', google translation) + - "⦪": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей вниз и вправо"] # 0x29aa (en: 'measured angle with open arm ending in arrow pointing down and to the right', google translation) + - "⦫": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей вниз и слева"] # 0x29ab (en: 'measured angle with open arm ending in arrow pointing down and to the left', google translation) + - "⦬": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей вправо и вверх"] # 0x29ac (en: 'measured angle with open arm ending in arrow pointing right and up', google translation) + - "⦭": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей влево и вверх"] # 0x29ad (en: 'measured angle with open arm ending in arrow pointing left and up', google translation) + - "⦮": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей вправо и вниз"] # 0x29ae (en: 'measured angle with open arm ending in arrow pointing right and down', google translation) + - "⦯": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей влево и вниз"] # 0x29af (en: 'measured angle with open arm ending in arrow pointing left and down', google translation) + - "⦰": [t: "обратный пустой набор"] # 0x29b0 (en: 'reversed empty set', google translation) + - "⦱": [t: "пустой набор с overbar"] # 0x29b1 (en: 'empty set with overbar', google translation) + - "⦲": [t: "пустой набор с небольшим кругом выше"] # 0x29b2 (en: 'empty set with small circle above', google translation) + - "⦳": [t: "пустой набор со стрелкой вправо выше"] # 0x29b3 (en: 'empty set with right arrow above', google translation) + - "⦴": [t: "пустой набор со стрелкой левой выше"] # 0x29b4 (en: 'empty set with left arrow above', google translation) + - "⦵": [t: "круг с горизонтальным баром"] # 0x29b5 (en: 'circle with horizontal bar', google translation) + - "⦶": [t: "обведенный вертикальным баром"] # 0x29b6 (en: 'circled vertical bar', google translation) + - "⦷": [t: "обведенный параллельно"] # 0x29b7 (en: 'circled parallel', google translation) + - "⦸": [t: "circled reverse solidus"] # 0x29b8 (google translation) + - "⦹": [t: "обведенный перпендикулярным"] # 0x29b9 (en: 'circled perpendicular', google translation) + - "⦺": [t: "circled, разделенная горизонтальной стержней и верхней половиной, разделенной на вертикальный стержень"] # 0x29ba (en: 'circled divided by horizontal bar and top half divided by vertical bar', google translation) + - "⦻": [t: "круг с наложением x"] # 0x29bb (en: 'circle with superimposed x', google translation) + - "⦼": [t: "объисхоженная против часовой стрелки по вращению знака дивизии"] # 0x29bc (en: 'circled anticlockwise rotated division sign', google translation) + - "⦽": [t: "вверх стрелой через круг"] # 0x29bd (en: 'up arrow through circle', google translation) + - "⦾": [t: "обведенная белая пуля"] # 0x29be (en: 'circled white bullet', google translation) + - "⦿": [t: "кружная пуля"] # 0x29bf (en: 'circled bullet', google translation) + - "⧀": [t: "кружит меньше, чем"] # 0x29c0 (en: 'circled less than', google translation) + - "⧁": [t: "обведенный больше, чем"] # 0x29c1 (en: 'circled greater than', google translation) + - "⧂": [t: "круг с маленьким кругом справа"] # 0x29c2 (en: 'circle with small circle to the right', google translation) + - "⧃": [t: "обведите с двумя горизонтальными ударами справа"] # 0x29c3 (en: 'circle with two horizontal strokes to the right', google translation) + - "⧄": [t: "квадратная растущая диагональная черта"] # 0x29c4 (en: 'squared rising diagonal slash', google translation) + - "⧅": [t: "квадратная падающая диагональная черта"] # 0x29c5 (en: 'squared falling diagonal slash', google translation) + - "⧆": [t: "квадратная звездочка"] # 0x29c6 (en: 'squared asterisk', google translation) + - "⧇": [t: "квадратный маленький круг"] # 0x29c7 (en: 'squared small circle', google translation) + - "⧈": [t: "квадратный квадрат"] # 0x29c8 (en: 'squared square', google translation) + - "⧉": [t: "двое присоединились к квадратам"] # 0x29c9 (en: 'two joined squares', google translation) + - "⧊": [t: "треугольник с точкой выше"] # 0x29ca (en: 'triangle with dot above', google translation) + - "⧋": [t: "треугольник с верхней частью"] # 0x29cb (en: 'triangle with underbar', google translation) + - "⧌": [t: "s в треугольнике"] # 0x29cc (en: 's in triangle', google translation) + - "⧍": [t: "треугольник с засечками внизу"] # 0x29cd (en: 'triangle with serifs at bottom', google translation) + - "⧎": [t: "правый треугольник над левым треугольником"] # 0x29ce (en: 'right triangle above left triangle', google translation) + - "⧏": [t: "левый треугольник рядом с вертикальным баром"] # 0x29cf (en: 'left triangle beside vertical bar', google translation) + - "⧐": [t: "вертикальный батончик рядом с правым треугольником"] # 0x29d0 (en: 'vertical bar beside right triangle', google translation) + - "⧑": [t: "боути с левой половиной черной"] # 0x29d1 (en: 'bowtie with left half black', google translation) + - "⧒": [t: "боути с правой половиной черной"] # 0x29d2 (en: 'bowtie with right half black', google translation) + - "⧓": [t: "черный бабочка"] # 0x29d3 (en: 'black bowtie', google translation) + - "⧔": [t: "раз с левой половиной черной"] # 0x29d4 (en: 'times with left half black', google translation) + - "⧕": [t: "раз с правой половиной черной"] # 0x29d5 (en: 'times with right half black', google translation) + - "⧖": [t: "белые дни"] # 0x29d6 (en: 'white hourglass', google translation) + - "⧗": [t: "черные песочные часы"] # 0x29d7 (en: 'black hourglass', google translation) + - "⧘": [t: "оставил вигги"] # 0x29d8 (en: 'left wiggly fence', google translation) + - "⧙": [t: "правый шаткий забор"] # 0x29d9 (en: 'right wiggly fence', google translation) + - "⧚": [t: "оставил двойной шаткий забор"] # 0x29da (en: 'left double wiggly fence', google translation) + - "⧛": [t: "правый двойной забор"] # 0x29db (en: 'right double wiggly fence', google translation) + - "⧜": [t: "неполная бесконечность"] # 0x29dc (en: 'incomplete infinity', google translation) + - "⧝": [t: "связывать бесконечность"] # 0x29dd (en: 'tie over infinity', google translation) + - "⧞": [t: "бесконечность отрицается с вертикальной стержней"] # 0x29de (en: 'infinity negated with vertical bar', google translation) + - "⧟": [t: "двойной многократный мультимап"] # 0x29df (en: 'double-ended multimap', google translation) + - "⧠": [t: "квадрат с контурированным контуром"] # 0x29e0 (en: 'square with contoured outline', google translation) + - "⧡": [t: "увеличивается как"] # 0x29e1 (en: 'increases as', google translation) + - "⧢": [t: "перетасовать продукт"] # 0x29e2 (en: 'shuffle product', google translation) + - "⧣": [t: "равняется знаку и наклонной параллели"] # 0x29e3 (en: 'equals sign and slanted parallel', google translation) + - "⧤": [t: "равняется знаку и наклонной параллельно с тильдой выше"] # 0x29e4 (en: 'equals sign and slanted parallel with tilde above', google translation) + - "⧥": [t: "идентично и наклонной параллельно"] # 0x29e5 (en: 'identical to and slanted parallel', google translation) + - "⧦": [t: "глейх старк"] # 0x29e6 (en: 'gleich stark', google translation) + - "⧧": [t: "термодинамический"] # 0x29e7 (en: 'thermodynamic', google translation) + - "⧨": [t: "вниз по направлению треугольника с левой половиной черной"] # 0x29e8 (en: 'down pointing triangle with left half black', google translation) + - "⧩": [t: "вниз по указанию треугольника с правой половиной черной"] # 0x29e9 (en: 'down pointing triangle with right half black', google translation) + - "⧪": [t: "черный бриллиант со стрелой"] # 0x29ea (en: 'black diamond with down arrow', google translation) + - "⧫": [t: "черный ронник"] # 0x29eb (en: 'black lozenge', google translation) + - "⧬": [t: "белый круг со стрелой вниз"] # 0x29ec (en: 'white circle with down arrow', google translation) + - "⧭": [t: "черный круг со стрелой вниз"] # 0x29ed (en: 'black circle with down arrow', google translation) + - "⧮": [t: "ошибка белой квадраты"] # 0x29ee (en: 'error-barred white square', google translation) + - "⧯": [t: "ошибка, черный квадрат"] # 0x29ef (en: 'error-barred black square', google translation) + - "⧰": [t: "ошибка белого алмаза"] # 0x29f0 (en: 'error-barred white diamond', google translation) + - "⧱": [t: "ошибка с черным бриллиантом"] # 0x29f1 (en: 'error-barred black diamond', google translation) + - "⧲": [t: "ошибка белого круга"] # 0x29f2 (en: 'error-barred white circle', google translation) + - "⧳": [t: "ошибка, черный круг"] # 0x29f3 (en: 'error-barred black circle', google translation) + - "⧴": [t: "задерживается правилом"] # 0x29f4 (en: 'rule-delayed', google translation) + - "⧵": [t: "обратный оператор solidus"] # 0x29f5 (en: 'reverse solidus operator', google translation) + - "⧶": [t: "solidus с overbar"] # 0x29f6 (en: 'solidus with overbar', google translation) + - "⧷": [t: "обратный солидус с горизонтальным ходом"] # 0x29f7 (en: 'reverse solidus with horizontal stroke', google translation) + - "⧸": [t: "большой солис"] # 0x29f8 (en: 'big solidus', google translation) + - "⧹": [t: "большой обратный солидус"] # 0x29f9 (en: 'big reverse solidus', google translation) + - "⧺": [t: "двойной плюс"] # 0x29fa (en: 'double plus', google translation) + - "⧻": [t: "тройной плюс"] # 0x29fb (en: 'triple plus', google translation) + - "⧼": [t: "влево укажите изогнутый угловой кронштейн"] # 0x29fc (en: 'left pointing curved angle bracket', google translation) + - "⧽": [t: "право указывает на изогнутый угловой кронштейн"] # 0x29fd (en: 'right pointing curved angle bracket', google translation) + - "⧾": [t: "крошечный"] # 0x29fe (en: 'tiny', google translation) + - "⧿": [t: "мин"] # 0x29ff (en: 'miny', google translation) + - "⨀": [t: "circled dot operator"] # 0x2a00 (google translation) + - "⨁": [t: "circled plus operator"] # 0x2a01 (google translation) + - "⨂": [t: "оператор times circled"] # 0x2a02 (en: 'circled times operator', google translation) + - "⨃": [t: "оператор профсоюза с dot"] # 0x2a03 (en: 'union operator with dot', google translation) + - "⨄": [t: "оператор профсоюза с плюсом"] # 0x2a04 (en: 'union operator with plus', google translation) + - "⨅": [t: "квадратный перекрестный оператор"] # 0x2a05 (en: 'square intersection operator', google translation) + - "⨆": [t: "оператор square union"] # 0x2a06 (en: 'square union operator', google translation) + - "⨇": [t: "два логических и оператор"] # 0x2a07 (en: 'two logical and operator', google translation) + - "⨈": [t: "два логичных или оператор"] # 0x2a08 (en: 'two logical or operator', google translation) + - "⨉": [t: "времена оператор"] # 0x2a09 (en: 'times operator', google translation) + - "⨊": [t: "модуле две суммы"] # 0x2a0a (en: 'modulo two sum', google translation) + - "⨋": [t: "суммирование с интегральным"] # 0x2a0b (en: 'summation with integral', google translation) + - "⨌": [t: "четырехкратный интегральный оператор"] # 0x2a0c (en: 'quadruple integral operator', google translation) + - "⨍": [t: "конечная часть интеграла"] # 0x2a0d (en: 'finite part integral', google translation) + - "⨎": [t: "интеграл с двойным ходом"] # 0x2a0e (en: 'integral with double stroke', google translation) + - "⨏": [t: "интегральный средний со слэш"] # 0x2a0f (en: 'integral average with slash', google translation) + - "⨐": [t: "функция циркуляции"] # 0x2a10 (en: 'circulation function', google translation) + - "⨑": [t: "против часовой стрельбы интеграция"] # 0x2a11 (en: 'anticlockwise integration', google translation) + - "⨒": [t: "линейная интеграция с прямоугольным путем вокруг полюса"] # 0x2a12 (en: 'line integration with rectangular path around pole', google translation) + - "⨓": [t: "линейная интеграция с полукруглым путем вокруг полюса"] # 0x2a13 (en: 'line integration with semicircular path around pole', google translation) + - "⨔": [t: "линейная интеграция не включая полюс"] # 0x2a14 (en: 'line integration not including the pole', google translation) + - "⨕": [t: "интеграл вокруг оператора точек"] # 0x2a15 (en: 'integral around a point operator', google translation) + - "⨖": [t: "интегральный оператор quaternion"] # 0x2a16 (en: 'quaternion integral operator', google translation) + - "⨗": [t: "интеграл со стрелкой левой с крючком"] # 0x2a17 (en: 'integral with leftwards arrow with hook', google translation) + - "⨘": [t: "интеграл с знаком times"] # 0x2a18 (en: 'integral with times sign', google translation) + - "⨙": [t: "интеграл с пересечением"] # 0x2a19 (en: 'integral with intersection', google translation) + - "⨚": [t: "интеграл с профсоюзом"] # 0x2a1a (en: 'integral with union', google translation) + - "⨛": [t: "интеграл с overbar"] # 0x2a1b (en: 'integral with overbar', google translation) + - "⨜": [t: "интеграл с underbar"] # 0x2a1c (en: 'integral with underbar', google translation) + - "⨝": [t: "присоединиться"] # 0x2a1d (en: 'join', google translation) + - "⨞": [t: "большой левый оператор треугольника"] # 0x2a1e (en: 'large left triangle operator', google translation) + - "⨟": [t: "z состав схемы записей"] # 0x2a1f (en: 'z notation schema composition', google translation) + - "⨠": [t: "z схема записей"] # 0x2a20 (en: 'z notation schema piping', google translation) + - "⨡": [t: "z проекция схемы нотации"] # 0x2a21 (en: 'z notation schema projection', google translation) + - "⨢": [t: "плюс знак с кругом выше"] # 0x2a22 (en: 'plus sign with circle above', google translation) + - "⨣": [t: "плюс знак с акцентом на округ"] # 0x2a23 (en: 'plus sign with circumflex accent above', google translation) + - "⨤": [t: "плюс знак с тильдой выше"] # 0x2a24 (en: 'plus sign with tilde above', google translation) + - "⨥": [t: "плюс знак с точкой ниже"] # 0x2a25 (en: 'plus sign with dot below', google translation) + - "⨦": [t: "плюс знак с тильдой ниже"] # 0x2a26 (en: 'plus sign with tilde below', google translation) + - "⨧": [t: "плюс знак с подписанием второго"] # 0x2a27 (en: 'plus sign with subscript two', google translation) + - "⨨": [t: "плюс знак с черным треугольником"] # 0x2a28 (en: 'plus sign with black triangle', google translation) + - "⨩": [t: "знак минус с запятой выше"] # 0x2a29 (en: 'minus sign with comma above', google translation) + - "⨪": [t: "знак минус с точкой ниже"] # 0x2a2a (en: 'minus sign with dot below', google translation) + - "⨫": [t: "знак минус с падающими точками"] # 0x2a2b (en: 'minus sign with falling dots', google translation) + - "⨬": [t: "знак минус с растущими точками"] # 0x2a2c (en: 'minus sign with rising dots', google translation) + - "⨭": [t: "плюс войти в левый половинный круг"] # 0x2a2d (en: 'plus sign in left half circle', google translation) + - "⨮": [t: "плюс войти в правый половинный круг"] # 0x2a2e (en: 'plus sign in right half circle', google translation) + - "⨯": # 0x2a2f + - test: + if: "$Verbosity='Terse'" + then: [t: "крест"] # (en: 'cross', google translation) + else: [t: "кросс -продукт"] # (en: 'cross product', google translation) + - "⨰": [t: "знак умножения с точкой выше"] # 0x2a30 (en: 'multiplication sign with dot above', google translation) + - "⨱": [t: "знак умножения с помощью подножия"] # 0x2a31 (en: 'multiplication sign with underbar', google translation) + - "⨲": [t: "семидажный продукт с нижней частью закрыта"] # 0x2a32 (en: 'semidirect product with bottom closed', google translation) + - "⨳": [t: "разбить продукт"] # 0x2a33 (en: 'smash product', google translation) + - "⨴": [t: "знак умножения в левом половине круга"] # 0x2a34 (en: 'multiplication sign in left half circle', google translation) + - "⨵": [t: "умножение подписывает правый половину круга"] # 0x2a35 (en: 'multiplication sign in right half circle', google translation) + - "⨶": [t: "кольвный знак умножения с акцентом на округ"] # 0x2a36 (en: 'circled multiplication sign with circumflex accent', google translation) + - "⨷": [t: "знак умножения в двойном круге"] # 0x2a37 (en: 'multiplication sign in double circle', google translation) + - "⨸": [t: "знак окружающего дивизиона"] # 0x2a38 (en: 'circled division sign', google translation) + - "⨹": [t: "плюс знак в треугольнике"] # 0x2a39 (en: 'plus sign in triangle', google translation) + - "⨺": [t: "минус знак в треугольнике"] # 0x2a3a (en: 'minus sign in triangle', google translation) + - "⨻": [t: "знак умножения в треугольнике"] # 0x2a3b (en: 'multiplication sign in triangle', google translation) + - "⨼": [t: "интерьер продукт"] # 0x2a3c (en: 'interior product', google translation) + - "⨽": [t: "ремьер внутренний продукт"] # 0x2a3d (en: 'righthand interior product', google translation) + - "⨾": [t: "z обозначения реляционного состава"] # 0x2a3e (en: 'z notation relational composition', google translation) + - "⨿": [t: "объединение или совместный"] # 0x2a3f (en: 'amalgamation or coproduct', google translation) + - "⩀": [t: "пересечение с точкой"] # 0x2a40 (en: 'intersection with dot', google translation) + - "⩁": [t: "союз с минус знак"] # 0x2a41 (en: 'union with minus sign', google translation) + - "⩂": [t: "союз с overbar"] # 0x2a42 (en: 'union with overbar', google translation) + - "⩃": [t: "пересечение с overbar"] # 0x2a43 (en: 'intersection with overbar', google translation) + - "⩄": [t: "пересечение с логическим и"] # 0x2a44 (en: 'intersection with logical and', google translation) + - "⩅": [t: "союз с логическим или"] # 0x2a45 (en: 'union with logical or', google translation) + - "⩆": [t: "союз выше пересечения"] # 0x2a46 (en: 'union above intersection', google translation) + - "⩇": [t: "пересечение над союзом"] # 0x2a47 (en: 'intersection above union', google translation) + - "⩈": [t: "союз над решеткой над перекрестком"] # 0x2a48 (en: 'union above bar above intersection', google translation) + - "⩉": [t: "пересечение над решеткой над союзом"] # 0x2a49 (en: 'intersection above bar above union', google translation) + - "⩊": [t: "союз рядом и присоединился к профсоюзам"] # 0x2a4a (en: 'union beside and joined with union', google translation) + - "⩋": [t: "пересечение рядом и соединяется с перекрестком"] # 0x2a4b (en: 'intersection beside and joined with intersection', google translation) + - "⩌": [t: "закрыт союз со скидками"] # 0x2a4c (en: 'closed union with serifs', google translation) + - "⩍": [t: "закрыто пересечение с засечками"] # 0x2a4d (en: 'closed intersection with serifs', google translation) + - "⩎": [t: "двойной квадратный перекресток"] # 0x2a4e (en: 'double square intersection', google translation) + - "⩏": [t: "двойной квадратный союз"] # 0x2a4f (en: 'double square union', google translation) + - "⩐": [t: "закрыт союз с засечками и разбейте продукт"] # 0x2a50 (en: 'closed union with serifs and smash product', google translation) + - "⩑": [t: "логично и с точкой выше"] # 0x2a51 (en: 'logical and with dot above', google translation) + - "⩒": [t: "логично или с точкой выше"] # 0x2a52 (en: 'logical or with dot above', google translation) + - "⩓": [t: "двойной логический и"] # 0x2a53 (en: 'double logical and', google translation) + - "⩔": [t: "двойной логический или"] # 0x2a54 (en: 'double logical or', google translation) + - "⩕": [t: "два пересекающихся логических и"] # 0x2a55 (en: 'two intersecting logical and', google translation) + - "⩖": [t: "два пересекающихся логических или"] # 0x2a56 (en: 'two intersecting logical or', google translation) + - "⩗": [t: "наклонение большого или"] # 0x2a57 (en: 'sloping large or', google translation) + - "⩘": [t: "наклонение большого и"] # 0x2a58 (en: 'sloping large and', google translation) + - "⩙": [t: "логичный или перекрывающийся логический и"] # 0x2a59 (en: 'logical or overlapping logical and', google translation) + - "⩚": [t: "логично и со средним стеблем"] # 0x2a5a (en: 'logical and with middle stem', google translation) + - "⩛": [t: "логично или со средним стеблем"] # 0x2a5b (en: 'logical or with middle stem', google translation) + - "⩜": [t: "логично и с горизонтальной чертой"] # 0x2a5c (en: 'logical and with horizontal dash', google translation) + - "⩝": [t: "логично или с горизонтальной чертой"] # 0x2a5d (en: 'logical or with horizontal dash', google translation) + - "⩞": [t: "логично и с двойной верхней"] # 0x2a5e (en: 'logical and with double overbar', google translation) + - "⩟": [t: "логично и с андербаром"] # 0x2a5f (en: 'logical and with underbar', google translation) + - "⩠": [t: "логично и с двойной подношкой"] # 0x2a60 (en: 'logical and with double underbar', google translation) + - "⩡": [t: "маленький век с верхней частью"] # 0x2a61 (en: 'small vee with underbar', google translation) + - "⩢": [t: "логично или с двойной верхней"] # 0x2a62 (en: 'logical or with double overbar', google translation) + - "⩣": [t: "логично или с двойной подношкой"] # 0x2a63 (en: 'logical or with double underbar', google translation) + - "⩤": [t: "z обозначения домена антиоритет"] # 0x2a64 (en: 'z notation domain antirestriction', google translation) + - "⩥": [t: "z обозначения диапазона антиреализации"] # 0x2a65 (en: 'z notation range antirestriction', google translation) + - "⩦": [t: "соответствует знаку с точкой ниже"] # 0x2a66 (en: 'equals sign with dot below', google translation) + - "⩧": [t: "идентично dot выше"] # 0x2a67 (en: 'identical with dot above', google translation) + - "⩨": [t: "тройной горизонтальный стержень с двойным вертикальным ходом"] # 0x2a68 (en: 'triple horizontal bar with double vertical stroke', google translation) + - "⩩": [t: "тройной горизонтальный бар с тройным вертикальным ходом"] # 0x2a69 (en: 'triple horizontal bar with triple vertical stroke', google translation) + - "⩪": [t: "оператор тильде с точкой выше"] # 0x2a6a (en: 'tilde operator with dot above', google translation) + - "⩫": [t: "оператор тильде с ростами точками"] # 0x2a6b (en: 'tilde operator with rising dots', google translation) + - "⩬": [t: "аналогично минус аналогично"] # 0x2a6c (en: 'similar minus similar', google translation) + - "⩭": [t: "конгруэнтен с точкой выше"] # 0x2a6d (en: 'congruent with dot above', google translation) + - "⩮": [t: "равняется звездочке"] # 0x2a6e (en: 'equals with asterisk', google translation) + - "⩯": [t: "почти равен с обходом акцента"] # 0x2a6f (en: 'almost equal to with circumflex accent', google translation) + - "⩰": [t: "приблизительно равен или равен"] # 0x2a70 (en: 'approximately equal to or equal to', google translation) + - "⩱": [t: "равна знаку выше плюс знак"] # 0x2a71 (en: 'equals sign above plus sign', google translation) + - "⩲": [t: "плюс знак выше равняется знаку"] # 0x2a72 (en: 'plus sign above equals sign', google translation) + - "⩳": [t: "соответствует знаку над оператором тильды"] # 0x2a73 (en: 'equals sign above tilde operator', google translation) + - "⩴": [t: "двойная толстая кишка равна"] # 0x2a74 (en: 'double colon equal', google translation) + - "⩵": [t: "два последовательных признаков"] # 0x2a75 (en: 'two consecutive equals signs', google translation) + - "⩶": [t: "три последовательных признаков"] # 0x2a76 (en: 'three consecutive equals signs', google translation) + - "⩷": [t: "соответствует знаку с двумя точками выше и две точки ниже"] # 0x2a77 (en: 'equals sign with two dots above and two dots below', google translation) + - "⩸": [t: "эквивалент с четырьмя точками выше"] # 0x2a78 (en: 'equivalent with four dots above', google translation) + - "⩹": [t: "меньше, чем с кругом внутри"] # 0x2a79 (en: 'less than with circle inside', google translation) + - "⩺": [t: "больше, чем с кругом внутри"] # 0x2a7a (en: 'greater than with circle inside', google translation) + - "⩻": [t: "меньше, чем с вопросом выше"] # 0x2a7b (en: 'less than with question mark above', google translation) + - "⩼": [t: "больше, чем с вопросительным знаком выше"] # 0x2a7c (en: 'greater than with question mark above', google translation) + - "⩽": [t: "меньше, чем или наклонен равен"] # 0x2a7d (en: 'less than or slanted equal to', google translation) + - "⩾": [t: "больше, чем или наклонен равен"] # 0x2a7e (en: 'greater than or slanted equal to', google translation) + - "⩿": [t: "меньше, чем или наклонен, равный точкой внутри"] # 0x2a7f (en: 'less than or slanted equal to with dot inside', google translation) + - "⪀": [t: "больше, чем или наклонен, равный точкой внутри"] # 0x2a80 (en: 'greater than or slanted equal to with dot inside', google translation) + - "⪁": [t: "меньше, чем или наклонен, равный точкой выше"] # 0x2a81 (en: 'less than or slanted equal to with dot above', google translation) + - "⪂": [t: "больше, чем или наклонен, равным точке выше"] # 0x2a82 (en: 'greater than or slanted equal to with dot above', google translation) + - "⪃": [t: "меньше, чем или наклонен, равный точкой вверху справа"] # 0x2a83 (en: 'less than or slanted equal to with dot above right', google translation) + - "⪄": [t: "больше, чем или наклонен, равный точкой вверху слева"] # 0x2a84 (en: 'greater than or slanted equal to with dot above left', google translation) + - "⪅": [t: "меньше или приблизительно"] # 0x2a85 (en: 'less than or approximate', google translation) + - "⪆": [t: "больше или приблизительно"] # 0x2a86 (en: 'greater than or approximate', google translation) + - "⪇": [t: "меньше, чем и одна строка не равна"] # 0x2a87 (en: 'less than and single line not equal to', google translation) + - "⪈": [t: "больше и единственная линия не равна"] # 0x2a88 (en: 'greater than and single line not equal to', google translation) + - "⪉": [t: "меньше, чем и не приблизительно"] # 0x2a89 (en: 'less than and not approximate', google translation) + - "⪊": [t: "больше, чем и не приблизительно"] # 0x2a8a (en: 'greater than and not approximate', google translation) + - "⪋": [t: "меньше, чем выше двойной линии, равна выше, чем"] # 0x2a8b (en: 'less than above double line equal above greater than', google translation) + - "⪌": [t: "больше, чем выше, двойная линия равна выше меньше, чем"] # 0x2a8c (en: 'greater than above double line equal above less than', google translation) + - "⪍": [t: "меньше, чем выше, похожие или равные"] # 0x2a8d (en: 'less than above similar or equal', google translation) + - "⪎": [t: "больше, чем выше, похожие или равные"] # 0x2a8e (en: 'greater than above similar or equal', google translation) + - "⪏": [t: "меньше, чем выше, больше выше, чем"] # 0x2a8f (en: 'less than above similar above greater than', google translation) + - "⪐": [t: "больше, чем выше, подобно выше меньше, чем"] # 0x2a90 (en: 'greater than above similar above less than', google translation) + - "⪑": [t: "меньше, чем выше, чем выше, двойная линия равна"] # 0x2a91 (en: 'less than above greater than above double line equal', google translation) + - "⪒": [t: "больше, чем выше, меньше, чем выше, двойная линия равна"] # 0x2a92 (en: 'greater than above less than above double line equal', google translation) + - "⪓": [t: "меньше, чем выше наклонного, равного выше выше, чем выше, наклонное, равное"] # 0x2a93 (en: 'less than above slanted equal above greater than above slanted equal', google translation) + - "⪔": [t: "больше, чем выше, наклонное, равное выше, чем выше выше, наклоненного равных"] # 0x2a94 (en: 'greater than above slanted equal above less than above slanted equal', google translation) + - "⪕": [t: "наклонен равен или меньше"] # 0x2a95 (en: 'slanted equal to or less than', google translation) + - "⪖": [t: "наклонен равен или больше"] # 0x2a96 (en: 'slanted equal to or greater than', google translation) + - "⪗": [t: "наклонен равен или меньше, чем с точкой внутри"] # 0x2a97 (en: 'slanted equal to or less than with dot inside', google translation) + - "⪘": [t: "наклонен равен или больше, чем с точкой внутри"] # 0x2a98 (en: 'slanted equal to or greater than with dot inside', google translation) + - "⪙": [t: "двойная линия, равная или меньше"] # 0x2a99 (en: 'double line equal to or less than', google translation) + - "⪚": [t: "двойная линия, равная или больше"] # 0x2a9a (en: 'double line equal to or greater than', google translation) + - "⪛": [t: "двойная линия наклонена, равна или меньше"] # 0x2a9b (en: 'double line slanted equal to or less than', google translation) + - "⪜": [t: "двойная линия наклонена, равна или больше"] # 0x2a9c (en: 'double line slanted equal to or greater than', google translation) + - "⪝": [t: "аналогично или меньше"] # 0x2a9d (en: 'similar or less than', google translation) + - "⪞": [t: "аналогично или больше, чем"] # 0x2a9e (en: 'similar or greater than', google translation) + - "⪟": [t: "аналогично выше, чем выше, равна знаку"] # 0x2a9f (en: 'similar above less than above equals sign', google translation) + - "⪠": [t: "аналогично выше, чем выше, равна знаку"] # 0x2aa0 (en: 'similar above greater than above equals sign', google translation) + - "⪡": [t: "двойной вложенной меньше, чем"] # 0x2aa1 (en: 'double nested less than', google translation) + - "⪢": [t: "двойной вложенной больше, чем"] # 0x2aa2 (en: 'double nested greater than', google translation) + - "⪣": [t: "двойной вложенной меньше, чем с поднятой"] # 0x2aa3 (en: 'double nested less than with underbar', google translation) + - "⪤": [t: "больше, чем перекрывание меньше, чем"] # 0x2aa4 (en: 'greater than overlapping less than', google translation) + - "⪥": [t: "больше, чем помимо меньше"] # 0x2aa5 (en: 'greater than beside less than', google translation) + - "⪦": [t: "менее, чем закрыто по кривой"] # 0x2aa6 (en: 'less than closed by curve', google translation) + - "⪧": [t: "больше, чем закрыто кривой"] # 0x2aa7 (en: 'greater than closed by curve', google translation) + - "⪨": [t: "менее, чем закрыто кривой выше наклонной равной"] # 0x2aa8 (en: 'less than closed by curve above slanted equal', google translation) + - "⪩": [t: "больше, чем закрыто кривой выше наклонного равного"] # 0x2aa9 (en: 'greater than closed by curve above slanted equal', google translation) + - "⪪": [t: "меньше, чем"] # 0x2aaa (en: 'smaller than', google translation) + - "⪫": [t: "больше, чем"] # 0x2aab (en: 'larger than', google translation) + - "⪬": [t: "меньше, чем или равно"] # 0x2aac (en: 'smaller than or equal to', google translation) + - "⪭": [t: "больше или равного"] # 0x2aad (en: 'larger than or equal to', google translation) + - "⪮": [t: "равняется знаку с ухабкой выше"] # 0x2aae (en: 'equals sign with bumpy above', google translation) + - "⪯": [t: "предшествующее выше одной линии равняется знаку"] # 0x2aaf (en: 'precedes above single line equals sign', google translation) + - "⪰": [t: "успех выше одной линии, равным знаку"] # 0x2ab0 (en: 'succeeds above single line equals sign', google translation) + - "⪱": [t: "предшествует над одной линией не равна"] # 0x2ab1 (en: 'precedes above single line not equal to', google translation) + - "⪲": [t: "преуспевает над одной линией не равна"] # 0x2ab2 (en: 'succeeds above single line not equal to', google translation) + - "⪳": [t: "предыдущие выше равны знака"] # 0x2ab3 (en: 'precedes above equals sign', google translation) + - "⪴": [t: "успех выше равняется знаку"] # 0x2ab4 (en: 'succeeds above equals sign', google translation) + - "⪵": [t: "предшествует выше, а не равно"] # 0x2ab5 (en: 'precedes above not equal to', google translation) + - "⪶": [t: "преуспевает выше не равных"] # 0x2ab6 (en: 'succeeds above not equal to', google translation) + - "⪷": [t: "предшествует выше почти равного"] # 0x2ab7 (en: 'precedes above almost equal to', google translation) + - "⪸": [t: "превышает почти равные"] # 0x2ab8 (en: 'succeeds above almost equal to', google translation) + - "⪹": [t: "предшествует выше почти равных"] # 0x2ab9 (en: 'precedes above not almost equal to', google translation) + - "⪺": [t: "преуспевает выше почти равным"] # 0x2aba (en: 'succeeds above not almost equal to', google translation) + - "⪻": [t: "двойной предшествующий"] # 0x2abb (en: 'double precedes', google translation) + - "⪼": [t: "двойной успех"] # 0x2abc (en: 'double succeeds', google translation) + - "⪽": [t: "подмножество с точкой"] # 0x2abd (en: 'subset with dot', google translation) + - "⪾": [t: "суперсет с точкой"] # 0x2abe (en: 'superset with dot', google translation) + - "⪿": [t: "подмножество с плюсом знаком ниже"] # 0x2abf (en: 'subset with plus sign below', google translation) + - "⫀": [t: "superset с плюсом знаком ниже"] # 0x2ac0 (en: 'superset with plus sign below', google translation) + - "⫁": [t: "подмножество с указанием умножения ниже"] # 0x2ac1 (en: 'subset with multiplication sign below', google translation) + - "⫂": [t: "суперсет с знаком умножения ниже"] # 0x2ac2 (en: 'superset with multiplication sign below', google translation) + - "⫃": [t: "подмножество или равное точке выше"] # 0x2ac3 (en: 'subset of or equal to with dot above', google translation) + - "⫄": [t: "суперсет или равный с точкой выше"] # 0x2ac4 (en: 'superset of or equal to with dot above', google translation) + - "⫅": [t: "подмножество вышеупомянутого знака"] # 0x2ac5 (en: 'subset of above equals sign', google translation) + - "⫆": [t: "суперсет выше, равным знаку"] # 0x2ac6 (en: 'superset of above equals sign', google translation) + - "⫇": [t: "подмножество вышеупомянутого оператора тильды"] # 0x2ac7 (en: 'subset of above tilde operator', google translation) + - "⫈": [t: "суперсет выше оператора тильде"] # 0x2ac8 (en: 'superset of above tilde operator', google translation) + - "⫉": [t: "подмножество выше почти равного"] # 0x2ac9 (en: 'subset of above almost equal to', google translation) + - "⫊": [t: "суперсет выше почти равный"] # 0x2aca (en: 'superset of above almost equal to', google translation) + - "⫋": [t: "подмножество выше не равное"] # 0x2acb (en: 'subset above not equal to', google translation) + - "⫌": [t: "суперсет выше не равен"] # 0x2acc (en: 'superset of above not equal to', google translation) + - "⫍": [t: "квадратный левый оператор открытой коробки"] # 0x2acd (en: 'square left open box operator', google translation) + - "⫎": [t: "квадратный правый оператор открытой коробки"] # 0x2ace (en: 'square right open box operator', google translation) + - "⫏": [t: "закрытый подмножество"] # 0x2acf (en: 'closed subset', google translation) + - "⫐": [t: "закрытый суперсет"] # 0x2ad0 (en: 'closed superset', google translation) + - "⫑": [t: "закрытое подмножество или равное"] # 0x2ad1 (en: 'closed subset or equal to', google translation) + - "⫒": [t: "закрытый суперсет или равен"] # 0x2ad2 (en: 'closed superset or equal to', google translation) + - "⫓": [t: "подмножество над суперсетом"] # 0x2ad3 (en: 'subset above superset', google translation) + - "⫔": [t: "суперсет выше подмножества"] # 0x2ad4 (en: 'superset above subset', google translation) + - "⫕": [t: "подмножество выше подмножества"] # 0x2ad5 (en: 'subset above subset', google translation) + - "⫖": [t: "суперсет над суперсет"] # 0x2ad6 (en: 'superset above superset', google translation) + - "⫗": [t: "суперсет рядом с подмножества"] # 0x2ad7 (en: 'superset beside subset', google translation) + - "⫘": [t: "суперсет рядом и присоединился к dash с подмножеством"] # 0x2ad8 (en: 'superset beside and joined by dash with subset', google translation) + - "⫙": [t: "элемент открытия вниз"] # 0x2ad9 (en: 'element of opening downwards', google translation) + - "⫚": [t: "pitchfork с tee top"] # 0x2ada (en: 'pitchfork with tee top', google translation) + - "⫛": [t: "поперечное перекресток"] # 0x2adb (en: 'transversal intersection', google translation) + - "⫝̸": [t: "разбрызгивание"] # 0x2adc (en: 'forking', google translation) + - "⫝": [t: "не призванное"] # 0x2add (en: 'nonforking', google translation) + - "⫞": [t: "короткий левый притяжение"] # 0x2ade (en: 'short left tack', google translation) + - "⫟": [t: "краткий удар"] # 0x2adf (en: 'short down tack', google translation) + - "⫠": [t: "краткий притяжение"] # 0x2ae0 (en: 'short up tack', google translation) + - "⫡": [t: "перпендикуляр с с"] # 0x2ae1 (en: 'perpendicular with s', google translation) + - "⫢": [t: "вертикальный батончик тройной правый турникет"] # 0x2ae2 (en: 'vertical bar triple right turnstile', google translation) + - "⫣": [t: "двойная вертикальная стержня левая турникета"] # 0x2ae3 (en: 'double vertical bar left turnstile', google translation) + - "⫤": [t: "вертикальный стержень двойной левый турнинель"] # 0x2ae4 (en: 'vertical bar double left turnstile', google translation) + - "⫥": [t: "двойная вертикальная стержня двойной левой турникет"] # 0x2ae5 (en: 'double vertical bar double left turnstile', google translation) + - "⫦": [t: "длинный бросок от левого члена двойной вертикали"] # 0x2ae6 (en: 'long dash from left member of double vertical', google translation) + - "⫧": [t: "краткий удар с overbar"] # 0x2ae7 (en: 'short down tack with overbar', google translation) + - "⫨": [t: "краткий притяжение с помощью верхней части"] # 0x2ae8 (en: 'short up tack with underbar', google translation) + - "⫩": [t: "краткий удар над коротким путем"] # 0x2ae9 (en: 'short up tack above short down tack', google translation) + - "⫪": [t: "двойной удар"] # 0x2aea (en: 'double down tack', google translation) + - "⫫": [t: "удвоить такту"] # 0x2aeb (en: 'double up tack', google translation) + - "⫬": [t: "двойной удар, а не знак"] # 0x2aec (en: 'double stroke not sign', google translation) + - "⫭": [t: "обратный двойной удар, а не знак"] # 0x2aed (en: 'reversed double stroke not sign', google translation) + - "⫮": [t: "не разделяется с обратной слэш"] # 0x2aee (en: 'does not divide with reversed negation slash', google translation) + - "⫯": [t: "вертикальная линия с кругом выше"] # 0x2aef (en: 'vertical line with circle above', google translation) + - "⫰": [t: "вертикальная линия с кругом ниже"] # 0x2af0 (en: 'vertical line with circle below', google translation) + - "⫱": [t: "вниз по кругу ниже"] # 0x2af1 (en: 'down tack with circle below', google translation) + - "⫲": [t: "параллельно с горизонтальным ходом"] # 0x2af2 (en: 'parallel with horizontal stroke', google translation) + - "⫳": [t: "параллельно с оператором тильды"] # 0x2af3 (en: 'parallel with tilde operator', google translation) + - "⫴": [t: "тройная вертикальная бинарная связь"] # 0x2af4 (en: 'triple vertical bar binary relation', google translation) + - "⫵": [t: "тройная вертикальная стержень с горизонтальным ходом"] # 0x2af5 (en: 'triple vertical bar with horizontal stroke', google translation) + - "⫶": [t: "тройной оператор толстой кишки"] # 0x2af6 (en: 'triple colon operator', google translation) + - "⫷": [t: "тройной вложенной меньше, чем"] # 0x2af7 (en: 'triple nested less than', google translation) + - "⫸": [t: "тройной вложенной больше, чем"] # 0x2af8 (en: 'triple nested greater than', google translation) + - "⫹": [t: "двойная линия наклонена меньше или равна"] # 0x2af9 (en: 'double line slanted less than or equal to', google translation) + - "⫺": [t: "двойная линия наклонена больше или равна"] # 0x2afa (en: 'double line slanted greater than or equal to', google translation) + - "⫻": [t: "тройное солидус бинарное отношение"] # 0x2afb (en: 'triple solidus binary relation', google translation) + - "⫼": [t: "большой тройной вертикальный оператор"] # 0x2afc (en: 'large triple vertical bar operator', google translation) + - "⫽": [t: "двойной оператор solidus"] # 0x2afd (en: 'double solidus operator', google translation) + - "⫾": [t: "белый вертикальный бар"] # 0x2afe (en: 'white vertical bar', google translation) + - "⫿": [t: "белый вертикальный бар"] # 0x2aff (en: 'white vertical bar', google translation) + - "⬀": [t: "северо -восточный белый стрела"] # 0x2b00 (en: 'north east white arrow', google translation) + - "⬁": [t: "северо -западный белый стрела"] # 0x2b01 (en: 'north west white arrow', google translation) + - "⬂": [t: "юго -восточная белая стрела"] # 0x2b02 (en: 'south east white arrow', google translation) + - "⬃": [t: "юго -западный белый стрелка"] # 0x2b03 (en: 'south west white arrow', google translation) + - "⬄": [t: "левая правая белая стрелка"] # 0x2b04 (en: 'left right white arrow', google translation) + - "⬅": [t: "левая черная стрела"] # 0x2b05 (en: 'leftwards black arrow', google translation) + - "⬆": [t: "вверх черную стрелу"] # 0x2b06 (en: 'upwards black arrow', google translation) + - "⬇": [t: "вниз черная стрелка"] # 0x2b07 (en: 'downwards black arrow', google translation) + - "⬈": [t: "северо -восточный черная стрелка"] # 0x2b08 (en: 'north east black arrow', google translation) + - "⬉": [t: "северо -западный черная стрелка"] # 0x2b09 (en: 'north west black arrow', google translation) + - "⬊": [t: "юго -восточная черная стрела"] # 0x2b0a (en: 'south east black arrow', google translation) + - "⬋": [t: "юго -западная черная стрела"] # 0x2b0b (en: 'south west black arrow', google translation) + - "⬌": [t: "левая правая черная стрелка"] # 0x2b0c (en: 'left right black arrow', google translation) + - "⬍": [t: "вниз по черной стрелке"] # 0x2b0d (en: 'up down black arrow', google translation) + - "⬎": [t: "стрелка вправо с наконечником вниз"] # 0x2b0e (en: 'rightwards arrow with tip downwards', google translation) + - "⬏": [t: "стрелка вправо с наконечником вверх"] # 0x2b0f (en: 'rightwards arrow with tip upwards', google translation) + - "⬐": [t: "стрелка влево с наконечником вниз"] # 0x2b10 (en: 'leftwards arrow with tip downwards', google translation) + - "⬑": [t: "стрелка влево с наконечником вверх"] # 0x2b11 (en: 'leftwards arrow with tip upwards', google translation) + - "⬒": [t: "квадрат с верхней половиной черной"] # 0x2b12 (en: 'square with top half black', google translation) + - "⬓": [t: "квадрат с нижней половиной черной"] # 0x2b13 (en: 'square with bottom half black', google translation) + - "⬔": [t: "квадрат с верхней правой диагональной половиной черной"] # 0x2b14 (en: 'square with upper right diagonal half black', google translation) + - "⬕": [t: "квадрат с нижней левой диагональной половиной черной"] # 0x2b15 (en: 'square with lower left diagonal half black', google translation) + - "⬖": [t: "алмаз с левой половиной черной"] # 0x2b16 (en: 'diamond with left half black', google translation) + - "⬗": [t: "алмаз с правой половиной черной"] # 0x2b17 (en: 'diamond with right half black', google translation) + - "⬘": [t: "алмаз с верхней половиной черной"] # 0x2b18 (en: 'diamond with top half black', google translation) + - "⬙": [t: "алмаз с нижней половиной черной"] # 0x2b19 (en: 'diamond with bottom half black', google translation) + - "⬚": [t: "коробка"] # 0x2b1a (en: 'box', google translation) + - "⬛": [t: "черный большой квадрат"] # 0x2b1b (en: 'black large square', google translation) + - "⬜": [t: "белый большой квадрат"] # 0x2b1c (en: 'white large square', google translation) + - "⬝": [t: "черный очень маленький квадрат"] # 0x2b1d (en: 'black very small square', google translation) + - "⬞": [t: "белый очень маленький квадрат"] # 0x2b1e (en: 'white very small square', google translation) + - "⬟": [t: "черный пентагон"] # 0x2b1f (en: 'black pentagon', google translation) + - "⬠": [t: "белый пентагон"] # 0x2b20 (en: 'white pentagon', google translation) + - "⬡": [t: "белый шестигранник"] # 0x2b21 (en: 'white hexagon', google translation) + - "⬢": [t: "черный шестигранник"] # 0x2b22 (en: 'black hexagon', google translation) + - "⬣": [t: "горизонтальный черный шестигран"] # 0x2b23 (en: 'horizontal black hexagon', google translation) + - "⬤": [t: "черный большой круг"] # 0x2b24 (en: 'black large circle', google translation) + - "⬥": [t: "черный средний бриллиант"] # 0x2b25 (en: 'black medium diamond', google translation) + - "⬦": [t: "белый средний бриллиант"] # 0x2b26 (en: 'white medium diamond', google translation) + - "⬧": [t: "черный средний роньон"] # 0x2b27 (en: 'black medium lozenge', google translation) + - "⬨": [t: "белый средний роньон"] # 0x2b28 (en: 'white medium lozenge', google translation) + - "⬩": [t: "черный маленький бриллиант"] # 0x2b29 (en: 'black small diamond', google translation) + - "⬪": [t: "черный маленький ронд"] # 0x2b2a (en: 'black small lozenge', google translation) + - "⬫": [t: "белый маленький роньон"] # 0x2b2b (en: 'white small lozenge', google translation) + - "⬬": [t: "черный горизонтальный эллипс"] # 0x2b2c (en: 'black horizontal ellipse', google translation) + - "⬭": [t: "белый горизонтальный эллипс"] # 0x2b2d (en: 'white horizontal ellipse', google translation) + - "⬮": [t: "черный вертикальный эллипс"] # 0x2b2e (en: 'black vertical ellipse', google translation) + - "⬯": [t: "белый вертикальный эллипс"] # 0x2b2f (en: 'white vertical ellipse', google translation) + - "⬰": [t: "левая стрелка с маленьким кругом"] # 0x2b30 (en: 'left arrow with small circle', google translation) + - "⬱": [t: "три левые стрелы"] # 0x2b31 (en: 'three leftwards arrows', google translation) + - "⬲": [t: "левая стрелка с circled plus"] # 0x2b32 (en: 'left arrow with circled plus', google translation) + - "⬳": [t: "длинный левый наносит удар стрелка"] # 0x2b33 (en: 'long leftwards squiggle arrow', google translation) + - "⬴": [t: "слева две головные стрелки с вертикальным ходом"] # 0x2b34 (en: 'leftwards two headed arrow with vertical stroke', google translation) + - "⬵": [t: "слева две головы стрелка с двойным вертикальным ходом"] # 0x2b35 (en: 'leftwards two headed arrow with double vertical stroke', google translation) + - "⬶": [t: "слева две голова стрелы из бара"] # 0x2b36 (en: 'leftwards two headed arrow from bar', google translation) + - "⬷": [t: "слева две головы triple dash arrow"] # 0x2b37 (en: 'leftwards two headed triple dash arrow', google translation) + - "⬸": [t: "стрелка влево с пунктирным стеблем"] # 0x2b38 (en: 'leftwards arrow with dotted stem', google translation) + - "⬹": [t: "стрелка влево с хвостом с вертикальным ходом"] # 0x2b39 (en: 'leftwards arrow with tail with vertical stroke', google translation) + - "⬺": [t: "стрелка влево с двойным вертикальным ходом"] # 0x2b3a (en: 'leftwards arrow with tail with double vertical stroke', google translation) + - "⬻": [t: "слева две головные стрелы с хвостом"] # 0x2b3b (en: 'leftwards two headed arrow with tail', google translation) + - "⬼": [t: "слева две головные стрелки с хвостом с вертикальным ходом"] # 0x2b3c (en: 'leftwards two headed arrow with tail with vertical stroke', google translation) + - "⬽": [t: "влево две головы стрелка с хвостом с двойным вертикальным ходом"] # 0x2b3d (en: 'leftwards two headed arrow with tail with double vertical stroke', google translation) + - "⬾": [t: "стрелка влево через x"] # 0x2b3e (en: 'leftwards arrow through x', google translation) + - "⬿": [t: "волновая стрелка, указывающая прямо влево"] # 0x2b3f (en: 'wave arrow pointing directly left', google translation) + - "⭀": [t: "равен знак над стрелкой влево"] # 0x2b40 (en: 'equals sign above leftwards arrow', google translation) + - "⭁": [t: "обратный оператор тильды над стрелкой левой"] # 0x2b41 (en: 'reverse tilde operator above leftwards arrow', google translation) + - "⭂": [t: "стрелка влево выше обратно почти равна"] # 0x2b42 (en: 'leftwards arrow above reverse almost equal to', google translation) + - "⭃": [t: "стрелка вправо через больше"] # 0x2b43 (en: 'rightwards arrow through greater than', google translation) + - "⭄": [t: "прямо стрелка через суперсет"] # 0x2b44 (en: 'rightwards arrow through superset', google translation) + - "⭅": [t: "левая четырехкратная стрелка"] # 0x2b45 (en: 'leftwards quadruple arrow', google translation) + - "⭆": [t: "прямо четырехкратная стрелка"] # 0x2b46 (en: 'rightwards quadruple arrow', google translation) + - "⭇": [t: "обратный оператор тильды выше стрелы вправо"] # 0x2b47 (en: 'reverse tilde operator above rightwards arrow', google translation) + - "⭈": [t: "стрелка вправо выше обратно почти равна"] # 0x2b48 (en: 'rightwards arrow above reverse almost equal to', google translation) + - "⭉": [t: "оператор тильде над стрелкой левой"] # 0x2b49 (en: 'tilde operator above leftwards arrow', google translation) + - "⭊": [t: "стрелка влево выше почти равна"] # 0x2b4a (en: 'leftwards arrow above almost equal to', google translation) + - "⭋": [t: "стрелка влево над оператором обратной тилды"] # 0x2b4b (en: 'leftwards arrow above reverse tilde operator', google translation) + - "⭌": [t: "стрелка вправо над оператором обратной тилды"] # 0x2b4c (en: 'rightwards arrow above reverse tilde operator', google translation) + - "⭐": [t: "белая средняя звезда"] # 0x2b50 (en: 'white medium star', google translation) + - "⭑": [t: "черная маленькая звезда"] # 0x2b51 (en: 'black small star', google translation) + - "⭒": [t: "белая маленькая звезда"] # 0x2b52 (en: 'white small star', google translation) + - "⭓": [t: "черное правое направление пентагона"] # 0x2b53 (en: 'black right pointing pentagon', google translation) + - "⭔": [t: "белый правый направление пентагона"] # 0x2b54 (en: 'white right pointing pentagon', google translation) + - "⭕": [t: "тяжелый большой круг"] # 0x2b55 (en: 'heavy large circle', google translation) + - "⭖": [t: "тяжелый овал с овальным внутри"] # 0x2b56 (en: 'heavy oval with oval inside', google translation) + - "⭗": [t: "тяжелый круг с кругом внутри"] # 0x2b57 (en: 'heavy circle with circle inside', google translation) + - "⭘": [t: "тяжелый круг"] # 0x2b58 (en: 'heavy circle', google translation) + - "⭙": [t: "тяжелая кружовая сальир"] # 0x2b59 (en: 'heavy circled saltire', google translation) + - "⸀": [t: "маркер подстановки правого угла"] # 0x2e00 (en: 'right angle substitution marker', google translation) + - "⸁": [t: "прямой угол пунктирный маркер замены"] # 0x2e01 (en: 'right angle dotted substitution marker', google translation) + - "⸂": [t: "левая замена кронштейна"] # 0x2e02 (en: 'left substitution bracket', google translation) + - "⸃": [t: "правая замена кронштейна"] # 0x2e03 (en: 'right substitution bracket', google translation) + - "⸄": [t: "левая пунктирная замена кронштейна"] # 0x2e04 (en: 'left dotted substitution bracket', google translation) + - "⸅": [t: "правая пунктирная замена кронштейна"] # 0x2e05 (en: 'right dotted substitution bracket', google translation) + - "⸆": [t: "повышенный маркер интерполяции"] # 0x2e06 (en: 'raised interpolation marker', google translation) + - "⸇": [t: "повышенный пунктированный маркер интерполяции"] # 0x2e07 (en: 'raised dotted interpolation marker', google translation) + - "⸈": [t: "пунктирный маркер маркера транспозиции"] # 0x2e08 (en: 'dotted transposition marker marker', google translation) + - "⸉": [t: "левый транспонированный кронштейн"] # 0x2e09 (en: 'left transposition bracket', google translation) + - "⸊": [t: "правый транспонированный кронштейн"] # 0x2e0a (en: 'right transposition bracket', google translation) + - "⸋": [t: "поднятый квадрат"] # 0x2e0b (en: 'raised square', google translation) + - "⸌": [t: "оставленный поднятый кронштейн упущений"] # 0x2e0c (en: 'left raised omission bracket', google translation) + - "⸍": [t: "правый поднятый кронштейн упущений"] # 0x2e0d (en: 'right raised omission bracket', google translation) + - "⸎": [t: "редакция коронис"] # 0x2e0e (en: 'editorial coronis', google translation) + - "⸏": [t: "параграф"] # 0x2e0f (en: 'paragraphos', google translation) + - "⸐": [t: "разветвленные параграфоры"] # 0x2e10 (en: 'forked paragraphos', google translation) + - "⸑": [t: "обратите вспять разветвленные параграфы"] # 0x2e11 (en: 'reversed forked paragraphos', google translation) + - "⸒": [t: "гиподиастоль"] # 0x2e12 (en: 'hypodiastole', google translation) + - "⸓": [t: "пунктирные обелос"] # 0x2e13 (en: 'dotted obelos', google translation) + - "⸔": [t: "вниз анкоры"] # 0x2e14 (en: 'downwards ancora', google translation) + - "⸕": [t: "вверх анкоры"] # 0x2e15 (en: 'upwards ancora', google translation) + - "⸖": [t: "пунктирный угол правого направления"] # 0x2e16 (en: 'dotted right pointing angle', google translation) + - "⸗": [t: "двойной косой дефис"] # 0x2e17 (en: 'double oblique hyphen', google translation) + - "⸘": [t: "перевернутый межробанг"] # 0x2e18 (en: 'inverted interrobang', google translation) + - "⸙": [t: "палмсб"] # 0x2e19 (en: 'palm branch', google translation) + - "⸚": [t: "дефис с диарезом"] # 0x2e1a (en: 'hyphen with diaeresis', google translation) + - "⸛": [t: "тильде с кольцом выше"] # 0x2e1b (en: 'tilde with ring above', google translation) + - "⸜": [t: "оставил низкий перефразированный кронштейн"] # 0x2e1c (en: 'left low paraphrase bracket', google translation) + - "⸝": [t: "правый низкий перефразированный кронштейн"] # 0x2e1d (en: 'right low paraphrase bracket', google translation) + - "⸞": [t: "тильде с точкой выше"] # 0x2e1e (en: 'tilde with dot above', google translation) + - "⸟": [t: "тильде с точкой ниже"] # 0x2e1f (en: 'tilde with dot below', google translation) + - "⸠": [t: "левая вертикальная прунка с перо"] # 0x2e20 (en: 'left vertical bar with quill', google translation) + - "⸡": [t: "правая вертикальная планка с перо"] # 0x2e21 (en: 'right vertical bar with quill', google translation) + - "⸢": [t: "верх слева половина кронштейна"] # 0x2e22 (en: 'top left half bracket', google translation) + - "⸣": [t: "верхний правый половина кронштейна"] # 0x2e23 (en: 'top right half bracket', google translation) + - "⸤": [t: "внизу левой половины кронштейна"] # 0x2e24 (en: 'bottom left half bracket', google translation) + - "⸥": [t: "внизу правой половины кронштейна"] # 0x2e25 (en: 'bottom right half bracket', google translation) + - "⸦": [t: "слева в сторону u кронштейн"] # 0x2e26 (en: 'left sideways u bracket', google translation) + - "⸧": [t: "прямо сбоку с кронштейном"] # 0x2e27 (en: 'right sideways u bracket', google translation) + - "⸨": [t: "оставлены двойными скобками"] # 0x2e28 (en: 'left double parentheses', google translation) + - "⸩": [t: "правая двойная скобка"] # 0x2e29 (en: 'right double parentheses', google translation) + - "⸪": [t: "две точки за одну точечную пунктуацию"] # 0x2e2a (en: 'two dots over one dot punctuation', google translation) + - "⸫": [t: "одна точка за две точки пунктуации"] # 0x2e2b (en: 'one dot over two dots punctuation', google translation) + - "⸬": [t: "квадрат четыре точечных пунктуации"] # 0x2e2c (en: 'squared four dot punctuation', google translation) + - "⸭": [t: "пять точечных знаков"] # 0x2e2d (en: 'five dot mark', google translation) + - "⸮": [t: "обратный вопрос"] # 0x2e2e (en: 'reversed question mark', google translation) + - "ⸯ": [t: "вертикальная тильда"] # 0x2e2f (en: 'vertical tilde', google translation) + - "⸰": [t: "кольцевая точка"] # 0x2e30 (en: 'ring point', google translation) + - "⸱": [t: "слово сепаратор средняя точка"] # 0x2e31 (en: 'word separator middle dot', google translation) + - "⸲": [t: "повернулся запятой"] # 0x2e32 (en: 'turned comma', google translation) + - "⸳": [t: "повышенная точка"] # 0x2e33 (en: 'raised dot', google translation) + - "⸴": [t: "поднятый запятой"] # 0x2e34 (en: 'raised comma', google translation) + - "⸵": [t: "стал полуколоном"] # 0x2e35 (en: 'turned semicolon', google translation) + - "⸶": [t: "кинжал с левым охраной"] # 0x2e36 (en: 'dagger with left guard', google translation) + - "⸷": [t: "кинжал с правой охраной"] # 0x2e37 (en: 'dagger with right guard', google translation) + - "⸸": [t: "стал кинжалом"] # 0x2e38 (en: 'turned dagger', google translation) + - "⸹": [t: "знак верхней половины секции"] # 0x2e39 (en: 'top half section sign', google translation) + - "⸺": [t: "два дэш"] # 0x2e3a (en: 'two em dash', google translation) + - "⸻": [t: "три дэш"] # 0x2e3b (en: 'three em dash', google translation) + - "〃": [t: "то же самое"] # 0x3003 (en: 'ditto mark', google translation) + - "〈": [t: "левый угловой кронштейн"] # 0x3008 (en: 'left angle bracket', google translation) + - "〉": [t: "правый угловой кронштейн"] # 0x3009 (en: 'right angle bracket', google translation) + - "《": [t: "левый двухугольный кронштейн"] # 0x300a (en: 'left double angle bracket', google translation) + - "》": [t: "правый двойной угловой кронштейн"] # 0x300b (en: 'right double angle bracket', google translation) + - "「": [t: "левый угловой кронштейн"] # 0x300c (en: 'left corner bracket', google translation) + - "」": [t: "правый угловой кронштейн"] # 0x300d (en: 'right corner bracket', google translation) + - "『": [t: "левый белый угловой кронштейн"] # 0x300e (en: 'left white corner bracket', google translation) + - "』": [t: "правый белый угловой кронштейн"] # 0x300f (en: 'right white corner bracket', google translation) + - "【": [t: "левый черный линзоулярный кронштейн"] # 0x3010 (en: 'left black lenticular bracket', google translation) + - "】": [t: "правый черный линзоушковой кронштейн"] # 0x3011 (en: 'right black lenticular bracket', google translation) + - "〔": [t: "левая кронштейн с черепахой"] # 0x3014 (en: 'left tortoise shell bracket', google translation) + - "〕": [t: "правая черепаховая оболочка"] # 0x3015 (en: 'right tortoise shell bracket', google translation) + - "〖": [t: "левый белый линзоушковый кронштейн"] # 0x3016 (en: 'left white lenticular bracket', google translation) + - "〗": [t: "правый белый линзо -линзовый кронштейн"] # 0x3017 (en: 'right white lenticular bracket', google translation) + - "〘": [t: "оставил белую черепаховую скорлупу"] # 0x3018 (en: 'left white tortoise shell bracket', google translation) + - "〙": [t: "правый белый кронштейн с черепахой"] # 0x3019 (en: 'right white tortoise shell bracket', google translation) + - "〚": [t: "левый белый квадратный кронштейн"] # 0x301a (en: 'left white square bracket', google translation) + - "〛": [t: "правый белый квадратный кронштейн"] # 0x301b (en: 'right white square bracket', google translation) + - "〜": [t: "волновая черта"] # 0x301c (en: 'wave dash', google translation) + - "〰": [t: "wavy dash"] # 0x3030 (google translation) + - "㉈": [t: "обернут номер десять на черном квадрате"] # 0x3248 (en: 'circled number ten on black square', google translation) + - "㉉": [t: "обернут номер двадцать на черной площади"] # 0x3249 (en: 'circled number twenty on black square', google translation) + - "㉊": [t: "обернут номер тридцать на черном квадрате"] # 0x324a (en: 'circled number thirty on black square', google translation) + - "㉋": [t: "обернутое число сорок на черных площади"] # 0x324b (en: 'circled number forty on blacks square', google translation) + - "㉌": [t: "обернут номер пятьдесят на черной площади"] # 0x324c (en: 'circled number fifty on black square', google translation) + - "㉍": [t: "обернут номер шестьдесят на черной площади"] # 0x324d (en: 'circled number sixty on black square', google translation) + - "㉎": [t: "кругет номер семьдесят на черной площади"] # 0x324e (en: 'circled number seventy on black square', google translation) + - "㉏": [t: "обернутый номер на черном квадрате"] # 0x324f (en: 'circled number eighty on black square', google translation) + - "㉑": [t: "обернут номер двадцать один"] # 0x3251 (en: 'circled number twenty one', google translation) + - "㉒": [t: "кругл номер двадцать два"] # 0x3252 (en: 'circled number twenty two', google translation) + - "㉓": [t: "кругл номер двадцать три"] # 0x3253 (en: 'circled number twenty three', google translation) + - "㉔": [t: "кругл номер двадцать четыре"] # 0x3254 (en: 'circled number twenty four', google translation) + - "㉕": [t: "обернут номер двадцать пять"] # 0x3255 (en: 'circled number twenty five', google translation) + - "㉖": [t: "обернут номер двадцать шесть"] # 0x3256 (en: 'circled number twenty six', google translation) + - "㉗": [t: "обернут номер двадцать семь"] # 0x3257 (en: 'circled number twenty seven', google translation) + - "㉘": [t: "обернут номер двадцать в"] # 0x3258 (en: 'circled number twenty eight', google translation) + - "㉙": [t: "обернуто номером двадцать девять"] # 0x3259 (en: 'circled number twenty nine', google translation) + - "㉚": [t: "кружит номер тридцать"] # 0x325a (en: 'circled number thirty', google translation) + - "㉛": [t: "кругл номер тридцать"] # 0x325b (en: 'circled number thirty one', google translation) + - "㉜": [t: "кругет номер тридцать два"] # 0x325c (en: 'circled number thirty two', google translation) + - "㉝": [t: "кругл номер тридцать три"] # 0x325d (en: 'circled number thirty three', google translation) + - "㉞": [t: "кругл номер тридцать четыре"] # 0x325e (en: 'circled number thirty four', google translation) + - "㉟": [t: "обернут номер тридцать пять"] # 0x325f (en: 'circled number thirty five', google translation) + - "㊱": [t: "обернут номер тридцать шесть"] # 0x32b1 (en: 'circled number thirty six', google translation) + - "㋌": [t: "меркурий"] # 0x32cc (en: 'mercury', google translation) + - "㋍": [t: "ergs"] # 0x32cd (google translation) + - "㋎": [t: "электронные вольт"] # 0x32ce (en: 'electron volts', google translation) + - "㋏": [t: "знак с ограниченной ответственностью"] # 0x32cf (en: 'limited liability sign', google translation) + - "㍱": [t: "гектопаскалы"] # 0x3371 (en: 'hectopascals', google translation) + - "㍲": [t: "дальтон"] # 0x3372 (en: 'daltons', google translation) + - "㍳": [t: "астрономические единицы"] # 0x3373 (en: 'astronomical units', google translation) + - "㍴": [t: "батончики"] # 0x3374 (en: 'bars', google translation) + - "㍵": [t: "o v"] # 0x3375 (google translation) + - "㍶": [t: "парсек"] # 0x3376 (en: 'parsecs', google translation) + - "㍷": [t: "дециметры"] # 0x3377 (en: 'decimeters', google translation) + - "㍸": [t: "дециметры в квадрате"] # 0x3378 (en: 'decimeters squared', google translation) + - "㍹": [t: "дециметры кубики"] # 0x3379 (en: 'decimeters cubed', google translation) + - "㍺": [t: "инструментальные единицы"] # 0x337a (en: 'instrumental units', google translation) + - "㎀": [t: "пикоэмпс"] # 0x3380 (en: 'picoamps', google translation) + - "㎁": [t: "наноампы"] # 0x3381 (en: 'nanoamps', google translation) + - "㎂": [t: "микроампы"] # 0x3382 (en: 'microamps', google translation) + - "㎃": [t: "миллиамп"] # 0x3383 (en: 'milliamps', google translation) + - "㎄": [t: "киломп"] # 0x3384 (en: 'kiloamps', google translation) + - "㎅": [t: "килобиты"] # 0x3385 (en: 'kilobytes', google translation) + - "㎆": [t: "мегабайты"] # 0x3386 (en: 'megabytes', google translation) + - "㎇": [t: "гигабайты"] # 0x3387 (en: 'gigabytes', google translation) + - "㎈": [t: "калории"] # 0x3388 (en: 'calories', google translation) + - "㎉": [t: "килокалории"] # 0x3389 (en: 'kilocalories', google translation) + - "㎊": [t: "пикофарадс"] # 0x338a (en: 'picofarads', google translation) + - "㎋": [t: "нанофарады"] # 0x338b (en: 'nanofarads', google translation) + - "㎌": [t: "микрофарады"] # 0x338c (en: 'microfarads', google translation) + - "㎍": [t: "микрограммы"] # 0x338d (en: 'micrograms', google translation) + - "㎎": [t: "миллиграммы"] # 0x338e (en: 'milligrams', google translation) + - "㎏": [t: "килограммы"] # 0x338f (en: 'kilograms', google translation) + - "㎐": [t: "герц"] # 0x3390 (en: 'hertz', google translation) + - "㎑": [t: "килогерц"] # 0x3391 (en: 'kilohertz', google translation) + - "㎒": [t: "мегахерц"] # 0x3392 (en: 'megahertz', google translation) + - "㎓": [t: "гигагерц"] # 0x3393 (en: 'gigahertz', google translation) + - "㎔": [t: "терагерц"] # 0x3394 (en: 'terahertz', google translation) + - "㎕": [t: "микролитры"] # 0x3395 (en: 'microliters', google translation) + - "㎖": [t: "миллилитры"] # 0x3396 (en: 'milliliters', google translation) + - "㎗": [t: "децилиторы"] # 0x3397 (en: 'deciliters', google translation) + - "㎘": [t: "килолитры"] # 0x3398 (en: 'kiloliters', google translation) + - "㎙": [t: "фемтометры"] # 0x3399 (en: 'femtometers', google translation) + - "㎚": [t: "нанометры"] # 0x339a (en: 'nanometers', google translation) + - "㎛": [t: "микрометры"] # 0x339b (en: 'micrometers', google translation) + - "㎜": [t: "миллиметры"] # 0x339c (en: 'millimeters', google translation) + - "㎝": [t: "сантиметры"] # 0x339d (en: 'centimeters', google translation) + - "㎞": [t: "километры"] # 0x339e (en: 'kilometers', google translation) + - "㎟": [t: "миллиметры в квадрате"] # 0x339f (en: 'millimeters squared', google translation) + - "㎠": [t: "самедимеры в квадрате"] # 0x33a0 (en: 'centimeters squared', google translation) + - "㎡": [t: "метры квадрат"] # 0x33a1 (en: 'meters squared', google translation) + - "㎢": [t: "километры в квадрате"] # 0x33a2 (en: 'kilometers squared', google translation) + - "㎣": [t: "миллиметровые кубики"] # 0x33a3 (en: 'millimeters cubed', google translation) + - "㎤": [t: "медингеры кубики"] # 0x33a4 (en: 'centimeters cubed', google translation) + - "㎥": [t: "метры кубики"] # 0x33a5 (en: 'meters cubed', google translation) + - "㎦": [t: "километры кубики"] # 0x33a6 (en: 'kilometers cubed', google translation) + - "㎧": [t: "метры в секунду"] # 0x33a7 (en: 'meters per second', google translation) + - "㎨": [t: "метры в секунду квадрат"] # 0x33a8 (en: 'meters per second squared', google translation) + - "㎩": [t: "паскалы"] # 0x33a9 (en: 'pascals', google translation) + - "㎪": [t: "килопаскалы"] # 0x33aa (en: 'kilopascals', google translation) + - "㎫": [t: "мегапаскалы"] # 0x33ab (en: 'megapascals', google translation) + - "㎬": [t: "гигаскаскалы"] # 0x33ac (en: 'gigapascals', google translation) + - "㎭": [t: "рад"] # 0x33ad (en: 'rads', google translation) + - "㎮": [t: "радс в секунду"] # 0x33ae (en: 'rads per second', google translation) + - "㎯": [t: "радс в секунду квадрат"] # 0x33af (en: 'rads per second squared', google translation) + - "㎰": [t: "пикосекунд"] # 0x33b0 (en: 'picoseconds', google translation) + - "㎱": [t: "наносекунд"] # 0x33b1 (en: 'nanoseconds', google translation) + - "㎲": [t: "микросекунд"] # 0x33b2 (en: 'microseconds', google translation) + - "㎳": [t: "миллисекунды"] # 0x33b3 (en: 'milliseconds', google translation) + - "㎴": [t: "пиковолтс"] # 0x33b4 (en: 'picovolts', google translation) + - "㎵": [t: "нановолты"] # 0x33b5 (en: 'nanovolts', google translation) + - "㎶": [t: "микроволты"] # 0x33b6 (en: 'microvolts', google translation) + - "㎷": [t: "миливолты"] # 0x33b7 (en: 'millivolts', google translation) + - "㎸": [t: "киловолты"] # 0x33b8 (en: 'kilovolts', google translation) + - "㎹": [t: "мегаволты"] # 0x33b9 (en: 'megavolts', google translation) + - "㎺": [t: "пикаттс"] # 0x33ba (en: 'picowatts', google translation) + - "㎻": [t: "нановатты"] # 0x33bb (en: 'nanowatts', google translation) + - "㎼": [t: "микроволты"] # 0x33bc (en: 'microwatts', google translation) + - "㎽": [t: "милливаттс"] # 0x33bd (en: 'milliwatts', google translation) + - "㎾": [t: "киловатт"] # 0x33be (en: 'kilowatts', google translation) + - "㎿": [t: "мегаватт"] # 0x33bf (en: 'megawatts', google translation) + - "㏀": [t: "кило-омс"] # 0x33c0 (en: 'kilo-ohms', google translation) + - "㏁": [t: "megaohms"] # 0x33c1 (google translation) + - "㏂": [t: "аттометры"] # 0x33c2 (en: 'attometers', google translation) + - "㏃": [t: "беккерелс"] # 0x33c3 (en: 'becquerels', google translation) + - "㏄": [t: "кубические сантиметра"] # 0x33c4 (en: 'cubic centimeters', google translation) + - "㏅": [t: "канделас"] # 0x33c5 (en: 'candelas', google translation) + - "㏆": [t: "кулоны на килограмм"] # 0x33c6 (en: 'coulombs per kilogram', google translation) + - "㏇": [t: "верхний c, o, период"] # 0x33c7 (I have no idea what this is) (en: 'cap C, o, period', google translation) + - "㏈": [t: "децибел"] # 0x33c8 (en: 'decibels', google translation) + - "㏉": [t: "серые"] # 0x33c9 (en: 'grays', google translation) + - "㏊": [t: "гектары"] # 0x33ca (en: 'hectares', google translation) + - "㏋": [t: "лошадиная сила"] # 0x33cb (en: 'horsepower', google translation) + - "㏌": [t: "дюймы"] # 0x33cc (en: 'inches', google translation) + - "㏍": [t: "килокелвин"] # 0x33cd (en: 'kilokelvins', google translation) + - "㏎": [t: "километры"] # 0x33ce (en: 'kilometers', google translation) + - "㏏": [t: "узлы"] # 0x33cf (en: 'knots', google translation) + - "㏐": [t: "люмены"] # 0x33d0 (en: 'lumens', google translation) + - "㏑": [t: "натуральный журнал"] # 0x33d1 (en: 'natural log', google translation) + - "㏒": [t: "логарифм"] # 0x33d2 (en: 'logarithm', google translation) + - "㏓": [t: "люкс"] # 0x33d3 (en: 'lux', google translation) + - "㏔": [t: "millibarns"] # 0x33d4 (google translation) + - "㏕": [t: "мельницы"] # 0x33d5 (en: 'mills', google translation) + - "㏖": [t: "родинки"] # 0x33d6 (en: 'moles', google translation) + - "㏗": [t: "п"] # 0x33d7 (en: 'p h', google translation) + - "㏘": [t: "пикометры"] # 0x33d8 (en: 'picometers', google translation) + - "㏙": [t: "части на миллион"] # 0x33d9 (en: 'parts per million', google translation) + - "㏚": [t: "петароентгены"] # 0x33da (en: 'petaroentgens', google translation) + - "㏛": [t: "стерадцы"] # 0x33db (en: 'steradians', google translation) + - "㏜": [t: "веса"] # 0x33dc (en: 'sieverts', google translation) + - "㏝": [t: "веберс"] # 0x33dd (en: 'webers', google translation) + - "㏞": [t: "вольт на метр"] # 0x33de (en: 'volts per meter', google translation) + - "㏟": [t: "усилители на метр"] # 0x33df (en: 'amps per meter', google translation) + - "㏿": [t: "галлоны"] # 0x33ff (en: 'gallons', google translation) + - "": [t: "равна шляпе ниже"] # 0xe900 (en: 'equals with hat below', google translation) + - "": [t: "равно с плюсом выше"] # 0xe901 (en: 'equals with plus above', google translation) + - "": [t: "равно с плюсом ниже"] # 0xe902 (en: 'equals with plus below', google translation) + - "": [t: "тильде с плюсом выше"] # 0xe903 (en: 'tilde with plus above', google translation) + - "": [t: "тильде с плюсом ниже"] # 0xe904 (en: 'tilde with plus below', google translation) + - "": [t: "равное вдвое больше, чем"] # 0xe908 (en: 'equal double over greater than', google translation) + - "": [t: "равное вдвое больше, чем"] # 0xe909 (en: 'equal double over less than', google translation) + - "": [t: "содержит или равен"] # 0xe90a (en: 'contains or equal to', google translation) + - "": [t: "суперсет или равен"] # 0xe90b (en: 'superset of or equal to', google translation) + - "": [t: "подмножество или равное"] # 0xe90c (en: 'subset of or equal to', google translation) + - "": [t: "равное за меньшее, чем"] # 0xe90d (en: 'equal over less than', google translation) + - "": [t: "элемент или равен"] # 0xe912 (en: 'element of or equal to', google translation) + - "": [t: "равен или больше"] # 0xe913 (en: 'equal to or greater than', google translation) + - "": [t: "приблизительный суперсет"] # 0xe914 (en: 'approximate superset of', google translation) + - "": [t: "приблизительное подмножество"] # 0xe915 (en: 'approximate subset of', google translation) + - "": [t: "superset of dot включает в себя как субосвязь"] # 0xe916 (en: 'superset of with dot includes as sub relation', google translation) + - "": [t: "подмножество с точкой включено как суботенок"] # 0xe917 (en: 'subset of with dot is included in as sub relation', google translation) + - "": [t: "равное с точкой ниже"] # 0xe918 (en: 'equal with dot below', google translation) + - "": [t: "левая точка над минусом над правой точкой"] # 0xe919 (en: 'left dot over minus over right dot', google translation) + - "": [t: "правая точка через минус над левой точкой"] # 0xe91a (en: 'right dot over minus over left dot', google translation) + - "": [t: "почти равен минус"] # 0xe91f (en: 'almost equal to minus', google translation) + - "": [t: "двойная квадратная чашка"] # 0xe920 (en: 'double square cup', google translation) + - "": [t: "двойной квадратный верхний регистр"] # 0xe921 (en: 'double square cap', google translation) + - "": [t: "менее чем равен или больше"] # 0xe922 (en: 'less than equal to or greater than', google translation) + - "": [t: "тильде с точкой"] # 0xe924 (en: 'tilde with dot', google translation) + - "": [t: "тильде с двумя точками"] # 0xe925 (en: 'tilde with two dots', google translation) + - "": [t: "меньше, чем больше или равно"] # 0xe926 (en: 'less than greater than or equal to', google translation) + - "": [t: "больше, чем меньше или равно"] # 0xe927 (en: 'greater than less than or equal to', google translation) + - "": [t: "эквивалентно или меньше"] # 0xe928 (en: 'equivalent to or less than', google translation) + - "": [t: "эквивалентно или больше"] # 0xe929 (en: 'equivalent to or greater than', google translation) + - "": [t: "оставленный оператор открытой коробки"] # 0xe92a (en: 'left open box operator', google translation) + - "": [t: "правый оператор открытой коробки"] # 0xe92b (en: 'right open box operator', google translation) + - "": [t: "идентично с точкой"] # 0xe92c (en: 'identical to with dot', google translation) + - "": [t: "больше, чем равен или меньше"] # 0xe92d (en: 'greater than equal to or less than', google translation) + - "": [t: "оператор бара"] # 0xe92e (en: 'bar operator', google translation) + - "": [t: "оператор двойного бара"] # 0xe92f (en: 'double bar operator', google translation) + - "": [t: "оператор triple bar"] # 0xe930 (en: 'triple bar operator', google translation) + - "": [t: "меньше или приблизительно равен"] # 0xe932 (en: 'less than or approximately equal to', google translation) + - "": [t: "больше или приблизительно равен"] # 0xe933 (en: 'greater than or approximately equal to', google translation) + - "": [t: "вкладывается меньше, чем"] # 0xe936 (en: 'nested less than', google translation) + - "": [t: "вложенные больше, чем"] # 0xe937 (en: 'nested greater than', google translation) + - "": [t: "предшествует или эквивалентно"] # 0xe93a (en: 'precedes or equivalent to', google translation) + - "": [t: "добивается успеха или эквивалентно"] # 0xe93b (en: 'succeeds or equivalent to', google translation) + - "": [t: "предшествует равным"] # 0xe940 (en: 'precedes over equal', google translation) + - "": [t: "преуспевает в равных"] # 0xe941 (en: 'succeeds over equal', google translation) + - "": [t: "менее равное наклонное больше"] # 0xe942 (en: 'less equal slanted greater', google translation) + - "": [t: "больше равных наклонных меньше"] # 0xe943 (en: 'greater equal slanted less', google translation) + - "": [t: "удовлетворен"] # 0xe948 (en: 'satisfied by', google translation) + - "": [t: "ленивый с"] # 0xe949 (en: 'lazy s', google translation) + - "": [t: "не утверждение"] # 0xe94a (en: 'not assertion', google translation) + - "": [t: "двойной равный"] # 0xe94b (en: 'double equal', google translation) + - "": [t: "тройной равный"] # 0xe94c (en: 'triple equal', google translation) + - "": [t: "правило задержано"] # 0xe94d (en: 'rule delayed', google translation) + - "": [t: "псевдоним разделитель"] # 0xe94e (en: 'alias delimiter', google translation) + - "": [t: "нормальная подгруппа с баром"] # 0xe950 (en: 'normal subgroup of with bar', google translation) + - "": [t: "содержит как обычную подгруппу с стержнем"] # 0xe951 (en: 'contains as normal subgroup with bar', google translation) + - "": [t: "раунд подразумевает"] # 0xe954 (en: 'round implies', google translation) + - "": [t: "улыбка под баром"] # 0xe955 (en: 'smile under bar', google translation) + - "": [t: "нахмуриться над баром"] # 0xe956 (en: 'frown over bar', google translation) + - "": [t: "суперсет или почти равен"] # 0xe957 (en: 'superset of or almost equal to', google translation) + - "": [t: "подмножество или почти равен"] # 0xe958 (en: 'subset of or almost equal to', google translation) + - "": [t: "больше, чем почти равен или меньше"] # 0xe959 (en: 'greater than almost equal to or less than', google translation) + - "": [t: "меньше, чем почти равное или больше, чем"] # 0xe95a (en: 'less than almost equal or greater than', google translation) + - "": [t: "двойной логический или"] # 0xe95c (en: 'double logical or', google translation) + - "": [t: "двойной логический и"] # 0xe95d (en: 'double logical and', google translation) + - "": [t: "логично или с двойной полосой ниже"] # 0xe95e (en: 'logical or with double bar below', google translation) + - "": [t: "логично или с стержней ниже"] # 0xe95f (en: 'logical or with bar below', google translation) + - "": [t: "почти равны по сравнению с равными"] # 0xe962 (en: 'almost equal over equal', google translation) + - "": [t: "левый указательный треугольник с пополам"] # 0xe964 (en: 'left pointing triangle with bisecting bar', google translation) + - "": [t: "право указывает треугольник с пополам"] # 0xe965 (en: 'right pointing triangle with bisecting bar', google translation) + - "": [t: "равно с пунктирной верхней линией"] # 0xe966 (en: 'equals with dotted top line', google translation) + - "": [t: "предшествует толстой кишке"] # 0xe967 (en: 'precedes with colon', google translation) + - "": [t: "преуспевает с толстой кишкой"] # 0xe968 (en: 'succeeds with colon', google translation) + - "": [t: "меньше или равного наклонного"] # 0xe969 (en: 'smaller than or equal slanted', google translation) + - "": [t: "больше или равных наклонных"] # 0xe96a (en: 'larger than or equal slanted', google translation) + - "": [t: "вложено намного меньше, чем"] # 0xe96b (en: 'nested very much less than', google translation) + - "": [t: "вложено намного больше, чем"] # 0xe96c (en: 'nested very much greater than', google translation) + - "": [t: "разница между вариантом"] # 0xe96d (en: 'difference between variant', google translation) + - "": [t: "меньше, чем больше наложения"] # 0xe96e (en: 'less than greater than overlay', google translation) + - "": [t: "логичный или логичный и наложенный"] # 0xe96f (en: 'logical or logical and overlay', google translation) + - "": [t: "суперсет над суперсет"] # 0xe970 (en: 'superset over superset', google translation) + - "": [t: "подмножество над подмножества"] # 0xe971 (en: 'subset over subset', google translation) + - "": [t: "суперсет над подмножества"] # 0xe972 (en: 'superset over subset', google translation) + - "": [t: "подмножество над суперсет"] # 0xe973 (en: 'subset over superset', google translation) + - "": [t: "тройной вертикальный бар"] # 0xe979 (en: 'triple vertical bar', google translation) + - "": [t: "парные четырехкратные вертикальные точки"] # 0xe97a (en: 'paired quadruple vertical dots', google translation) + - "": [t: "перпендикулярно над стержней"] # 0xe97b (en: 'perpendicular over bar', google translation) + - "": [t: "левый турничный перевозка двойной вертикальной прунки"] # 0xe97c (en: 'left turnstile double vertical bar', google translation) + - "": [t: "двойной левый турничный перевозка двойной вертикальный бар"] # 0xe97d (en: 'double left turnstile double vertical bar', google translation) + - "": [t: "перпендикулярно перевернутую перпендикулярную"] # 0xe97e (en: 'perpendicular over inverted perpendicular', google translation) + - "": [t: "двойной левый вертикальный стержень"] # 0xe97f (en: 'double left turnstile vertical bar', google translation) + - "": [t: "сферический угол открывается"] # 0xe980 (en: 'spherical angle opening up', google translation) + - "": [t: "двойная черта"] # 0xe981 (en: 'double slash', google translation) + - "": [t: "правильный конг с угрым"] # 0xe982 (en: 'right angle with corner', google translation) + - "": [t: "обведенный вертикальным баром"] # 0xe984 (en: 'circled vertical bar', google translation) + - "": [t: "знак окружающего дивизиона"] # 0xe985 (en: 'circled division sign', google translation) + - "": [t: "пунктирный солидус"] # 0xe986 (en: 'dashed solidus', google translation) + - "": [t: "разбитая обратная черта"] # 0xe987 (en: 'dashed backslash', google translation) + - "": [t: "пунктирная средняя линия"] # 0xe988 (en: 'dashed mid line', google translation) + - "": [t: "пунктирная вертикальная бар"] # 0xe989 (en: 'dashed vertical bar', google translation) + - "": [t: "перпендикуляр с с"] # 0xe98a (en: 'perpendicular with s', google translation) + - "": [t: "угол с с"] # 0xe98b (en: 'angle with s', google translation) + - "": [t: "сферический угол открывается слева"] # 0xe98c (en: 'spherical angle opening left', google translation) + - "": [t: "угол открывается слева"] # 0xe98d (en: 'angle opening left', google translation) + - "": [t: "вертикальная планка с двойным крючком"] # 0xe98e (en: 'vertical bar with double hook', google translation) + - "": [t: "средний точечный оператор свободный радикал"] # 0xe98f (en: 'medium dot operator free radical', google translation) + - "": [t: "белый, укажите треугольник над стержней"] # 0xe990 (en: 'white up pointing triangle above bar', google translation) + - "": [t: "идентично и параллельно"] # 0xe991 (en: 'identical and parallel to', google translation) + - "": [t: "разбить продукт"] # 0xe992 (en: 'smash product', google translation) + - "": [t: "оператор с тройным бар с горизонтальным баром"] # 0xe993 (en: 'triple bar operator with horizontal bar', google translation) + - "": [t: "идентично с двойной чертой"] # 0xe994 (en: 'identical to with double slash', google translation) + - "": [t: "тройные скрещенные бары"] # 0xe995 (en: 'triple crossed bars', google translation) + - "": [t: "вертикальная планка над кругом"] # 0xe996 (en: 'vertical bar over circle', google translation) + - "": [t: "вертикальный пропорциональный"] # 0xe997 (en: 'vertical proportional to', google translation) + - "": [t: "черная последняя четверть луна"] # 0xe998 (en: 'black last quarter moon', google translation) + - "": [t: "черная первая четверть луна"] # 0xe999 (en: 'black first quarter moon', google translation) + - "": [t: "отрицательная синусоидальная волна"] # 0xe9a0 (en: 'negative sine wave', google translation) + - "": [t: "клаженные скобки"] # 0xe9a1 (en: 'parenthesized dot', google translation) + - "": [t: "скол"] # 0xe9a2 (en: 'parens', google translation) + - "": [t: "белая улыбка"] # 0xe9a3 (en: 'white smile', google translation) + - "": [t: "белый хмурый взгляд"] # 0xe9a4 (en: 'white frown', google translation) + - "": [t: "шестигранник"] # 0xe9a5 (en: 'hexagon', google translation) + - "": [t: "эквивалентно более плюс"] # 0xe9a6 (en: 'equivalent to over plus', google translation) + - "": [t: "плюс, эквивалентный"] # 0xe9a7 (en: 'plus over equivalent to', google translation) + - "": [t: "перекрестные засечки"] # 0xe9b0 (en: 'intersection serifs', google translation) + - "": [t: "союз serifs"] # 0xe9b1 (en: 'union serifs', google translation) + - "": [t: "квадратный перекресток засечений"] # 0xe9b2 (en: 'square intersection serifs', google translation) + - "": [t: "square union serifs"] # 0xe9b3 (google translation) + - "": [t: "предшествует эквивалентному или успешному"] # 0xe9e0 (en: 'precedes equivalent to or succeeds', google translation) + - "": [t: "успешно эквивалентно или предшествует"] # 0xe9e1 (en: 'succeeds equivalent to or precedes', google translation) + - "": [t: "предшествует почти равен или добивается успеха"] # 0xe9e2 (en: 'precedes almost equal to or succeeds', google translation) + - "": [t: "успешно практически равен или предшествует"] # 0xe9e3 (en: 'succeeds almost equal to or precedes', google translation) + - "": [t: "менее чем эквивалентно или больше"] # 0xe9f0 (en: 'less than equivalent to or greater than', google translation) + - "": [t: "больше, чем эквивалентно или меньше"] # 0xe9f1 (en: 'greater than equivalent to or less than', google translation) + - "": [t: "не гораздо меньше, чем"] # 0xea00 (en: 'not vert much less than', google translation) + - "": [t: "не гораздо больше, чем"] # 0xea01 (en: 'not vert much greater than', google translation) + - "": [t: "не намного меньше варианта"] # 0xea02 (en: 'not much less than variant', google translation) + - "": [t: "не намного больше, чем вариант"] # 0xea03 (en: 'not much greater than variant', google translation) + - "": [t: "меньше верного не вдвое равно"] # 0xea04 (en: 'less vert not double equals', google translation) + - "": [t: "gt vert не двойной равен"] # 0xea05 (en: 'gt vert not double equals', google translation) + - "": [t: "не меньше или равны"] # 0xea06 (en: 'not less than or equal to', google translation) + - "": [t: "не больше или равен"] # 0xea07 (en: 'not greater than or equal to', google translation) + - "": [t: "ни равняется и не меньше, чем"] # 0xea09 (en: 'neither equal to nor less than', google translation) + - "": [t: "не содержит или не равен"] # 0xea0a (en: 'does not contain or equal to', google translation) + - "": [t: "ни суперсет, ни равен"] # 0xea0b (en: 'neither superset of nor equal to', google translation) + - "": [t: "ни подмножество и не равное"] # 0xea0c (en: 'neither subset of nor equal to', google translation) + - "": [t: "обратный solidus submet"] # 0xea0d (en: 'reverse solidus subset', google translation) + - "": [t: "ни равняется и не больше"] # 0xea0e (en: 'neither equal to nor greater than', google translation) + - "": [t: "не минус оператор тильды"] # 0xea0f (en: 'not minus tilde operator', google translation) + - "": [t: "ни равняется и не меньше, чем"] # 0xea10 (en: 'neither equal to nor less than', google translation) + - "": [t: "не оператор тильды"] # 0xea11 (en: 'not tilde operator', google translation) + - "": [t: "не элемент или равен"] # 0xea12 (en: 'not element of or equal to', google translation) + - "": [t: "ни равняется и не больше"] # 0xea13 (en: 'neither equal to nor greater than', google translation) + - "": [t: "не почти равен"] # 0xea14 (en: 'not almost equal', google translation) + - "": [t: "не удается аналогично"] # 0xea15 (en: 'not succeeds similar', google translation) + - "": [t: "меньше, чем или наклонен, равный с чертой"] # 0xea16 (en: 'less than or slanted equal to with slash', google translation) + - "": [t: "больше, чем или наклонен, равный с чертой"] # 0xea17 (en: 'greater than or slanted equal to with slash', google translation) + - "": [t: "superset solidus"] # 0xea1a (google translation) + - "": [t: "не содержит"] # 0xea1b (en: 'does not contain', google translation) + - "": [t: "не меньше или равны"] # 0xea1d (en: 'not less than or equal to', google translation) + - "": [t: "не больше или равен"] # 0xea1e (en: 'not greater than or equal to', google translation) + - "": [t: "не почти равен минус"] # 0xea1f (en: 'not almost equal to minus', google translation) + - "": [t: "отрицание установки членства dot выше"] # 0xea22 (en: 'negated set membership dot above', google translation) + - "": [t: "не угол верта"] # 0xea2c (en: 'not vert angle', google translation) + - "": [t: "не параллельно наклонен"] # 0xea2d (en: 'not parallel slanted', google translation) + - "": [t: "не оператор бара"] # 0xea2e (en: 'not bar operator', google translation) + - "": [t: "не двойной оператор"] # 0xea2f (en: 'not double bar operator', google translation) + - "": [t: "не оператор тройного бар"] # 0xea30 (en: 'not triple bar operator', google translation) + - "": [t: "меньше, но не приблизительно равен"] # 0xea32 (en: 'less than but not approximately equal to', google translation) + - "": [t: "больше, чем, но не приблизительно равен"] # 0xea33 (en: 'greater than but not approximately equal to', google translation) + - "": [t: "меньше, чем или нет"] # 0xea34 (en: 'less than or not equal to', google translation) + - "": [t: "больше или нет"] # 0xea35 (en: 'greater than or not equal to', google translation) + - "": [t: "не вложено меньше, чем"] # 0xea36 (en: 'not nested less than', google translation) + - "": [t: "не вложено больше, чем"] # 0xea37 (en: 'not nested greater than', google translation) + - "": [t: "не намного меньше"] # 0xea38 (en: 'not much less than', google translation) + - "": [t: "не намного больше, чем"] # 0xea39 (en: 'not much greater than', google translation) + - "": [t: "предшествует, но не эквивалентно"] # 0xea3a (en: 'precedes but not equivalent to', google translation) + - "": [t: "успешно, но не эквивалентно"] # 0xea3b (en: 'succeeds but not equivalent to', google translation) + - "": [t: "предшествует, но не равен"] # 0xea3c (en: 'precedes but not equal to', google translation) + - "": [t: "добивается успеха, но не равен"] # 0xea3d (en: 'succeeds but not equal to', google translation) + - "": [t: "не равняется и не предшествует"] # 0xea3e (en: 'does not equal or precede', google translation) + - "": [t: "не равняется и не преуспевает"] # 0xea3f (en: 'does not equal or succeed', google translation) + - "": [t: "предшествует, но не равен"] # 0xea40 (en: 'precedes but not equal to', google translation) + - "": [t: "добивается успеха, но не равен"] # 0xea41 (en: 'succeeds but not equal to', google translation) + - "": [t: "не подмножество и не равен"] # 0xea42 (en: 'not subset of nor equal to', google translation) + - "": [t: "не суперсет и не равен"] # 0xea43 (en: 'not superset of nor equal to', google translation) + - "": [t: "подмножество или не равен"] # 0xea44 (en: 'subset of or not equal to', google translation) + - "": [t: "суперсет или не равен"] # 0xea45 (en: 'superset of or not equal to', google translation) + - "": [t: "не подмножество и не равен"] # 0xea46 (en: 'not subset of nor equal to', google translation) + - "": [t: "не суперсет и не равен"] # 0xea47 (en: 'not superset of nor equal to', google translation) + - "": [t: "не тройной меньше, чем"] # 0xea48 (en: 'not triple less than', google translation) + - "": [t: "не тройной больше, чем"] # 0xea49 (en: 'not triple greater than', google translation) + - "": [t: "не предшествует"] # 0xea4c (en: 'not precedes equals', google translation) + - "": [t: "не удастся"] # 0xea4d (en: 'not succeeds equals', google translation) + - "": [t: "не нормальная подгруппа с баром"] # 0xea50 (en: 'not normal subgroup of with bar', google translation) + - "": [t: "не содержит как обычную подгруппу с стержнем"] # 0xea51 (en: 'does not contain as normal subgroup with bar', google translation) + - "": [t: "не разница между"] # 0xea52 (en: 'not difference between', google translation) + - "": [t: "не геометрически эквивалент"] # 0xea53 (en: 'not geometrically equivalent to', google translation) + - "": [t: "не так же"] # 0xea54 (en: 'not vert similar', google translation) + - "": [t: "не равен или похож"] # 0xea55 (en: 'not equal or similar', google translation) + - "": [t: "не vert приблизительно"] # 0xea56 (en: 'not vert approximate', google translation) + - "": [t: "не приблизительно идентично"] # 0xea57 (en: 'not approximately identical to', google translation) + - "": [t: "не ухабистый"] # 0xea58 (en: 'not bumpy equals', google translation) + - "": [t: "не ухабистый сингл равна"] # 0xea59 (en: 'not bumpy single equals', google translation) + - "": [t: "не равна точке"] # 0xea5a (en: 'not equal dot', google translation) + - "": [t: "обратный не эквивалентный"] # 0xea5b (en: 'reverse not equivalent', google translation) + - "": [t: "не квадратный подмножество"] # 0xea60 (en: 'not square subset', google translation) + - "": [t: "не квадратный суперсет"] # 0xea61 (en: 'not square superset', google translation) + - "": [t: "не почти равен по сравнению с равными"] # 0xea62 (en: 'not almost equal over equal', google translation) + - "": [t: "не строго эквивалентно"] # 0xea63 (en: 'not strictly equivalent to', google translation) + - "": [t: "не конгруэнтная точка"] # 0xea64 (en: 'not congruent dot', google translation) + - "": [t: "обратный не равен"] # 0xea65 (en: 'reverse not equal', google translation) + - "": [t: "не верно левый треугольник равен"] # 0xea70 (en: 'not vert left triangle equals', google translation) + - "": [t: "не верный правый треугольник равна"] # 0xea71 (en: 'not vert right triangle equals', google translation) + - "": [t: "не частично"] # 0xea80 (en: 'not partial', google translation) + - "": [t: "стрелка украшивание"] # 0xeb00 (en: 'arrow embellishment extender', google translation) + - "": [t: "стрелка направо над стрелкой влево"] # 0xeb01 (en: 'arrow rightwards over arrow leftwards', google translation) + - "": [t: "стрелка направо над стрелкой влево"] # 0xeb02 (en: 'arrow rightwards over arrow leftwards', google translation) + - "": [t: "гарпун прямо над гарпуном слева"] # 0xeb03 (en: 'harpoon right over harpoon left', google translation) + - "": [t: "гарпун прямо над гарпуном слева"] # 0xeb04 (en: 'harpoon right over harpoon left', google translation) + - "": [t: "двойная стрелка на северо -востоке юго -запада"] # 0xeb05 (en: 'double arrow northeast southwest', google translation) + - "": [t: "двойная стрелка на северо -западе юго -востока"] # 0xeb06 (en: 'double arrow northwest southeast', google translation) + - "": [t: "горизонтальный удлинитель гарпуна"] # 0xeb07 (en: 'horizontal harpoon extender', google translation) + - "": [t: "ангарная часовая дуга слева стрелка"] # 0xeb08 (en: 'anticlockwise arc leftwards arrow', google translation) + - "": [t: "ангарная часовая дуга вправо стрел"] # 0xeb09 (en: 'anticlockwise arc rightwards arrow', google translation) + - "": [t: "большой справа акцент стрелы"] # 0xeb0b (en: 'large rightwards arrow accent', google translation) + - "": [t: "большой левый акцент стрелы"] # 0xeb0c (en: 'large leftwards arrow accent', google translation) + - "": [t: "слева стрела"] # 0xeb0d (en: 'leftwards arrowhead', google translation) + - "": [t: "право среда"] # 0xeb0e (en: 'rightwards arrowhead', google translation) + - "": [t: "большая левая стрелка справа с ходом"] # 0xeb0f (en: 'large left right arrow with stroke', google translation) + - "": [t: "горизонтальный удлинитель двойной стрелки"] # 0xeb10 (en: 'horizontal double arrow extender', google translation) + - "": [t: "большая левая правая двойная стрелка с ходом"] # 0xeb11 (en: 'large left right double arrow with stroke', google translation) + - "": [t: "вниз стрелка слева от стрелы вверх"] # 0xeb12 (en: 'downwards arrow leftwards of upwards arrow', google translation) + - "": [t: "стрелка влево с углом вниз"] # 0xeb13 (en: 'leftwards arrow with corner downwards', google translation) + - "": [t: "стрелка вправо с углом вверх"] # 0xeb14 (en: 'rightwards arrow with corner upwards', google translation) + - "": [t: "стрелка влево с углом вверх"] # 0xeb15 (en: 'leftwards arrow with corner upwards', google translation) + - "": [t: "верхняя стрелка в верхней части часовой стрелки с плюсом"] # 0xeb16 (en: 'anticlockwise top semicircle arrow with plus', google translation) + - "": [t: "верхняя стрелка по часовой стрелке с минус"] # 0xeb17 (en: 'clockwise top semicircle arrow with minus', google translation) + - "": [t: "стрелка вправо с хвостом с ходом"] # 0xeb18 (en: 'rightwards arrow with tail with stroke', google translation) + - "": [t: "правый гарпун вниз"] # 0xeb19 (en: 'right harpoon down', google translation) + - "": [t: "оставил гарпун вниз"] # 0xeb1a (en: 'left harpoon down', google translation) + - "": [t: "левый правый гарпун вниз"] # 0xeb1b (en: 'left right harpoon down', google translation) + - "": [t: "левый правый гарпун вверх"] # 0xeb1c (en: 'left right harpoon up', google translation) + - "": [t: "вниз по гарпуне ушел"] # 0xeb1d (en: 'up down harpoon left', google translation) + - "": [t: "вверх по гарпуне справа"] # 0xeb1e (en: 'up down harpoon right', google translation) + - "": [t: "стрелка вверх справа от стрелы вниз"] # 0xeb1f (en: 'upwards arrow to the right of downwards arrow', google translation) + - "": [t: "слева гарпун, чтобы бар с барб вверх"] # 0xeb20 (en: 'leftwards harpoon to bar with barb upwards', google translation) + - "": [t: "прямо гарпун, чтобы бар с барб вверх"] # 0xeb21 (en: 'rightwards harpoon to bar with barb upwards', google translation) + - "": [t: "левый гарпун, чтобы бар с барб вниз"] # 0xeb22 (en: 'leftwards harpoon to bar with barb downwards', google translation) + - "": [t: "прямо гарпун, чтобы бар с барб вниз"] # 0xeb23 (en: 'rightwards harpoon to bar with barb downwards', google translation) + - "": [t: "левый гарпун из бара с барб вверх"] # 0xeb24 (en: 'leftwards harpoon from bar with barb upwards', google translation) + - "": [t: "прямо гарпун из бара с барб вверх"] # 0xeb25 (en: 'rightwards harpoon from bar with barb upwards', google translation) + - "": [t: "левый гарпун из бара с барб вниз"] # 0xeb26 (en: 'leftwards harpoon from bar with barb downwards', google translation) + - "": [t: "прямо гарпун из бара с барб вниз"] # 0xeb27 (en: 'rightwards harpoon from bar with barb downwards', google translation) + - "": [t: "вверх гарпун, чтобы бар с барком слева"] # 0xeb28 (en: 'upwards harpoon to bar with barb leftwards', google translation) + - "": [t: "вниз по гарпуне, чтобы бар с барб налево"] # 0xeb29 (en: 'downwards harpoon to bar with barb leftwards', google translation) + - "": [t: "вверх гарпун, чтобы бар с барб вправо"] # 0xeb2a (en: 'upwards harpoon to bar with barb rightwards', google translation) + - "": [t: "вниз по гарпуне, чтобы бар с барб вправо"] # 0xeb2b (en: 'downwards harpoon to bar with barb rightwards', google translation) + - "": [t: "вверх гарпун из бара с барб слева"] # 0xeb2c (en: 'upwards harpoon from bar with barb leftwards', google translation) + - "": [t: "вниз по гарпуне из бара с барб слева"] # 0xeb2d (en: 'downwards harpoon from bar with barb leftwards', google translation) + - "": [t: "вверх гарпун из бара с барб справа"] # 0xeb2e (en: 'upwards harpoon from bar with barb rightwards', google translation) + - "": [t: "вниз по гарпуне из бара с барб прямо на это"] # 0xeb2f (en: 'downwards harpoon from bar with barb rightwards', google translation) + - "": [t: "вверх стрелой в бар"] # 0xeb30 (en: 'upwards arrow to bar', google translation) + - "": [t: "вниз стрелы в бар"] # 0xeb31 (en: 'downwards arrow to bar', google translation) + - "": [t: "вверх гарпун слева от гарпуна вниз"] # 0xeb32 (en: 'upwards harpoon to the left of downwards harpoon', google translation) + - "": [t: "вверх гарпун справа от вниз гарпун"] # 0xeb33 (en: 'upwards harpoon to the right of downwards harpoon', google translation) + - "": [t: "вверх стрелка"] # 0xeb34 (en: 'upwards arrowhead', google translation) + - "": [t: "вниз стрелка"] # 0xeb35 (en: 'downwards arrowhead', google translation) + - "": [t: "двойной гарпун с левой барб вниз вправо"] # 0xeb36 (en: 'double harpoon with leftwards barb down rightwards barb up', google translation) + - "": [t: "двойной гарпун с левой барб вверх вправо барб вниз"] # 0xeb37 (en: 'double harpoon with leftwards barb up rightwards barb down', google translation) + - "": [t: "стрелка влево над баром"] # 0xeb38 (en: 'leftwards arrow over bar', google translation) + - "": [t: "права стрелка над баром"] # 0xeb39 (en: 'rightwards arrow over bar', google translation) + - "": [t: "стрелка влево под баром"] # 0xeb3a (en: 'leftwards arrow under bar', google translation) + - "": [t: "стрелка вправо под баром"] # 0xeb3b (en: 'rightwards arrow under bar', google translation) + - "": [t: "левая правая тройная стрелка"] # 0xeb3c (en: 'left right triple arrow', google translation) + - "": [t: "двойная стрелка на северо -востоке юго -востока"] # 0xeb3f (en: 'double arrow northeast southeast', google translation) + - "": [t: "антикомальная часовая стрелка слева"] # 0xeb40 (en: 'anticlockwise left semicircle arrow', google translation) + - "": [t: "по часовой стрелке левая стрелка полукруга"] # 0xeb41 (en: 'clockwise left semicircle arrow', google translation) + - "": [t: "левый открытый круг левый правый стрелка"] # 0xeb42 (en: 'left open circle left right arrow', google translation) + - "": [t: "право стрелы над тильдой"] # 0xeb44 (en: 'rightwards arrow over tilde', google translation) + - "": [t: "стрелка слева над тильдой"] # 0xeb45 (en: 'leftwards arrow over tilde', google translation) + - "": [t: "слева гарпун над баром"] # 0xeb48 (en: 'leftwards harpoon over bar', google translation) + - "": [t: "прямо гарпун над баром"] # 0xeb49 (en: 'rightwards harpoon over bar', google translation) + - "": [t: "левый гарпун под баром"] # 0xeb4a (en: 'leftwards harpoon under bar', google translation) + - "": [t: "прямо гарпун под баром"] # 0xeb4b (en: 'rightwards harpoon under bar', google translation) + - "": [t: "приседание чернокожие левые стрелы"] # 0xeb4c (en: 'squat black leftwards arrow', google translation) + - "": [t: "по часовой стрелке правая стрелка полукруга"] # 0xeb50 (en: 'clockwise right semicircle arrow', google translation) + - "": [t: "антиковая стрелка правой полукруги"] # 0xeb51 (en: 'anticlockwise right semicircle arrow', google translation) + - "": [t: "левый открытый круг влево правый гарпун"] # 0xeb52 (en: 'left open circle left right harpoon', google translation) + - "": [t: "вверх стрелка слева от вертикального бара"] # 0xeb58 (en: 'upwards arrow leftwards of vertical bar', google translation) + - "": [t: "вниз стрелка слева от вертикального бара"] # 0xeb59 (en: 'downwards arrow leftwards of vertical bar', google translation) + - "": [t: "вверх стрелка вправо от вертикального бара"] # 0xeb5a (en: 'upwards arrow rightwards of vertical bar', google translation) + - "": [t: "стрелка вниз вправо от вертикального бара"] # 0xeb5b (en: 'downwards arrow rightwards of vertical bar', google translation) + - "": [t: "стрелка вправо с расширенным крюком вниз"] # 0xeb5c (en: 'rightwards arrow with extended downwards hook', google translation) + - "": [t: "стрелка влево с расширенным крючком"] # 0xeb5d (en: 'leftwards arrow with extended hook', google translation) + - "": [t: "стрелка влево с протяженным крюком вниз"] # 0xeb5e (en: 'leftwards arrow with extended downwards hook', google translation) + - "": [t: "стрелка вправо с расширенным крючком"] # 0xeb5f (en: 'rightwards arrow with extended hook', google translation) + - "": [t: "не правая стрелка волнистая"] # 0xeb60 (en: 'not right arrow wavy', google translation) + - "": [t: "не правая стрелка изогнута"] # 0xeb61 (en: 'not right arrow curved', google translation) + - "": [t: "вверх гарпун слева от вертикального бара"] # 0xeb68 (en: 'upwards harpoon leftwards of vertical bar', google translation) + - "": [t: "вниз по гарпуне слева от вертикального бара"] # 0xeb69 (en: 'downwards harpoon leftwards of vertical bar', google translation) + - "": [t: "вверх гарпун прямо наоборот вертикального бара"] # 0xeb6a (en: 'upwards harpoon rightwards of vertical bar', google translation) + - "": [t: "вниз по гарпуне прямо с вертикальным баром"] # 0xeb6b (en: 'downwards harpoon rightwards of vertical bar', google translation) + - "": [t: "вертикальная двойная стрелка"] # 0xeb6c (en: 'vertical double arrow extender', google translation) + - "": [t: "вертикальный гарпун с левым удлинителем"] # 0xeb6d (en: 'vertical harpoon with barb left extender', google translation) + - "": [t: "вертикальный гарпун с правым удлинителем барб"] # 0xeb6e (en: 'vertical harpoon with barb right extender', google translation) + - "": [t: "правый гарпун над левым гарпуном вправо"] # 0xeb6f (en: 'right harpoon over left harpoon right', google translation) + - "": [t: "правый гарпун над левым гарпуном слева"] # 0xeb70 (en: 'right harpoon over left harpoon left', google translation) + - "": [t: "левый гарпун над правым гарпуном вправо"] # 0xeb71 (en: 'left harpoon over right harpoon right', google translation) + - "": [t: "левый гарпун над правой гарпуной слева"] # 0xeb72 (en: 'left harpoon over right harpoon left', google translation) + - "": [t: "стрела влево от стрелки бара"] # 0xeb73 (en: 'leftwards arrow from bar arrowhead', google translation) + - "": [t: "стрела влево вправо от стрелки из бара"] # 0xeb74 (en: 'leftwards rightwards arrow from bar extender', google translation) + - "": [t: "стрелка влево от шарнирного хвоста"] # 0xeb75 (en: 'leftwards arrow from bar tail', google translation) + - "": [t: "стрелка вправо от хвоста"] # 0xeb76 (en: 'rightwards arrow from bar tail', google translation) + - "": [t: "стрелка вправо от стрелки бар"] # 0xeb77 (en: 'rightwards arrow from bar arrowhead', google translation) + - "": [t: "вверх гарпун из бара с барб -слева стрел"] # 0xeb78 (en: 'upwards harpoon from bar with barb leftwards arrowhead', google translation) + - "": [t: "стрелка вправо над стрелкой влево справа"] # 0xeb79 (en: 'rightwards arrow over leftwards arrow right', google translation) + - "": [t: "вправо стрел налево стрел влево"] # 0xeb7a (en: 'rightwards arrow over leftwards arrow left', google translation) + - "": [t: "стрелка слева направо вправо"] # 0xeb7b (en: 'leftwards arrow over rightwards arrow right', google translation) + - "": [t: "стрелка слева направо влево"] # 0xeb7c (en: 'leftwards arrow over rightwards arrow left', google translation) + - "": [t: "стрелка вверх от стрелки бара"] # 0xeb7d (en: 'upwards arrow from bar arrowhead', google translation) + - "": [t: "стрелка вверх от хвоста"] # 0xeb7e (en: 'upwards arrow from bar tail', google translation) + - "": [t: "стрелка вниз от хвоста"] # 0xeb7f (en: 'downwards arrow from bar tail', google translation) + - "": [t: "стрелка вниз от стрелки бар"] # 0xeb80 (en: 'downwards arrow from bar arrowhead', google translation) + - "": [t: "вниз по гарпуне от бара с барб прямо сразу"] # 0xeb81 (en: 'downwards harpoon from bar with barb rightwards arrowhead', google translation) + - "": [t: "вверх гарпун слева от дна вниз вниз"] # 0xeb82 (en: 'upwards harpoon to the left of downwards harpoon bottom', google translation) + - "": [t: "вверх гарпун слева от вниз харпун экспендера"] # 0xeb83 (en: 'upwards harpoon to the left of downwards harpoon extender', google translation) + - "": [t: "вниз по гарпуне слева от вершины harpoon вверх"] # 0xeb84 (en: 'downwards harpoon to the left of upwards harpoon top', google translation) + - "": [t: "вверх гарпун слева от вершины гарпуна вниз"] # 0xeb85 (en: 'upwards harpoon to the left of downwards harpoon top', google translation) + - "": [t: "вниз по гарпуне слева от удлинителя harpoon вверх"] # 0xeb86 (en: 'downwards harpoon to the left of the upwards harpoon extender', google translation) + - "": [t: "вниз по гарпуне слева от дна вверх гарпуна"] # 0xeb87 (en: 'downwards harpoon to the left of the upwards harpoon bottom', google translation) + - "": [t: "вверх стрелка слева от дна стрелы вниз"] # 0xeb88 (en: 'upwards arrow leftwards of downwards arrow bottom', google translation) + - "": [t: "вниз стрелка слева от вершины стрелы вверх"] # 0xeb89 (en: 'downwards arrow leftwards of upwards arrow top', google translation) + - "": [t: "вверх стрелка слева от вершины стрелы вниз"] # 0xeb8a (en: 'upwards arrow leftwards of downwards arrow top', google translation) + - "": [t: "вниз стрелка слева от дна стрелы вверх"] # 0xeb8b (en: 'downwards arrow leftwards of upwards arrow bottom', google translation) + - "": [t: "левый направо стрелками удлинитель"] # 0xeb8c (en: 'leftwards rightwards arrows extender', google translation) + - "": [t: "северо -восточный экспендер"] # 0xeb8d (en: 'north east arrow extender', google translation) + - "": [t: "северо -западный экспендер"] # 0xeb8e (en: 'north west arrow extender', google translation) + - "": [t: "вниз по направлению скобки влево"] # 0xec00 (en: 'down pointing brace left', google translation) + - "": [t: "вниз по направлению скобки в середине"] # 0xec01 (en: 'down pointing brace mid', google translation) + - "": [t: "вниз по указанию скобки вправо"] # 0xec02 (en: 'down pointing brace right', google translation) + - "": [t: "горизонтальный удлинитель"] # 0xec03 (en: 'horizontal brace extender', google translation) + - "": [t: "укажите скобку влево"] # 0xec04 (en: 'up pointing brace left', google translation) + - "": [t: "укажите скобку в середине"] # 0xec05 (en: 'up pointing brace mid', google translation) + - "": [t: "установленная скоба правильно"] # 0xec06 (en: 'up-pointing brace right', google translation) + - "": [t: "левый вертикальный бар"] # 0xec07 (en: 'left vertical bar', google translation) + - "": [t: "правый вертикальный бар"] # 0xec08 (en: 'right vertical bar', google translation) + - "": [t: "левый двойной вертикальный бар"] # 0xec09 (en: 'left double vertical bar', google translation) + - "": [t: "правая двойная вертикальная бар"] # 0xec0a (en: 'right double vertical bar', google translation) + - "": [t: "горизонтальный растяжение кронштейна"] # 0xec0b (en: 'horizontal bracket extender', google translation) + - "": [t: "под квадратным кронштейном"] # 0xec0c (en: 'under square bracket', google translation) + - "⎵": [t: "под квадратным кронштейном"] # 0x23b5 (en: 'under square bracket', google translation) + - "": [t: "над квадратным кронштейном"] # 0xec0d (en: 'over square bracket', google translation) + - "⎴": [t: "над квадратным кронштейном"] # 0x23b4 (en: 'over square bracket', google translation) + - "": [t: "под скобкой ушел"] # 0xec0e (en: 'under bracket left', google translation) + - "": [t: "под скобкой справа"] # 0xec0f (en: 'under bracket right', google translation) + - "": [t: "за скобкой ушел"] # 0xec10 (en: 'over bracket left', google translation) + - "": [t: "над кронштейном вправо"] # 0xec11 (en: 'over bracket right', google translation) + - "": [t: "левый скол 1"] # 0xec12 (en: 'left parens 1', google translation) + - "": [t: "левый скол 2"] # 0xec13 (en: 'left parens 2', google translation) + - "": [t: "левый скол 3"] # 0xec14 (en: 'left parens 3', google translation) + - "": [t: "левый скол 4"] # 0xec15 (en: 'left parens 4', google translation) + - "": [t: "правая скобка 1"] # 0xec16 (en: 'right parens 1', google translation) + - "": [t: "правая скобка 2"] # 0xec17 (en: 'right parens 2', google translation) + - "": [t: "правая скобка 3"] # 0xec18 (en: 'right parens 3', google translation) + - "": [t: "правая скобка 4"] # 0xec19 (en: 'right parens 4', google translation) + - "": [t: "радикальный 1"] # 0xec1a (en: 'radical 1', google translation) + - "": [t: "радикальный 2"] # 0xec1b (en: 'radical 2', google translation) + - "": [t: "радикал 3"] # 0xec1c (en: 'radical 3', google translation) + - "": [t: "радикал 4"] # 0xec1d (en: 'radical 4', google translation) + - "": [t: "радикал 5"] # 0xec1e (en: 'radical 5', google translation) + - "": [t: "радикальное дно"] # 0xec1f (en: 'radical bottom', google translation) + - "": [t: "радикальный вертикальный удлинитель"] # 0xec20 (en: 'radical vertical extender', google translation) + - "": [t: "радикальный топ"] # 0xec21 (en: 'radical top', google translation) + - "": [t: "оставленный белый топ кронштейна"] # 0xec22 (en: 'left white bracket top', google translation) + - "": [t: "оставый белый растяжение кронштейна"] # 0xec23 (en: 'left white bracket extender', google translation) + - "": [t: "левый белый кронштейн дно"] # 0xec24 (en: 'left white bracket bottom', google translation) + - "": [t: "правый белый кронштейн"] # 0xec25 (en: 'right white bracket top', google translation) + - "": [t: "правый белый кронштейн"] # 0xec26 (en: 'right white bracket extender', google translation) + - "": [t: "правый белый кронштейн дно"] # 0xec27 (en: 'right white bracket bottom', google translation) + - "": [t: "оставил белый кудрявый кронштейн"] # 0xec30 (en: 'left white curly bracket', google translation) + - "": [t: "правый белый кудрявый кронштейн"] # 0xec31 (en: 'right white curly bracket', google translation) + - "": [t: "знак длинного дивизии"] # 0xec32 (en: 'long division sign', google translation) + - "": [t: "длинное знаком дивизии"] # 0xec33 (en: 'long division sign extender', google translation) + - "": [t: "короткое подразделение"] # 0xec34 (en: 'short division', google translation) + - "": [t: "двойной юго -запад к северо -востоку эм бонд"] # 0xec40 (en: 'double southwest to northeast em bond', google translation) + - "": [t: "двойной северо -запад до юго -восточной эм бонд"] # 0xec41 (en: 'double northwest to southeast em bond', google translation) + - "": [t: "единая горизонтальная em -связь"] # 0xec42 (en: 'single horizontal em bond', google translation) + - "": [t: "двойная горизонтальная em -связь"] # 0xec43 (en: 'double horizontal em bond', google translation) + - "": [t: "тройная горизонтальная эм бонг"] # 0xec44 (en: 'triple horizontal em bond', google translation) + - "": [t: "одиночная вертикальная облигация"] # 0xec45 (en: 'single vertical em bond', google translation) + - "": [t: "двойная вертикальная облигация"] # 0xec46 (en: 'double vertical em bond', google translation) + - "": [t: "тройная вертикальная облигация"] # 0xec47 (en: 'triple vertical em bond', google translation) + - "": [t: "меньше, чем эм бонд"] # 0xec48 (en: 'less than em bond', google translation) + - "": [t: "больше, чем эм бонд"] # 0xec49 (en: 'greater than em bond', google translation) + - "": [t: "одиночная горизонтальная en bond"] # 0xec4a (en: 'single horizontal en bond', google translation) + - "": [t: "двойная горизонтальная en bond"] # 0xec4b (en: 'double horizontal en bond', google translation) + - "": [t: "тройная горизонтальная связь"] # 0xec4c (en: 'triple horizontal en bond', google translation) + - "": [t: "верхний левый прямоугольник"] # 0xec80 (en: 'top left rectangle', google translation) + - "": [t: "внизу левый прямоугольник"] # 0xec81 (en: 'bottom left rectangle', google translation) + - "": [t: "вверху правого прямоугольника"] # 0xec90 (en: 'top right rectangle', google translation) + - "": [t: "нижний правый прямоугольник"] # 0xec91 (en: 'bottom right rectangle', google translation) + - "": [t: "синтетический угол дивизии"] # 0xec92 (en: 'synthetic division corner', google translation) + - "": [t: "синтетическое разделение горизонтальное удлинитель"] # 0xec93 (en: 'synthetic division horizontal extender', google translation) + - "": [t: "вертикальное удлинение синтетического деления"] # 0xec94 (en: 'synthetic division vertical extender', google translation) + - "": [t: "левый потолок"] # 0xec95 (en: 'left ceiling floor extender', google translation) + - "": [t: "правый потолок"] # 0xec96 (en: 'right ceiling floor extender', google translation) + - "": [t: "над скобком удлинителя"] # 0xec97 (en: 'over bracket extender', google translation) + - "": [t: "вертикальный батончик"] # 0xec98 (en: 'vertical bar extender', google translation) + - "": [t: "левый двойной вертикальный удлинитель"] # 0xec99 (en: 'left double vertical bar extender', google translation) + - "": [t: "горизонтальный батончик"] # 0xec9a (en: 'horizontal bar extender', google translation) + - "": [t: "под преодолеванием кронштейна"] # 0xec9c (en: 'under bracket extender', google translation) + - "": [t: "указывая в скобках справа"] # 0xec9d (en: 'down pointing paren right', google translation) + - "": [t: "указывание о скобках"] # 0xec9e (en: 'down pointing paren extender', google translation) + - "": [t: "установка вниз по указанию скобок"] # 0xec9f (en: 'down pointing paren left', google translation) + - "": [t: "укажите удлинители"] # 0xeca0 (en: 'up pointing brace extender', google translation) + - "": [t: "указывая в скобках"] # 0xeca1 (en: 'up pointing paren left', google translation) + - "": [t: "укажите удлинители скобок"] # 0xeca2 (en: 'up pointing paren extender', google translation) + - "": [t: "указывая в скобках"] # 0xeca3 (en: 'up pointing paren right', google translation) + - "": [t: "вниз по направлению скобки удлинителя"] # 0xeca4 (en: 'down pointing brace extender', google translation) + - "": [t: "планка константа над двумя pi bar"] # 0xed00 (en: 'planck constant over two pi bar', google translation) + - "": [t: "зеркало g"] # 0xed01 (en: 'mirror g', google translation) + - "": [t: "dotless j"] # 0xed02 (google translation) + - "": [t: "дигамма"] # 0xed03 (en: 'digamma', google translation) + - "ϝ": [t: "дигамма"] # 0x3dd (en: 'digamma') + - "": [t: ""] # 0xed10 (en: 'd', google translation) + - "ⅆ": [t: "ⅆ"] # 0x2146 (en: 'd', google translation) + - "": [t: ""] # 0xed11 (en: 'e', google translation) + - "ⅇ": [t: "ⅇ"] # 0x2147 (en: 'e', google translation) + - "": [t: ""] # 0xed12 (en: 'i', google translation) + - "ⅈ": [t: "ⅈ"] # 0x2148 (en: 'i', google translation) + - "": [t: ""] # 0xed13 (en: 'j', google translation) + - "ⅅ": + - spell: "translate('.', 'ⅅ', 'DD')" # 0xed16, 0x2145 + +# The private use chars are from MathType + - "": [t: "интегральная цикл контура против часовой стрелки"] # 0xee00 (en: 'anticlockwise contour integral loop', google translation) + - "": [t: "интегральная петля контура по часовой стрелке"] # 0xee01 (en: 'clockwise contour integral loop', google translation) + - "": [t: ""] # 0xee04 + - "": [t: ""] # 0xee05 + - "": [t: ""] # 0xee06 + - "": [t: ""] # 0xee07 + - "": [t: ""] # 0xee08 + - "": [t: ""] # 0xee09 + - "": [t: ""] # 0xee0a + - "": [t: ""] # 0xee0b + - "": [t: ""] # 0xee0c + - "": [t: "совместное статус украшения"] # 0xee0d (en: 'joint status embellishment', google translation) + - "": [t: "совместное статус украшений осталось"] # 0xee0e (en: 'joint status embellishment left', google translation) + - "": [t: "совместное статус правильно"] # 0xee0f (en: 'joint status embellishment right', google translation) + - "": [t: "совместное статус украснение"] # 0xee10 (en: 'joint status embellishment extender', google translation) + - "": [t: "интегральная петля"] # 0xee11 (en: 'integral loop', google translation) + - "": [t: "интегральная петля двойная"] # 0xee12 (en: 'integral loop double', google translation) + - "": [t: "интегральная петля triple"] # 0xee13 (en: 'integral loop triple', google translation) + - "": [t: "расширение интегральной петли двойной"] # 0xee15 (en: 'expanding integral loop double', google translation) + - "": [t: "расширение интегральной петли triple"] # 0xee16 (en: 'expanding integral loop triple', google translation) + - "": [t: "асимптотически равен акценту"] # 0xee17 (en: 'asymptotically equal to accent', google translation) + - "": [t: "акцент с равным знаком"] # 0xee18 (en: 'equal sign accent', google translation) + - "": [t: "четырехкратный prime"] # 0xee19 (en: 'quadruple prime', google translation) + - "": [t: "бар акцент с открытым кругом слева"] # 0xee1a (en: 'bar accent with open circle left', google translation) + - "": [t: "бар акцент с закрытым кругом слева"] # 0xee1b (en: 'bar accent with closed circle left', google translation) + - "": [t: "бар акцент с открытым кругом справа"] # 0xee1c (en: 'bar accent with open circle right', google translation) + - "": [t: "бар акцент с надтуми"] # 0xee1d (en: 'bar accent with over dot', google translation) + - "": [t: "бар акцент с под точкой"] # 0xee1e (en: 'bar accent with under dot', google translation) + - "": [t: "бар акцент с двойным над точкой"] # 0xee1f (en: 'bar accent with double over dot', google translation) + - "": [t: "бар акцент с двойным под точкой"] # 0xee20 (en: 'bar accent with double under dot', google translation) + - "": [t: "бар акцент с помощью кареты"] # 0xee21 (en: 'bar accent with caret', google translation) + - "": [t: "толстый под акцентом"] # 0xee22 (en: 'thick under bar accent', google translation) + - "": [t: "бар акцент с закрытым кругом справа"] # 0xee23 (en: 'bar accent with closed circle right', google translation) + - "": [t: "большая точка выше"] # 0xee24 (en: 'large dot above', google translation) + - "": [t: "марк выравнивания"] # 0xef00 (en: 'alignment mark', google 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: "отсутствующий термин"] # 0xef41 (en: 'missing term', google translation) + - "": [t: "контурная стрелка часовой стрелки слева"] # 0xef80 (en: 'clockwise contour integral arrow on left', google translation) + - "": [t: "интеграл с квадратом"] # 0xef81 (en: 'integral with square', google translation) + - "": [t: "интеграл со складом"] # 0xef82 (en: 'integral with slash', google translation) + - "": [t: "обратный интеграл"] # 0xef83 (en: 'reversed integral', google translation) + - "": [t: "двойной ноль над двойным ноль"] # 0xef90 (en: 'double zero over double zero', google translation) + - "": [t: "ноль со слэш"] # 0xef91 (en: 'zero with slash', google translation) + + # fraktur chars in math alphabetic block and also MathType private use area + # Some of these are reserved because they were used in Plane 0 -- that shouldn't be an issue other than causing the other chars to not display + - "𝔄-𝔜": # 0x1d504 - 0x1d51d ('z' version is reserved) + - t: "фрактур" # (en: 'fraktur', google translation) + - spell: "translate('.', '𝔄𝔅𝔆𝔇𝔈𝔉𝔊𝔋𝔌𝔍𝔎𝔏𝔐𝔑𝔒𝔓𝔔𝔕𝔖𝔗𝔘𝔙𝔚𝔛𝔜', 'ABCDEFGHIJKLMNOPQRSTUVWXY')" + + - "-": # 0xf000 - 0xf018 + - t: "фрактур" # (en: 'fraktur', google translation) + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXY')" + + - "𝔞-𝔷": # 0x1d51e - 0x1d537 + - t: "фрактур" # (en: 'fraktur', google translation) + - spell: "translate('.', '𝔞𝔟𝔠𝔡𝔢𝔣𝔤𝔥𝔦𝔧𝔨𝔩𝔪𝔫𝔬𝔭𝔮𝔯𝔰𝔱𝔲𝔳𝔴𝔵𝔶𝔷', 'abcdefghijklmnopqrstuvwxyz')" + - "-": # 0xf01a - 0xf033 + - t: "фрактур" # (en: 'fraktur', google translation) + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + - "𝕬-𝖅": # 0x1D56C - 0x1D585 + - t: "fraktur bold" # (google translation) + - spell: "translate('.', '𝕬𝕭𝕮𝕯𝕰𝕱𝕲𝕳𝕴𝕵𝕶𝕷𝕸𝕹𝕺𝕻𝕼𝕽𝕾𝕿𝖀𝖁𝖂𝖃𝖄𝖅', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf040 - 0xf059 + - t: "fraktur bold" # (google translation) + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝖆-𝖟": # 0x1d586 - 0x1d59f + - t: "fraktur bold" # (google translation) + - spell: "translate('.', '𝖆𝖇𝖈𝖉𝖊𝖋𝖌𝖍𝖎𝖏𝖐𝖑𝖒𝖓𝖔𝖕𝖖𝖗𝖘𝖙𝖚𝖛𝖜𝖝𝖞𝖟', 'abcdefghijklmnopqrstuvwxyz')" + - "-": # 0xf05a - 0xf073 + - t: "fraktur bold" # (google 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: "двойной удар" # (en: 'double struck', google translation) + - spell: "translate('.', '𝔸𝔹𝔺𝔻𝔼𝔽𝔾𝔿𝕀𝕁𝕂𝕃𝕄𝕅𝕆𝕇𝕈𝕉𝕊𝕋𝕌𝕍𝕎𝕏𝕐', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf080 - 0xf098 + - t: "двойной удар" # (en: 'double struck', google translation) + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝕒-𝕫": # 0x1d552 - 0x1d56b + - t: "двойной удар" # (en: 'double struck', google translation) + - spell: "translate('.', '𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫', 'abcdefghijklmnopqrstuvwxyz')" + - "-": # 0xf09a - 0xf0b3 + - t: "двойной удар" # (en: 'double struck', google translation) + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - "𝟘-𝟡": # 0x1d7d8 - 0x1d7e1 + - t: "двойной удар" # (en: 'double struck', google translation) + - spell: "translate('.', '𝟘𝟙𝟚𝟛𝟜𝟝𝟞𝟟𝟠𝟡', '0123456789')" + - "-": # 0xf0c0 - 0xf0c9 + - t: "двойной удар" # (en: 'double struck', google translation) + - spell: "translate('.', '', '0123456789')" + + - "": [t: "дважды поразил нахбла"] # 0xf0ca (en: 'double struck nahblah', google translation) + - "": [t: "дважды ударил эйлера постоянна"] # 0xf0cb (en: 'double struck euler constant', google translation) + + # script chars in math alphabetic block and also MathType private use area + - "𝒜-𝒵": # 0x1d49c - 0x1d4b5 + - t: "сценарий" # (en: 'script', google translation) + - spell: "translate('.', '𝒜𝒝𝒞𝒟𝒠𝒡𝒢𝒣𝒤𝒥𝒦𝒧𝒨𝒩𝒪𝒫𝒬𝒭𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf100 - 0xf119 + - t: "сценарий" # (en: 'script', google translation) + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝒶-𝓏": # 0x1d4b6 - 0x1d4cf + - t: "сценарий" # (en: 'script', google translation) + - spell: "translate('.', '𝒶𝒷𝒸𝒹𝒺𝒻𝒼𝒽𝒾𝒿𝓀𝓁𝓂𝓃𝓄𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏', 'abcdefghijklmnopqrstuvwxyz')" + - "-": # 0xf11a - 0xf133 + - t: "сценарий" # (en: 'script', google translation) + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + # bold script chars in math alphabetic block and also MathType private use area + - "𝓐-𝓩": # 0x1d4d0 - 0x1d4e9 + - t: "скрипт жирный" # (en: 'script bold', google translation) + - spell: "translate('.', '𝓐𝓑𝓒𝓓𝓔𝓕𝓖𝓗𝓘𝓙𝓚𝓛𝓜𝓝𝓞𝓟𝓠𝓡𝓢𝓣𝓤𝓥𝓦𝓧𝓨𝓩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf140 - 0xf159 + - t: "скрипт жирный" # (en: 'script bold', google translation) + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝓪-𝔃": # 0x1d4ea - 0x1d503 + - t: "скрипт жирный" # (en: 'script bold', google translation) + - spell: "translate('.', '𝓪𝓫𝓬𝓭𝓮𝓯𝓰𝓱𝓲𝓳𝓴𝓵𝓶𝓷𝓸𝓹𝓺𝓻𝓼𝓽𝓾𝓿𝔀𝔁𝔂𝔃', 'abcdefghijklmnopqrstuvwxyz')" + - "-": # 0xf15a - 0xf173 + - t: "скрипт жирный" # (en: 'script bold', google translation) + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + - "-": # 0xf180 - 0xf199 + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "": # 0xf19a + - test: + if: "$CapitalLetters_Beep" + then: + - audio: + value: "beep.mp4" + replace: [] + - test: + if: "$CapitalLetters_UseWord" + then_test: + if: "$SpeechOverrides_CapitalLetters = ''" + then_test: + if: "$Impairment = 'Blindness'" + then: [t: "пропусков"] # (en: 'cap', google translation) + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [t: "лигатура ae"] # (en: 'ligature ae', google translation) + - "": # 0xf19b + - test: + if: "$CapitalLetters_Beep" + then: + - audio: + value: "beep.mp4" + replace: [] + - test: + if: "$CapitalLetters_UseWord" + then_test: + if: "$SpeechOverrides_CapitalLetters = ''" + then_test: + if: "$Impairment = 'Blindness'" + then: [t: "пропусков"] # (en: 'cap', google translation) + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [t: "острый с"] # (en: 'sharp s', google translation) + - "": # 0xf19c + - test: + if: "$CapitalLetters_Beep" + then: + - audio: + value: "beep.mp4" + replace: [] + - test: + if: "$CapitalLetters_UseWord" + then_test: + if: "$SpeechOverrides_CapitalLetters = ''" + then_test: + if: "$Impairment = 'Blindness'" + then: [t: "пропусков"] # (en: 'cap', google translation) + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [t: "o с инсультом"] # (en: 'o with stroke', google translation) + + # MathType only has a few of the cap Greek letters in PUA + - "": # 0xf201 - 0xf209 + - t: "двойной удар" # (en: 'double struck', google translation) + - spell: "translate('.', '', 'ΔΨΛΠΣΘΓΩΥ')" + + - "-": # 0xf220 - 0xf236 + - t: "двойной удар" # (en: 'double struck', google translation) + - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "": [t: "двойной удар final sigma"] # 0xf237 (en: 'double struck final sigma', google translation) + - "": [t: "дважды поразил ро"] # 0xf250 (en: 'double struck rho', google translation) + - "": [t: "двойной удар phi"] # 0xf251 (en: 'double struck phi', google translation) + - "𝐀-𝐙": # 0x1d400 - 0x1d419 + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝐀𝐁𝐂𝐃𝐄𝐅𝐆𝐇𝐈𝐉𝐊𝐋𝐌𝐍𝐎𝐏𝐐𝐑𝐒𝐓𝐔𝐕𝐖𝐗𝐘𝐙', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf260 - 0xf279 + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝐚-𝐳": # 0x1d41a - 0x1d433 + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝐚𝐛𝐜𝐝𝐞𝐟𝐠𝐡𝐢𝐣𝐤𝐥𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐭𝐮𝐯𝐰𝐱𝐲𝐳', 'abcdefghijklmnopqrstuvwxyz')" + + - "-": # 0xf27a - 0xf293 + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + - "𝐴-𝑍": # 0x1d434 - 0x1d44d + - spell: "translate('.', '𝐴𝐵𝐶𝐷𝐸𝐹𝐺𝐻𝐼𝐽𝐾𝐿𝑀𝑁𝑂𝑃𝑄𝑅𝑆𝑇𝑈𝑉𝑊𝑋𝑌𝑍', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf294 - 0xf2ad + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝑎-𝑧": # 0x1d44e - 0x1d467 + - spell: "translate('.', '𝑎𝑏𝑐𝑑𝑒𝑓𝑔𝑕𝑖𝑗𝑘𝑙𝑚𝑛𝑜𝑝𝑞𝑟𝑠𝑡𝑢𝑣𝑤𝑥𝑦𝑧', 'abcdefghijklmnopqrstuvwxyz')" + + - "-": # 0xf2ae - 0xf2c7 + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + - "𝑨-𝒁": # 0x1d468 - 0x1d481 + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝑨𝑩𝑪𝑫𝑬𝑭𝑮𝑯𝑰𝑱𝑲𝑳𝑴𝑵𝑶𝑷𝑸𝑹𝑺𝑻𝑼𝑽𝑾𝑿𝒀𝒁', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf2c8 - 0xf2e1 + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝒂-𝒛": # 0x1d482 - 0x1d49b + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝒂𝒃𝒄𝒅𝒆𝒇𝒈𝒉𝒊𝒋𝒌𝒍𝒎𝒏𝒐𝒑𝒒𝒓𝒔𝒕𝒖𝒗𝒘𝒙𝒚𝒛', 'abcdefghijklmnopqrstuvwxyz')" + + - "-": # 0xf2e2 - 0xf2fb + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + - "𝖠-𝖹": # 0x1d5a0 - 0x1d5b9 + - spell: "translate('.', '𝖠𝖡𝖢𝖣𝖤𝖥𝖦𝖧𝖨𝖩𝖪𝖫𝖬𝖭𝖮𝖯𝖰𝖱𝖲𝖳𝖴𝖵𝖶𝖷𝖸𝖹', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf300 - 0xf319 + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝖺-𝗓": # 0x1d5ba - 0x1d5d3 + - spell: "translate('.', '𝖺𝖻𝖼𝖽𝖾𝖿𝗀𝗁𝗂𝗃𝗄𝗅𝗆𝗇𝗈𝗉𝗊𝗋𝗌𝗍𝗎𝗏𝗐𝗑𝗒𝗓', 'abcdefghijklmnopqrstuvwxyz')" + + - "-": # 0xf31a - 0xf333 + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + - "𝗔-𝗭": # 0x1d5d4 - 0x1d5ed + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬𝗭', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf334 - 0xf34d + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝗮-𝘇": # 0x1d5ee - 0x1d607 + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇', 'abcdefghijklmnopqrstuvwxyz')" + + - "-": # 0xf34e - 0xf367 + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + - "𝘈-𝘡": # 0x1d608 - 0x1d621 + # - t: "italic" + - spell: "translate('.', '𝘈𝘉𝘊𝘋𝘌𝘍𝘎𝘏𝘐𝘑𝘒𝘓𝘔𝘕𝘖𝘗𝘘𝘙𝘚𝘛𝘜𝘝𝘞𝘟𝘠𝘡', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - "-": # 0xf368 - 0xf381 + # - t: "italic" + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝘢-𝘻": # 0x1d622 - 0x1d63b + # - t: "italic" + - spell: "translate('.', '𝘢𝘣𝘤𝘥𝘦𝘧𝘨𝘩𝘪𝘫𝘬𝘭𝘮𝘯𝘰𝘱𝘲𝘳𝘴𝘵𝘶𝘷𝘸𝘹𝘺𝘻', 'abcdefghijklmnopqrstuvwxyz')" + + - "-": # 0xf382 - 0xf39b + # - t: "italic" + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + - "𝘼-𝙕": # 0x1d63c - 0x1d655 + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝘼𝘽𝘾𝘿𝙀𝙁𝙂𝙃𝙄𝙅𝙆𝙇𝙈𝙉𝙊𝙋𝙌𝙍𝙎𝙏𝙐𝙑𝙒𝙓𝙔𝙕', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf39c - 0xf3b5 + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝙖-𝙯": # 0x1d656 - 0x1d66f + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝙖𝙗𝙘𝙙𝙚𝙛𝙜𝙝𝙞𝙟𝙠𝙡𝙢𝙣𝙤𝙥𝙦𝙧𝙨𝙩𝙪𝙫𝙬𝙭𝙮𝙯', 'abcdefghijklmnopqrstuvwxyz')" + + - "-": # 0xf3b6 - 0xf3cf + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + - "𝙰-𝚉": # 0x1d670 - 0x1d689 + - spell: "translate('.', '𝙰𝙱𝙲𝙳𝙴𝙵𝙶𝙷𝙸𝙹𝙺𝙻𝙼𝙽𝙾𝙿𝚀𝚁𝚂𝚃𝚄𝚅𝚆𝚇𝚈𝚉', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "-": # 0xf3d0 - 0xf3e9 + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "𝚊-𝚣": # 0x1d68a - 0x1d6a3 + - spell: "translate('.', '𝚊𝚋𝚌𝚍𝚎𝚏𝚐𝚑𝚒𝚓𝚔𝚕𝚖𝚗𝚘𝚙𝚚𝚛𝚜𝚝𝚞𝚟𝚠𝚡𝚢𝚣', 'abcdefghijklmnopqrstuvwxyz')" + + - "-": # 0xf3ea - 0xf403 + - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" + + - "": [t: "бессмысленный я"] # 0xf404 (en: 'dotless i', google translation) + - "𝚤": [t: "бессмысленный я"] # 0x1d6a4 (en: 'dotless i', google translation) + - "𝚥": [t: "dotless j"] # 0x1d6a5 (google translation) + + - "𝚨-𝛀": # 0x1d6a8 - 0x1d6c0 + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝚨𝚩𝚪𝚫𝚬𝚭𝚮𝚯𝚰𝚱𝚲𝚳𝚴𝚵𝚶𝚷𝚸𝚹𝚺𝚻𝚼𝚽𝚾𝚿𝛀', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "-": # 0xf408 - 0xf420 + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "𝛂-𝛚": # 0x1d6c2 - 0x1d6da + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝛂𝛃𝛄𝛅𝛆𝛇𝛈𝛉𝛊𝛋𝛌𝛍𝛎𝛏𝛐𝛑𝛒𝛓𝛔𝛕𝛖𝛗𝛘𝛙𝛚', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "-": # 0xf422 - 0xf43a + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "": [t: "смелый нахбла"] # 0xf421 (en: 'bold nahblah', google translation) + - "𝛁": [t: "смелый нахбла"] # 0x1d6c1 (en: 'bold nahblah', google translation) + + - "𝛛𝛜𝛝𝛞𝛟𝛠𝛡": # 0x1D6DB - 0x1D6E1 + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝛛𝛜𝛝𝛞𝛟𝛠𝛡', '∂εθκφρπ')" + + - "": # 0xF43C - 0xF441 + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', '∂εθκφρπ')" + + - "𝛢-𝛺": # 0x1d6e2 - 0x1d6fa + # - t: "italic" + - spell: "translate('.', '𝛢𝛣𝛤𝛥𝛦𝛧𝛨𝛩𝛪𝛫𝛬𝛭𝛮𝛯𝛰𝛱𝛲𝛳𝛴𝛵𝛶𝛷𝛸𝛹𝛺', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "-": # 0xf442 - 0xf45a + # - t: "italic" + - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "𝛼-𝜔": # 0x1d6fc - 0x1d714 + # - t: "italic" + - spell: "translate('.', '𝛼𝛽𝛾𝛿𝜀𝜁𝜂𝜃𝜄𝜅𝜆𝜇𝜈𝜉𝜊𝜋𝜌𝜍𝜎𝜏𝜐𝜑𝜒𝜓𝜔', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "-": # 0xf45c - 0xf474 + # - t: "italic" + - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "": [t: "курсив нахбла"] # 0xf45b (en: 'italic nahblah', google translation) + - "𝛻": [t: "курсив нахбла"] # 0x1d6fb (en: 'italic nahblah', google translation) + + - "𝜕𝜖𝜗𝜘𝜙𝜚𝜛": # 0x1d715 - 0x1d71b + # - t: "italic" + - spell: "translate('.', '𝜕𝜖𝜗𝜘𝜙𝜚𝜛', '∂εθκφρπ')" + + - "": # 0xf475 - 0xf47b + # - t: "italic" + - spell: "translate('.', '', '∂εθκφρπ')" + + - "𝜜-𝜴": # 0x1d71c - 0x1d734 + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝜜𝜝𝜞𝜟𝜠𝜡𝜢𝜣𝜤𝜥𝜦𝜧𝜨𝜩𝜪𝜫𝜬𝜭𝜮𝜯𝜰𝜱𝜲𝜳𝜴', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "-": # 0xf47c - 0xf494 + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "𝜶-𝝎": # 0x1d736 - 0x1d74e + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝜶𝜷𝜸𝜹𝜺𝜻𝜼𝜽𝜾𝜿𝝀𝝁𝝂𝝃𝝄𝝅𝝆𝝇𝝈𝝉𝝊𝝋𝝌𝝍𝝎', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "-": # 0xf496 - 0xf4ae + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "𝝏𝝐𝝑𝝒𝝓𝝔𝝕": # 0x1d74f - 0x1d755 + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝝏𝝐𝝑𝝒𝝓𝝔𝝕', '∂εθκφρπ')" + + - "": # 0xf422 - 0xf43a + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', '∂εθκφρπ')" + + - "𝜵": [t: "смелый курсив нахбла"] # 0x1d735 (en: 'bold italic nahblah', google translation) + - "": [t: "смелый курсив нахбла"] # 0xf495 (en: 'bold italic nahblah', google translation) + + - "𝝖-𝝮": # 0x1d756 - 0x1d76e + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝝖𝝗𝝘𝝙𝝚𝝛𝝜𝝝𝝞𝝟𝝠𝝡𝝢𝝣𝝤𝝥𝝦𝝧𝝨𝝩𝝪𝝫𝝬𝝭𝝮', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + - "-": # 0xf4b6 - 0xf4ce + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "𝝰-𝞈": # 0x1d770 - 0x1d788 + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝝰𝝱𝝲𝝳𝝴𝝵𝝶𝝷𝝸𝝹𝝺𝝻𝝼𝝽𝝾𝝿𝞀𝞁𝞂𝞃𝞄𝞅𝞆𝞇𝞈', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "-": # 0xf4d0 - 0xf4e8 + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "𝞉𝞊𝞋𝞌𝞍𝞎𝞏": # 0x1d789 - 0x1d78f + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝞉𝞊𝞋𝞌𝞍𝞎𝞏', '∂εθκφρπ')" + + - "": # 0xf4e9 - 0xf4ef + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', '∂εθκφρπ')" + + - "": [t: "смелый нахбла"] # 0xf4cf (en: 'bold nahblah', google translation) + - "𝝯": [t: "смелый нахбла"] # 0x1d76f (en: 'bold nahblah', google translation) + + - "𝞐-𝞨": # 0x1d790 - 0x1d7a8 + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝞐𝞑𝞒𝞓𝞔𝞕𝞖𝞗𝞘𝞙𝞚𝞛𝞜𝞝𝞞𝞟𝞠𝞡𝞢𝞣𝞤𝞥𝞦𝞧𝞨', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "-": # 0xf4f0 - 0xf508 + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" + + - "𝞪-𝟂": # 0x1d7aa - 0x1d7c2 + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝞪𝞫𝞬𝞭𝞮𝞯𝞰𝞱𝞲𝞳𝞴𝞵𝞶𝞷𝞸𝞹𝞺𝞻𝞼𝞽𝞾𝞿𝟀𝟁𝟂', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "-": # 0xf50a - 0xf522 + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" + + - "𝟃𝟄𝟅𝟆𝟇𝟈𝟉": # 0x1d7c3 - 0x1d7c9 + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝟃𝟄𝟅𝟆𝟇𝟈𝟉', '∂εθκφρπ')" + + - "": # 0xf523 - 0xf529 + # - t: "bold italic" + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', '∂εθκφρπ')" + + - "": [t: "смелый нахбла"] # 0xf509 (en: 'bold nahblah', google translation) + - "𝞩": [t: "смелый нахбла"] # 0x1d7a9 (en: 'bold nahblah', google translation) + + - "-": # 0xf52e - 0xf537 (old MathType) + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', '0123456789')" + + - "𝟎-𝟗": # 0x1d7ce - 0x1d7d7 + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗', '0123456789')" + + - "-": # 0xf52e - 0xf537 (old MathType) + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '', '0123456789')" + + - "𝟬-𝟵": # 0x1D7EC - 0x1D7F5 + - t: "смелый" # (en: 'bold', google translation) + - spell: "translate('.', '𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵', '0123456789')" + + - "-": # 0xf556 - 0xf55f (old MathType) + - spell: "translate('.', '', '0123456789')" + + - "𝟢-𝟫": # 0x1d7e2 - 0x1d7eb + - spell: "translate('.', '𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿', '0123456789')" + + - "𝟶-𝟿": # 0x1d7f6 - 0x1d7ff + - spell: "translate('.', '𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿', '0123456789')" + + + - "": [t: "неизвестный персонаж"] # 0xf700 (en: 'unknown character', google translation) + - "": [t: "нижний правый и нижний левый треугольники"] # 0xf726 (en: 'lower right and lower left triangles', google translation) + - "": [t: "горизонтальный эллипс"] # 0xf72d (en: 'horizontal ellipsis extender', google translation) + - "": [t: "средний горизонтальный эллипсис"] # 0xf72e (en: 'midline horizontal ellipsis extender', google translation) + - "": [t: "радикальный удлинитель"] # 0xf8e5 (en: 'radical extender', google translation) + - "": [t: "вертикальная стрелка удлинителя"] # 0xf8e6 (en: 'vertical arrow extender', google translation) + - "": [t: "горизонтальная стрелка"] # 0xf8e7 (en: 'horizontal arrow extender', google translation) + - "": [t: "зарегистрированный знак без засечка"] # 0xf8e8 (en: 'registered sign sans serif', google translation) + - "": [t: "знак авторского права без засечка"] # 0xf8e9 (en: 'copyright sign sans serif', google translation) + - "": [t: "торговая марка знака без засечка"] # 0xf8ea (en: 'trade mark sign sans serif', google translation) + - "": [t: "левая вершина скобки"] # 0xf8eb (en: 'left paren top', google translation) + - "": [t: "левая скобка удлинителя"] # 0xf8ec (en: 'left paren extender', google translation) + - "": [t: "левая скобка дна"] # 0xf8ed (en: 'left paren bottom', google translation) + - "": [t: "левый кронштейн"] # 0xf8ee (en: 'left bracket top', google translation) + - "": [t: "удлинитель левого кронштейна"] # 0xf8ef (en: 'left bracket extender', google translation) + - "": [t: "левый кронштейн дно"] # 0xf8f0 (en: 'left bracket bottom', google translation) + - "": [t: "левый топ"] # 0xf8f1 (en: 'left brace top', google translation) + - "": [t: "оставая скоба середины"] # 0xf8f2 (en: 'left brace mid', google translation) + - "": [t: "левое скоба дно"] # 0xf8f3 (en: 'left brace bottom', google translation) + - "": [t: "скоба удлинителя"] # 0xf8f4 (en: 'brace extender', google translation) + - "": [t: "интегральный удлинитель"] # 0xf8f5 (en: 'integral extender', google translation) + - "": [t: "правая скобка вершина"] # 0xf8f6 (en: 'right paren top', google translation) + - "": [t: "право скобка удлинителя"] # 0xf8f7 (en: 'right paren extender', google translation) + - "": [t: "правая скобка дна"] # 0xf8f8 (en: 'right paren bottom', google translation) + - "": [t: "вершина правого кронштейна"] # 0xf8f9 (en: 'right bracket top', google translation) + - "": [t: "правый растяжение"] # 0xf8fa (en: 'right bracket extender', google translation) + - "": [t: "правый кронштейн дно"] # 0xf8fb (en: 'right bracket bottom', google translation) + - "": [t: "правый топ"] # 0xf8fc (en: 'right brace top', google translation) + - "": [t: "правая скоба середина"] # 0xf8fd (en: 'right brace mid', google translation) + - "": [t: "правое скоба дно"] # 0xf8fe (en: 'right brace bottom', google translation) + - "": [t: "логотип яблока"] # 0xf8ff (en: 'apple logo', google translation) + - "ff": [t: "фф"] # 0xfb00 (en: 'ff', google translation) + - "fi": [t: "фигура"] # 0xfb01 (en: 'fi', google translation) + - "fl": [t: "флорида"] # 0xfb02 (en: 'fl', google translation) + - "ffi": [t: "ffi"] # 0xfb03 (google translation) + - "ffl": [t: "ффл"] # 0xfb04 (en: 'ffl', google translation) + - "ſt": [t: "футов"] # 0xfb05 (en: 'ft', google translation) + - "st": [t: "ул"] # 0xfb06 (en: 'st', google translation) + - "﬩": [t: "ивритное письмо альтернатива плюс"] # 0xfb29 (en: 'hebrew letter alternative plus', google translation) + - "︠": [t: "лигатура оставила половину украшения"] # 0xfe20 (en: 'ligature left half embellishment', google translation) + - "︡": [t: "лигатура справа половина украшения"] # 0xfe21 (en: 'ligature right half embellishment', google translation) + - "︢": [t: "двойная тильда оставила половину украшения"] # 0xfe22 (en: 'double tilde left half embellishment', google translation) + - "︣": [t: "двойная тильда правое половина украшения"] # 0xfe23 (en: 'double tilde right half embellishment', google translation) + - "︤": [t: "макрон оставил половину украшения"] # 0xfe24 (en: 'macron left half embellishment', google translation) + - "︥": [t: "макрон правый половина украшения"] # 0xfe25 (en: 'macron right half embellishment', google translation) + - "︦": [t: "соединение украшений макрона"] # 0xfe26 (en: 'conjoining macron embellishment', google translation) + - "︵": [t: "над скобкой"] # 0xfe35 (en: 'over paren', google translation) + - "︶": [t: "под скобкой"] # 0xfe36 (en: 'under paren', google translation) + - "︷": [t: "над скобкой"] # 0xfe37 (en: 'over brace', google translation) + - "︸": [t: "под скобкой"] # 0xfe38 (en: 'under brace', google translation) + - "︿": [t: "над угловым кронштейном"] # 0xfe3f (en: 'over angle bracket', google translation) + - "﹀": [t: "под угловым кронштейном"] # 0xfe40 (en: 'under angle bracket', google translation) + - "﹡": [t: "маленькая звездочка"] # 0xfe61 (en: 'small asterisk', google translation) + - "﹢": [t: "маленький плюс"] # 0xfe62 (en: 'small plus', google translation) + - "﹣": [t: "маленький минус"] # 0xfe63 (en: 'small minus', google translation) + - "﹤": [t: "маленький меньше, чем"] # 0xfe64 (en: 'small less than', google translation) + - "﹥": [t: "маленький больше, чем"] # 0xfe65 (en: 'small greater than', google translation) + - "﹦": [t: "маленькие равны"] # 0xfe66 (en: 'small equals', google translation) + - "+": [t: "равна значению"] # 0xff0b (en: 'equals sign', google translation) + - "<": [t: "меньше, чем"] # 0xff1c (en: 'less than', google translation) + - "=": [t: "равно"] # 0xff1d (en: 'equals', google translation) + - ">": [t: "больше"] # 0xff1e (en: 'greater than', google translation) + - "\": [t: "backslash"] # 0xff3c (google translation) + - "^": [t: "шляп"] # 0xff3e (en: 'hat', google translation) + - "|": # 0xff5c + # note: for ClearSpeak and SimpleSpeak, "|" inside of sets is handled at the mrow level, same for 'sets' + - with: + variables: [DefaultToGiven: "count(preceding-sibling::*)=1 and count(following-sibling::*)=1 and ../../../*[1][.='P']"] # P(A|B) + replace: + - test: + - if: "$SpeechStyle != 'ClearSpeak'" + then_test: + if: "$DefaultToGiven" + then: [t: "данный"] # (en: 'given', google translation) + else: [t: "вертикальная линия"] # (en: 'vertical line', google translation) + - else_if: "not(preceding-sibling::*) or not(following-sibling::*)" + then: [t: "вертикальная линия"] # (en: 'vertical line', google translation) + - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" + then: [t: "так что"] # (en: 'such that', google translation) + - else_if: "$ClearSpeak_VerticalLine = 'Given' or $DefaultToGiven" + then: [t: "данный"] # (en: 'given', google translation) + - else: [t: "разделение"] # (en: 'divides', google translation) + - "~": [t: "тилде"] # 0xff5e (en: 'tilde', google translation) + - "¬": [t: "нет"] # 0xffe2 (en: 'not', google translation) + - "←": [t: "левая стрелка"] # 0xffe9 (en: 'left arrow', google translation) + - "↑": [t: "вверх стрелка"] # 0xffea (en: 'up arrow', google translation) + - "→": [t: "правая стрелка"] # 0xffeb (en: 'right arrow', google translation) + - "↓": [t: "вниз стрелка"] # 0xffec (en: 'down arrow', google translation) + - "": [t: "неизвестный или отсутствующий объект"] # 0xfffc (en: 'unknown or missing object', google translation) + - "�": [t: "неизвестный или отсутствующий персонаж"] # 0xfffd (en: 'unknown or missing character', google translation) diff --git a/Rules/Languages/ru/unicode.yaml b/Rules/Languages/ru/unicode.yaml new file mode 100644 index 00000000..2b791563 --- /dev/null +++ b/Rules/Languages/ru/unicode.yaml @@ -0,0 +1,549 @@ +--- + # Note to translators: + # most languages don't have two ways to pronounce 'a' -- if not need, remove the rules and change "B-Z" to "A-Z" + # some languages say the word for "uppercase" after the letter. Make sure to change that where appropriate by moving some code around + - "a": + - test: + if: "$TTS='none'" + then: [t: "a"] # long "a" sound in all speech engines I tested (espeak, MS SAPI, eloquence, (en: 'eigh', google translation) + else: [spell: "'a'"] # AWS Polly, ReadSpeaker, NaturalReader, google cloud, nuance, ibm watson) + - "b-z": + - test: + if: "$TTS='none'" + then: [t: "a"] # (en: '.', google translation) + else: [spell: "'.'"] + + # Capital letters are a little tricky: users can pick their favorite word (something that was requested) and + # screen readers have options to use pitch changes or beeps instead of or in addition to say "cap" + # Also, if a user can see the screen, they probably don't need to hear "cap", but if they specified an override, they must want to hear the override. + + - "A": + - test: + if: "$CapitalLetters_Beep" + then: + - audio: + value: "beep.mp4" + replace: [] + - test: + if: "$CapitalLetters_UseWord" + then_test: + if: "$SpeechOverrides_CapitalLetters = ''" + then_test: + if: "$Impairment = 'Blindness'" + then: [t: "пропусков"] # (en: 'cap', google translation) + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + replace: + - test: + if: "$TTS='none'" + then: [t: "A"] # (en: 'eigh', google translation) + else: [spell: "'a'"] + + - "B-Z": + - test: + if: "$CapitalLetters_Beep" + then: + - audio: + value: "beep.mp4" + replace: [] + - test: + if: "$CapitalLetters_UseWord" + then_test: + if: "$SpeechOverrides_CapitalLetters = ''" + then_test: + if: "$Impairment = 'Blindness'" + then: [t: "пропусков"] # (en: 'cap', google translation) + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + # note: processing of ranges converts '.' into the character, so it needs to be in quotes below + replace: [spell: "translate('.', 'BCDEFGHIJKLMNOPQRSTUVWXYZ', 'bcdefghijklmnopqrstuvwxyz')"] + + - "0-9": [t: "A"] # (en: '.', google translation) + + - " ": [t: " "] # 0x20 (google translation) + + - "!": # 0x21 + - test: + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" + then_test: + if: "$Verbosity = 'Terse'" + then: [t: "хлопнуть"] # 0x21 (en: 'bang', google translation) + else: [t: "восклицательный знак"] # 0x21 (en: 'exclamation point', google translation) + else: [t: "факториал"] # 0x21 (en: 'factorial', google translation) + + - "\"": [t: "цитата"] # 0x22 (en: 'quotation mark', google translation) + - "#": [t: "число"] # 0x23 (en: 'number', google translation) + - "$": [t: "доллары"] # 0x24 (en: 'dollars', google translation) + - "%": [t: "процент"] # 0x25 (en: 'percent') + - "&": [t: "ampersand"] # 0x26 (google translation) + - "'": [t: "штрих"] # 0x27 (en: 'apostrophe') + - "(": # 0x28 + - test: + if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' + then_test: + if: "$Verbosity='Terse'" + then: [t: "открыть"] # 0x28 (en: 'open', google translation) + else: [t: "открытая скобка"] # 0x28 (en: 'open paren', google translation) + else: [t: "левая скобка"] # 0x28 (en: 'left paren', google translation) + - ")": # 0x29 + - test: + if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' + then_test: + if: "$Verbosity='Terse'" + then: [t: "закрывать"] # 0x29 (en: 'close', google translation) + else: [t: "закрыть скобку"] # 0x29 (en: 'close paren', google translation) + else: [t: "правильная скобка"] # 0x29 (en: 'right paren', google translation) + + - "*": # 0x2a + test: + if: "parent::*[name(.)='msup' or name(.)='msubsup' or name(.)='skip-super']" + then: [t: "звезда"] # 0x2a (en: 'star', google translation) + else: [t: "раз"] # 0x2a (en: 'times', google translation) + - "+": [t: "плюс"] # 0x2b (en: 'plus') + - ",": # 0x2c + # the following deals with the interaction of "," with "…" which sometimes wants the ',' to be silent + # that this test is here and not with "…" is not ideal, but seems simplest + test: + if: + - "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_Ellipses = 'Auto' or " + # must be ClearSpeak and $ClearSpeak_Ellipses = 'AndSoOn' + # speak "comma" when not adjacent to '…' + - "( following-sibling::*[1][text()!= '…'] and preceding-sibling::*[1][text()!='…'] ) or " + # except if expression starts with '…' + - "../*[1][.='…'] " + then: + - T: "comma" # (en: 'comma', google translation) + - test: + if: "$Verbosity != Terse" + then: [pause: short] + # else silent + + - "-": [t: "минус"] # 0x2d (en: 'minus') + - ".": # 0x2e + - test: + if: "parent::*[1][self::m:mn]" + then: [t: "точка"] # (en: 'point', google translation) + else: [t: "точка"] # (en: 'dot', google translation) + - "/": [t: "разделить на"] # 0x2f (en: 'divided by') + - ":": [t: "двоеточие"] # 0x3a (en: 'colon') + - ";": [t: "полуколон"] # 0x3b (en: 'semicolon', google translation) + - "<": # 0x3c + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "меньше" # (en: 'less than') + - "=": # 0x3d + - test: + if: "$Verbosity!='Terse'" + then: [t: "равен"] # (en: 'is equal to', google translation) + else: [t: "равно"] # (en: 'equals') + + - ">": # 0x3e + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "больше" # (en: 'greater than') + - "?": [t: "знак вопроса"] # 0x3f (en: 'question mark', google translation) + - "@": [t: "на знаке"] # 0x40 (en: 'at sign', google translation) + - "[": # 0x5b + - test: + if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' + then: [t: "открытый кронштейн"] # (en: 'open bracket', google translation) + else: [t: "левый кронштейн"] # (en: 'left bracket', google translation) + - "\\": [t: "обратная черта"] # 0x5c (en: 'back slash', google translation) + - "]": # 0x5d + - test: + if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' + then: [t: "близкий кронштейн"] # (en: 'close bracket', google translation) + else: [t: "правый кронштейн"] # (en: 'right bracket', google translation) + - "^": # 0x5e + - test: + if: "parent::m:modified-variable or parent::m:mover" + then: [t: "шляп"] # (en: 'hat', google translation) + else: [t: "каретка"] # (en: 'caret', google translation) + - "_": [t: "под баром"] # 0x5f (en: 'under bar', google translation) + - "`": [t: "могила"] # 0x60 (en: 'grave', google translation) + - "{": # 0x7b + - test: + if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' + then: [t: "открытая скоба"] # (en: 'open brace', google translation) + else: [t: "оставленный скоба"] # (en: 'left brace', google translation) + - "|": # 0x7c + # note: for ClearSpeak and SimpleSpeak, "|" inside of sets is handled at the mrow level, same for 'sets' + - with: + variables: [DefaultToGiven: "count(preceding-sibling::*)=1 and count(following-sibling::*)=1 and ../../../*[1][.='P']"] # P(A|B) + replace: + - test: + - if: "$SpeechStyle != 'ClearSpeak'" + then_test: + if: "$DefaultToGiven" + then: [t: "данный"] # (en: 'given', google translation) + else: [t: "вертикальная черта"] # (en: 'vertical line') + - else_if: "not(preceding-sibling::*) or not(following-sibling::*)" + then: [t: "вертикальная линия"] # (en: 'vertical line', google translation) + - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" + then: [t: "так что"] # (en: 'such that', google translation) + - else_if: "$ClearSpeak_VerticalLine = 'Given' or $DefaultToGiven" + then: [t: "данный"] # (en: 'given', google translation) + - else: [t: "вертикальная черта"] # (en: 'divides') + + - "}": # 0x7d + - test: + if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' + then: [t: "близкая скоба"] # (en: 'close brace', google translation) + else: [t: "правая скоба"] # (en: 'right brace', google translation) + + - "~": [t: "тилде"] # 0x7e (en: 'tilde', google translation) + - " ": # 0xa0 + - test: + # could be mtext in mtd or mtext in an mrow that is a concatenation of mtd's. Is there a better solution? + if: "@data-empty-in-2D and not(ancestor::*[self::m:piecewise or self::m:system-of-equations or self::m:lines])" + then: [t: "пустой"] # want to say something for fraction (etc) with empty child (en: 'empty', google translation) + else: [t: ""] + + - "¬": [t: "нет"] # 0xac (en: 'not', google translation) + - "°": [t: "градусы"] # 0xb0 (en: 'degrees', google translation) + - "±": [t: "плюс минус"] # 0xb1 (en: 'plus or minus') + - "´": [t: "острый"] # 0xb4 (en: 'acute', google translation) + - "·": # 0xB7 + - test: + if: "$SpeechStyle = 'LiteralSpeak' or not($SpeechStyle = 'ClearSpeak' and $ClearSpeak_MultSymbolDot = 'Auto')" + then: [t: "точка"] # (en: 'dot', google translation) + else: [t: "умножить"] # (en: 'times') + - "×": # 0xd7 + - test: + if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolX = 'Auto'" + then: [t: "раз"] # (en: 'times', google translation) + else_test: + if: $ClearSpeak_MultSymbolX = 'By' + then: [t: "к"] # (en: 'by', google translation) + else: [t: "умножить"] # (en: 'cross') + - "÷": [t: "разделить на"] # 0xf7 (en: 'divided by') + - "̀": [t: "могильный акцент украшения"] # 0x300 (en: 'grave accent embellishment', google translation) + - "́": [t: "острый акцентный украшение"] # 0x301 (en: 'acute accent embellishment', google translation) + - "̂": [t: "окружающий акцент украшения"] # 0x302 (en: 'circumflex accent embellishment', google translation) + - "̃": [t: "тильде украшает"] # 0x303 (en: 'tilde embellishment', google translation) + - "̄": [t: "макрон украшает"] # 0x304 (en: 'macron embellishment', google translation) + - "̅": [t: "вручительская варенья"] # 0x305 (en: 'overbar embellishment', google translation) + - "̆": [t: "бреве"] # 0x306 (en: 'breve', google translation) + - "̇": [t: "точка над украшением"] # 0x307 (en: 'dot above embellishment', google translation) + + # Note: ClearSpeak has pref TriangleSymbol for "Δ", but that is wrong + - "Α-Ω": + - test: + if: "$CapitalLetters_Beep" + then: + - audio: + value: "beep.mp4" + replace: [] + - test: + if: "$CapitalLetters_UseWord" + then_test: + if: "$SpeechOverrides_CapitalLetters = ''" + then_test: + if: "$Impairment = 'Blindness'" + then: [t: "пропусков"] # (en: 'cap', google translation) + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + # note: processing of ranges converts '.' into the character, so it needs to be in quotes below + replace: [spell: "translate('.', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ', 'αβγδεζηθικλμνξοπρςστυφχψω')"] + + - "α": [t: "альфа"] # 0x3b1 (en: 'alpha') + - "β": [t: "бета"] # 0x3b2 (en: 'beta') + - "γ": [t: "гамма"] # 0x3b3 (en: 'gamma') + - "δ": [t: "дельта"] # 0x3b4 (en: 'delta') + - "ε": [t: "эпсилон"] # 0x3b5 (en: 'epsilon') + - "ζ": [t: "дзета"] # 0x3b6 (en: 'zeta') + - "η": [t: "эта"] # 0x3b7 (en: 'eta') + - "θ": [t: "тета"] # 0x3b8 (en: 'theta') + - "ι": [t: "йота"] # 0x3b9 (en: 'iota') + - "κ": [t: "каппа"] # 0x3ba (en: 'kappa') + - "λ": [t: "лямбда"] # 0x3bb (en: 'lambda') + - "μ": [t: "мю"] # 0x3bc (en: 'mu') + - "ν": [t: "ню"] # 0x3bd (en: 'nu') + - "ξ": [t: "кси"] # 0x3be (en: 'zai') + - "ο": [t: "омикрон"] # 0x3bf (en: 'omicron') + - "π": [t: "пи"] # 0x3c0 (en: 'pi') + - "ρ": [t: "ро"] # 0x3c1 (en: 'rho') + - "ς": [t: "финальная сигма"] # 0x3c2 (en: 'final sigma') + - "σ": [t: "сигма"] # 0x3c3 (en: 'sigma') + - "τ": [t: "тау"] # 0x3c4 (en: 'tau') + - "υ": [t: "ипсилон"] # 0x3c5 (en: 'upsilon') + - "φ": [t: "фи"] # 0x3c6 (en: 'phi') + - "χ": [t: "хи"] # 0x3c7 (en: 'chi') + - "ψ": [t: "пси"] # 0x3c8 (en: 'psi') + - "ω": [t: "омега"] # 0x3c9 (en: 'omega') + - "ϕ": [t: "фи"] # 0x3d5 (en: 'phi') + - "ϖ": [t: "пи"] # 0x3d6 (en: 'pi') + - "ϵ": [t: "полулунный эпсилон"] # 0x3f5 (en: 'epsilon') + - "϶": [t: "обратный полулунный эпсилон"] # 0x3f6 (en: 'reversed epsilon') + + - "–": [t: "en dash"] # 0x2013 (google translation) + - "—": [t: "em dash"] # 0x2014 (google translation) + - "―": [t: "горизонтальный батончик"] # 0x2015 (en: 'horizontal bar', google translation) + - "‖": [t: "двойная вертикальная линия"] # 0x2016 (en: 'double vertical line', google translation) + - "…": # 0x2026 + test: + if: + - "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_Ellipses = 'Auto' or" + # must be ClearSpeak and $ClearSpeak_Ellipses = 'AndSoOn' + # speak '…' as 'and so on...' unless expr starts with '…' + - "../*[1][.='…']" + then: [t: "точка точка дот"] # (en: 'dot dot dot', google translation) + else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' + if: "count(following-sibling::*) = 0" + then: [t: "и так далее"] # (en: 'and so on', google translation) + else: [t: "и так далее"] # (en: 'and so on up to', google translation) + + - "⁡": # 0x2061 + - test: + # skip saying "of" when Terse and a trig function, when it is a shape (does this happen?), or we are in :literal mode + if: "not($Verbosity='Terse' and preceding-sibling::*[1][IsInDefinition(., 'TrigFunctionNames')]) and not(preceding-sibling::*[1][IsInDefinition(., 'GeometryShapes')]) and + not(@data-changed='added' and ancestor-or-self::*[contains(@data-intent-property, ':literal:')])" + then: [t: "из"] # (en: 'of', google translation) + - "⁢": [t: ""] # 0x2062 + - "⁣": [t: ""] # 0x2063 + - "⁤": [t: "и"] # 0x2064 (en: 'and', google translation) + - "′": [t: "штрих"] # 0x2032 (en: 'prime') + - "″": [t: "двойной штрих"] # 0x2033 (en: 'double prime') + - "‴": [t: "тройной штрих"] # 0x2034 (en: 'triple prime') + + - "ℂℕℚℝℤ": # here we rely on this running through the table again to speak "cap xxx" + - t: "тройной штрих" # (en: 'double-struck') + - spell: "translate('.', 'ℂℕℚℝℤ', 'CNQRZ')" + + - "℃": [t: "градусы по цельсию"] # 0x2103 (en: 'degrees celsius', google translation) + - "℉": [t: "степени фаренгейт"] # 0x2109 (en: 'degrees fahrenheit', google translation) + - "ℋℛℓ": # 0x210b + - t: "сценарий" # (en: 'script', google translation) + - spell: "translate('.', 'ℋℛℓ', 'HRl')" + - "ℎ": [t: "планка постоянная"] # 0x210e (en: 'planck constant', google translation) + - "ℜ": # 0x211c + - t: "фрактур" # (en: 'fraktur', google translation) + - spell: "'R'" + + - "Ω": [t: "ом"] # 0x2126 (en: 'ohms', google translation) + - "K": [t: "кельвин"] # 0x212a (en: 'kelvin', google translation) + - "Å": [t: "ангстры"] # 0x212b (en: 'angstroms', google translation) + - "ⅆⅇⅈⅉ": # 0x2146-9 + - t: "дважды поразил курсив" # (en: 'double-struck italic', google translation) + - spell: "translate('.', 'ⅆⅇⅈⅉ', 'deij')" + + - "←": [t: "стрелка влево"] # 0x2190 (en: 'leftwards arrow', google translation) + - "↑": [t: "вверх стрелой"] # 0x2191 (en: 'upwards arrow', google translation) + - "→": # 0x2192 + - test: + if: "ancestor::*[2][self::m:limit]" + then: [t: "подходы"] # (en: 'approaches', google translation) + else: [t: "правая стрелка"] # (en: 'right arrow', google translation) + + - "↓": [t: "вниз стрелы"] # 0x2193 (en: 'downwards arrow', google translation) + - "⇒": [t: "права двойная стрелка"] # 0x21d2 (en: 'rightwards double arrow', google translation) + - "∀": [t: "для всех"] # 0x2200 (en: 'for all') + - "∂": # 0x2202 + - test: + if: "$Verbosity='Terse'" + then: [t: "частично"] # (en: 'partial', google translation) + else: [t: "частный дифференциал"] # (en: 'partial derivative') + - "∃": [t: "существует"] # 0x2203 (en: 'there exists') + - "∄": [t: "не существует"] # 0x2204 (en: 'there does not exist') + - "∅": [t: "пустое множество"] # 0x2205 (en: 'empty set') + - "∆": # 0x2206 + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # (en: 'the', google translation) + - t: "инкремент" # (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: "является"] # (en: 'is', google translation) + - t: "принадлежит" # (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: 'in', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "член"] # (en: 'member of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "элемент"] # (en: 'element of', google translation) + - else: [t: "принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to') + else_test: + - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "является членом"] # (en: 'is a member of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "элемент"] # (en: 'is an element of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'In' + then: [t: "находится в"] # (en: 'is in', google translation) + - else: [t: "принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to') + - "∉": # 0x2209 + # rule is identical to 0x2208 + - test: + if: "$SpeechStyle != 'ClearSpeak'" + then: + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "не принадлежит" # (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: "не в"] # (en: 'not in', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "не член"] # (en: 'not member of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "не элемент"] # (en: 'not element of', google translation) + - else: [t: "не принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to') + else_test: + - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "не является членом"] # (en: 'is not a member of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "не элемент"] # (en: 'is not an element of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'In' + then: [t: "не в"] # (en: 'is not in', google translation) + - else: [t: "не принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'does not belong to') + - "∊": # 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: "является"] # (en: 'is', google translation) + - t: "малое принадлежит" # (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: 'in', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "член"] # (en: 'member of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "элемент"] # (en: 'element of', google translation) + - else: [t: "малое принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to') + else_test: + - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' + then: [t: "является членом"] # (en: 'is a member of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'Element' + then: [t: "элемент"] # (en: 'is an element of', google translation) + - else_if: $ClearSpeak_SetMemberSymbol = 'In' + then: [t: "находится в"] # (en: 'is in', google translation) + - else: [t: "малое принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to') + - "∏": [t: "эн-арное произведение"] # 0x220f (en: 'product') + - "∐": [t: "эн-арный сомножитель"] # 0x2210 (en: 'co-product') + - "∑": [t: "эн-арная сумма"] # 0x2211 (en: 'sum') + - "−": [t: "минус"] # 0x2212 (en: 'minus') + - "∓": [t: "минус плюс"] # 0x2213 (en: 'minus or plus') + - "∗": [t: "оператор звёздочка"] # 0x2217 (en: 'times') + - "∘": [t: "кольцо"] # 0x2218 (en: 'composed with') + - "√": # 0x221a + - test: + if: "$Verbosity!='Terse'" + then: [t: "а"] # (en: 'the', google translation) + - t: "квадратный корень" # (en: 'square root of') + - "∝": # 0x221d + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "пропорционально" # (en: 'proportional to') + - "∞": [t: "бесконечность"] # 0x221e (en: 'infinity') + - "∟": [t: "правый угол"] # 0x221f (en: 'right angle') + - "∠": [t: "угол"] # 0x2220 (en: 'angle') + - "∡": [t: "измеримый угол"] # 0x2221 (en: 'measured angle') + - "∣": [t: "делит"] # 0x2223 (en: 'divides') + - "∤": [t: "не делит"] # 0x2224 (en: 'does not divide') + - "∥": # 0x2225 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "параллельно" # (en: 'parallel to') + - "∦": # 0x2226 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "не параллельно" # (en: 'not parallel to') + - "∧": [t: "логическое и"] # 0x2227 (en: 'and') + - "∨": [t: "логическое или"] # 0x2228 (en: 'or') + - "∩": [t: "пересечение"] # 0x2229 (en: 'intersection') + - "∪": [t: "объединение"] # 0x222a (en: 'union') + - "∫": [t: "интеграл"] # 0x222b (en: 'integral') + - "∬": [t: "двойной интеграл"] # 0x222c (en: 'double integral') + - "∭": [t: "тройной интеграл"] # 0x222d (en: 'triple integral') + - "∮": [t: "интеграл по контуру"] # 0x222e (en: 'contour integral') + - "∶": # 0x2236 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "отношение" # (en: 'to') + - "∷": [t: "пропорция"] # 0x2237 (en: 'as') + - "∼": [t: "тильда"] # 0x223c (en: 'varies with') + - "∽": [t: "обратная тильда"] # 0x223d (en: 'reversed tilde') + - "∾": # 0x223e + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "перевёрнутая плавная s" # (en: 'most positive') + - "∿": [t: "синусоидальная волна"] # 0x223f (en: 'sine wave') + - "≠": # 0x2260 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "не равно" # (en: 'not equal to') + - "≡": # 0x2261 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "тождественно равно" # (en: 'identical to') + - "≤": # 0x2264 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "less than or equal to" + - "≥": # 0x2265 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "больше или равно" # (en: 'greater than or equal to') + - "≦": [t: "меньше над равно"] # 0x2266 (en: 'less than over equal to') + - "≧": [t: "больше над равно"] # 0x2267 (en: 'greater than over equal to') + - "≺": [t: "предшествует"] # 0x227a (en: 'precedes') + - "≻": [t: "следует за"] # 0x227b (en: 'succeeds') + - "⊂": # 0x2282 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является а"] # (en: 'is a', google translation) + - t: "подмножество" # (en: 'subset of') + - "⊃": # 0x2283 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является а"] # (en: 'is a', google translation) + - t: "надмножество" # (en: 'superset of') + - "⊄": # 0x2284 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "не подмножество" # (en: 'not a subset of') + - "⊅": # 0x2285 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] # (en: 'is', google translation) + - t: "не надмножество" # (en: 'not a superset of') + - "⊆": # 0x2286 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является а"] # (en: 'is a', google translation) + - t: "подмножество или равно" # (en: 'subset of or equal to') + - "⊇": # 0x2287 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является а"] # (en: 'is a', google translation) + - t: "надмножество или равно" # (en: 'superset of or equal to') From ea56663cc6b6e38fab55a2f8940a3be8e47e3e95 Mon Sep 17 00:00:00 2001 From: Danil <81031453+Kostenkov-2021@users.noreply.github.com> Date: Fri, 2 Jan 2026 12:22:17 +0500 Subject: [PATCH 26/43] Update Russian ClearSpeak and unicode rules Improved Russian translations in ClearSpeak_Rules.yaml for mathematical terms related to fractions and exponents, ensuring more accurate and natural phrasing. Updated unicode-full.yaml to refine translations for the Apple logo, arrow symbols, and unknown character descriptions. --- Rules/Languages/ru/ClearSpeak_Rules.yaml | 32 ++++++++++++------------ Rules/Languages/ru/unicode-full.yaml | 12 ++++----- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/Rules/Languages/ru/ClearSpeak_Rules.yaml b/Rules/Languages/ru/ClearSpeak_Rules.yaml index 50dd8fcb..f6d4871e 100644 --- a/Rules/Languages/ru/ClearSpeak_Rules.yaml +++ b/Rules/Languages/ru/ClearSpeak_Rules.yaml @@ -185,7 +185,7 @@ 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: "конец фракции" # phrase(7 over 8 'end fraction') + - t: "конец дроби" # phrase(7 over 8 'end fraction') - pause: short - # fraction with text or numbers followed by text in both numerator and denominator @@ -213,28 +213,28 @@ if: "$ClearSpeak_Fractions='EndFrac' or $ClearSpeak_Fractions='OverEndFrac'" then: - pause: short - - t: "конец фракции" # phrase(7 over 8 'end fraction') + - t: "конец дроби" # phrase(7 over 8 'end fraction') - pause: short - name: default tag: fraction match: "." replace: - - ot: "квадратный тут 25" # phrase(5 is 'the' square toot of 25) - - t: "фракция с числителем" # phrase(the 'fraction with numerator' 6) + - ot: "квадратный корень из 25" # phrase(5 is 'the' square root of 25) + - t: "дробь с числителем" # phrase(the 'fraction with numerator' 6) - test: if: not(IsNode(*[1], 'simple')) then: [pause: medium] - x: "*[1]" - pause: medium - - t: "и знаменатель" # phrase(the fraction with numerator 5 'and denominator' 8) + - t: "и знаменателем" # 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: "конечной фракцией" # phrase(the fraction with 3 over 4 'end fraction') + - t: "конец дроби" # phrase(the fraction with 3 over 4 'end fraction') - pause: short # rules for functions raised to a power @@ -263,7 +263,7 @@ - test: if: "*[2][.='2']" then: [t: "квадрат"] # phrase(25 equals 5 'squared') - else: [t: "кубиками"] # phrase(625 equals 5 'cubed') + else: [t: "куб"] # phrase(625 equals 5 'cubed') - name: function-power tag: power @@ -289,7 +289,7 @@ - "*[2][self::m:power or self::m:power or self::m:mrow[m:power]]" replace: - x: "*[1]" - - t: "поднято до показателя" # phrase(5 'raised to the exponent' x plus 1) + - t: "возведено в степень" # phrase(5 'raised to the exponent' x plus 1) - pause: short - x: "*[2]" - pause: short @@ -318,7 +318,7 @@ replace: - x: "*[1]" - bookmark: "*[2]/@id" - - t: "кубик" # phrase(5 'cubed' equals 125) + - t: "куб" # phrase(5 'cubed' equals 125) - name: simple-integer tag: power @@ -332,7 +332,7 @@ else: {x: "*[2]"} - test: if: "$ClearSpeak_Exponents != 'Ordinal'" - then: [t: "власти"] # phrase(2 raised to the 'power' 7) + then: [t: "степени"] # phrase(2 raised to the 'power' 7) - name: simple-negative-integer tag: power @@ -346,7 +346,7 @@ - x: "*[2]" - test: if: "$ClearSpeak_Exponents != 'Ordinal'" - then: [t: "власти"] # phrase(2 raised to the 'power' 7) + then: [t: "степени"] # phrase(2 raised to the 'power' 7) - name: simple-var tag: power @@ -358,7 +358,7 @@ - pronounce: [{text: "-th"}, {ipa: "θ"}, {sapi5: "th"}, {eloquence: "T"}] - test: if: "$ClearSpeak_Exponents != 'Ordinal'" - then: [t: "власти"] # phrase(2 raised to the 'power' 7) + then: [t: "степени"] # phrase(2 raised to the 'power' 7) # match nested exponent, where the nested exponent is has the power 2 or 3 (n below) # [xxx]^n, - [xxx]^n, [xxx] var^n, -[xxx] var^n @@ -383,9 +383,9 @@ - " ]" replace: - x: "*[1]" - - t: "поднят до" # phrase(x 'raised to the' second power) + - t: "возведено в" # phrase(x 'raised to the' second power) - x: "*[2]" - - t: "сила" # phrase(x raised to the second 'power') + - t: "степень" # phrase(x raised to the second 'power') - # - [xxx]^n name: nested-negative-squared-or-cubed @@ -404,9 +404,9 @@ - " ]" replace: - x: "*[1]" - - t: "поднят до" # phrase(x 'raised to the' second power) + - t: "возведено в" # phrase(x 'raised to the' second power) - x: "*[2]" - - t: "сила" # phrase(x raised to the second 'power') + - t: "степень" # phrase(x raised to the second 'power') - # [xxx] var^n name: nested-var-squared-or-cubed diff --git a/Rules/Languages/ru/unicode-full.yaml b/Rules/Languages/ru/unicode-full.yaml index de912201..255b24c3 100644 --- a/Rules/Languages/ru/unicode-full.yaml +++ b/Rules/Languages/ru/unicode-full.yaml @@ -3584,7 +3584,7 @@ - "": [t: "правый топ"] # 0xf8fc (en: 'right brace top', google translation) - "": [t: "правая скоба середина"] # 0xf8fd (en: 'right brace mid', google translation) - "": [t: "правое скоба дно"] # 0xf8fe (en: 'right brace bottom', google translation) - - "": [t: "логотип яблока"] # 0xf8ff (en: 'apple logo', google translation) + - "": [t: "логотип apple"] # 0xf8ff (en: 'apple logo', google translation) - "ff": [t: "фф"] # 0xfb00 (en: 'ff', google translation) - "fi": [t: "фигура"] # 0xfb01 (en: 'fi', google translation) - "fl": [t: "флорида"] # 0xfb02 (en: 'fl', google translation) @@ -3638,9 +3638,9 @@ - else: [t: "разделение"] # (en: 'divides', google translation) - "~": [t: "тилде"] # 0xff5e (en: 'tilde', google translation) - "¬": [t: "нет"] # 0xffe2 (en: 'not', google translation) - - "←": [t: "левая стрелка"] # 0xffe9 (en: 'left arrow', google translation) - - "↑": [t: "вверх стрелка"] # 0xffea (en: 'up arrow', google translation) - - "→": [t: "правая стрелка"] # 0xffeb (en: 'right arrow', google translation) - - "↓": [t: "вниз стрелка"] # 0xffec (en: 'down arrow', google translation) + - "←": [t: "стрелка влево"] # 0xffe9 (en: 'left arrow', google translation) + - "↑": [t: "стрелка вверх"] # 0xffea (en: 'up arrow', google translation) + - "→": [t: "стрелка вправо"] # 0xffeb (en: 'right arrow', google translation) + - "↓": [t: "стрелка вниз"] # 0xffec (en: 'down arrow', google translation) - "": [t: "неизвестный или отсутствующий объект"] # 0xfffc (en: 'unknown or missing object', google translation) - - "�": [t: "неизвестный или отсутствующий персонаж"] # 0xfffd (en: 'unknown or missing character', google translation) + - "�": [t: "неизвестный или отсутствующий символ"] # 0xfffd (en: 'unknown or missing character', google translation) From 7e29cd44c22b777bbabf7f7302caf221c177b326 Mon Sep 17 00:00:00 2001 From: Danil <81031453+Kostenkov-2021@users.noreply.github.com> Date: Fri, 2 Jan 2026 12:34:18 +0500 Subject: [PATCH 27/43] Update Russian math terminology translations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces several Russian translations for mathematical terms with more accurate or standard equivalents, such as changing 'реальные числа' to 'действительные числа' and 'негативных' to 'отрицательных'. Also updates the translation for 'imaginary part' to 'комплексная часть'. --- Rules/Languages/ru/SharedRules/general.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Rules/Languages/ru/SharedRules/general.yaml b/Rules/Languages/ru/SharedRules/general.yaml index cb95e515..730eb11e 100644 --- a/Rules/Languages/ru/SharedRules/general.yaml +++ b/Rules/Languages/ru/SharedRules/general.yaml @@ -13,7 +13,7 @@ - test: - if: "*[2][.='+']" then: [t: "положительных"] # phrase(set of all 'positive' integers less than 10) - else: [t: "негативных"] # phrase(set of all 'negative' integers less than minus 10) + else: [t: "отрицательных"] # phrase(set of all 'negative' integers less than minus 10) - bookmark: "*[1]/@id" - test: - if: "*[1][.='ℂ']" @@ -23,7 +23,7 @@ - else_if: "*[1][.='ℚ']" then: [t: "рациональные числа"] # phrase('rational numbers' are the fraction of 2 integers) - else_if: "*[1][.='ℝ']" - then: [t: "реальные числа"] # phrase('real numbers' can be both positive and negative) + then: [t: "действительные числа"] # phrase('real numbers' can be both positive and negative) - else_if: "*[1][.='ℤ']" then: [t: "целые числа"] # phrase(positive 'integers' are natural numbers above 0) else: [x: "*[1][text()]"] # shouldn't happen @@ -63,7 +63,7 @@ - else_if: ".='ℚ'" then: [t: "рациональные числа"] # phrase('the rational numbers' are the fraction of 2 integers) - else_if: ".='ℝ'" - then: [t: "реальные числа"] # phrase('the real numbers' can be both positive and negative) + then: [t: "действительные числа"] # phrase('the real numbers' can be both positive and negative) - else_if: ".='ℤ'" then: [t: "целые числа"] # phrase('the integers' are natural numbers above 0) else: [x: "text()"] # shouldn't happen @@ -73,14 +73,14 @@ match: "." replace: - bookmark: "@id" - - t: "реальная часть" # phrase('the real part' of a complex number does not include the imaginary part) + - t: "действительная часть" # 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: "воображаемая часть" # phrase('the imaginary part' is part of a complex number) + - t: "комплексная часть" # phrase('the imaginary part' is part of a complex number) # rules on scripted vertical bars ('evaluated at') - name: evaluated-at-2 From 062e333acc35f81d0523b48810ccd22ceb436978 Mon Sep 17 00:00:00 2001 From: Danil <81031453+Kostenkov-2021@users.noreply.github.com> Date: Fri, 2 Jan 2026 13:10:59 +0500 Subject: [PATCH 28/43] Update Russian Unicode symbol translations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Improved and corrected Russian translations for various Unicode symbols in unicode-full.yaml and unicode.yaml. Changes include more accurate mathematical and typographical terms, such as replacing 'dot dot dot' with 'точка точка точка', updating power-related terms to 'степени', and refining translations for punctuation and mathematical operators. --- Rules/Languages/ru/unicode-full.yaml | 22 +++++++++++----------- Rules/Languages/ru/unicode.yaml | 24 ++++++++++++------------ 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/Rules/Languages/ru/unicode-full.yaml b/Rules/Languages/ru/unicode-full.yaml index 255b24c3..4224bf75 100644 --- a/Rules/Languages/ru/unicode-full.yaml +++ b/Rules/Languages/ru/unicode-full.yaml @@ -306,7 +306,7 @@ # must be ClearSpeak and $ClearSpeak_Ellipses = 'AndSoOn' # speak '…' as 'and so on...' unless expr starts with '…' - "../*[1][.='…']" - then: [t: "точка точка дот"] # (en: 'dot dot dot', google translation) + then: [t: "точка точка точка"] # (en: 'dot dot dot', google translation) else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' if: "count(following-sibling::*) = 0" then: [t: "и так далее"] # (en: 'and so on', google translation) @@ -319,7 +319,7 @@ - "‴": [t: "тройной штрих"] # 0x2034 (en: 'triple prime') - "‵": [t: "обратный штрих"] # 0x2035 (en: 'reversed prime') - "‶": [t: "обратный двойной штрих"] # 0x2036 (en: 'reversed double prime') - - "‷": [t: "обратный тройной простой"] # 0x2037 (en: 'reversed triple prime', google translation) + - "‷": [t: "обратный тройной штрих"] # 0x2037 (en: 'reversed triple prime', google translation) - "‸": [t: "в"] # 0x2038 (en: 'to the', google translation) - "‹": [t: "одиночный левый угол угла цитата"] # 0x2039 (en: 'single left pointing angle quote mark', google translation) - "›": [t: "одиночный правый угол цитата цитата"] # 0x203a (en: 'single right pointing angle quote mark', google translation) @@ -331,20 +331,20 @@ - "‿": [t: "под галстуком"] # 0x203F (en: 'under tie', google translation) - "⁀": [t: "галстук"] # 0x2040 (en: 'tie', google translation) - "⁎": [t: "низкий звездочка"] # 0x204e (en: 'low asterisk', google translation) - - "⁏": [t: "обратный полуколон"] # 0x204f (en: 'reversed semicolon', google translation) + - "⁏": [t: "обратная точка с запятой"] # 0x204f (en: 'reversed semicolon', google translation) - "⁐": [t: "закрыть"] # 0x2050 (en: 'close up', google translation) - "⁑": [t: "две вертикальные звездочки"] # 0x2051 (en: 'two vertical asterisks', google translation) - "⁒": [t: "коммерческий минус знак"] # 0x2052 (en: 'commercial minus sign', google translation) - "⁗": [t: "четырехкратный prime"] # 0x2057 (en: 'quadruple prime', google translation) - "⁠": [t: ""] # 0x2060 - - "⁰": [t: "к нулевой власти"] # 0x2070 (en: 'to the zeroth power', google translation) + - "⁰": [t: "к нулевой степени"] # 0x2070 (en: 'to the zeroth power', google translation) - "ⁱ": [t: "к силе эйхт"] # 0x2071 (en: 'to the eihth power', google translation) - - "⁴": [t: "к четвертой силе"] # 0x2074 (en: 'to the fourth power', google translation) - - "⁵": [t: "к пятой силе"] # 0x2075 (en: 'to the fifth power', google translation) - - "⁶": [t: "к шестой силе"] # 0x2076 (en: 'to the sixth power', google translation) - - "⁷": [t: "к седьмой власти"] # 0x2077 (en: 'to the seventh power', google translation) - - "⁸": [t: "к ath power"] # 0x2078 (en: 'to the eighth power', google translation) - - "⁹": [t: "к девятой силе"] # 0x2079 (en: 'to the ninth power', google translation) + - "⁴": [t: "к четвёртой степени"] # 0x2074 (en: 'to the fourth power', google translation) + - "⁵": [t: "к пятой степени"] # 0x2075 (en: 'to the fifth power', google translation) + - "⁶": [t: "к шестой степени"] # 0x2076 (en: 'to the sixth power', google translation) + - "⁷": [t: "к седьмой степении"] # 0x2077 (en: 'to the seventh power', google translation) + - "⁸": [t: "к восьмой степени"] # 0x2078 (en: 'to the eighth power', google translation) + - "⁹": [t: "к девятой степени"] # 0x2079 (en: 'to the ninth power', google translation) - "⁺": [t: "superscript plus sign"] # 0x207a (google translation) - "⁻": [t: "superscript минус"] # 0x207b (en: 'superscript minus', google translation) - "⁼": [t: "superscript equals sign"] # 0x207c (google translation) @@ -875,7 +875,7 @@ then: [t: "является"] # (en: 'is', google translation) - t: "приблизительно равно или равно" # (en: 'approximately equal or equal to') - "≋": [t: "тройная тильда"] # 0x224b (en: 'triple tilde') - - "≌": [t: "все равно"] # 0x224c (en: 'are all equal to') + - "≌": [t: "конгруэнтно"] # 0x224c (en: 'are all equal to') - "≍": # 0x224d - test: if: "$Verbosity!='Terse'" diff --git a/Rules/Languages/ru/unicode.yaml b/Rules/Languages/ru/unicode.yaml index 2b791563..ba904886 100644 --- a/Rules/Languages/ru/unicode.yaml +++ b/Rules/Languages/ru/unicode.yaml @@ -73,9 +73,9 @@ else: [t: "восклицательный знак"] # 0x21 (en: 'exclamation point', google translation) else: [t: "факториал"] # 0x21 (en: 'factorial', google translation) - - "\"": [t: "цитата"] # 0x22 (en: 'quotation mark', google translation) + - "\"": [t: "кавычка"] # 0x22 (en: 'quotation mark', google translation) - "#": [t: "число"] # 0x23 (en: 'number', google translation) - - "$": [t: "доллары"] # 0x24 (en: 'dollars', google translation) + - "$": [t: "доллар"] # 0x24 (en: 'dollars', google translation) - "%": [t: "процент"] # 0x25 (en: 'percent') - "&": [t: "ampersand"] # 0x26 (google translation) - "'": [t: "штрих"] # 0x27 (en: 'apostrophe') @@ -99,8 +99,8 @@ - "*": # 0x2a test: if: "parent::*[name(.)='msup' or name(.)='msubsup' or name(.)='skip-super']" - then: [t: "звезда"] # 0x2a (en: 'star', google translation) - else: [t: "раз"] # 0x2a (en: 'times', google translation) + then: [t: "звёздочка"] # 0x2a (en: 'star', google translation) + else: [t: "умножить"] # 0x2a (en: 'times', google translation) - "+": [t: "плюс"] # 0x2b (en: 'plus') - ",": # 0x2c # the following deals with the interaction of "," with "…" which sometimes wants the ',' to be silent @@ -128,7 +128,7 @@ else: [t: "точка"] # (en: 'dot', google translation) - "/": [t: "разделить на"] # 0x2f (en: 'divided by') - ":": [t: "двоеточие"] # 0x3a (en: 'colon') - - ";": [t: "полуколон"] # 0x3b (en: 'semicolon', google translation) + - ";": [t: "точка с запятой"] # 0x3b (en: 'semicolon', google translation) - "<": # 0x3c - test: if: "$Verbosity!='Terse'" @@ -215,7 +215,7 @@ - "×": # 0xd7 - test: if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolX = 'Auto'" - then: [t: "раз"] # (en: 'times', google translation) + then: [t: "умножить"] # (en: 'times', google translation) else_test: if: $ClearSpeak_MultSymbolX = 'By' then: [t: "к"] # (en: 'by', google translation) @@ -292,7 +292,7 @@ # must be ClearSpeak and $ClearSpeak_Ellipses = 'AndSoOn' # speak '…' as 'and so on...' unless expr starts with '…' - "../*[1][.='…']" - then: [t: "точка точка дот"] # (en: 'dot dot dot', google translation) + then: [t: "точка точка точка"] # (en: 'dot dot dot', google translation) else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' if: "count(following-sibling::*) = 0" then: [t: "и так далее"] # (en: 'and so on', google translation) @@ -320,7 +320,7 @@ - "ℋℛℓ": # 0x210b - t: "сценарий" # (en: 'script', google translation) - spell: "translate('.', 'ℋℛℓ', 'HRl')" - - "ℎ": [t: "планка постоянная"] # 0x210e (en: 'planck constant', google translation) + - "ℎ": [t: "постоянная планка"] # 0x210e (en: 'planck constant', google translation) - "ℜ": # 0x211c - t: "фрактур" # (en: 'fraktur', google translation) - spell: "'R'" @@ -333,15 +333,15 @@ - spell: "translate('.', 'ⅆⅇⅈⅉ', 'deij')" - "←": [t: "стрелка влево"] # 0x2190 (en: 'leftwards arrow', google translation) - - "↑": [t: "вверх стрелой"] # 0x2191 (en: 'upwards arrow', google translation) + - "↑": [t: "стрелка вверх"] # 0x2191 (en: 'upwards arrow', google translation) - "→": # 0x2192 - test: if: "ancestor::*[2][self::m:limit]" then: [t: "подходы"] # (en: 'approaches', google translation) - else: [t: "правая стрелка"] # (en: 'right arrow', google translation) + else: [t: "стрелка вправо"] # (en: 'right arrow', google translation) - - "↓": [t: "вниз стрелы"] # 0x2193 (en: 'downwards arrow', google translation) - - "⇒": [t: "права двойная стрелка"] # 0x21d2 (en: 'rightwards double arrow', google translation) + - "↓": [t: "стрелка вниз"] # 0x2193 (en: 'downwards arrow', google translation) + - "⇒": [t: "двойная стрелка вправо"] # 0x21d2 (en: 'rightwards double arrow', google translation) - "∀": [t: "для всех"] # 0x2200 (en: 'for all') - "∂": # 0x2202 - test: From 3c0e4cc08c05d44b14c18702d2ed5e56c5b019b8 Mon Sep 17 00:00:00 2001 From: Danil <81031453+Kostenkov-2021@users.noreply.github.com> Date: Fri, 20 Feb 2026 02:10:20 +0300 Subject: [PATCH 29/43] Improve Russian ClearSpeak translations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update Russian ClearSpeak rules and shared language resources: adjust terminology, grammar and verbosity across multiple rule files. Key changes include: proper Russian translations for roots (e.g. "конец корня"), powers/exponents ("степень", "возведено в степень", "в" for '^' connectors), fractions ("дробь"), sets/interval wording ("множество", "включая"), navigation labels (use "строка"/"к началу строки"/"к концу строки", "лево"/"текущий"), Unicode symbol names (more natural bracket/brace/tilde/caret terms), log and calculus terms ("логарифм", "натуральный логарифм", "ротор"), intent mappings and function names localized, and fixes to ordinal/plural forms and other lexical corrections. Affected files: Rules/Languages/ru/ClearSpeak_Rules.yaml, Rules/Languages/ru/SharedRules/calculus.yaml, Rules/Languages/ru/SharedRules/default.yaml, Rules/Languages/ru/definitions.yaml, Rules/Languages/ru/navigate.yaml, Rules/Languages/ru/unicode.yaml. --- Rules/Languages/ru/ClearSpeak_Rules.yaml | 96 ++++++++++---------- Rules/Languages/ru/SharedRules/calculus.yaml | 4 +- Rules/Languages/ru/SharedRules/default.yaml | 10 +- Rules/Languages/ru/definitions.yaml | 80 ++++++++-------- Rules/Languages/ru/navigate.yaml | 34 +++---- Rules/Languages/ru/unicode.yaml | 46 +++++----- 6 files changed, 135 insertions(+), 135 deletions(-) diff --git a/Rules/Languages/ru/ClearSpeak_Rules.yaml b/Rules/Languages/ru/ClearSpeak_Rules.yaml index f6d4871e..610e3ba3 100644 --- a/Rules/Languages/ru/ClearSpeak_Rules.yaml +++ b/Rules/Languages/ru/ClearSpeak_Rules.yaml @@ -34,7 +34,7 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # phrase('the' square root of 25) + then: [t: ""] # phrase('the' square root of 25) - test: if: $ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd' then: @@ -53,7 +53,7 @@ - if: "$ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" then: - pause: short - - t: "end root" # phrase(the square root of x 'end root') + - t: "конец корня" # 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: "квадратный корень 36"] # phrase(6 is 'the' square root of 36) + then: [t: ""] # phrase(6 is 'the' square root of 36) - test: if: $ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd' then: @@ -82,7 +82,7 @@ - if: "*[2][.='2']" then: [t: "квадратный корень"] # phrase(5 is the 'square root' of 25) - else_if: "*[2][.='3']" - then: [t: "корень куба"] # phrase(5 is the 'cube root' of 625) + then: [t: "кубический корень"] # phrase(5 is the 'cube root' of 625) - else: [x: "ToOrdinal(*[2])", t: "корень"] # phrase(the square 'root' of 25) else: - test: @@ -100,7 +100,7 @@ if: $ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd' then: - pause: short - - t: "end root" # phrase(start the fifth root of x 'end root') + - t: "конец корня" # phrase(start the fifth root of x 'end root') - pause: medium else_test: if: IsNode(*[1], 'simple') @@ -136,7 +136,7 @@ BaseNode(*[1])[contains(@data-intent-property, ':unit') or (self::m:mrow and self::*[3][contains(@data-intent-property, ':unit')])]" replace: - x: "*[1]" - - t: "перемещение" # phrase('5 meters 'per' second) + - t: "в" # phrase('5 meters 'per' second) - x: "*[2]" - name: common-fraction @@ -175,7 +175,7 @@ then: - test: if: "$Verbosity!='Terse'" - then: [ot: "а"] + then: [ot: ""] - t: "дробь" # phrase(the 'fraction' with 3 over 4) - x: "*[1]" - t: "над" # phrase(the fraction 3 'over' 4) @@ -220,7 +220,7 @@ tag: fraction match: "." replace: - - ot: "квадратный корень из 25" # phrase(5 is 'the' square root of 25) + - ot: "" # phrase(5 is 'the' square root of 25) - t: "дробь с числителем" # phrase(the 'fraction with numerator' 6) - test: if: not(IsNode(*[1], 'simple')) @@ -262,8 +262,8 @@ - bookmark: "*[2]/@id" - test: if: "*[2][.='2']" - then: [t: "квадрат"] # phrase(25 equals 5 'squared') - else: [t: "куб"] # phrase(625 equals 5 'cubed') + then: [t: "в квадрате"] # phrase(25 equals 5 'squared') + else: [t: "в кубе"] # phrase(625 equals 5 'cubed') - name: function-power tag: power @@ -272,13 +272,13 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # phrase('the' third power of 2) + then: [t: ""] # phrase('the' third power of 2) - bookmark: "*[2]/@id" - test: if: "*[2][self::m:mn][not(contains(., '.'))]" then: [x: "ToOrdinal(*[2])"] else: [x: "*[2]"] - - t: "сила" # phrase(the third 'power of' 6) + - t: "степень" # phrase(the third 'power of' 6) - pause: short - x: "*[1]" @@ -293,14 +293,14 @@ - pause: short - x: "*[2]" - pause: short - - t: "конечный показатель" # phrase(5 raised to the exponent x plus 1 'end exponent') + - t: "конец показателя" # phrase(5 raised to the exponent x plus 1 'end exponent') - name: AfterPower-default tag: power match: "$ClearSpeak_Exponents = 'AfterPower'" replace: - x: "*[1]" - - t: "поднялся на власть" # phrase(x is 'raised to the power' 4) + - t: "возведено в степень" # phrase(x is 'raised to the power' 4) - x: "*[2]" - pause: short @@ -310,7 +310,7 @@ replace: - x: "*[1]" - bookmark: "*[2]/@id" - - t: "квадрат" # phrase(7 'squared' equals 49) + - t: "в квадрате" # phrase(7 'squared' equals 49) - name: cubed tag: power @@ -318,14 +318,14 @@ replace: - x: "*[1]" - bookmark: "*[2]/@id" - - t: "куб" # phrase(5 'cubed' equals 125) + - t: "в кубе" # phrase(5 'cubed' equals 125) - name: simple-integer tag: power match: "*[2][self::m:mn][not(contains(., '.'))]" replace: - x: "*[1]" - - t: "до" # phrase(2 raised 'to the' power 7) + - t: "в" # phrase(2 raised 'to the' power 7) - test: if: "*[2][.>0]" then: {x: "ToOrdinal(*[2])"} @@ -342,7 +342,7 @@ - " ]" replace: - x: "*[1]" - - t: "до" # phrase(2 raised 'to the' power 7) + - t: "в" # phrase(2 raised 'to the' power 7) - x: "*[2]" - test: if: "$ClearSpeak_Exponents != 'Ordinal'" @@ -353,7 +353,7 @@ match: "*[2][self::m:mi][string-length(.)=1]" replace: - x: "*[1]" - - t: "до" # phrase(3 raised 'to the' power 7) + - t: "в" # phrase(3 raised 'to the' power 7) - x: "*[2]" - pronounce: [{text: "-th"}, {ipa: "θ"}, {sapi5: "th"}, {eloquence: "T"}] - test: @@ -383,7 +383,7 @@ - " ]" replace: - x: "*[1]" - - t: "возведено в" # phrase(x 'raised to the' second power) + - t: "в" # phrase(x 'raised to the' second power) - x: "*[2]" - t: "степень" # phrase(x raised to the second 'power') @@ -404,7 +404,7 @@ - " ]" replace: - x: "*[1]" - - t: "возведено в" # phrase(x 'raised to the' second power) + - t: "в" # phrase(x 'raised to the' second power) - x: "*[2]" - t: "степень" # phrase(x raised to the second 'power') @@ -427,9 +427,9 @@ - " ]" replace: - x: "*[1]" - - t: "поднят до" # phrase(x 'raised to the' second power) + - t: "в" # phrase(x 'raised to the' second power) - x: "*[2]" - - t: "сила" # phrase(x raised to the second 'power') + - t: "степень" # phrase(x raised to the second 'power') - # -[xxx] var^n name: nested-negative-var-squared-or-cubed @@ -452,9 +452,9 @@ - " ]" replace: - x: "*[1]" - - t: "поднят до" # phrase(x 'raised to the' second power) + - t: "в" # phrase(x 'raised to the' second power) - x: "*[2]" - - t: "сила" # phrase(x raised to the second 'power') + - t: "степень" # phrase(x raised to the second 'power') - name: default-exponent-power tag: power @@ -462,20 +462,20 @@ - "*[2][self::m:power or self::m:power or self::m:mrow[m:power]]" replace: - x: "*[1]" - - t: "поднят до экспонента" # phrase(x is 'raised to the exponent') + - t: "возведено в степень" # phrase(x is 'raised to the exponent') - pause: short - x: "*[2]" - pause: short - - t: "конечный показатель" # phrase(and now 'end exponent' has been reached) + - t: "конец показателя" # phrase(and now 'end exponent' has been reached) - name: default tag: power match: "." replace: - x: "*[1]" - - t: "поднят до" # phrase(x 'raised to the' second power) + - t: "возведено в" # phrase(x 'raised to the' second power) - x: "*[2]" - - t: "сила" # phrase(x raised to the second 'power') + - t: "степень" # phrase(x raised to the second 'power') # # Some rules on mrows @@ -484,11 +484,11 @@ name: ClearSpeak-absolute-value tag: absolute-value match: "." - variables: [WordToSay: "IfThenElse($ClearSpeak_AbsoluteValue = 'Cardinality', 'cardinality', 'absolute value')"] + variables: [WordToSay: "IfThenElse($ClearSpeak_AbsoluteValue = 'Cardinality', ', 'мощность', 'модуль')"] replace: - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # phrase('the' absolute value of 25) + then: [t: ""] # phrase('the' absolute value of 25) - x: "$WordToSay" - t: "из" # phrase(the absolute value 'of' 25) - x: "*[1]" @@ -506,24 +506,24 @@ replace: - test: - if: "count(*)=0" - then: [t: "пустой набор"] # phrase('the empty set') + then: [t: "пустое множество"] # phrase('the empty set') - else_if: "count(*)=2" then: - test: if: "$Verbosity!='Terse'" then: [t: "а"] # phrase('the' empty set) - - t: "пустой набор" # phrase(the 'empty set') + - t: "пустое множество" # phrase(the 'empty set') - else_if: "count(*[1]/*)=3 and *[1]/*[2][self::m:mo][.=':' or .='|' or .='∣']" then: - test: if: "$Verbosity!='Terse'" then: [t: "а"] # phrase('the' set of all integers) - - t: "набор чисел" # phrase(this is a 'set of' numbers) + - t: "множество" # phrase(this is a 'set of' numbers) - test: if: $ClearSpeak_Sets != 'woAll' then: [t: "всех"] # phrase(the set of 'all' integers) - x: "*[1]/*[1]" - - t: "так что" # phrase(the set S 'such that' x is less than y) + - t: "таких, что" # phrase(the set S 'such that' x is less than y) - x: "*[1]/*[3]" else: - test: @@ -532,7 +532,7 @@ - test: if: "$Verbosity!='Terse'" then: [t: "а"] # phrase('the' set of integers) - - t: "набор" # phrase(this is a 'set' of integers) + - t: "множество" # phrase(this is a 'set' of integers) - x: "*[1]" - # intervals are controlled by a ClearSpeak Preference -- parens/brackets don't have to match, so we avoid IsBracketed @@ -557,7 +557,7 @@ - test: if: "starts-with(name(.), 'open')" then: [t: "не"] # phrase(the interval from a to b 'not' including b) - - t: "в том числе " # phrase(the interval from a to b not 'including' b) + - t: "включая " # phrase(the interval from a to b not 'including' b) - x: "*[1]" # logic to deal with [not] arg #1 - test: @@ -590,7 +590,7 @@ - "count(*[1]/*)=1 and count(*)=2" replace: - x: "*[1]/*[1]/*" # mtable/mtr/mtd - - t: "выберите" # phrase(the binomial coefficient n 'choose' m) + - t: "по" # phrase(the binomial coefficient n 'choose' m) - x: "*[2]/*[1]/*" - name: ClearSpeak-default @@ -599,7 +599,7 @@ variables: [NextLineIsContinuedRow: "following-sibling::*[1][contains(@data-intent-property, ':continued-row:')]"] replace: - pause: medium - - t: "ряд" # phrase(the first 'row' of a matrix) + - t: "строка" # phrase(the first 'row' of a matrix) - x: "count(preceding-sibling::*)+1" - test: if: .[self::m:mlabeledtr] @@ -626,19 +626,19 @@ if: "$log_is_simple" then_test: - if: "*[1][.='log']" - then: [t: "log"] # phrase(the 'log' of x) + then: [t: "логарифм"] # phrase(the 'log' of x) - else_if: $ClearSpeak_Log = 'LnAsNaturalLog' - then: [t: "натуральный журнал"] # phrase(the 'natural log' of the product of 2 numbers) + then: [t: "натуральный логарифм"] # phrase(the 'natural log' of the product of 2 numbers) else: [spell: "'ln'"] else: - test: if: "$Verbosity!='Terse' and not(log_is_simple)" - then: [t: "а"] # phrase('the' square root of 25) + then: [t: ""] # phrase('the' square root of 25) - test: - if: "*[1][.='log']" - then: [t: "бревно"] + then: [t: "логарифм"] - else_if: $ClearSpeak_Log = 'LnAsNaturalLog' - then: [t: "естественный журнал"] # phrase(the 'natural log' of x) + then: [t: "натуральный логарифм"] # phrase(the 'natural log' of x) else: [spell: "'ln'"] - t: "из" # phrase(the natural log 'of' x) - pause: short @@ -661,19 +661,19 @@ - if: "($ClearSpeak_MultiLineLabel = 'Auto' and self::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case'" then: [t: "случай"] # 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: "линия"] # phrase(this is the first 'line' of three lines) + then: [t: "строка"] # phrase(this is the first 'line' of three lines) - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" then: [t: "ограничение"] # phrase(this is the first 'constraint' of three constraints) - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" then: [t: "уравнение"] # phrase(this is the first 'equation' of three equations) - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" - then: [t: "ряд"] # phrase(this is the first 'row' of three rows) + then: [t: "строка"] # phrase(this is the first 'row' of three rows) - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" then: [t: "шаг"] # phrase(this is the first 'step' of three steps) # else 'None -- don't say anything' - test: - if: "$LineCount != 1" - then: [ct: "s"] # plural # phrase(shown by the letter 's') + then: [ct: "ов"] # plural # phrase(shown by the letter 's') - pause: short - x: "*" - pause: long @@ -691,7 +691,7 @@ - if: "($ClearSpeak_MultiLineLabel = 'Auto' and parent::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case'" then: [t: "случае"] # phrase(in this 'case' x is not equal to y) - else_if: "$ClearSpeak_MultiLineLabel = 'Auto' or $ClearSpeak_MultiLineLabel = 'Line'" # already dealt with Auto/Case - then: [t: "линия"] # phrase(the straight 'line' between x and y) + then: [t: "строка"] # phrase(the straight 'line' between x and y) - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" then: [t: "ограничение"] # phrase(there is a 'constraint' on possible values) - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" diff --git a/Rules/Languages/ru/SharedRules/calculus.yaml b/Rules/Languages/ru/SharedRules/calculus.yaml index a5ad70a0..07e06205 100644 --- a/Rules/Languages/ru/SharedRules/calculus.yaml +++ b/Rules/Languages/ru/SharedRules/calculus.yaml @@ -10,7 +10,7 @@ then: - test: if: "$Verbosity!='Terse'" - then: [t: "из"] # phrase(function 'of' one variable) -- note OneCore voices spell out "div" + then: [t: "от"] # phrase(function 'of' one variable) -- note OneCore voices spell out "div" - test: if: "not(IsNode(*[1], 'leaf'))" then: [pause: short] @@ -33,7 +33,7 @@ tag: curl match: "count(*) = 1" replace: - - t: "керл" # phrase(the 'curl of' a field) + - t: "ротор" # phrase(the 'curl of' a field) - test: if: "$Verbosity!='Terse'" then: [t: "из"] # phrase(function 'of' one variable) -- note OneCore voices spell out "div" diff --git a/Rules/Languages/ru/SharedRules/default.yaml b/Rules/Languages/ru/SharedRules/default.yaml index fa8293ab..eb3dda3c 100644 --- a/Rules/Languages/ru/SharedRules/default.yaml +++ b/Rules/Languages/ru/SharedRules/default.yaml @@ -87,7 +87,7 @@ - "not(ancestor::*[name() != 'mrow'][1]/self::m:fraction)" # FIX: can't test for mrow -- what should be used??? replace: - x: "*[1]" - - t: "фракция x " # phrase("the fraction x 'over' y") + - t: "дробь x " # phrase("the fraction x 'over' y") - x: "*[2]" - pause: short @@ -101,7 +101,7 @@ - test: if: "not(IsNode(*[1],'leaf'))" then: [pause: short] - - t: "фракция x " # phrase("the fraction x 'over' y") + - t: "дробь x " # phrase("the fraction x 'over' y") - test: if: "not(IsNode(*[2],'leaf'))" then: [pause: short] @@ -109,7 +109,7 @@ - pause: short - test: if: "$Impairment = 'Blindness'" - then: [t: "начало фракции x над y "] # phrase("start of fraction x over y 'end over'") + then: [t: "начало дроби x над y "] # phrase("start of fraction x over y 'end over'") - pause: medium @@ -419,7 +419,7 @@ - test: if: count(*)=1 then: [t: "строкой"] # phrase(the table with 1 'row') - else: [t: "рядами"] # phrase(the table with 3 'rows') + else: [t: "строками"] # phrase(the table with 3 'rows') - t: "и " # phrase(the table with 3 rows 'and' 4 columns) - x: "count(*[1]/*)" - test: @@ -436,7 +436,7 @@ match: "." replace: - pause: medium - - t: "ряд" # phrase(the first 'row' of a matrix) + - t: "строка" # phrase(the first 'row' of a matrix) - x: "count(preceding-sibling::*)+1" - test: if: .[self::m:mlabeledtr] diff --git a/Rules/Languages/ru/definitions.yaml b/Rules/Languages/ru/definitions.yaml index 5da10e97..bf3ec83b 100644 --- a/Rules/Languages/ru/definitions.yaml +++ b/Rules/Languages/ru/definitions.yaml @@ -10,44 +10,44 @@ # for readability, spaces can be used around any of the delimiter characters # Note: if there are multiple fixities, the first one is used if the fixity is not given in the intent - IntentMappings: { - "indexed-by": "infix= ; sub; end sub: end sub: end subscript", + "indexed-by": "infix= ; индекс; конец индекса: конец индекса: конец индекса", "modified-variable": "silent= ", - "say-super": "infix=super: superscript: superscript", # used with 'mo' for superscripts (e.g, "<") + "say-super": "infix=верхний индекс: верхний индекс: верхний индекс", # used with 'mo' for superscripts (e.g, "<") "skip-super": "silent=", # used with 'mo' for superscripts (e.g, "*") - "absolute-value": "function= ; absolute value: the absolute value: the absolute value; end absolute value", - "binomial": "infix=binomial; choose; end binomial", - # "closed-interval": "other=closed-interval; from,to; end closed-interval", - "greatest-common-divisor": "function=gcd: the gcd: the greatest common divisor", - "imaginary-part": "function=imaginary part, the imaginary part, the imaginary part", - "least-common-multiple": "function=lcm:the lcm:the least common multiple", - # "large-op": "infix=over || other=from,to", - "limit": "prefix=limit as: the limit as: the limit as", - "lim-sup": "prefix=lim sup as: the limit superior as: the limit superior as", - "lim-inf": "prefix=lim inf as: the limit inferior as : the limit inferior as", - "logarithm-with-base": "prefix=log base: the log base: the log base", - "natural-logarithm": "function=l n: natural log: natural log", - "minus": "infix=minus || prefix=negative", - "plus": "infix=plus || prefix=positive", + "absolute-value": "function= ; модуль: модуль: модуль; конец модуля", + "binomial": "infix=бином; по; конец бинома", + # "closed-interval": "other=closed-interval; от,до; end closed-interval", + "greatest-common-divisor": "function=нод: нод: наибольший общий делитель", + "imaginary-part": "function=мнимая часть, мнимая часть, мнимая часть", + "least-common-multiple": "function=нок:нок:наименьшее общее кратное", + # "large-op": "infix=над || other=от,до", + "limit": "prefix=придел при: придел при: придел при", + "lim-sup": "prefix=верхний предел при: верхний предел при: верхний предел при", + "lim-inf": "prefix=нижний предел при: нижний предел при: нижний предел при", + "logarithm-with-base": "prefix=логарифм по основанию: логарифм по основанию: логарифм по основанию", + "natural-logarithm": "function=l n: натуральный логарифм: натуральный логарифм", + "minus": "infix=минус || prefix=отрицательное", + "plus": "infix=плюс || prefix=положительное", # "pochhammer": "infix=permutations of", # arguments are in reverse order, so can't work here - "real-part": "function=the real part", - - "transpose": "postfix=transpose || function=transpose", - "norm": "function=; norm: norm: norm; end norm", - "trace": "function=;trace : trace: the trace; end trace", - "dimension": "function=; dimension : dimension: the dimension; end dimension", - "homomorphism": "function= ; homomorphism : homomorphism: the homomorphism; end homomorphism", - "kernel": "function= ; kernel : kernel: the kernel; end kernel", - "vector": "function= ; vector || prefix=vector", - "cross-product": "infix=cross: cross product: cross product", - "dot-product": "infix=dot: dot product: dot:dot product", - - "divergence": "function= ; dihv: divergence: divergence; end divergence", - "curl": "function= ; curl; end curl", - "gradient": "function= ; del: gradient: gradient; end gradient", - "laplacian": "function=lahplahsian", # speech engines don't do a good job with "laplacian" - - "chemistry-concentration": "function= ; concentration: concentration of: the concentration of; end concentration", + "real-part": "function=действительная часть", + + "transpose": "postfix=транспонирование || function=транспонированная", + "norm": "function=; норма: норма: норма; конец нормы", + "trace": "function=;след : след: след; конец следа", + "dimension": "function=; размерность : размерность: размерность; конец размерности", + "homomorphism": "function= ; гомоморфизм : гомоморфизм: гомоморфизм; конец гомоморфизма", + "kernel": "function= ; ядро : ядро: ядро; конец ядра", + "vector": "function= ; вектор || prefix=вектор", + "cross-product": "infix=векторное произведение: векторное произведение: векторное произведение", + "dot-product": "infix=скалярное произведение: скалярное произведение: скалярное произведение", + + "divergence": "function= ; дивергенция: дивергенция: дивергенция; конец дивергенции", + "curl": "function= ; ротор; конец ротора", + "gradient": "function= ; градиент: градиент: градиент; конец градиента", + "laplacian": "function=лапласиан", # speech engines don't do a good job with "laplacian" + + "chemistry-concentration": "function= ; концентрация: концентрация: концентрация; конец концентрации", } # Names of functions that in terse mode don't say "of" (or it's equivalent in other languages) @@ -307,25 +307,25 @@ ] - NumbersOrdinalOnes: [ -«ноль», «первый», «второй», «третий», «четвертый», «пятый», «шестой», «седьмой», «восьмой», «девятый», +«нулевой», «первый», «второй», «третий», «четвертый», «пятый», «шестой», «седьмой», «восьмой», «девятый», «десятый», «одиннадцатый», «двенадцатый», «тринадцатый», «четырнадцатый», «пятнадцатый», «шестнадцатый», «семнадцатый», «восемнадцатый», «девятнадцатый» ] - NumbersOrdinalPluralOnes: [ -«ноль», «первый», «секунды», «терции», «четвертые», «пятые», «шестые», «седьмые», «восьмые», «девятые», +«нулевые», «первые», «вторые», «третьи», «четвертые», «пятые», «шестые», «седьмые», «восьмые», «девятые», «десятые», «одиннадцатые», «двенадцатые», «тринадцатые», «четырнадцатые», «пятнадцатые», «шестнадцатые», «семнадцатые», «восемнадцатые», «девятнадцатые» ] # stop when regularity begins - NumbersOrdinalFractionalOnes: [ -«ноль», «первый», «половина» +«нулевая», «первая», «вторая» ] # stop when regularity begins - NumbersOrdinalFractionalPluralOnes: [ -«нули», «первые», «половинки» +«нулевых», «первых», «вторых» ] @@ -354,8 +354,8 @@ ] - NumbersOrdinalPluralHundreds: [ -"", "сотые", "две сотых", "три сотых", "четыре сотых", "пять сотых", -« шесть сотых», «семь сотых», «восемь сотых», «девять сотых» +"", "сотые", "двухсотые", "трёхсотые", "четырёхсотые", "пятисотые", +« шестисотые», «семисотые», «восьмисотые», «девятисотые» ] diff --git a/Rules/Languages/ru/navigate.yaml b/Rules/Languages/ru/navigate.yaml index 449e1291..7f35caa9 100644 --- a/Rules/Languages/ru/navigate.yaml +++ b/Rules/Languages/ru/navigate.yaml @@ -79,13 +79,13 @@ - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Next'" then: [t: "право"] # phrase(move to the 'right') - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Previous'" - then: [t: "левый"] # phrase(move to the 'left') + then: [t: "лево"] # phrase(move to the 'left') - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Current'" - then: [t: "нынешним"] # phrase(who is the 'current' president) + then: [t: "текущий"] # phrase(who is the 'current' president) - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'LineStart'" - then: [t: "на начало линии"] # phrase(move 'to start of line') + then: [t: "к началу строки"] # phrase(move 'to start of line') - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'LineEnd'" - then: [t: "к концу линии"] # phrase(move 'to end of line') + then: [t: "к концу строки"] # phrase(move 'to end of line') - pause: "medium" - set_variables: [MatchCounter: "1"] @@ -118,7 +118,7 @@ - test: if: "count($Child2D/preceding-sibling::*)=0" then: [t: "корень"] # phrase(the cube 'root' of x) - else: [t: "корневой индекс"] # phrase(the 'root index' of x is 3) + else: [t: "индекс корня"] # phrase(the 'root index' of x is 3) - pause: "medium" - name: into-or-out-of-msub @@ -128,7 +128,7 @@ - x: "$Move2D" - test: if: "count($Child2D/preceding-sibling::*)=0" - then: [t: "база"] # phrase(the 'base' of the power) + then: [t: "основание"] # phrase(the 'base' of the power) else: [t: "sepcript"] # phrase(x with 'subscript' 2) - pause: "medium" @@ -139,7 +139,7 @@ - x: "$Move2D" - test: if: "not($Child2D/preceding-sibling::*)" - then: [t: "база"] # phrase(the 'base' of the power) + then: [t: "основание"] # phrase(the 'base' of the power) else: [t: "superscript"] # phrase(x with 'superscript' 2) # FIX: it would be better to use the word used when reading (power, exponent, ...) - pause: "medium" @@ -150,7 +150,7 @@ - x: "$Move2D" - test: - if: "not($Child2D/preceding-sibling::*)" - then: [t: "база"] # phrase(the 'base' of the power) + then: [t: "основание"] # phrase(the 'base' of the power) - else_if: "count($Child2D/preceding-sibling::*)=1" then: [t: "sepcript"] # phrase(x with 'subscript' 2) else: [t: "superscript"] # phrase(x with 'superscript' 2) # FIX: it would be better to use the word used when reading (power, exponent, ...) @@ -163,7 +163,7 @@ - x: "$Move2D" - test: if: "count($Child2D/preceding-sibling::*)=0" - then: [t: "база"] # phrase(the 'base' of the power) + then: [t: "основание"] # phrase(the 'base' of the power) else: [t: "нижний предел"] # phrase(the 'lower limit' of the function is zero) - pause: "medium" @@ -174,7 +174,7 @@ - x: "$Move2D" - test: if: "count($Child2D/preceding-sibling::*)=0" - then: [t: "база"] # phrase(the 'base' of the power) + then: [t: "основание"] # phrase(the 'base' of the power) else: [t: "верхний предел"] # phrase(the 'upper limit' of the function is zero) - pause: "medium" @@ -185,7 +185,7 @@ - x: "$Move2D" - test: - if: "count($Child2D/preceding-sibling::*)=0" - then: [t: "база"] # phrase(the 'base' of the power) + then: [t: "основание"] # phrase(the 'base' of the power) - else_if: "count($Child2D/preceding-sibling::*)=1" then: [t: "нижний предел"] # phrase(the 'lower limit' of the function is zero) else: [t: "верхний предел"] # phrase(the 'upper limit' of the function is zero) @@ -205,7 +205,7 @@ - x: "$Move2D" - test: - if: "$NumPrecedingSiblings=0" - then: [t: "база"] # phrase(the 'base' of the power) + then: [t: "основание"] # phrase(the 'base' of the power) - else_if: "$Child2D/preceding-sibling::*[self::m:mprescripts]" # are we before mprescripts and hence are postscripts then: - test: # in postscripts -- base shifts by one @@ -564,12 +564,12 @@ then: - test: - if: "$NavCommand = 'MoveStart'" - then: [t: "перейти на начало математики"] # phrase('move to start of math') + then: [t: "перейти к началу математики"] # phrase('move to start of math') - else_if: "$NavCommand = 'MoveLineStart'" - then: [t: "перейти на начало линии"] # phrase('move to start of line') + then: [t: "перейти к началу строки"] # phrase('move to start of line') - else_if: "$NavCommand = 'MoveEnd'" then: [t: "перейти к концу математики"] # phrase('move to end of math') - else: [t: "перейти к концу линии"] # "$NavCommand = 'MoveLineEnd'" # phrase('move to end of line') + else: [t: "перейти к концу строки"] # "$NavCommand = 'MoveLineEnd'" # phrase('move to end of line') - pause: "medium" - test: if: "$NavCommand = 'MoveStart' or $NavCommand = 'MoveLineStart'" @@ -608,8 +608,8 @@ then: - test: if: "$NavCommand = 'MoveLineStart'" - then: [t: "перейти на начало линии"] # phrase('move to start of line') - else: [t: "перейти к концу линии"] # "$NavCommand = 'MoveLineEnd'" # phrase('move to end of line') + then: [t: "перейти к началу строки"] # phrase('move to start of line') + else: [t: "перейти к концу строки"] # "$NavCommand = 'MoveLineEnd'" # phrase('move to end of line') - pause: "medium" - test: if: "self::m:mrow or @data-from-mathml = 'mrow'" diff --git a/Rules/Languages/ru/unicode.yaml b/Rules/Languages/ru/unicode.yaml index ba904886..5c53278a 100644 --- a/Rules/Languages/ru/unicode.yaml +++ b/Rules/Languages/ru/unicode.yaml @@ -84,17 +84,17 @@ if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' then_test: if: "$Verbosity='Terse'" - then: [t: "открыть"] # 0x28 (en: 'open', google translation) - else: [t: "открытая скобка"] # 0x28 (en: 'open paren', google translation) - else: [t: "левая скобка"] # 0x28 (en: 'left paren', google translation) + then: [t: "открытая"] # 0x28 (en: 'open', google translation) + else: [t: "открывающая круглая скобка"] # 0x28 (en: 'open paren', google translation) + else: [t: "левая круглая скобка"] # 0x28 (en: 'left paren', google translation) - ")": # 0x29 - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' then_test: if: "$Verbosity='Terse'" - then: [t: "закрывать"] # 0x29 (en: 'close', google translation) - else: [t: "закрыть скобку"] # 0x29 (en: 'close paren', google translation) - else: [t: "правильная скобка"] # 0x29 (en: 'right paren', google translation) + then: [t: "закрытая"] # 0x29 (en: 'close', google translation) + else: [t: "закрывающая круглая скобка"] # 0x29 (en: 'close paren', google translation) + else: [t: "правая круглая скобка"] # 0x29 (en: 'right paren', google translation) - "*": # 0x2a test: @@ -150,26 +150,26 @@ - "[": # 0x5b - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [t: "открытый кронштейн"] # (en: 'open bracket', google translation) - else: [t: "левый кронштейн"] # (en: 'left bracket', google translation) - - "\\": [t: "обратная черта"] # 0x5c (en: 'back slash', google translation) + then: [t: "открывающая квадратная скобка"] # (en: 'open bracket', google translation) + else: [t: "левая квадратная скобка"] # (en: 'left bracket', google translation) + - "\\": [t: "обратная косая черта"] # 0x5c (en: 'back slash', google translation) - "]": # 0x5d - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [t: "близкий кронштейн"] # (en: 'close bracket', google translation) - else: [t: "правый кронштейн"] # (en: 'right bracket', google translation) + then: [t: "закрывающая квадратная скобка"] # (en: 'close bracket', google translation) + else: [t: "правая квадратная скобка"] # (en: 'right bracket', google translation) - "^": # 0x5e - test: if: "parent::m:modified-variable or parent::m:mover" then: [t: "шляп"] # (en: 'hat', google translation) - else: [t: "каретка"] # (en: 'caret', google translation) + else: [t: "крышка"] # (en: 'caret', google translation) - "_": [t: "под баром"] # 0x5f (en: 'under bar', google translation) - "`": [t: "могила"] # 0x60 (en: 'grave', google translation) - "{": # 0x7b - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [t: "открытая скоба"] # (en: 'open brace', google translation) - else: [t: "оставленный скоба"] # (en: 'left brace', google translation) + then: [t: "открывающая фигурная скобка"] # (en: 'open brace', google translation) + else: [t: "левая фигурная скобка"] # (en: 'left brace', google translation) - "|": # 0x7c # note: for ClearSpeak and SimpleSpeak, "|" inside of sets is handled at the mrow level, same for 'sets' - with: @@ -192,10 +192,10 @@ - "}": # 0x7d - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' - then: [t: "близкая скоба"] # (en: 'close brace', google translation) - else: [t: "правая скоба"] # (en: 'right brace', google translation) + then: [t: "закрывающая фигурная скобка"] # (en: 'close brace', google translation) + else: [t: "правая фигурная скобка"] # (en: 'right brace', google translation) - - "~": [t: "тилде"] # 0x7e (en: 'tilde', google translation) + - "~": [t: "тилда"] # 0x7e (en: 'tilde', google translation) - " ": # 0xa0 - test: # could be mtext in mtd or mtext in an mrow that is a concatenation of mtd's. Is there a better solution? @@ -244,7 +244,7 @@ if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "пропусков"] # (en: 'cap', google translation) + then: [t: "большая"] # (en: 'cap', google translation) else: [x: "$SpeechOverrides_CapitalLetters"] - pitch: value: "$CapitalLetters_Pitch" @@ -296,7 +296,7 @@ else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' if: "count(following-sibling::*) = 0" then: [t: "и так далее"] # (en: 'and so on', google translation) - else: [t: "и так далее"] # (en: 'and so on up to', google translation) + else: [t: "и так далее до"] # (en: 'and so on up to', google translation) - "⁡": # 0x2061 - test: @@ -315,8 +315,8 @@ - t: "тройной штрих" # (en: 'double-struck') - spell: "translate('.', 'ℂℕℚℝℤ', 'CNQRZ')" - - "℃": [t: "градусы по цельсию"] # 0x2103 (en: 'degrees celsius', google translation) - - "℉": [t: "степени фаренгейт"] # 0x2109 (en: 'degrees fahrenheit', google translation) + - "℃": [t: "градусы цельсия"] # 0x2103 (en: 'degrees celsius', google translation) + - "℉": [t: "градусы фаренгейта"] # 0x2109 (en: 'degrees fahrenheit', google translation) - "ℋℛℓ": # 0x210b - t: "сценарий" # (en: 'script', google translation) - spell: "translate('.', 'ℋℛℓ', 'HRl')" @@ -329,7 +329,7 @@ - "K": [t: "кельвин"] # 0x212a (en: 'kelvin', google translation) - "Å": [t: "ангстры"] # 0x212b (en: 'angstroms', google translation) - "ⅆⅇⅈⅉ": # 0x2146-9 - - t: "дважды поразил курсив" # (en: 'double-struck italic', google translation) + - t: "двойной курсив" # (en: 'double-struck italic', google translation) - spell: "translate('.', 'ⅆⅇⅈⅉ', 'deij')" - "←": [t: "стрелка влево"] # 0x2190 (en: 'leftwards arrow', google translation) @@ -337,7 +337,7 @@ - "→": # 0x2192 - test: if: "ancestor::*[2][self::m:limit]" - then: [t: "подходы"] # (en: 'approaches', google translation) + then: [t: "достигает"] # (en: 'approaches', google translation) else: [t: "стрелка вправо"] # (en: 'right arrow', google translation) - "↓": [t: "стрелка вниз"] # 0x2193 (en: 'downwards arrow', google translation) From b83b78c20942a7696024686957693ed927629a28 Mon Sep 17 00:00:00 2001 From: Danil <81031453+Kostenkov-2021@users.noreply.github.com> Date: Fri, 20 Feb 2026 06:18:06 +0300 Subject: [PATCH 30/43] Fixed unicode.yaml file This commitadds fixes at Russian translation of Unicode symbols list. --- Rules/Languages/ru/unicode.yaml | 146 ++++++++++++++++---------------- 1 file changed, 73 insertions(+), 73 deletions(-) diff --git a/Rules/Languages/ru/unicode.yaml b/Rules/Languages/ru/unicode.yaml index 5c53278a..3fe44005 100644 --- a/Rules/Languages/ru/unicode.yaml +++ b/Rules/Languages/ru/unicode.yaml @@ -30,7 +30,7 @@ if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "пропусков"] # (en: 'cap', google translation) + then: [t: "большая"] # (en: 'cap', google translation) else: [x: "$SpeechOverrides_CapitalLetters"] - pitch: value: "$CapitalLetters_Pitch" @@ -53,7 +53,7 @@ if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "пропусков"] # (en: 'cap', google translation) + then: [t: "большая"] # (en: 'cap', google translation) else: [x: "$SpeechOverrides_CapitalLetters"] - pitch: value: "$CapitalLetters_Pitch" @@ -69,22 +69,22 @@ if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" then_test: if: "$Verbosity = 'Terse'" - then: [t: "хлопнуть"] # 0x21 (en: 'bang', google translation) + then: [t: "восклицательный знак"] # 0x21 (en: 'bang', google translation) else: [t: "восклицательный знак"] # 0x21 (en: 'exclamation point', google translation) else: [t: "факториал"] # 0x21 (en: 'factorial', google translation) - "\"": [t: "кавычка"] # 0x22 (en: 'quotation mark', google translation) - - "#": [t: "число"] # 0x23 (en: 'number', google translation) + - "#": [t: "номер"] # 0x23 (en: 'number', google translation) - "$": [t: "доллар"] # 0x24 (en: 'dollars', google translation) - "%": [t: "процент"] # 0x25 (en: 'percent') - - "&": [t: "ampersand"] # 0x26 (google translation) + - "&": [t: "амперсанд"] # 0x26 (google translation) - "'": [t: "штрих"] # 0x27 (en: 'apostrophe') - "(": # 0x28 - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' then_test: if: "$Verbosity='Terse'" - then: [t: "открытая"] # 0x28 (en: 'open', google translation) + then: [t: "скобка открывается"] # 0x28 (en: 'open', google translation) else: [t: "открывающая круглая скобка"] # 0x28 (en: 'open paren', google translation) else: [t: "левая круглая скобка"] # 0x28 (en: 'left paren', google translation) - ")": # 0x29 @@ -92,7 +92,7 @@ if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' then_test: if: "$Verbosity='Terse'" - then: [t: "закрытая"] # 0x29 (en: 'close', google translation) + then: [t: "скобка закрывается"] # 0x29 (en: 'close', google translation) else: [t: "закрывающая круглая скобка"] # 0x29 (en: 'close paren', google translation) else: [t: "правая круглая скобка"] # 0x29 (en: 'right paren', google translation) @@ -114,7 +114,7 @@ # except if expression starts with '…' - "../*[1][.='…'] " then: - - T: "comma" # (en: 'comma', google translation) + - T: "запятая" # (en: 'comma', google translation) - test: if: "$Verbosity != Terse" then: [pause: short] @@ -132,21 +132,21 @@ - "<": # 0x3c - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) + then: [t: ""] # (en: 'is', google translation) - t: "меньше" # (en: 'less than') - "=": # 0x3d - test: if: "$Verbosity!='Terse'" - then: [t: "равен"] # (en: 'is equal to', google translation) + then: [t: "равно"] # (en: 'is equal to', google translation) else: [t: "равно"] # (en: 'equals') - ">": # 0x3e - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) + then: [t: ""] # (en: 'is', google translation) - t: "больше" # (en: 'greater than') - - "?": [t: "знак вопроса"] # 0x3f (en: 'question mark', google translation) - - "@": [t: "на знаке"] # 0x40 (en: 'at sign', google translation) + - "?": [t: "вопросительный знак"] # 0x3f (en: 'question mark', google translation) + - "@": [t: "собака"] # 0x40 (en: 'at sign', google translation) - "[": # 0x5b - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' @@ -161,10 +161,10 @@ - "^": # 0x5e - test: if: "parent::m:modified-variable or parent::m:mover" - then: [t: "шляп"] # (en: 'hat', google translation) + then: [t: "крышка"] # (en: 'hat', google translation) else: [t: "крышка"] # (en: 'caret', google translation) - - "_": [t: "под баром"] # 0x5f (en: 'under bar', google translation) - - "`": [t: "могила"] # 0x60 (en: 'grave', google translation) + - "_": [t: "подчёркивание"] # 0x5f (en: 'under bar', google translation) + - "`": [t: "гравис"] # 0x60 (en: 'grave', google translation) - "{": # 0x7b - test: if: $SpeechStyle = 'ClearSpeak' or $SpeechStyle = 'SimpleSpeak' @@ -179,14 +179,14 @@ - if: "$SpeechStyle != 'ClearSpeak'" then_test: if: "$DefaultToGiven" - then: [t: "данный"] # (en: 'given', google translation) + then: [t: "при условии"] # (en: 'given', google translation) else: [t: "вертикальная черта"] # (en: 'vertical line') - else_if: "not(preceding-sibling::*) or not(following-sibling::*)" - then: [t: "вертикальная линия"] # (en: 'vertical line', google translation) + then: [t: "вертикальная черта"] # (en: 'vertical line', google translation) - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" - then: [t: "так что"] # (en: 'such that', google translation) + then: [t: "такой, что"] # (en: 'such that', google translation) - else_if: "$ClearSpeak_VerticalLine = 'Given' or $DefaultToGiven" - then: [t: "данный"] # (en: 'given', google translation) + then: [t: "при условии"] # (en: 'given', google translation) - else: [t: "вертикальная черта"] # (en: 'divides') - "}": # 0x7d @@ -195,7 +195,7 @@ then: [t: "закрывающая фигурная скобка"] # (en: 'close brace', google translation) else: [t: "правая фигурная скобка"] # (en: 'right brace', google translation) - - "~": [t: "тилда"] # 0x7e (en: 'tilde', google translation) + - "~": [t: "тильда"] # 0x7e (en: 'tilde', google translation) - " ": # 0xa0 - test: # could be mtext in mtd or mtext in an mrow that is a concatenation of mtd's. Is there a better solution? @@ -203,10 +203,10 @@ then: [t: "пустой"] # want to say something for fraction (etc) with empty child (en: 'empty', google translation) else: [t: ""] - - "¬": [t: "нет"] # 0xac (en: 'not', google translation) + - "¬": [t: "не"] # 0xac (en: 'not', google translation) - "°": [t: "градусы"] # 0xb0 (en: 'degrees', google translation) - "±": [t: "плюс минус"] # 0xb1 (en: 'plus or minus') - - "´": [t: "острый"] # 0xb4 (en: 'acute', google translation) + - "´": [t: "акут"] # 0xb4 (en: 'acute', google translation) - "·": # 0xB7 - test: if: "$SpeechStyle = 'LiteralSpeak' or not($SpeechStyle = 'ClearSpeak' and $ClearSpeak_MultSymbolDot = 'Auto')" @@ -221,14 +221,14 @@ then: [t: "к"] # (en: 'by', google translation) else: [t: "умножить"] # (en: 'cross') - "÷": [t: "разделить на"] # 0xf7 (en: 'divided by') - - "̀": [t: "могильный акцент украшения"] # 0x300 (en: 'grave accent embellishment', google translation) - - "́": [t: "острый акцентный украшение"] # 0x301 (en: 'acute accent embellishment', google translation) - - "̂": [t: "окружающий акцент украшения"] # 0x302 (en: 'circumflex accent embellishment', google translation) - - "̃": [t: "тильде украшает"] # 0x303 (en: 'tilde embellishment', google translation) - - "̄": [t: "макрон украшает"] # 0x304 (en: 'macron embellishment', google translation) - - "̅": [t: "вручительская варенья"] # 0x305 (en: 'overbar embellishment', google translation) + - "̀": [t: "знак грависа"] # 0x300 (en: 'grave accent embellishment', google translation) + - "́": [t: "акут"] # 0x301 (en: 'acute accent embellishment', google translation) + - "̂": [t: "циркумфлекс"] # 0x302 (en: 'circumflex accent embellishment', google translation) + - "̃": [t: "тильда"] # 0x303 (en: 'tilde embellishment', google translation) + - "̄": [t: "макрон"] # 0x304 (en: 'macron embellishment', google translation) + - "̅": [t: "надчёркивание"] # 0x305 (en: 'overbar embellishment', google translation) - "̆": [t: "бреве"] # 0x306 (en: 'breve', google translation) - - "̇": [t: "точка над украшением"] # 0x307 (en: 'dot above embellishment', google translation) + - "̇": [t: "точка сверху"] # 0x307 (en: 'dot above embellishment', google translation) # Note: ClearSpeak has pref TriangleSymbol for "Δ", but that is wrong - "Α-Ω": @@ -278,13 +278,13 @@ - "ω": [t: "омега"] # 0x3c9 (en: 'omega') - "ϕ": [t: "фи"] # 0x3d5 (en: 'phi') - "ϖ": [t: "пи"] # 0x3d6 (en: 'pi') - - "ϵ": [t: "полулунный эпсилон"] # 0x3f5 (en: 'epsilon') - - "϶": [t: "обратный полулунный эпсилон"] # 0x3f6 (en: 'reversed epsilon') + - "ϵ": [t: "эпсилон"] # 0x3f5 (en: 'epsilon') + - "϶": [t: "обратный эпсилон"] # 0x3f6 (en: 'reversed epsilon') - - "–": [t: "en dash"] # 0x2013 (google translation) - - "—": [t: "em dash"] # 0x2014 (google translation) - - "―": [t: "горизонтальный батончик"] # 0x2015 (en: 'horizontal bar', google translation) - - "‖": [t: "двойная вертикальная линия"] # 0x2016 (en: 'double vertical line', google translation) + - "–": [t: "короткое тире"] # 0x2013 (google translation) + - "—": [t: "длинное тире"] # 0x2014 (google translation) + - "―": [t: "горизонтальная черта"] # 0x2015 (en: 'horizontal bar', google translation) + - "‖": [t: "двойная вертикальная черта"] # 0x2016 (en: 'double vertical line', google translation) - "…": # 0x2026 test: if: @@ -303,7 +303,7 @@ # skip saying "of" when Terse and a trig function, when it is a shape (does this happen?), or we are in :literal mode if: "not($Verbosity='Terse' and preceding-sibling::*[1][IsInDefinition(., 'TrigFunctionNames')]) and not(preceding-sibling::*[1][IsInDefinition(., 'GeometryShapes')]) and not(@data-changed='added' and ancestor-or-self::*[contains(@data-intent-property, ':literal:')])" - then: [t: "из"] # (en: 'of', google translation) + then: [t: "от"] # (en: 'of', google translation) - "⁢": [t: ""] # 0x2062 - "⁣": [t: ""] # 0x2063 - "⁤": [t: "и"] # 0x2064 (en: 'and', google translation) @@ -312,22 +312,22 @@ - "‴": [t: "тройной штрих"] # 0x2034 (en: 'triple prime') - "ℂℕℚℝℤ": # here we rely on this running through the table again to speak "cap xxx" - - t: "тройной штрих" # (en: 'double-struck') + - t: "двойное" # (en: 'double-struck') - spell: "translate('.', 'ℂℕℚℝℤ', 'CNQRZ')" - "℃": [t: "градусы цельсия"] # 0x2103 (en: 'degrees celsius', google translation) - "℉": [t: "градусы фаренгейта"] # 0x2109 (en: 'degrees fahrenheit', google translation) - "ℋℛℓ": # 0x210b - - t: "сценарий" # (en: 'script', google translation) + - t: "рукописное" # (en: 'script', google translation) - spell: "translate('.', 'ℋℛℓ', 'HRl')" - - "ℎ": [t: "постоянная планка"] # 0x210e (en: 'planck constant', google translation) + - "ℎ": [t: "постоянная Планка"] # 0x210e (en: 'planck constant', google translation) - "ℜ": # 0x211c - - t: "фрактур" # (en: 'fraktur', google translation) + - t: "готическая" # (en: 'fraktur', google translation) - spell: "'R'" - "Ω": [t: "ом"] # 0x2126 (en: 'ohms', google translation) - "K": [t: "кельвин"] # 0x212a (en: 'kelvin', google translation) - - "Å": [t: "ангстры"] # 0x212b (en: 'angstroms', google translation) + - "Å": [t: "ангстрем"] # 0x212b (en: 'angstroms', google translation) - "ⅆⅇⅈⅉ": # 0x2146-9 - t: "двойной курсив" # (en: 'double-struck italic', google translation) - spell: "translate('.', 'ⅆⅇⅈⅉ', 'deij')" @@ -337,7 +337,7 @@ - "→": # 0x2192 - test: if: "ancestor::*[2][self::m:limit]" - then: [t: "достигает"] # (en: 'approaches', google translation) + then: [t: "стремится к"] # (en: 'approaches', google translation) else: [t: "стрелка вправо"] # (en: 'right arrow', google translation) - "↓": [t: "стрелка вниз"] # 0x2193 (en: 'downwards arrow', google translation) @@ -346,7 +346,7 @@ - "∂": # 0x2202 - test: if: "$Verbosity='Terse'" - then: [t: "частично"] # (en: 'partial', google translation) + then: [t: "частная производная"] # (en: 'partial', google translation) else: [t: "частный дифференциал"] # (en: 'partial derivative') - "∃": [t: "существует"] # 0x2203 (en: 'there exists') - "∄": [t: "не существует"] # 0x2204 (en: 'there does not exist') @@ -354,7 +354,7 @@ - "∆": # 0x2206 - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # (en: 'the', google translation) + then: [t: ""] # (en: 'the', google translation) - t: "инкремент" # (en: 'laplacian of') - "∈": # 0x2208 - test: @@ -362,7 +362,7 @@ then: - test: if: "$Verbosity!='Terse' and not(ancestor::*[self::m:set])" # "the set x is an element of ..." sounds bad" - then: [t: "является"] # (en: 'is', google translation) + then: [t: ""] # (en: 'is', google translation) - t: "принадлежит" # (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: @@ -377,7 +377,7 @@ - else: [t: "принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to') else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "является членом"] # (en: 'is a member of', google translation) + then: [t: "член"] # (en: 'is a member of', google translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' then: [t: "элемент"] # (en: 'is an element of', google translation) - else_if: $ClearSpeak_SetMemberSymbol = 'In' @@ -390,7 +390,7 @@ then: - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) + then: [t: ""] # (en: 'is', google translation) - t: "не принадлежит" # (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: @@ -405,7 +405,7 @@ - else: [t: "не принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to') else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "не является членом"] # (en: 'is not a member of', google translation) + then: [t: "не член"] # (en: 'is not a member of', google translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' then: [t: "не элемент"] # (en: 'is not an element of', google translation) - else_if: $ClearSpeak_SetMemberSymbol = 'In' @@ -417,7 +417,7 @@ then: - test: if: "$Verbosity!='Terse' and not(ancestor::*[self::m:set])" # "the set x is an element of ..." sounds bad" - then: [t: "является"] # (en: 'is', google translation) + then: [t: ""] # (en: 'is', google translation) - t: "малое принадлежит" # (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: @@ -432,7 +432,7 @@ - else: [t: "малое принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to') else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "является членом"] # (en: 'is a member of', google translation) + then: [t: "член"] # (en: 'is a member of', google translation) - else_if: $ClearSpeak_SetMemberSymbol = 'Element' then: [t: "элемент"] # (en: 'is an element of', google translation) - else_if: $ClearSpeak_SetMemberSymbol = 'In' @@ -443,33 +443,33 @@ - "∑": [t: "эн-арная сумма"] # 0x2211 (en: 'sum') - "−": [t: "минус"] # 0x2212 (en: 'minus') - "∓": [t: "минус плюс"] # 0x2213 (en: 'minus or plus') - - "∗": [t: "оператор звёздочка"] # 0x2217 (en: 'times') - - "∘": [t: "кольцо"] # 0x2218 (en: 'composed with') + - "∗": [t: "звёздочка"] # 0x2217 (en: 'times') + - "∘": [t: "композиция"] # 0x2218 (en: 'composed with') - "√": # 0x221a - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # (en: 'the', google translation) + then: [t: ""] # (en: 'the', google translation) - t: "квадратный корень" # (en: 'square root of') - "∝": # 0x221d - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) + then: [t: ""] # (en: 'is', google translation) - t: "пропорционально" # (en: 'proportional to') - "∞": [t: "бесконечность"] # 0x221e (en: 'infinity') - - "∟": [t: "правый угол"] # 0x221f (en: 'right angle') + - "∟": [t: "прямой угол"] # 0x221f (en: 'right angle') - "∠": [t: "угол"] # 0x2220 (en: 'angle') - - "∡": [t: "измеримый угол"] # 0x2221 (en: 'measured angle') + - "∡": [t: "измеренный угол"] # 0x2221 (en: 'measured angle') - "∣": [t: "делит"] # 0x2223 (en: 'divides') - "∤": [t: "не делит"] # 0x2224 (en: 'does not divide') - "∥": # 0x2225 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) + then: [t: ""] # (en: 'is', google translation) - t: "параллельно" # (en: 'parallel to') - "∦": # 0x2226 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) + then: [t: ""] # (en: 'is', google translation) - t: "не параллельно" # (en: 'not parallel to') - "∧": [t: "логическое и"] # 0x2227 (en: 'and') - "∨": [t: "логическое или"] # 0x2228 (en: 'or') @@ -482,7 +482,7 @@ - "∶": # 0x2236 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) + then: [t: ""] # (en: 'is', google translation) - t: "отношение" # (en: 'to') - "∷": [t: "пропорция"] # 0x2237 (en: 'as') - "∼": [t: "тильда"] # 0x223c (en: 'varies with') @@ -490,28 +490,28 @@ - "∾": # 0x223e - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "перевёрнутая плавная s" # (en: 'most positive') + then: [t: ""] # (en: 'is', google translation) + - t: "изогнутая s" # (en: 'most positive') - "∿": [t: "синусоидальная волна"] # 0x223f (en: 'sine wave') - "≠": # 0x2260 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) + then: [t: ""] # (en: 'is', google translation) - t: "не равно" # (en: 'not equal to') - "≡": # 0x2261 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) + then: [t: ""] # (en: 'is', google translation) - t: "тождественно равно" # (en: 'identical to') - "≤": # 0x2264 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "less than or equal to" + then: [t: ""] # (en: 'is', google translation) + - t: "меньше или равно" - "≥": # 0x2265 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) + then: [t: ""] # (en: 'is', google translation) - t: "больше или равно" # (en: 'greater than or equal to') - "≦": [t: "меньше над равно"] # 0x2266 (en: 'less than over equal to') - "≧": [t: "больше над равно"] # 0x2267 (en: 'greater than over equal to') @@ -520,30 +520,30 @@ - "⊂": # 0x2282 - test: if: "$Verbosity!='Terse'" - then: [t: "является а"] # (en: 'is a', google translation) + then: [t: ""] # (en: 'is a', google translation) - t: "подмножество" # (en: 'subset of') - "⊃": # 0x2283 - test: if: "$Verbosity!='Terse'" - then: [t: "является а"] # (en: 'is a', google translation) + then: [t: ""] # (en: 'is a', google translation) - t: "надмножество" # (en: 'superset of') - "⊄": # 0x2284 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) + then: [t: ""] # (en: 'is', google translation) - t: "не подмножество" # (en: 'not a subset of') - "⊅": # 0x2285 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) + then: [t: ""] # (en: 'is', google translation) - t: "не надмножество" # (en: 'not a superset of') - "⊆": # 0x2286 - test: if: "$Verbosity!='Terse'" - then: [t: "является а"] # (en: 'is a', google translation) + then: [t: ""] # (en: 'is a', google translation) - t: "подмножество или равно" # (en: 'subset of or equal to') - "⊇": # 0x2287 - test: if: "$Verbosity!='Terse'" - then: [t: "является а"] # (en: 'is a', google translation) + then: [t: ""] # (en: 'is a', google translation) - t: "надмножество или равно" # (en: 'superset of or equal to') From 39ae354bcf14931e071895f0edd207691c0d786f Mon Sep 17 00:00:00 2001 From: Danil <81031453+Kostenkov-2021@users.noreply.github.com> Date: Fri, 20 Feb 2026 08:33:38 +0300 Subject: [PATCH 31/43] Update of unicode-full This commit includes fixed Russian translations of Unicode symbols at unicode-full.yaml file. --- Rules/Languages/ru/unicode-full.yaml | 1186 +++++++++++++------------- 1 file changed, 590 insertions(+), 596 deletions(-) diff --git a/Rules/Languages/ru/unicode-full.yaml b/Rules/Languages/ru/unicode-full.yaml index 4224bf75..cd76b611 100644 --- a/Rules/Languages/ru/unicode-full.yaml +++ b/Rules/Languages/ru/unicode-full.yaml @@ -2,621 +2,74 @@ - "¢": [t: "центы"] # 0xa2 (en: 'cents', google translation) - - "£": [t: "фунт"] # 0xa3 (en: 'pounds', google translation) - - "¤": [t: "валютный знак"] # 0xa4 (en: 'currency sign', google translation) - - "¥": [t: "иена"] # 0xa5 (en: 'yen', google translation) - - "¦": [t: "сломанный бар"] # 0xa6 (en: 'broken bar', google translation) - - "§": [t: "раздел"] # 0xa7 (en: 'section', google translation) - - "¨": [t: "двойная точка"] # 0xa8 (en: 'double dot', google translation) + - "£": [t: "фунты"] # 0xa3 (en: 'pounds', google translation) + - "¤": [t: "знак валюты"] # 0xa4 (en: 'currency sign', google translation) + - "¥": [t: "иены"] # 0xa5 (en: 'yen', google translation) + - "¦": [t: "вертикальная пунктирная черта"] # 0xa6 (en: 'broken bar', google translation) + - "§": [t: "параграф"] # 0xa7 (en: 'section', google translation) + - "¨": [t: "две точки"] # 0xa8 (en: 'double dot', google translation) - "©": [t: "авторское право"] # 0xa9 (en: 'copyright', google translation) - - "ª": [t: "женский орден -индикатор"] # 0xaa (en: 'feminine ordinal indicator', google translation) - - "¬": [t: "нет"] # 0xac (en: 'not', google translation) - - "«": [t: "оценка с двойным углом."] # 0xab (en: 'left-pointing double angle quote mark', google translation) + - "ª": [t: "женский порядковый индикатор"] # 0xaa (en: 'feminine ordinal indicator', google translation) + - "¬": [t: "отрицание"] # 0xac (en: 'not', google translation) + - "«": [t: "левая двойная угловая кавычка"] # 0xab (en: 'left-pointing double angle quote mark', google translation) - "¯": # 0xaf - test: if: "ancestor::m:modified-variable and preceding-sibling::*[1][self::m:mi]" - then: [t: "бар"] # (en: 'bar', google translation) + then: [t: "черта"] # (en: 'bar', google translation) else: [t: "линия"] # (en: 'line', google translation) - - "²": [t: "два"] # 0xb2 (en: 'two', google translation) - - "³": [t: "три"] # 0xb3 (en: 'three', google translation) - - "´": [t: "острый"] # 0xb4 (en: 'acute', google translation) + - "²": [t: "в квадрате"] # 0xb2 (en: 'two', google translation) + - "³": [t: "в кубе"] # 0xb3 (en: 'three', google translation) + - "´": [t: "акут"] # 0xb4 (en: 'acute', google translation) - "µ": [t: "микро"] # 0xb5 (en: 'micro', google translation) - - "¹": [t: "один"] # 0xb9 (en: 'one', google translation) - - "º": [t: "мужской орден -индикатор"] # 0xb9 (en: 'masculine ordinal indicator', google translation) + - "¹": [t: "в первой степени"] # 0xb9 (en: 'one', google translation) + - "º": [t: "мужской порядковый индикатор"] # 0xb9 (en: 'masculine ordinal indicator', google translation) - "·": - test: if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolDot = 'Auto'" - then: [t: "раз"] # (en: 'times', google translation) - else: [t: "умножить"] # (en: 'dot') + then: [t: "умножить"] # (en: 'times', google translation) + else: [t: "точка"] # (en: 'dot') - "×": # 0xd7 - test: if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolX = 'Auto'" - then: [t: "раз"] # (en: 'times', google translation) + then: [t: "умножить"] # (en: 'times', google translation) else_test: if: $ClearSpeak_MultSymbolX = 'By' - then: [t: "к"] # (en: 'by', google translation) - else: [t: "умножить"] # (en: 'cross') + then: [t: "на"] # (en: 'by', google translation) + else: [t: "крестик"] # (en: 'cross') - "÷": [t: "разделить на"] # 0xf7 (en: 'divided by') - "¡": [t: "перевернутый восклицательный знак"] # 0xa1 (en: 'inverted exclamation mark', google translation) - - "¶": [t: "абзац"] # 0xb6 (en: 'paragraph mark', google translation) - - "¿": [t: "перевернутый вопрос"] # 0xbf (en: 'inverted question mark', google translation) - - - "ʰ": [t: "модификатор маленький h"] # 0x2b0 (en: 'modifier small h', google translation) - - "ʱ": [t: "модификатор маленький h с крючком"] # 0x2b1 (en: 'modifier small h with hook', google translation) - - "ʲ": [t: "модификатор small j"] # 0x2b2 (en: 'modifier small j', google translation) - - "ʳ": [t: "модификатор маленький r"] # 0x2b3 (en: 'modifier small r', google translation) - - "ʴ": [t: "модификатор маленький повернут r"] # 0x2b4 (en: 'modifier small turned r', google translation) - - "ʵ": [t: "модификатор small turn r r с крючком"] # 0x2b5 (en: 'modifier small turned r with hook', google translation) + - "¶": [t: "знак абзаца"] # 0xb6 (en: 'paragraph mark', google translation) + - "¿": [t: "перевёрнутый вопросительный знак"] # 0xbf (en: 'inverted question mark', google translation) + + - "ʰ": [t: "верхний индекс h"] # 0x2b0 (en: 'modifier small h', google translation) + - "ʱ": [t: "верхний индекс h с крючком"] # 0x2b1 (en: 'modifier small h with hook', google translation) + - "ʲ": [t: "верхний индекс j"] # 0x2b2 (en: 'modifier small j', google translation) + - "ʳ": [t: "верхний индекс r"] # 0x2b3 (en: 'modifier small r', google translation) + - "ʴ": [t: "верхний индекс перевёрнутого r"] # 0x2b4 (en: 'modifier small turned r', google translation) + - "ʵ": [t: "верхний индекс перевёрнутого r с крючком"] # 0x2b5 (en: 'modifier small turned r with hook', google translation) - "ʶ": # 0x2b6 - - t: "модификатор маленький перевернутый" # (en: 'modifier small inverted', google translation) + - t: "верхний индекс перевёрнутой" # (en: 'modifier small inverted', google translation) - spell: "translate('R', 'R', 'R')" - - "ʷ": [t: "модификатор маленький w"] # 0x2b7 (en: 'modifier small w', google translation) - - "ʸ": [t: "модификатор маленький y"] # 0x2b8 (en: 'modifier small y', google translation) - - "ʹ": [t: "модификатор prime"] # 0x2b9 (en: 'modifier prime', google translation) - - "ʺ": [t: "модификатор double prime"] # 0x2ba (en: 'modifier double prime', google translation) - - "ʻ": [t: "модификатор стал запятой"] # 0x2bb (en: 'modifier turned comma', google translation) - - "ʼ": [t: "модификатор апостроф"] # 0x2bc (en: 'modifier apostrophe', google translation) - - "ʽ": [t: "модификатор обратный запятой"] # 0x2bd (en: 'modifier reversed comma', google translation) - - "ʾ": [t: "модификатор справа наполовину кольцо"] # 0x2be (en: 'modifier right half ring', google translation) - - "ʿ": [t: "модификатор оставил половину кольца"] # 0x2bf (en: 'modifier left half ring', google translation) - - "ˀ": [t: "модификатор глоттальная остановка"] # 0x2c0 (en: 'modifier glottal stop', google translation) - - "ˁ": [t: "модификатор поменял глоттальную остановку"] # 0x2c1 (en: 'modifier reversed glottal stop', google translation) - - "˂": [t: "модификатор левой стрелки"] # 0x2c2 (en: 'modifier left arrowhead', google translation) - - "˃": [t: "модификатор правой стрелки"] # 0x2c3 (en: 'modifier right arrowhead', google translation) - - "˄": [t: "модификатор вверх стрел"] # 0x2c4 (en: 'modifier up arrowhead', google translation) - - "˅": [t: "модификатор вниз стрел"] # 0x2c5 (en: 'modifier down arrowhead', google translation) - - "ˆ": [t: "модификатор объединенный акцент"] # 0x2c6 (en: 'modifier circumflex accent', google translation) - - "ˇ": [t: "проверять"] # 0x2c7 (en: 'check', google translation) - - "ˈ": [t: "модификатор вертикальной линии"] # 0x2c8 (en: 'modifier vertical line', google translation) - - "ˉ": [t: "модификатор макрон"] # 0x2c9 (en: 'modifier macron', google translation) - - "ˊ": [t: "модификатор острый акцент"] # 0x2ca (en: 'modifier acute accent', google translation) - - "ˋ": [t: "модификатор могильный акцент"] # 0x2cb (en: 'modifier grave accent', google translation) - - "ˌ": [t: "модификатор низкой вертикальной линии"] # 0x2cc (en: 'modifier low vertical line', google translation) - - "ˍ": [t: "модификатор низкий макрон"] # 0x2cd (en: 'modifier low macron', google translation) - - "ˎ": [t: "модификатор низкий могильный акцент"] # 0x2ce (en: 'modifier low grave accent', google translation) - - "ˏ": [t: "модификатор низкий острый акцент"] # 0x2cf (en: 'modifier low acute accent', google translation) - - "ː": [t: "модификатор треугольная толстая кишка"] # 0x2d0 (en: 'modifier triangular colon', google translation) - - "ˑ": [t: "модификатор половина треугольной толстой кишки"] # 0x2d1 (en: 'modifier half triangular colon', google translation) - - "˒": [t: "модификатор центрирован правой половиной кольца"] # 0x2d2 (en: 'modifier centered right half ring', google translation) - - "˓": [t: "модификатор центральный левый половинный кольцо"] # 0x2d3 (en: 'modifier centered left half ring', google translation) - - "˔": [t: "модификатор вверх"] # 0x2d4 (en: 'modifier up tadck', google translation) - - "˕": [t: "модификатор вниз"] # 0x2d5 (en: 'modifier down tack', google translation) - - "˖": [t: "модификатор плюс знак"] # 0x2d6 (en: 'modifier plus sign', google translation) - - "˗": [t: "модификатор минус знак"] # 0x2d7 (en: 'modifier minus sign', google translation) - - "˘": [t: "бреве"] # 0x2d8 (en: 'breve', google translation) - - "˙": [t: "точка"] # 0x2d9 (en: 'dot', google translation) - - "˚": [t: "кольцо выше"] # 0x2da (en: 'ring above', google translation) - - "˛": [t: "огонек"] # 0x2db (en: 'ogonek', google translation) - - "˜": [t: "маленькая тильда"] # 0x2dc (en: 'small tilde', google translation) - - "˝": [t: "двойной острый акцент"] # 0x2dd (en: 'double acute accent', google translation) - - "˞": [t: "модификатор rhotic hook"] # 0x2de (en: 'modifier rhotic hook', google translation) - - "˟": [t: "модификатор cross accent"] # 0x2df (en: 'modifier cross accent', google translation) - - "ˠ": [t: "модификатор маленькой гамма"] # 0x2e0 (en: 'modifier small gamma', google translation) - - "ˡ": [t: "модификатор маленький l"] # 0x2e1 (en: 'modifier small l', google translation) - - "ˢ": [t: "модификатор маленький с"] # 0x2e2 (en: 'modifier small s', google translation) - - "ˣ": [t: "модификатор маленький x"] # 0x2e3 (en: 'modifier small x', google translation) - - "ˤ": [t: "модификатор небольшой обратной глоттальной остановки"] # 0x2e4 (en: 'modifier small reversed glottal stop', google translation) - - "˥": [t: "модификатор лишний тональный батончик"] # 0x2e5 (en: 'modifier extra-high tone bar', google translation) - - "˦": [t: "модификатор высокого тона"] # 0x2e6 (en: 'modifier high tone bar', google translation) - - "˧": [t: "модификатор среднего тона"] # 0x2e7 (en: 'modifier mid tone bar', google translation) - - "˨": [t: "модификатор с низким тоном"] # 0x2e8 (en: 'modifier low tone bar', google translation) - - "˩": [t: "модификатор экстра-низко-тон"] # 0x2e9 (en: 'modifier extra-low tone bar', google translation) - - "˪": [t: "модификатор инь, выходящий по тональной марке"] # 0x2ea (en: 'modifier yin departing tone mark', google translation) - - "˫": [t: "модификатор ян уходящего тон"] # 0x2eb (en: 'modifier yang departing tone mark', google translation) - - "ˬ": [t: "модификатор голоса"] # 0x2ec (en: 'modifier voicing', google translation) - - "˭": [t: "модификатор бездиочный"] # 0x2ed (en: 'modifier unaspirated', google translation) - - "ˮ": [t: "модификатор двойной апостроф"] # 0x2ee (en: 'modifier double apostrophe', google translation) - - "˯": [t: "модификатор низкого вниз стрелы"] # 0x2ef (en: 'modifier low down arrowhead', google translation) - - "˰": [t: "модификатор низкий вверх стрел"] # 0x2f0 (en: 'modifier low up arrowhead', google translation) - - "˱": [t: "модификатор низкий левый стрелок"] # 0x2f1 (en: 'modifier low left arrowhead', google translation) - - "˲": [t: "модификатор низкого правого стрелка"] # 0x2f2 (en: 'modifier low right arrowhead', google translation) - - "˳": [t: "модификатор низкий кольцо"] # 0x2f3 (en: 'modifier low ring', google translation) - - "˴": [t: "модификатор среднего могилы"] # 0x2f4 (en: 'modifier middle grave accent', google translation) - - "˵": [t: "модификатор среднего двойного могилы"] # 0x2f5 (en: 'modifier middle double grave accent', google translation) - - "˶": [t: "модификатор среднего двойного острого акцента"] # 0x2f6 (en: 'modifier middle double acute accent', google translation) - - "˷": [t: "модификатор низкий тильде"] # 0x2f7 (en: 'modifier low tilde', google translation) - - "˸": [t: "модификатор поднял толстую кишку"] # 0x2f8 (en: 'modifier raised colon', google translation) - - "˹": [t: "модификатор начинается высокий тон"] # 0x2f9 (en: 'modifier begin high tone', google translation) - - "˺": [t: "модификатор заканчивает высокий тон"] # 0x2fa (en: 'modifier end high tone', google translation) - - "˻": [t: "модификатор начинается с низким тоном"] # 0x2fb (en: 'modifier begin low tone', google translation) - - "˼": [t: "модификатор заканчивается низким тоном"] # 0x2fc (en: 'modifier end low tone', google translation) - - "˽": [t: "модификатор полка"] # 0x2fd (en: 'modifier shelf', google translation) - - "˾": [t: "модификатор открытая полка"] # 0x2fe (en: 'modifier open shelf', google translation) - - "˿": [t: "модификатор низкий левый стрелка"] # 0x2ff (en: 'modifier low left arrow', google translation) - - "̀": [t: "могильный акцент украшения"] # 0x300 (en: 'grave accent embellishment', google translation) - - "́": [t: "острый акцентный украшение"] # 0x301 (en: 'acute accent embellishment', google translation) - - "̂": [t: "окружающий акцент украшения"] # 0x302 (en: 'circumflex accent embellishment', google translation) - - "̃": [t: "тильде украшает"] # 0x303 (en: 'tilde embellishment', google translation) - - "̄": [t: "макрон украшает"] # 0x304 (en: 'macron embellishment', google translation) - - "̅": [t: "вручительская варенья"] # 0x305 (en: 'overbar embellishment', google translation) - - "̆": [t: "бреве украшения"] # 0x306 (en: 'breve embellishment', google translation) - - "̇": [t: "точка над украшением"] # 0x307 (en: 'dot above embellishment', google translation) - - "̈": [t: "украшение диарезиса"] # 0x308 (en: 'diaeresis embellishment', google translation) - - "̉": [t: "крючок над украшением"] # 0x309 (en: 'hook above embellishment', google translation) - - "̊": [t: "кольцо над украшением"] # 0x30a (en: 'ring above embellishment', google translation) - - "̋": [t: "двойное острое акцентное украшение"] # 0x30b (en: 'double acute accent embellishment', google translation) - - "̌": [t: "проверять"] # 0x30c (en: 'check', google translation) - - "̍": [t: "вертикальная линия над украшением"] # 0x30d (en: 'vertical line above embellishment', google translation) - - "̎": [t: "двойная вертикальная линия над украшением"] # 0x30e (en: 'double vertical line above embellishment', google translation) - - "̏": [t: "двойной могильный акцент украшения"] # 0x30f (en: 'double grave accent embellishment', google translation) - - "̐": [t: "кендрабинду украшает"] # 0x310 (en: 'candrabindu embellishment', google translation) - - "̑": [t: "перевернутое украшение бреве"] # 0x311 (en: 'inverted breve embellishment', google translation) - - "̒": [t: "повернут запятую над украшением"] # 0x312 (en: 'turned comma above embellishment', google translation) - - "̓": [t: "запятая над украшением"] # 0x313 (en: 'comma above embellishment', google translation) - - "̔": [t: "обратная запятая над украшением"] # 0x314 (en: 'reversed comma above embellishment', google translation) - - "̕": [t: "запятая над правым украшением"] # 0x315 (en: 'comma above right embellishment', google translation) - - "̖": [t: "могильный акцент ниже украшения"] # 0x316 (en: 'grave accent below embellishment', google translation) - - "̗": [t: "острый акцент ниже украшения"] # 0x317 (en: 'acute accent below embellishment', google translation) - - "̘": [t: "левая привязка под украшением"] # 0x318 (en: 'left tack below embellishment', google translation) - - "̙": [t: "правая привязка под украшением"] # 0x319 (en: 'right tack below embellishment', google translation) - - "̚": [t: "левый угол над украшением"] # 0x31a (en: 'left angle above embellishment', google translation) - - "̛": [t: "рога в украшении"] # 0x31b (en: 'horn embellishment', google translation) - - "̜": [t: "полево половина кольца под украшением"] # 0x31c (en: 'left half ring below embellishment', google translation) - - "̝": [t: "вверх по приукрашиванию"] # 0x31d (en: 'up tack below embellishment', google translation) - - "̞": [t: "вниз по привязке"] # 0x31e (en: 'down tack below embellishment', google translation) - - "̟": [t: "плюс знак ниже украшения"] # 0x31f (en: 'plus sign below embellishment', google translation) - - "̠": [t: "знак минус ниже украшения"] # 0x320 (en: 'minus sign below embellishment', google translation) - - "̡": [t: "палатализированный крюк под украшением"] # 0x321 (en: 'palatalized hook below embellishment', google translation) - - "̢": [t: "ретрофлексный крюк под украшением"] # 0x322 (en: 'retroflex hook below embellishment', google translation) - - "̣": [t: "точка ниже украшения"] # 0x323 (en: 'dot below embellishment', google translation) - - "̤": [t: "диарезис ниже украшения"] # 0x324 (en: 'diaeresis below embellishment', google translation) - - "̥": [t: "кольцо ниже украшения"] # 0x325 (en: 'ring below embellishment', google translation) - - "̦": [t: "запятая ниже украшения"] # 0x326 (en: 'comma below embellishment', google translation) - - "̧": [t: "седия украшения"] # 0x327 (en: 'cedilla embellishment', google translation) - - "̨": [t: "огонек украшает"] # 0x328 (en: 'ogonek embellishment', google translation) - - "̩": [t: "вертикальная линия под украшением"] # 0x329 (en: 'vertical line below embellishment', google translation) - - "̪": [t: "мост ниже украшения"] # 0x32a (en: 'bridge below embellishment', google translation) - - "̫": [t: "перевернутая двойная арка ниже украшения"] # 0x32b (en: 'inverted double arch below embellishment', google translation) - - "̬": [t: "карон ниже украшения"] # 0x32c (en: 'caron below embellishment', google translation) - - "̭": [t: "окружающий акцент под украшением"] # 0x32d (en: 'circumflex accent below embellishment', google translation) - - "̮": [t: "бреве под украшением"] # 0x32e (en: 'breve below embellishment', google translation) - - "̯": [t: "перевернутый бреве под украшением"] # 0x32f (en: 'inverted breve below embellishment', google translation) - - "̰": [t: "тильда ниже украшения"] # 0x330 (en: 'tilde below embellishment', google translation) - - "̱": [t: "макрон ниже украшения"] # 0x331 (en: 'macron below embellishment', google translation) - - "̲": [t: "низкая линия украшения"] # 0x332 (en: 'low line embellishment', google translation) - - "̳": [t: "двойная низкая линейная украшения"] # 0x333 (en: 'double low line embellishment', google translation) - - "̴": [t: "тильде наложение украшений"] # 0x334 (en: 'tilde overlay embellishment', google translation) - - "̵": [t: "краткое инсультное наложение"] # 0x335 (en: 'short stroke overlay embellishment', google translation) - - "̶": [t: "длинное инсульт украшает"] # 0x336 (en: 'long stroke overlay embellishment', google translation) - - "̷": [t: "короткое наложение solidus"] # 0x337 (en: 'short solidus overlay embellishment', google translation) - - "̸": [t: "длинное наложение solidus"] # 0x338 (en: 'long solidus overlay embellishment', google translation) - - "̹": [t: "правое половина кольца под украшением"] # 0x339 (en: 'right half ring below embellishment', google translation) - - "̺": [t: "перевернутый мост под украшением"] # 0x33a (en: 'inverted bridge below embellishment', google translation) - - "̻": [t: "квадрат ниже украшения"] # 0x33b (en: 'square below embellishment', google translation) - - "̼": [t: "seagull ниже украшения"] # 0x33c (en: 'seagull below embellishment', google translation) - - "̽": [t: "x выше украшения"] # 0x33d (en: 'x above embellishment', google translation) - - "̾": [t: "вертикальное украшение тильды"] # 0x33e (en: 'vertical tilde embellishment', google translation) - - "̿": [t: "двойное оберное украшение"] # 0x33f (en: 'double overline embellishment', google translation) - - "̀": [t: "могильный тон марк украшения"] # 0x340 (en: 'grave tone mark embellishment', google translation) - - "́": [t: "острый тонус марк украшения"] # 0x341 (en: 'acute tone mark embellishment', google translation) - - "͆": [t: "мост выше"] # 0x346 (en: 'bridge above', google translation) - - - "ΪΫϏ": # 0x3aa, 0x3ab, 0x3cf - - test: - if: "$CapitalLetters_Beep" - then: - - audio: - value: "beep.mp4" - replace: [] - - test: - if: "$CapitalLetters_UseWord" - then_test: - if: "$SpeechOverrides_CapitalLetters = ''" - then_test: - if: "$Impairment = 'Blindness'" - then: [t: "пропусков"] # (en: 'cap', google translation) - else: [x: "$SpeechOverrides_CapitalLetters"] - - pitch: - value: "$CapitalLetters_Pitch" - replace: [spell: "translate('.', 'ΪΫϏ', 'ιυϗ')"] - - t: "с диалитикой" # (en: 'with dialytika', google translation) - - "ϊ": [t: "йота с диалитикой"] # 0x3ca (en: 'iota with dialytika') - - "ϋ": [t: "ипсилон с диалитикой"] # 0x3cb (en: 'upsilon with dialytika') - - "ό": [t: "омикрон с тоносом"] # 0x3cc (en: 'omicron with tonos') - - "ύ": [t: "ипсилон с тоносом"] # 0x3cd (en: 'upsilon with tonos') - - "ώ": [t: "омега с тоносом"] # 0x3ce (en: 'omega with tonos') - - "ϐ": [t: "бета"] # 0x3d0 (en: 'beta') - - "ϑ": [t: "тета"] # 0x3d1 (en: 'theta') - - "ϒ": [t: "ипсилон с крючком"] # 0x3d2 (en: 'upsilon with hook') - - "ϓ": [t: "ипсилон с акутом и крючком"] # 0x3d3 (en: 'upsilon with acute and hook') - - "ϔ": [t: "ипсилон с диэрезисом и крючком"] # 0x3d4 (en: 'upsilon with diaeresis and hook') - - "ϕ": [t: "фи"] # 0x3d5 (en: 'phi') - - "ϖ": [t: "пи"] # 0x3d6 (en: 'pi') - - "ϗ": [t: "кай"] # 0x3d7 (en: 'kai') - - "Ϙ": [t: "верхний архаичный коппа"] # 0x3d8 (en: 'cap archaic koppa', google translation) - - "ϙ": [t: "архаичная коппа"] # 0x3d9 (en: 'archaic koppa') - - "ϵ": [t: "полулунный эпсилон"] # 0x3f5 (en: 'epsilon') - - "϶": [t: "обратный полулунный эпсилон"] # 0x3f6 (en: 'reversed epsilon') - - "А-Я": # 0x410 - 0x42f - - test: - if: "$CapitalLetters_Beep" - then: - - audio: - value: "beep.mp4" - replace: [] - - test: - if: "$CapitalLetters_UseWord" - then_test: - if: "$SpeechOverrides_CapitalLetters = ''" - then_test: - if: "$Impairment = 'Blindness'" - then: [t: "пропусков"] # (en: 'cap', google translation) - else: [x: "$SpeechOverrides_CapitalLetters"] - - pitch: - value: "$CapitalLetters_Pitch" - replace: [spell: "translate('.', 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', 'абвгдежзийклмнопрстуфхцчшщъыьэюя')"] - - "а": [t: "а"] # 0x430 (en: 'a', google translation) - - "б": [t: "быть"] # 0x431 (en: 'be', google translation) - - "в": [t: "вежливый"] # 0x432 (en: 've', google translation) - - "г": [t: "ghe"] # 0x433 (google translation) - - "д": [t: "де"] # 0x434 (en: 'de', google translation) - - "е": [t: "те"] # 0x435 (en: 'ie', google translation) - - "ж": [t: "же"] # 0x436 (en: 'zhe', google translation) - - "з": [t: "ze"] # 0x437 (google translation) - - "и": [t: "и"] # 0x438 (en: 'i', google translation) - - "й": [t: "короткий я"] # 0x439 (en: 'short i', google translation) - - "к": [t: "категория"] # 0x43a (en: 'ka', google translation) - - "л": [t: "эль"] # 0x43b (en: 'el', google translation) - - "м": [t: "эм"] # 0x43c (en: 'em', google translation) - - "н": [t: "поступка"] # 0x43d (en: 'en', google translation) - - "о": [t: "о"] # 0x43e (en: 'o', google translation) - - "п": [t: "финиш"] # 0x43f (en: 'pe', google translation) - - "р": [t: "эр"] # 0x440 (en: 'er', google translation) - - "с": [t: "эс"] # 0x441 (en: 'es', google translation) - - "т": [t: "театр"] # 0x442 (en: 'te', google translation) - - "у": [t: "у"] # 0x443 (en: 'u', google translation) - - "ф": [t: "эф"] # 0x444 (en: 'ef', google translation) - - "х": [t: "ха"] # 0x445 (en: 'ha', google translation) - - "ц": [t: "нога"] # 0x446 (en: 'tse', google translation) - - "ч": [t: "костюм"] # 0x447 (en: 'che', google translation) - - "ш": [t: "ша"] # 0x448 (en: 'sha', google translation) - - "щ": [t: "шша"] # 0x449 (en: 'shcha', google translation) - - "ъ": [t: "жесткий знак"] # 0x44a (en: 'hard sign', google translation) - - "ы": [t: "еру"] # 0x44b (en: 'yeru', google translation) - - "ь": [t: "мягкий знак"] # 0x44c (en: 'soft sign', google translation) - - "э": [t: "э"] # 0x44d (en: 'e', google translation) - - "ю": [t: "ю"] # 0x44e (en: 'yu', google translation) - - "я": [t: "я"] # 0x44f (en: 'ya', google translation) - - "؆": [t: "арабский корень куба"] # 0x606 (en: 'Arabic-Indic cube root', google translation) - - "؇": [t: "арабский индикатор четвертый корень"] # 0x607 (en: 'Arabic-Indic fourth root', google translation) - - "؈": [t: "арабский рэй"] # 0x608 (en: 'Arabic ray', google translation) - - "‐": [t: "дефис"] # 0x2010 (en: 'hyphen', google translation) - - "‑": [t: "дефис"] # 0x2011 (en: 'hyphen', google translation) - - "‒": [t: "фигура dash"] # 0x2012 (en: 'figure dash', google translation) - - "–": [t: "en dash"] # 0x2013 (google translation) - - "—": [t: "em dash"] # 0x2014 (google translation) - - "―": [t: "горизонтальный батончик"] # 0x2015 (en: 'horizontal bar', google translation) - - "‖": [t: "двойная вертикальная линия"] # 0x2016 (en: 'double vertical line', google translation) - - "†": [t: "кинжал"] # 0x2020 (en: 'dagger', google translation) - - "‡": [t: "двойной кинжал"] # 0x2021 (en: 'double dagger', google translation) - - - " - ": [t: "‡"] # 0x2000 - 0x2007 (en: ' ', google translation) - - - "•": # 0x2022 - - test: - if: "@data-chem-formula-op" - then: [t: "точка"] # (en: 'dot', google translation) - else: [t: "пуля"] # (en: 'bullet', google translation) - - - "…": # 0x2026 - test: - if: - - "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_Ellipses = 'Auto' or" - # must be ClearSpeak and $ClearSpeak_Ellipses = 'AndSoOn' - # speak '…' as 'and so on...' unless expr starts with '…' - - "../*[1][.='…']" - then: [t: "точка точка точка"] # (en: 'dot dot dot', google translation) - else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' - if: "count(following-sibling::*) = 0" - then: [t: "и так далее"] # (en: 'and so on', google translation) - else: [t: "и так далее"] # (en: 'and so on up to', google translation) - - - "‰": [t: "за мил"] # 0x2030 (en: 'per mille', google translation) - - "‱": [t: "за десять тысяч"] # 0x2031 (en: 'per ten thousand', google translation) - - "′": [t: "штрих"] # 0x2032 (en: 'prime') - - "″": [t: "двойной штрих"] # 0x2033 (en: 'double prime') - - "‴": [t: "тройной штрих"] # 0x2034 (en: 'triple prime') - - "‵": [t: "обратный штрих"] # 0x2035 (en: 'reversed prime') - - "‶": [t: "обратный двойной штрих"] # 0x2036 (en: 'reversed double prime') - - "‷": [t: "обратный тройной штрих"] # 0x2037 (en: 'reversed triple prime', google translation) - - "‸": [t: "в"] # 0x2038 (en: 'to the', google translation) - - "‹": [t: "одиночный левый угол угла цитата"] # 0x2039 (en: 'single left pointing angle quote mark', google translation) - - "›": [t: "одиночный правый угол цитата цитата"] # 0x203a (en: 'single right pointing angle quote mark', google translation) - - "‼": [t: "двойной фактор"] # 0x203c (en: 'double factorial', google translation) - - "⁄": [t: "разделен на"] # 0x2044 (en: 'divided by', google translation) - - "⁅": [t: "левый квадратный кронштейн с перо"] # 0x2045 (en: 'left square bracket with quill', google translation) - - "⁆": [t: "правый квадратный кронштейн с перо"] # 0x2046 (en: 'right square bracket with quill', google translation) - - "※": [t: "справочная марка"] # 0x203b (en: 'reference mark', google translation) - - "‿": [t: "под галстуком"] # 0x203F (en: 'under tie', google translation) - - "⁀": [t: "галстук"] # 0x2040 (en: 'tie', google translation) - - "⁎": [t: "низкий звездочка"] # 0x204e (en: 'low asterisk', google translation) - - "⁏": [t: "обратная точка с запятой"] # 0x204f (en: 'reversed semicolon', google translation) - - "⁐": [t: "закрыть"] # 0x2050 (en: 'close up', google translation) - - "⁑": [t: "две вертикальные звездочки"] # 0x2051 (en: 'two vertical asterisks', google translation) - - "⁒": [t: "коммерческий минус знак"] # 0x2052 (en: 'commercial minus sign', google translation) - - "⁗": [t: "четырехкратный prime"] # 0x2057 (en: 'quadruple prime', google translation) - - "⁠": [t: ""] # 0x2060 - - "⁰": [t: "к нулевой степени"] # 0x2070 (en: 'to the zeroth power', google translation) - - "ⁱ": [t: "к силе эйхт"] # 0x2071 (en: 'to the eihth power', google translation) - - "⁴": [t: "к четвёртой степени"] # 0x2074 (en: 'to the fourth power', google translation) - - "⁵": [t: "к пятой степени"] # 0x2075 (en: 'to the fifth power', google translation) - - "⁶": [t: "к шестой степени"] # 0x2076 (en: 'to the sixth power', google translation) - - "⁷": [t: "к седьмой степении"] # 0x2077 (en: 'to the seventh power', google translation) - - "⁸": [t: "к восьмой степени"] # 0x2078 (en: 'to the eighth power', google translation) - - "⁹": [t: "к девятой степени"] # 0x2079 (en: 'to the ninth power', google translation) - - "⁺": [t: "superscript plus sign"] # 0x207a (google translation) - - "⁻": [t: "superscript минус"] # 0x207b (en: 'superscript minus', google translation) - - "⁼": [t: "superscript equals sign"] # 0x207c (google translation) - - "⁽": [t: "superscript left sakesisetise"] # 0x207d (en: 'superscript left parenthesis', google translation) - - "⁾": [t: "право скобок"] # 0x207e (en: 'superscript right parenthesis', google translation) - - "ⁿ": [t: "к власти энн"] # 0x207f (en: 'to the ennth power', google translation) - - "₀": [t: "суб -ноль"] # 0x2080 (en: 'sub zero', google translation) - - "₁": [t: "подставка"] # 0x2081 (en: 'sub one', google translation) - - "₂": [t: "подставка два"] # 0x2082 (en: 'sub two', google translation) - - "₃": [t: "подставка три"] # 0x2083 (en: 'sub three', google translation) - - "₄": [t: "подставка четверка"] # 0x2084 (en: 'sub four', google translation) - - "₅": [t: "подставка пяти"] # 0x2085 (en: 'sub five', google translation) - - "₆": [t: "sub six"] # 0x2086 (google translation) - - "₇": [t: "sub seven"] # 0x2087 (google translation) - - "₈": [t: "саб"] # 0x2088 (en: 'sub eight', google translation) - - "₉": [t: "sub девять"] # 0x2089 (en: 'sub nine', google translation) - - "₊": [t: "подписк плюс знак"] # 0x208a (en: 'subscript plus sign', google translation) - - "₋": [t: "подписка минус знак"] # 0x208b (en: 'subscript minus sign', google translation) - - "₌": [t: "подписк равна значению"] # 0x208c (en: 'subscript equals sign', google translation) - - "₍": [t: "подписк остался в скобках"] # 0x208d (en: 'subscript left parenthesis', google translation) - - "₎": [t: "подписк право с клеса"] # 0x208e (en: 'subscript right parenthesis', google translation) - - "ₐ": [t: "подсуд а"] # 0x2090 (en: 'sub A', google translation) - - "ₑ": [t: "саб"] # 0x2091 (en: 'sub E', google translation) - - "ₒ": [t: "саб"] # 0x2092 (en: 'sub O', google translation) - - "ₓ": [t: "суб"] # 0x2093 (en: 'sub X', google translation) - - "ₕ": [t: "сабл"] # 0x2095 (en: 'sub H', google translation) - - "ₖ": [t: "суб"] # 0x2096 (en: 'sub K', google translation) - - "ₗ": [t: "сабл"] # 0x2097 (en: 'sub L', google translation) - - "ₘ": [t: "саб м"] # 0x2098 (en: 'sub M', google translation) - - "ₙ": [t: "суб"] # 0x2099 (en: 'sub N', google translation) - - "ₚ": [t: "суб -п"] # 0x209a (en: 'sub P', google translation) - - "ₛ": [t: "sub s"] # 0x209b (en: 'sub S', google translation) - - "ₜ": [t: "суб т"] # 0x209c (en: 'sub T', google translation) - - "₠": [t: "европейская текущая единица"] # 0x20a0 (en: 'european currenty units', google translation) - - "₡": [t: "колонс"] # 0x20a1 (en: 'colons', google translation) - - "₢": [t: "крузейро"] # 0x20a2 (en: 'cruzeiro', google translation) - - "₣": [t: "франк"] # 0x20a3 (en: 'franc', google translation) - - "₤": [t: "лира"] # 0x20a4 (en: 'lira', google translation) - - "₥": [t: "мельницы"] # 0x20a5 (en: 'mills', google translation) - - "₦": [t: "найра"] # 0x20a6 (en: 'naira', google translation) - - "₧": [t: "пезета"] # 0x20a7 (en: 'peseta', google translation) - - "₨": [t: "рупии"] # 0x20a8 (en: 'rupees', google translation) - - "₩": [t: "выиграл"] # 0x20a9 (en: 'won', google translation) - - "₪": [t: "новые шекели"] # 0x20aa (en: 'new sheqels', google translation) - - "₫": [t: "донг"] # 0x20ab (en: 'dong', google translation) - - "€": [t: "евро"] # 0x20ac (en: 'euros', google translation) - - "₭": [t: "кип"] # 0x20ad (en: 'kip', google translation) - - "₮": [t: "тугрик"] # 0x20ae (en: 'tugrik', google translation) - - "₯": [t: "драхма"] # 0x20af (en: 'drachma', google translation) - - "₰": [t: "немецкие копейки"] # 0x20b0 (en: 'german pennies', google translation) - - "₱": [t: "песо"] # 0x20b1 (en: 'pesos', google translation) - - "₲": [t: "гуаранис"] # 0x20b2 (en: 'guaranis', google translation) - - "₳": [t: "австралии"] # 0x20b3 (en: 'australs', google translation) - - "₴": [t: "гривния"] # 0x20b4 (en: 'hryvnias', google translation) - - "₵": [t: "седис"] # 0x20b5 (en: 'cedis', google translation) - - "₶": [t: "ливр турнуа"] # 0x20b6 (en: 'livre tournois', google translation) - - "₷": [t: "spesmilos"] # 0x20b7 (google translation) - - "₸": [t: "тенги"] # 0x20b8 (en: 'tenges', google translation) - - "₹": [t: "индийские рупии"] # 0x20b9 (en: 'indian rupees', google translation) - - "₺": [t: "турецкие лирас"] # 0x20ba (en: 'turkish liras', google translation) - - "⃐": [t: "левый гарпун над украшением"] # 0x20d0 (en: 'left harpoon above embellishment', google translation) - - "⃑": [t: "правый гарпун над украшением"] # 0x20d1 (en: 'right harpoon above embellishment', google translation) - - "⃒": [t: "длинная вертикальная линия наложения"] # 0x20d2 (en: 'long vertical line overlay embellishment', google translation) - - "⃓": [t: "короткая вертикальная линия наложения"] # 0x20d3 (en: 'short vertical line overlay embellishment', google translation) - - "⃔": [t: "стрелка против часовой стрелки над украшением"] # 0x20d4 (en: 'anticlockwise arrow above embellishment', google translation) - - "⃕": [t: "стрелка по часовой стрелке над украшением"] # 0x20d5 (en: 'clockwise arrow above embellishment', google translation) - - "⃖": [t: "левая стрелка над украшением"] # 0x20d6 (en: 'left arrow above embellishment', google translation) - - "⃗": [t: "правая стрелка над украшением"] # 0x20d7 (en: 'right arrow above embellishment', google translation) - - "⃘": [t: "кольцо наложения украшения"] # 0x20d8 (en: 'ring overlay embellishment', google translation) - - "⃙": [t: "по часовой стрелке приукрашивание"] # 0x20d9 (en: 'clockwise ring overlay embellishment', google translation) - - "⃚": [t: "окружающееся в борту с часовой стрельбой"] # 0x20da (en: 'anticlockwise ring overlay embellishment', google translation) - - "⃛": [t: "тройная точка"] # 0x20db (en: 'triple dot', google translation) - - "⃜": [t: "четырехкратная точка"] # 0x20dc (en: 'quadruple dot', google translation) - - "⃝": [t: "прилагая круговой украшение"] # 0x20dd (en: 'enclosing circle embellishment', google translation) - - "⃞": [t: "прилагая квадратные украшения"] # 0x20de (en: 'enclosing square embellishment', google translation) - - "⃟": [t: "прилагая алмазные украшения"] # 0x20df (en: 'enclosing diamond embellishment', google translation) - - "⃠": [t: "прилагая круговую обратную скользу"] # 0x20e0 (en: 'enclosing circle backslash embellishment', google translation) - - "⃡": [t: "стрелка влево справа над украшением"] # 0x20e1 (en: 'left right arrow above embellishment', google translation) - - "⃢": [t: "прилагая в кражу экрана"] # 0x20e2 (en: 'enclosing screen embellishment', google translation) - - "⃣": [t: "приложение украшения keyuppercase"] # 0x20e3 (en: 'enclosing keycap embellishment', google translation) - - "⃤": [t: "прилагаясь вверх, указывающее треугольное украшение"] # 0x20e4 (en: 'enclosing upward pointing triangle embellishment', google translation) - - "⃥": [t: "обратное наложение solidus"] # 0x20e5 (en: 'reverse solidus overlay embellishment', google translation) - - "⃦": [t: "двойное украшение инсульта"] # 0x20e6 (en: 'double verticle stroke embellishment', google translation) - - "⃧": [t: "аннуитетный символ украшения"] # 0x20e7 (en: 'annuity symbol embellishment', google translation) - - "⃨": [t: "тройной недостаточный родовой"] # 0x20e8 (en: 'triple underdot', google translation) - - "⃩": [t: "широкий мост над украшением"] # 0x20e9 (en: 'wide bridge above embellishment', google translation) - - "⃪": [t: "слева стрелка наложения"] # 0x20ea (en: 'leftwards arrow overlay embellishment', google translation) - - "⃫": [t: "длинное двойное наложение solidus"] # 0x20eb (en: 'long double solidus overlay embellishment', google translation) - - "⃬": [t: "прямо гарпун с барб вниз по украшению"] # 0x20ec (en: 'rightwards harpoon with barb downwards embellishment', google translation) - - "⃭": [t: "левый гарпун с барб вниз по украшению"] # 0x20ed (en: 'leftwards harpoon with barb downwards embellishment', google translation) - - "⃮": [t: "левая стрелка ниже украшения"] # 0x20ee (en: 'left arrow below embellishment', google translation) - - "⃯": [t: "правая стрелка ниже украшения"] # 0x20ef (en: 'right arrow below embellishment', google translation) - - "⃰": [t: "звездочка над украшением"] # 0x20f0 (en: 'asterisk above embellishment', google translation) - - "℄": [t: "символ центральной линии"] # 0x2104 (en: 'center line symbol', google translation) - - "℅": [t: "заботиться о"] # 0x2105 (en: 'care of', google translation) - - "℆": [t: "када уна"] # 0x2106 (en: 'cada una', google translation) - - "ℇ": [t: "постоянная эйлера"] # 0x2107 (en: 'euler's constant', google translation) - - "℈": [t: "смешивание"] # 0x2108 (en: 'scruples', google translation) - - "℉": [t: "степени фаренгейт"] # 0x2109 (en: 'degrees fahrenheit', google translation) - - "ℊ": [t: "сценарий g"] # 0x210a (en: 'script g', google translation) - - "ℌℑℨℭ": # 0x210c, 0x2111, 0x2128, 0x212d - - t: "фрактур" # (en: 'fraktur', google translation) - - spell: "translate('.', 'ℌℑℨℭ', 'HIZC')" - - - "ℍℙℾℿ": # 0x210d, 0x2119, 0x213e, 0x213f - - t: "двойной удар" # (en: 'double struck', google translation) - - spell: "translate('.', 'ℍℙℾℿ', 'HPΓΠ')" - - - "ℎ": [t: "планка постоянная"] # 0x210e (en: 'planck constant', google translation) - - "ℏ": [t: "h бар"] # 0x210f (en: 'h bar', google translation) - - - "ℐℒ℘ℬℰℱℳ": # 0x2110, 0x2112, 0x2118, 0x2130, 0x2131, 0x2133 - - t: "сценарий" # (en: 'script', google translation) - - spell: "translate('.', 'ℐℒ℘ℬℰℱℳ', 'ILPBEFM')" - - - "ℓ": [t: "скрипт л"] # 0x2113 (en: 'script l', google translation) - - "℔": [t: "фунт"] # 0x2114 (en: 'pounds', google translation) - - "№": [t: "число"] # 0x2116 (en: 'number', google translation) - - "℥": [t: "унции"] # 0x2125 (en: 'ounces', google translation) - - "Ω": [t: "ом"] # 0x2126 (en: 'ohms', google translation) - - "℧": [t: "mhos"] # 0x2127 (google translation) - - "℩": [t: "повернута йота"] # 0x2129 (en: 'turned iota', google translation) - - "K": [t: "кельвин"] # 0x212a (en: 'kelvin', google translation) - - "Å": [t: "ангстры"] # 0x212b (en: 'angstroms', google translation) - - "ℯ": [t: "сценарий e"] # 0x212f (en: 'script e', google translation) - - # coalesced some chars that use cap letters - - "Ⅎ℺⅁⅂⅃⅄": # 0x2132, 0x213a, 0x2141, 0x2142, 0x2143, 0x2144 - - test: - - if: "'.' = '℺'" - then: [t: "вращается"] # (en: 'rotated', google translation) - - else_if: "'.' = 'Ⅎ'" - then: [t: "перевернутый"] # (en: 'turned', google translation) - - else_if: "'.' = '⅃'" - then: [t: "обратный безэриф"] # (en: 'reversed sans-serif', google translation) - else: [t: "повернулся без зарисования"] # (en: 'turned sans-serif', google translation) - - spell: "translate('.', 'Ⅎ℺⅁⅂⅃⅄', 'FQGLLY')" - - - "ℴ": [t: "сценарий o"] # 0x2134 (en: 'script o', google translation) - - "ℵ": [t: "первый трансфинит кардинал"] # 0x2135 (en: 'first transfinite cardinal', google translation) - - "ℶ": [t: "второй трансфинит кардинал"] # 0x2136 (en: 'second transfinite cardinal', google translation) - - "ℷ": [t: "третий трансфинит кардинал"] # 0x2137 (en: 'third transfinite cardinal', google translation) - - "ℸ": [t: "четвертый трансфинит кардинал"] # 0x2138 (en: 'fourth transfinite cardinal', google translation) - - "ℼ": [t: "двойной удар пи"] # 0x213c (en: 'double struck pi', google translation) - - "ℽ": [t: "двойной удар гамма"] # 0x213d (en: 'double struck gamma', google translation) - - "⅀": [t: "двойное поражение n-ary summation"] # 0x2140 (en: 'double struck n-ary summation', google translation) - - "⅋": [t: "повернул амперс и"] # 0x214b (en: 'turned ampersand', google translation) - - "⅌": [t: "перемещение"] # 0x214c (en: 'per', google translation) - - "ⅎ": [t: "повернулся ф"] # 0x214e (en: 'turned F', google translation) - - "¼": [t: "одна четверть"] # 0x00bc (en: 'one quarter', google translation) - - "½": [t: "половина"] # 0x00bd (en: 'one half', google translation) - - "¾": [t: "три четверти"] # 0x00be (en: 'three quarters', google translation) - - "⅐": [t: "один седьмой"] # 0x2150 (en: 'one seventh', google translation) - - "⅑": [t: "один девятый"] # 0x2151 (en: 'one ninth', google translation) - - "⅒": [t: "одна десятая"] # 0x2152 (en: 'one tenth', google translation) - - "⅓": [t: "треть"] # 0x2153 (en: 'one third', google translation) - - "⅔": [t: "две трети"] # 0x2154 (en: 'two thirds', google translation) - - "⅕": [t: "один пятый"] # 0x2155 (en: 'one fifth', google translation) - - "⅖": [t: "два пятых"] # 0x2156 (en: 'two fifths', google translation) - - "⅗": [t: "три пятых"] # 0x2157 (en: 'three fifths', google translation) - - "⅘": [t: "четыре пятых"] # 0x2158 (en: 'four fifths', google translation) - - "⅙": [t: "один шестой"] # 0x2159 (en: 'one sixth', google translation) - - "⅚": [t: "пять шестых"] # 0x215a (en: 'five sixths', google translation) - - "⅛": [t: "один ат"] # 0x215b (en: 'one eighth', google translation) - - "⅜": [t: "три афи"] # 0x215c (en: 'three eighths', google translation) - - "⅝": [t: "пять ат"] # 0x215d (en: 'five eighths', google translation) - - "⅞": [t: "семь ат"] # 0x215e (en: 'seven eighths', google translation) - - "⅟": [t: "один"] # 0x215f (en: 'one over', google translation) - - "Ⅰ": [t: "Ⅰ"] # 0x2160 (en: 'I', google translation) - - "Ⅱ": [t: "я i"] # 0x2161 (en: 'I I', google translation) - - "Ⅲ": [t: "я я я"] # 0x2162 (en: 'I I I', google translation) - - "Ⅳ": [t: "я v"] # 0x2163 (en: 'I V', google translation) - - "Ⅴ": [t: "Ⅴ"] # 0x2164 (en: 'V', google translation) - - "Ⅵ": [t: "v i"] # 0x2165 (en: 'V I', google translation) - - "Ⅶ": [t: "v i i"] # 0x2166 (en: 'V I I', google translation) - - "Ⅷ": [t: "v i i i"] # 0x2167 (en: 'V I I I', google translation) - - "Ⅸ": [t: "я x"] # 0x2168 (en: 'I X', google translation) - - "Ⅹ": [t: "Ⅹ"] # 0x2169 (en: 'X', google translation) - - "Ⅺ": [t: "x i"] # 0x216a (en: 'X I', google translation) - - "Ⅻ": [t: "x i i"] # 0x216b (en: 'X I I', google translation) - - "Ⅼ": [t: "Ⅼ"] # 0x216c (en: 'L', google translation) - - "Ⅽ": [t: "Ⅽ"] # 0x216d (en: 'C', google translation) - - "Ⅾ": [t: "Ⅾ"] # 0x216e (en: 'D', google translation) - - "Ⅿ": [t: "Ⅿ"] # 0x216f (en: 'M', google translation) - - "ⅰ": [t: "ⅰ"] # 0x2170 (en: 'I', google translation) - - "ⅱ": [t: "я i"] # 0x2171 (en: 'I I', google translation) - - "ⅲ": [t: "я я я"] # 0x2172 (en: 'I I I', google translation) - - "ⅳ": [t: "я v"] # 0x2173 (en: 'I V', google translation) - - "ⅴ": [t: "ⅴ"] # 0x2174 (en: 'V', google translation) - - "ⅵ": [t: "v i"] # 0x2175 (en: 'V I', google translation) - - "ⅶ": [t: "v i i"] # 0x2176 (en: 'V I I', google translation) - - "ⅷ": [t: "v i i i"] # 0x2177 (en: 'V I I I', google translation) - - "ⅸ": [t: "я x"] # 0x2178 (en: 'I X', google translation) - - "ⅹ": [t: "ⅹ"] # 0x2179 (en: 'X', google translation) - - "ⅺ": [t: "x i"] # 0x217a (en: 'X I', google translation) - - "ⅻ": [t: "x i i"] # 0x217b (en: 'X I I', google translation) - - "ⅼ": [t: "ⅼ"] # 0x217c (en: 'L', google translation) - - "ⅽ": [t: "ⅽ"] # 0x217d (en: 'C', google translation) - - "ⅾ": [t: "ⅾ"] # 0x217e (en: 'D', google translation) - - "ⅿ": [t: "ⅿ"] # 0x217f (en: 'M', google translation) - - "↉": [t: "нулевые трети"] # 0x2189 (en: 'zero thirds', google translation) - - "←": [t: "стрелка влево"] # 0x2190 (en: 'leftwards arrow', google translation) - - "↑": [t: "вверх стрелой"] # 0x2191 (en: 'upwards arrow', google translation) - - "→": [t: "стрелка вправо"] # 0x2192 (en: 'rightwards arrow', google translation) - - "↓": [t: "вниз стрелы"] # 0x2193 (en: 'downwards arrow', google translation) - - "↔": [t: "левая стрелка справа"] # 0x2194 (en: 'left right arrow', google translation) - - "↕": [t: "вверх вниз стрел"] # 0x2195 (en: 'up down arrow', google translation) - - "↖": [t: "северо -западный стрелка"] # 0x2196 (en: 'north west arrow', google translation) - - "↗": # 0x2197 - - test: - if: "ancestor::*[2][self::m:limit]" - then: [t: "подходы снизу"] # (en: 'approaches from below', google translation) - else: [t: "северо -восточный стрела"] # (en: 'north east arrow', google translation) - - - "↘": # 0x2198 - - test: - if: "ancestor::*[2][self::m:limit]" - then: [t: "подходы сверху"] # (en: 'approaches from above', google translation) - else: [t: "юго -восточная стрела"] # (en: 'south east arrow', google translation) - - - "↙": [t: "юго -западный стрелка"] # 0x2199 (en: 'south west arrow', google translation) - - "↚": [t: "стрелка влево с ходом"] # 0x219a (en: 'leftwards arrow with stroke', google translation) - - "↛": [t: "стрелка вправо с ударом"] # 0x219b (en: 'rightwards arrow with stroke', google translation) - - "↜": [t: "левая волновая стрелка"] # 0x219c (en: 'leftwards wave arrow', google translation) - - "↝": [t: "правая волновая стрелка"] # 0x219d (en: 'rightwards wave arrow', google translation) - - "↞": [t: "слева две головы стрелы"] # 0x219e (en: 'leftwards two headed arrow', google translation) - - "↟": [t: "вверху две головные стрелы"] # 0x219f (en: 'upwards two headed arrow', google translation) - - "↠": [t: "права две головные стрелы"] # 0x21a0 (en: 'rightwards two headed arrow', google translation) - - "↡": [t: "вниз по двум головным стрелкам"] # 0x21a1 (en: 'downwards two headed arrow', google translation) - - "↢": [t: "стрелка влево с хвостом"] # 0x21a2 (en: 'leftwards arrow with tail', google translation) - - "↣": [t: "стрелка вправо с хвостом"] # 0x21a3 (en: 'rightwards arrow with tail', google translation) - - "↤": [t: "стрелка влево из бара"] # 0x21a4 (en: 'leftwards arrow from bar', google translation) - - "↥": [t: "стрелка вверх от бара"] # 0x21a5 (en: 'upwards arrow from bar', google translation) - - "↦": [t: "стрелка вправо из бара"] # 0x21a6 (en: 'rightwards arrow from bar', google translation) - - "↧": [t: "стрелка вниз от бара"] # 0x21a7 (en: 'downwards arrow from bar', google translation) - - "↨": [t: "вверх вниз стрел с базой"] # 0x21a8 (en: 'up down arrow with base', google translation) - - "↩": [t: "стрелка влево с крючком"] # 0x21a9 (en: 'leftwards arrow with hook', google translation) - - "↪": [t: "стрелка вправо с крючком"] # 0x21aa (en: 'rightwards arrow with hook', google translation) - - "↫": [t: "стрелка влево с петлей"] # 0x21ab (en: 'leftwards arrow with loop', google translation) - - "↬": [t: "стрелка вправо с петлей"] # 0x21ac (en: 'rightwards arrow with loop', google translation) - - "↭": [t: "левая стрелка правой волны"] # 0x21ad (en: 'left right wave arrow', google translation) - - "↮": [t: "левая стрелка вправо с ударом"] # 0x21ae (en: 'left right arrow with stroke', google translation) - - "↯": [t: "вниз zigzag arrow"] # 0x21af (en: 'downwards zigzag arrow', google translation) - - "↰": [t: "стрелка вверх с наконечником влево"] # 0x21b0 (en: 'upwards arrow with tip leftwards', google translation) - - "↱": [t: "стрелка вверх с наконечником вправо"] # 0x21b1 (en: 'upwards arrow with tip rightwards', google translation) - - "↲": [t: "стрелка вниз с наконечником слева"] # 0x21b2 (en: 'downwards arrow with tip leftwards', google translation) - - "↳": [t: "стрелка вниз с наконечником вправо"] # 0x21b3 (en: 'downwards arrow with tip rightwards', google translation) - - "↴": [t: "стрелка вправо с углом вниз"] # 0x21b4 (en: 'rightwards arrow with corner downwards', google translation) - - "↵": [t: "стрелка вниз с углом налево"] # 0x21b5 (en: 'downwards arrow with corner leftwards', google translation) - - "↶": [t: "стрелка в верхней части часовой стрелки"] # 0x21b6 (en: 'anticlockwise top semicircle arrow', google translation) - - "↷": [t: "верхняя стрелка по часовой стрелке"] # 0x21b7 (en: 'clockwise top semicircle arrow', google translation) - - "↸": [t: "северо -западный стрела до длинного бара"] # 0x21b8 (en: 'north west arrow to long bar', google translation) - - "↹": [t: "стрелка слева, чтобы пройти вправо, стрелу в бар"] # 0x21b9 (en: 'leftwards arrow to bar over rightwards arrow to bar', google translation) - - "↺": [t: "стрелка с открытым кругом"] # 0x21ba (en: 'anticlockwise open circle arrow', google translation) - - "↻": [t: "по часовой стрелке открытый круг стрелы"] # 0x21bb (en: 'clockwise open circle arrow', google translation) - - "↼": [t: "оставил гарпун вверх"] # 0x21bc (en: 'left harpoon up', google translation) - - "↽": [t: "оставил гарпун вниз"] # 0x21bd (en: 'left harpoon down', google translation) - - "↾": [t: "вверх по гарпуне правильно"] # 0x21be (en: 'up harpoon right', google translation) - - "↿": [t: "вверх по гарпуне ушел"] # 0x21bf (en: 'up harpoon left', google translation) - - "⇀": [t: "правый гарпун вверх"] # 0x21c0 (en: 'right harpoon up', google translation) - - "⇁": [t: "правый гарпун вниз"] # 0x21c1 (en: 'right harpoon down', google translation) - - "⇂": [t: "вниз по гарпуне справа"] # 0x21c2 (en: 'down harpoon right', google translation) - - "⇃": [t: "вниз по гарпуне ушел"] # 0x21c3 (en: 'down harpoon left', google translation) - - "⇄": [t: "стрелка вправо над стрелкой влево"] # 0x21c4 (en: 'rightwards arrow over leftwards arrow', google translation) - - "⇅": [t: "вверх стрелка слева от стрелы вниз"] # 0x21c5 (en: 'upwards arrow leftwards of downwards arrow', google translation) - - "⇆": [t: "стрелка слева направо"] # 0x21c6 (en: 'leftwards arrow over rightwards arrow', google translation) - - "⇇": [t: "левые парные стрелы"] # 0x21c7 (en: 'leftwards paired arrows', google translation) - - "⇈": [t: "вверх парные стрелы"] # 0x21c8 (en: 'upwards paired arrows', google translation) - - "⇉": [t: "правые парные стрелы"] # 0x21c9 (en: 'rightwards paired arrows', google translation) - - "⇊": [t: "вниз в парных стрелках"] # 0x21ca (en: 'downwards paired arrows', google translation) - - "⇋": [t: "левый гарпун над правым гарпуном"] # 0x21cb (en: 'left harpoon over right harpoon', google translation) - - "⇌": [t: "правый гарпун над левым гарпуном"] # 0x21cc (en: 'right harpoon over left harpoon', google translation) + - "ʷ": [t: "верхний индекс w"] # 0x2b7 (en: 'modifier small w', google translation) + - "ʸ": [t: "верхний индекс y"] # 0x2b8 (en: 'modifier small y', google translation) + - "ʹ": [t: "штрих"] # 0x2b9 (en: 'modifier prime', google translation) + - "ʺ": [t: "двойной штрих"] # 0x2ba (en: 'modifier double prime', google translation) + - "ʻ": [t: "перевёрнутая запятая"] # 0x2bb (en: 'modifier turned comma', google translation) + - "ʼ": [t: "апостроф"] # 0x2bc (en: 'modifier apostrophe', google translation) + - "ʽ": [t: "перевёрнутый апостроф"] # 0x2bd (en: 'modifier reversed comma', google translation) + - "ʾ": [t: "правое полукольцо"] # 0x2be (en: 'modifier right half ring', google translation) + - "ʿ": [t: "левое полукольцо"] # 0x2bf (en: 'modifier left half ring', google translation) + - "ˀ": [t: "гортанная смычка"] # 0x2c0 (en: 'modifier glottal stop', google translation) + - "ˁ": [t: "перевёрнутая гортанная смычка"] # 0x2c1 (en: 'modifier reversed glottal stop', google translation) + - "˂": [t: "левый наконечник стрелки"] # 0x2c2 (en: 'modifier left arrowhead', google translation) + - "˃": [t: "правый наконечник стрелки"] # 0x2c3 (en: 'modifier right arrowhead', google translation) + - "˄": [t: "верхний наконечник стрелки"] # 0x2c4 (en: 'modifier up arrowhead', google translation) + - "˅": [t: "нижний наконечник стрелки"] # 0x2c5 (en: 'modifier down arrowhead', google translation) + - "ˆ": [t: "циркумфлекс"] # 0x2c6 (en: 'modifier circumflex accent', google translation) + - "ˇ": [t: "гачек"] # 0x2c7 (en: 'check', google translation) + - "ˈ": [t: "вертикальная черта"] # 0x2c8 (en: 'modifier vertical line', google translation) +en: 'right harpoon over left harpoon', google translation) - "⇍": [t: "слева двойная стрелка с ходом"] # 0x21cd (en: 'leftwards double arrow with stroke', google translation) - "⇎": [t: "левая правая двойная стрелка с ходом"] # 0x21ce (en: 'left right double arrow with stroke', google translation) - "⇏": [t: "права двойная стрелка с ходом"] # 0x21cf (en: 'rightwards double arrow with stroke', google translation) @@ -3644,3 +3097,544 @@ - "↓": [t: "стрелка вниз"] # 0xffec (en: 'down arrow', google translation) - "": [t: "неизвестный или отсутствующий объект"] # 0xfffc (en: 'unknown or missing object', google translation) - "�": [t: "неизвестный или отсутствующий символ"] # 0xfffd (en: 'unknown or missing character', google translation) +- "ˉ": [t: "макрон"] # 0x2c9 (en: 'modifier macron') +- "ˊ": [t: "акут"] # 0x2ca (en: 'modifier acute accent') +- "ˋ": [t: "гравис"] # 0x2cb (en: 'modifier grave accent') +- "ˌ": [t: "нижняя вертикальная черта"] # 0x2cc (en: 'modifier low vertical line') +- "ˍ": [t: "нижний макрон"] # 0x2cd (en: 'modifier low macron') +- "ˎ": [t: "нижний гравис"] # 0x2ce (en: 'modifier low grave accent') +- "ˏ": [t: "нижний акут"] # 0x2cf (en: 'modifier low acute accent') +- "ː": [t: "знак долготы"] # 0x2d0 (en: 'modifier triangular colon') +- "ˑ": [t: "половинный знак долготы"] # 0x2d1 (en: 'modifier half triangular colon') +- "˒": [t: "центрированное правое полукольцо"] # 0x2d2 (en: 'modifier centered right half ring') +- "˓": [t: "центрированное левое полукольцо"] # 0x2d3 (en: 'modifier centered left half ring') +- "˔": [t: "верхний упор"] # 0x2d4 (en: 'modifier up tack') +- "˕": [t: "нижний упор"] # 0x2d5 (en: 'modifier down tack') +- "˖": [t: "верхний индекс плюс"] # 0x2d6 (en: 'modifier plus sign') +- "˗": [t: "верхний индекс минус"] # 0x2d7 (en: 'modifier minus sign') +- "˘": [t: "бреве"] # 0x2d8 (en: 'breve') +- "˙": [t: "точка сверху"] # 0x2d9 (en: 'dot') +- "˚": [t: "кольцо сверху"] # 0x2da (en: 'ring above') +- "˛": [t: "огонек"] # 0x2db (en: 'ogonek') +- "˜": [t: "малая тильда"] # 0x2dc (en: 'small tilde') +- "˝": [t: "двойной акут"] # 0x2dd (en: 'double acute accent') +- "˞": [t: "ротический крюк"] # 0x2de (en: 'modifier rhotic hook') +- "˟": [t: "перечёркивающий акцент"] # 0x2df (en: 'modifier cross accent') +- "ˠ": [t: "верхний индекс гаммы"] # 0x2e0 (en: 'modifier small gamma') +- "ˡ": [t: "верхний индекс l"] # 0x2e1 (en: 'modifier small l') +- "ˢ": [t: "верхний индекс s"] # 0x2e2 (en: 'modifier small s') +- "ˣ": [t: "верхний индекс x"] # 0x2e3 (en: 'modifier small x') +- "ˤ": [t: "верхний индекс перевёрнутой гортанной смычки"] # 0x2e4 (en: 'modifier small reversed glottal stop') +- "˥": [t: "сверхвысокий тон"] # 0x2e5 (en: 'modifier extra-high tone bar') +- "˦": [t: "высокий тон"] # 0x2e6 (en: 'modifier high tone bar') +- "˧": [t: "средний тон"] # 0x2e7 (en: 'modifier mid tone bar') +- "˨": [t: "низкий тон"] # 0x2e8 (en: 'modifier low tone bar') +- "˩": [t: "сверхнизкий тон"] # 0x2e9 (en: 'modifier extra-low tone bar') +- "˪": [t: "знак тона инь"] # 0x2ea (en: 'modifier yin departing tone mark') +- "˫": [t: "знак тона ян"] # 0x2eb (en: 'modifier yang departing tone mark') +- "ˬ": [t: "звонкость"] # 0x2ec (en: 'modifier voicing') +- "˭": [t: "непридыхательность"] # 0x2ed (en: 'modifier unaspirated') +- "ˮ": [t: "двойной апостроф"] # 0x2ee (en: 'modifier double apostrophe') +- "˯": [t: "нижний наконечник стрелки вниз"] # 0x2ef (en: 'modifier low down arrowhead') +- "˰": [t: "нижний наконечник стрелки вверх"] # 0x2f0 (en: 'modifier low up arrowhead') +- "˱": [t: "нижний наконечник стрелки влево"] # 0x2f1 (en: 'modifier low left arrowhead') +- "˲": [t: "нижний наконечник стрелки вправо"] # 0x2f2 (en: 'modifier low right arrowhead') +- "˳": [t: "нижнее кольцо"] # 0x2f3 (en: 'modifier low ring') +- "˴": [t: "средний гравис"] # 0x2f4 (en: 'modifier middle grave accent') +- "˵": [t: "средний двойной гравис"] # 0x2f5 (en: 'modifier middle double grave accent') +- "˶": [t: "средний двойной акут"] # 0x2f6 (en: 'modifier middle double acute accent') +- "˷": [t: "нижняя тильда"] # 0x2f7 (en: 'modifier low tilde') +- "˸": [t: "верхнее двоеточие"] # 0x2f8 (en: 'modifier raised colon') +- "˹": [t: "начало высокого тона"] # 0x2f9 (en: 'modifier begin high tone') +- "˺": [t: "конец высокого тона"] # 0x2fa (en: 'modifier end high tone') +- "˻": [t: "начало низкого тона"] # 0x2fb (en: 'modifier begin low tone') +- "˼": [t: "конец низкого тона"] # 0x2fc (en: 'modifier end low tone') +- "˽": [t: "полка"] # 0x2fd (en: 'modifier shelf') +- "˾": [t: "открытая полка"] # 0x2fe (en: 'modifier open shelf') +- "˿": [t: "нижняя левая стрелка"] # 0x2ff (en: 'modifier low left arrow') +- "̀": [t: "комбинируемый гравис"] # 0x300 (en: 'grave accent embellishment') +- "́": [t: "комбинируемый акут"] # 0x301 (en: 'acute accent embellishment') +- "̂": [t: "комбинируемый циркумфлекс"] # 0x302 (en: 'circumflex accent embellishment') +- "̃": [t: "комбинируемая тильда"] # 0x303 (en: 'tilde embellishment') +- "̄": [t: "комбинируемый макрон"] # 0x304 (en: 'macron embellishment') +- "̅": [t: "комбинируемое надчёркивание"] # 0x305 (en: 'overbar embellishment') +- "̆": [t: "комбинируемое бреве"] # 0x306 (en: 'breve embellishment') +- "̇": [t: "комбинируемая точка сверху"] # 0x307 (en: 'dot above embellishment') +- "̈": [t: "комбинируемый диэрезис"] # 0x308 (en: 'diaeresis embellishment') +- "̉": [t: "комбинируемый крючок сверху"] # 0x309 (en: 'hook above embellishment') +- "̊": [t: "комбинируемое кольцо сверху"] # 0x30a (en: 'ring above embellishment') +- "̋": [t: "комбинируемый двойной акут"] # 0x30b (en: 'double acute accent embellishment') +- "̌": [t: "комбинируемый гачек"] # 0x30c (en: 'check') +- "̍": [t: "комбинируемая вертикальная линия сверху"] # 0x30d (en: 'vertical line above embellishment') +- "̎": [t: "комбинируемая двойная вертикальная линия сверху"] # 0x30e (en: 'double vertical line above embellishment') +- "̏": [t: "комбинируемый двойной гравис"] # 0x30f (en: 'double grave accent embellishment') +- "̐": [t: "комбинируемая чандрабинду"] # 0x310 (en: 'candrabindu embellishment') +- "̑": [t: "комбинируемое перевёрнутое бреве"] # 0x311 (en: 'inverted breve embellishment') +- "̒": [t: "комбинируемая перевёрнутая запятая сверху"] # 0x312 (en: 'turned comma above embellishment') +- "̓": [t: "комбинируемая запятая сверху"] # 0x313 (en: 'comma above embellishment') +- "̔": [t: "комбинируемая перевёрнутая запятая сверху"] # 0x314 (en: 'reversed comma above embellishment') +- "̕": [t: "комбинируемая запятая справа сверху"] # 0x315 (en: 'comma above right embellishment') +- "̖": [t: "комбинируемый гравис снизу"] # 0x316 (en: 'grave accent below embellishment') +- "̗": [t: "комбинируемый акут снизу"] # 0x317 (en: 'acute accent below embellishment') +- "̘": [t: "комбинируемый левый упор снизу"] # 0x318 (en: 'left tack below embellishment') +- "̙": [t: "комбинируемый правый упор снизу"] # 0x319 (en: 'right tack below embellishment') +- "̚": [t: "комбинируемый левый угол сверху"] # 0x31a (en: 'left angle above embellishment') +- "̛": [t: "комбинируемый рожок"] # 0x31b (en: 'horn embellishment') +- "̜": [t: "комбинируемое левое полукольцо снизу"] # 0x31c (en: 'left half ring below embellishment') +- "̝": [t: "комбинируемый верхний упор снизу"] # 0x31d (en: 'up tack below embellishment') +- "̞": [t: "комбинируемый нижний упор снизу"] # 0x31e (en: 'down tack below embellishment') +- "̟": [t: "комбинируемый знак плюс снизу"] # 0x31f (en: 'plus sign below embellishment') +- "̠": [t: "комбинируемый знак минус снизу"] # 0x320 (en: 'minus sign below embellishment') +- "̡": [t: "комбинируемый палатализованный крюк снизу"] # 0x321 (en: 'palatalized hook below embellishment') +- "̢": [t: "комбинируемый ретрофлексный крюк снизу"] # 0x322 (en: 'retroflex hook below embellishment') +- "̣": [t: "комбинируемая точка снизу"] # 0x323 (en: 'dot below embellishment') +- "̤": [t: "комбинируемый диэрезис снизу"] # 0x324 (en: 'diaeresis below embellishment') +- "̥": [t: "комбинируемое кольцо снизу"] # 0x325 (en: 'ring below embellishment') +- "̦": [t: "комбинируемая запятая снизу"] # 0x326 (en: 'comma below embellishment') +- "̧": [t: "комбинируемая седиль"] # 0x327 (en: 'cedilla embellishment') +- "̨": [t: "комбинируемый огонек"] # 0x328 (en: 'ogonek embellishment') +- "̩": [t: "комбинируемая вертикальная линия снизу"] # 0x329 (en: 'vertical line below embellishment') +- "̪": [t: "комбинируемый мостик снизу"] # 0x32a (en: 'bridge below embellishment') +- "̫": [t: "комбинируемая перевёрнутая двойная арка снизу"] # 0x32b (en: 'inverted double arch below embellishment') +- "̬": [t: "комбинируемый гачек снизу"] # 0x32c (en: 'caron below embellishment') +- "̭": [t: "комбинируемый циркумфлекс снизу"] # 0x32d (en: 'circumflex accent below embellishment') +- "̮": [t: "комбинируемое бреве снизу"] # 0x32e (en: 'breve below embellishment') +- "̯": [t: "комбинируемое перевёрнутое бреве снизу"] # 0x32f (en: 'inverted breve below embellishment') +- "̰": [t: "комбинируемая тильда снизу"] # 0x330 (en: 'tilde below embellishment') +- "̱": [t: "комбинируемый макрон снизу"] # 0x331 (en: 'macron below embellishment') +- "̲": [t: "комбинируемое подчёркивание"] # 0x332 (en: 'low line embellishment') +- "̳": [t: "комбинируемое двойное подчёркивание"] # 0x333 (en: 'double low line embellishment') +- "̴": [t: "комбинируемая наложенная тильда"] # 0x334 (en: 'tilde overlay embellishment') +- "̵": [t: "комбинируемая короткая черта"] # 0x335 (en: 'short stroke overlay embellishment') +- "̶": [t: "комбинируемая длинная черта"] # 0x336 (en: 'long stroke overlay embellishment') +- "̷": [t: "комбинируемый короткий слэш"] # 0x337 (en: 'short solidus overlay embellishment') +- "̸": [t: "комбинируемый длинный слэш"] # 0x338 (en: 'long solidus overlay embellishment') +- "̹": [t: "комбинируемое правое полукольцо снизу"] # 0x339 (en: 'right half ring below embellishment') +- "̺": [t: "комбинируемый перевёрнутый мостик снизу"] # 0x33a (en: 'inverted bridge below embellishment') +- "̻": [t: "комбинируемый квадрат снизу"] # 0x33b (en: 'square below embellishment') +- "̼": [t: "комбинируемая чайка снизу"] # 0x33c (en: 'seagull below embellishment') +- "̽": [t: "комбинируемый икс сверху"] # 0x33d (en: 'x above embellishment') +- "̾": [t: "комбинируемая вертикальная тильда"] # 0x33e (en: 'vertical tilde embellishment') +- "̿": [t: "комбинируемое двойное надчёркивание"] # 0x33f (en: 'double overline embellishment') +- "̀": [t: "комбинируемый знак гравис-тона"] # 0x340 (en: 'grave tone mark embellishment') +- "́": [t: "комбинируемый знак акут-тона"] # 0x341 (en: 'acute tone mark embellishment') +- "͆": [t: "комбинируемый мостик сверху"] # 0x346 (en: 'bridge above') + +- "ΪΫϏ": # 0x3aa, 0x3ab, 0x3cf + - test: + if: "$CapitalLetters_Beep" + then: + - audio: + value: "beep.mp4" + replace: [] + - test: + if: "$CapitalLetters_UseWord" + then_test: + if: "$SpeechOverrides_CapitalLetters = ''" + then_test: + if: "$Impairment = 'Blindness'" + then: [t: "заглавная"] # (en: 'cap') + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [spell: "translate('.', 'ΪΫϏ', 'ιυϗ')"] + - t: " с диэрезисом" # (en: 'with dialytika') +- "ϊ": [t: "йота с диэрезисом"] # 0x3ca (en: 'iota with dialytika') +- "ϋ": [t: "ипсилон с диэрезисом"] # 0x3cb (en: 'upsilon with dialytika') +- "ό": [t: "омикрон с ударением"] # 0x3cc (en: 'omicron with tonos') +- "ύ": [t: "ипсилон с ударением"] # 0x3cd (en: 'upsilon with tonos') +- "ώ": [t: "омега с ударением"] # 0x3ce (en: 'omega with tonos') +- "ϐ": [t: "бета"] # 0x3d0 (en: 'beta') +- "ϑ": [t: "тета"] # 0x3d1 (en: 'theta') +- "ϒ": [t: "ипсилон с крючком"] # 0x3d2 (en: 'upsilon with hook') +- "ϓ": [t: "ипсилон с акутом и крючком"] # 0x3d3 (en: 'upsilon with acute and hook') +- "ϔ": [t: "ипсилон с диэрезисом и крючком"] # 0x3d4 (en: 'upsilon with diaeresis and hook') +- "ϕ": [t: "фи"] # 0x3d5 (en: 'phi') +- "ϖ": [t: "пи"] # 0x3d6 (en: 'pi') +- "ϗ": [t: "кай"] # 0x3d7 (en: 'kai') +- "Ϙ": [t: "заглавная архаичная коппа"] # 0x3d8 (en: 'cap archaic koppa') +- "ϙ": [t: "архаичная коппа"] # 0x3d9 (en: 'archaic koppa') +- "ϵ": [t: "эпсилон"] # 0x3f5 (en: 'epsilon') +- "϶": [t: "обратный эпсилон"] # 0x3f6 (en: 'reversed epsilon') +- "А-Я": # 0x410 - 0x42f + - test: + if: "$CapitalLetters_Beep" + then: + - audio: + value: "beep.mp4" + replace: [] + - test: + if: "$CapitalLetters_UseWord" + then_test: + if: "$SpeechOverrides_CapitalLetters = ''" + then_test: + if: "$Impairment = 'Blindness'" + then: [t: "заглавная"] # (en: 'cap') + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [spell: "translate('.', 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', 'абвгдежзийклмнопрстуфхцчшщъыьэюя')"] +- "а": [t: "а"] # 0x430 +- "б": [t: "бэ"] # 0x431 +- "в": [t: "вэ"] # 0x432 +- "г": [t: "гэ"] # 0x433 +- "д": [t: "дэ"] # 0x434 +- "е": [t: "е"] # 0x435 +- "ж": [t: "жэ"] # 0x436 +- "з": [t: "зэ"] # 0x437 +- "и": [t: "и"] # 0x438 +- "й": [t: "и краткое"] # 0x439 +- "к": [t: "ка"] # 0x43a +- "л": [t: "эль"] # 0x43b +- "м": [t: "эм"] # 0x43c +- "н": [t: "эн"] # 0x43d +- "о": [t: "о"] # 0x43e +- "п": [t: "пэ"] # 0x43f +- "р": [t: "эр"] # 0x440 +- "с": [t: "эс"] # 0x441 +- "т": [t: "тэ"] # 0x442 +- "у": [t: "у"] # 0x443 +- "ф": [t: "эф"] # 0x444 +- "х": [t: "ха"] # 0x445 +- "ц": [t: "цэ"] # 0x446 +- "ч": [t: "чэ"] # 0x447 +- "ш": [t: "ша"] # 0x448 +- "щ": [t: "ща"] # 0x449 +- "ъ": [t: "твёрдый знак"] # 0x44a +- "ы": [t: "ы"] # 0x44b +- "ь": [t: "мягкий знак"] # 0x44c +- "э": [t: "э"] # 0x44d +- "ю": [t: "ю"] # 0x44e +- "я": [t: "я"] # 0x44f +- "؆": [t: "арабский кубический корень"] # 0x606 (en: 'Arabic-Indic cube root') +- "؇": [t: "арабский корень четвёртой степени"] # 0x607 (en: 'Arabic-Indic fourth root') +- "؈": [t: "арабский рай"] # 0x608 (en: 'Arabic ray') +- "‐": [t: "дефис"] # 0x2010 (en: 'hyphen') +- "‑": [t: "неразрывный дефис"] # 0x2011 (en: 'non-breaking hyphen') +- "‒": [t: "цифровое тире"] # 0x2012 (en: 'figure dash') +- "–": [t: "короткое тире"] # 0x2013 (en: 'en dash') +- "—": [t: "длинное тире"] # 0x2014 (en: 'em dash') +- "―": [t: "горизонтальная черта"] # 0x2015 (en: 'horizontal bar') +- "‖": [t: "двойная вертикальная линия"] # 0x2016 (en: 'double vertical line') +- "†": [t: "крестик"] # 0x2020 (en: 'dagger') +- "‡": [t: "двойной крестик"] # 0x2021 (en: 'double dagger') + +- " - ": [t: ""] # 0x2000 - 0x2007 (различные пробелы, не озвучиваются) + +- "•": # 0x2022 + - test: + if: "@data-chem-formula-op" + then: [t: "точка"] # в химических формулах + else: [t: "маркер"] # (en: 'bullet') + +- "…": # 0x2026 + test: + if: + - "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_Ellipses = 'Auto' or" + - "../*[1][.='…']" + then: [t: "многоточие"] # (en: 'dot dot dot') + else_test: + if: "count(following-sibling::*) = 0" + then: [t: "и так далее"] # (en: 'and so on') + else: [t: "и так далее до"] # (en: 'and so on up to') + +- "‰": [t: "промилле"] # 0x2030 (en: 'per mille') +- "‱": [t: "десять тысяч"] # 0x2031 (en: 'per ten thousand') +- "′": [t: "штрих"] # 0x2032 (en: 'prime') +- "″": [t: "двойной штрих"] # 0x2033 (en: 'double prime') +- "‴": [t: "тройной штрих"] # 0x2034 (en: 'triple prime') +- "‵": [t: "обратный штрих"] # 0x2035 (en: 'reversed prime') +- "‶": [t: "обратный двойной штрих"] # 0x2036 (en: 'reversed double prime') +- "‷": [t: "обратный тройной штрих"] # 0x2037 (en: 'reversed triple prime') +- "‸": [t: "в степени"] # 0x2038 (en: 'to the') +- "‹": [t: "левая одиночная угловая кавычка"] # 0x2039 (en: 'single left-pointing angle quote mark') +- "›": [t: "правая одиночная угловая кавычка"] # 0x203a (en: 'single right-pointing angle quote mark') +- "‼": [t: "двойной восклицательный знак"] # 0x203c (en: 'double factorial') +- "⁄": [t: "косая черта дроби"] # 0x2044 (en: 'fraction slash') +- "⁅": [t: "левая квадратная скобка с пером"] # 0x2045 (en: 'left square bracket with quill') +- "⁆": [t: "правая квадратная скобка с пером"] # 0x2046 (en: 'right square bracket with quill') +- "※": [t: "знак ссылки"] # 0x203b (en: 'reference mark') +- "‿": [t: "соединение снизу"] # 0x203F (en: 'under tie') +- "⁀": [t: "соединение сверху"] # 0x2040 (en: 'tie') +- "⁎": [t: "нижняя звёздочка"] # 0x204e (en: 'low asterisk') +- "⁏": [t: "обратная точка с запятой"] # 0x204f (en: 'reversed semicolon') +- "⁐": [t: "сомкнуть"] # 0x2050 (en: 'close up') +- "⁑": [t: "две вертикальные звёздочки"] # 0x2051 (en: 'two vertical asterisks') +- "⁒": [t: "коммерческий знак минус"] # 0x2052 (en: 'commercial minus sign') +- "⁗": [t: "четыре штриха"] # 0x2057 (en: 'quadruple prime') +- "⁠": [t: ""] # 0x2060 (невидимый соединитель) +- "⁰": [t: "в степени ноль"] # 0x2070 (en: 'to the zeroth power') +- "ⁱ": [t: "в степени i"] # 0x2071 (en: 'to the i-th power') +- "⁴": [t: "в четвёртой степени"] # 0x2074 (en: 'to the fourth power') +- "⁵": [t: "в пятой степени"] # 0x2075 (en: 'to the fifth power') +- "⁶": [t: "в шестой степени"] # 0x2076 (en: 'to the sixth power') +- "⁷": [t: "в седьмой степени"] # 0x2077 (en: 'to the seventh power') +- "⁸": [t: "в восьмой степени"] # 0x2078 (en: 'to the eighth power') +- "⁹": [t: "в девятой степени"] # 0x2079 (en: 'to the ninth power') +- "⁺": [t: "верхний индекс плюс"] # 0x207a (en: 'superscript plus sign') +- "⁻": [t: "верхний индекс минус"] # 0x207b (en: 'superscript minus') +- "⁼": [t: "верхний индекс равно"] # 0x207c (en: 'superscript equals sign') +- "⁽": [t: "верхний индекс левая скобка"] # 0x207d (en: 'superscript left parenthesis') +- "⁾": [t: "верхний индекс правая скобка"] # 0x207e (en: 'superscript right parenthesis') +- "ⁿ": [t: "в степени n"] # 0x207f (en: 'to the n-th power') +- "₀": [t: "индекс ноль"] # 0x2080 (en: 'sub zero') +- "₁": [t: "индекс один"] # 0x2081 (en: 'sub one') +- "₂": [t: "индекс два"] # 0x2082 (en: 'sub two') +- "₃": [t: "индекс три"] # 0x2083 (en: 'sub three') +- "₄": [t: "индекс четыре"] # 0x2084 (en: 'sub four') +- "₅": [t: "индекс пять"] # 0x2085 (en: 'sub five') +- "₆": [t: "индекс шесть"] # 0x2086 (en: 'sub six') +- "₇": [t: "индекс семь"] # 0x2087 (en: 'sub seven') +- "₈": [t: "индекс восемь"] # 0x2088 (en: 'sub eight') +- "₉": [t: "индекс девять"] # 0x2089 (en: 'sub nine') +- "₊": [t: "индекс плюс"] # 0x208a (en: 'subscript plus sign') +- "₋": [t: "индекс минус"] # 0x208b (en: 'subscript minus sign') +- "₌": [t: "индекс равно"] # 0x208c (en: 'subscript equals sign') +- "₍": [t: "индекс левая скобка"] # 0x208d (en: 'subscript left parenthesis') +- "₎": [t: "индекс правая скобка"] # 0x208e (en: 'subscript right parenthesis') +- "ₐ": [t: "индекс a"] # 0x2090 (en: 'sub a') +- "ₑ": [t: "индекс e"] # 0x2091 (en: 'sub e') +- "ₒ": [t: "индекс o"] # 0x2092 (en: 'sub o') +- "ₓ": [t: "индекс x"] # 0x2093 (en: 'sub x') +- "ₕ": [t: "индекс h"] # 0x2095 (en: 'sub h') +- "ₖ": [t: "индекс k"] # 0x2096 (en: 'sub k') +- "ₗ": [t: "индекс l"] # 0x2097 (en: 'sub l') +- "ₘ": [t: "индекс m"] # 0x2098 (en: 'sub m') +- "ₙ": [t: "индекс n"] # 0x2099 (en: 'sub n') +- "ₚ": [t: "индекс p"] # 0x209a (en: 'sub p') +- "ₛ": [t: "индекс s"] # 0x209b (en: 'sub s') +- "ₜ": [t: "индекс t"] # 0x209c (en: 'sub t') +- "₠": [t: "евро"] # 0x20a0 (en: 'european currency unit') — устаревший, но пусть будет евро +- "₡": [t: "колон"] # 0x20a1 (en: 'colon') +- "₢": [t: "крузейро"] # 0x20a2 (en: 'cruzeiro') +- "₣": [t: "франк"] # 0x20a3 (en: 'franc') +- "₤": [t: "лира"] # 0x20a4 (en: 'lira') +- "₥": [t: "милль"] # 0x20a5 (en: 'mill') +- "₦": [t: "найра"] # 0x20a6 (en: 'naira') +- "₧": [t: "песета"] # 0x20a7 (en: 'peseta') +- "₨": [t: "рупия"] # 0x20a8 (en: 'rupee') +- "₩": [t: "вона"] # 0x20a9 (en: 'won') +- "₪": [t: "новый шекель"] # 0x20aa (en: 'new sheqel') +- "₫": [t: "донг"] # 0x20ab (en: 'dong') +- "€": [t: "евро"] # 0x20ac (en: 'euro') +- "₭": [t: "кип"] # 0x20ad (en: 'kip') +- "₮": [t: "тугрик"] # 0x20ae (en: 'tugrik') +- "₯": [t: "драхма"] # 0x20af (en: 'drachma') +- "₰": [t: "пфенниг"] # 0x20b0 (en: 'german penny') +- "₱": [t: "песо"] # 0x20b1 (en: 'peso') +- "₲": [t: "гуарани"] # 0x20b2 (en: 'guarani') +- "₳": [t: "аустраль"] # 0x20b3 (en: 'austral') +- "₴": [t: "гривна"] # 0x20b4 (en: 'hryvnia') +- "₵": [t: "седи"] # 0x20b5 (en: 'cedi') +- "₶": [t: "ливр"] # 0x20b6 (en: 'livre tournois') +- "₷": [t: "спесмило"] # 0x20b7 (en: 'spesmilo') +- "₸": [t: "тенге"] # 0x20b8 (en: 'tenge') +- "₹": [t: "индийская рупия"] # 0x20b9 (en: 'indian rupee') +- "₺": [t: "турецкая лира"] # 0x20ba (en: 'turkish lira') +- "⃐": [t: "комбинируемый левый гарпун сверху"] # 0x20d0 (en: 'left harpoon above embellishment') +- "⃑": [t: "комбинируемый правый гарпун сверху"] # 0x20d1 (en: 'right harpoon above embellishment') +- "⃒": [t: "комбинируемая длинная вертикальная черта"] # 0x20d2 (en: 'long vertical line overlay embellishment') +- "⃓": [t: "комбинируемая короткая вертикальная черта"] # 0x20d3 (en: 'short vertical line overlay embellishment') +- "⃔": [t: "комбинируемая стрелка против часовой стрелки"] # 0x20d4 (en: 'anticlockwise arrow above embellishment') +- "⃕": [t: "комбинируемая стрелка по часовой стрелке"] # 0x20d5 (en: 'clockwise arrow above embellishment') +- "⃖": [t: "комбинируемая стрелка влево сверху"] # 0x20d6 (en: 'left arrow above embellishment') +- "⃗": [t: "комбинируемая стрелка вправо сверху"] # 0x20d7 (en: 'right arrow above embellishment') +- "⃘": [t: "комбинируемое кольцо"] # 0x20d8 (en: 'ring overlay embellishment') +- "⃙": [t: "комбинируемое кольцо по часовой стрелке"] # 0x20d9 (en: 'clockwise ring overlay embellishment') +- "⃚": [t: "комбинируемое кольцо против часовой стрелки"] # 0x20da (en: 'anticlockwise ring overlay embellishment') +- "⃛": [t: "комбинируемые три точки"] # 0x20db (en: 'triple dot') +- "⃜": [t: "комбинируемые четыре точки"] # 0x20dc (en: 'quadruple dot') +- "⃝": [t: "комбинируемый круг"] # 0x20dd (en: 'enclosing circle embellishment') +- "⃞": [t: "комбинируемый квадрат"] # 0x20de (en: 'enclosing square embellishment') +- "⃟": [t: "комбинируемый ромб"] # 0x20df (en: 'enclosing diamond embellishment') +- "⃠": [t: "комбинируемый круг с обратной косой"] # 0x20e0 (en: 'enclosing circle backslash embellishment') +- "⃡": [t: "комбинируемая стрелка влево-вправо сверху"] # 0x20e1 (en: 'left right arrow above embellishment') +- "⃢": [t: "комбинируемый прямоугольник"] # 0x20e2 (en: 'enclosing screen embellishment') +- "⃣": [t: "комбинируемый значок клавиши"] # 0x20e3 (en: 'enclosing keycap embellishment') +- "⃤": [t: "комбинируемый треугольник вверх"] # 0x20e4 (en: 'enclosing upward pointing triangle embellishment') +- "⃥": [t: "комбинируемая обратная косая черта"] # 0x20e5 (en: 'reverse solidus overlay embellishment') +- "⃦": [t: "комбинируемая двойная вертикальная черта"] # 0x20e6 (en: 'double vertical stroke embellishment') +- "⃧": [t: "комбинируемый символ аннуитета"] # 0x20e7 (en: 'annuity symbol embellishment') +- "⃨": [t: "комбинируемые три точки снизу"] # 0x20e8 (en: 'triple underdot') +- "⃩": [t: "комбинируемый широкий мостик сверху"] # 0x20e9 (en: 'wide bridge above embellishment') +- "⃪": [t: "комбинируемая левая стрелка"] # 0x20ea (en: 'leftwards arrow overlay embellishment') +- "⃫": [t: "комбинируемая длинная двойная косая"] # 0x20eb (en: 'long double solidus overlay embellishment') +- "⃬": [t: "комбинируемый правый гарпун вниз"] # 0x20ec (en: 'rightwards harpoon with barb downwards embellishment') +- "⃭": [t: "комбинируемый левый гарпун вниз"] # 0x20ed (en: 'leftwards harpoon with barb downwards embellishment') +- "⃮": [t: "комбинируемая левая стрелка снизу"] # 0x20ee (en: 'left arrow below embellishment') +- "⃯": [t: "комбинируемая правая стрелка снизу"] # 0x20ef (en: 'right arrow below embellishment') +- "⃰": [t: "комбинируемая звёздочка сверху"] # 0x20f0 (en: 'asterisk above embellishment') +- "℄": [t: "символ центровой линии"] # 0x2104 (en: 'center line symbol') +- "℅": [t: "вниманию"] # 0x2105 (en: 'care of') +- "℆": [t: "каждая"] # 0x2106 (en: 'cada una') +- "ℇ": [t: "постоянная Эйлера"] # 0x2107 (en: 'Euler's constant') +- "℈": [t: "скрупул"] # 0x2108 (en: 'scruple') +- "℉": [t: "градус Фаренгейта"] # 0x2109 (en: 'degree Fahrenheit') +- "ℊ": [t: "рукописная g"] # 0x210a (en: 'script g') +- "ℌℑℨℭ": # 0x210c, 0x2111, 0x2128, 0x212d + - t: "готическое" # (en: 'fraktur') + - spell: "translate('.', 'ℌℑℨℭ', 'HIZC')" +- "ℍℙℾℿ": # 0x210d, 0x2119, 0x213e, 0x213f + - t: "двойное" # (en: 'double struck') + - spell: "translate('.', 'ℍℙℾℿ', 'HPΓΠ')" +- "ℎ": [t: "постоянная Планка"] # 0x210e (en: 'Planck constant') +- "ℏ": [t: "постоянная Планка с чертой"] # 0x210f (en: 'h-bar') + +- "ℐℒ℘ℬℰℱℳ": # 0x2110, 0x2112, 0x2118, 0x2130, 0x2131, 0x2133 + - t: "рукописное" # (en: 'script') + - spell: "translate('.', 'ℐℒ℘ℬℰℱℳ', 'ILPBEFM')" + +- "ℓ": [t: "рукописная l"] # 0x2113 (en: 'script l') +- "℔": [t: "фунт"] # 0x2114 (en: 'pound') +- "№": [t: "номер"] # 0x2116 (en: 'numero') +- "℥": [t: "унция"] # 0x2125 (en: 'ounce') +- "Ω": [t: "ом"] # 0x2126 (en: 'ohm') +- "℧": [t: "сименс"] # 0x2127 (en: 'mho') +- "℩": [t: "перевёрнутая йота"] # 0x2129 (en: 'turned iota') +- "K": [t: "кельвин"] # 0x212a (en: 'kelvin') +- "Å": [t: "ангстрем"] # 0x212b (en: 'angstrom') +- "ℯ": [t: "рукописная e"] # 0x212f (en: 'script e') + +- "Ⅎ℺⅁⅂⅃⅄": # 0x2132, 0x213a, 0x2141, 0x2142, 0x2143, 0x2144 + - test: + - if: "'.' = '℺'" + then: [t: "повёрнутое"] # (en: 'rotated') + - else_if: "'.' = 'Ⅎ'" + then: [t: "перевёрнутое"] # (en: 'turned') + - else_if: "'.' = '⅃'" + then: [t: "обратное без засечек"] # (en: 'reversed sans-serif') + else: [t: "повёрнутое без засечек"] # (en: 'turned sans-serif') + - spell: "translate('.', 'Ⅎ℺⅁⅂⅃⅄', 'FQGLLY')" + +- "ℴ": [t: "рукописная o"] # 0x2134 (en: 'script o') +- "ℵ": [t: "алеф"] # 0x2135 (en: 'alef') +- "ℶ": [t: "бет"] # 0x2136 (en: 'bet') +- "ℷ": [t: "гимель"] # 0x2137 (en: 'gimel') +- "ℸ": [t: "далет"] # 0x2138 (en: 'dalet') +- "ℼ": [t: "двойное пи"] # 0x213c (en: 'double-struck pi') +- "ℽ": [t: "двойная гамма"] # 0x213d (en: 'double-struck gamma') +- "⅀": [t: "двойная сумма"] # 0x2140 (en: 'double-struck n-ary summation') +- "⅋": [t: "перевёрнутый амперсанд"] # 0x214b (en: 'turned ampersand') +- "⅌": [t: "на"] # 0x214c (en: 'per') +- "ⅎ": [t: "перевёрнутая f"] # 0x214e (en: 'turned f') +- "¼": [t: "одна четверть"] # 0x00bc (en: 'one quarter') +- "½": [t: "одна вторая"] # 0x00bd (en: 'one half') +- "¾": [t: "три четверти"] # 0x00be (en: 'three quarters') +- "⅐": [t: "одна седьмая"] # 0x2150 (en: 'one seventh') +- "⅑": [t: "одна девятая"] # 0x2151 (en: 'one ninth') +- "⅒": [t: "одна десятая"] # 0x2152 (en: 'one tenth') +- "⅓": [t: "одна треть"] # 0x2153 (en: 'one third') +- "⅔": [t: "две трети"] # 0x2154 (en: 'two thirds') +- "⅕": [t: "одна пятая"] # 0x2155 (en: 'one fifth') +- "⅖": [t: "две пятых"] # 0x2156 (en: 'two fifths') +- "⅗": [t: "три пятых"] # 0x2157 (en: 'three fifths') +- "⅘": [t: "четыре пятых"] # 0x2158 (en: 'four fifths') +- "⅙": [t: "одна шестая"] # 0x2159 (en: 'one sixth') +- "⅚": [t: "пять шестых"] # 0x215a (en: 'five sixths') +- "⅛": [t: "одна восьмая"] # 0x215b (en: 'one eighth') +- "⅜": [t: "три восьмых"] # 0x215c (en: 'three eighths') +- "⅝": [t: "пять восьмых"] # 0x215d (en: 'five eighths') +- "⅞": [t: "семь восьмых"] # 0x215e (en: 'seven eighths') +- "⅟": [t: "один"] # 0x215f (en: 'one over') +- "Ⅰ": [t: "один"] # 0x2160 (римская цифра) +- "Ⅱ": [t: "два"] # 0x2161 +- "Ⅲ": [t: "три"] # 0x2162 +- "Ⅳ": [t: "четыре"] # 0x2163 +- "Ⅴ": [t: "пять"] # 0x2164 +- "Ⅵ": [t: "шесть"] # 0x2165 +- "Ⅶ": [t: "семь"] # 0x2166 +- "Ⅷ": [t: "восемь"] # 0x2167 +- "Ⅸ": [t: "девять"] # 0x2168 +- "Ⅹ": [t: "десять"] # 0x2169 +- "Ⅺ": [t: "одиннадцать"] # 0x216a +- "Ⅻ": [t: "двенадцать"] # 0x216b +- "Ⅼ": [t: "пятьдесят"] # 0x216c +- "Ⅽ": [t: "сто"] # 0x216d +- "Ⅾ": [t: "пятьсот"] # 0x216e +- "Ⅿ": [t: "тысяча"] # 0x216f +- "ⅰ": [t: "один"] # 0x2170 +- "ⅱ": [t: "два"] # 0x2171 +- "ⅲ": [t: "три"] # 0x2172 +- "ⅳ": [t: "четыре"] # 0x2173 +- "ⅴ": [t: "пять"] # 0x2174 +- "ⅵ": [t: "шесть"] # 0x2175 +- "ⅶ": [t: "семь"] # 0x2176 +- "ⅷ": [t: "восемь"] # 0x2177 +- "ⅸ": [t: "девять"] # 0x2178 +- "ⅹ": [t: "десять"] # 0x2179 +- "ⅺ": [t: "одиннадцать"] # 0x217a +- "ⅻ": [t: "двенадцать"] # 0x217b +- "ⅼ": [t: "пятьдесят"] # 0x217c +- "ⅽ": [t: "сто"] # 0x217d +- "ⅾ": [t: "пятьсот"] # 0x217e +- "ⅿ": [t: "тысяча"] # 0x217f +- "↉": [t: "ноль третьих"] # 0x2189 (en: 'zero thirds') +- "←": [t: "стрелка влево"] # 0x2190 +- "↑": [t: "стрелка вверх"] # 0x2191 +- "→": [t: "стрелка вправо"] # 0x2192 +- "↓": [t: "стрелка вниз"] # 0x2193 +- "↔": [t: "стрелка влево-вправо"] # 0x2194 +- "↕": [t: "стрелка вверх-вниз"] # 0x2195 +- "↖": [t: "стрелка северо-запад"] # 0x2196 +- "↗": # 0x2197 + - test: + if: "ancestor::*[2][self::m:limit]" + then: [t: "стремится снизу"] # (en: 'approaches from below') + else: [t: "стрелка северо-восток"] # 0x2197 +- "↘": # 0x2198 + - test: + if: "ancestor::*[2][self::m:limit]" + then: [t: "стремится сверху"] # (en: 'approaches from above') + else: [t: "стрелка юго-восток"] # 0x2198 +- "↙": [t: "стрелка юго-запад"] # 0x2199 +- "↚": [t: "стрелка влево с чертой"] # 0x219a +- "↛": [t: "стрелка вправо с чертой"] # 0x219b +- "↜": [t: "стрелка влево волнистая"] # 0x219c +- "↝": [t: "стрелка вправо волнистая"] # 0x219d +- "↞": [t: "стрелка влево с двумя головками"] # 0x219e +- "↟": [t: "стрелка вверх с двумя головками"] # 0x219f +- "↠": [t: "стрелка вправо с двумя головками"] # 0x21a0 +- "↡": [t: "стрелка вниз с двумя головками"] # 0x21a1 +- "↢": [t: "стрелка влево с хвостом"] # 0x21a2 +- "↣": [t: "стрелка вправо с хвостом"] # 0x21a3 +- "↤": [t: "стрелка влево от черты"] # 0x21a4 +- "↥": [t: "стрелка вверх от черты"] # 0x21a5 +- "↦": [t: "стрелка вправо от черты"] # 0x21a6 +- "↧": [t: "стрелка вниз от черты"] # 0x21a7 +- "↨": [t: "стрелка вверх-вниз с основанием"] # 0x21a8 +- "↩": [t: "стрелка влево с крючком"] # 0x21a9 +- "↪": [t: "стрелка вправо с крючком"] # 0x21aa +- "↫": [t: "стрелка влево с петлей"] # 0x21ab +- "↬": [t: "стрелка вправо с петлей"] # 0x21ac +- "↭": [t: "стрелка влево-вправо волнистая"] # 0x21ad +- "↮": [t: "стрелка влево-вправо с чертой"] # 0x21ae +- "↯": [t: "стрелка зигзаг вниз"] # 0x21af +- "↰": [t: "стрелка вверх с наконечником влево"] # 0x21b0 +- "↱": [t: "стрелка вверх с наконечником вправо"] # 0x21b1 +- "↲": [t: "стрелка вниз с наконечником влево"] # 0x21b2 +- "↳": [t: "стрелка вниз с наконечником вправо"] # 0x21b3 +- "↴": [t: "стрелка вправо с углом вниз"] # 0x21b4 +- "↵": [t: "стрелка вниз с углом влево"] # 0x21b5 +- "↶": [t: "полукруг против часовой стрелки сверху"] # 0x21b6 +- "↷": [t: "полукруг по часовой стрелке сверху"] # 0x21b7 +- "↸": [t: "стрелка северо-запад к длинной черте"] # 0x21b8 +- "↹": [t: "стрелка влево к черте над стрелкой вправо к черте"] # 0x21b9 +- "↺": [t: "разомкнутый круг против часовой стрелки"] # 0x21ba +- "↻": [t: "разомкнутый круг по часовой стрелке"] # 0x21bb +- "↼": [t: "левый гарпун вверх"] # 0x21bc +- "↽": [t: "левый гарпун вниз"] # 0x21bd +- "↾": [t: "правый гарпун вверх"] # 0x21be +- "↿": [t: "левый гарпун вверх"] # 0x21bf (дубль? в оригинале было 'up harpoon left') +- "⇀": [t: "правый гарпун вверх"] # 0x21c0 +- "⇁": [t: "правый гарпун вниз"] # 0x21c1 +- "⇂": [t: "правый гарпун вниз"] # 0x21c2 (дубль? в оригинале 'down harpoon right') +- "⇃": [t: "левый гарпун вниз"] # 0x21c3 +- "⇄": [t: "стрелка вправо над стрелкой влево"] # 0x21c4 +- "⇅": [t: "стрелка вверх слева от стрелки вниз"] # 0x21c5 +- "⇆": [t: "стрелка влево над стрелкой вправо"] # 0x21c6 +- "⇇": [t: "две стрелки влево"] # 0x21c7 +- "⇈": [t: "две стрелки вверх"] # 0x21c8 +- "⇉": [t: "две стрелки вправо"] # 0x21c9 +- "⇊": [t: "две стрелки вниз"] # 0x21ca +- "⇋": [t: "левый гарпун над правым гарпуном"] # 0x21cb +- "⇌": [t: "правый гарпун над левым гарпуном"] # 0x21cc From 61fe44afffa2479b23ba0729059562a00723ffc1 Mon Sep 17 00:00:00 2001 From: Danil <81031453+Kostenkov-2021@users.noreply.github.com> Date: Mon, 9 Mar 2026 16:13:07 +0300 Subject: [PATCH 32/43] Add Russian ClearSpeak/SimpleSpeak tests Add a Russian language test suite for ClearSpeak and SimpleSpeak. New test modules cover functions, large operators, menclose, fractions (mfrac), roots (mroot), superscripts (msup), multiline, sets, symbols/adornments, geometry, linear algebra, subscripts, and more (alphabets, chemistry, intent, mtable, shared, units). Update tests/languages.rs to include the new "ru" tests. These tests exercise many speech patterns (logs, trig, intervals, sums/products/unions/intersections, integrals, mixed/nested fractions, implied/explicit multiplication, parentheses handling, and menclose notations). --- tests/Languages/ru.rs | 34 + tests/Languages/ru/ClearSpeak/functions.rs | 450 +++++++ tests/Languages/ru/ClearSpeak/large_ops.rs | 201 +++ tests/Languages/ru/ClearSpeak/menclose.rs | 193 +++ tests/Languages/ru/ClearSpeak/mfrac.rs | 274 +++++ tests/Languages/ru/ClearSpeak/mroot.rs | 132 ++ tests/Languages/ru/ClearSpeak/msup.rs | 336 +++++ tests/Languages/ru/ClearSpeak/multiline.rs | 178 +++ tests/Languages/ru/ClearSpeak/sets.rs | 446 +++++++ .../ru/ClearSpeak/symbols_and_adornments.rs | 330 +++++ tests/Languages/ru/SimpleSpeak/functions.rs | 332 +++++ tests/Languages/ru/SimpleSpeak/geometry.rs | 27 + tests/Languages/ru/SimpleSpeak/large_ops.rs | 201 +++ .../ru/SimpleSpeak/linear_algebra.rs | 92 ++ tests/Languages/ru/SimpleSpeak/mfrac.rs | 276 +++++ tests/Languages/ru/SimpleSpeak/msup.rs | 333 +++++ tests/Languages/ru/SimpleSpeak/multiline.rs | 75 ++ tests/Languages/ru/SimpleSpeak/sets.rs | 235 ++++ tests/Languages/ru/SimpleSpeak/subscripts.rs | 49 + tests/Languages/ru/alphabets.rs | 340 ++++++ tests/Languages/ru/chemistry.rs | 721 +++++++++++ tests/Languages/ru/intent.rs | 116 ++ tests/Languages/ru/mtable.rs | 1084 +++++++++++++++++ tests/Languages/ru/shared.rs | 451 +++++++ tests/Languages/ru/units.rs | 489 ++++++++ tests/languages.rs | 1 + 26 files changed, 7396 insertions(+) create mode 100644 tests/Languages/ru.rs create mode 100644 tests/Languages/ru/ClearSpeak/functions.rs create mode 100644 tests/Languages/ru/ClearSpeak/large_ops.rs create mode 100644 tests/Languages/ru/ClearSpeak/menclose.rs create mode 100644 tests/Languages/ru/ClearSpeak/mfrac.rs create mode 100644 tests/Languages/ru/ClearSpeak/mroot.rs create mode 100644 tests/Languages/ru/ClearSpeak/msup.rs create mode 100644 tests/Languages/ru/ClearSpeak/multiline.rs create mode 100644 tests/Languages/ru/ClearSpeak/sets.rs create mode 100644 tests/Languages/ru/ClearSpeak/symbols_and_adornments.rs create mode 100644 tests/Languages/ru/SimpleSpeak/functions.rs create mode 100644 tests/Languages/ru/SimpleSpeak/geometry.rs create mode 100644 tests/Languages/ru/SimpleSpeak/large_ops.rs create mode 100644 tests/Languages/ru/SimpleSpeak/linear_algebra.rs create mode 100644 tests/Languages/ru/SimpleSpeak/mfrac.rs create mode 100644 tests/Languages/ru/SimpleSpeak/msup.rs create mode 100644 tests/Languages/ru/SimpleSpeak/multiline.rs create mode 100644 tests/Languages/ru/SimpleSpeak/sets.rs create mode 100644 tests/Languages/ru/SimpleSpeak/subscripts.rs create mode 100644 tests/Languages/ru/alphabets.rs create mode 100644 tests/Languages/ru/chemistry.rs create mode 100644 tests/Languages/ru/intent.rs create mode 100644 tests/Languages/ru/mtable.rs create mode 100644 tests/Languages/ru/shared.rs create mode 100644 tests/Languages/ru/units.rs diff --git a/tests/Languages/ru.rs b/tests/Languages/ru.rs new file mode 100644 index 00000000..45bce3f9 --- /dev/null +++ b/tests/Languages/ru.rs @@ -0,0 +1,34 @@ +#![allow(non_snake_case)] + +mod ClearSpeak { + mod functions; + mod large_ops; + mod menclose; + mod mfrac; + mod mroot; + mod msup; + mod sets; + mod symbols_and_adornments; + mod multiline; +} + +mod SimpleSpeak { + mod functions; + mod large_ops; + // mod menclose; + mod mfrac; + // mod mroot; + mod msup; + mod sets; + mod geometry; + mod linear_algebra; + mod multiline; + mod subscripts; +} +mod shared; +mod units; +mod chemistry; +mod alphabets; +mod intent; +mod mtable; + diff --git a/tests/Languages/ru/ClearSpeak/functions.rs b/tests/Languages/ru/ClearSpeak/functions.rs new file mode 100644 index 00000000..27b2de58 --- /dev/null +++ b/tests/Languages/ru/ClearSpeak/functions.rs @@ -0,0 +1,450 @@ +/// 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::*; + +#[test] +fn trig_names() { + let expr = " + sinx+ + cosy+ + tanz+ + secα+ + cscϕ+ + cotφ + "; + test("ru", "ClearSpeak", expr, "синус икс плюс косинус игрек плюс тангенс зет плюс секанс альфа, плюс косеканс фи, плюс котангенс фи"); +} + +#[test] +fn hyperbolic_trig_names() { + let expr = " + sinhx+ + coshy+ + tanhz+ + sechα+ + cschϕ+ + cothφ + "; + test("ru", "ClearSpeak", expr, "гиперболический синус икс, плюс гиперболический косинус игрек, плюс гиперболический тангенс зет, плюс гиперболический секанс альфа, плюс гиперболический косеканс фи, плюс гиперболический котангенс фи"); +} + +#[test] +fn inverse_trig() { + let expr = "sin-1x"; + test("ru", "ClearSpeak", expr, "арксинус икс"); +} + +#[test] +fn inverse_trig_trig_inverse() { + let expr = "tan-1x"; + test_ClearSpeak("ru", "ClearSpeak_Trig", "TrigInverse", expr, + "обратный тангенс икс"); +} + +#[test] +fn inverse_trig_arc() { + let expr = "cosh-1x"; + test_ClearSpeak("ru", "ClearSpeak_Trig", "ArcTrig", expr, + "ареакосинус икс"); +} + +#[test] +fn trig_squared() { + let expr = "sin2x"; + test("ru", "ClearSpeak", expr, "синус в квадрате икс"); +} + +#[test] +fn trig_cubed() { + let expr = "tan3x"; + test("ru", "ClearSpeak", expr, "тангенс в кубе икс"); +} + +#[test] +fn trig_fourth() { + let expr = "sec4x"; + test("ru", "ClearSpeak", expr, "секанс в четвертой степени икс"); +} + +#[test] +fn trig_power_other() { + let expr = "sinh>n-1x"; + test("ru", "ClearSpeak", expr, "гиперболический синус икс в степени n минус 1"); +} + +#[test] +fn simple_log() { + let expr = " logx "; + test("ru", "ClearSpeak", expr, "логарифм икс"); +} + +#[test] +fn normal_log() { + let expr = "log(x+y)"; + test("ru", "ClearSpeak", expr, "логарифм от, скобка открывается икс плюс игрек, скобка закрывается"); +} + +#[test] +fn simple_log_with_base() { + let expr = " logbx "; + test("ru", "ClearSpeak", expr, "логарифм икс, по основанию бэ"); +} + +#[test] +fn normal_log_with_base() { + let expr = "logb(x+y)"; + test("ru", "ClearSpeak", expr, "логарифм скобка открывается икс плюс игрек, скобка закрывается, по основанию бэ"); +} + +#[test] +fn simple_ln() { + let expr = " lnx "; + test("ru", "ClearSpeak", expr, "эл эн икс"); +} + +#[test] +fn normal_ln() { + let expr = "ln(x+y)"; + test("ru", "ClearSpeak", expr, "эл эн от, скобка открывается икс плюс игрек, скобка закрывается"); +} + +#[test] +fn simple_natural_log() { + let expr = " lnx "; + test_ClearSpeak("ru", "ClearSpeak_Log", "LnAsNaturalLog", expr, + "натуральный логарифм икс"); +} + +#[test] +fn natural_log() { + let expr = "ln(x+y)"; + test_ClearSpeak("ru", "ClearSpeak_Log", "LnAsNaturalLog", expr, + "натуральный логарифм от, скобка открывается икс плюс игрек, скобка закрывается"); +} + +#[test] +fn explicit_function_call_with_parens() { + let expr = "t(x)"; + test("ru", "ClearSpeak", expr, "тэ от икс"); +} + +#[test] +fn explicit_times_with_parens() { + let expr = "t(x)"; + test("ru", "ClearSpeak", expr, "тэ умножить на икс"); +} + +#[test] +fn explicit_function_call() { + let expr = "tx"; + test("ru", "ClearSpeak", expr, "тэ от икс"); +} + +#[test] +fn explicit_times() { + let expr = "tx"; + test("ru", "ClearSpeak", expr, "тэ икс"); +} + +#[test] +fn test_functions_none_pref() { + let expr = " + log(x+y) + + + f(x+y) + "; + test_ClearSpeak("ru", "ClearSpeak_Functions", "None", expr, + "логарифм от, скобка открывается икс плюс игрек, скобка закрывается; плюс, эф умножить на, скобка открывается икс плюс игрек, скобка закрывается"); +} + +#[test] +fn test_functions_none_pref_multiple_args() { + let expr = " + B ( 2,6 ) + "; + test_ClearSpeak("ru", "ClearSpeak_Functions", "None", expr, + "бэ большое умножить на, скобка открывается 2 запятая 6, скобка закрывается"); +} + +/* + * Tests for times + */ +#[test] +fn no_times_binomial() { + let expr = "x y"; + test("ru", "ClearSpeak", expr, "икс игрек"); +} + +#[test] +fn times_following_paren() { + let expr = " + 2 + ( 3 ) + "; + test("ru", "ClearSpeak", expr, "2 умножить на 3"); +} + +#[test] +fn times_preceding_paren() { + let expr = " + ( 2 ) + 3 + "; + test("ru", "ClearSpeak", expr, "2 умножить на 3"); +} + +#[test] +fn times_sqrt() { + let expr = " + a + b + = + ab + "; + test("ru", "ClearSpeak", expr, "квадратный корень из а; умножить на квадратный корень из бэ; равно, квадратный корень из а бэ"); +} + +#[test] +fn more_implied_times() { + let expr = " + + + + ( + 2x + ) + 2 + + + "; + test_ClearSpeak("ru", "ClearSpeak_ImpliedTimes", "MoreImpliedTimes", expr, + "скобка 2 умножить на икс закрывается в квадрате"); +} + +#[test] +fn explicit_times_more_implied_times() { + let expr = "tx"; + test_ClearSpeak("ru", "ClearSpeak_ImpliedTimes", "MoreImpliedTimes", expr, "тэ умножить на икс"); +} + +#[test] +fn explicit_times_none_simple_right() { + let expr = "2[3 ]"; + test_ClearSpeak("ru", "ClearSpeak_ImpliedTimes", "None", + expr, "2, квадратная скобка открывается 3 квадратная скобка закрывается"); +} + +#[test] +fn explicit_times_none_simple_left() { + let expr = "(21)x"; + test_ClearSpeak("ru", "ClearSpeak_ImpliedTimes", "None", + expr, "скобка открывается 2 минус 1, скобка закрывается; икс"); +} + +#[test] +fn explicit_times_none_superscript() { + let expr = " + f(x)= +x +2 + +( + +x+1 +) + "; + test_ClearSpeak_prefs("ru", + vec![("ClearSpeak_ImpliedTimes", "None"), ("ClearSpeak_Functions", "None")], + expr, "эф скобка открывается икс скобка закрывается; равно; икс в квадрате, скобка открывается икс плюс 1, скобка закрывается"); +} + +/* + * Tests for parens + */ +#[test] +fn no_parens_number() { + let expr = " + ( + 25 + ) + x + "; + test("ru", "ClearSpeak", expr, "25 умножить на икс"); +} + +#[test] +fn no_parens_monomial() { + let expr = " + b + ( + xy + ) + "; + test("ru", "ClearSpeak", expr, "бэ, скобка открывается икс игрек скобка закрывается"); +} + +#[test] +fn no_parens_negative_number() { + let expr = " + 2+ + ( + 2 + ) + "; + test("ru", "ClearSpeak", expr, "2 плюс минус 2"); +} + +#[test] +fn no_parens_negative_number_with_var() { + let expr = " + ( + 2x + ) + + +1 + "; + test("ru", "ClearSpeak", expr, "минус 2 икс, плюс 1"); +} + +#[test] +fn parens_superscript() { + let expr = " + + + + ( + 2x + ) + 2 + + + "; + test("ru", "ClearSpeak", expr, "скобка открывается 2 икс скобка закрывается в квадрате"); +} + +#[test] +fn no_parens_fraction() { + let expr = " + 2 + + + + ( + 12 + ) + "; + test("ru", "ClearSpeak", expr, "2 плюс одна вторая"); +} + +// Tests for the ten types of intervals in ClearSpeak +#[test] +fn parens_interval_open_open() { + let expr = " + ( + c,d + ) + "; + test_ClearSpeak("ru", "ClearSpeak_Paren", "Interval", expr, + "интервал от цэ до дэ, не включая цэ и дэ"); +} + +#[test] +fn parens_interval_closed_open() { + let expr = " + [ + c,d + ) + "; + test_ClearSpeak("ru", "ClearSpeak_Paren", "Interval", expr, + "интервал от цэ до дэ, включая цэ, но не включая дэ"); +} + +#[test] +fn parens_interval_open_closed() { + let expr = " + ( + c,d + ] + "; + test_ClearSpeak("ru", "ClearSpeak_Paren", "Interval", expr, + "интервал от цэ до дэ, не включая цэ, но включая дэ"); +} + +#[test] +fn parens_interval_closed_closed() { + let expr = " + [ + c,d + ] + "; + test_ClearSpeak("ru", "ClearSpeak_Paren", "Interval", expr, + "интервал от цэ до дэ, включая цэ и дэ"); +} + +#[test] +fn parens_interval_neg_infinity_open_open() { + let expr = " + ( + - ,d + ) + "; + test_ClearSpeak("ru", "ClearSpeak_Paren", "Interval", expr, + "интервал от минус бесконечности до дэ, не включая дэ"); +} + +#[test] +fn parens_interval_neg_infinity_closed_open() { + let expr = " + ( + - ,d + ] + "; + test_ClearSpeak("ru", "ClearSpeak_Paren", "Interval", expr, + "интервал от минус бесконечности до дэ, включая дэ"); +} + +#[test] +fn parens_interval_open_open_infinity() { + let expr = " + ( + c, + ) + "; + test_ClearSpeak("ru", "ClearSpeak_Paren", "Interval", expr, + "интервал от цэ до бесконечности, не включая цэ"); +} + +#[test] +fn parens_interval_closed_open_infinity() { + let expr = " + [ + c, + ) + "; + test_ClearSpeak("ru", "ClearSpeak_Paren", "Interval", expr, + "интервал от цэ до бесконечности, включая цэ"); +} + +#[test] +fn parens_interval_neg_infinity_to_infinity() { + let expr = " + ( + - , + ) + "; + test_ClearSpeak("ru", "ClearSpeak_Paren", "Interval", expr, + "интервал от минус бесконечности до бесконечности"); +} + +#[test] +fn parens_interval_neg_infinity_to_pos_infinity() { + let expr = " + ( + - ,+ + ) + "; + test_ClearSpeak("ru", "ClearSpeak_Paren", "Interval", expr, + "интервал от минус бесконечности до плюс бесконечности"); +} diff --git a/tests/Languages/ru/ClearSpeak/large_ops.rs b/tests/Languages/ru/ClearSpeak/large_ops.rs new file mode 100644 index 00000000..860914d8 --- /dev/null +++ b/tests/Languages/ru/ClearSpeak/large_ops.rs @@ -0,0 +1,201 @@ +use crate::common::*; + +#[test] +fn sum_both() { + let expr = " + + + n=1 + 10 + + n + "; + test("ru", "ClearSpeak", expr, "сумма от n равно 1 до 10 от n"); +} + +#[test] +fn sum_under() { + let expr = " + + + S + + i + "; + test("ru", "ClearSpeak", expr, "сумма по эс большое от i"); +} + +#[test] +fn sum_both_msubsup() { + let expr = " + + + n=1 + 10 + + n + "; + test("ru", "ClearSpeak", expr, "сумма от n равно 1 до 10 от n"); +} + +#[test] +fn sum_sub() { + let expr = " + + + S + + i + "; + test("ru", "ClearSpeak", expr, "сумма по эс большое от i"); +} + +#[test] +fn sum() { + let expr = " + + ai + "; + test("ru", "ClearSpeak", expr, "сумма а с индексом i"); +} + +#[test] +fn product_both() { + let expr = " + + + n=1 + 10 + + n + "; + test("ru", "ClearSpeak", expr, "произведение от n равно 1 до 10 от n"); +} + +#[test] +fn product_under() { + let expr = " + + + S + + i + "; + test("ru", "ClearSpeak", expr, "произведение по эс большое от i"); +} + +#[test] +fn product() { + let expr = " + + ai + "; + test("ru", "ClearSpeak", expr, "произведение а с индексом i"); +} + +#[test] +fn intersection_both() { + let expr = " + + + i=1 + 10 + + Si + "; + test("ru", "ClearSpeak", expr, "пересечение от i равно 1 до 10 от; эс большое с индексом i"); +} + +#[test] +fn intersection_under() { + let expr = " + + + C + + Si + "; + test("ru", "ClearSpeak", expr, "пересечение по цэ большое от, эс большое с индексом i"); +} + +#[test] +fn intersection() { + let expr = " + + Si + "; + test("ru", "ClearSpeak", expr, "пересечение эс большое с индексом i"); +} + +#[test] +fn union_both() { + let expr = " + + + i=1 + 10 + + Si + "; + test("ru", "ClearSpeak", expr, "объединение от i равно 1 до 10 от; эс большое с индексом i"); +} + +#[test] +fn union_under() { + let expr = " + + + C + + Si + "; + test("ru", "ClearSpeak", expr, "объединение по цэ большое от, эс большое с индексом i"); +} + +#[test] +fn union() { + let expr = " + + Si + "; + test("ru", "ClearSpeak", expr, "объединение эс большое с индексом i"); +} + +#[test] +fn integral_both() { + let expr = " + + + + 0 + 1 + + f(x ) + + dx + "; + test("ru", "ClearSpeak", expr, "интеграл от 0 до 1 от, эф от икс; д икс"); +} + +#[test] +fn integral_under() { + let expr = " + + + + + f(x ) + dx + "; + test("ru", "ClearSpeak", expr, "интеграл по действительным числам от; эф от икс д икс"); +} + +#[test] +fn integral() { + let expr = " + + f(x ) + dx + "; + test("ru", "ClearSpeak", expr, "интеграл от эф от икс д икс"); +} diff --git a/tests/Languages/ru/ClearSpeak/menclose.rs b/tests/Languages/ru/ClearSpeak/menclose.rs new file mode 100644 index 00000000..f6cea552 --- /dev/null +++ b/tests/Languages/ru/ClearSpeak/menclose.rs @@ -0,0 +1,193 @@ +use crate::common::*; + +#[test] +fn menclose_actuarial() { + let expr = " + 3+2i + "; + test("ru", "ClearSpeak", expr, "актуарный символ, содержащее 3 плюс 2 и конец"); +} + +#[test] +fn menclose_box() { + let expr = " + 3+2i + "; + test("ru", "ClearSpeak", expr, "рамка, окружность, содержащее 3 плюс 2 и конец"); +} + +#[test] +fn menclose_left() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "линия слева, содержащее три вторых конец"); +} + +#[test] +fn menclose_right() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "линия справа, содержащее три вторых конец"); +} + +#[test] +fn menclose_top_bottom() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "линия сверху, снизу, содержащее три вторых конец"); +} + +#[test] +fn menclose_updiagonalstrike() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "диагональ вверх, перечеркивание, содержащее три вторых конец"); +} + +#[test] +fn menclose_downdiagonalstrike() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "диагональ вниз, перечеркивание, содержащее три вторых конец"); +} + +#[test] +fn menclose_cross_out() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "икс, перечеркивание, содержащее три вторых конец"); +} + +#[test] +fn menclose_vertical_horizontal_strike() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "вертикальная, горизонтальная, перечеркивание, содержащее три вторых конец"); +} + +#[test] +fn menclose_leftarrow() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "стрелка влево, содержащее три вторых конец"); +} + +#[test] +fn menclose_right_up_down_arrow() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "стрелка вверх, стрелка вниз, стрелка вправо, содержащее три вторых конец"); +} + +#[test] +fn menclose_northeastarrow() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "стрелка на северо-восток, содержащее три вторых конец"); +} + +#[test] +fn menclose_other_single_arrows() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "стрелка на юго-восток, стрелка на юго-запад, стрелка на северо-запад, содержащее три вторых конец"); +} + +#[test] +fn menclose_northwestsoutheastarrow() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "двунаправленная диагональная стрелка вниз, содержащее три вторых конец"); +} + +#[test] +fn menclose_other_double_arrows() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "двунаправленная вертикальная стрелка, двунаправленная горизонтальная стрелка, двунаправленная диагональная стрелка вверх, содержащее три вторых конец"); +} + +#[test] +fn menclose_madrub() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "арабский символ факториала, содержащее три вторых конец"); +} + +#[test] +fn menclose_phasorangle() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "угол фазы, содержащее три вторых конец"); +} + +#[test] +fn menclose_circle_phasorangle() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "окружность, угол фазы, содержащее три вторых конец"); +} + +#[test] +fn menclose_longdiv() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "знак деления уголком, содержащее три вторых конец"); +} + +#[test] +fn menclose_longdiv_default() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "знак деления уголком, содержащее три вторых конец"); +} + +#[test] +fn menclose_longdiv_empty_string() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "знак деления уголком, содержащее три вторых конец"); +} + +#[test] +fn menclose_longdiv_whitespace_string() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "знак деления уголком, содержащее три вторых конец"); +} + +#[test] +fn menclose_radical() { + let expr = " + 32 + "; + test("ru", "ClearSpeak", expr, "квадратный корень, содержащее три вторых конец"); +} + +#[test] +fn simple_speak_menclose_top_bottom() { + let expr = " + 32 + "; + test("ru", "SimpleSpeak", expr, "линия сверху, снизу, содержащее три вторых конец"); +} diff --git a/tests/Languages/ru/ClearSpeak/mfrac.rs b/tests/Languages/ru/ClearSpeak/mfrac.rs new file mode 100644 index 00000000..ea85c812 --- /dev/null +++ b/tests/Languages/ru/ClearSpeak/mfrac.rs @@ -0,0 +1,274 @@ +/// Tests for fractions +/// includes simple fractions and more complex fractions +/// also tests mixed fractions (implicit and explicit) +use crate::common::*; + +#[test] +fn common_fraction_half() { + let expr = " + 1 2 + "; + test("ru", "ClearSpeak", expr, "одна вторая"); +} + +#[test] +fn common_fraction_thirds() { + let expr = " + 2 3 + "; + test("ru", "ClearSpeak", expr, "две третьих"); +} + +#[test] +fn common_fraction_tenths() { + let expr = " + 17 10 + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "семнадцать десятых"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Ordinal")], expr, "семнадцать десятых"); +} + +#[test] +#[allow(non_snake_case)] +fn not_ClearSpeak_common_fraction_tenths() { + let expr = " + 89 10 + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "89 на 10"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Ordinal")], expr, "восемьдесят девять десятых"); +} + +#[test] +fn non_simple_fraction() { + let expr = " + + + + + x+y + + x-y + + + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "дробь, числитель: икс плюс игрек; знаменатель: икс минус игрек"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Ordinal")], expr, "дробь, числитель: икс плюс игрек; знаменатель: икс минус игрек"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Over")], expr, "икс плюс игрек на икс минус игрек"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "FracOver")], expr, "дробь икс плюс игрек на икс минус игрек"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "General")], expr, "дробь, числитель: икс плюс игрек; знаменатель: икс минус игрек"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "EndFrac")], expr, "дробь, числитель: икс плюс игрек; знаменатель: икс минус игрек; конец дроби"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "GeneralEndFrac")], expr, "дробь, числитель: икс плюс игрек; знаменатель: икс минус игрек; конец дроби"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "OverEndFrac")], expr, "икс плюс игрек на икс минус игрек, конец дроби"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Per")], expr, "икс плюс игрек на икс минус игрек"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Verbose"),("ClearSpeak_Fractions", "Auto")], expr, "дробь, числитель: икс плюс игрек; знаменатель: икс минус игрек; конец дроби"); +} + +#[test] +fn frac_with_units() { + let expr = " + + + 62 + + mi + hr + + + "; + test("ru", "ClearSpeak", expr, "62 мили в час"); +} + + +#[test] +fn mixed_number() { + let expr = " + 3 + 1 2 + "; + test("ru", "ClearSpeak", expr, "3 и одна вторая"); +} + +#[test] +fn explicit_mixed_number() { + let expr = " + 3 + + 1 8 + "; + test("ru", "ClearSpeak", expr, "3 и одна восьмая"); +} + +#[test] +fn mixed_number_big() { + let expr = " + 3 + 7 83 + "; + test("ru", "ClearSpeak", expr, "3 и 7 на 83"); +} + +#[test] +fn simple_text() { + let expr = " + rise run + "; + test("ru", "ClearSpeak", expr, "подъём на длину"); +} + +#[test] +fn number_and_text() { + let expr = " + + + 2miles + + 3gallons + + "; + test("ru", "ClearSpeak", expr, "2 мили на 3 галлона"); +} + + +#[test] +fn nested_simple_fractions() { + let expr = " + + + + + 1 + 2 + + + + + 2 + 3 + + + + + "; + test_prefs("ru", "ClearSpeak", vec![("ClearSpeak_Fractions", "Auto")], expr, "одна вторая на две третьих"); + test_prefs("ru", "ClearSpeak", vec![("ClearSpeak_Fractions", "Ordinal")], expr, "одна вторая на две третьих"); + test_prefs("ru", "ClearSpeak", vec![("ClearSpeak_Fractions", "Over")], expr, "1 на 2 на 2 на 3"); + test_prefs("ru", "ClearSpeak", vec![("ClearSpeak_Fractions", "FracOver")], expr, + "дробь дробь 1 на 2 на дробь 2 на 3"); + test_prefs("ru", "ClearSpeak", vec![("ClearSpeak_Fractions", "General")], expr, + "дробь, числитель: дробь, числитель: 1; знаменатель: 2; и знаменатель: дробь, числитель: 2; знаменатель: 3"); + test_prefs("ru", "ClearSpeak", vec![("ClearSpeak_Fractions", "EndFrac")], expr, "одна вторая на две третьих"); + test_prefs("ru", "ClearSpeak", vec![("ClearSpeak_Fractions", "GeneralEndFrac")], expr, + "дробь, числитель: дробь, числитель: 1; знаменатель: 2; конец дроби; и знаменатель: дробь, числитель: 2; знаменатель: 3; конец дроби; конец дроби"); + test_prefs("ru", "ClearSpeak", vec![("ClearSpeak_Fractions", "OverEndFrac")], expr, + "1 на 2, конец дроби, на 2 на 3, конец дроби; конец дроби"); +} + + +#[test] +fn semi_nested_fraction() { + let expr = " + + + + + 2 + 3 + + x + + 6 + + + "; + test("ru", "ClearSpeak", expr, "две третьих икс на 6"); +} + +#[test] +fn general_nested_fraction() { + let expr = " + + + + + + 10 + n + + + + + 2 + n + + + + + + "; + test("ru", "ClearSpeak", expr, "дробь, числитель: 10 на эн; и знаменатель: 2 на эн"); +} + +#[test] +fn complex_nested_fraction() { + let expr = " + + + + + + n + 10 + n + + + + + 2 + n + + + + + + "; + test("ru", "ClearSpeak", expr, "дробь, числитель: дробь, числитель: эн плюс 10; знаменатель: эн; и знаменатель: 2 на эн"); +} + +#[test] +fn simple_function() { + let expr = "f(x)2"; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "эф от икс на 2"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_Fractions", "Auto")], expr, "эф от икс на 2, конец дроби"); +} + +#[test] +fn function_over_function() { + let expr = " + f(x) + g(x) + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, "эф от икс на же от икс"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_Fractions", "Auto")], expr, "эф от икс на же от икс, конец дроби"); +} + +#[test] +fn non_simple_function_over_function() { + let expr = " + f(x+1) + g(x) + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Fractions", "Auto")], expr, + "дробь, числитель: эф от, открывается скобка икс плюс 1, закрывается скобка; знаменатель: же от икс"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_Fractions", "Auto")], expr, + "дробь, числитель: эф от, открывается скобка икс плюс 1, закрывается скобка; знаменатель: же от икс; конец дроби"); +} + +#[test] +fn binomial() { + let expr = " + 2 + ( + 7 3 + ) + "; + test("ru", "ClearSpeak", expr, "2 умножить на число сочетаний из 7 по 3"); +} diff --git a/tests/Languages/ru/ClearSpeak/mroot.rs b/tests/Languages/ru/ClearSpeak/mroot.rs new file mode 100644 index 00000000..76bbbf8a --- /dev/null +++ b/tests/Languages/ru/ClearSpeak/mroot.rs @@ -0,0 +1,132 @@ +use crate::common::*; + +#[test] +fn msqrt_simple() { + let expr = " + x + "; + test("ru", "ClearSpeak", expr, "квадратный корень из икс"); +} + +#[test] +fn msqrt_simple_end_root() { + let expr = " + x + "; + test_ClearSpeak("ru", "ClearSpeak_Roots", "RootEnd", expr, "квадратный корень из икс, конец корня"); +} + +#[test] +fn msqrt_simple_positive() { + let expr = " + x + "; + test_ClearSpeak("ru", "ClearSpeak_Roots", "PosNegSqRoot", expr, "квадратный корень из икс"); +} + +#[test] +fn msqrt_simple_pos_end_root() { + let expr = " + x + "; + test_ClearSpeak("ru", "ClearSpeak_Roots", "PosNegSqRootEnd", expr, "квадратный корень из икс, конец корня"); +} + +#[test] +fn msqrt_simple_pos_end_with_neg_root() { + let expr = " + - x + - x 3 + "; + test_ClearSpeak("ru", "ClearSpeak_Roots", "PosNegSqRootEnd", expr, + "минус квадратный корень из икс, конец корня; минус, кубический корень из икс, конец корня"); +} + +#[test] +fn mroot_simple_pos_end_with_neg_root() { + let expr = " + - x 3 + - x + + "; + test_ClearSpeak("ru", "ClearSpeak_Roots", "PosNegSqRoot", expr, + "минус кубический корень из икс; минус квадратный корень из икс"); +} + +#[test] +fn neg_without_root() { + let expr = " + - x - y + "; + test("ru", "ClearSpeak", expr, "минус икс минус игрек"); +} + +#[test] +fn msqrt() { + let expr = " + + x + y + + "; + test("ru", "ClearSpeak", expr, "квадратный корень из икс плюс игрек"); +} + +#[test] +fn mroot_as_square_root() { + let expr = " + x 2 + "; + test("ru", "ClearSpeak", expr, "квадратный корень из икс"); +} + +#[test] +fn cube_root() { + let expr = " + x 3 + "; + test("ru", "ClearSpeak", expr, "кубический корень из икс"); +} + +#[test] +fn ordinal_root() { + let expr = " + x 9 + "; + test("ru", "ClearSpeak", expr, "корень девятой степени из икс"); +} + +#[test] +fn simple_mi_root() { + let expr = " + x n + "; + test("ru", "ClearSpeak", expr, "корень степени эн из икс"); +} + +#[test] +fn mroot_simple_pos_end_root() { + let expr = " + x t + "; + test_ClearSpeak("ru", "ClearSpeak_Roots", "PosNegSqRootEnd", expr, "корень степени тэ из икс, конец корня"); +} + +#[test] +fn mroot_simple_end_root() { + let expr = " + x + y + 21 + "; + test_ClearSpeak("ru", "ClearSpeak_Roots", "RootEnd", expr, "корень двадцать первой степени из икс плюс игрек, конец корня"); +} + +#[test] +fn simple_fraction_power() { + let expr = " + + x + 13 + + "; + test("ru", "ClearSpeak", expr, "корень степени одна третья из икс"); +} diff --git a/tests/Languages/ru/ClearSpeak/msup.rs b/tests/Languages/ru/ClearSpeak/msup.rs new file mode 100644 index 00000000..15cf0971 --- /dev/null +++ b/tests/Languages/ru/ClearSpeak/msup.rs @@ -0,0 +1,336 @@ +/// Tests for superscripts +/// simple superscripts +/// complex/nested superscripts +use crate::common::*; + +#[test] +fn squared() { + let expr = " + x 2 + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "икс в квадрате"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "икс во второй"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "икс во второй степени"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "икс в степени 2"); +} + +#[test] +fn cubed() { + let expr = " + x 3 + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "икс в кубе"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "икс в третьей"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "икс в третьей степени"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "икс в степени 3"); +} + +#[test] +fn ordinal_power() { + let expr = " + 3 5 + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 в пятой степени"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 в пятой"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 в пятой степени"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 в степени 5"); +} + +#[test] +fn zero_power() { + let expr = " + 3 0 + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 в нулевой степени"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 в нулевой"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 в нулевой степени"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 в степени 0"); +} + +#[test] +fn simple_mi_power() { + let expr = " + 4 x + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "4 в степени икс"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "4 в степени икс"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "4 в степени икс"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "4 в степени икс"); +} + +#[test] +fn decimal_power() { + let expr = " + 3 5.0 + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 в степени 5.0"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 в степени 5.0"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 в степени 5.0"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 в степени 5.0"); +} + +#[test] +fn non_simple_power() { + let expr = " + 3 y+2 + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 в степени игрек плюс 2"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 в степени игрек плюс 2"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 в степени игрек плюс 2"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 в степени игрек плюс 2"); +} + +#[test] +fn negative_power() { + let expr = " + 3 - 2 + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 в степени минус 2"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 в степени минус 2"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 в степени минус 2"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 в степени минус 2"); +} + +#[test] +fn simple_fraction_power() { + let expr = " + + x + 13 + + "; + test("ru", "ClearSpeak", expr, "икс в степени одна третья"); +} + +#[test] +fn nested_squared_power_with_coef() { + let expr = " + + + 3 + + 2 + + x + 2 + + + + + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 в степени 2 икс в квадрате"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 в степени (показатель: 2 икс во второй, конец показателя)"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 в степени (показатель: 2 икс во второй степени, конец показателя)"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 в степени (показатель: 2 икс в степени 2, конец показателя)"); +} + +#[test] +fn nested_squared_power_with_neg_coef() { + let expr = " + + + 3 + + - + 2 + + x + 2 + + + + + "; + test("ru", "ClearSpeak", expr, "3 в степени минус 2 икс в квадрате"); +} + +#[test] +fn nested_cubed_power() { + let expr = " + + y + + 45 + 3 + + + "; + test("ru", "ClearSpeak", expr, "игрек в степени четыре пятых в кубе"); +} + +#[test] +fn nested_cubed_power_with_neg_base() { + let expr = " + + y + + - + + 45 + 3 + + + + "; + test("ru", "ClearSpeak", expr, "игрек в степени минус четыре пятых в кубе"); +} + +#[test] +fn nested_number_times_squared() { + let expr = " + + + e + + + 1 + 2 + + + x + 2 + + + + + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "e в степени одна вторая икс в квадрате"); +} + +#[test] +fn nested_negative_number_times_squared() { + let expr = " + + + e + + + 1 + 2 + + + x + 2 + + + + + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "e в степени минус одна вторая икс в квадрате"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "e в степени (показатель: минус одна вторая икс во второй, конец показателя)"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "e в степени (показатель: минус одна вторая икс во второй степени, конец показателя)"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "e в степени (показатель: минус одна вторая икс в степени 2, конец показателя)"); +} + +#[test] +fn nested_expr_to_tenth() { + let expr = " + + + 3 + + + 3 + + 10 + + + + + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 в степени (показатель: 3 в десятой степени, конец показателя)"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 в степени (показатель: 3 в десятой, конец показателя)"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 в степени (показатель: 3 в десятой степени, конец показателя)"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 в степени (показатель: 3 в степени 10, конец показателя)"); +} + +#[test] +fn nested_non_simple_squared_exp() { + let expr = " + + + 3 + + + + ( + + x+1 + ) + 2 + + + + + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, "3 в степени (показатель: скобка открывается икс плюс 1, скобка закрывается в квадрате, конец показателя)"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, "3 в степени (показатель: скобка открывается икс плюс 1, скобка закрывается во второй, конец показателя)"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, "3 в степени (показатель: скобка открывается икс плюс 1, скобка закрывается во второй степени, конец показателя)"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, "3 в степени (показатель: скобка открывается икс плюс 1, скобка закрывается в степени 2, конец показателя)"); +} + +#[test] +fn nested_default_power() { + let expr = " + + t + + 45 + n + + +"; + test("ru", "ClearSpeak", expr, "тэ в степени (показатель: четыре пятых в степени эн, конец показателя)"); +} + +#[test] +fn nested_complex_power() { + let expr = " + + + e + + + 1 + 2 + + + + ( + + + + xμ + σ + + + ) + 2 + + + + + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Auto")], expr, + "e в степени (показатель: минус одна вторая умножить на; скобка открывается; дробь, числитель: икс минус мю; знаменатель: сигма; скобка закрывается в квадрате, конец показателя)"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "Ordinal")], expr, + "e в степени (показатель: минус одна вторая умножить на; скобка открывается; дробь, числитель: икс минус мю; знаменатель: сигма; скобка закрывается во второй, конец показателя)"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "OrdinalPower")], expr, + "e в степени (показатель: минус одна вторая умножить на; скобка открывается; дробь, числитель: икс минус мю; знаменатель: сигма; скобка закрывается во второй степени, конец показателя)"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_Exponents", "AfterPower")], expr, + "e в степени (показатель: минус одна вторая умножить на; скобка открывается; дробь, числитель: икс минус мю; знаменатель: сигма; скобка закрывается в степени 2, конец показателя)"); +} + +#[test] +fn default_power() { + let expr = " + + t + + b+1 + 3 + + + "; + test("ru", "ClearSpeak", expr, "тэ в степени дробь, числитель: бэ плюс 1; знаменатель: 3"); +} diff --git a/tests/Languages/ru/ClearSpeak/multiline.rs b/tests/Languages/ru/ClearSpeak/multiline.rs new file mode 100644 index 00000000..85cc8b6c --- /dev/null +++ b/tests/Languages/ru/ClearSpeak/multiline.rs @@ -0,0 +1,178 @@ +use crate::common::*; + +#[test] +fn case_1() { + let expr = " + f + + ( + x + ) + + = + + { + + -1ifx<0 + 0ifx=0 + 1ifx>0 + + + + "; + test_ClearSpeak("ru", "ClearSpeak_MultiLineLabel", "Auto", expr, + "эф от икс равно; 3 случая; \ + случай 1; минус 1, если икс меньше 0; \ + случай 2; 0, если икс равно 0; \ + случай 3; 1, если икс больше 0" + ) +} + +#[test] +fn equation_auto() { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("ru", "ClearSpeak_MultiLineLabel", "Auto", expr, + "2 строки; \ + строка 1; икс плюс игрек равно 7; \ + строка 2; 2 икс плюс 3 игрек равно 17"); +} + +#[test] +fn equation_plus_at_start() { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("ru", "ClearSpeak_MultiLineLabel", "Auto", expr, "2 строки; \ + строка 1; икс плюс игрек равно 7; \ + строка 2; 2 икс, плюс 3 игрек, равно 17"); +} + +#[test] +fn equation_case() { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("ru", "ClearSpeak_MultiLineLabel", "Case", expr, + "2 случая; случай 1; икс плюс игрек равно 7; случай 2; 2 икс плюс 3 игрек равно 17"); +} + +#[test] +fn equation_constraint() { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("ru", "ClearSpeak_MultiLineLabel", "Constraint", expr, "2 ограничения; \ + ограничение 1; икс плюс игрек равно 7; \ + ограничение 2; 2 икс плюс 3 игрек равно 17"); +} + +#[test] +fn equation_equation() { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("ru", "ClearSpeak_MultiLineLabel", "Equation", expr, "2 уравнения; \ + уравнение 1; икс плюс игрек равно 7; \ + уравнение 2; 2 икс плюс 3 игрек равно 17"); +} + +#[test] +fn equation_line() { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("ru", "ClearSpeak_MultiLineLabel", "Line", expr, "2 строки; \ + строка 1; икс плюс игрек равно 7; \ + строка 2; 2 икс плюс 3 игрек равно 17"); +} + +#[test] +fn equation_none() { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("ru", "ClearSpeak_MultiLineLabel", "None", expr, + "2 строки; \ + икс плюс игрек равно 7; \ + 2 икс плюс 3 игрек равно 17"); +} + +#[test] +fn equation_row() { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("ru", "ClearSpeak_MultiLineLabel", "Row", expr, "2 строки; \ + строка 1; икс плюс игрек равно 7; \ + строка 2; 2 икс плюс 3 игрек равно 17"); +} + +#[test] +fn equation_step() { + let expr = " + + + x+y = 7 + 2x+3y = 17 + + + "; + test_ClearSpeak("ru", "ClearSpeak_MultiLineLabel", "Step", expr, "2 шага; \ + шаг 1; икс плюс игрек равно 7; \ + шаг 2; 2 икс плюс 3 игрек равно 17"); +} + +#[test] +fn continued_row() { + let expr = " + + x=y + +1 + y=1 + +"; +test("ru", "SimpleSpeak", expr, + "2 уравнения; уравнение 1; икс равно игрек плюс 1; уравнение 2; игрек равно 1"); +} diff --git a/tests/Languages/ru/ClearSpeak/sets.rs b/tests/Languages/ru/ClearSpeak/sets.rs new file mode 100644 index 00000000..26a1cf9b --- /dev/null +++ b/tests/Languages/ru/ClearSpeak/sets.rs @@ -0,0 +1,446 @@ +use crate::common::*; + +#[test] +fn complex() { + let expr = " + + "; + test("ru", "ClearSpeak", expr, "комплексные числа"); +} + +#[test] +fn natural() { + let expr = " + + "; + test("ru", "ClearSpeak", expr, "натуральные числа"); +} + +#[test] +fn rationals() { + let expr = " + + "; + test("ru", "ClearSpeak", expr, "рациональные числа"); +} + +#[test] +fn reals() { + let expr = " + + "; + test("ru", "ClearSpeak", expr, "действительные числа"); +} + +#[test] +fn integers() { + let expr = " + + "; + test("ru", "ClearSpeak", expr, "целые числа"); +} + +#[test] +fn msup_complex() { + let expr = " + + + 2 + + "; + test("ru", "ClearSpeak", expr, "цэ 2"); +} + +#[test] +fn msup_natural() { + let expr = " + + + 2 + + "; + test("ru", "ClearSpeak", expr, "эн 2"); +} + +#[test] +fn msup_rationals() { + let expr = " + + + 2 + + "; + test("ru", "ClearSpeak", expr, "ку 2"); +} + +#[test] +fn msup_reals() { + let expr = " + + + 3 + + "; + test("ru", "ClearSpeak", expr, "эр 3"); +} + +#[test] +fn msup_integers() { + let expr = " + + + 4 + + "; + test("ru", "ClearSpeak", expr, "зэ 4"); +} + +#[test] +fn msup_positive_integers() { + let expr = " + + + + + + "; + test("ru", "ClearSpeak", expr, "положительные целые числа"); +} + +#[test] +fn msup_negative_integers() { + let expr = " + + + - + + "; + test("ru", "ClearSpeak", expr, "отрицательные целые числа"); +} + +#[test] +fn msup_positive_rationals() { + let expr = " + + + + + + "; + test("ru", "ClearSpeak", expr, "положительные рациональные числа"); +} + +#[test] +fn msup_negative_rationals() { + let expr = " + + + - + + "; + test("ru", "ClearSpeak", expr, "отрицательные рациональные числа"); +} + +#[test] +fn empty_set() { + let expr = " + { } + "; + test("ru", "ClearSpeak", expr, "пустое множество"); +} + +#[test] +fn single_element_set() { + let expr = " + { 12} + "; + test("ru", "ClearSpeak", expr, "множество 12"); +} + +#[test] +fn multiple_element_set() { + let expr = " + { 5 , 10 , 15 } + "; + test("ru", "ClearSpeak", expr, "множество 5 запятая, 10 запятая, 15"); +} + +#[test] +fn set_with_colon() { + let expr = " + { x:x>2 } + "; + test("ru", "ClearSpeak", expr, "множество всех x таких, что x больше 2"); +} + +#[test] +fn set_with_bar() { + let expr = " + { x|x>2 } + "; + test("ru", "ClearSpeak", expr, "множество всех x таких, что x больше 2"); +} + +#[test] +fn element_alone() { + let expr = " + 3+2i + "; + test("ru", "ClearSpeak", expr, "3 плюс 2 i, не принадлежит действительным числам"); +} + +#[test] +fn element_under_sum() { + let expr = " + + + i + + + 1 + i 2 + + "; + test("ru", "ClearSpeak", expr, + "сумма по i, принадлежащему целым числам, от; дробь, числитель: 1; знаменатель: i в квадрате"); +} + +#[test] +fn complicated_set_with_colon() { + let expr = " + { + x + + + : + 2 + < + x + < + 7 + } + "; + test("ru", "ClearSpeak", expr, "множество всех x из целых чисел, таких что 2 меньше x меньше 7"); +} + +#[test] +fn complicated_set_with_mtext() { + let expr = " + { + x + | + x is an even number + } + "; + test("ru", "ClearSpeak", expr, + "множество всех x из натуральных чисел, таких что x — чётное число"); +} + +#[test] +fn set_with_bar_member() { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak("ru", "ClearSpeak_SetMemberSymbol", "Member", + expr, "множество всех x, принадлежащих целым числам, таких что x больше 5"); +} + +#[test] +fn element_alone_member() { + let expr = " + 3+2i + "; + test_ClearSpeak("ru", "ClearSpeak_SetMemberSymbol", "Member", + expr, "3 плюс 2 i, не принадлежит действительным числам"); +} + +#[test] +fn element_under_sum_member() { + let expr = " + + + i + + + 1 + i 2 + + "; + test_ClearSpeak("ru", "ClearSpeak_SetMemberSymbol", "Member", + expr, "сумма по i, принадлежащему целым числам, от; дробь, числитель: 1; знаменатель: i в квадрате"); +} + +#[test] +fn set_with_bar_element() { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak("ru", "ClearSpeak_SetMemberSymbol", "Element", + expr, "множество всех x, являющихся элементами целых чисел, таких что x больше 5"); +} + +#[test] +fn element_alone_element() { + let expr = " + 3+2i + "; + test_ClearSpeak("ru", "ClearSpeak_SetMemberSymbol", "Element", + expr, "3 плюс 2 i, не является элементом действительных чисел"); +} + +#[test] +fn element_under_sum_element() { + let expr = " + + + i + + + 1 + i 2 + + "; + test_ClearSpeak("ru", "ClearSpeak_SetMemberSymbol", "Element", + expr, "сумма по i, являющемуся элементом целых чисел, от; дробь, числитель: 1; знаменатель: i в квадрате"); +} + +#[test] +fn set_with_bar_in() { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak("ru", "ClearSpeak_SetMemberSymbol", "In", + expr, "множество всех x из целых чисел, таких что x больше 5"); +} + +#[test] +fn element_alone_in() { + let expr = " + 3+2i + "; + test_ClearSpeak("ru", "ClearSpeak_SetMemberSymbol", "In", + expr, "3 плюс 2 i, не принадлежит действительным числам"); +} + +#[test] +fn element_under_sum_in() { + let expr = " + + + i + + + 1 + i 2 + + "; + test_ClearSpeak("ru", "ClearSpeak_SetMemberSymbol", "In", + expr, "сумма по i из целых чисел, от; дробь, числитель: 1; знаменатель: i в квадрате"); +} + +#[test] +fn set_with_bar_belongs() { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak("ru", "ClearSpeak_SetMemberSymbol", "Belongs", + expr, "множество всех x, входящих в целые числа, таких что x больше 5"); +} + +#[test] +fn element_alone_belongs() { + let expr = " + 3+2i + "; + test_ClearSpeak("ru", "ClearSpeak_SetMemberSymbol", "Belongs", + expr, "3 плюс 2 i, не входит в действительные числа"); +} + +#[test] +fn element_under_sum_belongs() { + let expr = " + + + i + + + 1 + i 2 + + "; + test_ClearSpeak("ru", "ClearSpeak_SetMemberSymbol", "Belongs", + expr, "сумма по i, входящему в целые числа, от; дробь, числитель: 1; знаменатель: i в квадрате"); +} + +#[test] +fn set_member_woall() { + let expr = " + { + x + + + : + x + > + 5 + } + "; + test_ClearSpeak_prefs("ru", vec![("ClearSpeak_SetMemberSymbol", "Member"), ("ClearSpeak_Sets", "woAll")], + expr, "множество x, принадлежащих целым числам, таких что x больше 5"); +} + +#[test] +fn multiple_element_set_woall() { + let expr = " + { 5 , 10 , 15 } + "; + test_ClearSpeak("ru", "ClearSpeak_Sets", "woAll", expr, "множество 5 запятая, 10 запятая, 15"); +} + +#[test] +fn multiple_element_set_silent_bracket() { + let expr = " + { 5 , 10 , 15 } + "; + test_ClearSpeak("ru", "ClearSpeak_Sets", "SilentBracket", expr, "5 запятая, 10 запятая, 15"); +} + +#[test] +fn silent_bracket() { + let expr = " + {x|x>2} + "; + test_ClearSpeak("ru", "ClearSpeak_Sets", "SilentBracket", expr, + "множество всех x таких, что x больше 2"); +} + diff --git a/tests/Languages/ru/ClearSpeak/symbols_and_adornments.rs b/tests/Languages/ru/ClearSpeak/symbols_and_adornments.rs new file mode 100644 index 00000000..d2824ab7 --- /dev/null +++ b/tests/Languages/ru/ClearSpeak/symbols_and_adornments.rs @@ -0,0 +1,330 @@ +use crate::common::*; + +#[test] +fn multiplication() { + let expr = " + 2×3 + "; + test("ru", "ClearSpeak", expr, "2 умножить на 3"); +} + +#[test] +fn multiplication_by() { + let expr = " + 2×3 + "; + test_ClearSpeak("ru", "ClearSpeak_MultSymbolX", "By", expr, "2 на 3"); +} + +#[test] +fn multiplication_cross() { + let expr = " + u×v + "; + test_ClearSpeak("ru", "ClearSpeak_MultSymbolX", "Cross", expr, "u векторное произведение v"); +} + +#[test] +fn ellipses_auto_start() { + let expr = " + , + -2,-1,0 + "; + test("ru", "ClearSpeak", expr, "многоточие запятая, минус 2 запятая, минус 1 запятая, 0"); +} + +#[test] +fn ellipses_auto_end() { + let expr = " + 1 + , + 2 + , + 3 + , + + "; + test_ClearSpeak("ru", "ClearSpeak_Ellipses", "Auto", expr, "1 запятая, 2 запятая, 3 запятая, многоточие"); +} + +#[test] +fn ellipses_auto_middle() { + let expr = " + + 1 + , + 2 + , + 3 + , + + , + 20 + + "; + test_ClearSpeak("ru", "ClearSpeak_Ellipses", "Auto", expr, + "1 запятая, 2 запятая, 3 запятая, многоточие запятая, 20"); +} + +#[test] +fn ellipses_auto_both() { + let expr = " + , + -2,-1,0,1,2 + , + "; + test_ClearSpeak("ru", "ClearSpeak_Ellipses", "Auto", expr, + "многоточие запятая, минус 2 запятая, минус 1 запятая, 0 запятая, 1 запятая, 2 запятая, многоточие"); +} + +#[test] +fn ellipses_and_so_on_start() { + let expr = " + , + -2,-1,0 + "; + test_ClearSpeak("ru", "ClearSpeak_Ellipses", "AndSoOn", expr, "многоточие запятая, минус 2 запятая, минус 1 запятая, 0"); +} + +#[test] +fn ellipses_and_so_on_end() { + let expr = " + 1 + , + 2 + , + 3 + , + + "; + test_ClearSpeak("ru", "ClearSpeak_Ellipses", "AndSoOn", expr, "1 запятая, 2 запятая, 3 и так далее"); +} + +#[test] +fn ellipses_and_so_on_middle() { + let expr = " + + 1 + , + 2 + , + 3 + , + + , + 20 + + "; + test_ClearSpeak("ru", "ClearSpeak_Ellipses", "AndSoOn", expr, + "1 запятая, 2 запятая, 3 и так далее до 20"); +} + +#[test] +fn ellipses_and_so_on_both() { + let expr = " + , + -2,-1,0,1,2 + , + "; + test_ClearSpeak("ru", "ClearSpeak_Ellipses", "AndSoOn", expr, + "многоточие запятая, минус 2 запятая, минус 1 запятая, 0 запятая, 1 запятая, 2 запятая, многоточие"); +} + +#[test] +fn vertical_line_auto() { + let expr = " + 3|6 + "; + test_ClearSpeak("ru", "ClearSpeak_VerticalLine", "Auto", expr, + "3 делит 6"); +} + +#[test] +fn vertical_line_divides() { + let expr = " + 3|6 + "; + test_ClearSpeak("ru", "ClearSpeak_VerticalLine", "Divides", expr, + "3 делит 6"); +} + +#[test] +fn vertical_line_given() { + let expr = " + 3|6 + "; + test_ClearSpeak("ru", "ClearSpeak_VerticalLine", "Given", expr, + "3 при условии 6"); +} + +#[test] +fn vertical_line_probability_given() { + let expr = " + P + + ( + + A + | + B + + ) + + "; + test_ClearSpeak_prefs("ru", vec![("ClearSpeak_VerticalLine", "Given"), ("ClearSpeak_ImpliedTimes", "None")], + expr, "пэ большое, открывается скобка, эй большое при условии бэ большое, закрывается скобка"); +} + +#[test] +fn vertical_line_set() { + let expr = " + { + + x + | + x + > + 0 + + } + "; + test_ClearSpeak("ru", "ClearSpeak_VerticalLine", "Auto", expr, + "множество всех x таких, что x больше 0"); +} + +#[test] +fn vertical_line_set_such_that() { + let expr = " + { + + x + | + x + > + 0 + + } + "; + test_ClearSpeak("ru", "ClearSpeak_VerticalLine", "SuchThat", expr, + "множество всех x таких, что x больше 0"); +} + +#[test] +fn vertical_line_set_given() { + let expr = " + { + + x + | + x + > + 0 + + } + "; + test_ClearSpeak("ru", "ClearSpeak_VerticalLine", "Given", expr, + "множество всех x таких, что x больше 0"); +} + +#[test] +fn vertical_line_set_and_abs() { + let expr = " + { + + x + | + + | + x + | + + > + 2 + + } + "; + test_ClearSpeak("ru", "ClearSpeak_VerticalLine", "Auto", expr, + "множество всех x таких, что абсолютное значение x; больше 2"); +} + +#[test] +fn vertical_line_evaluated_at() { + let expr = " + f + + ( + x + ) + + + | + + x + = + 5 + + + "; + test_ClearSpeak("ru", "ClearSpeak_VerticalLine", "Auto", expr, + "эф от икс, вычисленное при, x равно 5"); +} + +#[test] +fn vertical_line_evaluated_at_both() { + let expr = " + + x + 2 + + + + x + + | + 0 + 1 + + "; + test_ClearSpeak("ru", "ClearSpeak_VerticalLine", "Auto", expr, + "икс в квадрате плюс икс, вычисленное при 1 минус то же выражение, вычисленное при 0"); +} + +#[test] +fn vertical_line_evaluated_at_divides() { + let expr = " + f + + ( + x + ) + + + | + + x + = + 5 + + + "; + test_ClearSpeak("ru", "ClearSpeak_VerticalLine", "Divides", expr, + "эф от икс, вычисленное при, x равно 5"); +} + +#[test] +fn vertical_line_evaluated_at_both_given() { + let expr = " + + x + 2 + + + + x + + | + 0 + 1 + + "; + test_ClearSpeak("ru", "ClearSpeak_VerticalLine", "Given", expr, + "икс в квадрате плюс икс, вычисленное при 1 минус то же выражение, вычисленное при 0"); +} \ No newline at end of file diff --git a/tests/Languages/ru/SimpleSpeak/functions.rs b/tests/Languages/ru/SimpleSpeak/functions.rs new file mode 100644 index 00000000..660e27a7 --- /dev/null +++ b/tests/Languages/ru/SimpleSpeak/functions.rs @@ -0,0 +1,332 @@ +/// 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::*; + +#[test] +fn trig_names() { + let expr = " + sinx+ + cosy+ + tanz+ + secα+ + cscϕ+ + cotφ + "; + test("ru", "SimpleSpeak", expr, "синус икс плюс косинус игрек плюс тангенс зет плюс секанс альфа, плюс косеканс фи, плюс котангенс фи"); +} + +#[test] +fn hyperbolic_trig_names() { + let expr = " + sinhx+ + coshy+ + tanhz+ + sechα+ + cschϕ+ + cothφ + "; + test("ru", "SimpleSpeak", expr, "гиперболический синус икс, плюс \ + гиперболический косинус игрек, плюс \ + гиперболический тангенс зет, плюс \ + гиперболический секанс альфа, плюс \ + гиперболический косеканс фи, плюс \ + гиперболический котангенс фи"); +} + +#[test] +fn inverse_trig() { + let expr = "sin-1x"; + test("ru", "SimpleSpeak", expr, "арксинус икс"); +} + +#[test] +fn trig_squared() { + let expr = "sin2x"; + test("ru", "SimpleSpeak", expr, "синус в квадрате икс"); +} + +#[test] +fn trig_cubed() { + let expr = "tan3x"; + test("ru", "SimpleSpeak", expr, "тангенс в кубе икс"); +} + +#[test] +fn trig_fourth() { + let expr = "sec4x"; + test("ru", "SimpleSpeak", expr, "секанс в четвертой степени икс"); +} + +#[test] +fn trig_power_other() { + let expr = "sinh>n-1x"; + test("ru", "SimpleSpeak", expr, "гиперболический синус икс в степени n минус 1"); +} + +#[test] +fn simple_log() { + let expr = " logx "; + test("ru", "SimpleSpeak", expr, "логарифм икс"); +} + +#[test] +fn normal_log() { + let expr = "log(x+y)"; + test("ru", "SimpleSpeak", expr, "логарифм от, скобка открывается икс плюс игрек, скобка закрывается"); +} + +#[test] +fn simple_log_with_base() { + let expr = " logbx "; + test("ru", "SimpleSpeak", expr, "логарифм по основанию бэ от икс"); +} + +#[test] +fn normal_log_with_base() { + let expr = "logb(x+y)"; + test("ru", "SimpleSpeak", expr, "логарифм по основанию бэ от, скобка открывается икс плюс игрек, скобка закрывается"); +} + +#[test] +fn normal_ln() { + let expr = "ln(x+y)"; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "эл эн, открывается икс плюс игрек закрывается"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Medium")], + expr, "натуральный логарифм от, скобка открывается икс плюс игрек, скобка закрывается"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Verbose")], + expr, "натуральный логарифм от, скобка открывается икс плюс игрек, скобка закрывается"); +} + +#[test] +fn simple_ln() { + let expr = " lnx "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "эл эн икс"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Medium")], + expr, "натуральный логарифм икс"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Verbose")], + expr, "натуральный логарифм икс"); +} + +#[test] +fn other_names() { + let expr = " Covx "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "Cov икс"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Medium")], + expr, "ковариация икс"); + let expr = " exp(x) "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "эксп от икс"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Medium")], + expr, "экспонента от икс"); +} + +#[test] +fn explicit_function_call_with_parens() { + let expr = "t(x)"; + test("ru", "SimpleSpeak", expr, "тэ от икс"); +} + +#[test] +fn explicit_times_with_parens() { + let expr = "t(x)"; + test("ru", "SimpleSpeak", expr, "тэ умножить на икс"); +} + +#[test] +fn explicit_function_call() { + let expr = "tx"; + test("ru", "SimpleSpeak", expr, "тэ от икс"); +} + +#[test] +fn explicit_times() { + let expr = "tx"; + test("ru", "SimpleSpeak", expr, "тэ икс"); +} + +/* + * Tests for times + */ +#[test] +fn no_times_binomial() { + let expr = "x y"; + test("ru", "SimpleSpeak", expr, "икс игрек"); +} + +#[test] +fn times_following_paren() { + let expr = " + 2 + ( 3 ) + "; + test("ru", "SimpleSpeak", expr, "2 умножить на 3"); +} + +#[test] +fn times_preceding_paren() { + let expr = " + ( 2 ) + 3 + "; + test("ru", "SimpleSpeak", expr, "2 умножить на 3"); +} + +#[test] +fn no_times_sqrt() { + let expr = " + a + b + = + ab + "; + test("ru", "SimpleSpeak", expr, + "квадратный корень из а; умножить на квадратный корень из бэ; равно, квадратный корень из а бэ конец корня"); + test_prefs("ru", "SimpleSpeak", vec![("Impairment", "LearningDisability")], expr, + "квадратный корень из а; умножить на квадратный корень из бэ; равно, квадратный корень из а бэ"); +} + +/* + * Tests for parens + */ +#[test] +fn no_parens_number() { + let expr = " + ( + 25 + ) + x + "; + test("ru", "SimpleSpeak", expr, "25 умножить на икс"); +} + +#[test] +fn no_parens_monomial() { + let expr = " + b + ( + xy + ) + "; + test("ru", "SimpleSpeak", expr, "бэ, скобка открывается икс игрек скобка закрывается"); +} + +#[test] +fn no_parens_negative_number() { + let expr = " + 2+ + ( + 2 + ) + "; + test("ru", "SimpleSpeak", expr, "2 плюс минус 2"); +} + +#[test] +fn no_parens_negative_number_with_var() { + let expr = " + ( + 2x + ) + +1 + "; + test("ru", "SimpleSpeak", expr, "минус 2 икс, плюс 1"); +} + +#[test] +fn parens_superscript() { + let expr = " + + + + ( + 2x + ) + 2 + + + "; + test("ru", "SimpleSpeak", expr, "скобка открывается 2 икс скобка закрывается в квадрате"); +} + +#[test] +fn no_parens_fraction() { + let expr = " + 2 + + + + ( + 12 + ) + "; + test("ru", "SimpleSpeak", expr, "2 плюс одна вторая"); +} + +// Tests for the four types of intervals in SimpleSpeak +#[test] +fn parens_interval_open_open() { + let expr = " + ( + (c,d) + ) + "; + test("ru", "SimpleSpeak", expr, "открытый интервал от цэ до дэ"); +} + +#[test] +fn parens_interval_closed_open() { + let expr = " + [ + [(]c,d) + ) + "; + test("ru", "SimpleSpeak", expr, "закрыто-открытый интервал от цэ до дэ"); +} + +#[test] +fn parens_interval_open_closed() { + let expr = " + ( + (c,d] + ] + "; + test("ru", "SimpleSpeak", expr, "открыто-закрытый интервал от цэ до дэ"); +} + +#[test] +fn parens_interval_closed_closed() { + let expr = " + [ + [(]c,d] + ] + "; + test("ru", "SimpleSpeak", expr, "закрытый интервал от цэ до дэ"); +} + +#[test] +fn parens_interval_neg_infinity_open_open() { + let expr = " + ( + - ,d) + ) + "; + test("ru", "SimpleSpeak", expr, + "открытый интервал от минус бесконечности до дэ"); +} + +#[test] +fn parens_interval_neg_infinity_open_closed() { + let expr = " + ( + - ,d] + ] + "; + test("ru", "SimpleSpeak", expr, + "открыто-закрытый интервал от минус бесконечности до дэ"); +} + diff --git a/tests/Languages/ru/SimpleSpeak/geometry.rs b/tests/Languages/ru/SimpleSpeak/geometry.rs new file mode 100644 index 00000000..522fa04e --- /dev/null +++ b/tests/Languages/ru/SimpleSpeak/geometry.rs @@ -0,0 +1,27 @@ +/// Tests for geometry listed in intent +/// ABC as mtext and as separated letters +use crate::common::*; + +#[test] +fn arc() { + let expr = " BC "; + test("ru", "SimpleSpeak", expr, "дуга бэ большое цэ большое"); +} + +#[test] +fn ray() { + let expr = " XY¯ "; + test("ru", "SimpleSpeak", expr, "отрезок икс большое игрек большое"); +} + +#[test] +fn arc_mtext() { + let expr = " BC "; + test("ru", "SimpleSpeak", expr, "дуга бэ большое цэ большое"); +} + +#[test] +fn ray_mtext() { + let expr = " XY "; + test("ru", "SimpleSpeak", expr, "луч икс большое игрек большое"); +} diff --git a/tests/Languages/ru/SimpleSpeak/large_ops.rs b/tests/Languages/ru/SimpleSpeak/large_ops.rs new file mode 100644 index 00000000..1131fa09 --- /dev/null +++ b/tests/Languages/ru/SimpleSpeak/large_ops.rs @@ -0,0 +1,201 @@ +use crate::common::*; + +#[test] +fn sum_both() { + let expr = " + + + n=1 + 10 + + n + "; + test("ru", "SimpleSpeak", expr, "сумма от n равно 1 до 10 от n"); +} + +#[test] +fn sum_under() { + let expr = " + + + S + + i + "; + test("ru", "SimpleSpeak", expr, "сумма по эс большое от i"); +} + +#[test] +fn sum_both_msubsup() { + let expr = " + + + n=1 + 10 + + n + "; + test("ru", "SimpleSpeak", expr, "сумма от n равно 1 до 10 от n"); +} + +#[test] +fn sum_sub() { + let expr = " + + + S + + i + "; + test("ru", "SimpleSpeak", expr, "сумма по эс большое от i"); +} + +#[test] +fn sum() { + let expr = " + + ai + "; + test("ru", "SimpleSpeak", expr, "сумма а с индексом i"); +} + +#[test] +fn product_both() { + let expr = " + + + n=1 + 10 + + n + "; + test("ru", "SimpleSpeak", expr, "произведение от n равно 1 до 10 от n"); +} + +#[test] +fn product_under() { + let expr = " + + + S + + i + "; + test("ru", "SimpleSpeak", expr, "произведение по эс большое от i"); +} + +#[test] +fn product() { + let expr = " + + ai + "; + test("ru", "SimpleSpeak", expr, "произведение а с индексом i"); +} + +#[test] +fn intersection_both() { + let expr = " + + + i=1 + 10 + + Si + "; + test("ru", "SimpleSpeak", expr, "пересечение от i равно 1 до 10 от; эс большое с индексом i"); +} + +#[test] +fn intersection_under() { + let expr = " + + + C + + Si + "; + test("ru", "SimpleSpeak", expr, "пересечение по цэ большое от, эс большое с индексом i"); +} + +#[test] +fn intersection() { + let expr = " + + Si + "; + test("ru", "SimpleSpeak", expr, "пересечение эс большое с индексом i"); +} + +#[test] +fn union_both() { + let expr = " + + + i=1 + 10 + + Si + "; + test("ru", "SimpleSpeak", expr, "объединение от i равно 1 до 10 от; эс большое с индексом i"); +} + +#[test] +fn union_under() { + let expr = " + + + C + + Si + "; + test("ru", "SimpleSpeak", expr, "объединение по цэ большое от, эс большое с индексом i"); +} + +#[test] +fn union() { + let expr = " + + Si + "; + test("ru", "SimpleSpeak", expr, "объединение эс большое с индексом i"); +} + +#[test] +fn integral_both() { + let expr = " + + + + 0 + 1 + + f(x ) + + dx + "; + test("ru", "SimpleSpeak", expr, "интеграл от 0 до 1 от, эф от икс; д икс"); +} + +#[test] +fn integral_under() { + let expr = " + + + + + f(x ) + dx + "; + test("ru", "SimpleSpeak", expr, "интеграл по действительным числам от; эф от икс д икс"); +} + +#[test] +fn integral() { + let expr = " + + f(x ) + dx + "; + test("ru", "SimpleSpeak", expr, "интеграл от эф от икс д икс"); +} \ No newline at end of file diff --git a/tests/Languages/ru/SimpleSpeak/linear_algebra.rs b/tests/Languages/ru/SimpleSpeak/linear_algebra.rs new file mode 100644 index 00000000..d495b3df --- /dev/null +++ b/tests/Languages/ru/SimpleSpeak/linear_algebra.rs @@ -0,0 +1,92 @@ +use crate::common::*; + +#[test] +fn transpose() { + let expr = " MT "; + test("ru", "SimpleSpeak", expr, "эм большое транспонированная"); +} + +#[test] +fn trace() { + let expr = " TrM "; + test("ru", "SimpleSpeak", expr, "след от эм большое"); +} + +#[test] +fn dimension() { + let expr = " DimM "; + test("ru", "SimpleSpeak", expr, "размерность эм большое"); +} + +#[test] +fn homomorphism() { + let expr = " Hom(M) "; + test("ru", "SimpleSpeak", expr, "гомоморфизм от эм большое"); +} + +#[test] +fn kernel() { + let expr = " ker(L) "; + test("ru", "SimpleSpeak", expr, "ядро от эль большое"); +} + +#[test] +fn norm() { + let expr = " + + + f + + + +"; + test("ru", "SimpleSpeak", expr, "норма от эф"); +} + +#[test] +fn norm_non_simple() { + let expr = " + + + x + + + y + + + +"; + test("ru", "SimpleSpeak", expr, "норма от икс плюс игрек конец нормы"); +} + +#[test] +fn norm_subscripted() { + let expr = " + + + + f + + + p + + +"; + test("ru", "SimpleSpeak", expr, "p-норма от эф"); +} + +#[test] +fn not_gradient() { + // 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("ru", "SimpleSpeak", expr, "скобка открывается, бэ умножить на набла, скобка закрывается; умножить на а"); +} \ No newline at end of file diff --git a/tests/Languages/ru/SimpleSpeak/mfrac.rs b/tests/Languages/ru/SimpleSpeak/mfrac.rs new file mode 100644 index 00000000..a8bf0ec7 --- /dev/null +++ b/tests/Languages/ru/SimpleSpeak/mfrac.rs @@ -0,0 +1,276 @@ +/// Tests for fractions +/// includes simple fractions and more complex fractions +/// also tests mixed fractions (implicit and explicit) +use crate::common::*; + +#[test] +fn common_fraction_half() { + let expr = " + 1 2 + "; + test("ru", "SimpleSpeak", expr, "одна вторая"); +} + +#[test] +fn common_fraction_thirds() { + let expr = " + 2 3 + "; + test("ru", "SimpleSpeak", expr, "две третьих"); +} + +#[test] +fn common_fraction_tenths() { + let expr = " + 17 10 + "; + test("ru", "SimpleSpeak", expr, "семнадцать десятых"); +} + +#[test] +#[allow(non_snake_case)] +fn not_SimpleSpeak_common_fraction_tenths() { + let expr = " + 89 10 + "; + test("ru", "SimpleSpeak", expr, "89 на 10"); +} + +#[test] +fn non_simple_fraction() { + let expr = " + + + + x+y + + x-y + + + + "; + test("ru", "SimpleSpeak", expr, "дробь, числитель: икс плюс игрек, знаменатель: икс минус игрек, конец дроби"); +} + +#[test] +fn nested_fraction() { + let expr = " + + + + x+ 1y + + x-y + + + + "; + test("ru", "SimpleSpeak", expr, "дробь, числитель: икс плюс, дробь, числитель: 1, знаменатель: игрек, конец дроби; знаменатель: икс минус игрек, конец дроби"); +} + +#[test] +fn deeply_nested_fraction_msqrt() { + let expr = " + + + + x+ 1y + + x-y + + + + "; + test("ru", "SimpleSpeak", expr, "дробь, числитель: икс плюс, квадратный корень из 1 на игрек, конец корня; знаменатель: икс минус игрек, конец дроби"); +} + +#[test] +fn deeply_nested_fraction_mrow_msqrt() { + let expr = " + + + + x+ 2+1y + + x-y + + + + "; + test("ru", "SimpleSpeak", expr, "дробь, числитель: икс плюс, квадратный корень из 2 плюс 1 на игрек, конец корня; знаменатель: икс минус игрек, конец дроби"); +} + +#[test] +fn numerator_simple_fraction() { + let expr = " + + + + x + + x-y + + + + "; + test("ru", "SimpleSpeak", expr, "дробь, числитель: икс, знаменатель: икс минус игрек, конец дроби"); +} + +#[test] +fn denominator_simple_fraction() { + let expr = " + + + x-y + x + + + "; + test("ru", "SimpleSpeak", expr, "дробь, числитель: икс минус игрек, знаменатель: икс, конец дроби"); +} + +#[test] +fn frac_with_units() { + let expr = " + + + 62 + + mi + hr + + + "; + test("ru", "SimpleSpeak", expr, "62 мили в час"); +} + +#[test] +fn singular_frac_with_units() { + let expr = " + + + 1 + + gal + mi + + + "; + test("ru", "SimpleSpeak", expr, "1 галлон на милю"); +} + +#[test] +fn mixed_number() { + let expr = " + 3 + 1 2 + "; + test("ru", "SimpleSpeak", expr, "3 целых и одна вторая"); +} + +#[test] +fn explicit_mixed_number() { + let expr = " + 3 + + 1 8 + "; + test("ru", "SimpleSpeak", expr, "3 целых и одна восьмая"); +} + +#[test] +fn mixed_number_big() { + let expr = " + 3 + 7 83 + "; + test("ru", "SimpleSpeak", expr, "3 целых и семь восемьдесят третьих"); +} + +#[test] +fn simple_text() { + let expr = " + rise run + "; + test("ru", "SimpleSpeak", expr, "подъём на длину"); +} + +#[test] +fn number_and_text() { + let expr = " + + + 2miles + + 3gallons + + "; + test("ru", "SimpleSpeak", expr, "дробь, числитель: 2 мили, знаменатель: 3 галлона, конец дроби"); +} + +#[test] +fn nested_simple_fractions() { + let expr = " + + + + + 1 + 2 + + + + + 2 + 3 + + + + + "; + test("ru", "SimpleSpeak", expr, "дробь, числитель: одна вторая, знаменатель: две третьих, конец дроби"); +} + +#[test] +fn binomial() { + let expr = " + 2 + ( + 7 3 + ) + "; + test("ru", "SimpleSpeak", expr, "2 умножить на число сочетаний из 7 по 3"); +} + +#[test] +fn binomial_non_simple_top() { + let expr = " + 2 + ( + n+7 3 + ) + "; + test("ru", "SimpleSpeak", expr, "2 умножить на, число сочетаний из n плюс 7 по 3"); +} + +#[test] +fn binomial_non_simple_bottom() { + let expr = " + 2 + ( + 7 k+3 + ) + "; + test("ru", "SimpleSpeak", expr, "2 умножить на, число сочетаний из 7 по k плюс 3 конец числа сочетаний"); +} + +#[test] +fn binomial_non_simple_top_and_bottom() { + let expr = " + 2 + ( + n+7 k+3 + ) + "; + test("ru", "SimpleSpeak", expr, "2 умножить на, число сочетаний из n плюс 7 по k плюс 3 конец числа сочетаний"); +} diff --git a/tests/Languages/ru/SimpleSpeak/msup.rs b/tests/Languages/ru/SimpleSpeak/msup.rs new file mode 100644 index 00000000..cb5d6f42 --- /dev/null +++ b/tests/Languages/ru/SimpleSpeak/msup.rs @@ -0,0 +1,333 @@ +/// Tests for superscripts +/// simple superscripts +/// complex/nested superscripts +use crate::common::*; + +#[test] +fn squared() { + let expr = " + x 2 + "; + test("ru", "SimpleSpeak", expr, "икс в квадрате"); +} + +#[test] +fn cubed() { + let expr = " + x 3 + "; + test("ru", "SimpleSpeak", expr, "икс в кубе"); +} + +#[test] +fn ordinal_power() { + let expr = " + x 4 + "; + test("ru", "SimpleSpeak", expr, "икс в четвёртой степени"); +} + +#[test] +fn simple_mi_power() { + let expr = " + x n + "; + test("ru", "SimpleSpeak", expr, "икс в степени эн"); +} + +#[test] +fn zero_power() { + let expr = " + x 0 + "; + test("ru", "SimpleSpeak", expr, "икс в нулевой степени"); +} + +#[test] +fn decimal_power() { + let expr = " + x 2.0 + "; + test("ru", "SimpleSpeak", expr, "икс в степени 2.0"); +} + +#[test] +fn non_simple_power() { + let expr = " + + + 3 + + y+2 + + + "; + test("ru", "SimpleSpeak", expr, "3 в степени игрек плюс 2"); +} + +#[test] +fn negative_power() { + let expr = " + + x + - 2 + + "; + test("ru", "SimpleSpeak", expr, "икс в степени минус 2"); +} + +#[test] +fn simple_fraction_power() { + let expr = " + + x + 13 + + "; + test("ru", "SimpleSpeak", expr, "икс в степени одна третья"); +} + +#[test] +fn nested_squared_power_with_coef() { + let expr = " + + + 3 + + 2 + + x + 2 + + + + + "; + test("ru", "SimpleSpeak", expr, "3 в степени 2 икс в квадрате"); +} + +#[test] +fn nested_squared_power_with_neg_coef() { + let expr = " + + + 3 + + - + 2 + + x + 2 + + + + + "; + test("ru", "SimpleSpeak", expr, "3 в степени минус 2 икс в квадрате"); +} + +#[test] +fn nested_cubed_power() { + let expr = " + + y + + 45 + 3 + + + "; + test("ru", "SimpleSpeak", expr, "игрек в степени четыре пятых в кубе"); +} + +#[test] +fn nested_cubed_power_with_neg_base() { + let expr = " + + y + + - + + 45 + 3 + + + + "; + test("ru", "SimpleSpeak", expr, "игрек в степени минус четыре пятых в кубе"); +} + +#[test] +fn nested_number_times_squared() { + let expr = " + + + e + + + 1 + 2 + + + x + 2 + + + + + "; + test("ru", "SimpleSpeak", expr, "e в степени одна вторая икс в квадрате"); +} + +#[test] +fn nested_negative_number_times_squared() { + let expr = " + + + e + + + 1 + 2 + + + x + 2 + + + + + "; + test("ru", "SimpleSpeak", expr, "e в степени минус одна вторая икс в квадрате"); +} + +#[test] +fn nested_expr_to_tenth() { + let expr = " + + + 3 + + + 3 + + 10 + + + + + "; + test("ru", "SimpleSpeak", expr, "3 в степени 3 в десятой степени"); +} + +#[test] +fn nested_non_simple_squared_exp() { + let expr = " + + + 3 + + + + ( + + x+1 + ) + 2 + + + + + "; + test("ru", "SimpleSpeak", expr, "3 в степени скобка открывается икс плюс 1, скобка закрывается в квадрате"); +} + +#[test] +fn nested_simple_power() { + let expr = " + + t + + 45 + n + + + "; + test("ru", "SimpleSpeak", expr, "тэ в степени четыре пятых в степени эн"); +} + +#[test] +fn nested_end_exponent_power() { + let expr = " + + t + + 45 + n+1 + + + "; + test("ru", "SimpleSpeak", expr, "тэ в степени четыре пятых в степени n плюс 1, конец показателя"); + test_prefs("ru", "SimpleSpeak", vec![("Impairment", "LearningDisability")], expr, + "тэ в степени четыре пятых в степени n плюс 1"); +} + +#[test] +fn nested_end_exponent_neg_power() { + let expr = " + + t + + 45 + -3 + + + "; + test("ru", "SimpleSpeak", expr, "тэ в степени четыре пятых в степени минус 3, конец показателя"); +} + +#[test] +fn nested_complex_power() { + let expr = " + + + e + + + 1 + 2 + + + + ( + + + + xμ + σ + + + ) + 2 + + + + + "; + test("ru", "SimpleSpeak", expr, + "e в степени минус одна вторая умножить на; скобка открывается, дробь, числитель: икс минус мю, знаменатель: сигма, конец дроби; скобка закрывается в квадрате"); +} + +#[test] +fn default_power() { + let expr = " + + t + + b+1 + 3 + + + "; + test("ru", "SimpleSpeak", expr, "тэ в степени дробь, числитель: бэ плюс 1, знаменатель: 3, конец дроби"); +} diff --git a/tests/Languages/ru/SimpleSpeak/multiline.rs b/tests/Languages/ru/SimpleSpeak/multiline.rs new file mode 100644 index 00000000..6e6daf10 --- /dev/null +++ b/tests/Languages/ru/SimpleSpeak/multiline.rs @@ -0,0 +1,75 @@ +use crate::common::*; + +#[test] +fn case_1() { + let expr = " + + f( + x + )={ + + + + + 1 if x<0 + + + + + + 0 if x=0 + + + + + + 1 if x>0 + + + + + "; + test("ru", "SimpleSpeak", expr, "эф от икс равно; 3 случая; \ + случай 1; минус 1, если икс; меньше 0; \ + случай 2; 0, если икс, равно 0; \ + случай 3; 1, если икс, больше 0"); +} + +#[test] +fn equation_1() { + let expr = " + + + + + + x+y + + + = + + + 7 + + + + + + 2x+3y + + + = + + + + 17 + + + + + + "; + test("ru", "SimpleSpeak", expr, "2 уравнения; \ + уравнение 1; икс плюс игрек равно 7; \ + уравнение 2; 2 икс плюс 3 игрек равно 17"); +} diff --git a/tests/Languages/ru/SimpleSpeak/sets.rs b/tests/Languages/ru/SimpleSpeak/sets.rs new file mode 100644 index 00000000..06b1f867 --- /dev/null +++ b/tests/Languages/ru/SimpleSpeak/sets.rs @@ -0,0 +1,235 @@ +use crate::common::*; + +#[test] +fn complex() { + let expr = " + + "; + test("ru", "SimpleSpeak", expr, "комплексные числа"); +} + +#[test] +fn natural() { + let expr = " + + "; + test("ru", "SimpleSpeak", expr, "натуральные числа"); +} + +#[test] +fn rationals() { + let expr = " + + "; + test("ru", "SimpleSpeak", expr, "рациональные числа"); +} + +#[test] +fn reals() { + let expr = " + + "; + test("ru", "SimpleSpeak", expr, "действительные числа"); +} + +#[test] +fn integers() { + let expr = " + + "; + test("ru", "SimpleSpeak", expr, "целые числа"); +} + +#[test] +fn msup_complex() { + let expr = " + + + 2 + + "; + test("ru", "SimpleSpeak", expr, "цэ 2"); +} + +#[test] +fn msup_natural() { + let expr = " + + + 2 + + "; + test("ru", "SimpleSpeak", expr, "эн 2"); +} + +#[test] +fn msup_rationals() { + let expr = " + + + 2 + + "; + test("ru", "SimpleSpeak", expr, "ку 2"); +} + +#[test] +fn msup_reals() { + let expr = " + + + 3 + + "; + test("ru", "SimpleSpeak", expr, "эр 3"); +} + +#[test] +fn msup_integers() { + let expr = " + + + 4 + + "; + test("ru", "SimpleSpeak", expr, "зэт 4"); +} + +#[test] +fn msup_positive_integers() { + let expr = " + + + + + + "; + test("ru", "SimpleSpeak", expr, "положительные целые числа"); +} + +#[test] +fn msup_negative_integers() { + let expr = " + + + - + + "; + test("ru", "SimpleSpeak", expr, "отрицательные целые числа"); +} + +#[test] +fn msup_positive_rationals() { + let expr = " + + + + + + "; + test("ru", "SimpleSpeak", expr, "положительные рациональные числа"); +} + +#[test] +fn msup_negative_rationals() { + let expr = " + + + - + + "; + test("ru", "SimpleSpeak", expr, "отрицательные рациональные числа"); +} + +#[test] +fn empty_set() { + let expr = " + { } + "; + test("ru", "SimpleSpeak", expr, "пустое множество"); +} + +#[test] +fn single_element_set() { + let expr = " + { 12} + "; + test("ru", "SimpleSpeak", expr, "множество 12"); +} + +#[test] +fn multiple_element_set() { + let expr = " + { 5 , 10 , 15 } + "; + test("ru", "SimpleSpeak", expr, "множество 5 запятая, 10 запятая, 15"); +} + +#[test] +fn set_with_colon() { + let expr = " + { x:x>2 } + "; + test("ru", "SimpleSpeak", expr, "множество всех x таких, что x больше 2"); +} + +#[test] +fn set_with_bar() { + let expr = " + { x|x>2 } + "; + test("ru", "SimpleSpeak", expr, "множество всех икс таких, что икс больше 2"); +} + +#[test] +fn element_alone() { + let expr = " + 3+2i + "; + test("ru", "SimpleSpeak", expr, "3 плюс 2 и, не является элементом действительных чисел"); +} + +#[test] +fn element_under_sum() { + let expr = " + + + i + + + 1 + i 2 + + "; + test("ru", "SimpleSpeak", expr, + "сумма по i, являющемуся элементом целых чисел, от; дробь, числитель: 1, знаменатель: и в квадрате, конец дроби"); +} + +#[test] +fn complicated_set_with_colon() { + let expr = " + { + x + + + : + 2 + < + x + < + 7 + } + "; + test("ru", "SimpleSpeak", expr, "множество всех икс из целых чисел, таких что 2 меньше икс меньше 7"); +} + +#[test] +fn complicated_set_with_mtext() { + let expr = " + { + x + | + x  is an even number + } + "; + test("ru", "SimpleSpeak", expr, + "множество всех икс из натуральных чисел, таких что x — четное число"); +} diff --git a/tests/Languages/ru/SimpleSpeak/subscripts.rs b/tests/Languages/ru/SimpleSpeak/subscripts.rs new file mode 100644 index 00000000..ea389089 --- /dev/null +++ b/tests/Languages/ru/SimpleSpeak/subscripts.rs @@ -0,0 +1,49 @@ +use crate::common::*; + +#[test] +fn msub_simple() { + let expr = " x 1 "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "икс 1"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, "икс с индексом 1"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "икс с индексом 1"); +} + +#[test] +fn msub_not_simple() { + let expr = " x 1.2 "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "икс с индексом 1.2"); +} + +#[test] +fn msubsup_not_simple() { + let expr = " x 1.2 3 "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "икс с индексом 1.2, в кубе"); +} + +#[test] +fn msub_simple_mi() { + let expr = " x i "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "икс с индексом i"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "икс с индексом i"); +} + +#[test] +fn msub_simple_number_follows() { + let expr = " x 1 102 "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "икс 1, 10 в квадрате"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "икс с индексом 1, 10 в квадрате"); +} + +#[test] +fn msub_simple_non_number_follows() { + let expr = " x 1 2 "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "икс 1, в квадрате"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "икс с индексом 1, в квадрате"); +} + +#[test] +fn msubsup_simple() { + let expr = " x 1 x2 "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "икс 1, икс в квадрате"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "икс с индексом 1, икс в квадрате"); +} \ No newline at end of file diff --git a/tests/Languages/ru/alphabets.rs b/tests/Languages/ru/alphabets.rs new file mode 100644 index 00000000..0e5fb3b7 --- /dev/null +++ b/tests/Languages/ru/alphabets.rs @@ -0,0 +1,340 @@ +/// Тесты для правил, общих для различных стилей речи: +/// * здесь собраны тесты, посвящённые различным алфавитам +use crate::common::*; + +#[test] +fn special_alphabet_chars() { + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "фрактурная заглавная аш, фрактурная заглавная цэ"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "двойная заглавная аш, двойная заглавная пи"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "рукописная заглавная и, рукописная заглавная эм"); +} + +#[test] +fn greek() { + let expr = " Α,Ω"; + test("ru", "SimpleSpeak", expr, "заглавная альфа, заглавная омега"); + let expr = " α,ω"; + test("ru", "SimpleSpeak", expr, "альфа, омега"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "двойная заглавная дельта, двойная заглавная ипсилон"); + let expr = " α,ω"; + test("ru", "SimpleSpeak", expr, "альфа, омега"); +} + +#[test] +fn cap_cyrillic() { + let expr = " А,Я"; + test("ru", "SimpleSpeak", expr, "заглавная а, заглавная я"); +} + +#[test] +fn parenthesized() { + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "а в скобках, зет в скобках"); +} + +#[test] +fn circled() { + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "заглавная а в кружке, заглавная зет в кружке"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "а в кружке, зет в кружке"); +} + +#[test] +fn fraktur() { + let expr = " 𝔄,𝔜"; + test("ru", "SimpleSpeak", expr, "фрактурная заглавная а, фрактурная заглавная игрек"); + let expr = " 𝔞,𝔷"; + test("ru", "SimpleSpeak", expr, "фрактурная а, фрактурная зет"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "фрактурная заглавная а, фрактурная заглавная игрек"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "фрактурная а, фрактурная зет"); +} + +#[test] +fn bold_fraktur() { + let expr = " 𝕬,𝖅"; + test("ru", "SimpleSpeak", expr, "фрактурная жирная заглавная а, фрактурная жирная заглавная зет"); + let expr = " 𝖆,𝖟"; + test("ru", "SimpleSpeak", expr, "фрактурная жирная а, фрактурная жирная зет"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "фрактурная жирная заглавная а, фрактурная жирная заглавная зет"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "фрактурная жирная а, фрактурная жирная зет"); +} + +#[test] +fn double_struck() { + let expr = " 𝔸,𝕐"; + test("ru", "SimpleSpeak", expr, "двойная заглавная а, двойная заглавная игрек"); + let expr = " 𝕒,𝕫"; + test("ru", "SimpleSpeak", expr, "двойная а, двойная зет"); + let expr = " 𝟘,𝟡"; + test("ru", "SimpleSpeak", expr, "двойной ноль, двойная девять"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "двойная заглавная а, двойная заглавная игрек"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "двойная а, двойная зет"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "двойной ноль, двойная девять"); +} + +#[test] +fn script() { + let expr = " 𝒜,𝒵"; + test("ru", "SimpleSpeak", expr, "рукописная заглавная а, рукописная заглавная зет"); + let expr = " 𝒶,𝓏"; + test("ru", "SimpleSpeak", expr, "рукописная а, рукописная зет"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "рукописная заглавная а, рукописная заглавная зет"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "рукописная а, рукописная зет"); +} + +#[test] +fn bold_script() { + let expr = " 𝓐,𝓩"; + test("ru", "SimpleSpeak", expr, "рукописная жирная заглавная а, рукописная жирная заглавная зет"); + let expr = " 𝓪,𝔃"; + test("ru", "SimpleSpeak", expr, "рукописная жирная а, рукописная жирная зет"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "рукописная жирная заглавная а, рукописная жирная заглавная зет"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "рукописная жирная а, рукописная жирная зет"); +} + +#[test] +fn bold() { + let expr = " 𝐀,𝐙"; + test("ru", "SimpleSpeak", expr, "жирная заглавная а, жирная заглавная зет"); + let expr = " 𝐚,𝐳"; + test("ru", "SimpleSpeak", expr, "жирная а, жирная зет"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "жирная заглавная а, жирная заглавная зет"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "жирная а, жирная зет"); +} + +#[test] +fn italic() { + let expr = " 𝐴,𝑍"; + test("ru", "SimpleSpeak", expr, "заглавная а, заглавная зет"); + let expr = " 𝑎,𝑧"; + test("ru", "SimpleSpeak", expr, "а, зет"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "заглавная а, заглавная зет"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "а, зет"); +} + +#[test] +fn sans_serif() { + let expr = " 𝖠,𝖹"; + test("ru", "SimpleSpeak", expr, "заглавная а, заглавная зет"); + let expr = " 𝖺,𝗓"; + test("ru", "SimpleSpeak", expr, "а, зет"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "заглавная а, заглавная зет"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "а, зет"); +} + +#[test] +fn sans_serif_bold() { + let expr = " 𝗔,𝗭"; + test("ru", "SimpleSpeak", expr, "жирная заглавная а, жирная заглавная зет"); + let expr = " 𝗮,𝘇"; + test("ru", "SimpleSpeak", expr, "жирная а, жирная зет"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "жирная заглавная а, жирная заглавная зет"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "жирная а, жирная зет"); +} + +#[test] +fn sans_serif_italic() { + let expr = " 𝘈,𝘡"; + test("ru", "SimpleSpeak", expr, "заглавная а, заглавная зет"); + let expr = " 𝘢,𝘻"; + test("ru", "SimpleSpeak", expr, "а, зет"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "заглавная а, заглавная зет"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "а, зет"); +} + +#[test] +fn sans_serif_bold_italic() { + let expr = " 𝘼,𝙕"; + test("ru", "SimpleSpeak", expr, "жирная заглавная а, жирная заглавная зет"); + let expr = " 𝙖,𝙯"; + test("ru", "SimpleSpeak", expr, "жирная а, жирная зет"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "жирная заглавная а, жирная заглавная зет"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "жирная а, жирная зет"); +} + +#[test] +fn monospace() { + let expr = " 𝙰,𝚉"; + test("ru", "SimpleSpeak", expr, "заглавная а, заглавная зет"); + let expr = " 𝚊,𝚣"; + test("ru", "SimpleSpeak", expr, "а, зет"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "заглавная а, заглавная зет"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "а, зет"); +} + +#[test] +fn bold_greek() { + let expr = " 𝚨,𝛀"; + test("ru", "SimpleSpeak", expr, "жирная заглавная альфа, жирная заглавная омега"); + let expr = " 𝛂,𝛚"; + test("ru", "SimpleSpeak", expr, "жирная альфа, жирная омега"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "жирная заглавная альфа, жирная заглавная омега"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "жирная альфа, жирная омега"); +} + +#[test] +fn bold_greek_others() { + let expr = " 𝛛,𝛡"; + test("ru", "SimpleSpeak", expr, "жирная частная производная, жирное пи"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "жирная частная производная, жирное пи"); +} + +#[test] +fn italic_greek() { + let expr = " 𝛢,𝛺"; + test("ru", "SimpleSpeak", expr, "заглавная альфа, заглавная омега"); + let expr = " 𝛼,𝜔"; + test("ru", "SimpleSpeak", expr, "альфа, омега"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "заглавная альфа, заглавная омега"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "альфа, омега"); +} + +#[test] +fn italic_greek_others() { + let expr = " 𝜕,𝜛"; + test("ru", "SimpleSpeak", expr, "частная производная, пи"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "частная производная, пи"); +} + +#[test] +fn bold_italic_greek() { + let expr = " 𝜜,𝜴"; + test("ru", "SimpleSpeak", expr, "жирная заглавная альфа, жирная заглавная омега"); + let expr = " 𝜶,𝝎"; + test("ru", "SimpleSpeak", expr, "жирная альфа, жирная омега"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "жирная заглавная альфа, жирная заглавная омега"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "жирная альфа, жирная омега"); +} + +#[test] +fn bold_italic_greek_others() { + let expr = " 𝝏,𝝕"; + test("ru", "SimpleSpeak", expr, "жирная частная производная, жирное пи"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "жирная частная производная, жирное пи"); +} + +#[test] +fn sans_serif_bold_greek() { + let expr = " 𝝖,𝝮"; + test("ru", "SimpleSpeak", expr, "жирная заглавная альфа, жирная заглавная омега"); + let expr = " 𝝰,𝞈"; + test("ru", "SimpleSpeak", expr, "жирная альфа, жирная омега"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "жирная заглавная альфа, жирная заглавная омега"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "жирная альфа, жирная омега"); +} + +#[test] +fn sans_serif_bold_greek_others() { + let expr = " 𝞉,𝞏"; + test("ru", "SimpleSpeak", expr, "жирная частная производная, жирное пи"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "жирная частная производная, жирное пи"); +} + +#[test] +fn sans_serif_bold_italic_greek() { + let expr = " 𝞐,𝞨"; + test("ru", "SimpleSpeak", expr, "жирная заглавная альфа, жирная заглавная омега"); + let expr = " 𝞪,𝟂"; + test("ru", "SimpleSpeak", expr, "жирная альфа, жирная омега"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "жирная заглавная альфа, жирная заглавная омега"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "жирная альфа, жирная омега"); +} + +#[test] +fn sans_serif_bold_italic_greek_others() { + let expr = " 𝟃,𝟉"; + test("ru", "SimpleSpeak", expr, "жирная частная производная, жирное пи"); + // Версии из частной области MathType + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "жирная частная производная, жирное пи"); +} + +#[test] +fn pua_regular() { + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "заглавная а, заглавная зет"); +} + +#[test] +fn turned() { + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "перевернутая заглавная эф, перевернутая заглавная игрек без засечек"); +} + +#[test] +fn enclosed_numbers() { + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "один в кружке, девять в кружке"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "один в скобках, девять в скобках"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "один с точкой, девять с точкой"); + let expr = " ,"; + test("ru", "SimpleSpeak", expr, "один в двойном кружке, девять в двойном кружке"); +} diff --git a/tests/Languages/ru/chemistry.rs b/tests/Languages/ru/chemistry.rs new file mode 100644 index 00000000..10d24b90 --- /dev/null +++ b/tests/Languages/ru/chemistry.rs @@ -0,0 +1,721 @@ +/// Тесты для правил, общих для различных стилей речи: +/// * модифицированная переменная +use crate::common::*; + +#[test] +fn salt() { + let expr = "NaCl"; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "заглавная эн а, заглавная цэ эль"); +} + +#[test] +fn water() { + let expr = "H2O"; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Terse")], expr, "заглавная аш, 2 заглавная о"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium")], expr, "заглавная аш, нижний индекс 2 заглавная о"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, "заглавная аш, нижний индекс 2, заглавная о"); +} + +#[test] +fn carbon() { + let expr = "C"; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "заглавная цэ"); +} + +#[test] +fn sulfate() { + let expr = " + [SO4] + 2 + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium")], expr, "открывающая квадратная скобка, заглавная эс, заглавная о, нижний индекс 4; закрывающая квадратная скобка, верхний индекс 2 минус"); +} + +#[test] +fn aluminum_sulfate() { + let expr = "Al2 + (SO4)3"; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Terse")], expr, "заглавная а эль, 2, открыть заглавная эс, заглавная о, 4, закрыть 3"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium")], expr, "заглавная а эль, нижний индекс 2; открывающая круглая скобка, заглавная эс, заглавная о, нижний индекс 4; закрывающая круглая скобка, нижний индекс 3"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, "заглавная а эль, нижний индекс 2; открывающая круглая скобка, заглавная эс, заглавная о, нижний индекс 4; закрывающая круглая скобка, нижний индекс 3"); +} + +#[test] +fn ethanol_bonds() { + let expr = " + + C + H 3 + + C + H 2 + + O + H + + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Terse")], expr, "заглавная цэ, заглавная аш, 3 одинарная связь заглавная цэ, заглавная аш, 2 одинарная связь заглавная о, заглавная аш"); +} + +#[test] +fn dichlorine_hexoxide() { + let expr = " + + [ClO2] + + + + + [ClO4] + - + + "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "открывающая квадратная скобка, заглавная цэ эль, заглавная о, 2, закрывающая квадратная скобка плюс; открывающая квадратная скобка, заглавная цэ эль, заглавная о, 4, закрывающая квадратная скобка минус"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Medium")], + expr, "открывающая квадратная скобка, заглавная цэ эль, заглавная о, нижний индекс 2; закрывающая квадратная скобка, верхний индекс плюс; открывающая квадратная скобка, заглавная цэ эль, заглавная о, нижний индекс 4; закрывающая квадратная скобка, верхний индекс минус"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Verbose")], + expr, "открывающая квадратная скобка, заглавная цэ эль, заглавная о, нижний индекс 2; закрывающая квадратная скобка, верхний индекс плюс; открывающая квадратная скобка, заглавная цэ эль, заглавная о, нижний индекс 4; закрывающая квадратная скобка, верхний индекс минус"); +} + +#[test] +fn ethylene_with_bond() { + let expr = " + H2C + = + CH2 + "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "заглавная аш, 2 заглавная цэ, двойная связь заглавная цэ, заглавная аш, 2"); +} + +#[test] +fn ferric_chloride_aq() { + let expr = " + Fe + Cl3 + (aq) + "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "заглавная эф е, заглавная цэ эль, 3 водный"); +} + +#[test] +fn ethylene_with_colon_bond() { + let expr = " + H2C + :: + CH2 + "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "заглавная аш, 2 заглавная цэ, двойная связь заглавная цэ, заглавная аш, 2"); +} + +#[test] +fn beta_decay() { + let expr = " + + C + + 6 + 14 + + + + N + + 7 + 14 + + + + + e + + + + 1 + + 0 + + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Terse")], expr, + "14, 6, заглавная цэ; образует, 14, 7, заглавная эн; плюс 0, минус 1, е"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium")], expr, + "верхний индекс 14, нижний индекс 6, заглавная цэ; реагирует с образованием; верхний индекс 14, нижний индекс 7, заглавная эн; плюс верхний индекс 0, нижний индекс минус 1, е"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, + "верхний индекс 14, нижний индекс 6, заглавная цэ; реагирует с образованием; верхний индекс 14, нижний индекс 7, заглавная эн; плюс, верхний индекс 0, нижний индекс минус 1, е"); +} + +#[test] +fn mhchem_beta_decay() { + 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("ru", "ClearSpeak", vec![("Verbosity", "Terse")], expr, + "14, 6, заглавная цэ; образует, 14, 7, заглавная эн; плюс 0, минус 1, е"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium")], expr, + "верхний индекс 14, нижний индекс 6, заглавная цэ; реагирует с образованием; верхний индекс 14, нижний индекс 7, заглавная эн; плюс верхний индекс 0, нижний индекс минус 1, е"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Verbose")], expr, + "верхний индекс 14, нижний индекс 6, заглавная цэ; реагирует с образованием; верхний индекс 14, нижний индекс 7, заглавная эн; плюс, верхний индекс 0, нижний индекс минус 1, е"); +} + +#[test] +fn hcl_na_yields() { + let expr = " + 2HCl+2Na + + 2NaCl+ + H 2 + + "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, + "2, заглавная аш, заглавная цэ эль; плюс 2 заглавная эн а; реагирует с образованием; 2, заглавная эн а, заглавная цэ эль; плюс заглавная аш, нижний индекс 2"); +} + +#[test] +fn mhchem_so4_2plus() { + let expr = " + + + SO + + + + + + + A + + + + + + + + 4 + + + + + + + + + + A + + + + + + 2 + + + + + + "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "заглавная эс; заглавная о, 4, 2 плюс"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, "заглавная эс; заглавная о, нижний индекс 4, верхний индекс 2 плюс"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "заглавная эс; заглавная о, нижний индекс 4, верхний индекс 2 плюс"); +} + +#[test] +fn mhchem_hcl_aq_etc() { + let expr = " + + 2 + + + + + HCl + + + ( + + aq + + ) + + + + + 2 + + + + + Na + + + ( + + s + + ) + + + + + + 2 + + + + + NaCl + + + ( + + aq + + ) + + + + + + H + + + + + + + A + + + + + + + + 2 + + + + + + ( + + g + + ) + + "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "2, заглавная аш, заглавная цэ эль, водный; плюс, 2, заглавная эн а, твердый; образует; 2, заглавная эн а, заглавная цэ эль, водный; плюс, заглавная аш, 2, газ"); +} + +#[test] +fn mhchem_barbed_equilibrium() { + let expr = " + + + + H + 2 + + + + + ( + g + ) + + + + + + + + I + 2 + + + + + ( + g + ) + + + + + + + - + + + - + + + + + 2 + + + H + + I + + + ( + g + ) + + + + + "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "заглавная аш, 2, газ; плюс; заглавная и, 2, газ; находится в равновесии с, 2, заглавная аш, заглавная и, газ"); +} + +#[test] +fn mhchem_roman_in_superscript() { + let expr = " + + + Fe + + II + + + + Fe + + III + + + + O + 4 + + + + "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "заглавная эф е, 2; заглавная эф е, 3; заглавная о, 4"); +} + +#[test] +fn dropped_msubsup_bug_358() { + let expr = r#" + + + 2 + + + SO + + 2 + + + + + + + + + O + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + SO + + 3 + + + + + + + + "#; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "2, заглавная эс, заглавная о, 2; плюс; заглавная о, 2 находится в равновесии с, 2, заглавная эс, заглавная о, 3"); +} + + diff --git a/tests/Languages/ru/intent.rs b/tests/Languages/ru/intent.rs new file mode 100644 index 00000000..3865f5ff --- /dev/null +++ b/tests/Languages/ru/intent.rs @@ -0,0 +1,116 @@ +/// Тесты для правил, общих для различных стилей речи: +/// * здесь собраны тесты, посвящённые различным алфавитам +use crate::common::*; + +#[test] +fn silent_intent() { + let expr = " 2 x "; + test("ru", "SimpleSpeak", expr, "2 икс"); + test("ru", "LiteralSpeak", expr, "2 икс"); +} + +#[test] +fn prefix_intent() { + let expr = r#" x T "#; + test("ru", "SimpleSpeak", expr, "икс"); +} + +#[test] +fn postfix_intent() { + let expr = r#" x T "#; + test("ru", "SimpleSpeak", expr, "икс"); +} + +#[test] +fn infix_intent() { + let expr = r#" + x + y + z + "#; + test("ru", "SimpleSpeak", expr, "икс игрек зет 2"); +} + +#[test] +fn infix_intent_no_args() { + // this is illegal intent, so it is just an mrow with one child + let expr = r#" + x + "#; + test("ru", "SimpleSpeak", expr, "икс"); +} + +#[test] +fn infix_intent_one_arg() { + 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("ru", "SimpleSpeak", expr, "икс"); +} + +#[test] +fn function_intent() { + let expr = r#" + x + y + z + "#; + test("ru", "SimpleSpeak", expr, "икс запятая, игрек запятая, зет запятая, 2"); +} + +#[test] +fn function_no_args_intent() { + // this is illegal intent, so it is just an mrow with one child + let expr = r#" + x + "#; + test("ru", "SimpleSpeak", expr, "икс"); +} + +#[test] +fn function_one_arg_intent() { + let expr = r#" + x + "#; + test("ru", "SimpleSpeak", expr, "икс"); +} + +#[test] +fn silent_intent_mi() { + let expr = " 2 x"; + test("ru", "SimpleSpeak", expr, "2"); + test("ru", "ClearSpeak", expr, "2"); +} + +#[test] +fn silent_intent_msup() { + let expr = " + + H + 2 + "; + test("ru", "SimpleSpeak", expr, "заглавная аш 2"); + test("ru", "ClearSpeak", expr, "заглавная аш 2"); +} + +#[test] +fn silent_intent_underscore() { + let expr = " + + H + 2 + "; + test("ru", "SimpleSpeak", expr, "заглавная аш 2"); + test("ru", "ClearSpeak", expr, "заглавная аш 2"); +} + +#[test] +fn intent_prob_x() { + let expr = " + + x + P + "; + test("ru", "ClearSpeak", expr, "вероятность икс"); +} \ No newline at end of file diff --git a/tests/Languages/ru/mtable.rs b/tests/Languages/ru/mtable.rs new file mode 100644 index 00000000..9de995f8 --- /dev/null +++ b/tests/Languages/ru/mtable.rs @@ -0,0 +1,1084 @@ +use crate::common::*; + +#[test] +fn matrix_1x1() { + let expr = " + + + ( + + 3 + + ) + + "; + test("ru", "ClearSpeak", expr, "матрица 1 на 1 с элементом 3"); + test("ru", "SimpleSpeak", expr, "матрица 1 на 1 с элементом 3"); +} + +#[test] +fn determinant_1x1() { + let expr = " + + + | + + 3 + + | + + "; + test("ru", "ClearSpeak", expr, "определитель 1 на 1 с элементом 3"); + test("ru", "SimpleSpeak", expr, "определитель 1 на 1 с элементом 3"); +} + + +#[test] +fn matrix_1x2() { + let expr = " + + + ( + + + + 3 + + + 5 + + + + ) + + "; + test("ru", "ClearSpeak", expr, "матрица-строка 1 на 2; 3, 5"); + test("ru", "SimpleSpeak", expr, "матрица-строка 1 на 2; 3, 5"); +} + + +#[test] +fn matrix_1x3() { + let expr = " + + + ( + + + + -x + + + 5 + + + 12 + + + + ) + + "; + test("ru", "ClearSpeak", expr, "матрица-строка 1 на 3; минус икс, 5, 12"); + test("ru", "SimpleSpeak", expr, "матрица-строка 1 на 3; минус икс, 5, 12"); +} + +#[test] +fn matrix_2x1_not_simple() { + let expr = " + + + ( + + + + + x+1 + + + + + + + x-1 + + + + ) + + "; + test("ru", "ClearSpeak", expr, "матрица-столбец 2 на 1; строка 1; икс плюс 1; строка 2; икс минус 1"); + test("ru", "SimpleSpeak", expr, "матрица-столбец 2 на 1; строка 1; икс плюс 1; строка 2; икс минус 1"); +} +#[test] +fn matrix_3x1_not_simple() { + let expr = " + + + ( + + + + + x + + + + + + + a + + + + + + + x + + x+1 + + + + + + ) + "; + test("ru", "SimpleSpeak", expr, "матрица-столбец 3 на 1; \ + строка 1; икс; \ + строка 2; а; \ + строка 3; дробь, икс делить на, икс плюс 1, конец дроби"); + test("ru", "ClearSpeak", expr, "матрица-столбец 3 на 1; \ + строка 1; икс; \ + строка 2; а; \ + строка 3; дробь, числитель икс; знаменатель икс плюс 1"); +} + +#[test] +fn determinant_2x2() { + let expr = " + + | + + + + 2 + + + 1 + + + + + 7 + + + 5 + + + + + | + "; + test("ru", "ClearSpeak", expr, "определитель 2 на 2; строка 1; 2, 1; строка 2; 7, 5"); + test("ru", "SimpleSpeak", expr, "определитель 2 на 2; строка 1; 2, 1; строка 2; 7, 5"); +} + +#[test] +fn matrix_2x3() { + let expr = " + + + [ + + + + 3 + + + 1 + + + 4 + + + + + 0 + + + 2 + + + 6 + + + + ] + + "; + test("ru", "ClearSpeak", expr, "матрица 2 на 3; строка 1; 3, 1, 4; строка 2; 0, 2, 6"); + test("ru", "SimpleSpeak", expr, "матрица 2 на 3; строка 1; 3, 1, 4; строка 2; 0, 2, 6"); +} + +#[test] +fn matrix_2x3_labeled() { + let expr = " + + + [ + + + + (3.1) + + + 3 + + + 1 + + + 4 + + + + + 0 + + + 2 + + + 6 + + + + ] + + "; + test("ru", "ClearSpeak", expr, + "матрица 2 на 3; строка 1 с меткой (3.1); столбец 2; 3, столбец 3; 1, столбец 4; 4; \ + строка 2; столбец 1; 0, столбец 2; 2, столбец 3; 6"); + test("ru", "SimpleSpeak", expr, + "матрица 2 на 3; строка 1 с меткой (3.1); столбец 2; 3, столбец 3; 1, столбец 4; 4; \ + строка 2; столбец 1; 0, столбец 2; 2, столбец 3; 6"); +} + +#[test] +fn matrix_3x1() { + let expr = " + + + [ + + + + 1 + + + + + 2 + + + + + 3 + + + ] + + "; + test("ru", "ClearSpeak", expr, "матрица-столбец 3 на 1; 1; 2; 3"); + test("ru", "SimpleSpeak", expr, "матрица-столбец 3 на 1; 1; 2; 3"); +} + +#[test] +fn matrix_4x1() { + let expr = " + + + ( + + + + 3 + + + + + 6 + + + + + 1 + + + + + 2 + + + + ) + + "; + test("ru", "ClearSpeak", expr, "матрица-столбец 4 на 1; строка 1; 3; строка 2; 6; строка 3; 1; строка 4; 2"); + test("ru", "SimpleSpeak", expr, "матрица-столбец 4 на 1; строка 1; 3; строка 2; 6; строка 3; 1; строка 4; 2"); +} + +#[test] +fn matrix_4x1_labeled() { + let expr = " + + + ( + + + + 3 + + + + + 6 + + + + + 1 + + + + + (3.1) + + + 2 + + + + ) + + "; + test("ru", "ClearSpeak", expr, + "матрица-столбец 4 на 1; строка 1; 3; строка 2; 6; строка 3; 1; строка 4 с меткой (3.1); 2"); + test("ru", "SimpleSpeak", expr, + "матрица-столбец 4 на 1; строка 1; 3; строка 2; 6; строка 3; 1; строка 4 с меткой (3.1); 2"); +} + +#[test] +fn matrix_1x4() { + let expr = " + + + ( + + + + 3 + + + 6 + + + 1 + + + 2 + + + + ) + + "; + test("ru", "ClearSpeak", expr, "матрица-строка 1 на 4; столбец 1; 3, столбец 2; 6, столбец 3; 1, столбец 4; 2"); + test("ru", "SimpleSpeak", expr, "матрица-строка 1 на 4; столбец 1; 3, столбец 2; 6, столбец 3; 1, столбец 4; 2"); +} + +#[test] +fn matrix_4x4() { + let expr = " + + + ( + + + + 0 + + + 3 + + + 4 + + + 3 + + + + + 2 + + + 1 + + + 0 + + + 9 + + + + + 3 + + + 0 + + + 2 + + + 1 + + + + + 6 + + + 2 + + + 9 + + + 0 + + + + ) + + "; + test("ru", "ClearSpeak", expr, "матрица 4 на 4; \ + строка 1; столбец 1; 0, столбец 2; 3, столбец 3; 4, столбец 4; 3; \ + строка 2; столбец 1; 2, столбец 2; 1, столбец 3; 0, столбец 4; 9; \ + строка 3; столбец 1; 3, столбец 2; 0, столбец 3; 2, столбец 4; 1; \ + строка 4; столбец 1; 6, столбец 2; 2, столбец 3; 9, столбец 4; 0"); + test("ru", "SimpleSpeak", expr, "матрица 4 на 4; \ + строка 1; столбец 1; 0, столбец 2; 3, столбец 3; 4, столбец 4; 3; \ + строка 2; столбец 1; 2, столбец 2; 1, столбец 3; 0, столбец 4; 9; \ + строка 3; столбец 1; 3, столбец 2; 0, столбец 3; 2, столбец 4; 1; \ + строка 4; столбец 1; 6, столбец 2; 2, столбец 3; 9, столбец 4; 0");} + +#[test] +fn matrix_4x2() { + let expr = " + + + ( + + + + 1 + + + 3 + + + + + 4 + + + 2 + + + + + 2 + + + 1 + + + + + 0 + + + 5 + + + + + ) + + "; + test("ru", "ClearSpeak", expr, "матрица 4 на 2; \ + строка 1; столбец 1; 1, столбец 2; 3; \ + строка 2; столбец 1; 4, столбец 2; 2; \ + строка 3; столбец 1; 2, столбец 2; 1; \ + строка 4; столбец 1; 0, столбец 2; 5\ + "); + test("ru", "SimpleSpeak", expr, "матрица 4 на 2; \ + строка 1; столбец 1; 1, столбец 2; 3; \ + строка 2; столбец 1; 4, столбец 2; 2; \ + строка 3; столбец 1; 2, столбец 2; 1; \ + строка 4; столбец 1; 0, столбец 2; 5\ + ");} + +// поместим тест для абсолютной величины сюда, так как он связан с определителем и слишком мал для отдельного файла +#[test] +fn simple_absolute_value() { + let expr = " + | x | + "; + test("ru", "SimpleSpeak", expr, "абсолютная величина икс"); + test("ru", "ClearSpeak", expr, "абсолютная величина икс"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Terse"), ("ClearSpeak_AbsoluteValue", "Auto")], expr, "абсолютная величина икс"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Verbose"), ("ClearSpeak_AbsoluteValue", "AbsEnd")], + expr, "абсолютная величина икс, конец абсолютной величины"); +} + +#[test] +fn absolute_value_plus_1() { +let expr = " + | + x+1 + | + "; + test("ru", "ClearSpeak", expr, "абсолютная величина икс плюс 1"); + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Terse"), ("ClearSpeak_AbsoluteValue", "AbsEnd")], + expr, "абсолютная величина икс плюс 1, конец абсолютной величины"); +} + +#[test] +fn simple_cardinality_value() { + let expr = " + | S | + "; + test_prefs("ru", "ClearSpeak", vec![("Verbosity", "Medium"), ("ClearSpeak_AbsoluteValue", "Cardinality")], expr, + "мощность заглавная эс"); +} + +// Тестирование предпочтений +#[test] +fn simple_matrix_speak_col_num() { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("ru", "ClearSpeak_Matrix", "SpeakColNum", + expr, "матрица 2 на 2; строка 1; столбец 1; 2, столбец 2; 1; строка 2; столбец 1; 7, столбец 2; 5"); +} + +#[test] +fn col_matrix_3x1_speak_col_num() { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("ru", "ClearSpeak_Matrix", "SpeakColNum", + expr, "матрица-столбец 3 на 1; строка 1; 1; строка 2; 2; строка 3; 3"); +} + +#[test] +fn row_matrix_1x2_speak_col_num() { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("ru", "ClearSpeak_Matrix", "SpeakColNum", + expr, "матрица-строка 1 на 2; столбец 1; 1, столбец 2; 2"); +} + +#[test] +fn matrix_2x2_speak_col_num() { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("ru", "ClearSpeak_Matrix", "SpeakColNum", + expr, "матрица 2 на 2; строка 1; столбец 1; бэ нижний индекс 1 1; столбец 2; бэ нижний индекс 1 2; \ + строка 2; столбец 1; бэ нижний индекс 2 1; столбец 2; бэ нижний индекс 2 2"); +} + + +#[test] +fn simple_matrix_silent_col_num() { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("ru", "ClearSpeak_Matrix", "SilentColNum", + expr, "матрица 2 на 2; строка 1; 2, 1; строка 2; 7, 5"); +} + +#[test] +fn col_matrix_3x1_silent_col_num() { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("ru", "ClearSpeak_Matrix", "SilentColNum", + expr, "матрица-столбец 3 на 1; 1; 2; 3"); +} + +#[test] +fn row_matrix_1x2_silent_col_num() { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("ru", "ClearSpeak_Matrix", "SilentColNum", + expr, "матрица-строка 1 на 2; 1, 2"); +} + +#[test] +fn matrix_2x2_silent_col_num() { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("ru", "ClearSpeak_Matrix", "SilentColNum", + expr, "матрица 2 на 2; строка 1; бэ нижний индекс 1 1; бэ нижний индекс 1 2; \ + строка 2; бэ нижний индекс 2 1; бэ нижний индекс 2 2"); +} + + +#[test] +fn simple_matrix_end_matrix() { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("ru", "ClearSpeak_Matrix", "EndMatrix", + expr, "матрица 2 на 2; строка 1; 2, 1; строка 2; 7, 5; конец матрицы"); +} + +#[test] +fn col_matrix_3x1_end_matrix() { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("ru", "ClearSpeak_Matrix", "EndMatrix", + expr, "матрица-столбец 3 на 1; 1; 2; 3; конец матрицы"); +} + +#[test] +fn row_matrix_1x2_end_matrix() { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("ru", "ClearSpeak_Matrix", "EndMatrix", + expr, "матрица-строка 1 на 2; 1, 2; конец матрицы"); +} + +#[test] +fn matrix_2x2_end_matrix() { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("ru", "ClearSpeak_Matrix", "EndMatrix", + expr, "матрица 2 на 2; строка 1; столбец 1; бэ нижний индекс 1 1; столбец 2; бэ нижний индекс 1 2; \ + строка 2; столбец 1; бэ нижний индекс 2 1; столбец 2; бэ нижний индекс 2 2; конец матрицы"); +} + + +#[test] +fn simple_matrix_vector() { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("ru", "ClearSpeak_Matrix", "Vector", + expr, "матрица 2 на 2; строка 1; 2, 1; строка 2; 7, 5"); +} + +#[test] +fn col_matrix_3x1_vector() { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("ru", "ClearSpeak_Matrix", "Vector", + expr, "вектор-столбец 3 на 1; 1; 2; 3"); +} + +#[test] +fn row_matrix_1x2_vector() { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("ru", "ClearSpeak_Matrix", "Vector", + expr, "вектор-строка 1 на 2; 1, 2"); +} + +#[test] +fn matrix_2x2_vector() { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("ru", "ClearSpeak_Matrix", "Vector", + expr, "матрица 2 на 2; строка 1; столбец 1; бэ нижний индекс 1 1; столбец 2; бэ нижний индекс 1 2; \ + строка 2; столбец 1; бэ нижний индекс 2 1; столбец 2; бэ нижний индекс 2 2"); +} + + +#[test] +fn simple_matrix_end_vector() { +let expr = " + + ( + + + + 2 + 1 + + + 7 + 5 + + + ) + "; + test_ClearSpeak("ru", "ClearSpeak_Matrix", "EndVector", + expr, "матрица 2 на 2; строка 1; 2, 1; строка 2; 7, 5; конец матрицы"); +} + +#[test] +fn col_matrix_3x1_end_vector() { +let expr = " + + ( + + + + 1 + + + 2 + + + 3 + + + ) + "; +test_ClearSpeak("ru", "ClearSpeak_Matrix", "EndVector", + expr, "вектор-столбец 3 на 1; 1; 2; 3; конец вектора"); +} + +#[test] +fn row_matrix_1x2_end_vector() { +let expr = " + + [ + + + + 1 2 + + + ] + "; +test_ClearSpeak("ru", "ClearSpeak_Matrix", "EndVector", + expr, "вектор-строка 1 на 2; 1, 2; конец вектора"); +} + +#[test] +fn matrix_2x2_end_vector() { +let expr = "( + + + b11 + b12 + + + b21 + b22 + + + )"; +test_ClearSpeak("ru", "ClearSpeak_Matrix", "EndVector", + expr, "матрица 2 на 2; строка 1; столбец 1; бэ нижний индекс 1 1; столбец 2; бэ нижний индекс 1 2; \ + строка 2; столбец 1; бэ нижний индекс 2 1; столбец 2; бэ нижний индекс 2 2; конец матрицы"); +} + + + +#[test] +fn matrix_binomial() { + let expr = " + ( + 32 + ) + "; + test_ClearSpeak("ru", "ClearSpeak_Matrix", "Combinatorics", expr, "число сочетаний из 3 по 2"); +} + +#[test] +fn matrix_times() { + let expr = " + 1234 + abcd + "; + test("ru", "SimpleSpeak", expr, + "матрица 2 на 2; строка 1; 1, 2; строка 2; 3, 4; умножить на, матрица 2 на 2; строка 1; а, б; строка 2; цэ, дэ"); +} + +#[test] +fn unknown_mtable_property() { + let expr = " + + + + a + + + = + + + + b + + + c + + d + + + + + + + + + + e + + f + + + + "; + test("ru", "ClearSpeak", expr, + "2 строки; строка 1; а равно b плюс цэ минус дэ; строка 2; плюс e минус f"); +} + + +#[test] +fn zero_matrix() { + let expr = " + [ + + 00 + 00 + + ] + "; + test("ru", "SimpleSpeak", expr, + "нулевая матрица 2 на 2"); +} + +#[test] +fn identity_matrix() { + let expr = " + ( + + 100 + 010 + 001 + + ) + "; + test("ru", "SimpleSpeak", expr, + "единичная матрица 3 на 3"); +} + +#[test] +fn diagonal_matrix() { + let expr = " + ( + + 200 + 010 + 00x2 + + ) + "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], + expr, "диагональная матрица 3 на 3; столбец 1; 2; столбец 2; 1; столбец 3; икс в квадрате"); + // test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Verbose")], + // expr, "диагональная матрица 3 на 3; строка 1, столбец 1, 2; строка 2, столбец 2, 1; строка 3, столбец 3, икс в квадрате"); +} diff --git a/tests/Languages/ru/shared.rs b/tests/Languages/ru/shared.rs new file mode 100644 index 00000000..8282ec2c --- /dev/null +++ b/tests/Languages/ru/shared.rs @@ -0,0 +1,451 @@ +/// Тесты для правил, общих для различных стилей речи: +/// * модифицированная переменная +use crate::common::*; + +#[test] +fn modified_vars() { + let expr = " + a ` + b ~ + c ̆ + b ̌ + c ` + + r ˇ + + x . + y ˙ + z ¨ + u + v + + x ^ + + t + "; + test("ru", "SimpleSpeak", expr, + "а гравис, б тильда, цэ брэвэ, б гачек, цэ гравис; плюс \ + эр гачек; плюс икс точка, игрек точка, зет две точки, у три точки, вэ четыре точки; плюс икс циркумфлекс, плюс вектор тэ"); +} + +#[test] +fn limit() { + let expr = " + + lim + x 0 + + + + sin x + x + + + "; + test("ru", "SimpleSpeak", expr, "предел при x стремящемся к 0, от, дроби, синус икс, делить на, икс, конец дроби"); + test_prefs("ru", "SimpleSpeak", vec![("Impairment", "LearningDisability")], expr, + "предел при x стремящемся к 0, от; синус икс, делить на икс"); +} + +#[test] +fn limit_from_below() { + let expr = " + + lim + x 0 + + + sin x + + "; + test("ru", "SimpleSpeak", expr, "предел при x стремящемся к 0 снизу, от синус икс"); +} + +#[test] +fn binomial_mmultiscripts() { + let expr = "Cmn"; + test("ru", "SimpleSpeak", expr, "число сочетаний из n по m"); +} + +#[test] +fn binomial_mmultiscripts_other() { + let expr = "Cmn"; + test("ru", "SimpleSpeak", expr, "число сочетаний из n по m"); +} + +#[test] +fn binomial_subscript() { // C_{n,k} + let expr = "Cn,m"; + test("ru", "SimpleSpeak", expr, "число сочетаний из n по m"); +} + +#[test] +fn permutation_mmultiscripts() { + let expr = "Pkn"; + test("ru", "SimpleSpeak", expr, "число размещений из n по k"); +} + +#[test] +fn permutation_mmultiscripts_sup() { + let expr = "Pkn"; + test("ru", "SimpleSpeak", expr, "число размещений из n по k"); +} + +#[test] +fn permutation_msubsup() { + let expr = "Pkn"; + test("ru", "SimpleSpeak", expr, "число размещений из n по k"); +} + +#[test] +fn tensor_mmultiscripts() { + let expr = " + R i j k l + "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, + "заглавная эр с 4 индексами после, нижний индекс i верхний индекс j нижний индекс k нижний индекс l"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Medium")], expr, + "заглавная эр с 4 индексами после, нижний i верхний j нижний k нижний l"); +} + +#[test] +fn huge_num_mmultiscripts() { + let expr = " + R i j k l m + I J K L + "; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, + "заглавная эр с 4 индексами перед, перед нижний заглавная и, перед верхний заглавная джей и далее перед нижний заглавная ка перед нижний заглавная эль, и с 5 индексами после, нижний индекс i верхний индекс j нижний индекс k нижний индекс l и далее нижний индекс m"); +} + +#[test] +fn prime() { + let expr = " x "; + test("ru", "SimpleSpeak", expr, "икс штрих"); +} + +#[test] +fn given() { + let expr = "P(A|B)"; + test("ru", "SimpleSpeak", expr, "заглавная пэ, открывающая круглая скобка, заглавная а при условии заглавная бэ, закрывающая круглая скобка"); + test("ru", "ClearSpeak", expr, "заглавная пэ, открывающая круглая скобка, заглавная а при условии заглавная бэ, закрывающая круглая скобка"); +} + +#[test] +fn simple_msubsup() { + let expr = " + + + x + + k + + + i + + + + "; + test("ru", "ClearSpeak", expr, "икс нижний индекс k, в степени i"); +} + +#[test] +fn non_simple_msubsup() { + let expr = "ij2k"; + test("ru", "SimpleSpeak", expr, "и нижний индекс j минус 2, в степени k"); + test("ru", "ClearSpeak", expr, "и нижний индекс j минус 2, в степени k"); + test_prefs("ru", "SimpleSpeak", vec![("Impairment", "LearningDisability")], expr, + "и нижний индекс j минус 2, в степени k"); +} + +#[test] +fn presentation_mathml_in_semantics() { + let expr = " + + {\\displaystyle x_k^i} + + + x + + k + + + i + + + + + "; + test("ru", "ClearSpeak", expr, "икс нижний индекс k, в степени i"); +} + +#[test] +fn ignore_period() { + let expr = " + + {\\displaystyle x_k^i} + + + + P + ( + A + + +  and  + + + B + ) + = + P + ( + A + + B + ) + = + P + ( + A + ) + P + ( + B + ) + . + + + + + "; + test("ru", "SimpleSpeak", expr, "заглавная пэ; открывающая круглая скобка, заглавная а и заглавная бэ; закрывающая круглая скобка; равно; заглавная пэ, открывающая круглая скобка, заглавная а пересечение заглавная бэ; закрывающая круглая скобка; равно, заглавная пэ от заглавной а, заглавная пэ от заглавной бэ"); +} + +#[test] +fn ignore_mtext_period() { + let expr = "{2}."; + test("ru", "SimpleSpeak", expr, "множество 2"); +} + +#[test] +fn ignore_comma() { + let expr = " + + + ϕ + ( + x + ) + = + c + + e + + + + h + + 2 + + + + x + + 2 + + + + + , + + +"; + test("ru", "SimpleSpeak", expr, "фи от икс равно; цэ, e в степени минус аш в квадрате, икс в квадрате"); +} + +#[test] +#[ignore] // issue #14 +fn ignore_period_and_space() { + let expr = " + + + P + ( + A + + B + ) + = + + + + P + ( + A + + B + ) + + + P + ( + B + ) + + + + . + + + +"; + test("ru", "ClearSpeak", expr, "фи от икс равно; цэ, e в степени минус аш в квадрате икс в квадрате"); +} + +#[test] +fn bug_199_2pi() { + let expr = " + + [ + + 0 + + , + + 2 + π + + ) + + "; + test("ru", "SimpleSpeak",expr, "полуинтервал от 0 до 2 пи"); +} + +#[test] +fn caret_and_hat() { + let expr = "x^2+y^"; + test("ru", "SimpleSpeak",expr, "икс крышка 2 плюс игрек циркумфлекс"); +} + +#[test] +fn mn_with_space() { + let expr = "1 234 567"; + test_prefs("ru", "SimpleSpeak", vec![("DecimalSeparators", "."), ("BlockSeparators", " ,")], expr, "1234567"); +} + +#[test] +fn mn_with_block_and_decimal_separators() { + let expr = "1,234.56"; + test_prefs("ru", "SimpleSpeak", vec![("DecimalSeparators", "."), ("BlockSeparators", " ,")], expr, "1234.56"); +} + +#[test] +fn divergence() { + let expr = "·F"; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "див заглавная эф"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "дивергенция заглавной эф"); +} + +#[test] +fn curl() { + let expr = "×F"; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "ротор заглавная эф"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "ротор заглавной эф"); +} + +#[test] +fn gradient() { + let expr = "F"; + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Terse")], expr, "набла заглавная эф"); + test_prefs("ru", "SimpleSpeak", vec![("Verbosity", "Verbose")], expr, "градиент заглавной эф"); +} + +#[test] +fn literal_speak() { + let expr = r#" + + + A + + + + + B + + + + "#; + test("ru", "LiteralSpeak", expr, "заглавная а со стрелкой, перпендикулярно, заглавная бэ со стрелкой"); +} + +#[test] +fn literal_speak_with_name() { + let expr = r#" + + f + + + ( + + x + ! + + ) + + + "#; + test("ru", "LiteralSpeak", expr, "форсид эф, открывающая круглая скобка икс восклицательный знак, закрывающая круглая скобка"); +} + +#[test] +fn literal_speak_with_property() { + let expr = r#" + + f + + + ( + + x + ! + + ) + + + "#; + test("ru", "LiteralSpeak", expr, "эф, открывающая круглая скобка икс восклицательный знак, закрывающая круглая скобка"); +} + +#[test] +fn literal_intent_property() { + let expr = r#" + + + A + + + + + B + + + + "#; + test("ru", "SimpleSpeak", expr, "заглавная а со стрелкой, перпендикулярно, заглавная бэ со стрелкой"); +} + +#[test] +fn literal_intent_property_with_name() { + let expr = r#" + + f + + + ( + + x + ! + + ) + + + "#; + test("ru", "SimpleSpeak", expr, "форсид эф, открывающая круглая скобка икс восклицательный знак, закрывающая круглая скобка"); +} diff --git a/tests/Languages/ru/units.rs b/tests/Languages/ru/units.rs new file mode 100644 index 00000000..ec468894 --- /dev/null +++ b/tests/Languages/ru/units.rs @@ -0,0 +1,489 @@ +/// Тесты для правил, общих для различных стилей речи: +/// * модифицированная переменная +use crate::common::*; + +// Основная структура тестов: +// 1. Проход по всем приставкам СИ +// 2. Проход по каждой группе единиц СИ +// a) как в единственном, так и во множественном числе без приставок +// b) как в единственном, так и во множественном числе с одной приставкой +// 3. Проход по каждой группе единиц, не принимающих приставки СИ +// Они разбиты на части, чтобы легче было видеть ошибки, когда они есть. + +#[test] +fn prefix_sweep() { + 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("ru", "SimpleSpeak", expr, + "кветта-граммы, запятая, \ + ронна-граммы, запятая, \ + иотта-граммы, запятая, \ + зетта-граммы, запятая, \ + экса-граммы, запятая, \ + пета-граммы, запятая, \ + тера-граммы, запятая, \ + гига-граммы, запятая, \ + мега-граммы, запятая, \ + кило-граммы, запятая, \ + гекто-граммы, запятая, \ + дека-граммы, запятая, \ + деци-граммы, запятая, \ + санти-граммы, запятая, \ + милли-граммы, запятая, \ + микро-граммы, запятая, \ + нано-граммы, запятая, \ + пико-граммы, запятая, \ + фемто-граммы, запятая, \ + атто-граммы, запятая, \ + зепто-граммы, запятая, \ + иокто-граммы, запятая, \ + ронто-граммы, запятая, \ + квекто-граммы"); +} + +#[test] +fn si_base() { + 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("ru", "SimpleSpeak", expr, + "1 ампер, запятая, 2 ампера, запятая, \ + 1 кандела, запятая; 2 канделы, запятая, \ + 1 кельвин, запятая, 2 кельвина, запятая, \ + 1 кельвин, запятая, 2 кельвина, запятая, \ + 1 грамм, запятая, 2 грамма, запятая, \ + 1 метр, запятая, 2 метра, запятая, \ + 1 моль, запятая, 2 моля, запятая, \ + 1 секунда, запятая, 2 секунды, запятая, \ + 1 секунда, запятая, 2 секунды, запятая, \ + 1 секунда, запятая, 2 секунды, запятая, \ + 1 секунда, запятая, 2 секунды"); +} + +#[test] +fn si_base_with_prefixes() { + let expr = r#" + 1QA,2RA, + 1Ycd,2Zcd, + 1EK,2PK, + 1TK,2GK, + 1Mg,2kg, + 1hm,2dam, + 1dmol,2cmol, + 1ms,2µs, + 1nsec,2psec + "#; + test("ru", "SimpleSpeak", expr, + "1 кветта-ампер, запятая; 2 ронна-ампера, запятая; \ + 1 иотта-кандела, запятая; 2 зетта-канделы, запятая; \ + 1 экса-кельвин, запятая; 2 пета-кельвина, запятая; \ + 1 тера-кельвин, запятая; 2 гига-кельвина, запятая; \ + 1 мега-грамм, запятая; 2 кило-грамма, запятая; \ + 1 гекто-метр, запятая; 2 дека-метра, запятая; \ + 1 деци-моль, запятая; 2 санти-моля, запятая; \ + 1 милли-секунда, запятая; 2 микро-секунды, запятая; \ + 1 нано-секунда, запятая; 2 пико-секунды"); +} + +#[test] +fn si_derived_1() { + 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("ru", "SimpleSpeak", expr, + "1 беккерель, запятая; 2 беккереля, запятая, \ + 1 кулон, запятая; 2 кулона, запятая; \ + 1 градус Цельсия, запятая; 2 градуса Цельсия, запятая; \ + 1 градус Цельсия, запятая; 2 градуса Цельсия, запятая, \ + 1 фарад, запятая, 2 фарада, запятая, \ + 1 грей, запятая, 2 грея, запятая, \ + 1 генри, запятая, 2 генри, запятая, \ + 1 герц, запятая, 2 герца, запятая, \ + 1 джоуль, запятая, 2 джоуля, запятая, \ + 1 катал, запятая, 2 катала, запятая, \ + 1 люмен, запятая, 2 люмена, запятая, \ + 1 люкс, запятая, 2 люкс"); +} + +#[test] +fn si_derived_1_with_prefixes() { + 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("ru", "SimpleSpeak", expr, + "1 кветта-беккерель, запятая; 2 ронна-беккереля; запятая; \ + 1 иотта-кулон, запятая; 2 зетта-кулона, запятая; \ + 1 экса-фарад, запятая; 2 пета-фарада, запятая; \ + 1 тера-грей, запятая; 2 гига-грея, запятая; \ + 1 мега-генри, запятая; 2 кило-генри, запятая; \ + 1 дека-герц, запятая; 2 деци-герца, запятая; \ + 1 санти-джоуль, запятая; 2 милли-джоуля, запятая; \ + 1 микро-катал, запятая; 2 нано-катала, запятая; \ + 1 пико-люмен, запятая; 2 фемто-люмена, запятая; \ + 1 атто-люкс, запятая; 2 зепто-люкс, запятая; \ + 1 милли-градус Цельсия; запятая; 2 микро-градуса Цельсия; запятая; \ + 1 пико-градус Цельсия; запятая; 2 нано-градуса Цельсия"); +} + +#[test] +fn si_derived_2() { + let expr = r#" + 1N,2N, + 1Ω,2Ω, + 1,2, + 1Pa,2Pa, + 1S,2S, + 1Sv,2Sv, + 1T,2T, + 1V,2V, + 1W,2W, + 1Wb,2Wb + "#; + test("ru", "SimpleSpeak", expr, + "1 ньютон, запятая, 2 ньютона, запятая, \ + 1 ом, запятая, 2 ома, запятая, \ + 1 ом, запятая, 2 ома, запятая, \ + 1 паскаль, запятая, 2 паскаля, запятая, \ + 1 сименс, запятая, 2 сименс, запятая, \ + 1 зиверт, запятая; 2 зиверта, запятая, \ + 1 тесла, запятая, 2 теслы, запятая, \ + 1 вольт, запятая, 2 вольта, запятая, \ + 1 ватт, запятая, 2 ватта, запятая, \ + 1 вебер, запятая, 2 вебера"); +} + +#[test] +fn si_derived_2_with_prefixes() { + 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("ru", "SimpleSpeak", expr, + "1 квекто-ньютон, запятая; 2 ронто-ньютона, запятая; \ + 1 иокто-ом, запятая; 2 зепто-ома, запятая; \ + 1 атто-ом, запятая; 2 фемто-ома, запятая; \ + 1 пико-паскаль, запятая; 2 нано-паскаля, запятая; \ + 1 микро-сименс, запятая; 2 милли-сименс, запятая; \ + 1 санти-зиверт, запятая; 2 деци-зиверта, запятая; \ + 1 дека-тесла, запятая; 2 гекто-теслы, запятая; \ + 1 кило-вольт, запятая; 2 мега-вольта, запятая; \ + 1 гига-ватт, запятая; 2 тера-ватта, запятая; \ + 1 пета-вебер, запятая; 2 экса-вебера"); +} + +#[test] +fn si_accepted() { + 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("ru", "SimpleSpeak", expr, + "1 литр, запятая, 2 литра, запятая, \ + 1 литр, запятая, 2 литра, запятая, \ + 1 литр, запятая, 2 литра, запятая, \ + 1 тонна, запятая; 2 тонны, запятая, \ + 1 дальтон, запятая, 2 дальтона, запятая, \ + 1 непер, запятая, 2 непера, запятая; \ + 1 атомная единица массы, запятая; 2 атомные единицы массы, запятая; \ + 1 электронвольт, запятая; 2 электронвольта, запятая, \ + 1 радиан, запятая, 2 радиана, запятая, \ + 1 стерадиан, запятая; 2 стерадиана, запятая, \ + 1 год, запятая, 2 года, запятая, \ + 1 угловая секунда, запятая; 2 угловые секунды, запятая, \ + 1 бит, запятая, 2 бита, запятая, \ + 1 байт, запятая, 2 байта, запятая, \ + 1 бод, запятая, 2 бода"); +} + +#[test] +fn si_accepted_with_prefixes() { + 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("ru", "SimpleSpeak", expr, + "1 кветта-литр, запятая; 2 ронна-литра, запятая; \ + 1 иотта-литр, запятая; 2 зетта-литра, запятая; \ + 1 экса-литр, запятая; 2 пета-литра, запятая; \ + 1 тера-тонна, запятая; 2 гига-тонны; запятая; \ + 1 мега-дальтон, запятая; 2 кило-дальтона, запятая; \ + 1 деци-непер, запятая; 2 санти-непера, запятая; \ + 1 гекто-атомная единица массы; запятая; 2 дека-атомные единицы массы; запятая; \ + 1 милли-электронвольт, запятая; 2 микро-электронвольта; запятая; \ + 1 нано-радиан, запятая; 2 пико-радиана, запятая; \ + 1 фемто-стерадиан, запятая; 2 атто-стерадиана; запятая; \ + 1 гига-год, запятая; 2 мега-года, запятая; \ + 1 зепто-угловая секунда, запятая; 2 иокто-угловые секунды; запятая; \ + 1 кило-бит, запятая; 2 мега-бита, запятая; \ + 1 гига-байт, запятая; 2 тера-байта, запятая; \ + 1 тера-бод, запятая; 2 экса-бода"); +} + +#[test] +fn without_prefix_time() { + 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("ru", "SimpleSpeak", expr, + "1 секунда, запятая, 2 секунды, запятая, \ + 1 секунда, запятая, 2 секунды, запятая, \ + 1 минута, запятая, 2 минуты, запятая, \ + 1 минута, запятая, 2 минуты, запятая, \ + 1 минута, запятая, 2 минуты, запятая, \ + 1 час, запятая, 2 часа, запятая, \ + 1 час, запятая, 2 часа, запятая, \ + 1 час, запятая, 2 часа, запятая, \ + 1 день, запятая, 2 дня, запятая, \ + 1 день, запятая, 2 дня, запятая, \ + 1 неделя, запятая, 2 недели, запятая, \ + 1 неделя, запятая, 2 недели, запятая, \ + 1 год, запятая, 2 года, запятая, \ + 1 год, запятая, 2 года"); +} + +#[test] +fn without_prefix_angles() { + let expr = r#" + 1°,2°, + 1deg,2deg, + 1arcmin,2arcmin, + 1amin,2amin, + 1am,2am, + 1MOA,2MOA, + 1arcsec,2arcsec, + 1asec,2asec + "#; + test("ru", "SimpleSpeak", expr, + "1 градус, запятая, 2 градуса, запятая, \ + 1 градус, запятая, 2 градуса, запятая, \ + 1 угловая минута, запятая; 2 угловые минуты, запятая, \ + 1 угловая минута, запятая; 2 угловые минуты, запятая, \ + 1 угловая минута, запятая; 2 угловые минуты, запятая, \ + 1 угловая минута, запятая; 2 угловые минуты, запятая, \ + 1 угловая секунда, запятая; 2 угловые секунды, запятая, \ + 1 угловая секунда, запятая; 2 угловые секунды"); +} + +#[test] +fn without_prefix_distance() { + let expr = r#" + 1au,2au, + 1ltyr,2ltyr, + 1pc,2pc, + 1Å,2Å, + 1,2, + 1fm,2fm + "#; + test("ru", "SimpleSpeak", expr, + "1 астрономическая единица, запятая; 2 астрономические единицы, запятая, \ + 1 световой год, запятая; 2 световых года, запятая, \ + 1 парсек, запятая, 2 парсека, запятая, \ + 1 ангстрем, запятая; 2 ангстрема, запятая, \ + 1 ангстрем, запятая; 2 ангстрема, запятая, \ + 1 ферми, запятая, 2 ферми"); +} + +#[test] +fn without_prefix_other() { + 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, + 1,2, + 1dyn,2dyn, + 1erg,2erg + "#; + test("ru", "SimpleSpeak", expr, + "1 гектар, запятая; 2 гектара, запятая, \ + 1 децибел, запятая; 2 децибела, запятая, \ + 1 атмосфера, запятая; 2 атмосферы, запятая; \ + 1 атомная единица массы, запятая; 2 атомные единицы массы, запятая, \ + 1 бар, запятая, 2 бара, запятая, \ + 1 калория, запятая; 2 калории, запятая, \ + 1 кюри, запятая, 2 кюри, запятая, \ + 1 град, запятая; 2 града, запятая, \ + 1 моляр, запятая, 2 моляра, запятая, \ + 1 рентген, запятая; 2 рентгена, запятая; \ + 1 оборот в минуту, запятая; 2 оборота в минуту, запятая, \ + 1 эм-аш-о, запятая, 2 эм-аш-о, запятая, \ + 1 дина, запятая, 2 дины, запятая, \ + 1 эрг, запятая, 2 эрга"); +} + +#[test] +fn without_prefix_powers_of_2() { + 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("ru", "SimpleSpeak", expr, + "1 кибибит, запятая; 2 кибибита, запятая, \ + 1 мебибит, запятая; 2 мебибита, запятая, \ + 1 гибибит, запятая; 2 гибибита, запятая, \ + 1 тебибит, запятая; 2 тебибита, запятая, \ + 1 пебибит, запятая; 2 пебибита, запятая, \ + 1 эксбибит, запятая; 2 эксбибита, запятая, \ + 1 зебибит, запятая; 2 зебибита, запятая, \ + 1 йобибит, запятая; 2 йобибита, запятая, \ + 1 кибибайт, запятая; 2 кибибайта, запятая, \ + 1 мебибайт, запятая; 2 мебибайта, запятая, \ + 1 гибибайт, запятая; 2 гибибайта, запятая, \ + 1 тебибайт, запятая; 2 тебибайта, запятая, \ + 1 пебибайт, запятая; 2 пебибайта, запятая, \ + 1 эксбибайт, запятая; 2 эксбибайта, запятая, \ + 1 зебибайт, запятая; 2 зебибайта, запятая, \ + 1 йобибайт, запятая; 2 йобибайта"); +} + +#[test] +fn si_other_numbers() { + let expr = r#"1.0l, + 2.0 m, + x ms, + yµs, + dag, + 1235daN, + 2.5µsec, + 32.34mol"#; + test("ru", "SimpleSpeak", expr, + "1.0 литра, запятая; 2.0 метра, запятая; икс миллисекунд, запятая; игрек микросекунд, запятая, \ + дека-граммы, запятая; 1235 дека-ньютонов; запятая; 2.5 микросекунды; запятая; 32.34 моля"); +} + +#[test] +fn test_mtext_inference() { + let expr = r#"[ + 1t, + 2PA, + 3Pa, + 4.5mT + ]"#; + test("ru", "SimpleSpeak", expr, + "открывающая квадратная скобка; 1 тонна, запятая; 2 пета-ампера, запятая, \ + 3 паскаля, запятая; 4.5 милли-теслы; закрывающая квадратная скобка"); +} diff --git a/tests/languages.rs b/tests/languages.rs index 4d5c890a..4952d935 100644 --- a/tests/languages.rs +++ b/tests/languages.rs @@ -6,6 +6,7 @@ mod Languages { mod intent; mod zh; mod en; + mod ru; mod fi; mod sv; mod nb; From a7732434bac2e8e998a83ab11870374824e5f495 Mon Sep 17 00:00:00 2001 From: Danil <81031453+Kostenkov-2021@users.noreply.github.com> Date: Tue, 31 Mar 2026 15:19:58 +0300 Subject: [PATCH 33/43] Update Russian navigation translations Revise and correct Russian phrases in Rules/Languages/ru/navigate.yaml for navigation, zoom, movement and index terminology. Replaces English transliterations and incorrect terms, fixes grammar/wording for verbose/terse messages, and improves consistency across related prompts. --- Rules/Languages/ru/navigate.yaml | 120 +++++++++++++++---------------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/Rules/Languages/ru/navigate.yaml b/Rules/Languages/ru/navigate.yaml index 7f35caa9..936fd336 100644 --- a/Rules/Languages/ru/navigate.yaml +++ b/Rules/Languages/ru/navigate.yaml @@ -48,44 +48,44 @@ - if: "$MatchCounter = 0 and $SayCommand = 'true'" then_test: - if: "self::m:math and starts-with($NavCommand, 'ZoomOut')" - then: [t: "увеличение все еще", pause: "medium"] + then: [t: "увеличение всё ещё", pause: "medium"] - else_if: "IsNode(., 'leaf') and starts-with($NavCommand, 'ZoomIn')" - then: [t: "увеличение на все пути", pause: "medium"] + then: [t: "увеличение полностью", pause: "medium"] else: - test: - if: "starts-with($NavCommand, 'Zoom')" - then: [set_variables: [Prefix: "'zoom'"]] # phrase('zoom' in to see more details) + then: [set_variables: [Prefix: "'увеличение'"]] # phrase('zoom' in to see more details) - else_if: "starts-with($NavCommand, 'Move')" - then: [set_variables: [Prefix: "'move'"]] # phrase('move' to next entry in table) + then: [set_variables: [Prefix: "'перемещение'"]] # phrase('move' to next entry in table) - else_if: "starts-with($NavCommand, 'Read')" - then: [set_variables: [Prefix: "'read'"]] # phrase('read' to next entry in table) + then: [set_variables: [Prefix: "'чтение'"]] # phrase('read' to next entry in table) - else_if: "starts-with($NavCommand, 'Describe')" - then: [set_variables: [Prefix: "'describe'"]] # phrase('describe' to next entry in table) + then: [set_variables: [Prefix: "'описание'"]] # phrase('describe' to next entry in table) - test: if: "$Prefix != ''" then: - x: "$Prefix" - test: - if: "substring($NavCommand, string-length($Prefix)+1) = 'In'" - then: [t: "in"] # phrase(zoom 'in' to see more details) + then: [t: "внутрь"] # phrase(zoom 'in' to see more details) - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'InAll'" # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets "ed" concatenated to "zoom" - then: [t: "все путь"] # phrase(zoom 'out all the way' to see more details) + then: [t: "полностью"] # phrase(zoom 'out all the way' to see more details) - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Out'" - then: [t: "out"] # phrase(zoom 'out' to see more details) + then: [t: "наружу"] # phrase(zoom 'out' to see more details) - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'OutAll'" # HACK: '\uF8FE' is used internally for the concatenation char by 'ct' -- this gets "ed" concatenated to "zoom" - then: [t: "все путь"] # phrase(zoom 'out all the way' to see more details) + then: [t: "полностью"] # phrase(zoom 'out all the way' to see more details) - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Next'" - then: [t: "право"] # phrase(move to the 'right') + then: [t: "вправо"] # phrase(move to the 'right') - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Previous'" - then: [t: "лево"] # phrase(move to the 'left') + then: [t: "влево"] # phrase(move to the 'left') - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'Current'" then: [t: "текущий"] # phrase(who is the 'current' president) - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'LineStart'" - then: [t: "к началу строки"] # phrase(move 'to start of line') + then: [t: "в начало строки"] # phrase(move 'to start of line') - else_if: "substring($NavCommand, string-length($Prefix)+1) = 'LineEnd'" - then: [t: "к концу строки"] # phrase(move 'to end of line') + then: [t: "в конец строки"] # phrase(move 'to end of line') - pause: "medium" - set_variables: [MatchCounter: "1"] @@ -129,7 +129,7 @@ - test: if: "count($Child2D/preceding-sibling::*)=0" then: [t: "основание"] # phrase(the 'base' of the power) - else: [t: "sepcript"] # phrase(x with 'subscript' 2) + else: [t: "нижний индекс"] # phrase(x with 'subscript' 2) - pause: "medium" - name: into-or-out-of-msup @@ -140,7 +140,7 @@ - test: if: "not($Child2D/preceding-sibling::*)" then: [t: "основание"] # phrase(the 'base' of the power) - else: [t: "superscript"] # phrase(x with 'superscript' 2) # FIX: it would be better to use the word used when reading (power, exponent, ...) + else: [t: "верхний индекс"] # phrase(x with 'superscript' 2) # FIX: it would be better to use the word used when reading (power, exponent, ...) - pause: "medium" - name: into-or-out-of-msubsup @@ -152,8 +152,8 @@ - if: "not($Child2D/preceding-sibling::*)" then: [t: "основание"] # phrase(the 'base' of the power) - else_if: "count($Child2D/preceding-sibling::*)=1" - then: [t: "sepcript"] # phrase(x with 'subscript' 2) - else: [t: "superscript"] # phrase(x with 'superscript' 2) # FIX: it would be better to use the word used when reading (power, exponent, ...) + then: [t: "нижний индекс"] # phrase(x with 'subscript' 2) + else: [t: "верхний индекс"] # phrase(x with 'superscript' 2) # FIX: it would be better to use the word used when reading (power, exponent, ...) - pause: "medium" - name: into-or-out-of-munder @@ -210,13 +210,13 @@ then: - test: # in postscripts -- base shifts by one if: "$NumPrecedingSiblings mod 2 = 0" - then: [t: "sepcript"] # phrase(x with 'subscript' 2) - else: [t: "superscript"] # phrase(x with 'superscript' 2) + then: [t: "нижний индекс"] # phrase(x with 'subscript' 2) + else: [t: "верхний индекс"] # phrase(x with 'superscript' 2) else: - test: if: "$NumPrecedingSiblings mod 2 = 0" - then: [t: "pre-superscript"] # phrase(x with 'pre-superscript' 2) - else: [t: "pre-subscript"] # phrase(x with 'pre-subscript' 2) + then: [t: "верхний левый индекс"] # phrase(x with 'pre-superscript' 2) + else: [t: "нижний левый индекс"] # phrase(x with 'pre-subscript' 2) - pause: "medium" - name: into-or-out-of-mtd @@ -254,17 +254,17 @@ then: - test: - if: "$PreviousNavCommand = 'ZoomIn'" - then: [t: "отменить zoom in"] # phrase('undo zoom in') + then: [t: "отмена увеличения"] # phrase('undo zoom in') - else_if: "$PreviousNavCommand = 'ZoomOut'" - then: [t: "отменить увеличение"] # phrase('undo zoom out') + then: [t: "отмена уменьшения"] # phrase('undo zoom out') - else_if: "$PreviousNavCommand = 'ZoomInAll'" - then: [t: "отменить масштабирование на все пути"] # phrase('undo zooming in all the way') + then: [t: "отмена полного увеличения"] # phrase('undo zooming in all the way') - else_if: "$PreviousNavCommand = 'ZoomOutAll'" - then: [t: "отменить увеличиваясь на весь путь"] # phrase('undo zooming out all the way') + then: [t: "отмена полного уменьшения"] # phrase('undo zooming out all the way') - else_if: "$PreviousNavCommand = 'MovePrevious' or $PreviousNavCommand = 'MovePreviousZoom'" - then: [t: "отменить движение влево"] # phrase('undo move left') + then: [t: "отмена перемещения влево"] # phrase('undo move left') - else_if: "$PreviousNavCommand = 'MoveNext' or $PreviousNavCommand = 'MoveNextZoom'" - then: [t: "отменить направо"] # phrase('undo move right') + then: [t: "отмена перемещения вправо"] # phrase('undo move right') - else_if: "$PreviousNavCommand = 'None'" then: [t: "нет предыдущей команды"] # phrase('no previous command') - pause: "medium" @@ -289,7 +289,7 @@ replace: - test: if: "$MatchCounter = 0 and $NavVerbosity != 'Terse'" - then: [t: "расширение на весь путь", pause: "long"] # phrase('zoomed in all of the way') + then: [t: "увеличение полностью", pause: "long"] # phrase('zoomed in all of the way') - test: if: "$ReadZoomLevel!=-1" then: @@ -521,7 +521,7 @@ variables: [SayCommand: "string($NavVerbosity = 'Verbose')"] replace: [x: "."] # we need to speak it here - - t: "ряд" # phrase(the first 'row' of the matrix) + - t: "строка" # phrase(the first 'row' of the matrix) # if we let the speech rules speak the row, it is given just the MathML for the row, so the row # will always be '1' - x: "count(../preceding-sibling::*)+1" - pause: medium @@ -564,12 +564,12 @@ then: - test: - if: "$NavCommand = 'MoveStart'" - then: [t: "перейти к началу математики"] # phrase('move to start of math') + then: [t: "перемещение в начало выражения"] # phrase('move to start of math') - else_if: "$NavCommand = 'MoveLineStart'" - then: [t: "перейти к началу строки"] # phrase('move to start of line') + then: [t: "перемещение в начало строки"] # phrase('move to start of line') - else_if: "$NavCommand = 'MoveEnd'" - then: [t: "перейти к концу математики"] # phrase('move to end of math') - else: [t: "перейти к концу строки"] # "$NavCommand = 'MoveLineEnd'" # phrase('move to end of line') + then: [t: ""перемещение в конец выражения"] # phrase('move to end of math') + else: [t: ""перемещение в конец строки"] # "$NavCommand = 'MoveLineEnd'" # phrase('move to end of line') - pause: "medium" - test: if: "$NavCommand = 'MoveStart' or $NavCommand = 'MoveLineStart'" @@ -608,8 +608,8 @@ then: - test: if: "$NavCommand = 'MoveLineStart'" - then: [t: "перейти к началу строки"] # phrase('move to start of line') - else: [t: "перейти к концу строки"] # "$NavCommand = 'MoveLineEnd'" # phrase('move to end of line') + then: [t: "перемещение в начало строки"] # phrase('move to start of line') + else: [t: "перемещение в конец строки"] # "$NavCommand = 'MoveLineEnd'" # phrase('move to end of line') - pause: "medium" - test: if: "self::m:mrow or @data-from-mathml = 'mrow'" @@ -659,7 +659,7 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "двигайся влево" # phrase('move left') + - t: "перемещение влево" # phrase('move left') - pause: short - test: if: "$NavVerbosity != 'Terse'" @@ -689,7 +689,7 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "двигайся вправо" # phrase('move right') + - t: "перемещение вправо" # phrase('move right') - pause: short - test: if: "$NavVerbosity != 'Terse'" @@ -722,7 +722,7 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "перейти на вверх" # phrase('move up' to previous row in the table) + - t: "перемещение вверх" # phrase('move up' to previous row in the table) - pause: short - test: if: "$NavVerbosity != 'Terse'" @@ -758,7 +758,7 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "двигаться вниз" # phrase('move down to the next row in the table) + - t: "перемещение вниз" # phrase('move down to the next row in the table) - pause: short - test: if: "$NavVerbosity != 'Terse'" @@ -850,7 +850,7 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "перейти на вверх" # phrase('move up' to the previous row in the table) + - t: "перемещение вверх" # phrase('move up' to the previous row in the table) - pause: medium - t: "нет следующей строки" # phrase('no next row' in the table) - set_variables: [SpeakExpression: "'false'"] @@ -868,7 +868,7 @@ - test: if: "$NavVerbosity = 'Verbose'" then: - - t: "прочитайте текущую запись" # phrase('read current entry' in the table) + - t: "прочитать текущую запись" # phrase('read current entry' in the table) - pause: medium - test: if: "$NavVerbosity != 'Terse'" @@ -1197,7 +1197,7 @@ - test: if: "$MatchCounter = 0 and $NavVerbosity = 'Verbose'" then: - - t: "не могу двигаться правильно" # phrase('cannot move right') + - t: "невозможно перемещение вправо" # phrase('cannot move right') - pause: medium - with: variables: [Move2D: "'end of'", Child2D: "$EdgeNode/*[last()]"] @@ -1215,16 +1215,16 @@ - test: if: "$MatchCounter = 0 and $NavVerbosity = 'Verbose'" then: - - t: "не могу" # phrase('cannot' move right in expression) + - t: "невозможно" # phrase('cannot' move right in expression) - test: - if: "$NavCommand = 'MoveNext'" then: [t: "перейти"] # phrase('move' to next entry in table) - else_if: "$NavCommand = 'ReadNext'" - then: [t: "читать"] # phrase('read' next entry in table) - else: [t: "опишите"] # phrase('describe' next entry in table) - - t: "правильно" # phrase(move 'right') + then: [t: "чтение"] # phrase('read' next entry in table) + else: [t: "описание"] # phrase('describe' next entry in table) + - t: "вправо" # phrase(move 'right') - pause: short - - t: "конец математики" # phrase(move 'end of math') + - t: "конец выражения" # phrase(move 'end of math') - pause: long - set_variables: [SpeakExpression: "'false'"] @@ -1394,7 +1394,7 @@ - test: if: "$MatchCounter = 0 and $NavVerbosity = 'Verbose' and $NavCommand = 'MovePrevious'" then: - - t: "не могу двигаться влево" # phrase('cannot move left' in expression) + - t: "невозможно перемещение влево" # phrase('cannot move left' in expression) - pause: medium - with: variables: [Move2D: "'end of'", Child2D: "$EdgeNode/*[1]"] @@ -1408,7 +1408,7 @@ - "($NavCommand = 'MovePrevious' or $NavCommand = 'ReadPrevious' or $NavCommand = 'DescribePrevious') and" - "(self::m:math or name(EdgeNode(., 'left', 'math'))='math')" replace: - - t: "начало математики" # phrase('start of math') + - t: "начало выражения" # phrase('start of math') - pause: long - set_variables: [SpeakExpression: "'false'"] @@ -1421,7 +1421,7 @@ - test: if: "$MatchCounter = 0 and $NavVerbosity = 'Verbose'" then: - - t: "не могу двигаться влево" # phrase('cannot move left') + - t: "невозможно перемещение влево" # phrase('cannot move left') - pause: short - with: variables: [Move2D: "'start of'", Child2D: "."] @@ -1582,7 +1582,7 @@ - test: - if: "$NavMode = 'Enhanced'" then: - - t: "персонаж" # phrase(a mathematical 'character') + - t: "символ" # phrase(a mathematical 'character') - set_variables: [NavMode: "'Character'", ReadZoomLevel: "1"] - else_if: "$NavMode = 'Character'" then: @@ -1614,7 +1614,7 @@ - t: "улучшенный" # phrase(an 'enhanced' way to do something) - set_variables: [NavMode: "'Enhanced'", ReadZoomLevel: "-1"] - else: - - t: "персонаж" # phrase(a mathematical 'character') + - t: "символ" # phrase(a mathematical 'character') - set_variables: [NavMode: "'Character'", ReadZoomLevel: "1"] - t: "режим" # phrase(a simple 'mode' of use) - pause: long @@ -1632,11 +1632,11 @@ - test: if: "$Overview = 'true'" then: - - t: "говорите выражение после движения" # phrase('speak expression after move') + - t: "проговорить выражение после перемещения" # phrase('speak expression after move') - pause: long - set_variables: [Overview: "'false'"] else: - - t: "обзор выражения после движения" # phrase('overview of expression after move') + - t: "обзор выражения после перемещения" # phrase('overview of expression after move') - pause: long - set_variables: [Overview: "'true'"] @@ -1650,7 +1650,7 @@ - test: - if: "$NavCommand = 'ReadCurrent'" then: [t: "читать"] # phrase('read' next entry in table) - else: [t: "опишите"] # phrase('describe' next entry in table) + else: [t: "описать"] # phrase('describe' next entry in table) - t: "текущая" # phrase('current' entry in table) - pause: long - set_variables: [NavNode: "@id"] @@ -1671,10 +1671,10 @@ - if: "starts-with($NavCommand, 'Read')" then: [t: "читать"] # phrase('read' next entry in table) - else_if: "starts-with($NavCommand, 'Describe')" - then: [t: "опишите"] # phrase('describe' next entry in table) + then: [t: "описать"] # phrase('describe' next entry in table) - else_if: "starts-with($NavCommand, 'MoveTo')" then: [t: "перейти к"] # phrase('move to' the next entry in table) - else: [t: "установите"] # phrase('set' the value of the next entry in table) + else: [t: "установить"] # phrase('set' the value of the next entry in table) - t: "заполнитель" # phrase('placeholder' for the value) - x: "$PlaceMarkerIndex" - pause: long @@ -1687,7 +1687,7 @@ - test: if: "$NavVerbosity != 'Terse'" then: - - t: "установите заполнителя" # phrase('set placeholder' to the value) + - t: "установить заполнитель" # phrase('set placeholder' to the value) - x: "$PlaceMarkerIndex" - pause: long - set_variables: [NavNode: "@id"] @@ -1719,7 +1719,7 @@ - test: if: "$NavCommand = 'WhereAmI'" then: - - t: "внутри ничего больше" # phrase('inside of nothing more') + - t: "больше внутри ничего нет" # phrase('inside of nothing more') - pause: long - set_variables: [SpeakExpression: "'false'"] else: From 179563fd417350e86da76060e6ccc3ae68eeb4dc Mon Sep 17 00:00:00 2001 From: Danil <81031453+Kostenkov-2021@users.noreply.github.com> Date: Tue, 31 Mar 2026 18:31:02 +0300 Subject: [PATCH 34/43] Use correct Russian preposition for fractions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace incorrect "над" with "на" in Rules/Languages/ru/ClearSpeak_Rules.yaml for fraction phrasing. Two occurrences updated (phrase and replace sections) to improve naturalness and accuracy when speaking fractions in Russian. --- Rules/Languages/ru/ClearSpeak_Rules.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Rules/Languages/ru/ClearSpeak_Rules.yaml b/Rules/Languages/ru/ClearSpeak_Rules.yaml index 610e3ba3..03d9602e 100644 --- a/Rules/Languages/ru/ClearSpeak_Rules.yaml +++ b/Rules/Languages/ru/ClearSpeak_Rules.yaml @@ -178,7 +178,7 @@ then: [ot: ""] - t: "дробь" # phrase(the 'fraction' with 3 over 4) - x: "*[1]" - - t: "над" # phrase(the fraction 3 'over' 4) + - t: "на" # phrase(the fraction 3 'over' 4) - x: "*[2]" - test: # very ugly!!! -- replicate nested ordinal fraction as they are an exception @@ -207,7 +207,7 @@ - ")" replace: - x: "*[1]" - - t: "над" # phrase(the fraction 3 'over' 4) + - t: "на" # phrase(the fraction 3 'over' 4) - x: "*[2]" - test: if: "$ClearSpeak_Fractions='EndFrac' or $ClearSpeak_Fractions='OverEndFrac'" From b3eb33f20bc95d4f323ab5c7f67131c4fd60fab4 Mon Sep 17 00:00:00 2001 From: Danil <81031453+Kostenkov-2021@users.noreply.github.com> Date: Tue, 31 Mar 2026 18:33:46 +0300 Subject: [PATCH 35/43] Refine ru SimpleSpeak translations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adjust Russian SimpleSpeak rule strings and comments for clearer, more natural phrasing and better alignment with English references. Changes include removing redundant article tokens for terse verbosity, updating terms (e.g. 'корень', 'дробь', 'конец корня/дроби', 'в квадрате/в кубе', 'степень', 'в', 'на', 'множество', 'умножить'), switching pronunciation suffixes from '-th' to '-й', and converting many inline comments to concise English annotations. --- Rules/Languages/ru/SimpleSpeak_Rules.yaml | 84 +++++++++++------------ 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/Rules/Languages/ru/SimpleSpeak_Rules.yaml b/Rules/Languages/ru/SimpleSpeak_Rules.yaml index 19980f05..402ef73a 100644 --- a/Rules/Languages/ru/SimpleSpeak_Rules.yaml +++ b/Rules/Languages/ru/SimpleSpeak_Rules.yaml @@ -25,7 +25,7 @@ tag: mn match: "starts-with(text(), '-')" replace: - - t: "минус" # phrase(x 'minus' y) + - t: "минус" # (en: 'minus') - x: "translate(text(), '-_', '')" - name: default @@ -34,17 +34,17 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # phrase('the' square root of x) - - t: "квадратный корень" # phrase(the 'square root' of x) + then: [t: ""] + - t: "квадратный корень" # (en: 'square root') - test: if: "$Verbosity!='Terse'" - then: [t: "из"] # phrase(the square root 'of' x) + then: [t: "из"] # (en: 'of') else: [pause: short] - x: "*[1]" - test: if: "IsNode(*[1], 'leaf') or $Impairment != 'Blindness'" then: [pause: short] - else: [t: "end of root", pause: short] # phrase(start the square root of x 'end of root') + else: [t: "конец корня", pause: short] # (en: 'end of root') - name: default tag: root @@ -52,31 +52,31 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "а"] + then: [t: ""] - test: if: "*[2][self::m:mn and not(contains(., '.'))]" then_test: - if: "*[2][.='2']" - then: [t: "квадратный корень"] # phrase(the 'square root' of x) + then: [t: "квадратный корень"] # (en: 'square root') - else_if: "*[2][.='3']" - then: [t: "корень куба"] # phrase(the 'cube root' of x) - - else: [x: "ToOrdinal(*[2])", t: "корень"] # phrase(the square 'root' of 25) + then: [t: "кубический корень"] # (en: 'cube root') + - else: [x: "ToOrdinal(*[2])", t: "корень"] # (en: 'root') else: - test: if: "*[2][self::m:mi][string-length(.)=1]" then: - x: "*[2]" - - pronounce: [{text: "-th"}, {ipa: "θ"}, {sapi5: "th"}, {eloquence: "T"}] + - pronounce: [{text: "-й"}, {ipa: "j"}, {sapi5: "th"}, {eloquence: "T"}] else: [x: "*[2]"] - - t: "корень" # phrase(the square 'root' of) + - t: "корень" # (en: 'root') - test: if: "$Verbosity!='Terse'" - then: [t: "из"] # phrase(the square root 'of' x) + then: [t: "из"] # (en: 'of') - x: "*[1]" - test: if: "IsNode(*[1], 'leaf') or $Impairment != 'Blindness'" then: [pause: short] - else: [t: "end of root", pause: short] # phrase(start the fifth root of x 'end of root') + else: [t: "конец корня", pause: short] # (en: 'end of root') # Fraction rules # Mixed numbers mostly "just work" because the invisible char reads as "and" and other parts read properly on their own @@ -109,7 +109,7 @@ BaseNode(*[1])[contains(@data-intent-property, ':unit') or (self::m:mrow and self::*[3][contains(@data-intent-property, ':unit')])]" replace: - x: "*[1]" - - t: "перемещение" # phrase('5 meters 'per' second) + - t: "в" # (en: 'per') — например, "метров в секунду" - x: "*[2]" - name: simple @@ -122,7 +122,7 @@ - "not(ancestor::*[name() != 'mrow'][1]/self::m:fraction)" # FIX: can't test for mrow -- what should be used??? replace: - x: "*[1]" - - t: "над" # phrase(the fraction 3 'over' 4) + - t: "на" # (en: 'over') - x: "*[2]" - pause: short @@ -132,13 +132,13 @@ replace: - test: if: "$Impairment = 'Blindness'" - then: [t: "фракция"] # phrase(the 'fraction' 3 over 4) + then: [t: "дробь"] # (en: 'fraction') - pause: short - x: "*[1]" - test: if: "not(IsNode(*[1],'leaf'))" then: [pause: short] - - t: "над" # phrase(the fraction 3 'over' 4) + - t: "на" # (en: 'over') - test: if: "not(IsNode(*[2],'leaf'))" then: [pause: short] @@ -146,7 +146,7 @@ - pause: short - test: if: "$Impairment = 'Blindness'" - then: [t: "конец фракции"] # phrase(start 7 over 8 'end of fraction') + then: [t: "конец дроби"] # (en: 'end of fraction') - pause: medium # rules for functions raised to a power @@ -156,7 +156,7 @@ tag: inverse-function match: "." replace: - - t: "обратный" # phrase(the 'inverse' of f) + - t: "обратная" # (en: 'inverse') - x: "*[1]" - name: function-squared-or-cubed @@ -169,8 +169,8 @@ - bookmark: "*[2]/@id" - test: if: "*[2][.=2]" - then: [t: "квадрат"] # phrase(5 'squared' equals 25) - else: [t: "кубик"] # phrase(5 'cubed' equals 125) + then: [t: "в квадрате"] # (en: 'squared') + else: [t: "в кубе"] # (en: 'cubed') - name: function-power tag: power match: @@ -178,13 +178,13 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # # phrase('the' fourth power of 10) + then: [t: ""] - bookmark: "*[2]/@id" - test: if: "*[2][self::m:mn][not(contains(., '.'))]" then: [x: "ToOrdinal(*[2])"] else: [x: "*[2]"] - - t: "сила" # phrase(the fourth 'power of' 2) + - t: "степень" # (en: 'power') - pause: short - x: "*[1]" @@ -197,15 +197,15 @@ - bookmark: "*[2]/@id" - test: if: "*[2][.=2]" - then: [t: "квадрат"] # phrase(5 'squared' equals 25) - else: [t: "кубик"] # phrase(5 'cubed' equals 125) + then: [t: "в квадрате"] # (en: 'squared') + else: [t: "в кубе"] # (en: 'cubed') - name: simple-integer tag: power match: "*[2][self::m:mn][not(contains(., '.'))]" replace: - x: "*[1]" - - t: "в" # phrase(15 raised 'to the' second power equals 225) + - t: "в" # (en: 'to the') - test: if: "*[2][.>0]" then: {x: "ToOrdinal(*[2])"} @@ -217,23 +217,23 @@ - " *[1][self::m:mn][not(contains(., '.'))]]" replace: - x: "*[1]" - - t: "в" # phrase(15 raised 'to the' second power equals 225) + - t: "в" # (en: 'to the') - x: "*[2]" - name: simple-var tag: power match: "*[2][self::m:mi][string-length(.)=1]" replace: - x: "*[1]" - - t: "в" # phrase(15 raised 'to the' second power equals 225) + - t: "в" # (en: 'to the') - x: "*[2]" - - pronounce: [{text: "-th"}, {ipa: "θ"}, {sapi5: "th"}, {eloquence: "T"}] + - pronounce: [{text: "-й"}, {ipa: "j"}, {sapi5: "th"}, {eloquence: "T"}] - name: simple tag: power match: "IsNode(*[2], 'leaf')" replace: - x: "*[1]" - - t: "в" # phrase(15 raised 'to the' second power equals 225) + - t: "в" # (en: 'to the') - x: "*[2]" - name: nested @@ -248,13 +248,13 @@ - " ]" replace: - x: "*[1]" - - t: "поднято до" # phrase(15 'raised to the' second power equals 225) + - t: "в степени" # (en: 'raised to the') - x: "*[2]" - pause: short - test: if: "$Impairment = 'Blindness'" then: - - t: "конец показателя" # phrase(start 2 raised to the exponent 4 'end of exponent') + - t: "конец степени" # (en: 'end of exponent') - pause: short else: - pause: medium @@ -264,9 +264,9 @@ match: "." replace: - x: "*[1]" - - t: "поднято до" # phrase(15 'raised to the' second power equals 225) + - t: "в степени" # (en: 'raised to the') - x: "*[2]" - - t: "власти" # phrase(15 raised to the second 'power' equals 225) + - t: "" - pause: short # @@ -281,22 +281,22 @@ then: - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # phrase('the' empty set) - - t: "пустым набором" # phrase(when a set contains no value it is called an 'empty set' and this is valid) + then: [t: ""] + - t: "пустое множество" # (en: 'empty set') - else_if: "count(*[1]/*)=3 and *[1]/*[2][self::m:mo][.=':' or .='|' or .='∣']" then: - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # phrase('the' set of all integers) - - t: "набор всех" # phrase(the 'set of all' positive integers less than 10) + then: [t: ""] + - t: "множество всех" # (en: 'set of all') - x: "*[1]/*[1]" - - t: "так что" # phrase(x 'such that' x is less than y) + - t: "таких, что" # (en: 'such that') - x: "*[1]/*[3]" else: - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # phrase('the' set of integers) - - t: "набор" # phrase(here is a 'set' of numbers) + then: [t: ""] + - t: "множество" # (en: 'set') - x: "*[1]" - name: times @@ -325,7 +325,7 @@ - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')]" # followed by parens - " )" replace: - - t: "раз" # phrase(7 'times' 5 equals 35) + - t: "умножить" # (en: 'times') - name: no-say-parens tag: mrow From 57e0aad522e310e5857fc3e59512c60e1ce64fad Mon Sep 17 00:00:00 2001 From: Danil <81031453+Kostenkov-2021@users.noreply.github.com> Date: Tue, 31 Mar 2026 18:36:56 +0300 Subject: [PATCH 36/43] Update Russian overview translations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Correct various Russian terms and wording in Rules/Languages/ru/overview.yaml: replace incorrect prepositions and nouns (e.g. 'над'→'на', 'фракция'→'дробь', 'куб корень'→'кубический корень', 'определяющий'→'определитель', 'стол'→'таблица'), adjust pronunciation for ordinal marker to Russian '-й' with IPA, and refine mtable count/selectors. These changes standardize terminology and improve readability of the Russian speech rules. --- Rules/Languages/ru/overview.yaml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Rules/Languages/ru/overview.yaml b/Rules/Languages/ru/overview.yaml index e91653ac..be4cdab5 100644 --- a/Rules/Languages/ru/overview.yaml +++ b/Rules/Languages/ru/overview.yaml @@ -21,10 +21,10 @@ if: "IsNode(*[1], 'simple') and IsNode(*[2], 'simple')" then: - x: "*[1]" - - t: "над" + - t: "на" # (en: 'over') - x: "*[2]" else: - - t: "фракция" + - t: "дробь" # (en: 'fraction') - name: overview-default tag: [msqrt, "square-root"] @@ -49,7 +49,7 @@ - if: "*[2][.='2']" then: [t: "квадратный корень"] - else_if: "*[2][.='3']" - then: [t: "куб корень"] + then: [t: "кубический корень"] # (en: 'cube root') - else_if: "*[2][not(contains(., '.'))]" then: [x: "ToOrdinal(*[2])", t: "корень"] else: @@ -57,7 +57,7 @@ if: "*[2][self::m:mi][string-length(.)=1]" then: - x: "*[2]" - - pronounce: [{text: "-th"}, {ipa: "θ"}, {sapi5: "th"}, {eloquence: "T"}] + - pronounce: [{text: "-й"}, {ipa: "j"}, {sapi5: "th"}, {eloquence: "T"}] else: {x: "*[2]"} - t: "корень" - test: @@ -74,24 +74,24 @@ - "*[2][self::m:mtable] and" - "(IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|'))" replace: - - t: "а" + - t: "на" # (en: 'a') - x: count(*[2]/*) - - t: "к" + - t: "на" # (en: 'by') - x: count(*[2]/*[self::m:mtr][1]/*) - test: if: "*[1][.='|']" # just need to check the first bracket since we know it must be (, [, or | - then: [t: "определяющий"] - else: [t: "матрица"] + then: [t: "определитель"] # (en: 'determinant') + else: [t: "матрица"] # (en: 'matrix') - name: overview-default tag: mtable match: "." replace: - - t: "а" - - x: count(*[2]/*) - - t: "к" - - x: count(*[2]/*[self::m:mtr][1]/*) - - t: "стол" + - t: "на" # (en: 'a') + - x: count(*) + - t: "на" # (en: 'by') + - x: count(*[self::m:mtr][1]/*) + - t: "таблица" # (en: 'table') - name: short-mrow tag: mrow @@ -115,6 +115,6 @@ - pause: auto - x: "*[5]" - pause: auto - - t: "и так далее" + - t: "и так далее" # (en: 'and so on') - include: "SimpleSpeak_Rules.yaml" From 78103f86a4e4b2bff4eb7ea115bc45b8d12f920c Mon Sep 17 00:00:00 2001 From: Danil <81031453+Kostenkov-2021@users.noreply.github.com> Date: Sun, 5 Apr 2026 17:36:31 +0300 Subject: [PATCH 37/43] Localize Russian unit/prefix names and fix ordinals MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update Rules/Languages/ru/definitions.yaml to improve Russian localization: translate SI prefixes and unit names from English to Russian, localize units-without-prefixes and (previously) EnglishUnits entries, change OperatorIntentRenaming for "dimension-product" to "на", and adjust limit/lim-sup/lim-inf phrasings. Also fix ordinal spellings and correct gender/number forms for large ordinals. These changes refine translations and orthography for better Russian support. --- Rules/Languages/ru/definitions.yaml | 252 ++++++++++++++-------------- 1 file changed, 126 insertions(+), 126 deletions(-) diff --git a/Rules/Languages/ru/definitions.yaml b/Rules/Languages/ru/definitions.yaml index bf3ec83b..dc627194 100644 --- a/Rules/Languages/ru/definitions.yaml +++ b/Rules/Languages/ru/definitions.yaml @@ -23,8 +23,8 @@ "least-common-multiple": "function=нок:нок:наименьшее общее кратное", # "large-op": "infix=над || other=от,до", "limit": "prefix=придел при: придел при: придел при", - "lim-sup": "prefix=верхний предел при: верхний предел при: верхний предел при", - "lim-inf": "prefix=нижний предел при: нижний предел при: нижний предел при", + "lim-sup": "prefix=верхний придел при: верхний придел при: верхний придел при", + "lim-inf": "prefix=нижний придел при: нижний придел при: нижний придел при", "logarithm-with-base": "prefix=логарифм по основанию: логарифм по основанию: логарифм по основанию", "natural-logarithm": "function=l n: натуральный логарифм: натуральный логарифм", "minus": "infix=минус || prefix=отрицательное", @@ -81,7 +81,7 @@ } - OperatorIntentRenaming: { - "dimension-product": "by" + "dimension-product": "на" } - KnownWords: { @@ -94,8 +94,8 @@ } - SIPrefixes: { - "Q": "quetta", "R": "ronna", "Y": "yotta", "Z": "zetta", "E": "exa", "P": "peta", "T": "tera", "G": "giga", "M": "mega", "k": "kilo", "h": "hecto", "da": "deka", - "d": "deci", "c": "centi", "m": "milli", "µ": "micro", "n": "nano", "p": "pico", "f": "femto", "a": "atto", "z": "zepto", "y": "yocto", "r": "ronto", "q": "quecto" +"Q": "кветта", "R": "ронна", "Y": "иотта", "Z": "зетта", "E": "экса", "P": "пета", "T": "тера", "G": "гига", "M": "мега", "k": "кило", "h": "гекто", "da": "дека", + "d": "деци", "c": "санти", "m": "милли", "µ": "микро", "n": "нано", "p": "пико", "f": "фемто", "a": "атто", "z": "зепто", "y": "иокто", "r": "ронто", "q": "квекто" } # this is a list of all units that accept SIPrefixes @@ -104,161 +104,161 @@ # The SI prefixes can be used with several of accepted units, but not, for example, with the non-SI units of time. - SIUnits: { # base units - "A": "amp", - "cd": "candela", - "K": "kelvin", "K": "kelvin", # U+212A - "g": "gram", - "m": "metre", # British spelling works for US also - "mol": "mole", - "s": "second", "sec": "second", # "sec" not actually legal + "A": "ампер", + "cd": "кандела", + "K": "кельвин", "K": "кельвин", # U+212A + "g": "грамм", + "m": "метр", + "mol": "моль", + "s": "секунда", "sec": "секунда", # "sec" не является официальным, но поддерживается # derived units - "Bq": "becquerel", - "C": "coulomb", - "°C": "degree celsius", "℃": "degree celsius", # should only take negative powers - "F": "farad", - "Gy": "gray", - "H": "henry", - "Hz": "hertz", - "J": "joule", - "kat": "kattel", - "lm": "lumen", - "lx": "lux", - "N": "newton", - "Ω": "ohm", "Ω": "ohm", # Greek Cap letter, U+2126 OHM SIGN - "Pa": "pascal", - "S": "siemens", - "Sv": "sievert", - "T": "tesla", - "V": "volt", - "W": "watt", - "Wb": "weber", + "Bq": "беккерель", + "C": "кулон", + "°C": "градус Цельсия", "℃": "градус Цельсия", # должны использоваться только с отрицательными степенями + "F": "фарад", + "Gy": "грей", + "H": "генри", + "Hz": "герц", + "J": "джоуль", + "kat": "катал", + "lm": "люмен", + "lx": "люкс", + "N": "ньютон", + "Ω": "ом", "Ω": "ом", # греческая заглавная буква Омега, U+2126 OHM SIGN + "Pa": "паскаль", + "S": "сименс", + "Sv": "зиверт", + "T": "тесла", + "V": "вольт", + "W": "ватт", + "Wb": "вебер", # accepted (plus a few variants) that take SI prefixes - "l": "litre", "L": "litre", "ℓ": "litre", # Should only take negative powers; British spelling works for US also - "t": "metric ton", # should only take positive powers - "Da": "dalton", - "Np": "neper", # should only take negative powers - "u": "atomic mass unit", # 'u' is correct: https://en.wikipedia.org/wiki/Dalton_(unit) - "eV": "electronvolt", - "rad": "radian", # should only take negative powers - "sr": "sterradion", # should only take negative powers + "l": "литр", "L": "литр", "ℓ": "литр", # должны использоваться только с отрицательными степенями + "t": "тонна", # должна использоваться только с положительными степенями + "Da": "дальтон", + "Np": "непер", # должен использоваться только с отрицательными степенями + "u": "атомная единица массы", # 'u' правильно: https://en.wikipedia.org/wiki/Dalton_(unit) + "eV": "электронвольт", + "rad": "радиан", # должен использоваться только с отрицательными степенями + "sr": "стерадиан", # должен использоваться только с отрицательными степенями # others that take a prefix - "a": "annum", # should only take positive powers - "as": "arcsecond", # see en.wikipedia.org/wiki/Minute_and_second_of_arc + "a": "год", # должен использоваться только с положительными степенями + "as": "угловая секунда", # см. ru.wikipedia.org/wiki/Minute_and_second_of_arc # technically wrong, but used in practice with SI Units - "b": "bit", # should only take positive powers - "B": "byte", # should only take positive powers - "Bd": "baud", # should only take positive powers + "b": "бит", # должен использоваться только с положительными степенями + "B": "байт", # должен использоваться только с положительными степенями + "Bd": "бод", # должен использоваться только с положительными степенями } - UnitsWithoutPrefixes: { # time - "″": "second", "\"": "second", - "′": "minute", "'": "minute","min": "minute", - "h": "hour", "hr": "hour", "Hr": "hour", - "d": "day", "dy": "day", - "w": "week", "wk": "week", - "y": "year", "yr": "year", + "″": "секунда", "\"": "секунда", + "′": "минута", "'": "минута","min": "минута", + "h": "час", "hr": "час", "Hr": "час", + "d": "день", "dy": "день", + "w": "неделя", "wk": "неделя", + "y": "год", "yr": "год", # angles - "°": "degree", "deg": "degree", # should only take negative powers - "arcmin": "arcminute", - "amin": "arcminute", - "am": "arcminute", - "MOA": "arcminute", - "arcsec": "arcsecond", - "asec": "arcsecond", + "°": "градус", "deg": "градус", # должны использоваться только с отрицательными степенями + "arcmin": "угловая минута", + "amin": "угловая минута", + "am": "угловая минута", + "MOA": "угловая минута", + "arcsec": "угловая секунда", + "asec": "угловая секунда", # distance - "au": "astronomical unit", "AU": "astronomical unit", - "ltyr": "light year", "ly": "light year", - "pc": "parsec", - "Å": "angstrom", "Å": "angstrom", # U+00C5 and U+212B - "fm": "fermi", + "au": "астрономическая единица", "AU": "астрономическая единица", + "ltyr": "световой год", "ly": "световой год", + "pc": "парсек", + "Å": "ангстрем", "Å": "ангстрем", # U+00C5 и U+212B + "fm": "ферми", # others - "ha": "hectare", - # "B": "bel", # "B" more commonly means bytes - "dB": "decibel", # already logarithmic, so not used with SI prefixes - - "amu": "atomic mass unit", - "atm": "atmosphere", - "bar": "bar", - "cal": "calorie", - "Ci": "curie", - "grad": "gradian", - "M": "molar", - "R": "roentgen", - "rpm": "revolution per minute", - "℧": "m-h-o", - "dyn": "dyne", - "erg": "erg", + "ha": "гектар", + # "B": "bel", # "B" чаще означает байты + "dB": "децибел", # уже логарифмическая, поэтому не используется с приставками СИ + + "amu": "атомная единица массы", + "atm": "атмосфера", + "bar": "бар", + "cal": "калория", + "Ci": "кюри", + "grad": "градиан", + "M": "молярный", + "R": "рентген", + "rpm": "оборот в минуту", + "℧": "сименс (устаревшее)", + "dyn": "дина", + "erg": "эрг", # powers of 2 used with bits and bytes - "Kib": "kibi-bit", "Mib": "mebi-bit", "Gib": "gibi-bit", "Tib": "tebi-bit", "Pib": "pebi-bit", "Eib": "exbi-bit", "Zib": "zebi-bit", "Yib": "yobi-bit", - "KiB": "kibi-byte", "MiB": "mebi-byte", "GiB": "gibi-byte", "TiB": "tebi-byte", "PiB": "pebi-byte", "EiB": "exbi-byte", "ZiB": "zebi-byte", "YiB": "yobi-byte", + "Kib": "кибибит", "Mib": "мебибит", "Gib": "гибибит", "Tib": "тебибит", "Pib": "пебибит", "Eib": "эксбибит", "Zib": "зебибит", "Yib": "йобибит", + "KiB": "кибибайт", "MiB": "мебибайт", "GiB": "гибибайт", "TiB": "тебибайт", "PiB": "пебибайт", "EiB": "эксбибайт", "ZiB": "зебибайт", "YiB": "йобибайт", } # this will only be used if the language is English, so it can be empty for other countries - EnglishUnits: { # length - "in": "inch", - "ft": "foot", - "mi": "mile", - "rd": "rod", - "li": "link", - "ch": "chain", + "in": "дюйм", + "ft": "фут", + "mi": "миля", + "rd": "род", + "li": "линк", + "ch": "чейн", # area - "sq in": "square inch", "sq. in": "square inch", "sq. in.": "square inch", - "sq ft": "square foot", "sq. ft": "square foot", "sq. ft.": "square foot", - "sq yd": "square yard", "sq. yd": "square yard", "sq. yd.": "square yard", - "sq mi": "square mile", "sq. mi": "square mile", "sq. mi.": "square mile", - "ac": "acre", - "FBM": "board foot", + "sq in": "квадратный дюйм", "sq. in": "квадратный дюйм", "sq. in.": "квадратный дюйм", + "sq ft": "квадратный фут", "sq. ft": "квадратный фут", "sq. ft.": "квадратный фут", + "sq yd": "квадратный ярд", "sq. yd": "квадратный ярд", "sq. yd.": "квадратный ярд", + "sq mi": "квадратная миля", "sq. mi": "квадратная миля", "sq. mi.": "квадратная миля", + "ac": "акр", + "FBM": "доско-фут", # volume - "cu in": "cubic inch", "cu. in": "cubic inch", "cu. in.": "cubic inch", - "cu ft": "cubic foot", "cu. ft": "cubic foot", "cu. ft.": "cubic foot", - "cu yd": "cubic yard", "cu. yd": "cubic yard", "cu. yd.": "cubic yard", - "bbl": "barrel", "BBL": "barrel", - "pk": "peck", - "bu": "bushel", - "tsp": "teaspoon", - "tbl": "tablespoon", + "cu in": "кубический дюйм", "cu. in": "кубический дюйм", "cu. in.": "кубический дюйм", + "cu ft": "кубический фут", "cu. ft": "кубический фут", "cu. ft.": "кубический фут", + "cu yd": "кубический ярд", "cu. yd": "кубический ярд", "cu. yd.": "кубический ярд", + "bbl": "баррель", "BBL": "баррель", + "pk": "пек", + "bu": "бушель", + "tsp": "чайная ложка", + "tbl": "столовая ложка", # liquid - "fl dr": "fluid drams", - "fl oz": "fluid ounce", - "gi": "gill", - "cp": "cup", "cup": "cup", - "pt": "pint", - "qt": "quart", - "gal": "gallon", + "fl dr": "жидкая драхма", + "fl oz": "жидкая унция", + "gi": "джилл", + "cp": "чашка", "cup": "чашка", + "pt": "пинта", + "qt": "кварта", + "gal": "галлон", # weight - "gr": "grain", - "dr": "dram", - "oz": "ounce", "℥": "ounce", - "lb": "pound", - "cwt": "hundredweight", - "dwt": "pennyweight", - "oz t": "troy ounce", - "lb t": "troy pound", + "gr": "гран", + "dr": "драхма", + "oz": "унция", "℥": "унция", + "lb": "фунт", + "cwt": "центнер (английский)", + "dwt": "пеннивейт", + "oz t": "тройская унция", + "lb t": "тройский фунт", # energy - "hp": "horsepower", - "BTU": "BTU", - "°F": "degree fahrenheit", "℉": "degree fahrenheit", + "hp": "лошадиная сила", + "BTU": "БТЕ", + "°F": "градус Фаренгейта", "℉": "градус Фаренгейта", # other - "mph": "mile per hour", - "mpg": "mile per gallon", - } + "mph": "миля в час", + "mpg": "миля на галлон", + } - PluralForms: { # FIX: this needs to be flushed out @@ -307,13 +307,13 @@ ] - NumbersOrdinalOnes: [ -«нулевой», «первый», «второй», «третий», «четвертый», «пятый», «шестой», «седьмой», «восьмой», «девятый», +«нулевой», «первый», «второй», «третий», «четвёртый», «пятый», «шестой», «седьмой», «восьмой», «девятый», «десятый», «одиннадцатый», «двенадцатый», «тринадцатый», «четырнадцатый», «пятнадцатый», «шестнадцатый», «семнадцатый», «восемнадцатый», «девятнадцатый» ] - NumbersOrdinalPluralOnes: [ -«нулевые», «первые», «вторые», «третьи», «четвертые», «пятые», «шестые», «седьмые», «восьмые», «девятые», +«нулевые», «первые», «вторые», «третьи», «четвёртые», «пятые», «шестые», «седьмые», «восьмые», «девятые», «десятые», «одиннадцатые», «двенадцатые», «тринадцатые», «четырнадцатые», «пятнадцатые», «шестнадцатые», «семнадцатые», «восемнадцатые», «девятнадцатые» ] @@ -367,10 +367,10 @@ - NumbersOrdinalLarge: [ "", "тысячная", "миллионная", "миллиардная", "триллионная", "квадриллионная", -«квинтиллионный», «секстиллионный», «септиллионный», «октиллионный», «нониллионный» +«квинтиллионная», «секстиллионная», «септиллионная», «октиллионная», «нониллионная» ] - NumbersOrdinalPluralLarge: [ "", "тысячные", "миллионные", "миллиардные", "триллионные", "квадриллионные", -«квинтиллионы», «секстиллионы», «септиллионы», «октиллионы», «нониллионы» +«квинтиллионные», «секстиллионные», «септиллионные», «октиллионные», «нониллионные» ] From 06f6a4c77b9973e35de9157c141350f34feed6f4 Mon Sep 17 00:00:00 2001 From: Danil <81031453+Kostenkov-2021@users.noreply.github.com> Date: Sun, 5 Apr 2026 19:33:19 +0300 Subject: [PATCH 38/43] Fix RU ClearSpeak absolute-value and navigate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refactor Russian ClearSpeak absolute-value rule to remove the WordToSay variable and use inline tests to choose between «мощность» (cardinality) and «модуль». Reordered elements to output «из» then the operand, and when AbsEnd is set emit «конец» followed by the chosen label; preserves pauses. Also fix malformed quoting in Rules/Languages/ru/navigate.yaml for MoveEnd/MoveLineEnd messages (remove stray extra quotes) so the Russian navigation phrases are emitted correctly and the YAML is valid. --- Rules/Languages/ru/ClearSpeak_Rules.yaml | 35 ++++++++++++++---------- Rules/Languages/ru/navigate.yaml | 4 +-- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/Rules/Languages/ru/ClearSpeak_Rules.yaml b/Rules/Languages/ru/ClearSpeak_Rules.yaml index 03d9602e..f6663438 100644 --- a/Rules/Languages/ru/ClearSpeak_Rules.yaml +++ b/Rules/Languages/ru/ClearSpeak_Rules.yaml @@ -481,24 +481,29 @@ # Some rules on mrows # - # the inference rules lump absolute value and cardinality together, so those rules are implemented here - name: ClearSpeak-absolute-value +- name: ClearSpeak-absolute-value tag: absolute-value match: "." - variables: [WordToSay: "IfThenElse($ClearSpeak_AbsoluteValue = 'Cardinality', ', 'мощность', 'модуль')"] replace: - - test: - if: "$Verbosity!='Terse'" - then: [t: ""] # phrase('the' absolute value of 25) - - x: "$WordToSay" - - t: "из" # phrase(the absolute value 'of' 25) - - x: "*[1]" - - test: - if: "$ClearSpeak_AbsoluteValue = 'AbsEnd'" - then: - - pause: short - - t: "конец" # phrase('end' absolute value) - - x: "$WordToSay" - - pause: short + - test: + if: "$Verbosity!='Terse'" + then: [t: ""] + - test: + if: "$ClearSpeak_AbsoluteValue = 'Cardinality'" + then: [t: "мощность"] + else: [t: "модуль"] + - t: из + - x: "*[1]" + - test: + if: "$ClearSpeak_AbsoluteValue = 'AbsEnd'" + then: + - pause: short + - t: конец + - test: + if: "$ClearSpeak_AbsoluteValue = 'Cardinality'" + then: [t: "мощность"] + else: [t: "модуль"] + - pause: short - name: set tag: set diff --git a/Rules/Languages/ru/navigate.yaml b/Rules/Languages/ru/navigate.yaml index 936fd336..cf9359db 100644 --- a/Rules/Languages/ru/navigate.yaml +++ b/Rules/Languages/ru/navigate.yaml @@ -568,8 +568,8 @@ - else_if: "$NavCommand = 'MoveLineStart'" then: [t: "перемещение в начало строки"] # phrase('move to start of line') - else_if: "$NavCommand = 'MoveEnd'" - then: [t: ""перемещение в конец выражения"] # phrase('move to end of math') - else: [t: ""перемещение в конец строки"] # "$NavCommand = 'MoveLineEnd'" # phrase('move to end of line') + then: [t: "перемещение в конец выражения"] # phrase('move to end of math') + else: [t: "перемещение в конец строки"] # "$NavCommand = 'MoveLineEnd'" # phrase('move to end of line') - pause: "medium" - test: if: "$NavCommand = 'MoveStart' or $NavCommand = 'MoveLineStart'" From dad3917d4dec1bb4c92aebe8bc02fb6d6e43e0d9 Mon Sep 17 00:00:00 2001 From: Danil <81031453+Kostenkov-2021@users.noreply.github.com> Date: Sun, 5 Apr 2026 19:43:41 +0300 Subject: [PATCH 39/43] Add common and anyhow::Result imports to ru.rs Import crate::common::* and anyhow::Result at the top of tests/Languages/ru.rs and inside the ClearSpeak and SimpleSpeak modules so those test modules can use shared utilities and Result types. Also include minor whitespace/formatting adjustments. --- tests/Languages/ru.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/tests/Languages/ru.rs b/tests/Languages/ru.rs index 45bce3f9..0d3a8508 100644 --- a/tests/Languages/ru.rs +++ b/tests/Languages/ru.rs @@ -1,6 +1,12 @@ #![allow(non_snake_case)] +use crate::common::*; +use anyhow::Result; + mod ClearSpeak { + use crate::common::*; + use anyhow::Result; + mod functions; mod large_ops; mod menclose; @@ -13,6 +19,9 @@ mod ClearSpeak { } mod SimpleSpeak { + use crate::common::*; + use anyhow::Result; + mod functions; mod large_ops; // mod menclose; @@ -25,10 +34,10 @@ mod SimpleSpeak { mod multiline; mod subscripts; } + mod shared; mod units; mod chemistry; mod alphabets; mod intent; -mod mtable; - +mod mtable; \ No newline at end of file From 14a008e48d85b0bcbafb2aef75cc81d75176bc7f Mon Sep 17 00:00:00 2001 From: Danil <81031453+Kostenkov-2021@users.noreply.github.com> Date: Mon, 6 Apr 2026 00:09:05 +0300 Subject: [PATCH 40/43] Update Russian ClearSpeak phrasing and fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adjust Russian ClearSpeak rules: correct grammar and wording across many rules (negativity adjectives, root/fraction/interval/set wording), standardize exponent phrasing (use "в степени", explicit "во вторую/в третью степень" and "конец степени"), replace English pronunciation markers with Russian ("-й"), improve log/function wording (e.g. "натуральный логарифм", "от", "арка"), and change implied-times wording to "умножить на". Also tidy up various comments/whitespace and minor test/pause adjustments to make speech output more natural and consistent. --- Rules/Languages/ru/ClearSpeak_Rules.yaml | 373 ++++++++++------------- 1 file changed, 161 insertions(+), 212 deletions(-) diff --git a/Rules/Languages/ru/ClearSpeak_Rules.yaml b/Rules/Languages/ru/ClearSpeak_Rules.yaml index f6663438..e4754c95 100644 --- a/Rules/Languages/ru/ClearSpeak_Rules.yaml +++ b/Rules/Languages/ru/ClearSpeak_Rules.yaml @@ -17,15 +17,13 @@ - 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: "минус" # phrase(10 'minus' 4 equals 6) + - t: "минус" - x: "translate(text(), '-_', '')" - name: default @@ -34,26 +32,26 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: ""] # phrase('the' square root of 25) + then: [t: ""] - test: if: $ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd' then: - bookmark: "*[1]/@id" - test: if: parent::*[self::m:minus and count(*)=1] - then: [t: "отрицательное"] # phrase(minus 4 is a 'negative' number) - else: [t: "положительное"] # phrase(10 is a 'positive' number) - - t: "квадратный корень" # phrase(8 is the 'square root' of 64) + then: [t: "отрицательный"] + else: [t: "положительный"] + - t: "квадратный корень" - test: if: "$Verbosity!='Terse'" - then: [t: "из"] # phrase(the square root 'of' 5) + then: [t: "из"] else: [pause: short] - x: "*[1]" - test: - if: "$ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" then: - pause: short - - t: "конец корня" # phrase(the square root of x 'end root') + - t: "конец корня" - pause: medium - else_if: "IsNode(*[1], 'simple')" then: [pause: short] @@ -65,7 +63,7 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: ""] # phrase(6 is 'the' square root of 36) + then: [t: ""] - test: if: $ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd' then: @@ -74,40 +72,39 @@ then: [bookmark: "parent/@id"] - test: if: parent::m:minus - then: [t: "отрицательное"] # phrase(minus 6 is a 'negative' number) - else: [t: "положительное"] # phrase(10 is a 'positive' number) + then: [t: "отрицательный"] + else: [t: "положительный"] - test: if: "*[2][self::m:mn and not(contains(., '.'))]" then_test: - if: "*[2][.='2']" - then: [t: "квадратный корень"] # phrase(5 is the 'square root' of 25) + then: [t: "квадратный корень"] - else_if: "*[2][.='3']" - then: [t: "кубический корень"] # phrase(5 is the 'cube root' of 625) - - else: [x: "ToOrdinal(*[2])", t: "корень"] # phrase(the square 'root' of 25) + then: [t: "кубический корень"] + - else: [x: "ToOrdinal(*[2])", t: "степени"] else: - test: if: "*[2][self::m:mi][string-length(.)=1]" then: - x: "*[2]" - - pronounce: [{text: "-th"}, {ipa: "θ"}, {sapi5: "th"}, {eloquence: "T"}] + - pronounce: [{text: "-й"}, {ipa: "j"}, {sapi5: "y"}, {eloquence: "Y"}] else: {x: "*[2]"} - - t: "корень" # phrase(the square 'root' of 36) + - t: "корень" - test: if: "$Verbosity!='Terse'" - then: [t: "из"] # phrase(the square root 'of' 36) + then: [t: "из"] - x: "*[1]" - test: if: $ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd' then: - pause: short - - t: "конец корня" # phrase(start the fifth root of x 'end root') + - t: "конец корня" - 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:')" @@ -121,14 +118,10 @@ - bookmark: "@id" - test: if: "self::m:minus" - then: [t: "отрицательное"] # phrase(minus 5 is a 'negative' number) - else: [t: "положительное"] # phrase(7 is a 'positive' number) + then: [t: "отрицательный"] + else: [t: "положительный"] - 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 @@ -136,7 +129,7 @@ BaseNode(*[1])[contains(@data-intent-property, ':unit') or (self::m:mrow and self::*[3][contains(@data-intent-property, ':unit')])]" replace: - x: "*[1]" - - t: "в" # phrase('5 meters 'per' second) + - t: "в" - x: "*[2]" - name: common-fraction @@ -148,27 +141,26 @@ variables: [IsPlural: "*[1]!=1"] replace: - x: "*[1]" - - x: "ToOrdinal(*[2], true(), $IsPlural)" # extra args specify fractional ordinal and whether it is plural + - x: "ToOrdinal(*[2], true(), $IsPlural)" - name: common-fraction-mixed-number tag: fraction match: - - "preceding-sibling::*[1][self::m:mo][.='⁤'] and" # preceding element is invisible plus + - "preceding-sibling::*[1][self::m:mo][.='⁤'] and" - "($ClearSpeak_Fractions='Auto' or $ClearSpeak_Fractions='Ordinal' or $ClearSpeak_Fractions='EndFrac') and" - "*[1][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or text()<20)] and" - "*[2][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or (2<= text() and text()<=10))]" variables: [IsPlural: "*[1]!=1"] replace: - x: "*[1]" - - x: "ToOrdinal(*[2], true(), $IsPlural)" # extra args specify fractional ordinal and whether it is plural - + - x: "ToOrdinal(*[2], true(), $IsPlural)" - 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 + - " (IsNode(*[1],'simple') and IsNode(*[2],'simple')) )" replace: - test: if: "$ClearSpeak_Fractions='FracOver'" @@ -176,131 +168,126 @@ - test: if: "$Verbosity!='Terse'" then: [ot: ""] - - t: "дробь" # phrase(the 'fraction' with 3 over 4) + - t: "дробь" - x: "*[1]" - - t: "на" # phrase(the fraction 3 'over' 4) + - t: "деленное на" - 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: "конец дроби" # phrase(7 over 8 'end fraction') + - t: "конец дроби" - pause: short -- # fraction with text or numbers followed by text in both numerator and denominator - name: fraction-over-text +- 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:mi or self::m:mtext][string-length(.)>1]) or " - " (*[1][self::m:mrow][count(*)=3][ " - " *[1][self::m:mn] and " - - " *[2][self::m:mo][.='⁢'] and " # invisible times + - " *[2][self::m:mo][.='⁢'] and " - " *[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:mi or self::m:mtext][string-length(.)>1]) or " - " (*[2][self::m:mrow][count(*)=3][ " - " *[1][self::m:mn] and " - - " *[2][self::m:mo][.='⁢'] and " # invisible times + - " *[2][self::m:mo][.='⁢'] and " - " *[3][self::m:mi or self::m:mtext][string-length(.)>1] ]) )" - ")" replace: - x: "*[1]" - - t: "на" # phrase(the fraction 3 'over' 4) + - t: "деленное на" - x: "*[2]" - test: if: "$ClearSpeak_Fractions='EndFrac' or $ClearSpeak_Fractions='OverEndFrac'" then: - pause: short - - t: "конец дроби" # phrase(7 over 8 'end fraction') + - t: "конец дроби" - pause: short - name: default tag: fraction match: "." replace: - - ot: "" # phrase(5 is 'the' square root of 25) - - t: "дробь с числителем" # phrase(the 'fraction with numerator' 6) + - ot: "" + - t: "дробь: числитель" - test: if: not(IsNode(*[1], 'simple')) then: [pause: medium] - x: "*[1]" - pause: medium - - t: "и знаменателем" # phrase(the fraction with numerator 5 'and denominator' 8) + - t: "знаменатель" - x: "*[2]" - pause: long - test: if: "$ClearSpeak_Fractions='EndFrac' or $ClearSpeak_Fractions='GeneralEndFrac'" then: - pause: short - - t: "конец дроби" # phrase(the fraction with 3 over 4 'end fraction') + - t: "конец дроби" - 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: "обратное"] # phrase(8 over 5 is the 'inverse' of 5 over 8) + then: [{x: "*[1]"}, {bookmark: "*[2]/@id"}, t: "обратное"] else_test: if: $ClearSpeak_Trig = 'ArcTrig' - then: [bookmark: "*[2]/@id", t: "дуга", x: "*[1]"] # phrase(the 'arc' of a circle) - else: [bookmark: "*[2]/@id", t: "обратное", x: "*[1]"] # default/Auto # phrase(8 over 5 is the 'inverse' of 5 over 8) + then: [bookmark: "*[2]/@id", t: "арка", x: "*[1]"] + else: [bookmark: "*[2]/@id", t: "обратное", x: "*[1]"] - name: function-squared-or-cubed tag: power match: - "*[2][self::m:mn][.='2' or .='3'] and" - - "following-sibling::*[1][self::m:mo][.='⁡']" #invisible function apply + - "following-sibling::*[1][self::m:mo][.='⁡']" replace: - x: "*[1]" - bookmark: "*[2]/@id" - test: if: "*[2][.='2']" - then: [t: "в квадрате"] # phrase(25 equals 5 'squared') - else: [t: "в кубе"] # phrase(625 equals 5 'cubed') + then: [t: "в квадрате"] + else: [t: "в кубе"] - name: function-power tag: power match: - - "following-sibling::*[1][self::m:mo][.='⁡']" #invisible function apply + - "following-sibling::*[1][self::m:mo][.='⁡']" replace: - test: if: "$Verbosity!='Terse'" - then: [t: ""] # phrase('the' third power of 2) + then: [t: ""] - bookmark: "*[2]/@id" - test: if: "*[2][self::m:mn][not(contains(., '.'))]" then: [x: "ToOrdinal(*[2])"] else: [x: "*[2]"] - - t: "степень" # phrase(the third 'power of' 6) + - t: "степени" - pause: short - x: "*[1]" - name: AfterPower-nested tag: power - match: # directly a superscript or an mrow that contains a superscript + match: - "$ClearSpeak_Exponents = 'AfterPower' and" - "*[2][self::m:power or self::m:power or self::m:mrow[m:power]]" replace: - x: "*[1]" - - t: "возведено в степень" # phrase(5 'raised to the exponent' x plus 1) + - t: "возведено в степень" - pause: short - x: "*[2]" - - pause: short - - t: "конец показателя" # phrase(5 raised to the exponent x plus 1 'end exponent') + - pause: medium + - t: "конец степени" - name: AfterPower-default tag: power match: "$ClearSpeak_Exponents = 'AfterPower'" replace: - x: "*[1]" - - t: "возведено в степень" # phrase(x is 'raised to the power' 4) + - t: "возведено в степень" - x: "*[2]" - pause: short @@ -310,7 +297,7 @@ replace: - x: "*[1]" - bookmark: "*[2]/@id" - - t: "в квадрате" # phrase(7 'squared' equals 49) + - t: "в квадрате" - name: cubed tag: power @@ -318,21 +305,25 @@ replace: - x: "*[1]" - bookmark: "*[2]/@id" - - t: "в кубе" # phrase(5 'cubed' equals 125) + - t: "в кубе" - name: simple-integer tag: power match: "*[2][self::m:mn][not(contains(., '.'))]" replace: - x: "*[1]" - - t: "в" # phrase(2 raised 'to the' power 7) - test: if: "*[2][.>0]" - then: {x: "ToOrdinal(*[2])"} - else: {x: "*[2]"} + then: + - t: "в" + - x: "ToOrdinal(*[2])" + - t: "степени" + else: + - t: "в степени" + - x: "*[2]" - test: - if: "$ClearSpeak_Exponents != 'Ordinal'" - then: [t: "степени"] # phrase(2 raised to the 'power' 7) + if: "$ClearSpeak_Exponents != 'Ordinal' and *[2][.>0]" + then: [t: ""] - name: simple-negative-integer tag: power @@ -342,40 +333,24 @@ - " ]" replace: - x: "*[1]" - - t: "в" # phrase(2 raised 'to the' power 7) + - t: "в степени" - x: "*[2]" - - test: - if: "$ClearSpeak_Exponents != 'Ordinal'" - then: [t: "степени"] # phrase(2 raised to the 'power' 7) - name: simple-var tag: power match: "*[2][self::m:mi][string-length(.)=1]" replace: - x: "*[1]" - - t: "в" # phrase(3 raised 'to the' power 7) + - t: "в степени" - x: "*[2]" - - pronounce: [{text: "-th"}, {ipa: "θ"}, {sapi5: "th"}, {eloquence: "T"}] - - test: - if: "$ClearSpeak_Exponents != 'Ordinal'" - then: [t: "степени"] # phrase(2 raised to the 'power' 7) - -# match nested exponent, where the nested exponent is has the power 2 or 3 (n below) -# [xxx]^n, - [xxx]^n, [xxx] var^n, -[xxx] var^n -# 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 + - pronounce: [{text: "-й"}, {ipa: "j"}, {sapi5: "y"}, {eloquence: "Y"}] + +- 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) + - " *[2][self::m:mn][.='2' or .='3'] and " - " *[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]]" @@ -383,19 +358,18 @@ - " ]" replace: - x: "*[1]" - - t: "в" # phrase(x 'raised to the' second power) - - x: "*[2]" - - t: "степень" # phrase(x raised to the second 'power') + - test: + if: "*[2]/*[2][.='2']" + then: [t: "во вторую степень"] + else: [t: "в третью степень"] -- # - [xxx]^n - name: nested-negative-squared-or-cubed +- 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) + - " *[2][self::m:mn][.='2' or .='3'] and " - " *[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]]" @@ -404,22 +378,21 @@ - " ]" replace: - x: "*[1]" - - t: "в" # phrase(x 'raised to the' second power) - - x: "*[2]" - - t: "степень" # phrase(x raised to the second 'power') + - test: + if: "*[2]/*[1]/*[2][.='2']" + then: [t: "во вторую степень"] + else: [t: "в третью степень"] -- # [xxx] var^n - name: nested-var-squared-or-cubed +- 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 + - " *[2][self::m:mn][.='2' or .='3'] and " - " *[1][self::m:mi]" - " ] and " - - " *[2][self::m:mo][.='⁢'] and " # invisible times - # base is mn, or common fraction ([xxx] case) + - " *[2][self::m:mo][.='⁢'] and " - " *[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]]" @@ -427,23 +400,22 @@ - " ]" replace: - x: "*[1]" - - t: "в" # phrase(x 'raised to the' second power) - - x: "*[2]" - - t: "степень" # phrase(x raised to the second 'power') + - test: + if: "*[2]/*[3]/*[2][.='2']" + then: [t: "во вторую степень"] + else: [t: "в третью степень"] -- # -[xxx] var^n - name: nested-negative-var-squared-or-cubed +- 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 + - " *[2][self::m:mn][.='2' or .='3'] and " - " *[1][self::m:mi]" - " ] and " - - " *[2][self::m:mo][.='⁢'] and " # invisible times + - " *[2][self::m:mo][.='⁢'] and " - " *[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]]" @@ -452,35 +424,31 @@ - " ]" replace: - x: "*[1]" - - t: "в" # phrase(x 'raised to the' second power) - - x: "*[2]" - - t: "степень" # phrase(x raised to the second 'power') + - test: + if: "*[2]/*[3]/*[2][.='2']" + then: [t: "во вторую степень"] + else: [t: "в третью степень"] - name: default-exponent-power tag: power - match: # directly a superscript or an mrow that contains a superscript + match: - "*[2][self::m:power or self::m:power or self::m:mrow[m:power]]" replace: - x: "*[1]" - - t: "возведено в степень" # phrase(x is 'raised to the exponent') + - t: "возведено в степень" - pause: short - x: "*[2]" - pause: short - - t: "конец показателя" # phrase(and now 'end exponent' has been reached) + - t: "конец степени" - name: default tag: power match: "." replace: - x: "*[1]" - - t: "возведено в" # phrase(x 'raised to the' second power) + - t: "в степени" - x: "*[2]" - - t: "степень" # 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: "." @@ -490,19 +458,19 @@ then: [t: ""] - test: if: "$ClearSpeak_AbsoluteValue = 'Cardinality'" - then: [t: "мощность"] + then: [t: "мощность множества"] else: [t: "модуль"] - - t: из + - t: "из" - x: "*[1]" - test: if: "$ClearSpeak_AbsoluteValue = 'AbsEnd'" then: - pause: short - - t: конец + - t: "конец" - test: if: "$ClearSpeak_AbsoluteValue = 'Cardinality'" - then: [t: "мощность"] - else: [t: "модуль"] + then: [t: "мощности множества"] + else: [t: "модуля"] - pause: short - name: set @@ -511,24 +479,24 @@ replace: - test: - if: "count(*)=0" - then: [t: "пустое множество"] # phrase('the empty set') + then: [t: "пустое множество"] - else_if: "count(*)=2" then: - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # phrase('the' empty set) - - t: "пустое множество" # phrase(the 'empty set') + then: [t: ""] + - t: "пустое множество" - else_if: "count(*[1]/*)=3 and *[1]/*[2][self::m:mo][.=':' or .='|' or .='∣']" then: - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # phrase('the' set of all integers) - - t: "множество" # phrase(this is a 'set of' numbers) + then: [t: ""] + - t: "множество" - test: if: $ClearSpeak_Sets != 'woAll' - then: [t: "всех"] # phrase(the set of 'all' integers) + then: [t: "всех"] - x: "*[1]/*[1]" - - t: "таких, что" # phrase(the set S 'such that' x is less than y) + - t: "таких, что" - x: "*[1]/*[3]" else: - test: @@ -536,24 +504,20 @@ then: - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # phrase('the' set of integers) - - t: "множество" # phrase(this is a 'set' of integers) + then: [t: ""] + - t: "множество" - 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 +- name: ClearSpeak-intervals 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: "интервал от " # phrase('the interval from' a to b) + - t: "интервал от" - x: "*[1]" - - t: "до" # phrase(the interval from a 'to' b) + - t: "до" - x: "*[2]" - pause: short - test: @@ -561,41 +525,38 @@ then: - test: if: "starts-with(name(.), 'open')" - then: [t: "не"] # phrase(the interval from a to b 'not' including b) - - t: "включая " # phrase(the interval from a to b not 'including' b) + then: [t: "исключая"] + else: [t: "включая"] - 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: "или"] # phrase(the interval including a 'or' b ) + then: [t: "и"] - else_if: "name(.)='closed-interval'" - then: [t: "и"] # phrase(the interval including a 'and' b) - else: [t: "но"] # phrase(the interval including a 'but' not b) - # some ugly logic dealing with connectives: or, but, but, and (cleaner to be part of next clause?) + then: [t: "и"] + else: [t: "но"] - 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: "не"] # phrase(the interval 'not' including a) - - t: "включая" # phrase(the interval not 'including' a) + then: [t: "исключая"] + else: [t: "включая"] - 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: "по" # phrase(the binomial coefficient n 'choose' m) + - t: "число сочетаний из" + - x: "*[1]/*[1]/*" + - t: "по" - x: "*[2]/*[1]/*" - name: ClearSpeak-default @@ -604,12 +565,12 @@ variables: [NextLineIsContinuedRow: "following-sibling::*[1][contains(@data-intent-property, ':continued-row:')]"] replace: - pause: medium - - t: "строка" # phrase(the first 'row' of a matrix) + - t: "строка" - x: "count(preceding-sibling::*)+1" - test: if: .[self::m:mlabeledtr] then: - - t: "с меткой" # phrase(the line 'with label' first equation) + - t: "с меткой" - x: "*[1]/*" - pause: short - pause: medium @@ -618,8 +579,7 @@ then: [x: "*[position()>1]"] else: {x: "*"} -- # handle both log and ln - name: ClearSpeak-log +- name: ClearSpeak-log tag: mrow variables: [{log_is_simple: "IsNode(*[3],'simple')"}] match: @@ -631,31 +591,30 @@ if: "$log_is_simple" then_test: - if: "*[1][.='log']" - then: [t: "логарифм"] # phrase(the 'log' of x) + then: [t: "логарифм"] - else_if: $ClearSpeak_Log = 'LnAsNaturalLog' - then: [t: "натуральный логарифм"] # phrase(the 'natural log' of the product of 2 numbers) - else: [spell: "'ln'"] + then: [t: "натуральный логарифм"] + else: [t: "натуральный логарифм"] else: - test: if: "$Verbosity!='Terse' and not(log_is_simple)" - then: [t: ""] # phrase('the' square root of 25) + then: [t: ""] - test: - if: "*[1][.='log']" then: [t: "логарифм"] - else_if: $ClearSpeak_Log = 'LnAsNaturalLog' - then: [t: "натуральный логарифм"] # phrase(the 'natural log' of x) - else: [spell: "'ln'"] - - t: "из" # phrase(the natural log 'of' x) + then: [t: "натуральный логарифм"] + else: [t: "натуральный логарифм"] + - t: "от" - pause: short - x: "*[3]" - name: ClearSpeak-multi-line - tag: [piecewise, system-of-equations, lines] # these are ignored in favor of the ClearSpeak prefs + 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 + - NextLineIsContinuedRow: "false()" - IsColumnSilent: true() replace: - test: @@ -664,21 +623,20 @@ - x: "$LineCount" - test: - if: "($ClearSpeak_MultiLineLabel = 'Auto' and self::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case'" - then: [t: "случай"] # 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: "строка"] # phrase(this is the first 'line' of three lines) + then: [t: "случай"] + - else_if: "$ClearSpeak_MultiLineLabel = 'Auto' or $ClearSpeak_MultiLineLabel = 'Line' or $ClearSpeak_MultiLineLabel = 'None'" + then: [t: "строка"] - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" - then: [t: "ограничение"] # phrase(this is the first 'constraint' of three constraints) + then: [t: "ограничение"] - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" - then: [t: "уравнение"] # phrase(this is the first 'equation' of three equations) + then: [t: "уравнение"] - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" - then: [t: "строка"] # phrase(this is the first 'row' of three rows) + then: [t: "строка"] - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" - then: [t: "шаг"] # phrase(this is the first 'step' of three steps) - # else 'None -- don't say anything' + then: [t: "шаг"] - test: - if: "$LineCount != 1" - then: [ct: "ов"] # plural # phrase(shown by the letter 's') + then: [ct: "ов"] - pause: short - x: "*" - pause: long @@ -694,27 +652,26 @@ - pause: medium - test: - if: "($ClearSpeak_MultiLineLabel = 'Auto' and parent::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case'" - then: [t: "случае"] # phrase(in this 'case' x is not equal to y) - - else_if: "$ClearSpeak_MultiLineLabel = 'Auto' or $ClearSpeak_MultiLineLabel = 'Line'" # already dealt with Auto/Case - then: [t: "строка"] # phrase(the straight 'line' between x and y) + then: [t: "случае"] + - else_if: "$ClearSpeak_MultiLineLabel = 'Auto' or $ClearSpeak_MultiLineLabel = 'Line'" + then: [t: "строке"] - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" - then: [t: "ограничение"] # phrase(there is a 'constraint' on possible values) + then: [t: "ограничении"] - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" - then: [t: "уравнение"] # phrase(the 'equation' pi r squared gives the area of a circle) + then: [t: "уравнении"] - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" - then: [t: "строке"] # phrase(the values on the top 'row' are relevant) + then: [t: "строке"] - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" - then: [t: "шаг"] # phrase(this is a 'step' by step process) - # else 'None -- don't say anything' + then: [t: "шаге"] - x: "count(preceding-sibling::*[not(contains(@data-intent-property, ':continued-row:'))]) + 1" - test: if: "self::m:mlabeledtr" then: - - t: "с меткой" # phrase(the diagram is complete 'with label') + - t: "с меткой" - x: "*[1]/*" - test: - if: "$ClearSpeak_MultiLineLabel='None'" - then: [pause: xlong] # need a very long pause with no line labels + then: [pause: long] - else_if: "not(contains(@data-intent-property, ':continued-row:'))" then: [pause: medium] - test: @@ -726,17 +683,16 @@ tag: mo match: - ".='⁡' and $ClearSpeak_Functions = 'None' and" - - "not(preceding-sibling::*[1][IsInDefinition(., 'TrigFunctionNames')])" # Functions=None does not apply to "trig" functions + - "not(preceding-sibling::*[1][IsInDefinition(., 'TrigFunctionNames')])" replace: test: if: "$ClearSpeak_ImpliedTimes = 'None'" then: [t: ""] - else: [t: "раз"] # phrase(5 'times' 3 equals 15) + else: [t: "умножить на"] - 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: "" @@ -744,39 +700,34 @@ - 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:matrix or self::m:determinant or self::m:binomial or" - " 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. + - " ((self::m:msup or self::m:power) and not(IsNode(*[1], 'leaf') and *[2][self::m:mn and (.=2 or '.=3')]))) and " - " (*[1][self::m:mrow[IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')] or " - - " self::m:matrix or self::m:determinant] or" # base has parens + - " self::m:matrix or self::m:determinant] or" - " not(IsNode(*[2], 'simple')) or " - " (self::m:msubsup and not(IsNode(*[3], 'simple')))" - " )" - " ]" - # other possibility is the preceding element has parens (but not the following) - # this is not mentioned in the ClearSpeak rules or examples but seems like it should say "times". E.g, |x| y - " or " - " preceding-sibling::*[1][" - - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')]" # followed by parens + - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')]" - " )" replace: - - t: "раз" # phrase(5 'times' 3 equals 15) + - t: "умножить на" - 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 + - " not(self::m:math) ] and " - "( IsBracketed(., '(', ')') or IsBracketed(., '[', ']') ) and " - "not( $ClearSpeak_Functions = 'None' and " - " (preceding-sibling::*[1][.='⁡'] or following-sibling::*[1][.='⁡']) ) and " @@ -785,8 +736,6 @@ - "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]" From 9e4fa839bd02c83cd57e7e72ca8ca97906b6297a Mon Sep 17 00:00:00 2001 From: Danil <81031453+Kostenkov-2021@users.noreply.github.com> Date: Tue, 28 Apr 2026 14:44:13 +0300 Subject: [PATCH 41/43] Expand Russian Unicode mappings Update Rules/Languages/ru/unicode-full.yaml with a large set of new and corrected entries. Adds many diacritics, combining marks, phonetic modifiers, superscripts/subscripts, punctuation, currency symbols and enclosing marks; introduces handling (tests/audio/pitch) for Greek and Cyrillic capital letters and refines several translations and spell/replace rules. This expands coverage and clarifies vocalization rules for numerous Unicode characters. --- Rules/Languages/ru/unicode-full.yaml | 6349 ++++++++++++-------------- 1 file changed, 2952 insertions(+), 3397 deletions(-) diff --git a/Rules/Languages/ru/unicode-full.yaml b/Rules/Languages/ru/unicode-full.yaml index cd76b611..27e231ec 100644 --- a/Rules/Languages/ru/unicode-full.yaml +++ b/Rules/Languages/ru/unicode-full.yaml @@ -69,2580 +69,2680 @@ - "ˆ": [t: "циркумфлекс"] # 0x2c6 (en: 'modifier circumflex accent', google translation) - "ˇ": [t: "гачек"] # 0x2c7 (en: 'check', google translation) - "ˈ": [t: "вертикальная черта"] # 0x2c8 (en: 'modifier vertical line', google translation) -en: 'right harpoon over left harpoon', google translation) - - "⇍": [t: "слева двойная стрелка с ходом"] # 0x21cd (en: 'leftwards double arrow with stroke', google translation) - - "⇎": [t: "левая правая двойная стрелка с ходом"] # 0x21ce (en: 'left right double arrow with stroke', google translation) - - "⇏": [t: "права двойная стрелка с ходом"] # 0x21cf (en: 'rightwards double arrow with stroke', google translation) - - "⇐": [t: "левая двойная стрелка"] # 0x21d0 (en: 'leftwards double arrow', google translation) - - "⇑": [t: "вверх двойной стрелы"] # 0x21d1 (en: 'upwards double arrow', google translation) - - "⇒": [t: "права двойная стрелка"] # 0x21d2 (en: 'rightwards double arrow', google translation) - - "⇓": [t: "вниз двойной стрелы"] # 0x21d3 (en: 'downwards double arrow', google translation) - - "⇔": [t: "левая правая двойная стрелка"] # 0x21d4 (en: 'left right double arrow', google translation) - - "⇕": [t: "вниз по двойной стрелке"] # 0x21d5 (en: 'up down double arrow', google translation) - - "⇖": [t: "северо -западный двойной стрела"] # 0x21d6 (en: 'north west double arrow', google translation) - - "⇗": [t: "северо -восток двойной стрелы"] # 0x21d7 (en: 'north east double arrow', google translation) - - "⇘": [t: "юго -восточный двойной стрела"] # 0x21d8 (en: 'south east double arrow', google translation) - - "⇙": [t: "юго -западный двойной стрела"] # 0x21d9 (en: 'south west double arrow', google translation) - - "⇚": [t: "левая тройная стрелка"] # 0x21da (en: 'leftwards triple arrow', google translation) - - "⇛": [t: "прямо тройная стрелка"] # 0x21db (en: 'rightwards triple arrow', google translation) - - "⇜": [t: "слева стрелка"] # 0x21dc (en: 'leftwards squiggle arrow', google translation) - - "⇝": [t: "права средь стрелка"] # 0x21dd (en: 'rightwards squiggle arrow', google translation) - - "⇞": [t: "стрелка вверх с двойным ходом"] # 0x21de (en: 'upwards arrow with double stroke', google translation) - - "⇟": [t: "стрелка вниз с двойным ходом"] # 0x21df (en: 'downwards arrow with double stroke', google translation) - - "⇠": [t: "левая пунктирная стрела"] # 0x21e0 (en: 'leftwards dashed arrow', google translation) - - "⇡": [t: "вверх пунктирная стрелка"] # 0x21e1 (en: 'upwards dashed arrow', google translation) - - "⇢": [t: "прямо сразу же пунктирная стрелка"] # 0x21e2 (en: 'rightwards dashed arrow', google translation) - - "⇣": [t: "вниз потерпели стрелку"] # 0x21e3 (en: 'downwards dashed arrow', google translation) - - "⇤": [t: "стрелка слева до бара"] # 0x21e4 (en: 'leftwards arrow to bar', google translation) - - "⇥": [t: "право стрелы в бар"] # 0x21e5 (en: 'rightwards arrow to bar', google translation) - - "⇦": [t: "левая белая стрела"] # 0x21e6 (en: 'leftwards white arrow', google translation) - - "⇧": [t: "вверх белая стрела"] # 0x21e7 (en: 'upwards white arrow', google translation) - - "⇨": [t: "прямо белая стрелка"] # 0x21e8 (en: 'rightwards white arrow', google translation) - - "⇩": [t: "вниз белая стрелка"] # 0x21e9 (en: 'downwards white arrow', google translation) - - "⇪": [t: "вверх белая стрелка из бара"] # 0x21ea (en: 'upwards white arrow from bar', google translation) - - "⇫": [t: "вверх белая стрела на пьедестале"] # 0x21eb (en: 'upwards white arrow on pedestal', google translation) - - "⇬": [t: "вверх белая стрелка на пьедестале с горизонтальной баром"] # 0x21ec (en: 'upwards white arrow on pedestal with horizontal bar', google translation) - - "⇭": [t: "вверх белая стрелка на пьедестале с вертикальным баром"] # 0x21ed (en: 'upwards white arrow on pedestal with vertical bar', google translation) - - "⇮": [t: "вверх белая двойная стрелка"] # 0x21ee (en: 'upwards white double arrow', google translation) - - "⇯": [t: "вверх белая двойная стрелка на пьедестале"] # 0x21ef (en: 'upwards white double arrow on pedestal', google translation) - - "⇰": [t: "прямо белая стрелка от стены"] # 0x21f0 (en: 'rightwards white arrow from wall', google translation) - - "⇱": [t: "стрелка северо -запада в угол"] # 0x21f1 (en: 'north west arrow to corner', google translation) - - "⇲": [t: "юго -восточная стрела в угол"] # 0x21f2 (en: 'south east arrow to corner', google translation) - - "⇳": [t: "вниз по белой стрелке"] # 0x21f3 (en: 'up down white arrow', google translation) - - "⇴": [t: "стрелка правой с маленьким кругом"] # 0x21f4 (en: 'right arrow with small circle', google translation) - - "⇵": [t: "вниз стрелка слева от стрелы вверх"] # 0x21f5 (en: 'downwards arrow leftwards of upwards arrow', google translation) - - "⇶": [t: "три правых стрела"] # 0x21f6 (en: 'three rightwards arrows', google translation) - - "⇷": [t: "стрелка влево с вертикальным ходом"] # 0x21f7 (en: 'leftwards arrow with vertical stroke', google translation) - - "⇸": [t: "стрелка вправо с вертикальным ходом"] # 0x21f8 (en: 'rightwards arrow with vertical stroke', google translation) - - "⇹": [t: "стрелка влево справа с вертикальным ходом"] # 0x21f9 (en: 'left right arrow with vertical stroke', google translation) - - "⇺": [t: "стрелка влево с двойным вертикальным ходом"] # 0x21fa (en: 'leftwards arrow with double vertical stroke', google translation) - - "⇻": [t: "стрелка вправо с двойным вертикальным ходом"] # 0x21fb (en: 'rightwards arrow with double vertical stroke', google translation) - - "⇼": [t: "стрелка влево правой с двойным вертикальным ходом"] # 0x21fc (en: 'left right arrow with double vertical stroke', google translation) - - "⇽": [t: "слева открытая стрелка"] # 0x21fd (en: 'leftwards open headed arrow', google translation) - - "⇾": [t: "вправо открыто голова стрелы"] # 0x21fe (en: 'rightwards open headed arrow', google translation) - - "⇿": [t: "влево справа открытая стрелка"] # 0x21ff (en: 'left right open headed arrow', google translation) - - "∀": [t: "для всех"] # 0x2200 (en: 'for all') - - "∁": # 0x2201 - - test: - if: "$Verbosity!='Terse'" - then: [t: "а"] # (en: 'the', google translation) - - t: "дополнение" # (en: 'complement of') - - "∂": # 0x2202 - - test: - if: "$Verbosity='Terse'" - then: [t: "частично"] # (en: 'partial', google translation) - else: [t: "частный дифференциал"] # (en: 'partial derivative') - - "∃": [t: "существует"] # 0x2203 (en: 'there exists') - - "∄": [t: "не существует"] # 0x2204 (en: 'there does not exist') - - "∅": [t: "пустое множество"] # 0x2205 (en: 'empty set') - - "∆": # 0x2206 - - test: - if: "following-sibling::*" - then_test: + - "ˉ": [t: "модификатор макрон"] # 0x2c9 + - "ˊ": [t: "модификатор акут"] # 0x2ca + - "ˋ": [t: "модификатор гравис"] # 0x2cb + - "ˌ": [t: "модификатор низкая вертикальная линия"] # 0x2cc + - "ˍ": [t: "модификатор низкий макрон"] # 0x2cd + - "ˎ": [t: "модификатор низкий гравис"] # 0x2ce + - "ˏ": [t: "модификатор низкий акут"] # 0x2cf + - "ː": [t: "модификатор треугольное двоеточие"] # 0x2d0 + - "ˑ": [t: "модификатор половинное треугольное двоеточие"] # 0x2d1 + - "˒": [t: "модификатор центрированное правое полукольцо"] # 0x2d2 + - "˓": [t: "модификатор центрированное левое полукольцо"] # 0x2d3 + - "˔": [t: "модификатор верхняя метка"] # 0x2d4 + - "˕": [t: "модификатор нижняя метка"] # 0x2d5 + - "˖": [t: "модификатор знак плюс"] # 0x2d6 + - "˗": [t: "модификатор знак минус"] # 0x2d7 + - "˘": [t: "кратка"] # 0x2d8 + - "˙": [t: "точка"] # 0x2d9 + - "˚": [t: "кружок сверху"] # 0x2da + - "˛": [t: "огонэк"] # 0x2db + - "˜": [t: "маленькая тильда"] # 0x2dc + - "˝": [t: "двойной акут"] # 0x2dd + - "˞": [t: "модификатор ротический крючок"] # 0x2de + - "˟": [t: "модификатор крестообразный знак"] # 0x2df + - "ˠ": [t: "модификатор маленькая гамма"] # 0x2e0 + - "ˡ": [t: "модификатор маленькая l"] # 0x2e1 + - "ˢ": [t: "модификатор маленькая s"] # 0x2e2 + - "ˣ": [t: "модификатор маленькая x"] # 0x2e3 + - "ˤ": [t: "модификатор маленькая перевёрнутая гортанная смычка"] # 0x2e4 + - "˥": [t: "модификатор экстра-высокая тоновая черта"] # 0x2e5 + - "˦": [t: "модификатор высокая тоновая черта"] # 0x2e6 + - "˧": [t: "модификатор средняя тоновая черта"] # 0x2e7 + - "˨": [t: "модификатор низкая тоновая черта"] # 0x2e8 + - "˩": [t: "модификатор экстра-низкая тоновая черта"] # 0x2e9 + - "˪": [t: "модификатор знак уходящего тона инь"] # 0x2ea + - "˫": [t: "модификатор знак уходящего тона ян"] # 0x2eb + - "ˬ": [t: "модификатор озвончение"] # 0x2ec + - "˭": [t: "модификатор непридыхательный"] # 0x2ed + - "ˮ": [t: "модификатор двойной апостроф"] # 0x2ee + - "˯": [t: "модификатор низкий наконечник стрелы вниз"] # 0x2ef + - "˰": [t: "модификатор низкий наконечник стрелы вверх"] # 0x2f0 + - "˱": [t: "модификатор низкий наконечник стрелы влево"] # 0x2f1 + - "˲": [t: "модификатор низкий наконечник стрелы вправо"] # 0x2f2 + - "˳": [t: "модификатор низкое кольцо"] # 0x2f3 + - "˴": [t: "модификатор средний гравис"] # 0x2f4 + - "˵": [t: "модификатор средний двойной гравис"] # 0x2f5 + - "˶": [t: "модификатор средний двойной акут"] # 0x2f6 + - "˷": [t: "модификатор низкая тильда"] # 0x2f7 + - "˸": [t: "модификатор поднятое двоеточие"] # 0x2f8 + - "˹": [t: "модификатор начало высокого тона"] # 0x2f9 + - "˺": [t: "модификатор конец высокого тона"] # 0x2fa + - "˻": [t: "модификатор начало низкого тона"] # 0x2fb + - "˼": [t: "модификатор конец низкого тона"] # 0x2fc + - "˽": [t: "модификатор полка"] # 0x2fd + - "˾": [t: "модификатор открытая полка"] # 0x2fe + - "˿": [t: "модификатор низкая стрелка влево"] # 0x2ff + - "̀": [t: "знак грависа (надстрочный)"] # 0x300 + - "́": [t: "знак акута (надстрочный)"] # 0x301 + - "̂": [t: "знак циркумфлекса (надстрочный)"] # 0x302 + - "̃": [t: "знак тильды (надстрочный)"] # 0x303 + - "̄": [t: "знак макрона (надстрочный)"] # 0x304 + - "̅": [t: "знак надчеркивания (надстрочный)"] # 0x305 + - "̆": [t: "знак краткой (надстрочный)"] # 0x306 + - "̇": [t: "точка сверху (надстрочный)"] # 0x307 + - "̈": [t: "знак диерезиса (надстрочный)"] # 0x308 + - "̉": [t: "крючок сверху (надстрочный)"] # 0x309 + - "̊": [t: "кружок сверху (надстрочный)"] # 0x30a + - "̋": [t: "двойной акут (надстрочный)"] # 0x30b + - "̌": [t: "гачек"] # 0x30c + - "̍": [t: "вертикальная линия сверху (надстрочный)"] # 0x30d + - "̎": [t: "двойная вертикальная линия сверху (надстрочный)"] # 0x30e + - "̏": [t: "двойной гравис (надстрочный)"] # 0x30f + - "̐": [t: "знак чандрабинду (надстрочный)"] # 0x310 + - "̑": [t: "перевёрнутая кратка (надстрочный)"] # 0x311 + - "̒": [t: "перевёрнутая запятая сверху (надстрочный)"] # 0x312 + - "̓": [t: "запятая сверху (надстрочный)"] # 0x313 + - "̔": [t: "перевёрнутая запятая сверху (надстрочный)"] # 0x314 + - "̕": [t: "запятая справа сверху (надстрочный)"] # 0x315 + - "̖": [t: "гравис снизу (подстрочный)"] # 0x316 + - "̗": [t: "акут снизу (подстрочный)"] # 0x317 + - "̘": [t: "левая метка снизу (подстрочный)"] # 0x318 + - "̙": [t: "правая метка снизу (подстрочный)"] # 0x319 + - "̚": [t: "левый угол сверху (надстрочный)"] # 0x31a + - "̛": [t: "рожок (надстрочный)"] # 0x31b + - "̜": [t: "левое полукольцо снизу (подстрочный)"] # 0x31c + - "̝": [t: "верхняя метка снизу (подстрочный)"] # 0x31d + - "̞": [t: "нижняя метка снизу (подстрочный)"] # 0x31e + - "̟": [t: "знак плюс снизу (подстрочный)"] # 0x31f + - "̠": [t: "знак минус снизу (подстрочный)"] # 0x320 + - "̡": [t: "крючок палатализации снизу (подстрочный)"] # 0x321 + - "̢": [t: "крючок ретрофлексии снизу (подстрочный)"] # 0x322 + - "̣": [t: "точка снизу (подстрочный)"] # 0x323 + - "̤": [t: "диерезис снизу (подстрочный)"] # 0x324 + - "̥": [t: "кружок снизу (подстрочный)"] # 0x325 + - "̦": [t: "запятая снизу (подстрочный)"] # 0x326 + - "̧": [t: "седиль (подстрочный)"] # 0x327 + - "̨": [t: "огонэк (подстрочный)"] # 0x328 + - "̩": [t: "вертикальная линия снизу (подстрочный)"] # 0x329 + - "̪": [t: "мостик снизу (подстрочный)"] # 0x32a + - "̫": [t: "перевёрнутая двойная арка снизу (подстрочный)"] # 0x32b + - "̬": [t: "гачек снизу (подстрочный)"] # 0x32c + - "̭": [t: "циркумфлекс снизу (подстрочный)"] # 0x32d + - "̮": [t: "кратка снизу (подстрочный)"] # 0x32e + - "̯": [t: "перевёрнутая кратка снизу (подстрочный)"] # 0x32f + - "̰": [t: "тильда снизу (подстрочный)"] # 0x330 + - "̱": [t: "макрон снизу (подстрочный)"] # 0x331 + - "̲": [t: "нижнее подчеркивание (подстрочный)"] # 0x332 + - "̳": [t: "двойное нижнее подчеркивание (подстрочный)"] # 0x333 + - "̴": [t: "тильда наложение (надстрочный)"] # 0x334 + - "̵": [t: "короткая черта наложение (надстрочный)"] # 0x335 + - "̶": [t: "длинная черта наложение (надстрочный)"] # 0x336 + - "̷": [t: "короткая косая черта наложение (надстрочный)"] # 0x337 + - "̸": [t: "длинная косая черта наложение (надстрочный)"] # 0x338 + - "̹": [t: "правое полукольцо снизу (подстрочный)"] # 0x339 + - "̺": [t: "перевёрнутый мостик снизу (подстрочный)"] # 0x33a + - "̻": [t: "квадрат снизу (подстрочный)"] # 0x33b + - "̼": [t: "чайка снизу (подстрочный)"] # 0x33c + - "̽": [t: "x сверху (надстрочный)"] # 0x33d + - "̾": [t: "вертикальная тильда (надстрочный)"] # 0x33e + - "̿": [t: "двойное надчеркивание (надстрочный)"] # 0x33f + - "̀": [t: "знак грависа тона (надстрочный)"] # 0x340 + - "́": [t: "знак акута тона (надстрочный)"] # 0x341 + - "͆": [t: "мостик сверху"] # 0x346 + - "ΪΫϏ": # 0x3aa, 0x3ab, 0x3cf + - test: + if: "$CapitalLetters_Beep" + then: + - audio: + value: "beep.mp4" + replace: [] + - test: + if: "$CapitalLetters_UseWord" + then_test: + if: "$SpeechOverrides_CapitalLetters = ''" + then_test: + if: "$Impairment = 'Blindness'" + then: [t: "заглавная"] + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [spell: "translate('.', 'ΪΫϏ', 'ιυϗ')"] + - t: "с диалитикой" + - "ϊ": [t: "йота с диалитикой"] # 0x3ca + - "ϋ": [t: "ипсилон с диалитикой"] # 0x3cb + - "ό": [t: "омикрон с тоносом"] # 0x3cc + - "ύ": [t: "ипсилон с тоносом"] # 0x3cd + - "ώ": [t: "омега с тоносом"] # 0x3ce + - "ϐ": [t: "бета"] # 0x3d0 + - "ϑ": [t: "тета"] # 0x3d1 + - "ϒ": [t: "ипсилон с крючком"] # 0x3d2 + - "ϓ": [t: "ипсилон с акутом и крючком"] # 0x3d3 + - "ϔ": [t: "ипсилон с диалитикой и крючком"] # 0x3d4 + - "ϕ": [t: "фи"] # 0x3d5 + - "ϖ": [t: "пи"] # 0x3d6 + - "ϗ": [t: "кай"] # 0x3d7 + - "Ϙ": [t: "заглавная архаическая коппа"] # 0x3d8 + - "ϙ": [t: "архаическая коппа"] # 0x3d9 + - "ϵ": [t: "эпсилон"] # 0x3f5 + - "϶": [t: "перевёрнутый эпсилон"] # 0x3f6 + - "А-Я": # 0x410 - 0x42f + - test: + if: "$CapitalLetters_Beep" + then: + - audio: + value: "beep.mp4" + replace: [] + - test: + if: "$CapitalLetters_UseWord" + then_test: + if: "$SpeechOverrides_CapitalLetters = ''" + then_test: + if: "$Impairment = 'Blindness'" + then: [t: "заглавная"] + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [spell: "translate('.', 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', 'абвгдеЁжзийклмнопрстуфхцчшщъыьэюя')"] + - "а": [t: "а"] # 0x430 + - "б": [t: "бэ"] # 0x431 + - "в": [t: "вэ"] # 0x432 + - "г": [t: "гэ"] # 0x433 + - "д": [t: "дэ"] # 0x434 + - "е": [t: "е"] # 0x435 + - "ё": [t: "ё"] # 0x451 + - "ж": [t: "жэ"] # 0x436 + - "з": [t: "зэ"] # 0x437 + - "и": [t: "и"] # 0x438 + - "й": [t: "и краткое"] # 0x439 + - "к": [t: "ка"] # 0x43a + - "л": [t: "эль"] # 0x43b + - "м": [t: "эм"] # 0x43c + - "н": [t: "эн"] # 0x43d + - "о": [t: "о"] # 0x43e + - "п": [t: "пэ"] # 0x43f + - "р": [t: "эр"] # 0x440 + - "с": [t: "эс"] # 0x441 + - "т": [t: "тэ"] # 0x442 + - "у": [t: "у"] # 0x443 + - "ф": [t: "эф"] # 0x444 + - "х": [t: "ха"] # 0x445 + - "ц": [t: "цэ"] # 0x446 + - "ч": [t: "чэ"] # 0x447 + - "ш": [t: "ша"] # 0x448 + - "щ": [t: "ща"] # 0x449 + - "ъ": [t: "твёрдый знак"] # 0x44a + - "ы": [t: "еры"] # 0x44b + - "ь": [t: "мягкий знак"] # 0x44c + - "э": [t: "э"] # 0x44d + - "ю": [t: "ю"] # 0x44e + - "я": [t: "я"] # 0x44f + - "؆": [t: "арабо-индийский кубический корень"] # 0x606 + - "؇": [t: "арабо-индийский корень четвёртой степени"] # 0x607 + - "؈": [t: "арабская рай"] # 0x608 + - "‐": [t: "дефис"] # 0x2010 + - "‑": [t: "дефис"] # 0x2011 + - "‒": [t: "цифровое тире"] # 0x2012 + - "–": [t: "короткое тире"] # 0x2013 + - "—": [t: "длинное тире"] # 0x2014 + - "―": [t: "горизонтальная черта"] # 0x2015 + - "‖": [t: "двойная вертикальная линия"] # 0x2016 + - "†": [t: "крестик"] # 0x2020 + - "‡": [t: "двойной крестик"] # 0x2021 + - " - ": [t: " "] # 0x2000 - 0x2007 + - "•": # 0x2022 + - test: + if: "@data-chem-formula-op" + then: [t: "точка"] + else: [t: "маркер списка"] + - "…": # 0x2026 + test: + if: + - "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_Ellipses = 'Auto' or" + - "../*[1][.='…']" + then: [t: "точка точка точка"] + else_test: + if: "count(following-sibling::*) = 0" + then: [t: "и так далее"] + else: [t: "и так далее до"] + - "‰": [t: "промилле"] # 0x2030 + - "‱": [t: "базисный пункт"] # 0x2031 + - "′": [t: "штрих"] # 0x2032 + - "″": [t: "двойной штрих"] # 0x2033 + - "‴": [t: "тройной штрих"] # 0x2034 + - "‵": [t: "перевёрнутый штрих"] # 0x2035 + - "‶": [t: "перевёрнутый двойной штрих"] # 0x2036 + - "‷": [t: "перевёрнутый тройной штрих"] # 0x2037 + - "‸": [t: "в степени"] # 0x2038 + - "‸": [t: "в степени"] # 0x2038 + - "‹": [t: "одинарная левая угловая кавычка"] # 0x2039 + - "›": [t: "одинарная правая угловая кавычка"] # 0x203a + - "‼": # 0x203c + - test: + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" + then: [t: "двойной восклицательный знак"] + else: [t: "двойной факториал"] + - "⁄": # 0x2044 + - test: + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" + then: [t: "большая косая черта"] + else: [t: "делить на"] + - "⁅": [t: "левая квадратная скобка с пером"] # 0x2045 + - "⁆": [t: "правая квадратная скобка с пером"] # 0x2046 + - "※": [t: "знак ссылки"] # 0x203b + - "‿": [t: "нижняя связка"] # 0x203F + - "⁀": [t: "верхняя связка"] # 0x2040 + - "⁎": [t: "нижняя звёздочка"] # 0x204e + - "⁏": [t: "перевёрнутая точка с запятой"] # 0x204f + - "⁐": [t: "знак пробела"] # 0x2050 + - "⁐": [t: "закрыть"] # 0x2050 + - "⁑": [t: "две вертикальные звёздочки"] # 0x2051 + - "⁒": [t: "коммерческий знак минус"] # 0x2052 + - "⁗": [t: "четверной штрих"] # 0x2057 + - "⁠": [t: ""] # 0x2060 + - "⁰": [t: "в нулевой степени"] # 0x2070 + - "ⁱ": [t: "в степени i"] # 0x2071 + - "⁴": [t: "в четвёртой степени"] # 0x2074 + - "⁵": [t: "в пятой степени"] # 0x2075 + - "⁶": [t: "в шестой степени"] # 0x2076 + - "⁷": [t: "в седьмой степени"] # 0x2077 + - "⁸": [t: "в восьмой степени"] # 0x2078 + - "⁹": [t: "в девятой степени"] # 0x2079 + - "⁺": [t: "верхний индекс плюс"] # 0x207a + - "⁻": [t: "верхний индекс минус"] # 0x207b + - "⁼": [t: "верхний индекс равно"] # 0x207c + - "⁽": [t: "верхний индекс левая скобка"] # 0x207d + - "⁾": [t: "верхний индекс правая скобка"] # 0x207e + - "ⁿ": [t: "в степени n"] # 0x207f + - "₀": [t: "нижний индекс ноль"] # 0x2080 + - "₁": [t: "нижний индекс один"] # 0x2081 + - "₂": [t: "нижний индекс два"] # 0x2082 + - "₃": [t: "нижний индекс три"] # 0x2083 + - "₄": [t: "нижний индекс четыре"] # 0x2084 + - "₅": [t: "нижний индекс пять"] # 0x2085 + - "₆": [t: "нижний индекс шесть"] # 0x2086 + - "₇": [t: "нижний индекс семь"] # 0x2087 + - "₈": [t: "нижний индекс восемь"] # 0x2088 + - "₉": [t: "нижний индекс девять"] # 0x2089 + - "₊": [t: "нижний индекс плюс"] # 0x208a + - "₋": [t: "нижний индекс минус"] # 0x208b + - "₌": [t: "нижний индекс равно"] # 0x208c + - "₍": [t: "нижний индекс левая скобка"] # 0x208d + - "₎": [t: "нижний индекс правая скобка"] # 0x208e + - "ₐ": [t: "нижний индекс A"] # 0x2090 + - "ₑ": [t: "нижний индекс E"] # 0x2091 + - "ₒ": [t: "нижний индекс O"] # 0x2092 + - "ₓ": [t: "нижний индекс X"] # 0x2093 + - "ₕ": [t: "нижний индекс H"] # 0x2095 + - "ₖ": [t: "нижний индекс K"] # 0x2096 + - "ₗ": [t: "нижний индекс L"] # 0x2097 + - "ₘ": [t: "нижний индекс M"] # 0x2098 + - "ₙ": [t: "нижний индекс N"] # 0x2099 + - "ₚ": [t: "нижний индекс P"] # 0x209a + - "ₛ": [t: "нижний индекс S"] # 0x209b + - "ₜ": [t: "нижний индекс T"] # 0x209c + - "₠": [t: "европейская валютная единица"] # 0x20a0 + - "₡": [t: "колон"] # 0x20a1 + - "₢": [t: "крузейро"] # 0x20a2 + - "₣": [t: "франк"] # 0x20a3 + - "₤": [t: "лира"] # 0x20a4 + - "₥": [t: "милль"] # 0x20a5 + - "₦": [t: "найра"] # 0x20a6 + - "₧": [t: "песета"] # 0x20a7 + - "₨": [t: "рупии"] # 0x20a8 + - "₩": [t: "вона"] # 0x20a9 + - "₪": [t: "новый шекель"] # 0x20aa + - "₫": [t: "донг"] # 0x20ab + - "€": [t: "евро"] # 0x20ac + - "₭": [t: "кип"] # 0x20ad + - "₮": [t: "тугрик"] # 0x20ae + - "₯": [t: "драхма"] # 0x20af + - "₰": [t: "немецкие пфенниги"] # 0x20b0 + - "₱": [t: "песо"] # 0x20b1 + - "₲": [t: "гуарани"] # 0x20b2 + - "₳": [t: "аустраль"] # 0x20b3 + - "₴": [t: "гривна"] # 0x20b4 + - "₵": [t: "седи"] # 0x20b5 + - "₶": [t: "ливр турнуа"] # 0x20b6 + - "₷": [t: "спесмило"] # 0x20b7 + - "₸": [t: "тенге"] # 0x20b8 + - "₹": [t: "индийская рупия"] # 0x20b9 + - "₺": [t: "турецкая лира"] # 0x20ba + - "⃐": [t: "левая гарпунная скоба сверху (надстрочный)"] # 0x20d0 + - "⃑": [t: "правая гарпунная скоба сверху (надстрочный)"] # 0x20d1 + - "⃒": [t: "длинная вертикальная линия наложение (надстрочный)"] # 0x20d2 + - "⃓": [t: "короткая вертикальная линия наложение (надстрочный)"] # 0x20d3 + - "⃔": [t: "стрелка против часовой стрелки сверху (надстрочный)"] # 0x20d4 + - "⃕": [t: "стрелка по часовой стрелке сверху (надстрочный)"] # 0x20d5 + - "⃖": [t: "стрелка влево сверху (надстрочный)"] # 0x20d6 + - "⃗": [t: "стрелка вправо сверху (надстрочный)"] # 0x20d7 + - "⃘": [t: "кольцо наложение (надстрочный)"] # 0x20d8 + - "⃙": [t: "кольцо по часовой стрелке наложение (надстрочный)"] # 0x20d9 + - "⃚": [t: "кольцо против часовой стрелки наложение (надстрочный)"] # 0x20da + - "⃛": [t: "тройная точка"] # 0x20db + - "⃜": [t: "четверная точка"] # 0x20dc + - "⃝": [t: "окружность вокруг (надстрочный)"] # 0x20dd + - "⃞": [t: "квадрат вокруг (надстрочный)"] # 0x20de + - "⃟": [t: "ромб вокруг (надстрочный)"] # 0x20df + - "⃠": [t: "окружность с обратной косой чертой вокруг (надстрочный)"] # 0x20e0 + - "⃡": [t: "стрелка влево-вправо сверху (надстрочный)"] # 0x20e1 + - "⃢": [t: "экран вокруг (надстрочный)"] # 0x20e2 + - "⃣": [t: "клавиша вокруг (надстрочный)"] # 0x20e3 + - "⃤": [t: "треугольник вершиной вверх вокруг (надстрочный)"] # 0x20e4 + - "⃥": [t: "обратная косая черта наложение (надстрочный)"] # 0x20e5 + - "⃦": [t: "двойной вертикальный штрих наложение (надстрочный)"] # 0x20e6 + - "⃧": [t: "символ аннуитета (надстрочный)"] # 0x20e7 + - "⃨": [t: "тройная точка снизу"] # 0x20e8 + - "⃩": [t: "широкий мостик сверху (надстрочный)"] # 0x20e9 + - "⃪": [t: "стрелка влево наложение (надстрочный)"] # 0x20ea + - "⃫": [t: "длинная двойная косая черта наложение (надстрочный)"] # 0x20eb + - "⃬": [t: "правая гарпунная скоба с бородкой вниз (надстрочный)"] # 0x20ec + - "⃭": [t: "левая гарпунная скоба с бородкой вниз (надстрочный)"] # 0x20ed + - "⃮": [t: "стрелка влево снизу (подстрочный)"] # 0x20ee + - "⃯": [t: "стрелка вправо снизу (подстрочный)"] # 0x20ef + - "⃰": [t: "звёздочка сверху (надстрочный)"] # 0x20f0 + - "℄": [t: "символ осевой линии"] # 0x2104 + - "℅": [t: "внимание"] # 0x2105 + - "℆": [t: "каждый"] # 0x2106 + - "ℇ": [t: "постоянная Эйлера"] # 0x2107 + - "℈": [t: "скрупул"] # 0x2108 + - "℉": [t: "градус Фаренгейта"] # 0x2109 + - "ℊ": [t: "рукописная g"] # 0x210a + - "ℌℑℨℭ": # 0x210c, 0x2111, 0x2128, 0x212d + - t: "фрактур" + - spell: "translate('.', 'ℌℑℨℭ', 'HIZC')" + - "ℍℙℾℿ": # 0x210d, 0x2119, 0x213e, 0x213f + - t: "двойной контур" + - spell: "translate('.', 'ℍℙℾℿ', 'HPΓΠ')" + - "ℎ": [t: "постоянная Планка"] # 0x210e + - "ℏ": [t: "аш с чертой"] # 0x210f + - "ℐℒ℘ℬℰℱℳ": # 0x2110, 0x2112, 0x2118, 0x2130, 0x2131, 0x2133 + - t: "рукописный" + - spell: "translate('.', 'ℐℒ℘ℬℰℱℳ', 'ILPBEFM')" + - "ℓ": [t: "рукописная l"] # 0x2113 + - "℔": [t: "фунты"] # 0x2114 + - "№": [t: "номер"] # 0x2116 + - "℥": [t: "унции"] # 0x2125 + - "Ω": [t: "омы"] # 0x2126 + - "℧": [t: "мо"] # 0x2127 + - "℩": [t: "повёрнутая йота"] # 0x2129 + - "K": [t: "кельвин"] # 0x212a + - "Å": [t: "ангстрем"] # 0x212b + - "ℯ": [t: "рукописная e"] # 0x212f + - "Ⅎ℺⅁⅂⅃⅄": # 0x2132, 0x213a, 0x2141, 0x2142, 0x2143, 0x2144 + - test: + - if: "'.' = '℺'" + then: [t: "повёрнутый"] + - else_if: "'.' = 'Ⅎ'" + then: [t: "перевёрнутый"] + - else_if: "'.' = '⅃'" + then: [t: "реверсивный без засечек"] + else: [t: "повёрнутый без засечек"] + - spell: "translate('.', 'Ⅎ℺⅁⅂⅃⅄', 'FQGLLY')" + - "ℴ": [t: "рукописная o"] # 0x2134 + - "ℵ": [t: "первое трансфинитное кардинальное число"] # 0x2135 + - "ℶ": [t: "второе трансфинитное кардинальное число"] # 0x2136 + - "ℷ": [t: "третье трансфинитное кардинальное число"] # 0x2137 + - "ℸ": [t: "четвёртое трансфинитное кардинальное число"] # 0x2138 + - "ℼ": [t: "дубль-шрифт пи"] # 0x213c + - "ℽ": [t: "дубль-шрифт гамма"] # 0x213d + - "⅀": [t: "дубль-шрифт n-арная сумма"] # 0x2140 + - "⅋": [t: "повёрнутый амперсанд"] # 0x214b + - "⅌": [t: "пер"] # 0x214c + - "ⅎ": [t: "повёрнутая F"] # 0x214e + - "¼": [t: "одна четвёртая"] # 0x00bc + - "½": [t: "одна вторая"] # 0x00bd + - "¾": [t: "три четвёртых"] # 0x00be + - "⅐": [t: "одна седьмая"] # 0x2150 + - "⅑": [t: "одна девятая"] # 0x2151 + - "⅒": [t: "одна десятая"] # 0x2152 + - "⅓": [t: "одна третья"] # 0x2153 + - "⅔": [t: "две третьих"] # 0x2154 + - "⅕": [t: "одна пятая"] # 0x2155 + - "⅖": [t: "две пятых"] # 0x2156 + - "⅗": [t: "три пятых"] # 0x2157 + - "⅘": [t: "четыре пятых"] # 0x2158 + - "⅙": [t: "одна шестая"] # 0x2159 + - "⅚": [t: "пять шестых"] # 0x215a + - "⅛": [t: "одна восьмая"] # 0x215b + - "⅜": [t: "три восьмых"] # 0x215c + - "⅝": [t: "пять восьмых"] # 0x215d + - "⅞": [t: "семь восьмых"] # 0x215e + - "⅟": [t: "один над"] # 0x215f + - "Ⅰ": [t: "I"] # 0x2160 + - "Ⅱ": [t: "I I"] # 0x2161 + - "Ⅲ": [t: "I I I"] # 0x2162 + - "Ⅳ": [t: "I V"] # 0x2163 + - "Ⅴ": [t: "V"] # 0x2164 + - "Ⅵ": [t: "V I"] # 0x2165 + - "Ⅶ": [t: "V I I"] # 0x2166 + - "Ⅷ": [t: "V I I I"] # 0x2167 + - "Ⅸ": [t: "I X"] # 0x2168 + - "Ⅹ": [t: "X"] # 0x2169 + - "Ⅺ": [t: "X I"] # 0x216a + - "Ⅻ": [t: "X I I"] # 0x216b + - "Ⅼ": [t: "L"] # 0x216c + - "Ⅽ": [t: "C"] # 0x216d + - "Ⅾ": [t: "D"] # 0x216e + - "Ⅿ": [t: "M"] # 0x216f + - "ⅰ": [t: "i"] # 0x2170 + - "ⅱ": [t: "i i"] # 0x2171 + - "↗": # 0x2197 + - test: + if: "ancestor::*[2][self::m:limit]" + then: [t: "приближается снизу"] + else: [t: "стрелка северо-восток"] + - test: + if: "ancestor::*[2][self::m:limit]" + then: [t: "приближается сверху"] + else: [t: "стрелка юго-восток"] + - "↙": [t: "стрелка юго-запад"] # 0x2199 + - "↚": [t: "стрелка влево с чертой"] # 0x219a + - "↛": [t: "стрелка вправо с чертой"] # 0x219b + - "↜": [t: "стрелка влево волнистая"] # 0x219c + - "↝": [t: "стрелка вправо волнистая"] # 0x219d + - "↞": [t: "стрелка влево с двумя головками"] # 0x219e + - "↟": [t: "стрелка вверх с двумя головками"] # 0x219f + - "↠": [t: "стрелка вправо с двумя головками"] # 0x21a0 + - "∅": [t: "пустое множество"] # 0x2205 + - "∆": # 0x2206 + - test: + if: "following-sibling::*" + then_test: if: "$Verbosity!='Terse'" - then: [t: "лахплахан"] # "LahPlahsian" sounds better than "laplacian" in speech engines tested (en: 'the LahPlahsian of', google translation) - else: [t: "инкремент"] # (en: 'LahPlahsian') - else: [t: "инкремент"] # (en: 'LahPlahsian') - - - "∇": [t: "набла"] # 0x2207 (en: 'nahblah') - - "∉": # 0x2209 - # rule is identical to 0x2208 - - test: + then: [t: "лапласиан от"] + else: [t: "лапласиан"] + else: [t: "лапласиан"] + - "∇": [t: "набла"] # 0x2207 + - "∉": # 0x2209 + - test: if: "$SpeechStyle != 'ClearSpeak'" - then: [t: "не элемент"] # (en: 'is not an element of', google translation) - # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option + then: [t: "не является элементом"] else_test: - if: "../../self::m:set or ../../../self::m:set" # inside a set + if: "../../self::m:set or ../../../self::m:set" then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "не в"] # (en: 'not in', google translation) + then: [t: "не в"] - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "не член"] # (en: 'not member of', google translation) + then: [t: "не член"] - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "не элемент"] # (en: 'not element of', google translation) - - else: [t: "не принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to') + then: [t: "не элемент"] + - else: [t: "не принадлежит"] else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "не является членом"] # (en: 'is not a member of', google translation) + then: [t: "не является членом"] - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "не элемент"] # (en: 'is not an element of', google translation) + then: [t: "не является элементом"] - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "не в"] # (en: 'is not in', google translation) - - else: [t: "не принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'does not belong to') - - "∊": # 0x220a - - test: + then: [t: "не входит в"] + - else: [t: "не принадлежит"] + - "∊": # 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: "является"] # (en: 'is', google translation) - - t: "малое принадлежит" # (en: 'an element of') - # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option + if: "$Verbosity!='Terse' and not(parent::m:set)" + then: [t: "является"] + - t: "элементом" else_test: - if: "../../self::m:set or ../../../self::m:set" # inside a set + if: "../../self::m:set or ../../../self::m:set" then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "в"] # (en: 'in', google translation) + then: [t: "в"] - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "член"] # (en: 'member of', google translation) + then: [t: "член"] - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "элемент"] # (en: 'element of', google translation) - - else: [t: "малое принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to') + then: [t: "элемент"] + - else: [t: "принадлежит"] else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "является членом"] # (en: 'is a member of', google translation) + then: [t: "является членом"] - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "элемент"] # (en: 'is an element of', google translation) + then: [t: "является элементом"] - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "находится в"] # (en: 'is in', google translation) - - else: [t: "малое принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to') - - "∋": [t: "содержит как член"] # 0x220b (en: 'contains the member') - - "∌": [t: "не содержит как член"] # 0x220c (en: 'does not contain the member') - - "∍": [t: "малое содержит как член"] # 0x220d (en: 'contains the member') - - "∎": [t: "конец доказательства"] # 0x220e (en: 'end of proof') - - "∏": [t: "эн-арное произведение"] # 0x220f (en: 'product') - - "∐": [t: "эн-арный сомножитель"] # 0x2210 (en: 'coproduct') - - "∑": [t: "эн-арная сумма"] # 0x2211 (en: 'sum') - - "−": [t: "минус"] # 0x2212 (en: 'minus') - - "∓": [t: "минус плюс"] # 0x2213 (en: 'minus or plus') - - "∔": [t: "плюс с точкой"] # 0x2214 (en: 'dot plus') - - "∕": [t: "знак деления"] # 0x2215 (en: 'divided by') - - "∖": [t: "разность множеств"] # 0x2216 (en: 'set minus') - - "∗": [t: "оператор звёздочка"] # 0x2217 (en: 'times') - - "∘": [t: "кольцо"] # 0x2218 (en: 'composed with') - - "∙": # 0x2219 - - test: + then: [t: "входит в"] + - else: [t: "принадлежит"] + - "∋": [t: "содержит элемент"] # 0x220b + - "∌": [t: "не содержит элемент"] # 0x220c + - "∍": [t: "содержит элемент"] # 0x220d + - "∎": [t: "конец доказательства"] # 0x220e + - "∏": [t: "произведение"] # 0x220f + - "∐": [t: "сомножитель"] # 0x2210 + - "∑": [t: "сумма"] # 0x2211 + - "−": [t: "минус"] # 0x2212 + - "∓": [t: "минус или плюс"] # 0x2213 + - "∔": [t: "плюс с точкой"] # 0x2214 + - test: if: "@data-chem-formula-op" - then: [t: "точка"] # (en: 'dot', google translation) - else: [t: "буллит"] # (en: 'times') - - - "√": # 0x221a - - test: - if: "$Verbosity!='Terse'" - then: [t: "а"] # (en: 'the', google translation) - - t: "квадратный корень" # (en: 'square root of') - - "∛": # 0x221b - - test: - if: "$Verbosity!='Terse'" - then: [t: "а"] # (en: 'the', google translation) - - t: "кубический корень" # (en: 'cube root of') - - "∜": # 0x221c - - test: - if: "$Verbosity!='Terse'" - then: [t: "а"] # (en: 'the', google translation) - - t: "корень четвёртой степени" # (en: 'fourth root of') - - "∝": # 0x221d - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "пропорционально" # (en: 'proportional to') - - "∞": [t: "бесконечность"] # 0x221e (en: 'infinity') - - "∟": [t: "правый угол"] # 0x221f (en: 'right angle') - - "∠": [t: "угол"] # 0x2220 (en: 'angle') - - "∡": [t: "измеримый угол"] # 0x2221 (en: 'measured angle') - - "∢": [t: "сферический угол"] # 0x2222 (en: 'spherical angle') - - "∣": [t: "делит"] # 0x2223 (en: 'divides') - - "∤": [t: "не делит"] # 0x2224 (en: 'does not divide') - - "∧": [t: "логическое и"] # 0x2227 (en: 'and') - - "∨": [t: "логическое или"] # 0x2228 (en: 'or') - - "∩": [t: "пересечение"] # 0x2229 (en: 'intersection') - - "∪": [t: "объединение"] # 0x222a (en: 'union') - - "∫": [t: "интеграл"] # 0x222b (en: 'integral') - - "∬": [t: "двойной интеграл"] # 0x222c (en: 'double integral') - - "∭": [t: "тройной интеграл"] # 0x222d (en: 'triple integral') - - "∮": [t: "интеграл по контуру"] # 0x222e (en: 'contour integral') - - "∯": [t: "поверхностный интеграл"] # 0x222f (en: 'surface integral') - - "∰": [t: "интеграл по объёму"] # 0x2230 (en: 'volume integral') - - "∱": [t: "круговой интеграл"] # 0x2231 (en: 'clockwise integral') - - "∲": [t: "круговой интеграл по контуру"] # 0x2232 (en: 'clockwise contour integral') - - "∳": [t: "антикруговой интеграл по контуру"] # 0x2233 (en: 'anticlockwise contour integral') - - "∴": [t: "следовательно"] # 0x2234 (en: 'therefore') - - "∵": [t: "поскольку"] # 0x2235 (en: 'because') - - "∶": # 0x2236 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "отношение" # (en: 'to') - - "∷": [t: "пропорция"] # 0x2237 (en: 'as') - - "∸": [t: "минус с точкой"] # 0x2238 (en: 'dot minus') - - "∹": [t: "превышает"] # 0x2239 (en: 'has excess compared to') - - "∺": # 0x223a - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "геометрическая пропорция" # (en: 'geometrically proportional to') - - "∻": # 0x223b - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "гомотетия" # (en: 'homothetic to') - - "∼": [t: "тильда"] # 0x223c (en: 'varies with') - - "∽": [t: "обратная тильда"] # 0x223d (en: 'reversed tilde') - - "∾": # 0x223e - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "перевёрнутая плавная s" # (en: 'most positive') - - "∿": [t: "синусоидальная волна"] # 0x223f (en: 'sine wave') - - "≀": [t: "скрученное произведение"] # 0x2240 (en: 'wreath product') - - "≁": [t: "не эквивалентно"] # 0x2241 (en: 'not tilde') - - "≂": [t: "тильда с минусом"] # 0x2242 (en: 'minus tilde') - - "≃": # 0x2243 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "асимптотически равно" # (en: 'asymptotically equal to') - - "≄": # 0x2244 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не равно асимптотически" # (en: 'not asymptotically equal to') - - "≅": # 0x2245 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "конгруэнтность" # (en: 'congruent to') - - "≆": # 0x2246 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "приблизительно но не точно равно" # (en: 'approximately but not actually equal to') - - "≇": # 0x2247 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не равно приблизительно или точно" # (en: 'not congruent to') - - "≈": # 0x2248 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "приблизительно равно" # (en: 'approximately equal to') - - "≉": # 0x2249 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не приблизительно равно" # (en: 'not approximately equal to') - - "≊": # 0x224a - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "приблизительно равно или равно" # (en: 'approximately equal or equal to') - - "≋": [t: "тройная тильда"] # 0x224b (en: 'triple tilde') - - "≌": [t: "конгруэнтно"] # 0x224c (en: 'are all equal to') - - "≍": # 0x224d - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "Эквивалентно" # (en: 'equivalent to') - - "≎": # 0x224e - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "Геометрически эквивалентно" # (en: 'geometrically equivalent to') - - "≏": # 0x224f - - test: - if: "$Verbosity!='Terse'" - then: [t: "а"] # (en: 'the', google translation) - - t: "разность между" # (en: 'difference between') - - "≐": [t: "стремится к пределу"] # 0x2250 (en: 'approaches the limit') - - "≑": # 0x2251 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "геометрически равно" # (en: 'geometrically equal to') - - "≒": # 0x2252 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "приблизительно равно или есть образ" # (en: 'approximately equal to or the image of') - - "≓": # 0x2253 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is the', google translation) - - t: "есть образ или приблизительно равно" # (en: 'image of or approximately equal to') - - "≔": [t: "равно с двоеточием"] # 0x2254 (en: 'colon equals') - - "≕": [t: "равно с двоеточием"] # 0x2255 (en: 'equals colon') - - "≖": [t: "равно с кругом"] # 0x2256 (en: 'ring in equal to') - - "≗": # 0x2257 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "равно с кругом" # (en: 'approximately equal to') - - "≘": [t: "соответствует"] # 0x2258 (en: 'corresponds to') - - "≙": [t: "охватывает"] # 0x2259 (en: 'estimates') - - "≚": # 0x225a - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "изогонально равно" # (en: 'equiangular to') - - "≛": [t: "равно со звёздочкой"] # 0x225b (en: 'star equals') - - "≜": [t: "равно с дельтой"] # 0x225c (en: 'delta equals') - - "≝": [t: "равно по определению"] # 0x225d (en: 'is defined to be') - - "≞": # 0x225e - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "измеряется" # (en: 'measured by') - - "≟": [t: "равно с вопросительным знаком"] # 0x225f (en: 'has an unknown relationship with') - - "≠": # 0x2260 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не равно" # (en: 'not equal to') - - "≡": # 0x2261 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "тождественно равно" # (en: 'identical to') - - "≢": # 0x2262 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не равно тождественно" # (en: 'not identical to') - - "≣": # 0x2263 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "строго эквивалентно" # (en: 'strictly equivalent to') - - "≦": [t: "меньше над равно"] # 0x2266 (en: 'less than over equal to') - - "≧": [t: "больше над равно"] # 0x2267 (en: 'greater than over equal to') - - "≨": # 0x2268 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "меньше но не равно" # (en: 'less than but not equal to') - - "≩": # 0x2269 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "больше но не равно" # (en: 'greater than but not equal to') - - "≪": # 0x226a - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "много меньше" # (en: 'much less than') - - "≫": # 0x226b - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "много больше" # (en: 'much greater than') - - "≬": # 0x226c - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "между" # (en: 'between') - - "≭": # 0x226d - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не эквивалентно" # (en: 'not equivalent to') - - "≮": # 0x226e - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не меньше" # (en: 'not less than') - - "≯": # 0x226f - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не больше" # (en: 'not greater than') - - "≰": # 0x2270 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "ни меньше ни равно" # (en: 'neither less than nor equal to') - - "≱": # 0x2271 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "ни больше ни равно" # (en: 'neither greater than nor equal to') - - "≲": # 0x2272 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "меньше или эквивалентно" # (en: 'less than or equivalent to') - - "≳": # 0x2273 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "больше или эквивалентно" # (en: 'greater than or equivalent to') - - "≴": # 0x2274 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "ни меньше ни эквивалентно" # (en: 'neither less than nor equivalent to') - - "≵": # 0x2275 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "ни больше ни эквивалентно" # (en: 'neither greater than nor equivalent to') - - "≶": # 0x2276 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "меньше или больше" # (en: 'less than or greater than') - - "≷": # 0x2277 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "больше или меньше" # (en: 'greater than or less than') - - "≸": # 0x2278 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "ни меньше ни больше" # (en: 'neither less than nor greater than') - - "≹": # 0x2279 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "ни больше ни меньше" # (en: 'neither greater than nor less than') - - "≺": [t: "предшествует"] # 0x227a (en: 'precedes') - - "≻": [t: "следует за"] # 0x227b (en: 'succeeds') - - "≼": [t: "предшествует или равно"] # 0x227c (en: 'precedes or is equal to') - - "≽": [t: "следует за или равно"] # 0x227d (en: 'succeeds or is equal to') - - "≾": [t: "предшествует или эквивалентно"] # 0x227e (en: 'precedes or is equivalent to') - - "≿": [t: "следует за или эквивалентно"] # 0x227f (en: 'succeeds or is equivalent to') - - "⊀": [t: "не предшествует"] # 0x2280 (en: 'does not precede') - - "⊁": [t: "не следует за"] # 0x2281 (en: 'does not succeed') - - "⊂": # 0x2282 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является а"] # (en: 'is a', google translation) - - t: "подмножество" # (en: 'subset of') - - "⊃": # 0x2283 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является а"] # (en: 'is a', google translation) - - t: "надмножество" # (en: 'superset of') - - "⊄": # 0x2284 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не подмножество" # (en: 'not a subset of') - - "⊅": # 0x2285 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не надмножество" # (en: 'not a superset of') - - "⊆": # 0x2286 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является а"] # (en: 'is a', google translation) - - t: "подмножество или равно" # (en: 'subset of or equal to') - - "⊇": # 0x2287 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является а"] # (en: 'is a', google translation) - - t: "надмножество или равно" # (en: 'superset of or equal to') - - "⊈": # 0x2288 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "ни подмножество ни равно" # (en: 'neither a subset of nor equal to') - - "⊉": # 0x2289 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "ни надмножество ни равно" # (en: 'neither a superset of nor equal to') - - "⊊": [t: "подмножество но не равно"] # 0x228a (en: 'subset of with not equal to') - - "⊋": [t: "надмножество но не равно"] # 0x228b (en: 'superset of with not equal to') - - "⊌": [t: "мультимножество"] # 0x228c (en: 'multiset') - - "⊍": [t: "умножение мультимножеств"] # 0x228d (en: 'multiset multiplication') - - "⊎": [t: "объединение мультимножеств"] # 0x228e (en: 'multiset union') - - "⊏": [t: "образ в квадрате"] # 0x228f (en: 'square image of') - - "⊐": [t: "прообраз в квадрате"] # 0x2290 (en: 'square original of') - - "⊑": [t: "образ в квадрате или равно"] # 0x2291 (en: 'square image of or equal to') - - "⊒": [t: "прообраз в квадрате или равно"] # 0x2292 (en: 'square original of or equal to') - - "⊓": [t: "пересечение в квадрате"] # 0x2293 (en: 'square cap') - - "⊔": [t: "объединение в квадрате"] # 0x2294 (en: 'square cup') - - "⊕": [t: "плюс в круге"] # 0x2295 (en: 'circled plus') - - "⊖": [t: "минус в круге"] # 0x2296 (en: 'circled minus') - - "⊗": [t: "произведение в круге"] # 0x2297 (en: 'circled times') - - "⊘": [t: "дробная черта в круге"] # 0x2298 (en: 'circled slash') - - "⊙": [t: "точка в круге"] # 0x2299 (en: 'circled dot operator') - - "⊚": [t: "кольцо в круге"] # 0x229a (en: 'circled ring') - - "⊛": [t: "звёздочка в круге"] # 0x229b (en: 'circled asterisk') - - "⊜": [t: "равно в круге"] # 0x229c (en: 'circled equals') - - "⊝": [t: "дефис в круге"] # 0x229d (en: 'circled dash') - - "⊞": [t: "плюс в квадрате"] # 0x229e (en: 'squared plus') - - "⊟": [t: "минус в квадрате"] # 0x229f (en: 'squared minus') - - "⊠": [t: "произведение в квадрате"] # 0x22a0 (en: 'squared times') - - "⊡": [t: "точка в квадрате"] # 0x22a1 (en: 'squared dot operator') - - "⊢": [t: "шеврон вправо"] # 0x22a2 (en: 'proves') - - "⊣": [t: "шеврон влево"] # 0x22a3 (en: 'does not yield') - - "⊤": [t: "шеврон вниз"] # 0x22a4 (en: 'top') - - "⊥": # 0x22a5 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "перпендикулярно" # (en: 'bottom') - - "⊦": [t: "высказывание"] # 0x22a6 (en: 'reduces to') - - "⊧": [t: "модулирует"] # 0x22a7 (en: 'models') - - "⊨": # 0x22a8 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "истина" # (en: 'true') - - "⊩": [t: "влечёт"] # 0x22a9 (en: 'forces') - - "⊪": [t: "тройная вертикальная черта с перекладиной справа"] # 0x22aa (en: 'triple vertical bar right turnstile') - - "⊫": [t: "двойная вертикальная черта с двойной перекладиной справа"] # 0x22ab (en: 'double vertical bar double right turnstile') - - "⊬": [t: "не доказано"] # 0x22ac (en: 'does not prove') - - "⊭": # 0x22ad - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не истина" # (en: 'not true') - - "⊮": [t: "не влечёт"] # 0x22ae (en: 'does not force') - - "⊯": [t: "двойная вертикальная черта с двойной перекладиной справа с отрицанием"] # 0x22af (en: 'negated double vertical bar double right turnstile') - - "⊰": [t: "предшествует относительно"] # 0x22b0 (en: 'precedes under relation') - - "⊱": [t: "следует за относительно"] # 0x22b1 (en: 'succeeds under relation') - - "⊲": # 0x22b2 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "нормальная подгруппа" # (en: 'a normal subgroup of') - - "⊳": [t: "содержит как нормальную подгруппу"] # 0x22b3 (en: 'contains as a normal subgroup') - - "⊴": # 0x22b4 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "нормальная подгруппа или равно" # (en: 'a normal subgroup of or equal to') - - "⊵": [t: "содержит как нормальную подгруппу или равно"] # 0x22b5 (en: 'contains as a normal subgroup or equal to') - - "⊶": # 0x22b6 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "прообраз" # (en: 'the original of') - - "⊷": # 0x22b7 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "образ" # (en: 'an image of') - - "⊸": [t: "многозначное отображение"] # 0x22b8 (en: 'multimap') - - "⊹": [t: "Эрмитово сопряжение матрицы"] # 0x22b9 (en: 'hermitian conjugate matrix') - - "⊺": [t: "включение"] # 0x22ba (en: 'intercalate') - - "⊻": [t: "исключающее или"] # 0x22bb (en: 'xor') - - "⊼": [t: "и с отрицанием"] # 0x22bc (en: 'nand') - - "⊽": [t: "или с отрицанием"] # 0x22bd (en: 'nor') - - "⊾": [t: "правый угол с дугой"] # 0x22be (en: 'right angle with arc') - - "⊿": [t: "треугольник вершиной вправо"] # 0x22bf (en: 'right triangle') - - "⋀": [t: "эн-арное логическое и"] # 0x22c0 (en: 'logical and') - - "⋁": [t: "эн-арное логическое или"] # 0x22c1 (en: 'logical or') - - "⋂": [t: "эн-арное пересечение"] # 0x22c2 (en: 'intersection') - - "⋃": [t: "эн-арное объединение"] # 0x22c3 (en: 'union') - - "⋄": [t: "ромб"] # 0x22c4 (en: 'diamond operator') - - "⋅": # 0x22c5 + then: [t: "точка"] + else: [t: "умножить"] + - test: + if: "$Verbosity!='Terse'" + then: [t: "квадратный корень из"] + - t: "квадратный корень из" + - "∛": # 0x221b + - test: + if: "$Verbosity!='Terse'" + then: [t: "кубический корень из"] + - t: "кубический корень из" + - "∜": # 0x221c + - test: + if: "$Verbosity!='Terse'" + then: [t: "корень четвёртой степени из"] + - t: "корень четвёртой степени из" + - "∝": # 0x221d + - test: + if: "$Verbosity!='Terse'" + then: [t: "пропорционален"] + - t: "пропорционально" + - "∞": [t: "бесконечность"] # 0x221e + - "∟": [t: "прямой угол"] # 0x221f + - "∠": [t: "угол"] # 0x2220 + - "∡": [t: "измеренный угол"] # 0x2221 + - "∢": [t: "сферический угол"] # 0x2222 + - "∣": [t: "делит"] # 0x2223 + - "∤": [t: "не делит"] # 0x2224 + - "∧": [t: "и"] # 0x2227 + - "∨": [t: "или"] # 0x2228 + - "∩": [t: "пересечение"] # 0x2229 + - "∪": [t: "объединение"] # 0x222a + - "∫": [t: "интеграл"] # 0x222b + - "∬": [t: "двойной интеграл"] # 0x222c + - "∭": [t: "тройной интеграл"] # 0x222d + - "∮": [t: "контурный интеграл"] # 0x222e + - "∯": [t: "поверхностный интеграл"] # 0x222f + - "∰": [t: "объёмный интеграл"] # 0x2230 + - "∱": [t: "интеграл по часовой стрелке"] # 0x2231 + - "∲": [t: "контурный интеграл по часовой стрелке"] # 0x2232 + - "∳": [t: "контурный интеграл против часовой стрелки"] # 0x2233 + - "∴": [t: "следовательно"] # 0x2234 + - "∵": [t: "потому что"] # 0x2235 + - "∶": # 0x2236 + - test: + if: "$Verbosity!='Terse'" + then: [t: "относится"] + - t: "к" + - "∷": [t: "как"] # 0x2237 + - "∸": [t: "минус с точкой"] # 0x2238 + - "∹": [t: "имеет избыток по сравнению с"] # 0x2239 + - "∺": # 0x223a + - test: + if: "$Verbosity!='Terse'" + then: [t: "геометрически пропорционально"] + - t: "геометрически пропорционально" + - "∻": # 0x223b + - test: + if: "$Verbosity!='Terse'" + then: [t: "гомотетично"] + - t: "гомотетично" + - "∼": [t: "подобно"] # 0x223c + - "∽": [t: "перевёрнутая тильда"] # 0x223d + - "∾": # 0x223e + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "наиболее положительным" + - "∿": [t: "синусоида"] # 0x223f + - "≀": [t: "венковое произведение"] # 0x2240 + - "≁": [t: "не тильда"] # 0x2241 + - "≂": [t: "минус тильда"] # 0x2242 + - "≃": # 0x2243 + - test: + if: "$Verbosity!='Terse'" + then: [t: "асимптотически равно"] + - t: "асимптотически равно" + - "≄": # 0x2244 + - test: + if: "$Verbosity!='Terse'" + then: [t: "не асимптотически равно"] + - t: "не асимптотически равно" + - "≅": # 0x2245 + - test: + if: "$Verbosity!='Terse'" + then: [t: "конгруэнтно"] + - t: "конгруэнтно" + - "≆": # 0x2246 + - test: + if: "$Verbosity!='Terse'" + then: [t: "приблизительно, но не фактически равно"] + - t: "приблизительно, но не фактически равно" + - "≇": # 0x2247 + - test: + if: "$Verbosity!='Terse'" + then: [t: "не конгруэнтно"] + - t: "не конгруэнтно" + - "≈": # 0x2248 + - test: + if: "$Verbosity!='Terse'" + then: [t: "приблизительно равно"] + - t: "приблизительно равно" + - "≉": # 0x2249 + - test: + if: "$Verbosity!='Terse'" + then: [t: "не приблизительно равно"] + - t: "не приблизительно равно" + - "≊": # 0x224a + - test: + if: "$Verbosity!='Terse'" + then: [t: "приблизительно равно или равно"] + - t: "приблизительно равно или равно" + - "≋": [t: "тройная тильда"] # 0x224b + - "≌": [t: "все равны"] # 0x224c + - "≍": # 0x224d + - test: + if: "$Verbosity!='Terse'" + then: [t: "эквивалентно"] + - t: "эквивалентно" + - "≎": # 0x224e + - test: + if: "$Verbosity!='Terse'" + then: [t: "геометрически эквивалентно"] + - t: "геометрически эквивалентно" + - "≏": # 0x224f + - test: + if: "$Verbosity!='Terse'" + then: [t: "разность между"] + - t: "разность между" + - "≐": [t: "стремится к пределу"] # 0x2250 + - "≑": # 0x2251 + - test: + if: "$Verbosity!='Terse'" + then: [t: "геометрически равно"] + - t: "геометрически равно" + - "≒": # 0x2252 + - test: + if: "$Verbosity!='Terse'" + then: [t: "приблизительно равно или образ"] + - t: "приблизительно равно или образ" # 0x2253 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является образом"] + - t: "образ или приблизительно равно" + - "≔": [t: "двоеточие равно"] # 0x2254 + - "≕": [t: "равно двоеточие"] # 0x2255 + - "≖": [t: "круг в равно"] # 0x2256 + - "≗": # 0x2257 + - test: + if: "$Verbosity!='Terse'" + then: [t: "приблизительно равно"] + - t: "приблизительно равно" + - "≘": [t: "соответствует"] # 0x2258 + - "≙": [t: "оценивает"] # 0x2259 + - "≚": # 0x225a + - test: + if: "$Verbosity!='Terse'" + then: [t: "равноугольно"] + - t: "равноугольно" + - "≛": [t: "звезда равно"] # 0x225b + - "≜": [t: "дельта равно"] # 0x225c + - "≝": [t: "определяется как"] # 0x225d + - "≞": # 0x225e + - test: + if: "$Verbosity!='Terse'" + then: [t: "измеряется"] + - t: "измеряется" + - "≟": [t: "имеет неизвестное отношение"] # 0x225f + - "≠": # 0x2260 + - test: + if: "$Verbosity!='Terse'" + then: [t: "не равно"] + - t: "не равно" + - "≡": # 0x2261 + - test: + if: "$Verbosity!='Terse'" + then: [t: "тождественно"] + - t: "тождественно равно" + - "≢": # 0x2262 + - test: + if: "$Verbosity!='Terse'" + then: [t: "не тождественно"] + - t: "не тождественно равно" + - "≣": # 0x2263 + - test: + if: "$Verbosity!='Terse'" + then: [t: "строго эквивалентно"] + - t: "строго эквивалентно" + - "≦": [t: "меньше или равно"] # 0x2266 + - "≧": [t: "больше или равно"] # 0x2267 + - "≨": # 0x2268 + - test: + if: "$Verbosity!='Terse'" + then: [t: "меньше, но не равно"] + - t: "меньше, но не равно" + - "≩": # 0x2269 + - test: + if: "$Verbosity!='Terse'" + then: [t: "больше, но не равно"] + - t: "больше, но не равно" + - "≪": # 0x226a + - test: + if: "$Verbosity!='Terse'" + then: [t: "намного меньше"] + - t: "намного меньше" + - "≫": # 0x226b + - test: + if: "$Verbosity!='Terse'" + then: [t: "намного больше"] + - t: "намного больше" + - "≬": # 0x226c + - test: + if: "$Verbosity!='Terse'" + then: [t: "между"] + - t: "между" + - "≭": # 0x226d + - test: + if: "$Verbosity!='Terse'" + then: [t: "не эквивалентно"] + - t: "не эквивалентно" + - "≮": # 0x226e + - test: + if: "$Verbosity!='Terse'" + then: [t: "не меньше"] + - t: "не меньше" + - "≯": # 0x226f + - test: + if: "$Verbosity!='Terse'" + then: [t: "не больше"] + - t: "не больше" + - "≰": # 0x2270 + - test: + if: "$Verbosity!='Terse'" + then: [t: "ни меньше, ни равно"] + - t: "ни меньше, ни равно" + - "≱": # 0x2271 + - test: + if: "$Verbosity!='Terse'" + then: [t: "ни больше, ни равно"] + - t: "ни больше, ни равно" + - "≲": # 0x2272 + - test: + if: "$Verbosity!='Terse'" + then: [t: "меньше или эквивалентно"] + - t: "меньше или эквивалентно" + - "≳": # 0x2273 + - test: + if: "$Verbosity!='Terse'" + then: [t: "больше или эквивалентно"] + - t: "больше или эквивалентно" + - "≴": # 0x2274 + - test: + if: "$Verbosity!='Terse'" + then: [t: "ни меньше, ни эквивалентно"] + - t: "ни меньше, ни эквивалентно" + - "≵": # 0x2275 + - test: + if: "$Verbosity!='Terse'" + then: [t: "ни больше, ни эквивалентно"] + - t: "ни больше, ни эквивалентно" + - "≶": # 0x2276 + - test: + if: "$Verbosity!='Terse'" + then: [t: "меньше или больше"] + - t: "меньше или больше" + - "≷": # 0x2277 + - test: + if: "$Verbosity!='Terse'" + then: [t: "больше или меньше"] + - t: "больше или меньше" + - "≸": # 0x2278 + - test: + if: "$Verbosity!='Terse'" + then: [t: "ни меньше, ни больше"] + - t: "ни меньше, ни больше" + - "≹": # 0x2279 + - test: + if: "$Verbosity!='Terse'" + then: [t: "ни больше, ни меньше"] + - t: "ни больше, ни меньше" + - "≺": [t: "предшествует"] # 0x227a + - "≻": [t: "следует"] # 0x227b + - "≼": [t: "предшествует или равно"] # 0x227c + - "≽": [t: "следует или равно"] # 0x227d + - "≾": [t: "предшествует или эквивалентно"] # 0x227e + - "≿": [t: "следует или эквивалентно"] # 0x227f + - "⊀": [t: "не предшествует"] # 0x2280 + - "⊁": [t: "не следует"] # 0x2281 + - "⊂": # 0x2282 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "подмножеством" + - "⊃": # 0x2283 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "надмножеством" + - "⊄": # 0x2284 + - test: + if: "$Verbosity!='Terse'" + then: [t: "не является"] + - t: "подмножеством" + - "⊅": # 0x2285 + - test: + if: "$Verbosity!='Terse'" + then: [t: "не является"] + - t: "надмножеством" + - "⊆": # 0x2286 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "подмножеством или равно" + - "⊇": # 0x2287 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "надмножеством или равно" + - "⊈": # 0x2288 + - test: + if: "$Verbosity!='Terse'" + then: [t: "не является ни подмножеством, ни равно"] + - t: "не является ни подмножеством, ни равно" + - "⊉": # 0x2289 + - test: + if: "$Verbosity!='Terse'" + then: [t: "не является ни надмножеством, ни равно"] + - t: "не является ни надмножеством, ни равно" + - "⊊": [t: "собственное подмножество"] # 0x228a + - "⊋": [t: "собственное надмножество"] # 0x228b + - "⊌": [t: "мультимножество"] # 0x228c + - "⊍": [t: "умножение мультимножеств"] # 0x228d + - "⊎": [t: "объединение мультимножеств"] # 0x228e + - "⊏": [t: "квадратный образ"] # 0x228f + - "⊐": [t: "квадратный прообраз"] # 0x2290 + - "⊑": [t: "квадратный образ или равно"] # 0x2291 + - "⊒": [t: "квадратный прообраз или равно"] # 0x2292 + - "⊓": [t: "квадратная крышка"] # 0x2293 + - "⊔": [t: "квадратная чашка"] # 0x2294 + - "⊕": [t: "плюс в круге"] # 0x2295 + - "⊖": [t: "минус в круге"] # 0x2296 + - "⊗": [t: "умножение в круге"] # 0x2297 + - "⊘": [t: "косая черта в круге"] # 0x2298 + - "⊙": [t: "точка в круге (оператор)"] # 0x2299 + - "⊚": [t: "кольцо в круге"] # 0x229a + - "⊛": [t: "звезда в круге"] # 0x229b + - "⊜": [t: "равно в круге"] # 0x229c + - "⊝": [t: "тире в круге"] # 0x229d + - "⊞": [t: "плюс в квадрате"] # 0x229e + - "⊟": [t: "минус в квадрате"] # 0x229f + - "⊠": [t: "умножение в квадрате"] # 0x22a0 + - "⊡": [t: "точка в квадрате (оператор)"] # 0x22a1 + - "⊢": [t: "доказывает"] # 0x22a2 + - "⊣": [t: "не порождает"] # 0x22a3 + - "⊤": [t: "вершина"] # 0x22a4 + - "⊥": # 0x22a5 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "дном" + - "⊦": [t: "сводится к"] # 0x22a6 + - "⊧": [t: "моделирует"] # 0x22a7 + - "⊨": # 0x22a8 + - test: + if: "$Verbosity!='Terse'" + then: [t: "истинно"] + - t: "истинно" + - "⊩": [t: "форсирует"] # 0x22a9 + - "⊪": [t: "тройная вертикальная черта правый поворотный шлагбаум"] # 0x22aa + - "⊫": [t: "двойная вертикальная черта двойной правый поворотный шлагбаум"] # 0x22ab + - "⊬": [t: "не доказывает"] # 0x22ac + - "⊭": # 0x22ad + - test: + if: "$Verbosity!='Terse'" + then: [t: "не истинно"] + - t: "не истинно" + - "⊮": [t: "не форсирует"] # 0x22ae + - "⊯": [t: "отрицание двойной вертикальной черты двойного правого поворотного шлагбаума"] # 0x22af + - "⊰": [t: "предшествует по отношению"] # 0x22b0 + - "⊱": [t: "следует по отношению"] # 0x22b1 + - "⊲": # 0x22b2 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "нормальной подгруппой" + - "⊳": [t: "содержит как нормальную подгруппу"] # 0x22b3 + - "⊴": # 0x22b4 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "нормальной подгруппой или равно" + - "⊵": [t: "содержит как нормальную подгруппу или равно"] # 0x22b5 + - "⊶": # 0x22b6 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "прообразом" + - "⊷": # 0x22b7 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "образом" + - "⊸": [t: "мультиотображение"] # 0x22b8 + - "⊹": [t: "эрмитово сопряжённая матрица"] # 0x22b9 + - "⊺": [t: "интеркаляция"] # 0x22ba + - "⊻": [t: "исключающее или"] # 0x22bb + - "⊼": [t: "штрих Шеффера"] # 0x22bc + - "⊽": [t: "стрелка Пирса"] # 0x22bd + - "⊾": [t: "прямой угол с дугой"] # 0x22be + - "⊿": [t: "прямоугольный треугольник"] # 0x22bf + - "⋀": [t: "логическое и"] # 0x22c0 + - "⋁": [t: "логическое или"] # 0x22c1 + - "⋂": [t: "пересечение"] # 0x22c2 + - "⋃": [t: "объединение"] # 0x22c3 + - "⋄": [t: "ромбовидный оператор"] # 0x22c4 + - "⋅": # 0x22c5 - test: if: "@data-chem-formula-op" - then: [t: "точка"] # (en: 'dot', google translation) - else: [t: "оператор точка"] # (en: 'times') - - - "⋆": [t: "оператор звёздочка"] # 0x22c6 (en: 'times') - - "⋇": [t: "кратность деления"] # 0x22c7 (en: 'division times') - - "⋈": [t: "бабочка"] # 0x22c8 (en: 'bowtie') - - "⋉": # 0x22c9 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "полупрямое произведение с нормальным фактором слева" # (en: 'the left normal factor semidirect product of') - - "⋊": # 0x22ca - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "полупрямое произведение с нормальным фактором справа" # (en: 'the right normal factor semidirect product of') - - "⋋": # 0x22cb - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "левое полупрямое произведение" # (en: 'the left semidirect product of') - - "⋌": # 0x22cc - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "правое полупрямое произведение" # (en: 'the right semidirect product of') - - "⋍": [t: "обратное волнистое равно"] # 0x22cd (en: 'reversed tilde equals') - - "⋎": [t: "волнистое логическое или"] # 0x22ce (en: 'curly logical or') - - "⋏": [t: "волнистое логическое и"] # 0x22cf (en: 'curly logical and') - - "⋐": # 0x22d0 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "двойное подмножество" # (en: 'a double subset of') - - "⋑": # 0x22d1 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "двойное надмножество" # (en: 'a double superset of') - - "⋒": # 0x22d2 - - test: - if: "$Verbosity!='Terse'" - then: [t: "а"] # (en: 'the', google translation) - - t: "двойное пересечение" # (en: 'double intersection of') - - "⋓": # 0x22d3 - - test: - if: "$Verbosity!='Terse'" - then: [t: "а"] # (en: 'the', google translation) - - t: "двойное объединение" # (en: 'double union of') - - "⋔": # 0x22d4 - - test: - if: "$Verbosity!='Terse'" - then: [t: "а"] # (en: 'the', google translation) - - t: "вилка" # (en: 'proper intersection of') - - "⋕": # 0x22d5 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "равно и параллельно" # (en: 'equal to and parallel to') - - "⋖": [t: "меньше с точкой"] # 0x22d6 (en: 'less than with dot') - - "⋗": [t: "больше с точкой"] # 0x22d7 (en: 'greater than with dot') - - "⋘": # 0x22d8 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "очень много меньше" # (en: 'very much less than') - - "⋙": # 0x22d9 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "очень много больше" # (en: 'very much greater than') - - "⋚": # 0x22da - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "меньше равно или больше" # (en: 'less than equal to or greater than') - - "⋛": # 0x22db - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "больше равно или меньше" # (en: 'greater than equal to or less than') - - "⋜": # 0x22dc - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "равно или меньше" # (en: 'equal to or less than') - - "⋝": # 0x22dd - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "равно или больше" # (en: 'equal to or greater than') - - "⋞": # 0x22de - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "равно или предшествует" # (en: 'equal to or precedes') - - "⋟": # 0x22df - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "равно или следует за" # (en: 'equal to or succeeds') - - "⋠": [t: "не предшествует или равно"] # 0x22e0 (en: 'does not precede nor is equal to') - - "⋡": [t: "не следует за или равно"] # 0x22e1 (en: 'does not succeed nor is equal to') - - "⋢": [t: "не образ в квадрате или равно"] # 0x22e2 (en: 'not square image of or equal to') - - "⋣": [t: "не прообраз в квадрате или равно"] # 0x22e3 (en: 'not square original of or equal to') - - "⋤": [t: "образ в квадрате или не равно"] # 0x22e4 (en: 'square image of or not equal to') - - "⋥": [t: "прообраз в квадрате или не равно"] # 0x22e5 (en: 'square original of or not equal to') - - "⋦": # 0x22e6 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "меньше но не эквивалентно" # (en: 'less than but not equivalent to') - - "⋧": # 0x22e7 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "больше но не эквивалентно" # (en: 'greater than but not equivalent to') - - "⋨": [t: "предшествует но не эквивалентно"] # 0x22e8 (en: 'precedes but is not equivalent to') - - "⋩": [t: "следует за но не эквивалентно"] # 0x22e9 (en: 'succeeds but is not equivalent to') - - "⋪": # 0x22ea - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не содержится как нормальная подгруппа" # (en: 'not a normal subgroup of') - - "⋫": [t: "не содержит как нормальную подгруппу"] # 0x22eb (en: 'does not contain as a normal subgroup') - - "⋬": # 0x22ec - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не содержится как нормальная подгруппа или равно" # (en: 'not a normal subgroup of nor is equal to') - - "⋭": [t: "не содержит как нормальную подгруппу или равно"] # 0x22ed (en: 'does not contain as a normal subgroup nor is equal to') - - "⋮": [t: "вертикальное многоточие"] # 0x22ee (en: 'vertical ellipsis') - - "⋯": [t: "внутристрочное горизонтальное многоточие"] # 0x22ef (en: 'dot dot dot') - - "⋰": [t: "диагональное многоточие сверху вправо"] # 0x22f0 (en: 'upwards diagonal ellipsis') - - "⋱": [t: "диагональное многоточие снизу вправо"] # 0x22f1 (en: 'diagonal ellipsis') - - "⋲": [t: "принадлежит с длинным горизонтальным штрихом"] # 0x22f2 (en: 'element of with long horizontal stroke') - - "⋳": [t: "принадлежит с вертикальной чертой в конце горизонтального штриха"] # 0x22f3 (en: 'element of with vertical bar at end of horizontal stroke') - - "⋴": [t: "малое принадлежит с вертикальной чертой в конце горизонтального штриха"] # 0x22f4 (en: 'element of with vertical bar at end of horizontal stroke') - - "⋵": [t: "принадлежит с точкой сверху"] # 0x22f5 (en: 'element of with dot above') - - "⋶": [t: "принадлежит с чертой сверху"] # 0x22f6 (en: 'element of with overbar') - - "⋷": [t: "малое принадлежит с чертой сверху"] # 0x22f7 (en: 'element of with overbar') - - "⋸": [t: "принадлежит с чертой снизу"] # 0x22f8 (en: 'element of with underbar') - - "⋹": [t: "принадлежит с двумя горизонтальными штрихами"] # 0x22f9 (en: 'element of with two horizontal strokes') - - "⋺": [t: "содержит с длинным горизонтальным штрихом"] # 0x22fa (en: 'contains with long horizontal stroke') - - "⋻": [t: "содержит с вертикальной чертой в конце горизонтального штриха"] # 0x22fb (en: 'contains with vertical bar at end of horizontal stroke') - - "⋼": [t: "малое содержит с вертикальной чертой в конце горизонтального штриха"] # 0x22fc (en: 'contains with vertical bar at end of horizontal stroke') - - "⋽": [t: "содержит с чертой сверху"] # 0x22fd (en: 'contains with overbar') - - "⋾": [t: "малое содержит с чертой сверху"] # 0x22fe (en: 'contains with overbar') - - "⋿": [t: "знак принадлежности z-нотации"] # 0x22ff (en: 'z notation bag membership') - - "⌀": [t: "диаметр"] # 0x2300 (en: 'diameter', google translation) - - "⌁": [t: "электрическая стрелка"] # 0x2301 (en: 'electric arrow', google translation) - - "⌂": [t: "дом"] # 0x2302 (en: 'house', google translation) - - "⌃": [t: "вверх стрел"] # 0x2303 (en: 'up arrowhead', google translation) - - "⌄": [t: "вниз стрелка"] # 0x2304 (en: 'down arrowhead', google translation) - - "⌅": [t: "проектив"] # 0x2305 (en: 'projective', google translation) - - "⌆": [t: "перспектива"] # 0x2306 (en: 'perspective', google translation) - - "⌇": [t: "волнистая линия"] # 0x2307 (en: 'wavy line', google translation) - - "⌈": [t: "левый потолок"] # 0x2308 (en: 'left ceiling', google translation) - - "⌉": [t: "правый потолок"] # 0x2309 (en: 'right ceiling', google translation) - - "⌊": [t: "левый пол"] # 0x230a (en: 'left floor', google translation) - - "⌋": [t: "правый этаж"] # 0x230b (en: 'right floor', google translation) - - "⌌": [t: "нижний правый урожай"] # 0x230c (en: 'bottom right crop', google translation) - - "⌍": [t: "внизу левый урожай"] # 0x230d (en: 'bottom left crop', google translation) - - "⌎": [t: "верхний правый урожай"] # 0x230e (en: 'top right crop', google translation) - - "⌏": [t: "верхний левый урожай"] # 0x230f (en: 'top left crop', google translation) - - "⌐": [t: "перевернулся, а не знак"] # 0x2310 (en: 'reversed not sign', google translation) - - "⌑": [t: "квадратный лозонь"] # 0x2311 (en: 'square lozenge', google translation) - - "⌒": [t: "дуговой"] # 0x2312 (en: 'arc', google translation) - - "⌓": [t: "сегмент"] # 0x2313 (en: 'segment', google translation) - - "⌔": [t: "сектор"] # 0x2314 (en: 'sector', google translation) - - "⌕": [t: "телефон рекордер"] # 0x2315 (en: 'telephone recorder', google translation) - - "⌖": [t: "индикатор положения перекрестие"] # 0x2316 (en: 'position indicator crosshairs', google translation) - - "⌗": [t: "viewdata square"] # 0x2317 (google translation) - - "⌘": [t: "знак интереса"] # 0x2318 (en: 'place of interest sign', google translation) - - "⌙": [t: "не повернул знак"] # 0x2319 (en: 'turned not sign', google translation) - - "⌚": [t: "смотреть"] # 0x231a (en: 'watch', google translation) - - "⌛": [t: "песочные часы"] # 0x231b (en: 'hourglass', google translation) - - "⌜": [t: "верхний левый угол"] # 0x231c (en: 'top left corner', google translation) - - "⌝": [t: "верхний правый угол"] # 0x231d (en: 'top right corner', google translation) - - "⌞": [t: "нижний левый угол"] # 0x231e (en: 'bottom left corner', google translation) - - "⌟": [t: "нижний правый угол"] # 0x231f (en: 'bottom right corner', google translation) - - "⌠": [t: "верхняя половина интеграла"] # 0x2320 (en: 'top half integral', google translation) - - "⌡": [t: "интеграл нижней половины"] # 0x2321 (en: 'bottom half integral', google translation) - - "⌢": [t: "хмуриться"] # 0x2322 (en: 'frown', google translation) - - "⌣": [t: "улыбка"] # 0x2323 (en: 'smile', google translation) - - "⌤": [t: "вверх стрелка между двумя горизонтальными стержнями"] # 0x2324 (en: 'up arrowhead between two horizontal bars', google translation) - - "⌥": [t: "вариант ключа"] # 0x2325 (en: 'option key', google translation) - - "⌦": [t: "стереть вправо"] # 0x2326 (en: 'erase to the right', google translation) - - "⌧": [t: "x в прямоугольной коробке"] # 0x2327 (en: 'x in a rectangle box', google translation) - - "⌨": [t: "клавиатура"] # 0x2328 (en: 'keyboard', google translation) - - "〈": [t: "левый угловой кронштейн"] # 0x2329 (en: 'left pointing angle bracket', google translation) - - "〉": [t: "кронштейн с углом правого направления"] # 0x232a (en: 'right pointing angle bracket', google translation) - - "⌫": [t: "стереть слева"] # 0x232b (en: 'erase to the left', google translation) - - "⌬": [t: "бензол кольцо"] # 0x232c (en: 'benzene ring', google translation) - - "⌭": [t: "цилиндричность"] # 0x232d (en: 'cylindricity', google translation) - - "⌮": [t: "все вокруг профиля"] # 0x232e (en: 'all around profile', google translation) - - "⌯": [t: "симметрия"] # 0x232f (en: 'symmetry', google translation) - - "⌰": [t: "полное выпуск"] # 0x2330 (en: 'total runout', google translation) - - "⌱": [t: "измерение происхождение"] # 0x2331 (en: 'dimension origin', google translation) - - "⌲": [t: "конический конус"] # 0x2332 (en: 'conical taper', google translation) - - "⌳": [t: "склон"] # 0x2333 (en: 'slope', google translation) - - "⌴": [t: "countbore"] # 0x2334 (en: 'counterbore', google translation) - - "⌵": [t: "countersink"] # 0x2335 (google translation) - - "⌶": [t: "apl i beam"] # 0x2336 (google translation) - - "⌽": [t: "apl circle stile"] # 0x233d (google translation) - - "⌿": [t: "apl slash bar"] # 0x233f (google translation) - - "⍰": [t: "неизвестная коробка"] # 0x2370 (en: 'unknown box', google translation) - - "⍼": [t: "правый угол с нисходящим зигзагообразной стрелкой"] # 0x237c (en: 'right angle with downwards zigzag arrow', google translation) - - "⎔": [t: "шестигранник"] # 0x2394 (en: 'hexagon', google translation) - - "⎕": [t: "коробка"] # 0x2395 (en: 'box', google translation) - - "⎶": [t: "нижний квадратный кронштейн над верхним квадратным кронштейном"] # 0x23b6 (en: 'bottom square bracket over top square bracket', google translation) - - "⏜": [t: "лучшая скобка"] # 0x23dc (en: 'top paren', google translation) - - "⏝": [t: "нижняя скобка"] # 0x23dd (en: 'bottom paren', google translation) - - "⏞": [t: "лучшая скоба"] # 0x23de (en: 'top brace', google translation) - - "⏟": [t: "нижняя скоба"] # 0x23df (en: 'bottom brace', google translation) - - "⏠": [t: "лучшая кронштейна для черепахи"] # 0x23e0 (en: 'top tortoise shell bracket', google translation) - - "⏡": [t: "нижняя черепаха скорлупа"] # 0x23e1 (en: 'bottom tortoise shell bracket', google translation) - - "⏢": [t: "белый трапеция"] # 0x23e2 (en: 'white trapezium', google translation) - - "⏣": [t: "бензол прямо с кругом"] # 0x23e3 (en: 'benzene right with circle', google translation) - - "⏤": [t: "прямо"] # 0x23e4 (en: 'straightness', google translation) - - "⏥": [t: "плоскостность"] # 0x23e5 (en: 'flatness', google translation) - - "⏦": # 0x23e6 - - spell: "ac" - - t: "текущий" # (en: 'current', google translation) - - "⏧": [t: "электрическое пересечение"] # 0x23e7 (en: 'electrical intersection', google translation) - - "①-⑨": # 0x2460 - 0x2469 - - t: "кружит" # (en: 'circled', google translation) - - spell: "translate('.', '①②③④⑤⑥⑦⑧⑨', '123456789')" - - "⑩": [t: "кружит десять"] # 0x2469 (en: 'circled ten', google translation) - - "⑪": [t: "обернуто одиннадцать"] # 0x246a (en: 'circled eleven', google translation) - - "⑫": [t: "обернуло двенадцать"] # 0x246b (en: 'circled twelve', google translation) - - "⑬": [t: "кругло тринадцать"] # 0x246c (en: 'circled thirteen', google translation) - - "⑭": [t: "кружит четырнадцать"] # 0x246d (en: 'circled fourteen', google translation) - - "⑮": [t: "кружит пятнадцать"] # 0x246e (en: 'circled fifteen', google translation) - - "⑯": [t: "кружит шестнадцать"] # 0x246f (en: 'circled sixteen', google translation) - - "⑰": [t: "обведено семнадцатью"] # 0x2470 (en: 'circled seventeen', google translation) - - "⑱": [t: "обведенный атин"] # 0x2471 (en: 'circled eighteen', google translation) - - "⑳": [t: "кружит двадцать"] # 0x2473 (en: 'circled twenty', google translation) - - "⑴-⑼": # 0x2474 - 0x247d - - t: "скобки" # (en: 'parenthesized', google translation) - - spell: "translate('.', '⑴⑵⑶⑷⑸⑹⑺⑻⑼', '123456789')" - - "⑽": [t: "круженные скобки, которые десять"] # 0x247d (en: 'parenthesized ten', google translation) - - "⑾": [t: "кламок, это одиннадцать"] # 0x247e (en: 'parenthesized eleven', google translation) - - "⑿": [t: "кламок, это двенадцать"] # 0x247f (en: 'parenthesized twelve', google translation) - - "⒀": [t: "скобки, это тринадцать"] # 0x2480 (en: 'parenthesized thirteen', google translation) - - "⒁": [t: "скобки, это четырнадцать"] # 0x2481 (en: 'parenthesized fourteen', google translation) - - "⒂": [t: "скобки, это пятнадцать"] # 0x2482 (en: 'parenthesized fifteen', google translation) - - "⒃": [t: "круженные скобки, это шестнадцать"] # 0x2483 (en: 'parenthesized sixteen', google translation) - - "⒄": [t: "кламок, это семнадцать"] # 0x2484 (en: 'parenthesized seventeen', google translation) - - "⒅": [t: "скобки, это атин"] # 0x2485 (en: 'parenthesized eighteen', google translation) - - "⒆": [t: "кламок, это девятнадцать"] # 0x2486 (en: 'parenthesized nineteen', google translation) - - "⒇": [t: "скобки, это двадцать"] # 0x2487 (en: 'parenthesized twenty', google translation) - - "⒈-⒐": # 0x2488 - 0x2491 - - spell: "translate('.', '⒈⒉⒊⒋⒌⒍⒎⒏⒐', '123456789')" - - t: "с периодом" # (en: 'with period', google translation) - - "⒑": [t: "десять с периодом"] # 0x2491 (en: 'ten with period', google translation) - - "⒒": [t: "одиннадцать с периодом"] # 0x2492 (en: 'eleven with period', google translation) - - "⒓": [t: "двенадцать с периодом"] # 0x2493 (en: 'twelve with period', google translation) - - "⒔": [t: "тринадцать с периодом"] # 0x2494 (en: 'thirteen with period', google translation) - - "⒕": [t: "четырнадцать с периодом"] # 0x2495 (en: 'fourteen with period', google translation) - - "⒖": [t: "пятнадцать с периодом"] # 0x2496 (en: 'fifteen with period', google translation) - - "⒗": [t: "шестнадцать с периодом"] # 0x2497 (en: 'sixteen with period', google translation) - - "⒘": [t: "семнадцать с периодом"] # 0x2498 (en: 'seventeen with period', google translation) - - "⒙": [t: "с периодом"] # 0x2499 (en: 'eighteen with period', google translation) - - "⒚": [t: "девятнадцать с периодом"] # 0x249a (en: 'nineteen with period', google translation) - - "⒛": [t: "двадцать с периодом"] # 0x249b (en: 'twenty with period', google translation) - - "⒜-⒵": # 0x249c - 0x24b5 - - t: "скобки" # (en: 'parenthesized', google translation) - - spell: "translate('.', '⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵', 'abcdefghijklmnopqrstuvwxyz')" - - - "Ⓐ-ⓩ": # 0x24b6 - 0x24cf - - t: "кружит" # (en: 'circled', google translation) - - spell: "translate('.', 'ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "ⓐ-ⓩ": # 0x24d0 - 0x24e9 - - t: "кружит" # (en: 'circled', google translation) - - spell: "translate('.', 'ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ', 'abcdefghijklmnopqrstuvwxyz')" - - "⓪": [t: "обведено ноль"] # 0x24ea (en: 'circled zero', google translation) - - "⓫": [t: "черный кружок одиннадцать"] # 0x24eb (en: 'black circled eleven', google translation) - - "⓬": [t: "черный кружок двенадцать"] # 0x24ec (en: 'black circled twelve', google translation) - - "⓭": [t: "черный кружит тринадцать"] # 0x24ed (en: 'black circled thirteen', google translation) - - "⓮": [t: "черный кружит четырнадцать"] # 0x24ee (en: 'black circled fourteen', google translation) - - "⓯": [t: "черный кружит пятнадцать"] # 0x24ef (en: 'black circled fifteen', google translation) - - "⓰": [t: "черный кружит шестнадцать"] # 0x24f0 (en: 'black circled sixteen', google translation) - - "⓱": [t: "черный кружок семнадцать"] # 0x24f1 (en: 'black circled seventeen', google translation) - - "⓲": [t: "черный кружит атин"] # 0x24f2 (en: 'black circled eighteen', google translation) - - "⓳": [t: "черный кружок девятнадцать"] # 0x24f3 (en: 'black circled nineteen', google translation) - - "⓴": [t: "черный кружит двадцать"] # 0x24f4 (en: 'black circled twenty', google translation) - - "⓵-⓽": # 0x24f5 - 0x24fe - - t: "двойной обведенный" # (en: 'double circled', google translation) - - spell: "translate('.', '⓵⓶⓷⓸⓹⓺⓻⓼⓽', '123456789')" - - "⓾": [t: "двойной обведка десять"] # 0x24fe (en: 'double circled ten', google translation) - - "⓿": [t: "черный кружок ноль"] # 0x24ff (en: 'black circled zero', google translation) - - "■": [t: "черный квадрат"] # 0x25a0 (en: 'black square', google translation) - - "□": [t: "белый квадрат"] # 0x25a1 (en: 'white square', google translation) - - "▢": [t: "белый квадрат с округлыми углами"] # 0x25a2 (en: 'white square with rounded corners', google translation) - - "▣": [t: "белый квадрат, содержащий маленький черный квадрат"] # 0x25a3 (en: 'white square containing small black square', google translation) - - "▤": [t: "квадрат с горизонтальной заполнением"] # 0x25a4 (en: 'square with horizontal fill', google translation) - - "▥": [t: "квадрат с вертикальной заполнением"] # 0x25a5 (en: 'square with vertical fill', google translation) - - "▦": [t: "квадрат с ортогональной заполнением crosshatch"] # 0x25a6 (en: 'square with orthogonal crosshatch fill', google translation) - - "▧": [t: "квадрат с верхним левым к нижним правым заполнением"] # 0x25a7 (en: 'square with upper left to lower right fill', google translation) - - "▨": [t: "квадрат с верхним правом к нижней левой заполнению"] # 0x25a8 (en: 'square with upper right to lower left fill', google translation) - - "▩": [t: "квадрат с диагональной заполнением crosshatch"] # 0x25a9 (en: 'square with diagonal crosshatch fill', google translation) - - "▪": [t: "черный маленький квадрат"] # 0x25aa (en: 'black small square', google translation) - - "▫": [t: "белый маленький квадрат"] # 0x25ab (en: 'white small square', google translation) - - "▬": [t: "черный прямоугольник"] # 0x25ac (en: 'black rectangle', google translation) - - "▭": [t: "белый прямоугольник"] # 0x25ad (en: 'white rectangle', google translation) - - "▮": [t: "черный вертикальный прямоугольник"] # 0x25ae (en: 'black vertical rectangle', google translation) - - "▯": [t: "белый вертикальный прямоугольник"] # 0x25af (en: 'white vertical rectangle', google translation) - - "▰": [t: "черный параллелограмм"] # 0x25b0 (en: 'black parallelogram', google translation) - - "▱": [t: "белый параллелограмм"] # 0x25b1 (en: 'white parallelogram', google translation) - - "▲": [t: "черный, указывающий треугольник"] # 0x25b2 (en: 'black up pointing triangle', google translation) - - "△": [t: "треугольник"] # 0x25b3 (en: 'white up pointing triangle') - - "▴": [t: "черный, указывая маленький треугольник"] # 0x25b4 (en: 'black up pointing small triangle', google translation) - - "▵": [t: "белый, указывая маленький треугольник"] # 0x25b5 (en: 'white up pointing small triangle', google translation) - - "▶": [t: "черный правый треугольник"] # 0x25b6 (en: 'black right pointing triangle', google translation) - - "▷": [t: "белый правый треугольник"] # 0x25b7 (en: 'white right pointing triangle', google translation) - - "▸": [t: "черный правый указывает на маленький треугольник"] # 0x25b8 (en: 'black right pointing small triangle', google translation) - - "▹": [t: "белый правый указывает на маленький треугольник"] # 0x25b9 (en: 'white right pointing small triangle', google translation) - - "►": [t: "черный правый указатель"] # 0x25ba (en: 'black right pointing pointer', google translation) - - "▻": [t: "белый указатель правого указателя"] # 0x25bb (en: 'white right pointing pointer', google translation) - - "▼": [t: "черный вниз по направлению треугольника"] # 0x25bc (en: 'black down pointing triangle', google translation) - - "▽": [t: "белый вниз по направлению треугольника"] # 0x25bd (en: 'white down pointing triangle', google translation) - - "▾": [t: "черный, указывая маленький треугольник"] # 0x25be (en: 'black down pointing small triangle', google translation) - - "▿": [t: "белый вниз, указывая маленький треугольник"] # 0x25bf (en: 'white down pointing small triangle', google translation) - - "◀": [t: "черный левый треугольник"] # 0x25c0 (en: 'black left pointing triangle', google translation) - - "◁": [t: "белый левый треугольник"] # 0x25c1 (en: 'white left pointing triangle', google translation) - - "◂": [t: "черный влево указывает на маленький треугольник"] # 0x25c2 (en: 'black left pointing small triangle', google translation) - - "◃": [t: "белый влево указывает на маленький треугольник"] # 0x25c3 (en: 'white left pointing small triangle', google translation) - - "◄": [t: "черный левый указатель"] # 0x25c4 (en: 'black left pointing pointer', google translation) - - "◅": [t: "белый влево указатель указатель"] # 0x25c5 (en: 'white left pointing pointer', google translation) - - "◆": [t: "черный бриллиант"] # 0x25c6 (en: 'black diamond', google translation) - - "◇": [t: "белый бриллиант"] # 0x25c7 (en: 'white diamond', google translation) - - "◈": [t: "белый бриллиант, содержащий черный маленький бриллиант"] # 0x25c8 (en: 'white diamond containing black small diamond', google translation) - - "◉": [t: "рыбей"] # 0x25c9 (en: 'fisheye', google translation) - - "◊": [t: "лозонг"] # 0x25ca (en: 'lozenge', google translation) - - "○": [t: "белый круг"] # 0x25cb (en: 'white circle', google translation) - - "◌": [t: "пунктирный круг"] # 0x25cc (en: 'dotted circle', google translation) - - "◍": [t: "круг с вертикальной заполнением"] # 0x25cd (en: 'circle with vertical fill', google translation) - - "◎": [t: "bullseye"] # 0x25ce (google translation) - - "●": [t: "черный круг"] # 0x25cf (en: 'black circle', google translation) - - "◐": [t: "круг с левой половиной черной"] # 0x25d0 (en: 'circle with left half black', google translation) - - "◑": [t: "круг с правой половиной черной"] # 0x25d1 (en: 'circle with right half black', google translation) - - "◒": [t: "круг с нижней половиной черной"] # 0x25d2 (en: 'circle with lower half black', google translation) - - "◓": [t: "круг с верхней половиной черной"] # 0x25d3 (en: 'circle with upper half black', google translation) - - "◔": [t: "круг с верхним правым квадрантом черным"] # 0x25d4 (en: 'circle with upper right quadrant black', google translation) - - "◕": [t: "круг со всеми, кроме верхнего левого квадранта черного"] # 0x25d5 (en: 'circle with all but upper left quadrant black', google translation) - - "◖": [t: "оставил половину черного круга"] # 0x25d6 (en: 'left half black circle', google translation) - - "◗": [t: "правый половина черного круга"] # 0x25d7 (en: 'right half black circle', google translation) - - "◘": [t: "обратная пуля"] # 0x25d8 (en: 'inverse bullet', google translation) - - "◙": [t: "обратный белый круг"] # 0x25d9 (en: 'inverse white circle', google translation) - - "◚": [t: "верхняя половина обратного белого круга"] # 0x25da (en: 'upper half inverse white circle', google translation) - - "◛": [t: "нижняя половина обратного белого круга"] # 0x25db (en: 'lower half inverse white circle', google translation) - - "◜": [t: "верхняя левая квадрантная круговая дуга"] # 0x25dc (en: 'upper left quadrant circular arc', google translation) - - "◝": [t: "верхний правый квадрант круглая дуга"] # 0x25dd (en: 'upper right quadrant circular arc', google translation) - - "◞": [t: "круглая дуга нижнего правого квадранта"] # 0x25de (en: 'lower right quadrant circular arc', google translation) - - "◟": [t: "круглая дуга нижнего левого квадранта"] # 0x25df (en: 'lower left quadrant circular arc', google translation) - - "◠": [t: "верхняя половина круга"] # 0x25e0 (en: 'upper half circle', google translation) - - "◡": [t: "нижний половинный круг"] # 0x25e1 (en: 'lower half circle', google translation) - - "◢": [t: "черный треугольник в нижнем правом"] # 0x25e2 (en: 'black lower right triangle', google translation) - - "◣": [t: "черный нижний левый треугольник"] # 0x25e3 (en: 'black lower left triangle', google translation) - - "◤": [t: "черный верхний левый треугольник"] # 0x25e4 (en: 'black upper left triangle', google translation) - - "◥": [t: "черный верхний правый треугольник"] # 0x25e5 (en: 'black upper right triangle', google translation) - - "◦": [t: "композиция"] # 0x25e6 (en: 'composition', google translation) - - "◧": [t: "квадрат с левой половиной черной"] # 0x25e7 (en: 'square with left half black', google translation) - - "◨": [t: "квадрат с правой половиной черной"] # 0x25e8 (en: 'square with right half black', google translation) - - "◩": [t: "квадрат с верхней левой половиной черной"] # 0x25e9 (en: 'square with upper left half black', google translation) - - "◪": [t: "квадрат с правой правой половиной черной"] # 0x25ea (en: 'square with lower right half black', google translation) - - "◫": [t: "белый квадрат с пополам"] # 0x25eb (en: 'white square with bisecting line', google translation) - - "◬": [t: "белый, указывающий треугольник с точкой"] # 0x25ec (en: 'white up pointing triangle with dot', google translation) - - "◭": [t: "укажите треугольник с левой половиной черной"] # 0x25ed (en: 'up pointing triangle with left half black', google translation) - - "◮": [t: "укажите треугольник с правой половиной черной"] # 0x25ee (en: 'up pointing triangle with right half black', google translation) - - "◯": [t: "большой круг"] # 0x25ef (en: 'large circle', google translation) - - "◰": [t: "белый квадрат с верхним левым квадрантом"] # 0x25f0 (en: 'white square with upper left quadrant', google translation) - - "◱": [t: "белый квадрат с нижним левым квадрантом"] # 0x25f1 (en: 'white square with lower left quadrant', google translation) - - "◲": [t: "белый квадрат с нижним правым квадрантом"] # 0x25f2 (en: 'white square with lower right quadrant', google translation) - - "◳": [t: "белый квадрат с верхним правым квадрантом"] # 0x25f3 (en: 'white square with upper right quadrant', google translation) - - "◴": [t: "белый круг с верхним левым квадрантом"] # 0x25f4 (en: 'white circle with upper left quadrant', google translation) - - "◵": [t: "белый круг с нижним левым квадрантом"] # 0x25f5 (en: 'white circle with lower left quadrant', google translation) - - "◶": [t: "белый круг с нижним правым квадрантом"] # 0x25f6 (en: 'white circle with lower right quadrant', google translation) - - "◷": [t: "белый круг с верхним правым квадрантом"] # 0x25f7 (en: 'white circle with upper right quadrant', google translation) - - "◸": [t: "верхний левый треугольник"] # 0x25f8 (en: 'upper left triangle', google translation) - - "◹": [t: "верхний правый треугольник"] # 0x25f9 (en: 'upper right triangle', google translation) - - "◺": [t: "нижний левый треугольник"] # 0x25fa (en: 'lower left triangle', google translation) - - "◻": [t: "квадрат"] # 0x25fb (en: 'white medium square') - - "◼": [t: "черный средний квадрат"] # 0x25fc (en: 'black medium square', google translation) - - "◽": [t: "белый средний маленький квадрат"] # 0x25fd (en: 'white medium small square', google translation) - - "◾": [t: "черный средний маленький квадрат"] # 0x25fe (en: 'black medium small square', google translation) - - "◿": [t: "нижний правый треугольник"] # 0x25ff (en: 'lower right triangle', google translation) - - "★": [t: "черная звезда"] # 0x2605 (en: 'black star', google translation) - - "☆": [t: "белая звезда"] # 0x2606 (en: 'white star', google translation) - - "☉": [t: "солнце"] # 0x2609 (en: 'sun', google translation) - - "☌": [t: "соединение"] # 0x260c (en: 'conjuction', google translation) - - "☒": [t: "балла на баллов с x"] # 0x2612 (en: 'ballot box with x', google translation) - - "☽": [t: "восковая луна"] # 0x263d (en: 'waxing moon', google translation) - - "☾": [t: "убывающая луна"] # 0x263e (en: 'waning moon', google translation) - - "☿": [t: "меркурий"] # 0x263f (en: 'mercury', google translation) - - "♀": [t: "женский"] # 0x2640 (en: 'female', google translation) - - "♁": [t: "земля"] # 0x2641 (en: 'earth', google translation) - - "♂": [t: "мужской"] # 0x2642 (en: 'male', google translation) - - "♃": [t: "юпитер"] # 0x2643 (en: 'jupiter', google translation) - - "♄": [t: "сатурн"] # 0x2644 (en: 'saturn', google translation) - - "♅": [t: "уран"] # 0x2645 (en: 'uranus', google translation) - - "♆": [t: "нептун"] # 0x2646 (en: 'neptune', google translation) - - "♇": [t: "плутон"] # 0x2647 (en: 'pluto', google translation) - - "♈": [t: "овен"] # 0x2648 (en: 'aries', google translation) - - "♉": [t: "телец"] # 0x2649 (en: 'taurus', google translation) - - "♩": [t: "четверть примечания"] # 0x2669 (en: 'quarter note', google translation) - - "♭": [t: "плоский"] # 0x266d (en: 'flat', google translation) - - "♮": [t: "множество натуральных чисел"] # 0x266e (en: 'natural') - - "♯": [t: "острый"] # 0x266f (en: 'sharp', google translation) - - "♠": [t: "черная лопата костюма"] # 0x2660 (en: 'black spade suit', google translation) - - "♡": [t: "белый сердечный костюм"] # 0x2661 (en: 'white heart suit', google translation) - - "♢": [t: "белый бриллиантовый костюм"] # 0x2662 (en: 'white diamond suit', google translation) - - "♣": [t: "черный клубный костюм"] # 0x2663 (en: 'black club suit', google translation) - - "♤": [t: "белая локомочная костюм"] # 0x2664 (en: 'white spade suit', google translation) - - "♥": [t: "черный сердечный костюм"] # 0x2665 (en: 'black heart suit', google translation) - - "♦": [t: "черный бриллиантовый костюм"] # 0x2666 (en: 'black diamond suit', google translation) - - "♧": [t: "белый клубный костюм"] # 0x2667 (en: 'white club suit', google translation) - - "⚀": [t: "умереть лицо 1"] # 0x2680 (en: 'die face 1', google translation) - - "⚁": [t: "умереть лицо 2"] # 0x2681 (en: 'die face 2', google translation) - - "⚂": [t: "умереть лицо 3"] # 0x2682 (en: 'die face 3', google translation) - - "⚃": [t: "умереть лицо 4"] # 0x2683 (en: 'die face 4', google translation) - - "⚄": [t: "умереть лицо 5"] # 0x2684 (en: 'die face 5', google translation) - - "⚅": [t: "умереть лицо 6"] # 0x2685 (en: 'die face 6', google translation) - - "⚆": [t: "белый круг с точкой справа"] # 0x2686 (en: 'white circle with dot right', google translation) - - "⚇": [t: "белый круг с двумя точками"] # 0x2687 (en: 'white circle wiht two dots', google translation) - - "⚈": [t: "черный круг с точкой справа"] # 0x2688 (en: 'black circle with dot right', google translation) - - "⚉": [t: "черный круг с двумя точками"] # 0x2689 (en: 'black circle wiht two dots', google translation) - - "⚪": [t: "средний белый круг"] # 0x26aa (en: 'medium white circle', google translation) - - "⚫": [t: "средний черный круг"] # 0x26ab (en: 'medium black circle', google translation) - - "⚬": [t: "средний маленький белый круг"] # 0x26ac (en: 'medium small white circle', google translation) - - "⚲": [t: "средний"] # 0x26b2 (en: 'neuter', google translation) - - "✓": [t: "отметка"] # 0x2713 (en: 'check mark', google translation) - - "✠": [t: "мальтийский крест"] # 0x2720 (en: 'maltese cross', google translation) - - "✪": [t: "кружная белая звезда"] # 0x272a (en: 'circled white star', google translation) - - "✶": [t: "шесть пинтированной черной звезды"] # 0x2736 (en: 'six pionted black star', google translation) - - "❨": [t: "средние левые скобки - орнамент"] # 0x2768 (en: 'medium left parentheses ornament', google translation) - - "❩": [t: "средние правые скобки - орнамент"] # 0x2769 (en: 'medium right parentheses ornament', google translation) - - "❪": [t: "средняя сплюснутая левая скобка - орнамент"] # 0x276a (en: 'medium flattened left parentheses ornament', google translation) - - "❫": [t: "средняя сплющенная правая скобка орнамент"] # 0x276b (en: 'medium flattened right parentheses ornament', google translation) - - "❬": [t: "средний левый угловой скобки"] # 0x276c (en: 'medium left-pointing angle bracket ornament', google translation) - - "❭": [t: "средний правый угловой кронштейн орнамент"] # 0x276d (en: 'medium right-pointing angle bracket ornament', google translation) - - "❮": [t: "тяжелый левый угловой котировочный орнамент"] # 0x276e (en: 'heavy left-pointing angle quotation mark ornament', google translation) - - "❯": [t: "тяжелый правый угол угла для кавычки"] # 0x276f (en: 'heavy right-pointing angle quotation mark ornament', google translation) - - "❰": [t: "тяжелый левый угловой скобок украшен"] # 0x2770 (en: 'heavy left-pointing angle bracket ornament', google translation) - - "❱": [t: "тяжелый правый угловой скобок украшен"] # 0x2771 (en: 'heavy right-pointing angle bracket ornament', google translation) - - "❲": [t: "светлый левый орнамент с кронштейном черепахи"] # 0x2772 (en: 'light left tortoise shell bracket ornament', google translation) - - "❳": [t: "светлый правый черепаховый скорбящий орнамент"] # 0x2773 (en: 'light right tortoise shell bracket ornament', google translation) - - "❴": [t: "средний левый прудовый орнамент"] # 0x2774 (en: 'medium left brace ornament', google translation) - - "❵": [t: "средний правый скоба орнамент"] # 0x2775 (en: 'medium right brace ornament', google translation) - - "❶": [t: "черный кружит один"] # 0x2776 (en: 'black circled one', google translation) - - "❷": [t: "черный кружит два"] # 0x2777 (en: 'black circled two', google translation) - - "❸": [t: "черный кружит три"] # 0x2778 (en: 'black circled three', google translation) - - "❹": [t: "черный кружит четыре"] # 0x2779 (en: 'black circled four', google translation) - - "❺": [t: "черный кружит пять"] # 0x277a (en: 'black circled five', google translation) - - "❻": [t: "черный кружит шесть"] # 0x277b (en: 'black circled six', google translation) - - "❼": [t: "черный кружит семь"] # 0x277c (en: 'black circled seven', google translation) - - "❽": [t: "черный кружит в"] # 0x277d (en: 'black circled eight', google translation) - - "❾": [t: "черный кружит девять"] # 0x277e (en: 'black circled nine', google translation) - - "❿": [t: "черный кружит десять"] # 0x277f (en: 'black circled ten', google translation) - - "➀": [t: "обведенный без засечка"] # 0x2780 (en: 'circled sans serif one', google translation) - - "➁": [t: "обведено без засечка два"] # 0x2781 (en: 'circled sans serif two', google translation) - - "➂": [t: "обведено без засечка"] # 0x2782 (en: 'circled sans serif three', google translation) - - "➃": [t: "обведено без засечка четверка"] # 0x2783 (en: 'circled sans serif four', google translation) - - "➄": [t: "circled sans serif five"] # 0x2784 (google translation) - - "➅": [t: "обведено без засечка шесть"] # 0x2785 (en: 'circled sans serif six', google translation) - - "➆": [t: "обведено без засечка семь"] # 0x2786 (en: 'circled sans serif seven', google translation) - - "➇": [t: "обведено без засечка в"] # 0x2787 (en: 'circled sans serif eight', google translation) - - "➈": [t: "обведено без засечка девять"] # 0x2788 (en: 'circled sans serif nine', google translation) - - "➉": [t: "обведено без засечка"] # 0x2789 (en: 'circled sans serif ten', google translation) - - "➊": [t: "черный кружок без засечка"] # 0x278a (en: 'black circled sans serif one', google translation) - - "➋": [t: "черный кружок без засечка два"] # 0x278b (en: 'black circled sans serif two', google translation) - - "➌": [t: "черный кружок без засечка три"] # 0x278c (en: 'black circled sans serif three', google translation) - - "➍": [t: "черный кружок без засечка четыре"] # 0x278d (en: 'black circled sans serif four', google translation) - - "➎": [t: "черный кружок без засечка пять"] # 0x278e (en: 'black circled sans serif five', google translation) - - "➏": [t: "черный кружок без засеяния шесть"] # 0x278f (en: 'black circled sans serif six', google translation) - - "➐": [t: "черный кружок без засеяния"] # 0x2790 (en: 'black circled sans serif seven', google translation) - - "➑": [t: "черный кружок без засечка в"] # 0x2791 (en: 'black circled sans serif eight', google translation) - - "➒": [t: "черный кружок без засеяния девять"] # 0x2792 (en: 'black circled sans serif nine', google translation) - - "➓": [t: "черный кружок без засечка"] # 0x2793 (en: 'black circled sans serif ten', google translation) - - "➔": [t: "тяжелая широкая правая стрела"] # 0x2794 (en: 'heavy wide-headed rightwards arrow', google translation) - - "➕": [t: "тяжелый плюс знак"] # 0x2795 (en: 'heavy plus sign', google translation) - - "➖": [t: "тяжелый минус знак"] # 0x2796 (en: 'heavy minus sign', google translation) - - "➗": [t: "знак тяжелой дивизии"] # 0x2797 (en: 'heavy division sign', google translation) - - "➘": [t: "тяжелая юго -восточная стрела"] # 0x2798 (en: 'heavy south east arrow', google translation) - - "➙": [t: "тяжелая справа стрелы"] # 0x2799 (en: 'heavy rightwards arrow', google translation) - - "➚": [t: "тяжелая северо -восточная стрела"] # 0x279a (en: 'heavy north east arrow', google translation) - - "➛": [t: "стрелка вправо"] # 0x279b (en: 'drafting point rightwards arrow', google translation) - - "➜": [t: "тяжелая круглая стрелка вправо"] # 0x279c (en: 'heavy round-tipped rightwards arrow', google translation) - - "➝": [t: "треугольник с головой справа"] # 0x279d (en: 'triangle-headed rightwards arrow', google translation) - - "➞": [t: "тяжелый треугольный голод справа от стрелы"] # 0x279e (en: 'heavy triangle-headed rightwards arrow', google translation) - - "➟": [t: "убитый треугольник с головой справа"] # 0x279f (en: 'dashed triangle-headed rightwards arrow', google translation) - - "➠": [t: "тяжелый пунктирный треугольник с головой справа"] # 0x27a0 (en: 'heavy dashed triangle-headed rightwards arrow', google translation) - - "➡": [t: "черная справа стрелы"] # 0x27a1 (en: 'black rightwards arrow', google translation) - - "➢": [t: "три d вершина освещены стрелкой вправо"] # 0x27a2 (en: 'three d top lighted rightwards arrow', google translation) - - "➣": [t: "три д дно освещены вправо стрел"] # 0x27a3 (en: 'three d bottom lighted rightwards arrow', google translation) - - "➤": [t: "черный вправо стрел"] # 0x27a4 (en: 'black rightwards arrowhead', google translation) - - "➥": [t: "тяжелая черная изогнутая вниз и вправо стрел"] # 0x27a5 (en: 'heavy black curved downwards and rightwards arrow', google translation) - - "➦": [t: "тяжелая черная изогнутая стрелка вверх и вправо"] # 0x27a6 (en: 'heavy black curved upwards and rightwards arrow', google translation) - - "➧": [t: "приседание черное вправо стрел"] # 0x27a7 (en: 'squat black rightwards arrow', google translation) - - "➨": [t: "тяжелая вогнутая черная черная стрелка"] # 0x27a8 (en: 'heavy concave-pointed black rightwards arrow', google translation) - - "➩": [t: "стрелка вправо с правой потертой вправо"] # 0x27a9 (en: 'right-shaded white rightwards arrow', google translation) - - "➪": [t: "стрелка вправо налево"] # 0x27aa (en: 'left-shaded white rightwards arrow', google translation) - - "➫": [t: "стрелка с затенением с задней частью"] # 0x27ab (en: 'back-tilted shadowed white rightwards arrow', google translation) - - "➬": [t: "стрелка спереди с передним наклоном"] # 0x27ac (en: 'front-tilted shadowed white rightwards arrow', google translation) - - "➭": [t: "тяжелая белая в нижней части белой стрелы вправо"] # 0x27ad (en: 'heavy lower right-shadowed white rightwards arrow', google translation) - - "➮": [t: "тяжелая верхняя правая белая стрелка вправо"] # 0x27ae (en: 'heavy upper right-shadowed white rightwards arrow', google translation) - - "➯": [t: "стрелка с надписью с надписью с надписью"] # 0x27af (en: 'notched lower right-shadowed white rightwards arrow', google translation) - - "➱": [t: "стрелка с надписью с надписью с надписью"] # 0x27b1 (en: 'notched upper right-shadowed white rightwards arrow', google translation) - - "➲": [t: "кругл тяжелый белый вправо стрел"] # 0x27b2 (en: 'circled heavy white rightwards arrow', google translation) - - "➳": [t: "белоснежка вправо стрел"] # 0x27b3 (en: 'white-feathered rightwards arrow', google translation) - - "➴": [t: "чернокожая юго-восточная стрела"] # 0x27b4 (en: 'black-feathered south east arrow', google translation) - - "➵": [t: "чернокожие вправо стрел"] # 0x27b5 (en: 'black-feathered rightwards arrow', google translation) - - "➶": [t: "чернокожая северо-восточная стрела"] # 0x27b6 (en: 'black-feathered north east arrow', google translation) - - "➷": [t: "тяжелая чернокожая юго-восточная стрела"] # 0x27b7 (en: 'heavy black-feathered south east arrow', google translation) - - "➸": [t: "тяжелая чернокожая стрелка вправо"] # 0x27b8 (en: 'heavy black-feathered rightwards arrow', google translation) - - "➹": [t: "тяжелая чернокожая северо-восточная стрела"] # 0x27b9 (en: 'heavy black-feathered north east arrow', google translation) - - "➺": [t: "teradrop-barbed вправо стрел"] # 0x27ba (en: 'teradrop-barbed rightwards arrow', google translation) - - "➻": [t: "тяжелая слезоточивая капля стрелка вправо"] # 0x27bb (en: 'heavy teardrop-shanked rightwards arrow', google translation) - - "➼": [t: "клин-хвост вправо стрел"] # 0x27bc (en: 'wedge-tailed rightwards arrow', google translation) - - "➽": [t: "тяжелая клинохволока вправо стрел"] # 0x27bd (en: 'heavy wedge-tailed rightwards arrow', google translation) - - "➾": [t: "открытая стрелка вправо"] # 0x27be (en: 'open-outlined rightwards arrow', google translation) - - "⟀": [t: "трехмерный угол"] # 0x27c0 (en: 'three dimensional angle', google translation) - - "⟁": [t: "белый треугольник, содержащий маленький белый треугольник"] # 0x27c1 (en: 'white triangle containing small white triangle', google translation) - - "⟂": # 0x27c2 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "перпендикулярно" # (en: 'perpendicular to', google translation) - - "⟃": # 0x27c3 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "открытая подмножество" # (en: 'an open subset of', google translation) - - "⟄": # 0x27c4 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "открытый суперсет" # (en: 'an open superset of', google translation) - - "⟅": [t: "левый s-образный мешок разделитель"] # 0x27c5 (en: 'left s-shaped bag delimiter', google translation) - - "⟆": [t: "правая s-образная сумка разделителя"] # 0x27c6 (en: 'right s-shaped bag delimiter', google translation) - - "⟇": [t: "или с точкой внутри"] # 0x27c7 (en: 'or with dot inside', google translation) - - "⟈": [t: "обратный солидус предшествует подмножеству"] # 0x27c8 (en: 'reverse solidus preceding subset', google translation) - - "⟉": [t: "суперсет предшествует солидному"] # 0x27c9 (en: 'superset preceding solidus', google translation) - - "⟊": [t: "вертикальная планка с горизонтальным ходом"] # 0x27ca (en: 'vertical bar with horizontal stroke', google translation) - - "⟋": [t: "математический восходящий диагональ"] # 0x27cb (en: 'mathematical rising diagonal', google translation) - - "⟌": [t: "длинное подразделение"] # 0x27cc (en: 'long division', google translation) - - "⟍": [t: "математический падающий диагональ"] # 0x27cd (en: 'mathematical falling diagonal', google translation) - - "⟎": [t: "квадратный логический и"] # 0x27ce (en: 'squared logical and', google translation) - - "⟏": [t: "квадратный логический или"] # 0x27cf (en: 'squared logical or', google translation) - - "⟐": [t: "белый бриллиант с центрированной точкой"] # 0x27d0 (en: 'white diamond with centered dot', google translation) - - "⟑": [t: "и с точкой"] # 0x27d1 (en: 'and with dot', google translation) - - "⟒": [t: "элемент открытия вверх"] # 0x27d2 (en: 'element of opening upwards', google translation) - - "⟓": [t: "нижний правый угол с точкой"] # 0x27d3 (en: 'lower right corner with dot', google translation) - - "⟔": [t: "верхний левый угол с точкой"] # 0x27d4 (en: 'upper left corner with dot', google translation) - - "⟕": [t: "оставлено внешним соединением"] # 0x27d5 (en: 'left outer join', google translation) - - "⟖": [t: "прямое внешнее соединение"] # 0x27d6 (en: 'right outer join', google translation) - - "⟗": [t: "полное внешнее соединение"] # 0x27d7 (en: 'full outer join', google translation) - - "⟘": [t: "большой притяжение"] # 0x27d8 (en: 'large up tack', google translation) - - "⟙": [t: "большой вниз"] # 0x27d9 (en: 'large down tack', google translation) - - "⟚": [t: "левый и правый двойной турникет"] # 0x27da (en: 'left and right double turnstile', google translation) - - "⟛": [t: "левый и правый притяжение"] # 0x27db (en: 'left and right tack', google translation) - - "⟜": [t: "оставил мультимап"] # 0x27dc (en: 'left multimap', google translation) - - "⟝": [t: "длинная правая притяжение"] # 0x27dd (en: 'long right tack', google translation) - - "⟞": [t: "долгое левое"] # 0x27de (en: 'long left tack', google translation) - - "⟟": [t: "вверх по кругу выше"] # 0x27df (en: 'up tack with circle above', google translation) - - "⟠": [t: "lozenge, разделенный горизонтальным правлением"] # 0x27e0 (en: 'lozenge divided by horizontal rule', google translation) - - "⟡": [t: "белый вогнутый бриллиант"] # 0x27e1 (en: 'white concave sided diamond', google translation) - - "⟢": [t: "белый вогнутый бриллиант с левым тиком"] # 0x27e2 (en: 'white concave sided diamond with leftwards tick', google translation) - - "⟣": [t: "белый вогнутый бриллиант с правой клеткой"] # 0x27e3 (en: 'white concave sided diamond with rightwards tick', google translation) - - "⟤": [t: "белый квадрат с левой частью"] # 0x27e4 (en: 'white square with leftwards tick', google translation) - - "⟥": [t: "белый квадрат с правой клеткой"] # 0x27e5 (en: 'white square with rightwards tick', google translation) - - "⟦": [t: "левый белый квадратный кронштейн"] # 0x27e6 (en: 'left white square bracket', google translation) - - "⟧": [t: "правый белый квадратный кронштейн"] # 0x27e7 (en: 'right white square bracket', google translation) - - "⟨": [t: "левый угловой кронштейн"] # 0x27e8 (en: 'left angle bracket', google translation) - - "⟩": [t: "правый угловой кронштейн"] # 0x27e9 (en: 'right angle bracket', google translation) - - "⟪": [t: "левый двухугольный кронштейн"] # 0x27ea (en: 'left double angle bracket', google translation) - - "⟫": [t: "правый двойной угловой кронштейн"] # 0x27eb (en: 'right double angle bracket', google translation) - - "⟬": [t: "оставил белую черепаховую скорлупу"] # 0x27ec (en: 'left white tortoise shell bracket', google translation) - - "⟭": [t: "правый белый кронштейн с черепахой"] # 0x27ed (en: 'right white tortoise shell bracket', google translation) - - "⟮": [t: "осталось сплющенной скобки"] # 0x27ee (en: 'left flattened parenthesis', google translation) - - "⟯": [t: "правый сплющенной скобок"] # 0x27ef (en: 'right flattened parenthesis', google translation) - - "⟰": [t: "вверх четырехкратной стрелы"] # 0x27f0 (en: 'upwards quadruple arrow', google translation) - - "⟱": [t: "вниз по четыре раза стрелка"] # 0x27f1 (en: 'downwards quadruple arrow', google translation) - - "⟲": [t: "антиколевая стрельба по обрыванию круга"] # 0x27f2 (en: 'anticlockwise gapped circle arrow', google translation) - - "⟳": [t: "по часовой стрелке защелкивая стрелка"] # 0x27f3 (en: 'clockwise gapped circle arrow', google translation) - - "⟴": [t: "правая стрелка с circled plus"] # 0x27f4 (en: 'right arrow with circled plus', google translation) - - "⟵": [t: "длинная левая стрела"] # 0x27f5 (en: 'long leftwards arrow', google translation) - - "⟶": [t: "длинная справа стрелы"] # 0x27f6 (en: 'long rightwards arrow', google translation) - - "⟷": [t: "длинная левая стрелка вправо"] # 0x27f7 (en: 'long left right arrow', google translation) - - "⟸": [t: "длинная слева двойная стрела"] # 0x27f8 (en: 'long leftwards double arrow', google translation) - - "⟹": [t: "длинная направо двойная стрелка"] # 0x27f9 (en: 'long rightwards double arrow', google translation) - - "⟺": [t: "длинная левая правая двойная стрелка"] # 0x27fa (en: 'long left right double arrow', google translation) - - "⟻": [t: "длинная стрелка влево из бара"] # 0x27fb (en: 'long leftwards arrow from bar', google translation) - - "⟼": [t: "длинная стрелка вправо из бара"] # 0x27fc (en: 'long rightwards arrow from bar', google translation) - - "⟽": [t: "длинная слева двойная стрелка из бара"] # 0x27fd (en: 'long leftwards double arrow from bar', google translation) - - "⟾": [t: "длинная направо с двойной стрелкой из бара"] # 0x27fe (en: 'long rightwards double arrow from bar', google translation) - - "⟿": [t: "длинные направо suggle arrow"] # 0x27ff (en: 'long rightwards squiggle arrow', google translation) - - "⤀": [t: "пряга две головные стрелки с вертикальным ходом"] # 0x2900 (en: 'rightwards two headed arrow with vertical stroke', google translation) - - "⤁": [t: "права два головая стрелка с двойным вертикальным ходом"] # 0x2901 (en: 'rightwards two headed arrow with double vertical stroke', google translation) - - "⤂": [t: "левая двойная стрелка с вертикальным ходом"] # 0x2902 (en: 'leftwards double arrow with vertical stroke', google translation) - - "⤃": [t: "права двойная стрелка с вертикальным ходом"] # 0x2903 (en: 'rightwards double arrow with vertical stroke', google translation) - - "⤄": [t: "левая правая двойная стрелка с вертикальным ходом"] # 0x2904 (en: 'left right double arrow with vertical stroke', google translation) - - "⤅": [t: "прямо сразу же две головой стрелы из бара"] # 0x2905 (en: 'rightwards two headed arrow from bar', google translation) - - "⤆": [t: "слева двойная стрелка из бара"] # 0x2906 (en: 'leftwards double arrow from bar', google translation) - - "⤇": [t: "права двойная стрелка из бара"] # 0x2907 (en: 'rightwards double arrow from bar', google translation) - - "⤈": [t: "стрелка вниз с горизонтальным ходом"] # 0x2908 (en: 'downwards arrow with horizontal stroke', google translation) - - "⤉": [t: "стрелка вверх с горизонтальным ходом"] # 0x2909 (en: 'upwards arrow with horizontal stroke', google translation) - - "⤊": [t: "вверх тройной стрелкой"] # 0x290a (en: 'upwards triple arrow', google translation) - - "⤋": [t: "вниз по тройной стрелке"] # 0x290b (en: 'downwards triple arrow', google translation) - - "⤌": [t: "слева двойная стрелка"] # 0x290c (en: 'leftwards double dash arrow', google translation) - - "⤍": [t: "право двойная стрелка"] # 0x290d (en: 'rightwards double dash arrow', google translation) - - "⤎": [t: "левая тройная стрелка"] # 0x290e (en: 'leftwards triple dash arrow', google translation) - - "⤏": [t: "права тредная дапа"] # 0x290f (en: 'rightwards triple dash arrow', google translation) - - "⤐": [t: "прямо два голова triple dash arrow"] # 0x2910 (en: 'rightwards two headed triple dash arrow', google translation) - - "⤑": [t: "стрелка вправо с пунктирным стеблем"] # 0x2911 (en: 'rightwards arrow with dotted stem', google translation) - - "⤒": [t: "вверх стрелой в бар"] # 0x2912 (en: 'upwards arrow to bar', google translation) - - "⤓": [t: "вниз стрелы в бар"] # 0x2913 (en: 'downwards arrow to bar', google translation) - - "⤔": [t: "стрелка вправо с хвостом и вертикальным ходом"] # 0x2914 (en: 'rightwards arrow with tail and vertical stroke', google translation) - - "⤕": [t: "стрелка вправо с хвостом и двойным вертикальным ходом"] # 0x2915 (en: 'rightwards arrow with tail and double vertical stroke', google translation) - - "⤖": [t: "права два головая стрела с хвостом"] # 0x2916 (en: 'rightwards two headed arrow with tail', google translation) - - "⤗": [t: "пряга две головные стрелки с хвостом с вертикальным ходом"] # 0x2917 (en: 'rightwards two headed arrow with tail with vertical stroke', google translation) - - "⤘": [t: "пряга две головные стрелки с хвостом с двойным вертикальным ходом"] # 0x2918 (en: 'rightwards two headed arrow with tail with double vertical stroke', google translation) - - "⤙": [t: "левый хвост стрелы"] # 0x2919 (en: 'leftwards arrow tail', google translation) - - "⤚": [t: "права стрелка хвост"] # 0x291a (en: 'rightwards arrow tail', google translation) - - "⤛": [t: "левый двойной стрелок хвост"] # 0x291b (en: 'leftwards double arrow tail', google translation) - - "⤜": [t: "права двойной стрелок хвост"] # 0x291c (en: 'rightwards double arrow tail', google translation) - - "⤝": [t: "стрелка слева до заполненного алмаза"] # 0x291d (en: 'leftwards arrow to filled diamond', google translation) - - "⤞": [t: "стрелка вправо до наполненного бриллианта"] # 0x291e (en: 'rightwards arrow to filled diamond', google translation) - - "⤟": [t: "стрелка влево от бара до наполненного алмаза"] # 0x291f (en: 'leftwards arrow from bar to filled diamond', google translation) - - "⤠": [t: "стрелка вправо от бара до наполненного алмаза"] # 0x2920 (en: 'rightwards arrow from bar to filled diamond', google translation) - - "⤡": [t: "северо -западный и юго -восточный стрелка"] # 0x2921 (en: 'north west and south east arrow', google translation) - - "⤢": [t: "северо -восток и юго -западный стрела"] # 0x2922 (en: 'north east and south west arrow', google translation) - - "⤣": [t: "стрелка северо -запада с крючком"] # 0x2923 (en: 'north west arrow with hook', google translation) - - "⤤": [t: "стрелка на северо -восток с крючком"] # 0x2924 (en: 'north east arrow with hook', google translation) - - "⤥": [t: "юго -восточная стрела с крючком"] # 0x2925 (en: 'south east arrow with hook', google translation) - - "⤦": [t: "юго -западная стрела с крючком"] # 0x2926 (en: 'south west arrow with hook', google translation) - - "⤧": [t: "северо -западный стрела и северо -восточный стрела"] # 0x2927 (en: 'north west arrow and north east arrow', google translation) - - "⤨": [t: "северо -восточный стрела и юго -восточная стрела"] # 0x2928 (en: 'north east arrow and south east arrow', google translation) - - "⤩": [t: "юго -восточная стрела и юго -западный стрела"] # 0x2929 (en: 'south east arrow and south west arrow', google translation) - - "⤪": [t: "юго -западная стрела и северо -западный стрелка"] # 0x292a (en: 'south west arrow and north west arrow', google translation) - - "⤫": [t: "повышение диагонального пересечения падающих диагональ"] # 0x292b (en: 'rising diagonal crossing falling diagonal', google translation) - - "⤬": [t: "падение диагонального пересечения, поднимающееся диагональ"] # 0x292c (en: 'falling diagonal crossing rising diagonal', google translation) - - "⤭": [t: "юго -восточная стрелка, пересекающая северо -восточную стрелу"] # 0x292d (en: 'south east arrow crossing north east arrow', google translation) - - "⤮": [t: "северо -восток стрелы, пересекающая юго -восточную стрелу"] # 0x292e (en: 'north east arrow crossing south east arrow', google translation) - - "⤯": [t: "падение диагонального пересечения северо -востока стрелы"] # 0x292f (en: 'falling diagonal crossing north east arrow', google translation) - - "⤰": [t: "повышение диагонального пересечения юго -восточной стрелы"] # 0x2930 (en: 'rising diagonal crossing south east arrow', google translation) - - "⤱": [t: "северо -восточный стрелка пересекает северо -западный стрел"] # 0x2931 (en: 'north east arrow crossing north west arrow', google translation) - - "⤲": [t: "северо -западный стрела, пересекающая северо -восток стрелы"] # 0x2932 (en: 'north west arrow crossing north east arrow', google translation) - - "⤳": [t: "волна стрелка, указывающая прямо прямо вправо"] # 0x2933 (en: 'wave arrow pointing directly right', google translation) - - "⤴": [t: "стрелка указывает вправо, затем скручивается вверх"] # 0x2934 (en: 'arrow pointing rightwards then curving upwards', google translation) - - "⤵": [t: "стрелка указывает вправо, затем изогнулась вниз"] # 0x2935 (en: 'arrow pointing rightwards then curving downwards', google translation) - - "⤶": [t: "стрелка указывает вниз, а затем изогнут влево"] # 0x2936 (en: 'arrow pointing downwards then curving leftwards', google translation) - - "⤷": [t: "стрелка указывает вниз, а затем изогнут вправо"] # 0x2937 (en: 'arrow pointing downwards then curving rightwards', google translation) - - "⤸": [t: "стрелка правой боковой дуги по часовой стрелке"] # 0x2938 (en: 'right side arc clockwise arrow', google translation) - - "⤹": [t: "стрелка левой стороны против часовой стрелки"] # 0x2939 (en: 'left side arc anticlockwise arrow', google translation) - - "⤺": [t: "верхняя дуга против часовой стрелы"] # 0x293a (en: 'top arc anticlockwise arrow', google translation) - - "⤻": [t: "нижняя дуга против часовой стрелки"] # 0x293b (en: 'bottom arc anticlockwise arrow', google translation) - - "⤼": [t: "верхняя дуговая стрелка с минус"] # 0x293c (en: 'top arc clockwise arrow with minus', google translation) - - "⤽": [t: "верхняя дуга против часовой стрелки с плюсом"] # 0x293d (en: 'top arc anticlockwise arrow with plus', google translation) - - "⤾": [t: "нижняя правая полукруглая стрелка по часовой стрелке"] # 0x293e (en: 'lower right semicircular clockwise arrow', google translation) - - "⤿": [t: "левый левый полукруглый стрелка против часовой стрелки"] # 0x293f (en: 'lower left semicircular anticlockwise arrow', google translation) - - "⥀": [t: "стрелка против часовой стрелки"] # 0x2940 (en: 'anticlockwise closed circle arrow', google translation) - - "⥁": [t: "по часовой стрелке закрытый круг стрелы"] # 0x2941 (en: 'clockwise closed circle arrow', google translation) - - "⥂": [t: "стрелка вправо над короткой левой стрелкой"] # 0x2942 (en: 'rightwards arrow above short leftwards arrow', google translation) - - "⥃": [t: "стрелка влево над короткой стрелой вправо"] # 0x2943 (en: 'leftwards arrow above short rightwards arrow', google translation) - - "⥄": [t: "короткая стрелка вправо над стрельбой влево"] # 0x2944 (en: 'short rightwards arrow above leftwards arrow', google translation) - - "⥅": [t: "стрелка вправо с плюсом ниже"] # 0x2945 (en: 'rightwards arrow with plus below', google translation) - - "⥆": [t: "стрелка влево с плюсом ниже"] # 0x2946 (en: 'leftwards arrow with plus below', google translation) - - "⥇": [t: "стрелка вправо через x"] # 0x2947 (en: 'rightwards arrow through x', google translation) - - "⥈": [t: "левая стрелка справа через круг"] # 0x2948 (en: 'left right arrow through circle', google translation) - - "⥉": [t: "вверху две головы стрелы из круга"] # 0x2949 (en: 'upwards two headed arrow from circle', google translation) - - "⥊": [t: "левый барб вверх по правой барб вниз по гарпуне"] # 0x294a (en: 'left barb up right barb down harpoon', google translation) - - "⥋": [t: "левый барб вниз по правой барб вверх по гарпуне"] # 0x294b (en: 'left barb down right barb up harpoon', google translation) - - "⥌": [t: "вверх барб прямо вниз по левому гарпуне"] # 0x294c (en: 'up barb right down barb left harpoon', google translation) - - "⥍": [t: "вверх по барб налево барб правой гарпун"] # 0x294d (en: 'up barb left down barb right harpoon', google translation) - - "⥎": [t: "левый барб вверх по правой барб -харпун"] # 0x294e (en: 'left barb up right barb up harpoon', google translation) - - "⥏": [t: "вверх барб прямо вниз, барб правый гарпун"] # 0x294f (en: 'up barb right down barb right harpoon', google translation) - - "⥐": [t: "левый барб вниз по правой барб вниз по гарпуне"] # 0x2950 (en: 'left barb down right barb down harpoon', google translation) - - "⥑": [t: "вверх барб оставил барб, покинув гарпун"] # 0x2951 (en: 'up barb left down barb left harpoon', google translation) - - "⥒": [t: "левый гарпун с барб до бар"] # 0x2952 (en: 'leftwards harpoon with barb up to bar', google translation) - - "⥓": [t: "прямо гарпун с барб до бара"] # 0x2953 (en: 'rightwards harpoon with barb up to bar', google translation) - - "⥔": [t: "вверх гарпун с барб прямо к баре"] # 0x2954 (en: 'upwards harpoon with barb right to bar', google translation) - - "⥕": [t: "вниз по гарпуне с барб прямо к бар"] # 0x2955 (en: 'downwards harpoon with barb right to bar', google translation) - - "⥖": [t: "слева гарпун с барб до бара"] # 0x2956 (en: 'leftwards harpoon with barb down to bar', google translation) - - "⥗": [t: "прямо гарпун с барб до бара"] # 0x2957 (en: 'rightwards harpoon with barb down to bar', google translation) - - "⥘": [t: "вверх гарпун с кобкой, оставленной в бар"] # 0x2958 (en: 'upwards harpoon with barb left to bar', google translation) - - "⥙": [t: "вниз по гарпуне с кобкой, оставленной в бар"] # 0x2959 (en: 'downwards harpoon with barb left to bar', google translation) - - "⥚": [t: "слева гарпун с барб из бара"] # 0x295a (en: 'leftwards harpoon with barb up from bar', google translation) - - "⥛": [t: "прямо гарпун с барб из бара"] # 0x295b (en: 'rightwards harpoon with barb up from bar', google translation) - - "⥜": [t: "вверх гарпун с барб прямо из бара"] # 0x295c (en: 'upwards harpoon with barb right from bar', google translation) - - "⥝": [t: "вниз по гарпуне с барб прямо из бара"] # 0x295d (en: 'downwards harpoon with barb right from bar', google translation) - - "⥞": [t: "налево гарпун с барб вниз от бара"] # 0x295e (en: 'leftwards harpoon with barb down from bar', google translation) - - "⥟": [t: "прямо гарпун с барб вниз от бара"] # 0x295f (en: 'rightwards harpoon with barb down from bar', google translation) - - "⥠": [t: "вверх гарпун с барб слева от бара"] # 0x2960 (en: 'upwards harpoon with barb left from bar', google translation) - - "⥡": [t: "вниз по гарпуне с кобкой слева от бара"] # 0x2961 (en: 'downwards harpoon with barb left from bar', google translation) - - "⥢": [t: "налево гарпун с барб вверх по левому гарпуне с барб вниз"] # 0x2962 (en: 'leftwards harpoon with barb up above leftwards harpoon with barb down', google translation) - - "⥣": [t: "вверх гарпун с кобкой слева рядом вверх вверх гарпун с барком справа"] # 0x2963 (en: 'upwards harpoon with barb left beside upwards harpoon with barb right', google translation) - - "⥤": [t: "прямо гарпун с барб вверх по правой гарпуне с барб"] # 0x2964 (en: 'rightwards harpoon with barb up above rightwards harpoon with barb down', google translation) - - "⥥": [t: "вниз по гарпуне с кобкой слева рядом вниз по гарпуне с барком справа"] # 0x2965 (en: 'downwards harpoon with barb left beside downwards harpoon with barb right', google translation) - - "⥦": [t: "влево гарпун с барб вверх по правой гарпуне с барб"] # 0x2966 (en: 'leftwards harpoon with barb up above rightwards harpoon with barb up', google translation) - - "⥧": [t: "влево гарпун с барб вниз по правой гарпуне с барб вниз"] # 0x2967 (en: 'leftwards harpoon with barb down above rightwards harpoon with barb down', google translation) - - "⥨": [t: "вправо гарпун с барб над левым гарпуном с барб"] # 0x2968 (en: 'rightwards harpoon with barb up above leftwards harpoon with barb up', google translation) - - "⥩": [t: "вправо гарпун с барб вниз над левым гарпуном с барб вниз"] # 0x2969 (en: 'rightwards harpoon with barb down above leftwards harpoon with barb down', google translation) - - "⥪": [t: "слева гарпун с барб наверху длинного хранения"] # 0x296a (en: 'leftwards harpoon with barb up above long dash', google translation) - - "⥫": [t: "слева гарпун с барб внизу длинной чертой"] # 0x296b (en: 'leftwards harpoon with barb down below long dash', google translation) - - "⥬": [t: "прямо гарпун с барб наверху длинной чертой"] # 0x296c (en: 'rightwards harpoon with barb up above long dash', google translation) - - "⥭": [t: "прямо гарпун с барб внизу длинной чертой"] # 0x296d (en: 'rightwards harpoon with barb down below long dash', google translation) - - "⥮": [t: "вверх по гарпуне с кобкой слева рядом с вниз по гарпуне с барком справа"] # 0x296e (en: 'upwards harpoon with barb left beside downwards harpoon with barb right', google translation) - - "⥯": [t: "вниз по гарпуне с кобкой слева рядом с горной вверх с барком справа"] # 0x296f (en: 'downwards harpoon with barb left beside upwards harpoon with barb right', google translation) - - "⥰": [t: "правая двойная стрелка с округлой головой"] # 0x2970 (en: 'right double arrow with rounded head', google translation) - - "⥱": [t: "равняется над стрельбой справа"] # 0x2971 (en: 'equals above rightwards arrow', google translation) - - "⥲": [t: "оператор тильде выше стрелы справа"] # 0x2972 (en: 'tilde operator above rightwards arrow', google translation) - - "⥳": [t: "стрелка влево над оператором тильды"] # 0x2973 (en: 'leftwards arrow above tilde operator', google translation) - - "⥴": [t: "стрелка вправо над оператором тильды"] # 0x2974 (en: 'rightwards arrow above tilde operator', google translation) - - "⥵": [t: "стрелка вправо выше почти равна"] # 0x2975 (en: 'rightwards arrow above almost equal to', google translation) - - "⥶": [t: "меньше, чем выше левой стрелы"] # 0x2976 (en: 'less than above leftwards arrow', google translation) - - "⥷": [t: "стрелка слева через меньше"] # 0x2977 (en: 'leftwards arrow through less than', google translation) - - "⥸": [t: "больше, чем выше, стрелка вправо"] # 0x2978 (en: 'greater than above rightwards arrow', google translation) - - "⥹": [t: "подмножество выше стрелки справа"] # 0x2979 (en: 'subset above rightwards arrow', google translation) - - "⥺": [t: "стрелка влево через подмножество"] # 0x297a (en: 'leftwards arrow through subset', google translation) - - "⥻": [t: "суперсет над стрелкой влево"] # 0x297b (en: 'superset above leftwards arrow', google translation) - - "⥼": [t: "оставил рыбный хвост"] # 0x297c (en: 'left fish tail', google translation) - - "⥽": [t: "правый рыбный хвост"] # 0x297d (en: 'right fish tail', google translation) - - "⥾": [t: "вверх по рыбному хвосту"] # 0x297e (en: 'up fish tail', google translation) - - "⥿": [t: "вниз по рыбному хвосту"] # 0x297f (en: 'down fish tail', google translation) - - "⦀": [t: "тройной вертикальный разделитель"] # 0x2980 (en: 'triple vertical bar delimiter', google translation) - - "⦁": [t: "z letation spot"] # 0x2981 (en: 'z notation spot', google translation) - - "⦂": [t: "z обозначения типа толстой кишки"] # 0x2982 (en: 'z notation type colon', google translation) - - "⦃": [t: "оставил белую скобу"] # 0x2983 (en: 'left white brace', google translation) - - "⦄": [t: "правая белая скоба"] # 0x2984 (en: 'right white brace', google translation) - - "⦅": [t: "левая белая скобкатиз"] # 0x2985 (en: 'left white parenthesis', google translation) - - "⦆": [t: "правый белый скол"] # 0x2986 (en: 'right white parenthesis', google translation) - - "⦇": [t: "z letation left image cracket"] # 0x2987 (en: 'z notation left image bracket', google translation) - - "⦈": [t: "z обозначения правильный кронштейн изображения"] # 0x2988 (en: 'z notation right image bracket', google translation) - - "⦉": [t: "z обозначения левого связующего кронштейна"] # 0x2989 (en: 'z notation left binding bracket', google translation) - - "⦊": [t: "z обозначение правого связующего кронштейна"] # 0x298a (en: 'z notation right binding bracket', google translation) - - "⦋": [t: "левый квадратный кронштейн с андербаром"] # 0x298b (en: 'left square bracket with underbar', google translation) - - "⦌": [t: "правый квадратный кронштейн с андербаром"] # 0x298c (en: 'right square bracket with underbar', google translation) - - "⦍": [t: "левый квадратный кронштейн с тиком в верхнем углу"] # 0x298d (en: 'left square bracket with tick in top corner', google translation) - - "⦎": [t: "правый квадратный кронштейн с клелем в нижнем углу"] # 0x298e (en: 'right square bracket with tick in bottom corner', google translation) - - "⦏": [t: "левый квадратный кронштейн с клелем в нижнем углу"] # 0x298f (en: 'left square bracket with tick in bottom corner', google translation) - - "⦐": [t: "правый квадратный кронштейн с тиком в верхнем углу"] # 0x2990 (en: 'right square bracket with tick in top corner', google translation) - - "⦑": [t: "левый угловой кронштейн с точкой"] # 0x2991 (en: 'left angle bracket with dot', google translation) - - "⦒": [t: "правой угловой кронштейн с точкой"] # 0x2992 (en: 'right angle bracket with dot', google translation) - - "⦓": [t: "левая дуга меньше, чем кронштейна"] # 0x2993 (en: 'left arc less than bracket', google translation) - - "⦔": [t: "правая дуга больше, чем кронштейна"] # 0x2994 (en: 'right arc greater than bracket', google translation) - - "⦕": [t: "двойная левая дуга больше, чем кронштейна"] # 0x2995 (en: 'double left arc greater than bracket', google translation) - - "⦖": [t: "двойная правая дуга меньше, чем кронштейна"] # 0x2996 (en: 'double right arc less than bracket', google translation) - - "⦗": [t: "оставленный черный кронштейн с панциркой черепахи"] # 0x2997 (en: 'left black tortoise shell bracket', google translation) - - "⦘": [t: "правый черный кронштейн shell"] # 0x2998 (en: 'right black tortoise shell bracket', google translation) - - "⦙": [t: "пунктирный забор"] # 0x2999 (en: 'dotted fence', google translation) - - "⦚": [t: "вертикальная зигзагообразная линия"] # 0x299a (en: 'vertical zigzag line', google translation) - - "⦛": [t: "измеренное угловое отверстие слева"] # 0x299b (en: 'measured angle opening left', google translation) - - "⦜": [t: "вариант правого угла с квадратом"] # 0x299c (en: 'right angle variant with square', google translation) - - "⦝": [t: "измеренный правый угол с точкой"] # 0x299d (en: 'measured right angle with dot', google translation) - - "⦞": [t: "угол с s внутри"] # 0x299e (en: 'angle with s inside', google translation) - - "⦟": [t: "острый угол"] # 0x299f (en: 'acute angle', google translation) - - "⦠": [t: "сферический угол открывается слева"] # 0x29a0 (en: 'spherical angle opening left', google translation) - - "⦡": [t: "сферический угол открывается"] # 0x29a1 (en: 'spherical angle opening up', google translation) - - "⦢": [t: "повернут угол"] # 0x29a2 (en: 'turned angle', google translation) - - "⦣": [t: "обратный угол"] # 0x29a3 (en: 'reversed angle', google translation) - - "⦤": [t: "угол с андербаром"] # 0x29a4 (en: 'angle with underbar', google translation) - - "⦥": [t: "обратный угол с помощью подножия"] # 0x29a5 (en: 'reversed angle with underbar', google translation) - - "⦦": [t: "косой угол открывается"] # 0x29a6 (en: 'oblique angle opening up', google translation) - - "⦧": [t: "косой угол открывается вниз"] # 0x29a7 (en: 'oblique angle opening down', google translation) - - "⦨": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей вверх и вправо"] # 0x29a8 (en: 'measured angle with open arm ending in arrow pointing up and to the right', google translation) - - "⦩": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей вверх и влево"] # 0x29a9 (en: 'measured angle with open arm ending in arrow pointing up and to the left', google translation) - - "⦪": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей вниз и вправо"] # 0x29aa (en: 'measured angle with open arm ending in arrow pointing down and to the right', google translation) - - "⦫": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей вниз и слева"] # 0x29ab (en: 'measured angle with open arm ending in arrow pointing down and to the left', google translation) - - "⦬": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей вправо и вверх"] # 0x29ac (en: 'measured angle with open arm ending in arrow pointing right and up', google translation) - - "⦭": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей влево и вверх"] # 0x29ad (en: 'measured angle with open arm ending in arrow pointing left and up', google translation) - - "⦮": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей вправо и вниз"] # 0x29ae (en: 'measured angle with open arm ending in arrow pointing right and down', google translation) - - "⦯": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей влево и вниз"] # 0x29af (en: 'measured angle with open arm ending in arrow pointing left and down', google translation) - - "⦰": [t: "обратный пустой набор"] # 0x29b0 (en: 'reversed empty set', google translation) - - "⦱": [t: "пустой набор с overbar"] # 0x29b1 (en: 'empty set with overbar', google translation) - - "⦲": [t: "пустой набор с небольшим кругом выше"] # 0x29b2 (en: 'empty set with small circle above', google translation) - - "⦳": [t: "пустой набор со стрелкой вправо выше"] # 0x29b3 (en: 'empty set with right arrow above', google translation) - - "⦴": [t: "пустой набор со стрелкой левой выше"] # 0x29b4 (en: 'empty set with left arrow above', google translation) - - "⦵": [t: "круг с горизонтальным баром"] # 0x29b5 (en: 'circle with horizontal bar', google translation) - - "⦶": [t: "обведенный вертикальным баром"] # 0x29b6 (en: 'circled vertical bar', google translation) - - "⦷": [t: "обведенный параллельно"] # 0x29b7 (en: 'circled parallel', google translation) - - "⦸": [t: "circled reverse solidus"] # 0x29b8 (google translation) - - "⦹": [t: "обведенный перпендикулярным"] # 0x29b9 (en: 'circled perpendicular', google translation) - - "⦺": [t: "circled, разделенная горизонтальной стержней и верхней половиной, разделенной на вертикальный стержень"] # 0x29ba (en: 'circled divided by horizontal bar and top half divided by vertical bar', google translation) - - "⦻": [t: "круг с наложением x"] # 0x29bb (en: 'circle with superimposed x', google translation) - - "⦼": [t: "объисхоженная против часовой стрелки по вращению знака дивизии"] # 0x29bc (en: 'circled anticlockwise rotated division sign', google translation) - - "⦽": [t: "вверх стрелой через круг"] # 0x29bd (en: 'up arrow through circle', google translation) - - "⦾": [t: "обведенная белая пуля"] # 0x29be (en: 'circled white bullet', google translation) - - "⦿": [t: "кружная пуля"] # 0x29bf (en: 'circled bullet', google translation) - - "⧀": [t: "кружит меньше, чем"] # 0x29c0 (en: 'circled less than', google translation) - - "⧁": [t: "обведенный больше, чем"] # 0x29c1 (en: 'circled greater than', google translation) - - "⧂": [t: "круг с маленьким кругом справа"] # 0x29c2 (en: 'circle with small circle to the right', google translation) - - "⧃": [t: "обведите с двумя горизонтальными ударами справа"] # 0x29c3 (en: 'circle with two horizontal strokes to the right', google translation) - - "⧄": [t: "квадратная растущая диагональная черта"] # 0x29c4 (en: 'squared rising diagonal slash', google translation) - - "⧅": [t: "квадратная падающая диагональная черта"] # 0x29c5 (en: 'squared falling diagonal slash', google translation) - - "⧆": [t: "квадратная звездочка"] # 0x29c6 (en: 'squared asterisk', google translation) - - "⧇": [t: "квадратный маленький круг"] # 0x29c7 (en: 'squared small circle', google translation) - - "⧈": [t: "квадратный квадрат"] # 0x29c8 (en: 'squared square', google translation) - - "⧉": [t: "двое присоединились к квадратам"] # 0x29c9 (en: 'two joined squares', google translation) - - "⧊": [t: "треугольник с точкой выше"] # 0x29ca (en: 'triangle with dot above', google translation) - - "⧋": [t: "треугольник с верхней частью"] # 0x29cb (en: 'triangle with underbar', google translation) - - "⧌": [t: "s в треугольнике"] # 0x29cc (en: 's in triangle', google translation) - - "⧍": [t: "треугольник с засечками внизу"] # 0x29cd (en: 'triangle with serifs at bottom', google translation) - - "⧎": [t: "правый треугольник над левым треугольником"] # 0x29ce (en: 'right triangle above left triangle', google translation) - - "⧏": [t: "левый треугольник рядом с вертикальным баром"] # 0x29cf (en: 'left triangle beside vertical bar', google translation) - - "⧐": [t: "вертикальный батончик рядом с правым треугольником"] # 0x29d0 (en: 'vertical bar beside right triangle', google translation) - - "⧑": [t: "боути с левой половиной черной"] # 0x29d1 (en: 'bowtie with left half black', google translation) - - "⧒": [t: "боути с правой половиной черной"] # 0x29d2 (en: 'bowtie with right half black', google translation) - - "⧓": [t: "черный бабочка"] # 0x29d3 (en: 'black bowtie', google translation) - - "⧔": [t: "раз с левой половиной черной"] # 0x29d4 (en: 'times with left half black', google translation) - - "⧕": [t: "раз с правой половиной черной"] # 0x29d5 (en: 'times with right half black', google translation) - - "⧖": [t: "белые дни"] # 0x29d6 (en: 'white hourglass', google translation) - - "⧗": [t: "черные песочные часы"] # 0x29d7 (en: 'black hourglass', google translation) - - "⧘": [t: "оставил вигги"] # 0x29d8 (en: 'left wiggly fence', google translation) - - "⧙": [t: "правый шаткий забор"] # 0x29d9 (en: 'right wiggly fence', google translation) - - "⧚": [t: "оставил двойной шаткий забор"] # 0x29da (en: 'left double wiggly fence', google translation) - - "⧛": [t: "правый двойной забор"] # 0x29db (en: 'right double wiggly fence', google translation) - - "⧜": [t: "неполная бесконечность"] # 0x29dc (en: 'incomplete infinity', google translation) - - "⧝": [t: "связывать бесконечность"] # 0x29dd (en: 'tie over infinity', google translation) - - "⧞": [t: "бесконечность отрицается с вертикальной стержней"] # 0x29de (en: 'infinity negated with vertical bar', google translation) - - "⧟": [t: "двойной многократный мультимап"] # 0x29df (en: 'double-ended multimap', google translation) - - "⧠": [t: "квадрат с контурированным контуром"] # 0x29e0 (en: 'square with contoured outline', google translation) - - "⧡": [t: "увеличивается как"] # 0x29e1 (en: 'increases as', google translation) - - "⧢": [t: "перетасовать продукт"] # 0x29e2 (en: 'shuffle product', google translation) - - "⧣": [t: "равняется знаку и наклонной параллели"] # 0x29e3 (en: 'equals sign and slanted parallel', google translation) - - "⧤": [t: "равняется знаку и наклонной параллельно с тильдой выше"] # 0x29e4 (en: 'equals sign and slanted parallel with tilde above', google translation) - - "⧥": [t: "идентично и наклонной параллельно"] # 0x29e5 (en: 'identical to and slanted parallel', google translation) - - "⧦": [t: "глейх старк"] # 0x29e6 (en: 'gleich stark', google translation) - - "⧧": [t: "термодинамический"] # 0x29e7 (en: 'thermodynamic', google translation) - - "⧨": [t: "вниз по направлению треугольника с левой половиной черной"] # 0x29e8 (en: 'down pointing triangle with left half black', google translation) - - "⧩": [t: "вниз по указанию треугольника с правой половиной черной"] # 0x29e9 (en: 'down pointing triangle with right half black', google translation) - - "⧪": [t: "черный бриллиант со стрелой"] # 0x29ea (en: 'black diamond with down arrow', google translation) - - "⧫": [t: "черный ронник"] # 0x29eb (en: 'black lozenge', google translation) - - "⧬": [t: "белый круг со стрелой вниз"] # 0x29ec (en: 'white circle with down arrow', google translation) - - "⧭": [t: "черный круг со стрелой вниз"] # 0x29ed (en: 'black circle with down arrow', google translation) - - "⧮": [t: "ошибка белой квадраты"] # 0x29ee (en: 'error-barred white square', google translation) - - "⧯": [t: "ошибка, черный квадрат"] # 0x29ef (en: 'error-barred black square', google translation) - - "⧰": [t: "ошибка белого алмаза"] # 0x29f0 (en: 'error-barred white diamond', google translation) - - "⧱": [t: "ошибка с черным бриллиантом"] # 0x29f1 (en: 'error-barred black diamond', google translation) - - "⧲": [t: "ошибка белого круга"] # 0x29f2 (en: 'error-barred white circle', google translation) - - "⧳": [t: "ошибка, черный круг"] # 0x29f3 (en: 'error-barred black circle', google translation) - - "⧴": [t: "задерживается правилом"] # 0x29f4 (en: 'rule-delayed', google translation) - - "⧵": [t: "обратный оператор solidus"] # 0x29f5 (en: 'reverse solidus operator', google translation) - - "⧶": [t: "solidus с overbar"] # 0x29f6 (en: 'solidus with overbar', google translation) - - "⧷": [t: "обратный солидус с горизонтальным ходом"] # 0x29f7 (en: 'reverse solidus with horizontal stroke', google translation) - - "⧸": [t: "большой солис"] # 0x29f8 (en: 'big solidus', google translation) - - "⧹": [t: "большой обратный солидус"] # 0x29f9 (en: 'big reverse solidus', google translation) - - "⧺": [t: "двойной плюс"] # 0x29fa (en: 'double plus', google translation) - - "⧻": [t: "тройной плюс"] # 0x29fb (en: 'triple plus', google translation) - - "⧼": [t: "влево укажите изогнутый угловой кронштейн"] # 0x29fc (en: 'left pointing curved angle bracket', google translation) - - "⧽": [t: "право указывает на изогнутый угловой кронштейн"] # 0x29fd (en: 'right pointing curved angle bracket', google translation) - - "⧾": [t: "крошечный"] # 0x29fe (en: 'tiny', google translation) - - "⧿": [t: "мин"] # 0x29ff (en: 'miny', google translation) - - "⨀": [t: "circled dot operator"] # 0x2a00 (google translation) - - "⨁": [t: "circled plus operator"] # 0x2a01 (google translation) - - "⨂": [t: "оператор times circled"] # 0x2a02 (en: 'circled times operator', google translation) - - "⨃": [t: "оператор профсоюза с dot"] # 0x2a03 (en: 'union operator with dot', google translation) - - "⨄": [t: "оператор профсоюза с плюсом"] # 0x2a04 (en: 'union operator with plus', google translation) - - "⨅": [t: "квадратный перекрестный оператор"] # 0x2a05 (en: 'square intersection operator', google translation) - - "⨆": [t: "оператор square union"] # 0x2a06 (en: 'square union operator', google translation) - - "⨇": [t: "два логических и оператор"] # 0x2a07 (en: 'two logical and operator', google translation) - - "⨈": [t: "два логичных или оператор"] # 0x2a08 (en: 'two logical or operator', google translation) - - "⨉": [t: "времена оператор"] # 0x2a09 (en: 'times operator', google translation) - - "⨊": [t: "модуле две суммы"] # 0x2a0a (en: 'modulo two sum', google translation) - - "⨋": [t: "суммирование с интегральным"] # 0x2a0b (en: 'summation with integral', google translation) - - "⨌": [t: "четырехкратный интегральный оператор"] # 0x2a0c (en: 'quadruple integral operator', google translation) - - "⨍": [t: "конечная часть интеграла"] # 0x2a0d (en: 'finite part integral', google translation) - - "⨎": [t: "интеграл с двойным ходом"] # 0x2a0e (en: 'integral with double stroke', google translation) - - "⨏": [t: "интегральный средний со слэш"] # 0x2a0f (en: 'integral average with slash', google translation) - - "⨐": [t: "функция циркуляции"] # 0x2a10 (en: 'circulation function', google translation) - - "⨑": [t: "против часовой стрельбы интеграция"] # 0x2a11 (en: 'anticlockwise integration', google translation) - - "⨒": [t: "линейная интеграция с прямоугольным путем вокруг полюса"] # 0x2a12 (en: 'line integration with rectangular path around pole', google translation) - - "⨓": [t: "линейная интеграция с полукруглым путем вокруг полюса"] # 0x2a13 (en: 'line integration with semicircular path around pole', google translation) - - "⨔": [t: "линейная интеграция не включая полюс"] # 0x2a14 (en: 'line integration not including the pole', google translation) - - "⨕": [t: "интеграл вокруг оператора точек"] # 0x2a15 (en: 'integral around a point operator', google translation) - - "⨖": [t: "интегральный оператор quaternion"] # 0x2a16 (en: 'quaternion integral operator', google translation) - - "⨗": [t: "интеграл со стрелкой левой с крючком"] # 0x2a17 (en: 'integral with leftwards arrow with hook', google translation) - - "⨘": [t: "интеграл с знаком times"] # 0x2a18 (en: 'integral with times sign', google translation) - - "⨙": [t: "интеграл с пересечением"] # 0x2a19 (en: 'integral with intersection', google translation) - - "⨚": [t: "интеграл с профсоюзом"] # 0x2a1a (en: 'integral with union', google translation) - - "⨛": [t: "интеграл с overbar"] # 0x2a1b (en: 'integral with overbar', google translation) - - "⨜": [t: "интеграл с underbar"] # 0x2a1c (en: 'integral with underbar', google translation) - - "⨝": [t: "присоединиться"] # 0x2a1d (en: 'join', google translation) - - "⨞": [t: "большой левый оператор треугольника"] # 0x2a1e (en: 'large left triangle operator', google translation) - - "⨟": [t: "z состав схемы записей"] # 0x2a1f (en: 'z notation schema composition', google translation) - - "⨠": [t: "z схема записей"] # 0x2a20 (en: 'z notation schema piping', google translation) - - "⨡": [t: "z проекция схемы нотации"] # 0x2a21 (en: 'z notation schema projection', google translation) - - "⨢": [t: "плюс знак с кругом выше"] # 0x2a22 (en: 'plus sign with circle above', google translation) - - "⨣": [t: "плюс знак с акцентом на округ"] # 0x2a23 (en: 'plus sign with circumflex accent above', google translation) - - "⨤": [t: "плюс знак с тильдой выше"] # 0x2a24 (en: 'plus sign with tilde above', google translation) - - "⨥": [t: "плюс знак с точкой ниже"] # 0x2a25 (en: 'plus sign with dot below', google translation) - - "⨦": [t: "плюс знак с тильдой ниже"] # 0x2a26 (en: 'plus sign with tilde below', google translation) - - "⨧": [t: "плюс знак с подписанием второго"] # 0x2a27 (en: 'plus sign with subscript two', google translation) - - "⨨": [t: "плюс знак с черным треугольником"] # 0x2a28 (en: 'plus sign with black triangle', google translation) - - "⨩": [t: "знак минус с запятой выше"] # 0x2a29 (en: 'minus sign with comma above', google translation) - - "⨪": [t: "знак минус с точкой ниже"] # 0x2a2a (en: 'minus sign with dot below', google translation) - - "⨫": [t: "знак минус с падающими точками"] # 0x2a2b (en: 'minus sign with falling dots', google translation) - - "⨬": [t: "знак минус с растущими точками"] # 0x2a2c (en: 'minus sign with rising dots', google translation) - - "⨭": [t: "плюс войти в левый половинный круг"] # 0x2a2d (en: 'plus sign in left half circle', google translation) - - "⨮": [t: "плюс войти в правый половинный круг"] # 0x2a2e (en: 'plus sign in right half circle', google translation) - - "⨯": # 0x2a2f + then: [t: "точка"] + else: [t: "умножить"] + - "⋆": [t: "умножить"] # 0x22c6 + - "⋇": [t: "деление умножением"] # 0x22c7 + - "⋈": [t: "естественное соединение"] # 0x22c8 + - "⋉": # 0x22c9 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "левым полупрямым произведением с нормальным сомножителем" + - "⋊": # 0x22ca + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "правым полупрямым произведением с нормальным сомножителем" + - "⋋": # 0x22cb + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "левым полупрямым произведением" + - "⋌": # 0x22cc + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "правым полупрямым произведением" + - "⋍": [t: "перевёрнутая тильда равно"] # 0x22cd + - "⋎": [t: "фигурное логическое или"] # 0x22ce + - "⋏": [t: "фигурное логическое и"] # 0x22cf + - "⋐": # 0x22d0 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "двойным подмножеством" + - "⋑": # 0x22d1 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "двойным надмножеством" + - "⋒": # 0x22d2 + - test: + if: "$Verbosity!='Terse'" + then: [t: "двойное"] + - t: "пересечение" + - "⋓": # 0x22d3 + - test: + if: "$Verbosity!='Terse'" + then: [t: "двойное"] + - t: "объединение" + - "⋔": # 0x22d4 + - test: + if: "$Verbosity!='Terse'" + then: [t: "собственное"] + - t: "пересечение" + - "⋕": # 0x22d5 + - test: + if: "$Verbosity!='Terse'" + then: [t: "равно и параллельно"] + - t: "равно и параллельно" + - "⋖": [t: "меньше с точкой"] # 0x22d6 + - "⋗": [t: "больше с точкой"] # 0x22d7 + - "⋘": # 0x22d8 + - test: + if: "$Verbosity!='Terse'" + then: [t: "гораздо меньше"] + - t: "гораздо меньше" + - "⋙": # 0x22d9 + - test: + if: "$Verbosity!='Terse'" + then: [t: "гораздо больше"] + - t: "гораздо больше" + - "⋚": # 0x22da + - test: + if: "$Verbosity!='Terse'" + then: [t: "меньше, равно или больше"] + - t: "меньше, равно или больше" + - "⋛": # 0x22db + - test: + if: "$Verbosity!='Terse'" + then: [t: "больше, равно или меньше"] + - t: "больше, равно или меньше" + - "⋜": # 0x22dc + - test: + if: "$Verbosity!='Terse'" + then: [t: "равно или меньше"] + - t: "равно или меньше" + - "⋝": # 0x22dd + - test: + if: "$Verbosity!='Terse'" + then: [t: "равно или больше"] + - t: "равно или больше" + - "⋞": # 0x22de + - test: + if: "$Verbosity!='Terse'" + then: [t: "равно или предшествует"] + - t: "равно или предшествует" + - "⋟": # 0x22df + - test: + if: "$Verbosity!='Terse'" + then: [t: "равно или следует"] + - t: "равно или следует" + - "⋠": [t: "не предшествует и не равно"] # 0x22e0 + - "⋡": [t: "не следует и не равно"] # 0x22e1 + - "⋢": [t: "не квадратный образ и не равно"] # 0x22e2 + - "⋣": [t: "не квадратный прообраз и не равно"] # 0x22e3 + - "⋤": [t: "квадратный образ или не равно"] # 0x22e4 + - "⋥": [t: "квадратный прообраз или не равно"] # 0x22e5 + - "⋦": # 0x22e6 + - test: + if: "$Verbosity!='Terse'" + then: [t: "меньше, но не эквивалентно"] + - t: "меньше, но не эквивалентно" + - "⋧": # 0x22e7 + - test: + if: "$Verbosity!='Terse'" + then: [t: "больше, но не эквивалентно"] + - t: "больше, но не эквивалентно" + - "⋨": [t: "предшествует, но не эквивалентно"] # 0x22e8 + - "⋩": [t: "следует, но не эквивалентно"] # 0x22e9 + - "⋪": # 0x22ea + - test: + if: "$Verbosity!='Terse'" + then: [t: "не является"] + - t: "нормальной подгруппой" + - "⋫": [t: "не содержит как нормальную подгруппу"] # 0x22eb + - "⋬": # 0x22ec + - test: + if: "$Verbosity!='Terse'" + then: [t: "не является нормальной подгруппой и не равно"] + - t: "не является нормальной подгруппой и не равно" + - "⋭": [t: "не содержит как нормальную подгруппу и не равно"] # 0x22ed + - "⋮": [t: "вертикальное многоточие"] # 0x22ee + - "⋯": [t: "точка точка точка"] # 0x22ef + - "⋰": [t: "восходящее диагональное многоточие"] # 0x22f0 + - "⋱": [t: "нисходящее диагональное многоточие"] # 0x22f1 + - "⋲": [t: "элемент с длинной горизонтальной чертой"] # 0x22f2 + - "⋳": [t: "элемент с вертикальной чертой в конце горизонтальной черты"] # 0x22f3 + - "⋴": [t: "элемент с вертикальной чертой в конце горизонтальной черты"] # 0x22f4 + - "⋵": [t: "элемент с точкой сверху"] # 0x22f5 + - "⋶": [t: "элемент с надчёркиванием"] # 0x22f6 + - "⋷": [t: "элемент с надчеркиванием"] # 0x22f7 + - "⋸": [t: "элемент с подчеркиванием"] # 0x22f8 + - "⋹": [t: "элемент с двумя горизонтальными чертами"] # 0x22f9 + - "⋺": [t: "содержит с длинной горизонтальной чертой"] # 0x22fa + - "⋻": [t: "содержит с вертикальной чертой в конце горизонтальной черты"] # 0x22fb + - "⋼": [t: "содержит с вертикальной чертой в конце горизонтальной черты"] # 0x22fc + - "⋽": [t: "содержит с надчеркиванием"] # 0x22fd + - "⋾": [t: "содержит с надчеркиванием"] # 0x22fe + - "⋿": [t: "принадлежность к мешку в нотации Z"] # 0x22ff + - "⌀": [t: "диаметр"] # 0x2300 + - "⌁": [t: "электрическая стрелка"] # 0x2301 + - "⌂": [t: "дом"] # 0x2302 + - "⌃": [t: "наконечник стрелы вверх"] # 0x2303 + - "⌄": [t: "наконечник стрелы вниз"] # 0x2304 + - "⌅": [t: "проективный"] # 0x2305 + - "⌆": [t: "перспектива"] # 0x2306 + - "□": [t: "белый квадрат"] # 0x25a1 + - "▢": [t: "белый квадрат с закруглёнными углами"] # 0x25a2 + - "▣": [t: "белый квадрат, содержащий маленький чёрный квадрат"] # 0x25a3 + - "▤": [t: "квадрат с горизонтальной штриховкой"] # 0x25a4 + - "▥": [t: "квадрат с вертикальной штриховкой"] # 0x25a5 + - "▦": [t: "квадрат с ортогональной перекрёстной штриховкой"] # 0x25a6 + - "▧": [t: "квадрат со штриховкой из левого верхнего в правый нижний"] # 0x25a7 + - "▨": [t: "квадрат со штриховкой из правого верхнего в левый нижний"] # 0x25a8 + - "▩": [t: "квадрат с диагональной перекрёстной штриховкой"] # 0x25a9 + - "▪": [t: "чёрный маленький квадрат"] # 0x25aa + - "⚉": [t: "чёрный круг с двумя точками"] # 0x2689 + - "⚪": [t: "средний белый круг"] # 0x26aa + - "❻": [t: "шестёрка в чёрном кружке"] # 0x277b + - "➑": [t: "восьмёрка в чёрном круге без засечек"] # 0x2791 + - "➒": [t: "девятка в чёрном круге без засечек"] # 0x2792 + - "➓": [t: "десятка в чёрном круге без засечек"] # 0x2793 + - "➔": [t: "тяжёлая широкоголовая стрелка вправо"] # 0x2794 + - "➕": [t: "тяжёлый знак плюс"] # 0x2795 + - "➖": [t: "тяжёлый знак минус"] # 0x2796 + - "➗": [t: "тяжёлый знак деления"] # 0x2797 + - "➘": [t: "тяжёлая стрелка юго-восток"] # 0x2798 + - "➙": [t: "тяжёлая стрелка вправо"] # 0x2799 + - "➚": [t: "тяжёлая стрелка северо-восток"] # 0x279a + - "➛": [t: "стрелка вправо для черчения"] # 0x279b + - "➜": [t: "тяжёлая стрелка вправо с закруглённым наконечником"] # 0x279c + - "➝": [t: "стрелка вправо с треугольным наконечником"] # 0x279d + - "➞": [t: "тяжёлая стрелка вправо с треугольным наконечником"] # 0x279e + - "➟": [t: "пунктирная стрелка вправо с треугольным наконечником"] # 0x279f + - "➠": [t: "тяжёлая пунктирная стрелка вправо с треугольным наконечником"] # 0x27a0 + - "➡": [t: "чёрная стрелка вправо"] # 0x27a1 + - "➢": [t: "стрелка вправо с трёхмерной верхней подсветкой"] # 0x27a2 + - "➣": [t: "стрелка вправо с трёхмерной нижней подсветкой"] # 0x27a3 + - "➤": [t: "чёрный наконечник стрелы вправо"] # 0x27a4 + - "➥": [t: "тяжёлая чёрная изогнутая вниз и вправо стрелка"] # 0x27a5 + - "➦": [t: "тяжёлая чёрная изогнутая вверх и вправо стрелка"] # 0x27a6 + - "➧": [t: "приземистая чёрная стрелка вправо"] # 0x27a7 + - "➨": [t: "тяжёлая чёрная стрелка вправо с вогнутым наконечником"] # 0x27a8 + - "➩": [t: "белая стрелка вправо с правой штриховкой"] # 0x27a9 + - "➪": [t: "белая стрелка вправо с левой штриховкой"] # 0x27aa + - "➫": [t: "белая стрелка вправо с тенью, наклонённая назад"] # 0x27ab + - "➬": [t: "белая стрелка вправо с тенью, наклонённая вперёд"] # 0x27ac + - "➭": [t: "тяжёлая белая стрелка вправо с тенью снизу справа"] # 0x27ad + - "➮": [t: "тяжёлая белая стрелка вправо с тенью сверху справа"] # 0x27ae + - "➯": [t: "белая стрелка вправо с вырезом и тенью снизу справа"] # 0x27af + - "➱": [t: "белая стрелка вправо с вырезом и тенью сверху справа"] # 0x27b1 + - "➲": [t: "тяжёлая белая стрелка вправо в круге"] # 0x27b2 + - "➳": [t: "белая стрелка вправо с оперением"] # 0x27b3 + - "➴": [t: "чёрная стрелка юго-восток с оперением"] # 0x27b4 + - "➵": [t: "чёрная стрелка вправо с оперением"] # 0x27b5 + - "➶": [t: "чёрная стрелка северо-восток с оперением"] # 0x27b6 + - "➷": [t: "тяжёлая чёрная стрелка юго-восток с оперением"] # 0x27b7 + - "➸": [t: "тяжёлая чёрная стрелка вправо с оперением"] # 0x27b8 + - "➹": [t: "тяжёлая чёрная стрелка северо-восток с оперением"] # 0x27b9 + - "➺": [t: "стрелка вправо с наконечником в виде капли"] # 0x27ba + - "➻": [t: "тяжёлая стрелка вправо с наконечником в виде капли"] # 0x27bb + - "➼": [t: "стрелка вправо с раздвоенным хвостом"] # 0x27bc + - "➽": [t: "тяжёлая стрелка вправо с раздвоенным хвостом"] # 0x27bd + - "➾": [t: "стрелка вправо с открытым контуром"] # 0x27be + - "⟀": [t: "трёхмерный угол"] # 0x27c0 + - "⟁": [t: "белый треугольник, содержащий маленький белый треугольник"] # 0x27c1 + - "⟂": # 0x27c2 + - test: + if: "$Verbosity!='Terse'" + then: [t: "перпендикулярен"] + - t: "перпендикулярно" + - "⟃": # 0x27c3 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "открытым подмножеством" + - "⟄": # 0x27c4 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "открытым надмножеством" + - "⟅": [t: "левая s-образная скобка-разделитель"] # 0x27c5 + - "⟆": [t: "правая s-образная скобка-разделитель"] # 0x27c6 + - "⟇": [t: "или с точкой внутри"] # 0x27c7 + - "⟈": [t: "обратная косая черта перед подмножеством"] # 0x27c8 + - "⟉": [t: "надмножество перед обратной косой чертой"] # 0x27c9 + - "⟊": [t: "вертикальная черта с горизонтальной чертой"] # 0x27ca + - "⟋": [t: "математическая восходящая диагональ"] # 0x27cb + - "⟌": [t: "деление уголком"] # 0x27cc + - "⟍": [t: "математическая нисходящая диагональ"] # 0x27cd + - "⟎": [t: "квадратное логическое и"] # 0x27ce + - "⟏": [t: "квадратное логическое или"] # 0x27cf + - "⟐": [t: "белый ромб с центрированной точкой"] # 0x27d0 + - "⟑": [t: "и с точкой"] # 0x27d1 + - "⟒": [t: "элемент, открывающийся вверх"] # 0x27d2 + - "⟓": [t: "нижний правый угол с точкой"] # 0x27d3 + - "⟔": [t: "верхний левый угол с точкой"] # 0x27d4 + - "⟕": [t: "левое внешнее соединение"] # 0x27d5 + - "⟖": [t: "правое внешнее соединение"] # 0x27d6 + - "⟗": [t: "полное внешнее соединение"] # 0x27d7 + - "⟘": [t: "большая верхняя метка"] # 0x27d8 + - "⟙": [t: "большая нижняя метка"] # 0x27d9 + - "⟚": [t: "левый и правый двойной поворотный шлагбаум"] # 0x27da + - "⟛": [t: "левая и правая метка"] # 0x27db + - "⟜": [t: "левое мультиотображение"] # 0x27dc + - "⟝": [t: "длинная правая метка"] # 0x27dd + - "⟞": [t: "длинная левая метка"] # 0x27de + - "⟟": [t: "верхняя метка с кругом сверху"] # 0x27df + - "⟠": [t: "ромб, разделённый горизонтальной чертой"] # 0x27e0 + - "⟡": [t: "белый вогнутый ромб"] # 0x27e1 + - "⟢": [t: "белый вогнутый ромб с левой меткой"] # 0x27e2 + - "⟣": [t: "белый вогнутый ромб с правой меткой"] # 0x27e3 + - "⟤": [t: "белый квадрат с левой меткой"] # 0x27e4 + - "⟥": [t: "белый квадрат с правой меткой"] # 0x27e5 + - "⟦": [t: "левая белая квадратная скобка"] # 0x27e6 + - "⟧": [t: "правая белая квадратная скобка"] # 0x27e7 + - "⟨": [t: "левая угловая скобка"] # 0x27e8 + - "⟩": [t: "правая угловая скобка"] # 0x27e9 + - "⟪": [t: "левая двойная угловая скобка"] # 0x27ea + - "⟫": [t: "правая двойная угловая скобка"] # 0x27eb + - "⟬": [t: "левая белая черепашья скобка"] # 0x27ec + - "⟭": [t: "правая белая черепашья скобка"] # 0x27ed + - "⟮": [t: "левая сплюснутая круглая скобка"] # 0x27ee + - "⟯": [t: "правая сплюснутая круглая скобка"] # 0x27ef + - "⟰": [t: "учетверённая стрелка вверх"] # 0x27f0 + - "⟱": [t: "учетверённая стрелка вниз"] # 0x27f1 + - "⟲": [t: "разорванная круговая стрелка против часовой стрелки"] # 0x27f2 + - "⟳": [t: "разорванная круговая стрелка по часовой стрелке"] # 0x27f3 + - "⟴": [t: "стрелка вправо с плюсом в круге"] # 0x27f4 + - "⟵": [t: "длинная стрелка влево"] # 0x27f5 + - "⟶": [t: "длинная стрелка вправо"] # 0x27f6 + - "⟷": [t: "длинная стрелка влево-вправо"] # 0x27f7 + - "⟸": [t: "длинная двойная стрелка влево"] # 0x27f8 + - "⟹": [t: "следовательно"] # 0x27f9 + - "⟺": [t: "тогда и только тогда"] # 0x27fa + - "⟻": [t: "длинная стрелка влево от черты"] # 0x27fb + - "⟼": [t: "длинная стрелка вправо от черты"] # 0x27fc + - "⟽": [t: "длинная двойная стрелка влево от черты"] # 0x27fd + - "⟾": [t: "длинная двойная стрелка вправо от черты"] # 0x27fe + - "⟿": [t: "длинная извилистая стрелка вправо"] # 0x27ff + - "⤀": [t: "стрелка вправо с двумя головками и вертикальной чертой"] # 0x2900 + - "⤁": [t: "стрелка вправо с двумя головками и двойной вертикальной чертой"] # 0x2901 + - "⤂": [t: "левая двойная стрелка с вертикальной чертой"] # 0x2902 + - "⤃": [t: "правая двойная стрелка с вертикальной чертой"] # 0x2903 + - "⤄": [t: "левая-правая двойная стрелка с вертикальной чертой"] # 0x2904 + - "⤅": [t: "стрелка вправо с двумя головками от черты"] # 0x2905 + - "⤆": [t: "левая двойная стрелка от черты"] # 0x2906 + - "⤇": [t: "правая двойная стрелка от черты"] # 0x2907 + - "⤈": [t: "стрелка вниз с горизонтальной чертой"] # 0x2908 + - "⤉": [t: "стрелка вверх с горизонтальной чертой"] # 0x2909 + - "⤊": [t: "тройная стрелка вверх"] # 0x290a + - "⤋": [t: "тройная стрелка вниз"] # 0x290b + - "⤌": [t: "левая двойная штриховая стрелка"] # 0x290c + - "⤍": [t: "правая двойная штриховая стрелка"] # 0x290d + - "⤎": [t: "левая тройная штриховая стрелка"] # 0x290e + - "⤏": [t: "правая тройная штриховая стрелка"] # 0x290f + - "⤐": [t: "стрелка вправо с двумя головками и тройным штрихом"] # 0x2910 + - "⤑": [t: "стрелка вправо с пунктирным стержнем"] # 0x2911 + - "⤒": [t: "стрелка вверх к черте"] # 0x2912 + - "⤓": [t: "стрелка вниз к черте"] # 0x2913 + - "⤔": [t: "стрелка вправо с хвостом и вертикальной чертой"] # 0x2914 + - "⤕": [t: "стрелка вправо с хвостом и двойной вертикальной чертой"] # 0x2915 + - "⤖": [t: "стрелка вправо с двумя головками и хвостом"] # 0x2916 + - "⤗": [t: "стрелка вправо с двумя головками, хвостом и вертикальной чертой"] # 0x2917 + - "⤘": [t: "стрелка вправо с двумя головками, хвостом и двойной вертикальной чертой"] # 0x2918 + - "⤙": [t: "хвост стрелки влево"] # 0x2919 + - "⤚": [t: "хвост стрелки вправо"] # 0x291a + - "⤛": [t: "хвост левой двойной стрелки"] # 0x291b + - "⤜": [t: "хвост правой двойной стрелки"] # 0x291c + - "⤝": [t: "стрелка влево к закрашенному ромбу"] # 0x291d + - "⤞": [t: "стрелка вправо к закрашенному ромбу"] # 0x291e + - "⤟": [t: "стрелка влево от черты к закрашенному ромбу"] # 0x291f + - "⤠": [t: "стрелка вправо от черты к закрашенному ромбу"] # 0x2920 + - "⤡": [t: "стрелка северо-запад и юго-восток"] # 0x2921 + - "⤢": [t: "стрелка северо-восток и юго-запад"] # 0x2922 + - "⤣": [t: "стрелка северо-запад с крючком"] # 0x2923 + - "⤤": [t: "стрелка северо-восток с крючком"] # 0x2924 + - "⤥": [t: "стрелка юго-восток с крючком"] # 0x2925 + - "⤦": [t: "стрелка юго-запад с крючком"] # 0x2926 + - "⤧": [t: "стрелка северо-запад и северо-восток"] # 0x2927 + - "⤨": [t: "стрелка северо-восток и юго-восток"] # 0x2928 + - "⤩": [t: "стрелка юго-восток и юго-запад"] # 0x2929 + - "⤪": [t: "стрелка юго-запад и северо-запад"] # 0x292a + - "⤫": [t: "восходящая диагональ, пересекающая нисходящую диагональ"] # 0x292b + - "⤬": [t: "нисходящая диагональ, пересекающая восходящую диагональ"] # 0x292c + - "⤭": [t: "стрелка юго-восток, пересекающая стрелку северо-восток"] # 0x292d + - "⤮": [t: "стрелка северо-восток, пересекающая стрелку юго-восток"] # 0x292e + - "⤯": [t: "нисходящая диагональ, пересекающая стрелку северо-восток"] # 0x292f + - "⤰": [t: "восходящая диагональ, пересекающая стрелку юго-восток"] # 0x2930 + - "⤱": [t: "стрелка северо-восток, пересекающая стрелку северо-запад"] # 0x2931 + - "⤲": [t: "стрелка северо-запад, пересекающая стрелку северо-восток"] # 0x2932 + - "⤳": [t: "волнистая стрелка, указывающая прямо вправо"] # 0x2933 + - "⤴": [t: "стрелка, указывающая вправо, затем изгибающаяся вверх"] # 0x2934 + - "⤵": [t: "стрелка, указывающая вправо, затем изгибающаяся вниз"] # 0x2935 + - "⤶": [t: "стрелка, указывающая вниз, затем изгибающаяся влево"] # 0x2936 + - "⤷": [t: "стрелка, указывающая вниз, затем изгибающаяся вправо"] # 0x2937 + - "⤸": [t: "круговая стрелка по часовой стрелке по правой стороне дуги"] # 0x2938 + - "⤹": [t: "круговая стрелка против часовой стрелки по левой стороне дуги"] # 0x2939 + - "⤺": [t: "круговая стрелка против часовой стрелки по верхней дуге"] # 0x293a + - "⤻": [t: "круговая стрелка против часовой стрелки по нижней дуге"] # 0x293b + - "⤼": [t: "круговая стрелка по часовой стрелке по верхней дуге с минусом"] # 0x293c + - "⤽": [t: "круговая стрелка против часовой стрелки по верхней дуге с плюсом"] # 0x293d + - "⤾": [t: "нижняя правая полукруговая стрелка по часовой стрелке"] # 0x293e + - "⤿": [t: "нижняя левая полукруговая стрелка против часовой стрелки"] # 0x293f + - "⥀": [t: "круговая стрелка против часовой стрелки по замкнутой окружности"] # 0x2940 + - "⥁": [t: "круговая стрелка по часовой стрелке по замкнутой окружности"] # 0x2941 + - "⥂": [t: "стрелка вправо над короткой стрелкой влево"] # 0x2942 + - "⥃": [t: "стрелка влево над короткой стрелкой вправо"] # 0x2943 + - "⥄": [t: "короткая стрелка вправо над стрелкой влево"] # 0x2944 + - "⥅": [t: "стрелка вправо с плюсом снизу"] # 0x2945 + - "⥆": [t: "стрелка влево с плюсом снизу"] # 0x2946 + - "⥇": [t: "стрелка вправо через x"] # 0x2947 + - "⥈": [t: "стрелка влево-вправо через круг"] # 0x2948 + - "⥉": [t: "стрелка вверх с двумя головками от круга"] # 0x2949 + - "⥊": [t: "левая гарпунная скоба вверх, правая гарпунная скоба вниз"] # 0x294a + - "⥋": [t: "левая гарпунная скоба вниз, правая гарпунная скоба вверх"] # 0x294b + - "⥌": [t: "верхняя гарпунная скоба вправо, нижняя гарпунная скоба влево"] # 0x294c + - "⥍": [t: "верхняя гарпунная скоба влево, нижняя гарпунная скоба вправо"] # 0x294d + - "⥎": [t: "левая гарпунная скоба вверх, правая гарпунная скоба вверх"] # 0x294e + - "⥏": [t: "верхняя гарпунная скоба вправо, нижняя гарпунная скоба вправо"] # 0x294f + - "⥐": [t: "левая гарпунная скоба вниз, правая гарпунная скоба вниз"] # 0x2950 + - "⥑": [t: "верхняя гарпунная скоба влево, нижняя гарпунная скоба влево"] # 0x2951 + - "⥒": [t: "левая гарпунная скоба с бородкой вверх к черте"] # 0x2952 + - "⥓": [t: "правая гарпунная скоба с бородкой вверх к черте"] # 0x2953 + - "⥔": [t: "верхняя гарпунная скоба с бородкой вправо к черте"] # 0x2954 + - "⥕": [t: "нижняя гарпунная скоба с бородкой вправо к черте"] # 0x2955 + - "⥖": [t: "левая гарпунная скоба с бородкой вниз к черте"] # 0x2956 + - "⥗": [t: "правая гарпунная скоба с бородкой вниз к черте"] # 0x2957 + - "⥘": [t: "верхняя гарпунная скоба с бородкой влево к черте"] # 0x2958 + - "⥙": [t: "нижняя гарпунная скоба с бородкой влево к черте"] # 0x2959 + - "⥚": [t: "левая гарпунная скоба с бородкой вверх от черты"] # 0x295a + - "⥛": [t: "правая гарпунная скоба с бородкой вверх от черты"] # 0x295b + - "⥜": [t: "верхняя гарпунная скоба с бородкой вправо от черты"] # 0x295c + - "⥝": [t: "нижняя гарпунная скоба с бородкой вправо от черты"] # 0x295d + - "⥞": [t: "левая гарпунная скоба с бородкой вниз от черты"] # 0x295e + - "⥟": [t: "правая гарпунная скоба с бородкой вниз от черты"] # 0x295f + - "⥠": [t: "верхняя гарпунная скоба с бородкой влево от черты"] # 0x2960 + - "⥡": [t: "нижняя гарпунная скоба с бородкой влево от черты"] # 0x2961 + - "⥢": [t: "левая гарпунная скоба с бородкой вверх над левой гарпунной скобой с бородкой вниз"] # 0x2962 + - "⥣": [t: "верхняя гарпунная скоба с бородкой влево рядом с верхней гарпунной скобой с бородкой вправо"] # 0x2963 + - "⥤": [t: "правая гарпунная скоба с бородкой вверх над правой гарпунной скобой с бородкой вниз"] # 0x2964 + - "⥥": [t: "нижняя гарпунная скоба с бородкой влево рядом с нижней гарпунной скобой с бородкой вправо"] # 0x2965 + - "⥦": [t: "левая гарпунная скоба с бородкой вверх над правой гарпунной скобой с бородкой вверх"] # 0x2966 + - "⥧": [t: "левая гарпунная скоба с бородкой вниз над правой гарпунной скобой с бородкой вниз"] # 0x2967 + - "⥨": [t: "правая гарпунная скоба с бородкой вверх над левой гарпунной скобой с бородкой вверх"] # 0x2968 + - "⥩": [t: "правая гарпунная скоба с бородкой вниз над левой гарпунной скобой с бородкой вниз"] # 0x2969 + - "⥪": [t: "левая гарпунная скоба с бородкой вверх над длинной чертой"] # 0x296a + - "⥫": [t: "левая гарпунная скоба с бородкой вниз под длинной чертой"] # 0x296b + - "⥬": [t: "правая гарпунная скоба с бородкой вверх над длинной чертой"] # 0x296c + - "⥭": [t: "правая гарпунная скоба с бородкой вниз под длинной чертой"] # 0x296d + - "⥮": [t: "верхняя гарпунная скоба с бородкой влево рядом с нижней гарпунной скобой с бородкой вправо"] # 0x296e + - "⥯": [t: "нижняя гарпунная скоба с бородкой влево рядом с верхней гарпунной скобой с бородкой вправо"] # 0x296f + - "⥰": [t: "правая двойная стрелка с закруглённой головкой"] # 0x2970 + - "⥱": [t: "равно над стрелкой вправо"] # 0x2971 + - "⥲": [t: "оператор тильды над стрелкой вправо"] # 0x2972 + - "⥳": [t: "стрелка влево над оператором тильды"] # 0x2973 + - "⥴": [t: "стрелка вправо над оператором тильды"] # 0x2974 + - "⥵": [t: "стрелка вправо над почти равно"] # 0x2975 + - "⥶": [t: "меньше над стрелкой влево"] # 0x2976 + - "⥷": [t: "стрелка влево сквозь знак меньше"] # 0x2977 + - "⥸": [t: "больше над стрелкой вправо"] # 0x2978 + - "⥹": [t: "подмножество над стрелкой вправо"] # 0x2979 + - "⥺": [t: "стрелка влево сквозь подмножество"] # 0x297a + - "⥻": [t: "надмножество над стрелкой влево"] # 0x297b + - "⥼": [t: "левый рыбий хвост"] # 0x297c + - "⥽": [t: "правый рыбий хвост"] # 0x297d + - "⥾": [t: "верхний рыбий хвост"] # 0x297e + - "⥿": [t: "нижний рыбий хвост"] # 0x297f + - "⦀": [t: "тройная вертикальная черта-разделитель"] # 0x2980 + - "⦁": [t: "точка в нотации Z"] # 0x2981 + - "⦂": [t: "двоеточие типа в нотации Z"] # 0x2982 + - "⦃": [t: "левая белая фигурная скобка"] # 0x2983 + - "⦄": [t: "правая белая фигурная скобка"] # 0x2984 + - "⦅": [t: "левая белая круглая скобка"] # 0x2985 + - "⦆": [t: "правая белая круглая скобка"] # 0x2986 + - "⦇": [t: "левая скобка образа в нотации Z"] # 0x2987 + - "⦈": [t: "правая скобка образа в нотации Z"] # 0x2988 + - "⦉": [t: "левая связующая скобка в нотации Z"] # 0x2989 + - "⦊": [t: "правая связующая скобка в нотации Z"] # 0x298a + - "⦋": [t: "левая квадратная скобка с подчёркиванием"] # 0x298b + - "⦌": [t: "правая квадратная скобка с подчёркиванием"] # 0x298c + - "⦍": [t: "левая квадратная скобка с меткой в верхнем углу"] # 0x298d + - "⦎": [t: "правая квадратная скобка с меткой в нижнем углу"] # 0x298e + - "⦏": [t: "левая квадратная скобка с меткой в нижнем углу"] # 0x298f + - "⦐": [t: "правая квадратная скобка с меткой в верхнем углу"] # 0x2990 + - "⦑": [t: "левая угловая скобка с точкой"] # 0x2991 + - "⦒": [t: "правая угловая скобка с точкой"] # 0x2992 + - "⦓": [t: "левая дуговая скобка меньше"] # 0x2993 + - "⦔": [t: "правая дуговая скобка больше"] # 0x2994 + - "⦕": [t: "двойная левая дуговая скобка больше"] # 0x2995 + - "⦖": [t: "двойная правая дуговая скобка меньше"] # 0x2996 + - "⦗": [t: "левая чёрная черепашья скобка"] # 0x2997 + - "⦘": [t: "правая чёрная черепашья скобка"] # 0x2998 + - "⦙": [t: "пунктирная ограда"] # 0x2999 + - "⦚": [t: "вертикальная зигзагообразная линия"] # 0x299a + - "⦛": [t: "измеренный угол, открывающийся влево"] # 0x299b + - "⦜": [t: "прямой угол с квадратом"] # 0x299c + - "⦝": [t: "измеренный прямой угол с точкой"] # 0x299d + - "⦞": [t: "угол с s внутри"] # 0x299e + - "⦟": [t: "острый угол"] # 0x299f + - "⦠": [t: "сферический угол, открывающийся влево"] # 0x29a0 + - "⦡": [t: "сферический угол, открывающийся вверх"] # 0x29a1 + - "⦢": [t: "повёрнутый угол"] # 0x29a2 + - "⦣": [t: "перевёрнутый угол"] # 0x29a3 + - "⦤": [t: "угол с подчёркиванием"] # 0x29a4 + - "⦥": [t: "перевёрнутый угол с подчёркиванием"] # 0x29a5 + - "⦦": [t: "косой угол, открывающийся вверх"] # 0x29a6 + - "⦧": [t: "косой угол, открывающийся вниз"] # 0x29a7 + - "⦨": [t: "измеренный угол с открытым плечом, заканчивающимся стрелкой вверх-вправо"] # 0x29a8 + - "⦩": [t: "измеренный угол с открытым плечом, заканчивающимся стрелкой вверх-влево"] # 0x29a9 + - "⦪": [t: "измеренный угол с открытым плечом, заканчивающимся стрелкой вниз-вправо"] # 0x29aa + - "⦫": [t: "измеренный угол с открытым плечом, заканчивающимся стрелкой вниз-влево"] # 0x29ab + - "⦬": [t: "измеренный угол с открытым плечом, заканчивающимся стрелкой вправо-вверх"] # 0x29ac + - "⦭": [t: "измеренный угол с открытым плечом, заканчивающимся стрелкой влево-вверх"] # 0x29ad + - "⦮": [t: "измеренный угол с открытым плечом, заканчивающимся стрелкой вправо-вниз"] # 0x29ae + - "⦯": [t: "измеренный угол с открытым плечом, заканчивающимся стрелкой влево-вниз"] # 0x29af + - "⦰": [t: "перевёрнутое пустое множество"] # 0x29b0 + - "⦱": [t: "пустое множество с надчеркиванием"] # 0x29b1 + - "⦲": [t: "пустое множество с маленьким кругом сверху"] # 0x29b2 + - "⦳": [t: "пустое множество со стрелкой вправо сверху"] # 0x29b3 + - "⦴": [t: "пустое множество со стрелкой влево сверху"] # 0x29b4 + - "⦵": [t: "круг с горизонтальной чертой"] # 0x29b5 + - "⦶": [t: "вертикальная черта в круге"] # 0x29b6 + - "⦷": [t: "параллельность в круге"] # 0x29b7 + - "⦸": [t: "обратная косая черта в круге"] # 0x29b8 + - "⦹": [t: "перпендикуляр в круге"] # 0x29b9 + - "⦺": [t: "круг, разделённый горизонтальной чертой, верхняя половина разделена вертикальной чертой"] # 0x29ba + - "⦻": [t: "круг с наложенным x"] # 0x29bb + - "⦼": [t: "знак деления в круге, повёрнутый против часовой стрелки"] # 0x29bc + - "⦽": [t: "стрелка вверх через круг"] # 0x29bd + - "⦾": [t: "белая пуля в круге"] # 0x29be + - "⦿": [t: "чёрная пуля в круге"] # 0x29bf + - "⧀": [t: "меньше в круге"] # 0x29c0 + - "⧁": [t: "больше в круге"] # 0x29c1 + - "⧂": [t: "круг с маленьким кругом справа"] # 0x29c2 + - "⧃": [t: "круг с двумя горизонтальными чертами справа"] # 0x29c3 + - "⧄": [t: "квадратная восходящая диагональная косая черта"] # 0x29c4 + - "⧅": [t: "квадратная нисходящая диагональная косая черта"] # 0x29c5 + - "⧆": [t: "квадратная звёздочка"] # 0x29c6 + - "⧇": [t: "квадратный маленький круг"] # 0x29c7 + - "⧈": [t: "квадратный квадрат"] # 0x29c8 + - "⧉": [t: "два соединённых квадрата"] # 0x29c9 + - "⧊": [t: "треугольник с точкой сверху"] # 0x29ca + - "⧋": [t: "треугольник с подчёркиванием"] # 0x29cb + - "⧌": [t: "s в треугольнике"] # 0x29cc + - "⧍": [t: "треугольник с засечками внизу"] # 0x29cd + - "⧎": [t: "прямоугольный треугольник над левым треугольником"] # 0x29ce + - "⧏": [t: "левый треугольник рядом с вертикальной чертой"] # 0x29cf + - "⧐": [t: "вертикальная черта рядом с правым треугольником"] # 0x29d0 + - "⧑": [t: "галстук-бабочка с левой половиной чёрной"] # 0x29d1 + - "⧒": [t: "галстук-бабочка с правой половиной чёрной"] # 0x29d2 + - "⧓": [t: "чёрный галстук-бабочка"] # 0x29d3 + - "⧔": [t: "умножение с левой половиной чёрной"] # 0x29d4 + - "⧕": [t: "умножение с правой половиной чёрной"] # 0x29d5 + - "⧖": [t: "белые песочные часы"] # 0x29d6 + - "⧗": [t: "чёрные песочные часы"] # 0x29d7 + - "⧘": [t: "левая волнистая ограда"] # 0x29d8 + - "⧙": [t: "правая волнистая ограда"] # 0x29d9 + - "⧚": [t: "левая двойная волнистая ограда"] # 0x29da + - "⧛": [t: "правая двойная волнистая ограда"] # 0x29db + - "⧜": [t: "неполная бесконечность"] # 0x29dc + - "⧝": [t: "связь над бесконечностью"] # 0x29dd + - "⧞": [t: "бесконечность, перечёркнутая вертикальной чертой"] # 0x29de + - "⧟": [t: "двустороннее мультиотображение"] # 0x29df + - "⧠": [t: "квадрат с контурным контуром"] # 0x29e0 + - "⧡": [t: "возрастает как"] # 0x29e1 + - "⧢": [t: "перестановочное произведение"] # 0x29e2 + - "⧣": [t: "знак равенства и наклонная параллель"] # 0x29e3 + - "⧤": [t: "знак равенства и наклонная параллель с тильдой сверху"] # 0x29e4 + - "⧥": [t: "тождественно и наклонная параллель"] # 0x29e5 + - "⧦": [t: "gleich stark"] # 0x29e6 + - "⧧": [t: "термодинамический"] # 0x29e7 + - "⧨": [t: "треугольник вершиной вниз с левой половиной чёрной"] # 0x29e8 + - "⧩": [t: "треугольник вершиной вниз с правой половиной чёрной"] # 0x29e9 + - "⧪": [t: "чёрный ромб со стрелкой вниз"] # 0x29ea + - "⧫": [t: "чёрный ромб"] # 0x29eb + - "⧬": [t: "белый круг со стрелкой вниз"] # 0x29ec + - "⧭": [t: "чёрный круг со стрелкой вниз"] # 0x29ed + - "⧮": [t: "белый квадрат с планками погрешностей"] # 0x29ee + - "⧯": [t: "чёрный квадрат с планками погрешностей"] # 0x29ef + - "⧰": [t: "белый ромб с планками погрешностей"] # 0x29f0 + - "⧱": [t: "чёрный ромб с планками погрешностей"] # 0x29f1 + - "⧲": [t: "белый круг с планками погрешностей"] # 0x29f2 + - "⧳": [t: "чёрный круг с планками погрешностей"] # 0x29f3 + - "⧴": [t: "задержка правила"] # 0x29f4 + - "⧵": [t: "оператор обратной косой черты"] # 0x29f5 + - "⧶": [t: "косая черта с надчеркиванием"] # 0x29f6 + - "⧷": [t: "обратная косая черта с горизонтальной чертой"] # 0x29f7 + - "⧸": [t: "большая косая черта"] # 0x29f8 + - "⧹": [t: "большая обратная косая черта"] # 0x29f9 + - "⧺": [t: "двойной плюс"] # 0x29fa + - "⧻": [t: "тройной плюс"] # 0x29fb + - "⧼": [t: "левая изогнутая угловая скобка"] # 0x29fc + - "⧽": [t: "правая изогнутая угловая скобка"] # 0x29fd + - "⧾": [t: "tiny"] # 0x29fe + - "⧿": [t: "miny"] # 0x29ff + - "⨀": [t: "оператор точки в круге"] # 0x2a00 + - "⨁": [t: "оператор плюса в круге"] # 0x2a01 + - "⨂": [t: "оператор умножения в круге"] # 0x2a02 + - "⨃": [t: "оператор объединения с точкой"] # 0x2a03 + - "⨄": [t: "оператор объединения с плюсом"] # 0x2a04 + - "⨅": [t: "оператор квадратного пересечения"] # 0x2a05 + - "⨆": [t: "оператор квадратного объединения"] # 0x2a06 + - "⨇": [t: "оператор двух логических и"] # 0x2a07 + - "⨈": [t: "оператор двух логических или"] # 0x2a08 + - "⨉": [t: "оператор умножения"] # 0x2a09 + - "⨊": [t: "сумма по модулю два"] # 0x2a0a + - "⨋": [t: "сумма с интегралом"] # 0x2a0b + - "⨌": [t: "оператор четверного интеграла"] # 0x2a0c + - "⨍": [t: "интеграл в смысле главного значения"] # 0x2a0d + - "⨎": [t: "интеграл с двойной чертой"] # 0x2a0e + - "⨏": [t: "средний интеграл с косой чертой"] # 0x2a0f + - "⨐": [t: "функция циркуляции"] # 0x2a10 + - "⨑": [t: "интегрирование против часовой стрелки"] # 0x2a11 + - "⨒": [t: "интегрирование по линии с прямоугольным обходом полюса"] # 0x2a12 + - "⨓": [t: "интегрирование по линии с полукруглым обходом полюса"] # 0x2a13 + - "⨔": [t: "интегрирование по линии без включения полюса"] # 0x2a14 + - "⨕": [t: "оператор интеграла вокруг точки"] # 0x2a15 + - "⨖": [t: "оператор кватернионного интеграла"] # 0x2a16 + - "⨗": [t: "интеграл со стрелкой влево с крючком"] # 0x2a17 + - "⨘": [t: "интеграл со знаком умножения"] # 0x2a18 + - "⨙": [t: "интеграл с пересечением"] # 0x2a19 + - "⨚": [t: "интеграл с объединением"] # 0x2a1a + - "⨛": [t: "интеграл с надчеркиванием"] # 0x2a1b + - "⨜": [t: "интеграл с подчеркиванием"] # 0x2a1c + - "⨝": [t: "соединение"] # 0x2a1d + - "⨞": [t: "большой левый треугольный оператор"] # 0x2a1e + - "⨟": [t: "композиция схемы в нотации Z"] # 0x2a1f + - "⨠": [t: "передача схемы в нотации Z"] # 0x2a20 + - "⨡": [t: "проекция схемы в нотации Z"] # 0x2a21 + - "⨢": [t: "знак плюс с кругом сверху"] # 0x2a22 + - "⨣": [t: "знак плюс с циркумфлексом сверху"] # 0x2a23 + - "⨤": [t: "знак плюс с тильдой сверху"] # 0x2a24 + - "⨥": [t: "знак плюс с точкой снизу"] # 0x2a25 + - "⨦": [t: "знак плюс с тильдой снизу"] # 0x2a26 + - "⨧": [t: "знак плюс с индексом два"] # 0x2a27 + - "⨨": [t: "знак плюс с чёрным треугольником"] # 0x2a28 + - "⨩": [t: "знак минус с запятой сверху"] # 0x2a29 + - "⨪": [t: "знак минус с точкой снизу"] # 0x2a2a + - "⨫": [t: "знак минус с нисходящими точками"] # 0x2a2b + - "⨬": [t: "знак минус с восходящими точками"] # 0x2a2c + - "⨭": [t: "знак плюс в левом полукруге"] # 0x2a2d + - "⨮": [t: "знак плюс в правом полукруге"] # 0x2a2e + - "⨯": # 0x2a2f - test: if: "$Verbosity='Terse'" - then: [t: "крест"] # (en: 'cross', google translation) - else: [t: "кросс -продукт"] # (en: 'cross product', google translation) - - "⨰": [t: "знак умножения с точкой выше"] # 0x2a30 (en: 'multiplication sign with dot above', google translation) - - "⨱": [t: "знак умножения с помощью подножия"] # 0x2a31 (en: 'multiplication sign with underbar', google translation) - - "⨲": [t: "семидажный продукт с нижней частью закрыта"] # 0x2a32 (en: 'semidirect product with bottom closed', google translation) - - "⨳": [t: "разбить продукт"] # 0x2a33 (en: 'smash product', google translation) - - "⨴": [t: "знак умножения в левом половине круга"] # 0x2a34 (en: 'multiplication sign in left half circle', google translation) - - "⨵": [t: "умножение подписывает правый половину круга"] # 0x2a35 (en: 'multiplication sign in right half circle', google translation) - - "⨶": [t: "кольвный знак умножения с акцентом на округ"] # 0x2a36 (en: 'circled multiplication sign with circumflex accent', google translation) - - "⨷": [t: "знак умножения в двойном круге"] # 0x2a37 (en: 'multiplication sign in double circle', google translation) - - "⨸": [t: "знак окружающего дивизиона"] # 0x2a38 (en: 'circled division sign', google translation) - - "⨹": [t: "плюс знак в треугольнике"] # 0x2a39 (en: 'plus sign in triangle', google translation) - - "⨺": [t: "минус знак в треугольнике"] # 0x2a3a (en: 'minus sign in triangle', google translation) - - "⨻": [t: "знак умножения в треугольнике"] # 0x2a3b (en: 'multiplication sign in triangle', google translation) - - "⨼": [t: "интерьер продукт"] # 0x2a3c (en: 'interior product', google translation) - - "⨽": [t: "ремьер внутренний продукт"] # 0x2a3d (en: 'righthand interior product', google translation) - - "⨾": [t: "z обозначения реляционного состава"] # 0x2a3e (en: 'z notation relational composition', google translation) - - "⨿": [t: "объединение или совместный"] # 0x2a3f (en: 'amalgamation or coproduct', google translation) - - "⩀": [t: "пересечение с точкой"] # 0x2a40 (en: 'intersection with dot', google translation) - - "⩁": [t: "союз с минус знак"] # 0x2a41 (en: 'union with minus sign', google translation) - - "⩂": [t: "союз с overbar"] # 0x2a42 (en: 'union with overbar', google translation) - - "⩃": [t: "пересечение с overbar"] # 0x2a43 (en: 'intersection with overbar', google translation) - - "⩄": [t: "пересечение с логическим и"] # 0x2a44 (en: 'intersection with logical and', google translation) - - "⩅": [t: "союз с логическим или"] # 0x2a45 (en: 'union with logical or', google translation) - - "⩆": [t: "союз выше пересечения"] # 0x2a46 (en: 'union above intersection', google translation) - - "⩇": [t: "пересечение над союзом"] # 0x2a47 (en: 'intersection above union', google translation) - - "⩈": [t: "союз над решеткой над перекрестком"] # 0x2a48 (en: 'union above bar above intersection', google translation) - - "⩉": [t: "пересечение над решеткой над союзом"] # 0x2a49 (en: 'intersection above bar above union', google translation) - - "⩊": [t: "союз рядом и присоединился к профсоюзам"] # 0x2a4a (en: 'union beside and joined with union', google translation) - - "⩋": [t: "пересечение рядом и соединяется с перекрестком"] # 0x2a4b (en: 'intersection beside and joined with intersection', google translation) - - "⩌": [t: "закрыт союз со скидками"] # 0x2a4c (en: 'closed union with serifs', google translation) - - "⩍": [t: "закрыто пересечение с засечками"] # 0x2a4d (en: 'closed intersection with serifs', google translation) - - "⩎": [t: "двойной квадратный перекресток"] # 0x2a4e (en: 'double square intersection', google translation) - - "⩏": [t: "двойной квадратный союз"] # 0x2a4f (en: 'double square union', google translation) - - "⩐": [t: "закрыт союз с засечками и разбейте продукт"] # 0x2a50 (en: 'closed union with serifs and smash product', google translation) - - "⩑": [t: "логично и с точкой выше"] # 0x2a51 (en: 'logical and with dot above', google translation) - - "⩒": [t: "логично или с точкой выше"] # 0x2a52 (en: 'logical or with dot above', google translation) - - "⩓": [t: "двойной логический и"] # 0x2a53 (en: 'double logical and', google translation) - - "⩔": [t: "двойной логический или"] # 0x2a54 (en: 'double logical or', google translation) - - "⩕": [t: "два пересекающихся логических и"] # 0x2a55 (en: 'two intersecting logical and', google translation) - - "⩖": [t: "два пересекающихся логических или"] # 0x2a56 (en: 'two intersecting logical or', google translation) - - "⩗": [t: "наклонение большого или"] # 0x2a57 (en: 'sloping large or', google translation) - - "⩘": [t: "наклонение большого и"] # 0x2a58 (en: 'sloping large and', google translation) - - "⩙": [t: "логичный или перекрывающийся логический и"] # 0x2a59 (en: 'logical or overlapping logical and', google translation) - - "⩚": [t: "логично и со средним стеблем"] # 0x2a5a (en: 'logical and with middle stem', google translation) - - "⩛": [t: "логично или со средним стеблем"] # 0x2a5b (en: 'logical or with middle stem', google translation) - - "⩜": [t: "логично и с горизонтальной чертой"] # 0x2a5c (en: 'logical and with horizontal dash', google translation) - - "⩝": [t: "логично или с горизонтальной чертой"] # 0x2a5d (en: 'logical or with horizontal dash', google translation) - - "⩞": [t: "логично и с двойной верхней"] # 0x2a5e (en: 'logical and with double overbar', google translation) - - "⩟": [t: "логично и с андербаром"] # 0x2a5f (en: 'logical and with underbar', google translation) - - "⩠": [t: "логично и с двойной подношкой"] # 0x2a60 (en: 'logical and with double underbar', google translation) - - "⩡": [t: "маленький век с верхней частью"] # 0x2a61 (en: 'small vee with underbar', google translation) - - "⩢": [t: "логично или с двойной верхней"] # 0x2a62 (en: 'logical or with double overbar', google translation) - - "⩣": [t: "логично или с двойной подношкой"] # 0x2a63 (en: 'logical or with double underbar', google translation) - - "⩤": [t: "z обозначения домена антиоритет"] # 0x2a64 (en: 'z notation domain antirestriction', google translation) - - "⩥": [t: "z обозначения диапазона антиреализации"] # 0x2a65 (en: 'z notation range antirestriction', google translation) - - "⩦": [t: "соответствует знаку с точкой ниже"] # 0x2a66 (en: 'equals sign with dot below', google translation) - - "⩧": [t: "идентично dot выше"] # 0x2a67 (en: 'identical with dot above', google translation) - - "⩨": [t: "тройной горизонтальный стержень с двойным вертикальным ходом"] # 0x2a68 (en: 'triple horizontal bar with double vertical stroke', google translation) - - "⩩": [t: "тройной горизонтальный бар с тройным вертикальным ходом"] # 0x2a69 (en: 'triple horizontal bar with triple vertical stroke', google translation) - - "⩪": [t: "оператор тильде с точкой выше"] # 0x2a6a (en: 'tilde operator with dot above', google translation) - - "⩫": [t: "оператор тильде с ростами точками"] # 0x2a6b (en: 'tilde operator with rising dots', google translation) - - "⩬": [t: "аналогично минус аналогично"] # 0x2a6c (en: 'similar minus similar', google translation) - - "⩭": [t: "конгруэнтен с точкой выше"] # 0x2a6d (en: 'congruent with dot above', google translation) - - "⩮": [t: "равняется звездочке"] # 0x2a6e (en: 'equals with asterisk', google translation) - - "⩯": [t: "почти равен с обходом акцента"] # 0x2a6f (en: 'almost equal to with circumflex accent', google translation) - - "⩰": [t: "приблизительно равен или равен"] # 0x2a70 (en: 'approximately equal to or equal to', google translation) - - "⩱": [t: "равна знаку выше плюс знак"] # 0x2a71 (en: 'equals sign above plus sign', google translation) - - "⩲": [t: "плюс знак выше равняется знаку"] # 0x2a72 (en: 'plus sign above equals sign', google translation) - - "⩳": [t: "соответствует знаку над оператором тильды"] # 0x2a73 (en: 'equals sign above tilde operator', google translation) - - "⩴": [t: "двойная толстая кишка равна"] # 0x2a74 (en: 'double colon equal', google translation) - - "⩵": [t: "два последовательных признаков"] # 0x2a75 (en: 'two consecutive equals signs', google translation) - - "⩶": [t: "три последовательных признаков"] # 0x2a76 (en: 'three consecutive equals signs', google translation) - - "⩷": [t: "соответствует знаку с двумя точками выше и две точки ниже"] # 0x2a77 (en: 'equals sign with two dots above and two dots below', google translation) - - "⩸": [t: "эквивалент с четырьмя точками выше"] # 0x2a78 (en: 'equivalent with four dots above', google translation) - - "⩹": [t: "меньше, чем с кругом внутри"] # 0x2a79 (en: 'less than with circle inside', google translation) - - "⩺": [t: "больше, чем с кругом внутри"] # 0x2a7a (en: 'greater than with circle inside', google translation) - - "⩻": [t: "меньше, чем с вопросом выше"] # 0x2a7b (en: 'less than with question mark above', google translation) - - "⩼": [t: "больше, чем с вопросительным знаком выше"] # 0x2a7c (en: 'greater than with question mark above', google translation) - - "⩽": [t: "меньше, чем или наклонен равен"] # 0x2a7d (en: 'less than or slanted equal to', google translation) - - "⩾": [t: "больше, чем или наклонен равен"] # 0x2a7e (en: 'greater than or slanted equal to', google translation) - - "⩿": [t: "меньше, чем или наклонен, равный точкой внутри"] # 0x2a7f (en: 'less than or slanted equal to with dot inside', google translation) - - "⪀": [t: "больше, чем или наклонен, равный точкой внутри"] # 0x2a80 (en: 'greater than or slanted equal to with dot inside', google translation) - - "⪁": [t: "меньше, чем или наклонен, равный точкой выше"] # 0x2a81 (en: 'less than or slanted equal to with dot above', google translation) - - "⪂": [t: "больше, чем или наклонен, равным точке выше"] # 0x2a82 (en: 'greater than or slanted equal to with dot above', google translation) - - "⪃": [t: "меньше, чем или наклонен, равный точкой вверху справа"] # 0x2a83 (en: 'less than or slanted equal to with dot above right', google translation) - - "⪄": [t: "больше, чем или наклонен, равный точкой вверху слева"] # 0x2a84 (en: 'greater than or slanted equal to with dot above left', google translation) - - "⪅": [t: "меньше или приблизительно"] # 0x2a85 (en: 'less than or approximate', google translation) - - "⪆": [t: "больше или приблизительно"] # 0x2a86 (en: 'greater than or approximate', google translation) - - "⪇": [t: "меньше, чем и одна строка не равна"] # 0x2a87 (en: 'less than and single line not equal to', google translation) - - "⪈": [t: "больше и единственная линия не равна"] # 0x2a88 (en: 'greater than and single line not equal to', google translation) - - "⪉": [t: "меньше, чем и не приблизительно"] # 0x2a89 (en: 'less than and not approximate', google translation) - - "⪊": [t: "больше, чем и не приблизительно"] # 0x2a8a (en: 'greater than and not approximate', google translation) - - "⪋": [t: "меньше, чем выше двойной линии, равна выше, чем"] # 0x2a8b (en: 'less than above double line equal above greater than', google translation) - - "⪌": [t: "больше, чем выше, двойная линия равна выше меньше, чем"] # 0x2a8c (en: 'greater than above double line equal above less than', google translation) - - "⪍": [t: "меньше, чем выше, похожие или равные"] # 0x2a8d (en: 'less than above similar or equal', google translation) - - "⪎": [t: "больше, чем выше, похожие или равные"] # 0x2a8e (en: 'greater than above similar or equal', google translation) - - "⪏": [t: "меньше, чем выше, больше выше, чем"] # 0x2a8f (en: 'less than above similar above greater than', google translation) - - "⪐": [t: "больше, чем выше, подобно выше меньше, чем"] # 0x2a90 (en: 'greater than above similar above less than', google translation) - - "⪑": [t: "меньше, чем выше, чем выше, двойная линия равна"] # 0x2a91 (en: 'less than above greater than above double line equal', google translation) - - "⪒": [t: "больше, чем выше, меньше, чем выше, двойная линия равна"] # 0x2a92 (en: 'greater than above less than above double line equal', google translation) - - "⪓": [t: "меньше, чем выше наклонного, равного выше выше, чем выше, наклонное, равное"] # 0x2a93 (en: 'less than above slanted equal above greater than above slanted equal', google translation) - - "⪔": [t: "больше, чем выше, наклонное, равное выше, чем выше выше, наклоненного равных"] # 0x2a94 (en: 'greater than above slanted equal above less than above slanted equal', google translation) - - "⪕": [t: "наклонен равен или меньше"] # 0x2a95 (en: 'slanted equal to or less than', google translation) - - "⪖": [t: "наклонен равен или больше"] # 0x2a96 (en: 'slanted equal to or greater than', google translation) - - "⪗": [t: "наклонен равен или меньше, чем с точкой внутри"] # 0x2a97 (en: 'slanted equal to or less than with dot inside', google translation) - - "⪘": [t: "наклонен равен или больше, чем с точкой внутри"] # 0x2a98 (en: 'slanted equal to or greater than with dot inside', google translation) - - "⪙": [t: "двойная линия, равная или меньше"] # 0x2a99 (en: 'double line equal to or less than', google translation) - - "⪚": [t: "двойная линия, равная или больше"] # 0x2a9a (en: 'double line equal to or greater than', google translation) - - "⪛": [t: "двойная линия наклонена, равна или меньше"] # 0x2a9b (en: 'double line slanted equal to or less than', google translation) - - "⪜": [t: "двойная линия наклонена, равна или больше"] # 0x2a9c (en: 'double line slanted equal to or greater than', google translation) - - "⪝": [t: "аналогично или меньше"] # 0x2a9d (en: 'similar or less than', google translation) - - "⪞": [t: "аналогично или больше, чем"] # 0x2a9e (en: 'similar or greater than', google translation) - - "⪟": [t: "аналогично выше, чем выше, равна знаку"] # 0x2a9f (en: 'similar above less than above equals sign', google translation) - - "⪠": [t: "аналогично выше, чем выше, равна знаку"] # 0x2aa0 (en: 'similar above greater than above equals sign', google translation) - - "⪡": [t: "двойной вложенной меньше, чем"] # 0x2aa1 (en: 'double nested less than', google translation) - - "⪢": [t: "двойной вложенной больше, чем"] # 0x2aa2 (en: 'double nested greater than', google translation) - - "⪣": [t: "двойной вложенной меньше, чем с поднятой"] # 0x2aa3 (en: 'double nested less than with underbar', google translation) - - "⪤": [t: "больше, чем перекрывание меньше, чем"] # 0x2aa4 (en: 'greater than overlapping less than', google translation) - - "⪥": [t: "больше, чем помимо меньше"] # 0x2aa5 (en: 'greater than beside less than', google translation) - - "⪦": [t: "менее, чем закрыто по кривой"] # 0x2aa6 (en: 'less than closed by curve', google translation) - - "⪧": [t: "больше, чем закрыто кривой"] # 0x2aa7 (en: 'greater than closed by curve', google translation) - - "⪨": [t: "менее, чем закрыто кривой выше наклонной равной"] # 0x2aa8 (en: 'less than closed by curve above slanted equal', google translation) - - "⪩": [t: "больше, чем закрыто кривой выше наклонного равного"] # 0x2aa9 (en: 'greater than closed by curve above slanted equal', google translation) - - "⪪": [t: "меньше, чем"] # 0x2aaa (en: 'smaller than', google translation) - - "⪫": [t: "больше, чем"] # 0x2aab (en: 'larger than', google translation) - - "⪬": [t: "меньше, чем или равно"] # 0x2aac (en: 'smaller than or equal to', google translation) - - "⪭": [t: "больше или равного"] # 0x2aad (en: 'larger than or equal to', google translation) - - "⪮": [t: "равняется знаку с ухабкой выше"] # 0x2aae (en: 'equals sign with bumpy above', google translation) - - "⪯": [t: "предшествующее выше одной линии равняется знаку"] # 0x2aaf (en: 'precedes above single line equals sign', google translation) - - "⪰": [t: "успех выше одной линии, равным знаку"] # 0x2ab0 (en: 'succeeds above single line equals sign', google translation) - - "⪱": [t: "предшествует над одной линией не равна"] # 0x2ab1 (en: 'precedes above single line not equal to', google translation) - - "⪲": [t: "преуспевает над одной линией не равна"] # 0x2ab2 (en: 'succeeds above single line not equal to', google translation) - - "⪳": [t: "предыдущие выше равны знака"] # 0x2ab3 (en: 'precedes above equals sign', google translation) - - "⪴": [t: "успех выше равняется знаку"] # 0x2ab4 (en: 'succeeds above equals sign', google translation) - - "⪵": [t: "предшествует выше, а не равно"] # 0x2ab5 (en: 'precedes above not equal to', google translation) - - "⪶": [t: "преуспевает выше не равных"] # 0x2ab6 (en: 'succeeds above not equal to', google translation) - - "⪷": [t: "предшествует выше почти равного"] # 0x2ab7 (en: 'precedes above almost equal to', google translation) - - "⪸": [t: "превышает почти равные"] # 0x2ab8 (en: 'succeeds above almost equal to', google translation) - - "⪹": [t: "предшествует выше почти равных"] # 0x2ab9 (en: 'precedes above not almost equal to', google translation) - - "⪺": [t: "преуспевает выше почти равным"] # 0x2aba (en: 'succeeds above not almost equal to', google translation) - - "⪻": [t: "двойной предшествующий"] # 0x2abb (en: 'double precedes', google translation) - - "⪼": [t: "двойной успех"] # 0x2abc (en: 'double succeeds', google translation) - - "⪽": [t: "подмножество с точкой"] # 0x2abd (en: 'subset with dot', google translation) - - "⪾": [t: "суперсет с точкой"] # 0x2abe (en: 'superset with dot', google translation) - - "⪿": [t: "подмножество с плюсом знаком ниже"] # 0x2abf (en: 'subset with plus sign below', google translation) - - "⫀": [t: "superset с плюсом знаком ниже"] # 0x2ac0 (en: 'superset with plus sign below', google translation) - - "⫁": [t: "подмножество с указанием умножения ниже"] # 0x2ac1 (en: 'subset with multiplication sign below', google translation) - - "⫂": [t: "суперсет с знаком умножения ниже"] # 0x2ac2 (en: 'superset with multiplication sign below', google translation) - - "⫃": [t: "подмножество или равное точке выше"] # 0x2ac3 (en: 'subset of or equal to with dot above', google translation) - - "⫄": [t: "суперсет или равный с точкой выше"] # 0x2ac4 (en: 'superset of or equal to with dot above', google translation) - - "⫅": [t: "подмножество вышеупомянутого знака"] # 0x2ac5 (en: 'subset of above equals sign', google translation) - - "⫆": [t: "суперсет выше, равным знаку"] # 0x2ac6 (en: 'superset of above equals sign', google translation) - - "⫇": [t: "подмножество вышеупомянутого оператора тильды"] # 0x2ac7 (en: 'subset of above tilde operator', google translation) - - "⫈": [t: "суперсет выше оператора тильде"] # 0x2ac8 (en: 'superset of above tilde operator', google translation) - - "⫉": [t: "подмножество выше почти равного"] # 0x2ac9 (en: 'subset of above almost equal to', google translation) - - "⫊": [t: "суперсет выше почти равный"] # 0x2aca (en: 'superset of above almost equal to', google translation) - - "⫋": [t: "подмножество выше не равное"] # 0x2acb (en: 'subset above not equal to', google translation) - - "⫌": [t: "суперсет выше не равен"] # 0x2acc (en: 'superset of above not equal to', google translation) - - "⫍": [t: "квадратный левый оператор открытой коробки"] # 0x2acd (en: 'square left open box operator', google translation) - - "⫎": [t: "квадратный правый оператор открытой коробки"] # 0x2ace (en: 'square right open box operator', google translation) - - "⫏": [t: "закрытый подмножество"] # 0x2acf (en: 'closed subset', google translation) - - "⫐": [t: "закрытый суперсет"] # 0x2ad0 (en: 'closed superset', google translation) - - "⫑": [t: "закрытое подмножество или равное"] # 0x2ad1 (en: 'closed subset or equal to', google translation) - - "⫒": [t: "закрытый суперсет или равен"] # 0x2ad2 (en: 'closed superset or equal to', google translation) - - "⫓": [t: "подмножество над суперсетом"] # 0x2ad3 (en: 'subset above superset', google translation) - - "⫔": [t: "суперсет выше подмножества"] # 0x2ad4 (en: 'superset above subset', google translation) - - "⫕": [t: "подмножество выше подмножества"] # 0x2ad5 (en: 'subset above subset', google translation) - - "⫖": [t: "суперсет над суперсет"] # 0x2ad6 (en: 'superset above superset', google translation) - - "⫗": [t: "суперсет рядом с подмножества"] # 0x2ad7 (en: 'superset beside subset', google translation) - - "⫘": [t: "суперсет рядом и присоединился к dash с подмножеством"] # 0x2ad8 (en: 'superset beside and joined by dash with subset', google translation) - - "⫙": [t: "элемент открытия вниз"] # 0x2ad9 (en: 'element of opening downwards', google translation) - - "⫚": [t: "pitchfork с tee top"] # 0x2ada (en: 'pitchfork with tee top', google translation) - - "⫛": [t: "поперечное перекресток"] # 0x2adb (en: 'transversal intersection', google translation) - - "⫝̸": [t: "разбрызгивание"] # 0x2adc (en: 'forking', google translation) - - "⫝": [t: "не призванное"] # 0x2add (en: 'nonforking', google translation) - - "⫞": [t: "короткий левый притяжение"] # 0x2ade (en: 'short left tack', google translation) - - "⫟": [t: "краткий удар"] # 0x2adf (en: 'short down tack', google translation) - - "⫠": [t: "краткий притяжение"] # 0x2ae0 (en: 'short up tack', google translation) - - "⫡": [t: "перпендикуляр с с"] # 0x2ae1 (en: 'perpendicular with s', google translation) - - "⫢": [t: "вертикальный батончик тройной правый турникет"] # 0x2ae2 (en: 'vertical bar triple right turnstile', google translation) - - "⫣": [t: "двойная вертикальная стержня левая турникета"] # 0x2ae3 (en: 'double vertical bar left turnstile', google translation) - - "⫤": [t: "вертикальный стержень двойной левый турнинель"] # 0x2ae4 (en: 'vertical bar double left turnstile', google translation) - - "⫥": [t: "двойная вертикальная стержня двойной левой турникет"] # 0x2ae5 (en: 'double vertical bar double left turnstile', google translation) - - "⫦": [t: "длинный бросок от левого члена двойной вертикали"] # 0x2ae6 (en: 'long dash from left member of double vertical', google translation) - - "⫧": [t: "краткий удар с overbar"] # 0x2ae7 (en: 'short down tack with overbar', google translation) - - "⫨": [t: "краткий притяжение с помощью верхней части"] # 0x2ae8 (en: 'short up tack with underbar', google translation) - - "⫩": [t: "краткий удар над коротким путем"] # 0x2ae9 (en: 'short up tack above short down tack', google translation) - - "⫪": [t: "двойной удар"] # 0x2aea (en: 'double down tack', google translation) - - "⫫": [t: "удвоить такту"] # 0x2aeb (en: 'double up tack', google translation) - - "⫬": [t: "двойной удар, а не знак"] # 0x2aec (en: 'double stroke not sign', google translation) - - "⫭": [t: "обратный двойной удар, а не знак"] # 0x2aed (en: 'reversed double stroke not sign', google translation) - - "⫮": [t: "не разделяется с обратной слэш"] # 0x2aee (en: 'does not divide with reversed negation slash', google translation) - - "⫯": [t: "вертикальная линия с кругом выше"] # 0x2aef (en: 'vertical line with circle above', google translation) - - "⫰": [t: "вертикальная линия с кругом ниже"] # 0x2af0 (en: 'vertical line with circle below', google translation) - - "⫱": [t: "вниз по кругу ниже"] # 0x2af1 (en: 'down tack with circle below', google translation) - - "⫲": [t: "параллельно с горизонтальным ходом"] # 0x2af2 (en: 'parallel with horizontal stroke', google translation) - - "⫳": [t: "параллельно с оператором тильды"] # 0x2af3 (en: 'parallel with tilde operator', google translation) - - "⫴": [t: "тройная вертикальная бинарная связь"] # 0x2af4 (en: 'triple vertical bar binary relation', google translation) - - "⫵": [t: "тройная вертикальная стержень с горизонтальным ходом"] # 0x2af5 (en: 'triple vertical bar with horizontal stroke', google translation) - - "⫶": [t: "тройной оператор толстой кишки"] # 0x2af6 (en: 'triple colon operator', google translation) - - "⫷": [t: "тройной вложенной меньше, чем"] # 0x2af7 (en: 'triple nested less than', google translation) - - "⫸": [t: "тройной вложенной больше, чем"] # 0x2af8 (en: 'triple nested greater than', google translation) - - "⫹": [t: "двойная линия наклонена меньше или равна"] # 0x2af9 (en: 'double line slanted less than or equal to', google translation) - - "⫺": [t: "двойная линия наклонена больше или равна"] # 0x2afa (en: 'double line slanted greater than or equal to', google translation) - - "⫻": [t: "тройное солидус бинарное отношение"] # 0x2afb (en: 'triple solidus binary relation', google translation) - - "⫼": [t: "большой тройной вертикальный оператор"] # 0x2afc (en: 'large triple vertical bar operator', google translation) - - "⫽": [t: "двойной оператор solidus"] # 0x2afd (en: 'double solidus operator', google translation) - - "⫾": [t: "белый вертикальный бар"] # 0x2afe (en: 'white vertical bar', google translation) - - "⫿": [t: "белый вертикальный бар"] # 0x2aff (en: 'white vertical bar', google translation) - - "⬀": [t: "северо -восточный белый стрела"] # 0x2b00 (en: 'north east white arrow', google translation) - - "⬁": [t: "северо -западный белый стрела"] # 0x2b01 (en: 'north west white arrow', google translation) - - "⬂": [t: "юго -восточная белая стрела"] # 0x2b02 (en: 'south east white arrow', google translation) - - "⬃": [t: "юго -западный белый стрелка"] # 0x2b03 (en: 'south west white arrow', google translation) - - "⬄": [t: "левая правая белая стрелка"] # 0x2b04 (en: 'left right white arrow', google translation) - - "⬅": [t: "левая черная стрела"] # 0x2b05 (en: 'leftwards black arrow', google translation) - - "⬆": [t: "вверх черную стрелу"] # 0x2b06 (en: 'upwards black arrow', google translation) - - "⬇": [t: "вниз черная стрелка"] # 0x2b07 (en: 'downwards black arrow', google translation) - - "⬈": [t: "северо -восточный черная стрелка"] # 0x2b08 (en: 'north east black arrow', google translation) - - "⬉": [t: "северо -западный черная стрелка"] # 0x2b09 (en: 'north west black arrow', google translation) - - "⬊": [t: "юго -восточная черная стрела"] # 0x2b0a (en: 'south east black arrow', google translation) - - "⬋": [t: "юго -западная черная стрела"] # 0x2b0b (en: 'south west black arrow', google translation) - - "⬌": [t: "левая правая черная стрелка"] # 0x2b0c (en: 'left right black arrow', google translation) - - "⬍": [t: "вниз по черной стрелке"] # 0x2b0d (en: 'up down black arrow', google translation) - - "⬎": [t: "стрелка вправо с наконечником вниз"] # 0x2b0e (en: 'rightwards arrow with tip downwards', google translation) - - "⬏": [t: "стрелка вправо с наконечником вверх"] # 0x2b0f (en: 'rightwards arrow with tip upwards', google translation) - - "⬐": [t: "стрелка влево с наконечником вниз"] # 0x2b10 (en: 'leftwards arrow with tip downwards', google translation) - - "⬑": [t: "стрелка влево с наконечником вверх"] # 0x2b11 (en: 'leftwards arrow with tip upwards', google translation) - - "⬒": [t: "квадрат с верхней половиной черной"] # 0x2b12 (en: 'square with top half black', google translation) - - "⬓": [t: "квадрат с нижней половиной черной"] # 0x2b13 (en: 'square with bottom half black', google translation) - - "⬔": [t: "квадрат с верхней правой диагональной половиной черной"] # 0x2b14 (en: 'square with upper right diagonal half black', google translation) - - "⬕": [t: "квадрат с нижней левой диагональной половиной черной"] # 0x2b15 (en: 'square with lower left diagonal half black', google translation) - - "⬖": [t: "алмаз с левой половиной черной"] # 0x2b16 (en: 'diamond with left half black', google translation) - - "⬗": [t: "алмаз с правой половиной черной"] # 0x2b17 (en: 'diamond with right half black', google translation) - - "⬘": [t: "алмаз с верхней половиной черной"] # 0x2b18 (en: 'diamond with top half black', google translation) - - "⬙": [t: "алмаз с нижней половиной черной"] # 0x2b19 (en: 'diamond with bottom half black', google translation) - - "⬚": [t: "коробка"] # 0x2b1a (en: 'box', google translation) - - "⬛": [t: "черный большой квадрат"] # 0x2b1b (en: 'black large square', google translation) - - "⬜": [t: "белый большой квадрат"] # 0x2b1c (en: 'white large square', google translation) - - "⬝": [t: "черный очень маленький квадрат"] # 0x2b1d (en: 'black very small square', google translation) - - "⬞": [t: "белый очень маленький квадрат"] # 0x2b1e (en: 'white very small square', google translation) - - "⬟": [t: "черный пентагон"] # 0x2b1f (en: 'black pentagon', google translation) - - "⬠": [t: "белый пентагон"] # 0x2b20 (en: 'white pentagon', google translation) - - "⬡": [t: "белый шестигранник"] # 0x2b21 (en: 'white hexagon', google translation) - - "⬢": [t: "черный шестигранник"] # 0x2b22 (en: 'black hexagon', google translation) - - "⬣": [t: "горизонтальный черный шестигран"] # 0x2b23 (en: 'horizontal black hexagon', google translation) - - "⬤": [t: "черный большой круг"] # 0x2b24 (en: 'black large circle', google translation) - - "⬥": [t: "черный средний бриллиант"] # 0x2b25 (en: 'black medium diamond', google translation) - - "⬦": [t: "белый средний бриллиант"] # 0x2b26 (en: 'white medium diamond', google translation) - - "⬧": [t: "черный средний роньон"] # 0x2b27 (en: 'black medium lozenge', google translation) - - "⬨": [t: "белый средний роньон"] # 0x2b28 (en: 'white medium lozenge', google translation) - - "⬩": [t: "черный маленький бриллиант"] # 0x2b29 (en: 'black small diamond', google translation) - - "⬪": [t: "черный маленький ронд"] # 0x2b2a (en: 'black small lozenge', google translation) - - "⬫": [t: "белый маленький роньон"] # 0x2b2b (en: 'white small lozenge', google translation) - - "⬬": [t: "черный горизонтальный эллипс"] # 0x2b2c (en: 'black horizontal ellipse', google translation) - - "⬭": [t: "белый горизонтальный эллипс"] # 0x2b2d (en: 'white horizontal ellipse', google translation) - - "⬮": [t: "черный вертикальный эллипс"] # 0x2b2e (en: 'black vertical ellipse', google translation) - - "⬯": [t: "белый вертикальный эллипс"] # 0x2b2f (en: 'white vertical ellipse', google translation) - - "⬰": [t: "левая стрелка с маленьким кругом"] # 0x2b30 (en: 'left arrow with small circle', google translation) - - "⬱": [t: "три левые стрелы"] # 0x2b31 (en: 'three leftwards arrows', google translation) - - "⬲": [t: "левая стрелка с circled plus"] # 0x2b32 (en: 'left arrow with circled plus', google translation) - - "⬳": [t: "длинный левый наносит удар стрелка"] # 0x2b33 (en: 'long leftwards squiggle arrow', google translation) - - "⬴": [t: "слева две головные стрелки с вертикальным ходом"] # 0x2b34 (en: 'leftwards two headed arrow with vertical stroke', google translation) - - "⬵": [t: "слева две головы стрелка с двойным вертикальным ходом"] # 0x2b35 (en: 'leftwards two headed arrow with double vertical stroke', google translation) - - "⬶": [t: "слева две голова стрелы из бара"] # 0x2b36 (en: 'leftwards two headed arrow from bar', google translation) - - "⬷": [t: "слева две головы triple dash arrow"] # 0x2b37 (en: 'leftwards two headed triple dash arrow', google translation) - - "⬸": [t: "стрелка влево с пунктирным стеблем"] # 0x2b38 (en: 'leftwards arrow with dotted stem', google translation) - - "⬹": [t: "стрелка влево с хвостом с вертикальным ходом"] # 0x2b39 (en: 'leftwards arrow with tail with vertical stroke', google translation) - - "⬺": [t: "стрелка влево с двойным вертикальным ходом"] # 0x2b3a (en: 'leftwards arrow with tail with double vertical stroke', google translation) - - "⬻": [t: "слева две головные стрелы с хвостом"] # 0x2b3b (en: 'leftwards two headed arrow with tail', google translation) - - "⬼": [t: "слева две головные стрелки с хвостом с вертикальным ходом"] # 0x2b3c (en: 'leftwards two headed arrow with tail with vertical stroke', google translation) - - "⬽": [t: "влево две головы стрелка с хвостом с двойным вертикальным ходом"] # 0x2b3d (en: 'leftwards two headed arrow with tail with double vertical stroke', google translation) - - "⬾": [t: "стрелка влево через x"] # 0x2b3e (en: 'leftwards arrow through x', google translation) - - "⬿": [t: "волновая стрелка, указывающая прямо влево"] # 0x2b3f (en: 'wave arrow pointing directly left', google translation) - - "⭀": [t: "равен знак над стрелкой влево"] # 0x2b40 (en: 'equals sign above leftwards arrow', google translation) - - "⭁": [t: "обратный оператор тильды над стрелкой левой"] # 0x2b41 (en: 'reverse tilde operator above leftwards arrow', google translation) - - "⭂": [t: "стрелка влево выше обратно почти равна"] # 0x2b42 (en: 'leftwards arrow above reverse almost equal to', google translation) - - "⭃": [t: "стрелка вправо через больше"] # 0x2b43 (en: 'rightwards arrow through greater than', google translation) - - "⭄": [t: "прямо стрелка через суперсет"] # 0x2b44 (en: 'rightwards arrow through superset', google translation) - - "⭅": [t: "левая четырехкратная стрелка"] # 0x2b45 (en: 'leftwards quadruple arrow', google translation) - - "⭆": [t: "прямо четырехкратная стрелка"] # 0x2b46 (en: 'rightwards quadruple arrow', google translation) - - "⭇": [t: "обратный оператор тильды выше стрелы вправо"] # 0x2b47 (en: 'reverse tilde operator above rightwards arrow', google translation) - - "⭈": [t: "стрелка вправо выше обратно почти равна"] # 0x2b48 (en: 'rightwards arrow above reverse almost equal to', google translation) - - "⭉": [t: "оператор тильде над стрелкой левой"] # 0x2b49 (en: 'tilde operator above leftwards arrow', google translation) - - "⭊": [t: "стрелка влево выше почти равна"] # 0x2b4a (en: 'leftwards arrow above almost equal to', google translation) - - "⭋": [t: "стрелка влево над оператором обратной тилды"] # 0x2b4b (en: 'leftwards arrow above reverse tilde operator', google translation) - - "⭌": [t: "стрелка вправо над оператором обратной тилды"] # 0x2b4c (en: 'rightwards arrow above reverse tilde operator', google translation) - - "⭐": [t: "белая средняя звезда"] # 0x2b50 (en: 'white medium star', google translation) - - "⭑": [t: "черная маленькая звезда"] # 0x2b51 (en: 'black small star', google translation) - - "⭒": [t: "белая маленькая звезда"] # 0x2b52 (en: 'white small star', google translation) - - "⭓": [t: "черное правое направление пентагона"] # 0x2b53 (en: 'black right pointing pentagon', google translation) - - "⭔": [t: "белый правый направление пентагона"] # 0x2b54 (en: 'white right pointing pentagon', google translation) - - "⭕": [t: "тяжелый большой круг"] # 0x2b55 (en: 'heavy large circle', google translation) - - "⭖": [t: "тяжелый овал с овальным внутри"] # 0x2b56 (en: 'heavy oval with oval inside', google translation) - - "⭗": [t: "тяжелый круг с кругом внутри"] # 0x2b57 (en: 'heavy circle with circle inside', google translation) - - "⭘": [t: "тяжелый круг"] # 0x2b58 (en: 'heavy circle', google translation) - - "⭙": [t: "тяжелая кружовая сальир"] # 0x2b59 (en: 'heavy circled saltire', google translation) - - "⸀": [t: "маркер подстановки правого угла"] # 0x2e00 (en: 'right angle substitution marker', google translation) - - "⸁": [t: "прямой угол пунктирный маркер замены"] # 0x2e01 (en: 'right angle dotted substitution marker', google translation) - - "⸂": [t: "левая замена кронштейна"] # 0x2e02 (en: 'left substitution bracket', google translation) - - "⸃": [t: "правая замена кронштейна"] # 0x2e03 (en: 'right substitution bracket', google translation) - - "⸄": [t: "левая пунктирная замена кронштейна"] # 0x2e04 (en: 'left dotted substitution bracket', google translation) - - "⸅": [t: "правая пунктирная замена кронштейна"] # 0x2e05 (en: 'right dotted substitution bracket', google translation) - - "⸆": [t: "повышенный маркер интерполяции"] # 0x2e06 (en: 'raised interpolation marker', google translation) - - "⸇": [t: "повышенный пунктированный маркер интерполяции"] # 0x2e07 (en: 'raised dotted interpolation marker', google translation) - - "⸈": [t: "пунктирный маркер маркера транспозиции"] # 0x2e08 (en: 'dotted transposition marker marker', google translation) - - "⸉": [t: "левый транспонированный кронштейн"] # 0x2e09 (en: 'left transposition bracket', google translation) - - "⸊": [t: "правый транспонированный кронштейн"] # 0x2e0a (en: 'right transposition bracket', google translation) - - "⸋": [t: "поднятый квадрат"] # 0x2e0b (en: 'raised square', google translation) - - "⸌": [t: "оставленный поднятый кронштейн упущений"] # 0x2e0c (en: 'left raised omission bracket', google translation) - - "⸍": [t: "правый поднятый кронштейн упущений"] # 0x2e0d (en: 'right raised omission bracket', google translation) - - "⸎": [t: "редакция коронис"] # 0x2e0e (en: 'editorial coronis', google translation) - - "⸏": [t: "параграф"] # 0x2e0f (en: 'paragraphos', google translation) - - "⸐": [t: "разветвленные параграфоры"] # 0x2e10 (en: 'forked paragraphos', google translation) - - "⸑": [t: "обратите вспять разветвленные параграфы"] # 0x2e11 (en: 'reversed forked paragraphos', google translation) - - "⸒": [t: "гиподиастоль"] # 0x2e12 (en: 'hypodiastole', google translation) - - "⸓": [t: "пунктирные обелос"] # 0x2e13 (en: 'dotted obelos', google translation) - - "⸔": [t: "вниз анкоры"] # 0x2e14 (en: 'downwards ancora', google translation) - - "⸕": [t: "вверх анкоры"] # 0x2e15 (en: 'upwards ancora', google translation) - - "⸖": [t: "пунктирный угол правого направления"] # 0x2e16 (en: 'dotted right pointing angle', google translation) - - "⸗": [t: "двойной косой дефис"] # 0x2e17 (en: 'double oblique hyphen', google translation) - - "⸘": [t: "перевернутый межробанг"] # 0x2e18 (en: 'inverted interrobang', google translation) - - "⸙": [t: "палмсб"] # 0x2e19 (en: 'palm branch', google translation) - - "⸚": [t: "дефис с диарезом"] # 0x2e1a (en: 'hyphen with diaeresis', google translation) - - "⸛": [t: "тильде с кольцом выше"] # 0x2e1b (en: 'tilde with ring above', google translation) - - "⸜": [t: "оставил низкий перефразированный кронштейн"] # 0x2e1c (en: 'left low paraphrase bracket', google translation) - - "⸝": [t: "правый низкий перефразированный кронштейн"] # 0x2e1d (en: 'right low paraphrase bracket', google translation) - - "⸞": [t: "тильде с точкой выше"] # 0x2e1e (en: 'tilde with dot above', google translation) - - "⸟": [t: "тильде с точкой ниже"] # 0x2e1f (en: 'tilde with dot below', google translation) - - "⸠": [t: "левая вертикальная прунка с перо"] # 0x2e20 (en: 'left vertical bar with quill', google translation) - - "⸡": [t: "правая вертикальная планка с перо"] # 0x2e21 (en: 'right vertical bar with quill', google translation) - - "⸢": [t: "верх слева половина кронштейна"] # 0x2e22 (en: 'top left half bracket', google translation) - - "⸣": [t: "верхний правый половина кронштейна"] # 0x2e23 (en: 'top right half bracket', google translation) - - "⸤": [t: "внизу левой половины кронштейна"] # 0x2e24 (en: 'bottom left half bracket', google translation) - - "⸥": [t: "внизу правой половины кронштейна"] # 0x2e25 (en: 'bottom right half bracket', google translation) - - "⸦": [t: "слева в сторону u кронштейн"] # 0x2e26 (en: 'left sideways u bracket', google translation) - - "⸧": [t: "прямо сбоку с кронштейном"] # 0x2e27 (en: 'right sideways u bracket', google translation) - - "⸨": [t: "оставлены двойными скобками"] # 0x2e28 (en: 'left double parentheses', google translation) - - "⸩": [t: "правая двойная скобка"] # 0x2e29 (en: 'right double parentheses', google translation) - - "⸪": [t: "две точки за одну точечную пунктуацию"] # 0x2e2a (en: 'two dots over one dot punctuation', google translation) - - "⸫": [t: "одна точка за две точки пунктуации"] # 0x2e2b (en: 'one dot over two dots punctuation', google translation) - - "⸬": [t: "квадрат четыре точечных пунктуации"] # 0x2e2c (en: 'squared four dot punctuation', google translation) - - "⸭": [t: "пять точечных знаков"] # 0x2e2d (en: 'five dot mark', google translation) - - "⸮": [t: "обратный вопрос"] # 0x2e2e (en: 'reversed question mark', google translation) - - "ⸯ": [t: "вертикальная тильда"] # 0x2e2f (en: 'vertical tilde', google translation) - - "⸰": [t: "кольцевая точка"] # 0x2e30 (en: 'ring point', google translation) - - "⸱": [t: "слово сепаратор средняя точка"] # 0x2e31 (en: 'word separator middle dot', google translation) - - "⸲": [t: "повернулся запятой"] # 0x2e32 (en: 'turned comma', google translation) - - "⸳": [t: "повышенная точка"] # 0x2e33 (en: 'raised dot', google translation) - - "⸴": [t: "поднятый запятой"] # 0x2e34 (en: 'raised comma', google translation) - - "⸵": [t: "стал полуколоном"] # 0x2e35 (en: 'turned semicolon', google translation) - - "⸶": [t: "кинжал с левым охраной"] # 0x2e36 (en: 'dagger with left guard', google translation) - - "⸷": [t: "кинжал с правой охраной"] # 0x2e37 (en: 'dagger with right guard', google translation) - - "⸸": [t: "стал кинжалом"] # 0x2e38 (en: 'turned dagger', google translation) - - "⸹": [t: "знак верхней половины секции"] # 0x2e39 (en: 'top half section sign', google translation) - - "⸺": [t: "два дэш"] # 0x2e3a (en: 'two em dash', google translation) - - "⸻": [t: "три дэш"] # 0x2e3b (en: 'three em dash', google translation) - - "〃": [t: "то же самое"] # 0x3003 (en: 'ditto mark', google translation) - - "〈": [t: "левый угловой кронштейн"] # 0x3008 (en: 'left angle bracket', google translation) - - "〉": [t: "правый угловой кронштейн"] # 0x3009 (en: 'right angle bracket', google translation) - - "《": [t: "левый двухугольный кронштейн"] # 0x300a (en: 'left double angle bracket', google translation) - - "》": [t: "правый двойной угловой кронштейн"] # 0x300b (en: 'right double angle bracket', google translation) - - "「": [t: "левый угловой кронштейн"] # 0x300c (en: 'left corner bracket', google translation) - - "」": [t: "правый угловой кронштейн"] # 0x300d (en: 'right corner bracket', google translation) - - "『": [t: "левый белый угловой кронштейн"] # 0x300e (en: 'left white corner bracket', google translation) - - "』": [t: "правый белый угловой кронштейн"] # 0x300f (en: 'right white corner bracket', google translation) - - "【": [t: "левый черный линзоулярный кронштейн"] # 0x3010 (en: 'left black lenticular bracket', google translation) - - "】": [t: "правый черный линзоушковой кронштейн"] # 0x3011 (en: 'right black lenticular bracket', google translation) - - "〔": [t: "левая кронштейн с черепахой"] # 0x3014 (en: 'left tortoise shell bracket', google translation) - - "〕": [t: "правая черепаховая оболочка"] # 0x3015 (en: 'right tortoise shell bracket', google translation) - - "〖": [t: "левый белый линзоушковый кронштейн"] # 0x3016 (en: 'left white lenticular bracket', google translation) - - "〗": [t: "правый белый линзо -линзовый кронштейн"] # 0x3017 (en: 'right white lenticular bracket', google translation) - - "〘": [t: "оставил белую черепаховую скорлупу"] # 0x3018 (en: 'left white tortoise shell bracket', google translation) - - "〙": [t: "правый белый кронштейн с черепахой"] # 0x3019 (en: 'right white tortoise shell bracket', google translation) - - "〚": [t: "левый белый квадратный кронштейн"] # 0x301a (en: 'left white square bracket', google translation) - - "〛": [t: "правый белый квадратный кронштейн"] # 0x301b (en: 'right white square bracket', google translation) - - "〜": [t: "волновая черта"] # 0x301c (en: 'wave dash', google translation) - - "〰": [t: "wavy dash"] # 0x3030 (google translation) - - "㉈": [t: "обернут номер десять на черном квадрате"] # 0x3248 (en: 'circled number ten on black square', google translation) - - "㉉": [t: "обернут номер двадцать на черной площади"] # 0x3249 (en: 'circled number twenty on black square', google translation) - - "㉊": [t: "обернут номер тридцать на черном квадрате"] # 0x324a (en: 'circled number thirty on black square', google translation) - - "㉋": [t: "обернутое число сорок на черных площади"] # 0x324b (en: 'circled number forty on blacks square', google translation) - - "㉌": [t: "обернут номер пятьдесят на черной площади"] # 0x324c (en: 'circled number fifty on black square', google translation) - - "㉍": [t: "обернут номер шестьдесят на черной площади"] # 0x324d (en: 'circled number sixty on black square', google translation) - - "㉎": [t: "кругет номер семьдесят на черной площади"] # 0x324e (en: 'circled number seventy on black square', google translation) - - "㉏": [t: "обернутый номер на черном квадрате"] # 0x324f (en: 'circled number eighty on black square', google translation) - - "㉑": [t: "обернут номер двадцать один"] # 0x3251 (en: 'circled number twenty one', google translation) - - "㉒": [t: "кругл номер двадцать два"] # 0x3252 (en: 'circled number twenty two', google translation) - - "㉓": [t: "кругл номер двадцать три"] # 0x3253 (en: 'circled number twenty three', google translation) - - "㉔": [t: "кругл номер двадцать четыре"] # 0x3254 (en: 'circled number twenty four', google translation) - - "㉕": [t: "обернут номер двадцать пять"] # 0x3255 (en: 'circled number twenty five', google translation) - - "㉖": [t: "обернут номер двадцать шесть"] # 0x3256 (en: 'circled number twenty six', google translation) - - "㉗": [t: "обернут номер двадцать семь"] # 0x3257 (en: 'circled number twenty seven', google translation) - - "㉘": [t: "обернут номер двадцать в"] # 0x3258 (en: 'circled number twenty eight', google translation) - - "㉙": [t: "обернуто номером двадцать девять"] # 0x3259 (en: 'circled number twenty nine', google translation) - - "㉚": [t: "кружит номер тридцать"] # 0x325a (en: 'circled number thirty', google translation) - - "㉛": [t: "кругл номер тридцать"] # 0x325b (en: 'circled number thirty one', google translation) - - "㉜": [t: "кругет номер тридцать два"] # 0x325c (en: 'circled number thirty two', google translation) - - "㉝": [t: "кругл номер тридцать три"] # 0x325d (en: 'circled number thirty three', google translation) - - "㉞": [t: "кругл номер тридцать четыре"] # 0x325e (en: 'circled number thirty four', google translation) - - "㉟": [t: "обернут номер тридцать пять"] # 0x325f (en: 'circled number thirty five', google translation) - - "㊱": [t: "обернут номер тридцать шесть"] # 0x32b1 (en: 'circled number thirty six', google translation) - - "㋌": [t: "меркурий"] # 0x32cc (en: 'mercury', google translation) - - "㋍": [t: "ergs"] # 0x32cd (google translation) - - "㋎": [t: "электронные вольт"] # 0x32ce (en: 'electron volts', google translation) - - "㋏": [t: "знак с ограниченной ответственностью"] # 0x32cf (en: 'limited liability sign', google translation) - - "㍱": [t: "гектопаскалы"] # 0x3371 (en: 'hectopascals', google translation) - - "㍲": [t: "дальтон"] # 0x3372 (en: 'daltons', google translation) - - "㍳": [t: "астрономические единицы"] # 0x3373 (en: 'astronomical units', google translation) - - "㍴": [t: "батончики"] # 0x3374 (en: 'bars', google translation) - - "㍵": [t: "o v"] # 0x3375 (google translation) - - "㍶": [t: "парсек"] # 0x3376 (en: 'parsecs', google translation) - - "㍷": [t: "дециметры"] # 0x3377 (en: 'decimeters', google translation) - - "㍸": [t: "дециметры в квадрате"] # 0x3378 (en: 'decimeters squared', google translation) - - "㍹": [t: "дециметры кубики"] # 0x3379 (en: 'decimeters cubed', google translation) - - "㍺": [t: "инструментальные единицы"] # 0x337a (en: 'instrumental units', google translation) - - "㎀": [t: "пикоэмпс"] # 0x3380 (en: 'picoamps', google translation) - - "㎁": [t: "наноампы"] # 0x3381 (en: 'nanoamps', google translation) - - "㎂": [t: "микроампы"] # 0x3382 (en: 'microamps', google translation) - - "㎃": [t: "миллиамп"] # 0x3383 (en: 'milliamps', google translation) - - "㎄": [t: "киломп"] # 0x3384 (en: 'kiloamps', google translation) - - "㎅": [t: "килобиты"] # 0x3385 (en: 'kilobytes', google translation) - - "㎆": [t: "мегабайты"] # 0x3386 (en: 'megabytes', google translation) - - "㎇": [t: "гигабайты"] # 0x3387 (en: 'gigabytes', google translation) - - "㎈": [t: "калории"] # 0x3388 (en: 'calories', google translation) - - "㎉": [t: "килокалории"] # 0x3389 (en: 'kilocalories', google translation) - - "㎊": [t: "пикофарадс"] # 0x338a (en: 'picofarads', google translation) - - "㎋": [t: "нанофарады"] # 0x338b (en: 'nanofarads', google translation) - - "㎌": [t: "микрофарады"] # 0x338c (en: 'microfarads', google translation) - - "㎍": [t: "микрограммы"] # 0x338d (en: 'micrograms', google translation) - - "㎎": [t: "миллиграммы"] # 0x338e (en: 'milligrams', google translation) - - "㎏": [t: "килограммы"] # 0x338f (en: 'kilograms', google translation) - - "㎐": [t: "герц"] # 0x3390 (en: 'hertz', google translation) - - "㎑": [t: "килогерц"] # 0x3391 (en: 'kilohertz', google translation) - - "㎒": [t: "мегахерц"] # 0x3392 (en: 'megahertz', google translation) - - "㎓": [t: "гигагерц"] # 0x3393 (en: 'gigahertz', google translation) - - "㎔": [t: "терагерц"] # 0x3394 (en: 'terahertz', google translation) - - "㎕": [t: "микролитры"] # 0x3395 (en: 'microliters', google translation) - - "㎖": [t: "миллилитры"] # 0x3396 (en: 'milliliters', google translation) - - "㎗": [t: "децилиторы"] # 0x3397 (en: 'deciliters', google translation) - - "㎘": [t: "килолитры"] # 0x3398 (en: 'kiloliters', google translation) - - "㎙": [t: "фемтометры"] # 0x3399 (en: 'femtometers', google translation) - - "㎚": [t: "нанометры"] # 0x339a (en: 'nanometers', google translation) - - "㎛": [t: "микрометры"] # 0x339b (en: 'micrometers', google translation) - - "㎜": [t: "миллиметры"] # 0x339c (en: 'millimeters', google translation) - - "㎝": [t: "сантиметры"] # 0x339d (en: 'centimeters', google translation) - - "㎞": [t: "километры"] # 0x339e (en: 'kilometers', google translation) - - "㎟": [t: "миллиметры в квадрате"] # 0x339f (en: 'millimeters squared', google translation) - - "㎠": [t: "самедимеры в квадрате"] # 0x33a0 (en: 'centimeters squared', google translation) - - "㎡": [t: "метры квадрат"] # 0x33a1 (en: 'meters squared', google translation) - - "㎢": [t: "километры в квадрате"] # 0x33a2 (en: 'kilometers squared', google translation) - - "㎣": [t: "миллиметровые кубики"] # 0x33a3 (en: 'millimeters cubed', google translation) - - "㎤": [t: "медингеры кубики"] # 0x33a4 (en: 'centimeters cubed', google translation) - - "㎥": [t: "метры кубики"] # 0x33a5 (en: 'meters cubed', google translation) - - "㎦": [t: "километры кубики"] # 0x33a6 (en: 'kilometers cubed', google translation) - - "㎧": [t: "метры в секунду"] # 0x33a7 (en: 'meters per second', google translation) - - "㎨": [t: "метры в секунду квадрат"] # 0x33a8 (en: 'meters per second squared', google translation) - - "㎩": [t: "паскалы"] # 0x33a9 (en: 'pascals', google translation) - - "㎪": [t: "килопаскалы"] # 0x33aa (en: 'kilopascals', google translation) - - "㎫": [t: "мегапаскалы"] # 0x33ab (en: 'megapascals', google translation) - - "㎬": [t: "гигаскаскалы"] # 0x33ac (en: 'gigapascals', google translation) - - "㎭": [t: "рад"] # 0x33ad (en: 'rads', google translation) - - "㎮": [t: "радс в секунду"] # 0x33ae (en: 'rads per second', google translation) - - "㎯": [t: "радс в секунду квадрат"] # 0x33af (en: 'rads per second squared', google translation) - - "㎰": [t: "пикосекунд"] # 0x33b0 (en: 'picoseconds', google translation) - - "㎱": [t: "наносекунд"] # 0x33b1 (en: 'nanoseconds', google translation) - - "㎲": [t: "микросекунд"] # 0x33b2 (en: 'microseconds', google translation) - - "㎳": [t: "миллисекунды"] # 0x33b3 (en: 'milliseconds', google translation) - - "㎴": [t: "пиковолтс"] # 0x33b4 (en: 'picovolts', google translation) - - "㎵": [t: "нановолты"] # 0x33b5 (en: 'nanovolts', google translation) - - "㎶": [t: "микроволты"] # 0x33b6 (en: 'microvolts', google translation) - - "㎷": [t: "миливолты"] # 0x33b7 (en: 'millivolts', google translation) - - "㎸": [t: "киловолты"] # 0x33b8 (en: 'kilovolts', google translation) - - "㎹": [t: "мегаволты"] # 0x33b9 (en: 'megavolts', google translation) - - "㎺": [t: "пикаттс"] # 0x33ba (en: 'picowatts', google translation) - - "㎻": [t: "нановатты"] # 0x33bb (en: 'nanowatts', google translation) - - "㎼": [t: "микроволты"] # 0x33bc (en: 'microwatts', google translation) - - "㎽": [t: "милливаттс"] # 0x33bd (en: 'milliwatts', google translation) - - "㎾": [t: "киловатт"] # 0x33be (en: 'kilowatts', google translation) - - "㎿": [t: "мегаватт"] # 0x33bf (en: 'megawatts', google translation) - - "㏀": [t: "кило-омс"] # 0x33c0 (en: 'kilo-ohms', google translation) - - "㏁": [t: "megaohms"] # 0x33c1 (google translation) - - "㏂": [t: "аттометры"] # 0x33c2 (en: 'attometers', google translation) - - "㏃": [t: "беккерелс"] # 0x33c3 (en: 'becquerels', google translation) - - "㏄": [t: "кубические сантиметра"] # 0x33c4 (en: 'cubic centimeters', google translation) - - "㏅": [t: "канделас"] # 0x33c5 (en: 'candelas', google translation) - - "㏆": [t: "кулоны на килограмм"] # 0x33c6 (en: 'coulombs per kilogram', google translation) - - "㏇": [t: "верхний c, o, период"] # 0x33c7 (I have no idea what this is) (en: 'cap C, o, period', google translation) - - "㏈": [t: "децибел"] # 0x33c8 (en: 'decibels', google translation) - - "㏉": [t: "серые"] # 0x33c9 (en: 'grays', google translation) - - "㏊": [t: "гектары"] # 0x33ca (en: 'hectares', google translation) - - "㏋": [t: "лошадиная сила"] # 0x33cb (en: 'horsepower', google translation) - - "㏌": [t: "дюймы"] # 0x33cc (en: 'inches', google translation) - - "㏍": [t: "килокелвин"] # 0x33cd (en: 'kilokelvins', google translation) - - "㏎": [t: "километры"] # 0x33ce (en: 'kilometers', google translation) - - "㏏": [t: "узлы"] # 0x33cf (en: 'knots', google translation) - - "㏐": [t: "люмены"] # 0x33d0 (en: 'lumens', google translation) - - "㏑": [t: "натуральный журнал"] # 0x33d1 (en: 'natural log', google translation) - - "㏒": [t: "логарифм"] # 0x33d2 (en: 'logarithm', google translation) - - "㏓": [t: "люкс"] # 0x33d3 (en: 'lux', google translation) - - "㏔": [t: "millibarns"] # 0x33d4 (google translation) - - "㏕": [t: "мельницы"] # 0x33d5 (en: 'mills', google translation) - - "㏖": [t: "родинки"] # 0x33d6 (en: 'moles', google translation) - - "㏗": [t: "п"] # 0x33d7 (en: 'p h', google translation) - - "㏘": [t: "пикометры"] # 0x33d8 (en: 'picometers', google translation) - - "㏙": [t: "части на миллион"] # 0x33d9 (en: 'parts per million', google translation) - - "㏚": [t: "петароентгены"] # 0x33da (en: 'petaroentgens', google translation) - - "㏛": [t: "стерадцы"] # 0x33db (en: 'steradians', google translation) - - "㏜": [t: "веса"] # 0x33dc (en: 'sieverts', google translation) - - "㏝": [t: "веберс"] # 0x33dd (en: 'webers', google translation) - - "㏞": [t: "вольт на метр"] # 0x33de (en: 'volts per meter', google translation) - - "㏟": [t: "усилители на метр"] # 0x33df (en: 'amps per meter', google translation) - - "㏿": [t: "галлоны"] # 0x33ff (en: 'gallons', google translation) - - "": [t: "равна шляпе ниже"] # 0xe900 (en: 'equals with hat below', google translation) - - "": [t: "равно с плюсом выше"] # 0xe901 (en: 'equals with plus above', google translation) - - "": [t: "равно с плюсом ниже"] # 0xe902 (en: 'equals with plus below', google translation) - - "": [t: "тильде с плюсом выше"] # 0xe903 (en: 'tilde with plus above', google translation) - - "": [t: "тильде с плюсом ниже"] # 0xe904 (en: 'tilde with plus below', google translation) - - "": [t: "равное вдвое больше, чем"] # 0xe908 (en: 'equal double over greater than', google translation) - - "": [t: "равное вдвое больше, чем"] # 0xe909 (en: 'equal double over less than', google translation) - - "": [t: "содержит или равен"] # 0xe90a (en: 'contains or equal to', google translation) - - "": [t: "суперсет или равен"] # 0xe90b (en: 'superset of or equal to', google translation) - - "": [t: "подмножество или равное"] # 0xe90c (en: 'subset of or equal to', google translation) - - "": [t: "равное за меньшее, чем"] # 0xe90d (en: 'equal over less than', google translation) - - "": [t: "элемент или равен"] # 0xe912 (en: 'element of or equal to', google translation) - - "": [t: "равен или больше"] # 0xe913 (en: 'equal to or greater than', google translation) - - "": [t: "приблизительный суперсет"] # 0xe914 (en: 'approximate superset of', google translation) - - "": [t: "приблизительное подмножество"] # 0xe915 (en: 'approximate subset of', google translation) - - "": [t: "superset of dot включает в себя как субосвязь"] # 0xe916 (en: 'superset of with dot includes as sub relation', google translation) - - "": [t: "подмножество с точкой включено как суботенок"] # 0xe917 (en: 'subset of with dot is included in as sub relation', google translation) - - "": [t: "равное с точкой ниже"] # 0xe918 (en: 'equal with dot below', google translation) - - "": [t: "левая точка над минусом над правой точкой"] # 0xe919 (en: 'left dot over minus over right dot', google translation) - - "": [t: "правая точка через минус над левой точкой"] # 0xe91a (en: 'right dot over minus over left dot', google translation) - - "": [t: "почти равен минус"] # 0xe91f (en: 'almost equal to minus', google translation) - - "": [t: "двойная квадратная чашка"] # 0xe920 (en: 'double square cup', google translation) - - "": [t: "двойной квадратный верхний регистр"] # 0xe921 (en: 'double square cap', google translation) - - "": [t: "менее чем равен или больше"] # 0xe922 (en: 'less than equal to or greater than', google translation) - - "": [t: "тильде с точкой"] # 0xe924 (en: 'tilde with dot', google translation) - - "": [t: "тильде с двумя точками"] # 0xe925 (en: 'tilde with two dots', google translation) - - "": [t: "меньше, чем больше или равно"] # 0xe926 (en: 'less than greater than or equal to', google translation) - - "": [t: "больше, чем меньше или равно"] # 0xe927 (en: 'greater than less than or equal to', google translation) - - "": [t: "эквивалентно или меньше"] # 0xe928 (en: 'equivalent to or less than', google translation) - - "": [t: "эквивалентно или больше"] # 0xe929 (en: 'equivalent to or greater than', google translation) - - "": [t: "оставленный оператор открытой коробки"] # 0xe92a (en: 'left open box operator', google translation) - - "": [t: "правый оператор открытой коробки"] # 0xe92b (en: 'right open box operator', google translation) - - "": [t: "идентично с точкой"] # 0xe92c (en: 'identical to with dot', google translation) - - "": [t: "больше, чем равен или меньше"] # 0xe92d (en: 'greater than equal to or less than', google translation) - - "": [t: "оператор бара"] # 0xe92e (en: 'bar operator', google translation) - - "": [t: "оператор двойного бара"] # 0xe92f (en: 'double bar operator', google translation) - - "": [t: "оператор triple bar"] # 0xe930 (en: 'triple bar operator', google translation) - - "": [t: "меньше или приблизительно равен"] # 0xe932 (en: 'less than or approximately equal to', google translation) - - "": [t: "больше или приблизительно равен"] # 0xe933 (en: 'greater than or approximately equal to', google translation) - - "": [t: "вкладывается меньше, чем"] # 0xe936 (en: 'nested less than', google translation) - - "": [t: "вложенные больше, чем"] # 0xe937 (en: 'nested greater than', google translation) - - "": [t: "предшествует или эквивалентно"] # 0xe93a (en: 'precedes or equivalent to', google translation) - - "": [t: "добивается успеха или эквивалентно"] # 0xe93b (en: 'succeeds or equivalent to', google translation) - - "": [t: "предшествует равным"] # 0xe940 (en: 'precedes over equal', google translation) - - "": [t: "преуспевает в равных"] # 0xe941 (en: 'succeeds over equal', google translation) - - "": [t: "менее равное наклонное больше"] # 0xe942 (en: 'less equal slanted greater', google translation) - - "": [t: "больше равных наклонных меньше"] # 0xe943 (en: 'greater equal slanted less', google translation) - - "": [t: "удовлетворен"] # 0xe948 (en: 'satisfied by', google translation) - - "": [t: "ленивый с"] # 0xe949 (en: 'lazy s', google translation) - - "": [t: "не утверждение"] # 0xe94a (en: 'not assertion', google translation) - - "": [t: "двойной равный"] # 0xe94b (en: 'double equal', google translation) - - "": [t: "тройной равный"] # 0xe94c (en: 'triple equal', google translation) - - "": [t: "правило задержано"] # 0xe94d (en: 'rule delayed', google translation) - - "": [t: "псевдоним разделитель"] # 0xe94e (en: 'alias delimiter', google translation) - - "": [t: "нормальная подгруппа с баром"] # 0xe950 (en: 'normal subgroup of with bar', google translation) - - "": [t: "содержит как обычную подгруппу с стержнем"] # 0xe951 (en: 'contains as normal subgroup with bar', google translation) - - "": [t: "раунд подразумевает"] # 0xe954 (en: 'round implies', google translation) - - "": [t: "улыбка под баром"] # 0xe955 (en: 'smile under bar', google translation) - - "": [t: "нахмуриться над баром"] # 0xe956 (en: 'frown over bar', google translation) - - "": [t: "суперсет или почти равен"] # 0xe957 (en: 'superset of or almost equal to', google translation) - - "": [t: "подмножество или почти равен"] # 0xe958 (en: 'subset of or almost equal to', google translation) - - "": [t: "больше, чем почти равен или меньше"] # 0xe959 (en: 'greater than almost equal to or less than', google translation) - - "": [t: "меньше, чем почти равное или больше, чем"] # 0xe95a (en: 'less than almost equal or greater than', google translation) - - "": [t: "двойной логический или"] # 0xe95c (en: 'double logical or', google translation) - - "": [t: "двойной логический и"] # 0xe95d (en: 'double logical and', google translation) - - "": [t: "логично или с двойной полосой ниже"] # 0xe95e (en: 'logical or with double bar below', google translation) - - "": [t: "логично или с стержней ниже"] # 0xe95f (en: 'logical or with bar below', google translation) - - "": [t: "почти равны по сравнению с равными"] # 0xe962 (en: 'almost equal over equal', google translation) - - "": [t: "левый указательный треугольник с пополам"] # 0xe964 (en: 'left pointing triangle with bisecting bar', google translation) - - "": [t: "право указывает треугольник с пополам"] # 0xe965 (en: 'right pointing triangle with bisecting bar', google translation) - - "": [t: "равно с пунктирной верхней линией"] # 0xe966 (en: 'equals with dotted top line', google translation) - - "": [t: "предшествует толстой кишке"] # 0xe967 (en: 'precedes with colon', google translation) - - "": [t: "преуспевает с толстой кишкой"] # 0xe968 (en: 'succeeds with colon', google translation) - - "": [t: "меньше или равного наклонного"] # 0xe969 (en: 'smaller than or equal slanted', google translation) - - "": [t: "больше или равных наклонных"] # 0xe96a (en: 'larger than or equal slanted', google translation) - - "": [t: "вложено намного меньше, чем"] # 0xe96b (en: 'nested very much less than', google translation) - - "": [t: "вложено намного больше, чем"] # 0xe96c (en: 'nested very much greater than', google translation) - - "": [t: "разница между вариантом"] # 0xe96d (en: 'difference between variant', google translation) - - "": [t: "меньше, чем больше наложения"] # 0xe96e (en: 'less than greater than overlay', google translation) - - "": [t: "логичный или логичный и наложенный"] # 0xe96f (en: 'logical or logical and overlay', google translation) - - "": [t: "суперсет над суперсет"] # 0xe970 (en: 'superset over superset', google translation) - - "": [t: "подмножество над подмножества"] # 0xe971 (en: 'subset over subset', google translation) - - "": [t: "суперсет над подмножества"] # 0xe972 (en: 'superset over subset', google translation) - - "": [t: "подмножество над суперсет"] # 0xe973 (en: 'subset over superset', google translation) - - "": [t: "тройной вертикальный бар"] # 0xe979 (en: 'triple vertical bar', google translation) - - "": [t: "парные четырехкратные вертикальные точки"] # 0xe97a (en: 'paired quadruple vertical dots', google translation) - - "": [t: "перпендикулярно над стержней"] # 0xe97b (en: 'perpendicular over bar', google translation) - - "": [t: "левый турничный перевозка двойной вертикальной прунки"] # 0xe97c (en: 'left turnstile double vertical bar', google translation) - - "": [t: "двойной левый турничный перевозка двойной вертикальный бар"] # 0xe97d (en: 'double left turnstile double vertical bar', google translation) - - "": [t: "перпендикулярно перевернутую перпендикулярную"] # 0xe97e (en: 'perpendicular over inverted perpendicular', google translation) - - "": [t: "двойной левый вертикальный стержень"] # 0xe97f (en: 'double left turnstile vertical bar', google translation) - - "": [t: "сферический угол открывается"] # 0xe980 (en: 'spherical angle opening up', google translation) - - "": [t: "двойная черта"] # 0xe981 (en: 'double slash', google translation) - - "": [t: "правильный конг с угрым"] # 0xe982 (en: 'right angle with corner', google translation) - - "": [t: "обведенный вертикальным баром"] # 0xe984 (en: 'circled vertical bar', google translation) - - "": [t: "знак окружающего дивизиона"] # 0xe985 (en: 'circled division sign', google translation) - - "": [t: "пунктирный солидус"] # 0xe986 (en: 'dashed solidus', google translation) - - "": [t: "разбитая обратная черта"] # 0xe987 (en: 'dashed backslash', google translation) - - "": [t: "пунктирная средняя линия"] # 0xe988 (en: 'dashed mid line', google translation) - - "": [t: "пунктирная вертикальная бар"] # 0xe989 (en: 'dashed vertical bar', google translation) - - "": [t: "перпендикуляр с с"] # 0xe98a (en: 'perpendicular with s', google translation) - - "": [t: "угол с с"] # 0xe98b (en: 'angle with s', google translation) - - "": [t: "сферический угол открывается слева"] # 0xe98c (en: 'spherical angle opening left', google translation) - - "": [t: "угол открывается слева"] # 0xe98d (en: 'angle opening left', google translation) - - "": [t: "вертикальная планка с двойным крючком"] # 0xe98e (en: 'vertical bar with double hook', google translation) - - "": [t: "средний точечный оператор свободный радикал"] # 0xe98f (en: 'medium dot operator free radical', google translation) - - "": [t: "белый, укажите треугольник над стержней"] # 0xe990 (en: 'white up pointing triangle above bar', google translation) - - "": [t: "идентично и параллельно"] # 0xe991 (en: 'identical and parallel to', google translation) - - "": [t: "разбить продукт"] # 0xe992 (en: 'smash product', google translation) - - "": [t: "оператор с тройным бар с горизонтальным баром"] # 0xe993 (en: 'triple bar operator with horizontal bar', google translation) - - "": [t: "идентично с двойной чертой"] # 0xe994 (en: 'identical to with double slash', google translation) - - "": [t: "тройные скрещенные бары"] # 0xe995 (en: 'triple crossed bars', google translation) - - "": [t: "вертикальная планка над кругом"] # 0xe996 (en: 'vertical bar over circle', google translation) - - "": [t: "вертикальный пропорциональный"] # 0xe997 (en: 'vertical proportional to', google translation) - - "": [t: "черная последняя четверть луна"] # 0xe998 (en: 'black last quarter moon', google translation) - - "": [t: "черная первая четверть луна"] # 0xe999 (en: 'black first quarter moon', google translation) - - "": [t: "отрицательная синусоидальная волна"] # 0xe9a0 (en: 'negative sine wave', google translation) - - "": [t: "клаженные скобки"] # 0xe9a1 (en: 'parenthesized dot', google translation) - - "": [t: "скол"] # 0xe9a2 (en: 'parens', google translation) - - "": [t: "белая улыбка"] # 0xe9a3 (en: 'white smile', google translation) - - "": [t: "белый хмурый взгляд"] # 0xe9a4 (en: 'white frown', google translation) - - "": [t: "шестигранник"] # 0xe9a5 (en: 'hexagon', google translation) - - "": [t: "эквивалентно более плюс"] # 0xe9a6 (en: 'equivalent to over plus', google translation) - - "": [t: "плюс, эквивалентный"] # 0xe9a7 (en: 'plus over equivalent to', google translation) - - "": [t: "перекрестные засечки"] # 0xe9b0 (en: 'intersection serifs', google translation) - - "": [t: "союз serifs"] # 0xe9b1 (en: 'union serifs', google translation) - - "": [t: "квадратный перекресток засечений"] # 0xe9b2 (en: 'square intersection serifs', google translation) - - "": [t: "square union serifs"] # 0xe9b3 (google translation) - - "": [t: "предшествует эквивалентному или успешному"] # 0xe9e0 (en: 'precedes equivalent to or succeeds', google translation) - - "": [t: "успешно эквивалентно или предшествует"] # 0xe9e1 (en: 'succeeds equivalent to or precedes', google translation) - - "": [t: "предшествует почти равен или добивается успеха"] # 0xe9e2 (en: 'precedes almost equal to or succeeds', google translation) - - "": [t: "успешно практически равен или предшествует"] # 0xe9e3 (en: 'succeeds almost equal to or precedes', google translation) - - "": [t: "менее чем эквивалентно или больше"] # 0xe9f0 (en: 'less than equivalent to or greater than', google translation) - - "": [t: "больше, чем эквивалентно или меньше"] # 0xe9f1 (en: 'greater than equivalent to or less than', google translation) - - "": [t: "не гораздо меньше, чем"] # 0xea00 (en: 'not vert much less than', google translation) - - "": [t: "не гораздо больше, чем"] # 0xea01 (en: 'not vert much greater than', google translation) - - "": [t: "не намного меньше варианта"] # 0xea02 (en: 'not much less than variant', google translation) - - "": [t: "не намного больше, чем вариант"] # 0xea03 (en: 'not much greater than variant', google translation) - - "": [t: "меньше верного не вдвое равно"] # 0xea04 (en: 'less vert not double equals', google translation) - - "": [t: "gt vert не двойной равен"] # 0xea05 (en: 'gt vert not double equals', google translation) - - "": [t: "не меньше или равны"] # 0xea06 (en: 'not less than or equal to', google translation) - - "": [t: "не больше или равен"] # 0xea07 (en: 'not greater than or equal to', google translation) - - "": [t: "ни равняется и не меньше, чем"] # 0xea09 (en: 'neither equal to nor less than', google translation) - - "": [t: "не содержит или не равен"] # 0xea0a (en: 'does not contain or equal to', google translation) - - "": [t: "ни суперсет, ни равен"] # 0xea0b (en: 'neither superset of nor equal to', google translation) - - "": [t: "ни подмножество и не равное"] # 0xea0c (en: 'neither subset of nor equal to', google translation) - - "": [t: "обратный solidus submet"] # 0xea0d (en: 'reverse solidus subset', google translation) - - "": [t: "ни равняется и не больше"] # 0xea0e (en: 'neither equal to nor greater than', google translation) - - "": [t: "не минус оператор тильды"] # 0xea0f (en: 'not minus tilde operator', google translation) - - "": [t: "ни равняется и не меньше, чем"] # 0xea10 (en: 'neither equal to nor less than', google translation) - - "": [t: "не оператор тильды"] # 0xea11 (en: 'not tilde operator', google translation) - - "": [t: "не элемент или равен"] # 0xea12 (en: 'not element of or equal to', google translation) - - "": [t: "ни равняется и не больше"] # 0xea13 (en: 'neither equal to nor greater than', google translation) - - "": [t: "не почти равен"] # 0xea14 (en: 'not almost equal', google translation) - - "": [t: "не удается аналогично"] # 0xea15 (en: 'not succeeds similar', google translation) - - "": [t: "меньше, чем или наклонен, равный с чертой"] # 0xea16 (en: 'less than or slanted equal to with slash', google translation) - - "": [t: "больше, чем или наклонен, равный с чертой"] # 0xea17 (en: 'greater than or slanted equal to with slash', google translation) - - "": [t: "superset solidus"] # 0xea1a (google translation) - - "": [t: "не содержит"] # 0xea1b (en: 'does not contain', google translation) - - "": [t: "не меньше или равны"] # 0xea1d (en: 'not less than or equal to', google translation) - - "": [t: "не больше или равен"] # 0xea1e (en: 'not greater than or equal to', google translation) - - "": [t: "не почти равен минус"] # 0xea1f (en: 'not almost equal to minus', google translation) - - "": [t: "отрицание установки членства dot выше"] # 0xea22 (en: 'negated set membership dot above', google translation) - - "": [t: "не угол верта"] # 0xea2c (en: 'not vert angle', google translation) - - "": [t: "не параллельно наклонен"] # 0xea2d (en: 'not parallel slanted', google translation) - - "": [t: "не оператор бара"] # 0xea2e (en: 'not bar operator', google translation) - - "": [t: "не двойной оператор"] # 0xea2f (en: 'not double bar operator', google translation) - - "": [t: "не оператор тройного бар"] # 0xea30 (en: 'not triple bar operator', google translation) - - "": [t: "меньше, но не приблизительно равен"] # 0xea32 (en: 'less than but not approximately equal to', google translation) - - "": [t: "больше, чем, но не приблизительно равен"] # 0xea33 (en: 'greater than but not approximately equal to', google translation) - - "": [t: "меньше, чем или нет"] # 0xea34 (en: 'less than or not equal to', google translation) - - "": [t: "больше или нет"] # 0xea35 (en: 'greater than or not equal to', google translation) - - "": [t: "не вложено меньше, чем"] # 0xea36 (en: 'not nested less than', google translation) - - "": [t: "не вложено больше, чем"] # 0xea37 (en: 'not nested greater than', google translation) - - "": [t: "не намного меньше"] # 0xea38 (en: 'not much less than', google translation) - - "": [t: "не намного больше, чем"] # 0xea39 (en: 'not much greater than', google translation) - - "": [t: "предшествует, но не эквивалентно"] # 0xea3a (en: 'precedes but not equivalent to', google translation) - - "": [t: "успешно, но не эквивалентно"] # 0xea3b (en: 'succeeds but not equivalent to', google translation) - - "": [t: "предшествует, но не равен"] # 0xea3c (en: 'precedes but not equal to', google translation) - - "": [t: "добивается успеха, но не равен"] # 0xea3d (en: 'succeeds but not equal to', google translation) - - "": [t: "не равняется и не предшествует"] # 0xea3e (en: 'does not equal or precede', google translation) - - "": [t: "не равняется и не преуспевает"] # 0xea3f (en: 'does not equal or succeed', google translation) - - "": [t: "предшествует, но не равен"] # 0xea40 (en: 'precedes but not equal to', google translation) - - "": [t: "добивается успеха, но не равен"] # 0xea41 (en: 'succeeds but not equal to', google translation) - - "": [t: "не подмножество и не равен"] # 0xea42 (en: 'not subset of nor equal to', google translation) - - "": [t: "не суперсет и не равен"] # 0xea43 (en: 'not superset of nor equal to', google translation) - - "": [t: "подмножество или не равен"] # 0xea44 (en: 'subset of or not equal to', google translation) - - "": [t: "суперсет или не равен"] # 0xea45 (en: 'superset of or not equal to', google translation) - - "": [t: "не подмножество и не равен"] # 0xea46 (en: 'not subset of nor equal to', google translation) - - "": [t: "не суперсет и не равен"] # 0xea47 (en: 'not superset of nor equal to', google translation) - - "": [t: "не тройной меньше, чем"] # 0xea48 (en: 'not triple less than', google translation) - - "": [t: "не тройной больше, чем"] # 0xea49 (en: 'not triple greater than', google translation) - - "": [t: "не предшествует"] # 0xea4c (en: 'not precedes equals', google translation) - - "": [t: "не удастся"] # 0xea4d (en: 'not succeeds equals', google translation) - - "": [t: "не нормальная подгруппа с баром"] # 0xea50 (en: 'not normal subgroup of with bar', google translation) - - "": [t: "не содержит как обычную подгруппу с стержнем"] # 0xea51 (en: 'does not contain as normal subgroup with bar', google translation) - - "": [t: "не разница между"] # 0xea52 (en: 'not difference between', google translation) - - "": [t: "не геометрически эквивалент"] # 0xea53 (en: 'not geometrically equivalent to', google translation) - - "": [t: "не так же"] # 0xea54 (en: 'not vert similar', google translation) - - "": [t: "не равен или похож"] # 0xea55 (en: 'not equal or similar', google translation) - - "": [t: "не vert приблизительно"] # 0xea56 (en: 'not vert approximate', google translation) - - "": [t: "не приблизительно идентично"] # 0xea57 (en: 'not approximately identical to', google translation) - - "": [t: "не ухабистый"] # 0xea58 (en: 'not bumpy equals', google translation) - - "": [t: "не ухабистый сингл равна"] # 0xea59 (en: 'not bumpy single equals', google translation) - - "": [t: "не равна точке"] # 0xea5a (en: 'not equal dot', google translation) - - "": [t: "обратный не эквивалентный"] # 0xea5b (en: 'reverse not equivalent', google translation) - - "": [t: "не квадратный подмножество"] # 0xea60 (en: 'not square subset', google translation) - - "": [t: "не квадратный суперсет"] # 0xea61 (en: 'not square superset', google translation) - - "": [t: "не почти равен по сравнению с равными"] # 0xea62 (en: 'not almost equal over equal', google translation) - - "": [t: "не строго эквивалентно"] # 0xea63 (en: 'not strictly equivalent to', google translation) - - "": [t: "не конгруэнтная точка"] # 0xea64 (en: 'not congruent dot', google translation) - - "": [t: "обратный не равен"] # 0xea65 (en: 'reverse not equal', google translation) - - "": [t: "не верно левый треугольник равен"] # 0xea70 (en: 'not vert left triangle equals', google translation) - - "": [t: "не верный правый треугольник равна"] # 0xea71 (en: 'not vert right triangle equals', google translation) - - "": [t: "не частично"] # 0xea80 (en: 'not partial', google translation) - - "": [t: "стрелка украшивание"] # 0xeb00 (en: 'arrow embellishment extender', google translation) - - "": [t: "стрелка направо над стрелкой влево"] # 0xeb01 (en: 'arrow rightwards over arrow leftwards', google translation) - - "": [t: "стрелка направо над стрелкой влево"] # 0xeb02 (en: 'arrow rightwards over arrow leftwards', google translation) - - "": [t: "гарпун прямо над гарпуном слева"] # 0xeb03 (en: 'harpoon right over harpoon left', google translation) - - "": [t: "гарпун прямо над гарпуном слева"] # 0xeb04 (en: 'harpoon right over harpoon left', google translation) - - "": [t: "двойная стрелка на северо -востоке юго -запада"] # 0xeb05 (en: 'double arrow northeast southwest', google translation) - - "": [t: "двойная стрелка на северо -западе юго -востока"] # 0xeb06 (en: 'double arrow northwest southeast', google translation) - - "": [t: "горизонтальный удлинитель гарпуна"] # 0xeb07 (en: 'horizontal harpoon extender', google translation) - - "": [t: "ангарная часовая дуга слева стрелка"] # 0xeb08 (en: 'anticlockwise arc leftwards arrow', google translation) - - "": [t: "ангарная часовая дуга вправо стрел"] # 0xeb09 (en: 'anticlockwise arc rightwards arrow', google translation) - - "": [t: "большой справа акцент стрелы"] # 0xeb0b (en: 'large rightwards arrow accent', google translation) - - "": [t: "большой левый акцент стрелы"] # 0xeb0c (en: 'large leftwards arrow accent', google translation) - - "": [t: "слева стрела"] # 0xeb0d (en: 'leftwards arrowhead', google translation) - - "": [t: "право среда"] # 0xeb0e (en: 'rightwards arrowhead', google translation) - - "": [t: "большая левая стрелка справа с ходом"] # 0xeb0f (en: 'large left right arrow with stroke', google translation) - - "": [t: "горизонтальный удлинитель двойной стрелки"] # 0xeb10 (en: 'horizontal double arrow extender', google translation) - - "": [t: "большая левая правая двойная стрелка с ходом"] # 0xeb11 (en: 'large left right double arrow with stroke', google translation) - - "": [t: "вниз стрелка слева от стрелы вверх"] # 0xeb12 (en: 'downwards arrow leftwards of upwards arrow', google translation) - - "": [t: "стрелка влево с углом вниз"] # 0xeb13 (en: 'leftwards arrow with corner downwards', google translation) - - "": [t: "стрелка вправо с углом вверх"] # 0xeb14 (en: 'rightwards arrow with corner upwards', google translation) - - "": [t: "стрелка влево с углом вверх"] # 0xeb15 (en: 'leftwards arrow with corner upwards', google translation) - - "": [t: "верхняя стрелка в верхней части часовой стрелки с плюсом"] # 0xeb16 (en: 'anticlockwise top semicircle arrow with plus', google translation) - - "": [t: "верхняя стрелка по часовой стрелке с минус"] # 0xeb17 (en: 'clockwise top semicircle arrow with minus', google translation) - - "": [t: "стрелка вправо с хвостом с ходом"] # 0xeb18 (en: 'rightwards arrow with tail with stroke', google translation) - - "": [t: "правый гарпун вниз"] # 0xeb19 (en: 'right harpoon down', google translation) - - "": [t: "оставил гарпун вниз"] # 0xeb1a (en: 'left harpoon down', google translation) - - "": [t: "левый правый гарпун вниз"] # 0xeb1b (en: 'left right harpoon down', google translation) - - "": [t: "левый правый гарпун вверх"] # 0xeb1c (en: 'left right harpoon up', google translation) - - "": [t: "вниз по гарпуне ушел"] # 0xeb1d (en: 'up down harpoon left', google translation) - - "": [t: "вверх по гарпуне справа"] # 0xeb1e (en: 'up down harpoon right', google translation) - - "": [t: "стрелка вверх справа от стрелы вниз"] # 0xeb1f (en: 'upwards arrow to the right of downwards arrow', google translation) - - "": [t: "слева гарпун, чтобы бар с барб вверх"] # 0xeb20 (en: 'leftwards harpoon to bar with barb upwards', google translation) - - "": [t: "прямо гарпун, чтобы бар с барб вверх"] # 0xeb21 (en: 'rightwards harpoon to bar with barb upwards', google translation) - - "": [t: "левый гарпун, чтобы бар с барб вниз"] # 0xeb22 (en: 'leftwards harpoon to bar with barb downwards', google translation) - - "": [t: "прямо гарпун, чтобы бар с барб вниз"] # 0xeb23 (en: 'rightwards harpoon to bar with barb downwards', google translation) - - "": [t: "левый гарпун из бара с барб вверх"] # 0xeb24 (en: 'leftwards harpoon from bar with barb upwards', google translation) - - "": [t: "прямо гарпун из бара с барб вверх"] # 0xeb25 (en: 'rightwards harpoon from bar with barb upwards', google translation) - - "": [t: "левый гарпун из бара с барб вниз"] # 0xeb26 (en: 'leftwards harpoon from bar with barb downwards', google translation) - - "": [t: "прямо гарпун из бара с барб вниз"] # 0xeb27 (en: 'rightwards harpoon from bar with barb downwards', google translation) - - "": [t: "вверх гарпун, чтобы бар с барком слева"] # 0xeb28 (en: 'upwards harpoon to bar with barb leftwards', google translation) - - "": [t: "вниз по гарпуне, чтобы бар с барб налево"] # 0xeb29 (en: 'downwards harpoon to bar with barb leftwards', google translation) - - "": [t: "вверх гарпун, чтобы бар с барб вправо"] # 0xeb2a (en: 'upwards harpoon to bar with barb rightwards', google translation) - - "": [t: "вниз по гарпуне, чтобы бар с барб вправо"] # 0xeb2b (en: 'downwards harpoon to bar with barb rightwards', google translation) - - "": [t: "вверх гарпун из бара с барб слева"] # 0xeb2c (en: 'upwards harpoon from bar with barb leftwards', google translation) - - "": [t: "вниз по гарпуне из бара с барб слева"] # 0xeb2d (en: 'downwards harpoon from bar with barb leftwards', google translation) - - "": [t: "вверх гарпун из бара с барб справа"] # 0xeb2e (en: 'upwards harpoon from bar with barb rightwards', google translation) - - "": [t: "вниз по гарпуне из бара с барб прямо на это"] # 0xeb2f (en: 'downwards harpoon from bar with barb rightwards', google translation) - - "": [t: "вверх стрелой в бар"] # 0xeb30 (en: 'upwards arrow to bar', google translation) - - "": [t: "вниз стрелы в бар"] # 0xeb31 (en: 'downwards arrow to bar', google translation) - - "": [t: "вверх гарпун слева от гарпуна вниз"] # 0xeb32 (en: 'upwards harpoon to the left of downwards harpoon', google translation) - - "": [t: "вверх гарпун справа от вниз гарпун"] # 0xeb33 (en: 'upwards harpoon to the right of downwards harpoon', google translation) - - "": [t: "вверх стрелка"] # 0xeb34 (en: 'upwards arrowhead', google translation) - - "": [t: "вниз стрелка"] # 0xeb35 (en: 'downwards arrowhead', google translation) - - "": [t: "двойной гарпун с левой барб вниз вправо"] # 0xeb36 (en: 'double harpoon with leftwards barb down rightwards barb up', google translation) - - "": [t: "двойной гарпун с левой барб вверх вправо барб вниз"] # 0xeb37 (en: 'double harpoon with leftwards barb up rightwards barb down', google translation) - - "": [t: "стрелка влево над баром"] # 0xeb38 (en: 'leftwards arrow over bar', google translation) - - "": [t: "права стрелка над баром"] # 0xeb39 (en: 'rightwards arrow over bar', google translation) - - "": [t: "стрелка влево под баром"] # 0xeb3a (en: 'leftwards arrow under bar', google translation) - - "": [t: "стрелка вправо под баром"] # 0xeb3b (en: 'rightwards arrow under bar', google translation) - - "": [t: "левая правая тройная стрелка"] # 0xeb3c (en: 'left right triple arrow', google translation) - - "": [t: "двойная стрелка на северо -востоке юго -востока"] # 0xeb3f (en: 'double arrow northeast southeast', google translation) - - "": [t: "антикомальная часовая стрелка слева"] # 0xeb40 (en: 'anticlockwise left semicircle arrow', google translation) - - "": [t: "по часовой стрелке левая стрелка полукруга"] # 0xeb41 (en: 'clockwise left semicircle arrow', google translation) - - "": [t: "левый открытый круг левый правый стрелка"] # 0xeb42 (en: 'left open circle left right arrow', google translation) - - "": [t: "право стрелы над тильдой"] # 0xeb44 (en: 'rightwards arrow over tilde', google translation) - - "": [t: "стрелка слева над тильдой"] # 0xeb45 (en: 'leftwards arrow over tilde', google translation) - - "": [t: "слева гарпун над баром"] # 0xeb48 (en: 'leftwards harpoon over bar', google translation) - - "": [t: "прямо гарпун над баром"] # 0xeb49 (en: 'rightwards harpoon over bar', google translation) - - "": [t: "левый гарпун под баром"] # 0xeb4a (en: 'leftwards harpoon under bar', google translation) - - "": [t: "прямо гарпун под баром"] # 0xeb4b (en: 'rightwards harpoon under bar', google translation) - - "": [t: "приседание чернокожие левые стрелы"] # 0xeb4c (en: 'squat black leftwards arrow', google translation) - - "": [t: "по часовой стрелке правая стрелка полукруга"] # 0xeb50 (en: 'clockwise right semicircle arrow', google translation) - - "": [t: "антиковая стрелка правой полукруги"] # 0xeb51 (en: 'anticlockwise right semicircle arrow', google translation) - - "": [t: "левый открытый круг влево правый гарпун"] # 0xeb52 (en: 'left open circle left right harpoon', google translation) - - "": [t: "вверх стрелка слева от вертикального бара"] # 0xeb58 (en: 'upwards arrow leftwards of vertical bar', google translation) - - "": [t: "вниз стрелка слева от вертикального бара"] # 0xeb59 (en: 'downwards arrow leftwards of vertical bar', google translation) - - "": [t: "вверх стрелка вправо от вертикального бара"] # 0xeb5a (en: 'upwards arrow rightwards of vertical bar', google translation) - - "": [t: "стрелка вниз вправо от вертикального бара"] # 0xeb5b (en: 'downwards arrow rightwards of vertical bar', google translation) - - "": [t: "стрелка вправо с расширенным крюком вниз"] # 0xeb5c (en: 'rightwards arrow with extended downwards hook', google translation) - - "": [t: "стрелка влево с расширенным крючком"] # 0xeb5d (en: 'leftwards arrow with extended hook', google translation) - - "": [t: "стрелка влево с протяженным крюком вниз"] # 0xeb5e (en: 'leftwards arrow with extended downwards hook', google translation) - - "": [t: "стрелка вправо с расширенным крючком"] # 0xeb5f (en: 'rightwards arrow with extended hook', google translation) - - "": [t: "не правая стрелка волнистая"] # 0xeb60 (en: 'not right arrow wavy', google translation) - - "": [t: "не правая стрелка изогнута"] # 0xeb61 (en: 'not right arrow curved', google translation) - - "": [t: "вверх гарпун слева от вертикального бара"] # 0xeb68 (en: 'upwards harpoon leftwards of vertical bar', google translation) - - "": [t: "вниз по гарпуне слева от вертикального бара"] # 0xeb69 (en: 'downwards harpoon leftwards of vertical bar', google translation) - - "": [t: "вверх гарпун прямо наоборот вертикального бара"] # 0xeb6a (en: 'upwards harpoon rightwards of vertical bar', google translation) - - "": [t: "вниз по гарпуне прямо с вертикальным баром"] # 0xeb6b (en: 'downwards harpoon rightwards of vertical bar', google translation) - - "": [t: "вертикальная двойная стрелка"] # 0xeb6c (en: 'vertical double arrow extender', google translation) - - "": [t: "вертикальный гарпун с левым удлинителем"] # 0xeb6d (en: 'vertical harpoon with barb left extender', google translation) - - "": [t: "вертикальный гарпун с правым удлинителем барб"] # 0xeb6e (en: 'vertical harpoon with barb right extender', google translation) - - "": [t: "правый гарпун над левым гарпуном вправо"] # 0xeb6f (en: 'right harpoon over left harpoon right', google translation) - - "": [t: "правый гарпун над левым гарпуном слева"] # 0xeb70 (en: 'right harpoon over left harpoon left', google translation) - - "": [t: "левый гарпун над правым гарпуном вправо"] # 0xeb71 (en: 'left harpoon over right harpoon right', google translation) - - "": [t: "левый гарпун над правой гарпуной слева"] # 0xeb72 (en: 'left harpoon over right harpoon left', google translation) - - "": [t: "стрела влево от стрелки бара"] # 0xeb73 (en: 'leftwards arrow from bar arrowhead', google translation) - - "": [t: "стрела влево вправо от стрелки из бара"] # 0xeb74 (en: 'leftwards rightwards arrow from bar extender', google translation) - - "": [t: "стрелка влево от шарнирного хвоста"] # 0xeb75 (en: 'leftwards arrow from bar tail', google translation) - - "": [t: "стрелка вправо от хвоста"] # 0xeb76 (en: 'rightwards arrow from bar tail', google translation) - - "": [t: "стрелка вправо от стрелки бар"] # 0xeb77 (en: 'rightwards arrow from bar arrowhead', google translation) - - "": [t: "вверх гарпун из бара с барб -слева стрел"] # 0xeb78 (en: 'upwards harpoon from bar with barb leftwards arrowhead', google translation) - - "": [t: "стрелка вправо над стрелкой влево справа"] # 0xeb79 (en: 'rightwards arrow over leftwards arrow right', google translation) - - "": [t: "вправо стрел налево стрел влево"] # 0xeb7a (en: 'rightwards arrow over leftwards arrow left', google translation) - - "": [t: "стрелка слева направо вправо"] # 0xeb7b (en: 'leftwards arrow over rightwards arrow right', google translation) - - "": [t: "стрелка слева направо влево"] # 0xeb7c (en: 'leftwards arrow over rightwards arrow left', google translation) - - "": [t: "стрелка вверх от стрелки бара"] # 0xeb7d (en: 'upwards arrow from bar arrowhead', google translation) - - "": [t: "стрелка вверх от хвоста"] # 0xeb7e (en: 'upwards arrow from bar tail', google translation) - - "": [t: "стрелка вниз от хвоста"] # 0xeb7f (en: 'downwards arrow from bar tail', google translation) - - "": [t: "стрелка вниз от стрелки бар"] # 0xeb80 (en: 'downwards arrow from bar arrowhead', google translation) - - "": [t: "вниз по гарпуне от бара с барб прямо сразу"] # 0xeb81 (en: 'downwards harpoon from bar with barb rightwards arrowhead', google translation) - - "": [t: "вверх гарпун слева от дна вниз вниз"] # 0xeb82 (en: 'upwards harpoon to the left of downwards harpoon bottom', google translation) - - "": [t: "вверх гарпун слева от вниз харпун экспендера"] # 0xeb83 (en: 'upwards harpoon to the left of downwards harpoon extender', google translation) - - "": [t: "вниз по гарпуне слева от вершины harpoon вверх"] # 0xeb84 (en: 'downwards harpoon to the left of upwards harpoon top', google translation) - - "": [t: "вверх гарпун слева от вершины гарпуна вниз"] # 0xeb85 (en: 'upwards harpoon to the left of downwards harpoon top', google translation) - - "": [t: "вниз по гарпуне слева от удлинителя harpoon вверх"] # 0xeb86 (en: 'downwards harpoon to the left of the upwards harpoon extender', google translation) - - "": [t: "вниз по гарпуне слева от дна вверх гарпуна"] # 0xeb87 (en: 'downwards harpoon to the left of the upwards harpoon bottom', google translation) - - "": [t: "вверх стрелка слева от дна стрелы вниз"] # 0xeb88 (en: 'upwards arrow leftwards of downwards arrow bottom', google translation) - - "": [t: "вниз стрелка слева от вершины стрелы вверх"] # 0xeb89 (en: 'downwards arrow leftwards of upwards arrow top', google translation) - - "": [t: "вверх стрелка слева от вершины стрелы вниз"] # 0xeb8a (en: 'upwards arrow leftwards of downwards arrow top', google translation) - - "": [t: "вниз стрелка слева от дна стрелы вверх"] # 0xeb8b (en: 'downwards arrow leftwards of upwards arrow bottom', google translation) - - "": [t: "левый направо стрелками удлинитель"] # 0xeb8c (en: 'leftwards rightwards arrows extender', google translation) - - "": [t: "северо -восточный экспендер"] # 0xeb8d (en: 'north east arrow extender', google translation) - - "": [t: "северо -западный экспендер"] # 0xeb8e (en: 'north west arrow extender', google translation) - - "": [t: "вниз по направлению скобки влево"] # 0xec00 (en: 'down pointing brace left', google translation) - - "": [t: "вниз по направлению скобки в середине"] # 0xec01 (en: 'down pointing brace mid', google translation) - - "": [t: "вниз по указанию скобки вправо"] # 0xec02 (en: 'down pointing brace right', google translation) - - "": [t: "горизонтальный удлинитель"] # 0xec03 (en: 'horizontal brace extender', google translation) - - "": [t: "укажите скобку влево"] # 0xec04 (en: 'up pointing brace left', google translation) - - "": [t: "укажите скобку в середине"] # 0xec05 (en: 'up pointing brace mid', google translation) - - "": [t: "установленная скоба правильно"] # 0xec06 (en: 'up-pointing brace right', google translation) - - "": [t: "левый вертикальный бар"] # 0xec07 (en: 'left vertical bar', google translation) - - "": [t: "правый вертикальный бар"] # 0xec08 (en: 'right vertical bar', google translation) - - "": [t: "левый двойной вертикальный бар"] # 0xec09 (en: 'left double vertical bar', google translation) - - "": [t: "правая двойная вертикальная бар"] # 0xec0a (en: 'right double vertical bar', google translation) - - "": [t: "горизонтальный растяжение кронштейна"] # 0xec0b (en: 'horizontal bracket extender', google translation) - - "": [t: "под квадратным кронштейном"] # 0xec0c (en: 'under square bracket', google translation) - - "⎵": [t: "под квадратным кронштейном"] # 0x23b5 (en: 'under square bracket', google translation) - - "": [t: "над квадратным кронштейном"] # 0xec0d (en: 'over square bracket', google translation) - - "⎴": [t: "над квадратным кронштейном"] # 0x23b4 (en: 'over square bracket', google translation) - - "": [t: "под скобкой ушел"] # 0xec0e (en: 'under bracket left', google translation) - - "": [t: "под скобкой справа"] # 0xec0f (en: 'under bracket right', google translation) - - "": [t: "за скобкой ушел"] # 0xec10 (en: 'over bracket left', google translation) - - "": [t: "над кронштейном вправо"] # 0xec11 (en: 'over bracket right', google translation) - - "": [t: "левый скол 1"] # 0xec12 (en: 'left parens 1', google translation) - - "": [t: "левый скол 2"] # 0xec13 (en: 'left parens 2', google translation) - - "": [t: "левый скол 3"] # 0xec14 (en: 'left parens 3', google translation) - - "": [t: "левый скол 4"] # 0xec15 (en: 'left parens 4', google translation) - - "": [t: "правая скобка 1"] # 0xec16 (en: 'right parens 1', google translation) - - "": [t: "правая скобка 2"] # 0xec17 (en: 'right parens 2', google translation) - - "": [t: "правая скобка 3"] # 0xec18 (en: 'right parens 3', google translation) - - "": [t: "правая скобка 4"] # 0xec19 (en: 'right parens 4', google translation) - - "": [t: "радикальный 1"] # 0xec1a (en: 'radical 1', google translation) - - "": [t: "радикальный 2"] # 0xec1b (en: 'radical 2', google translation) - - "": [t: "радикал 3"] # 0xec1c (en: 'radical 3', google translation) - - "": [t: "радикал 4"] # 0xec1d (en: 'radical 4', google translation) - - "": [t: "радикал 5"] # 0xec1e (en: 'radical 5', google translation) - - "": [t: "радикальное дно"] # 0xec1f (en: 'radical bottom', google translation) - - "": [t: "радикальный вертикальный удлинитель"] # 0xec20 (en: 'radical vertical extender', google translation) - - "": [t: "радикальный топ"] # 0xec21 (en: 'radical top', google translation) - - "": [t: "оставленный белый топ кронштейна"] # 0xec22 (en: 'left white bracket top', google translation) - - "": [t: "оставый белый растяжение кронштейна"] # 0xec23 (en: 'left white bracket extender', google translation) - - "": [t: "левый белый кронштейн дно"] # 0xec24 (en: 'left white bracket bottom', google translation) - - "": [t: "правый белый кронштейн"] # 0xec25 (en: 'right white bracket top', google translation) - - "": [t: "правый белый кронштейн"] # 0xec26 (en: 'right white bracket extender', google translation) - - "": [t: "правый белый кронштейн дно"] # 0xec27 (en: 'right white bracket bottom', google translation) - - "": [t: "оставил белый кудрявый кронштейн"] # 0xec30 (en: 'left white curly bracket', google translation) - - "": [t: "правый белый кудрявый кронштейн"] # 0xec31 (en: 'right white curly bracket', google translation) - - "": [t: "знак длинного дивизии"] # 0xec32 (en: 'long division sign', google translation) - - "": [t: "длинное знаком дивизии"] # 0xec33 (en: 'long division sign extender', google translation) - - "": [t: "короткое подразделение"] # 0xec34 (en: 'short division', google translation) - - "": [t: "двойной юго -запад к северо -востоку эм бонд"] # 0xec40 (en: 'double southwest to northeast em bond', google translation) - - "": [t: "двойной северо -запад до юго -восточной эм бонд"] # 0xec41 (en: 'double northwest to southeast em bond', google translation) - - "": [t: "единая горизонтальная em -связь"] # 0xec42 (en: 'single horizontal em bond', google translation) - - "": [t: "двойная горизонтальная em -связь"] # 0xec43 (en: 'double horizontal em bond', google translation) - - "": [t: "тройная горизонтальная эм бонг"] # 0xec44 (en: 'triple horizontal em bond', google translation) - - "": [t: "одиночная вертикальная облигация"] # 0xec45 (en: 'single vertical em bond', google translation) - - "": [t: "двойная вертикальная облигация"] # 0xec46 (en: 'double vertical em bond', google translation) - - "": [t: "тройная вертикальная облигация"] # 0xec47 (en: 'triple vertical em bond', google translation) - - "": [t: "меньше, чем эм бонд"] # 0xec48 (en: 'less than em bond', google translation) - - "": [t: "больше, чем эм бонд"] # 0xec49 (en: 'greater than em bond', google translation) - - "": [t: "одиночная горизонтальная en bond"] # 0xec4a (en: 'single horizontal en bond', google translation) - - "": [t: "двойная горизонтальная en bond"] # 0xec4b (en: 'double horizontal en bond', google translation) - - "": [t: "тройная горизонтальная связь"] # 0xec4c (en: 'triple horizontal en bond', google translation) - - "": [t: "верхний левый прямоугольник"] # 0xec80 (en: 'top left rectangle', google translation) - - "": [t: "внизу левый прямоугольник"] # 0xec81 (en: 'bottom left rectangle', google translation) - - "": [t: "вверху правого прямоугольника"] # 0xec90 (en: 'top right rectangle', google translation) - - "": [t: "нижний правый прямоугольник"] # 0xec91 (en: 'bottom right rectangle', google translation) - - "": [t: "синтетический угол дивизии"] # 0xec92 (en: 'synthetic division corner', google translation) - - "": [t: "синтетическое разделение горизонтальное удлинитель"] # 0xec93 (en: 'synthetic division horizontal extender', google translation) - - "": [t: "вертикальное удлинение синтетического деления"] # 0xec94 (en: 'synthetic division vertical extender', google translation) - - "": [t: "левый потолок"] # 0xec95 (en: 'left ceiling floor extender', google translation) - - "": [t: "правый потолок"] # 0xec96 (en: 'right ceiling floor extender', google translation) - - "": [t: "над скобком удлинителя"] # 0xec97 (en: 'over bracket extender', google translation) - - "": [t: "вертикальный батончик"] # 0xec98 (en: 'vertical bar extender', google translation) - - "": [t: "левый двойной вертикальный удлинитель"] # 0xec99 (en: 'left double vertical bar extender', google translation) - - "": [t: "горизонтальный батончик"] # 0xec9a (en: 'horizontal bar extender', google translation) - - "": [t: "под преодолеванием кронштейна"] # 0xec9c (en: 'under bracket extender', google translation) - - "": [t: "указывая в скобках справа"] # 0xec9d (en: 'down pointing paren right', google translation) - - "": [t: "указывание о скобках"] # 0xec9e (en: 'down pointing paren extender', google translation) - - "": [t: "установка вниз по указанию скобок"] # 0xec9f (en: 'down pointing paren left', google translation) - - "": [t: "укажите удлинители"] # 0xeca0 (en: 'up pointing brace extender', google translation) - - "": [t: "указывая в скобках"] # 0xeca1 (en: 'up pointing paren left', google translation) - - "": [t: "укажите удлинители скобок"] # 0xeca2 (en: 'up pointing paren extender', google translation) - - "": [t: "указывая в скобках"] # 0xeca3 (en: 'up pointing paren right', google translation) - - "": [t: "вниз по направлению скобки удлинителя"] # 0xeca4 (en: 'down pointing brace extender', google translation) - - "": [t: "планка константа над двумя pi bar"] # 0xed00 (en: 'planck constant over two pi bar', google translation) - - "": [t: "зеркало g"] # 0xed01 (en: 'mirror g', google translation) - - "": [t: "dotless j"] # 0xed02 (google translation) - - "": [t: "дигамма"] # 0xed03 (en: 'digamma', google translation) - - "ϝ": [t: "дигамма"] # 0x3dd (en: 'digamma') - - "": [t: ""] # 0xed10 (en: 'd', google translation) - - "ⅆ": [t: "ⅆ"] # 0x2146 (en: 'd', google translation) - - "": [t: ""] # 0xed11 (en: 'e', google translation) - - "ⅇ": [t: "ⅇ"] # 0x2147 (en: 'e', google translation) - - "": [t: ""] # 0xed12 (en: 'i', google translation) - - "ⅈ": [t: "ⅈ"] # 0x2148 (en: 'i', google translation) - - "": [t: ""] # 0xed13 (en: 'j', google translation) + then: [t: "крест"] + else: [t: "векторное произведение"] + - "⨰": [t: "знак умножения с точкой сверху"] # 0x2a30 + - "⨱": [t: "знак умножения с подчёркиванием"] # 0x2a31 + - "⨲": [t: "полупрямое произведение с закрытым низом"] # 0x2a32 + - "⨳": [t: "произведение smash"] # 0x2a33 + - "⨴": [t: "знак умножения в левом полукруге"] # 0x2a34 + - "⨵": [t: "знак умножения в правом полукруге"] # 0x2a35 + - "⨶": [t: "знак умножения в круге с циркумфлексом"] # 0x2a36 + - "⨷": [t: "знак умножения в двойном круге"] # 0x2a37 + - "⨸": [t: "знак деления в круге"] # 0x2a38 + - "⨹": [t: "знак плюс в треугольнике"] # 0x2a39 + - "⨺": [t: "знак минус в треугольнике"] # 0x2a3a + - "⨻": [t: "знак умножения в треугольнике"] # 0x2a3b + - "⨼": [t: "внутреннее произведение"] # 0x2a3c + - "⨽": [t: "внутреннее произведение справа"] # 0x2a3d + - "⨾": [t: "реляционная композиция в нотации Z"] # 0x2a3e + - "⨿": [t: "амальгама или копроизведение"] # 0x2a3f + - "⩀": [t: "пересечение с точкой"] # 0x2a40 + - "⩁": [t: "объединение со знаком минус"] # 0x2a41 + - "⩂": [t: "объединение с надчеркиванием"] # 0x2a42 + - "⩃": [t: "пересечение с надчеркиванием"] # 0x2a43 + - "⩄": [t: "пересечение с логическим и"] # 0x2a44 + - "⩅": [t: "объединение с логическим или"] # 0x2a45 + - "⩆": [t: "объединение над пересечением"] # 0x2a46 + - "⩇": [t: "пересечение над объединением"] # 0x2a47 + - "⩈": [t: "объединение над чертой над пересечением"] # 0x2a48 + - "⩉": [t: "пересечение над чертой над объединением"] # 0x2a49 + - "⩊": [t: "объединение рядом и соединённое с объединением"] # 0x2a4a + - "⩋": [t: "пересечение рядом и соединённое с пересечением"] # 0x2a4b + - "⩌": [t: "закрытое объединение с засечками"] # 0x2a4c + - "⩍": [t: "закрытое пересечение с засечками"] # 0x2a4d + - "⩎": [t: "двойное квадратное пересечение"] # 0x2a4e + - "⩏": [t: "двойное квадратное объединение"] # 0x2a4f + - "⩐": [t: "закрытое объединение с засечками и smash-произведением"] # 0x2a50 + - "⩑": [t: "логическое и с точкой сверху"] # 0x2a51 + - "⩒": [t: "логическое или с точкой сверху"] # 0x2a52 + - "⩓": [t: "двойное логическое и"] # 0x2a53 + - "⩔": [t: "двойное логическое или"] # 0x2a54 + - "⩕": [t: "два пересекающихся логических и"] # 0x2a55 + - "⩖": [t: "два пересекающихся логических или"] # 0x2a56 + - "⩗": [t: "наклонное большое или"] # 0x2a57 + - "⩘": [t: "наклонное большое и"] # 0x2a58 + - "⩙": [t: "логическое или, перекрывающее логическое и"] # 0x2a59 + - "⩚": [t: "логическое и со средним стержнем"] # 0x2a5a + - "⩛": [t: "логическое или со средним стержнем"] # 0x2a5b + - "⩜": [t: "логическое и с горизонтальной чертой"] # 0x2a5c + - "⩝": [t: "логическое или с горизонтальной чертой"] # 0x2a5d + - "⩞": [t: "логическое и с двойным надчеркиванием"] # 0x2a5e + - "⩟": [t: "логическое и с подчёркиванием"] # 0x2a5f + - "⩠": [t: "логическое и с двойным подчёркиванием"] # 0x2a60 + - "⩡": [t: "маленькое vee с подчёркиванием"] # 0x2a61 + - "⩢": [t: "логическое или с двойным надчеркиванием"] # 0x2a62 + - "⩣": [t: "логическое или с двойным подчёркиванием"] # 0x2a63 + - "⩤": [t: "антиограничение области в нотации Z"] # 0x2a64 + - "⩥": [t: "антиограничение диапазона в нотации Z"] # 0x2a65 + - "⩦": [t: "знак равенства с точкой снизу"] # 0x2a66 + - "⩧": [t: "тождественно с точкой сверху"] # 0x2a67 + - "⩨": [t: "тройная горизонтальная черта с двойной вертикальной чертой"] # 0x2a68 + - "⩩": [t: "тройная горизонтальная черта с тройной вертикальной чертой"] # 0x2a69 + - "⩪": [t: "оператор тильды с точкой сверху"] # 0x2a6a + - "⩫": [t: "оператор тильды с восходящими точками"] # 0x2a6b + - "⩬": [t: "подобно минус подобно"] # 0x2a6c + - "⩭": [t: "конгруэнтно с точкой сверху"] # 0x2a6d + - "⩯": [t: "почти равно с циркумфлексом"] # 0x2a6f + - "⩰": [t: "приблизительно равно или равно"] # 0x2a70 + - "⩱": [t: "знак равенства над знаком плюс"] # 0x2a71 + - "⩲": [t: "знак плюс над знаком равенства"] # 0x2a72 + - "⩳": [t: "знак равенства над оператором тильды"] # 0x2a73 + - "⩴": [t: "двойное двоеточие равно"] # 0x2a74 + - "⩵": [t: "два последовательных знака равенства"] # 0x2a75 + - "⩶": [t: "три последовательных знака равенства"] # 0x2a76 + - "⩷": [t: "знак равенства с двумя точками сверху и двумя снизу"] # 0x2a77 + - "⩸": [t: "эквивалентно с четырьмя точками сверху"] # 0x2a78 + - "⩹": [t: "меньше с кругом внутри"] # 0x2a79 + - "⩺": [t: "больше с кругом внутри"] # 0x2a7a + - "⩻": [t: "меньше с вопросительным знаком сверху"] # 0x2a7b + - "⩼": [t: "больше с вопросительным знаком сверху"] # 0x2a7c + - "⩽": [t: "меньше или наклонное равно"] # 0x2a7d + - "⩾": [t: "больше или наклонное равно"] # 0x2a7e + - "⩿": [t: "меньше или наклонное равно с точкой внутри"] # 0x2a7f + - "⪀": [t: "больше или наклонное равно с точкой внутри"] # 0x2a80 + - "⪁": [t: "меньше или наклонное равно с точкой сверху"] # 0x2a81 + - "⪂": [t: "больше или наклонное равно с точкой сверху"] # 0x2a82 + - "⪃": [t: "меньше или наклонное равно с точкой справа сверху"] # 0x2a83 + - "⪄": [t: "больше или наклонное равно с точкой слева сверху"] # 0x2a84 + - "⪅": [t: "меньше или приблизительно"] # 0x2a85 + - "⪆": [t: "больше или приблизительно"] # 0x2a86 + - "⪇": [t: "меньше и не равно с одной чертой"] # 0x2a87 + - "⪈": [t: "больше и не равно с одной чертой"] # 0x2a88 + - "⪉": [t: "меньше и не приблизительно"] # 0x2a89 + - "⪊": [t: "больше и не приблизительно"] # 0x2a8a + - "⪋": [t: "меньше над двойной чертой равно над больше"] # 0x2a8b + - "⪌": [t: "больше над двойной чертой равно над меньше"] # 0x2a8c + - "⪍": [t: "меньше над подобно или равно"] # 0x2a8d + - "⪎": [t: "больше над подобно или равно"] # 0x2a8e + - "⪏": [t: "меньше над подобно над больше"] # 0x2a8f + - "⪐": [t: "больше над подобно над меньше"] # 0x2a90 + - "⪑": [t: "меньше над больше над двойной чертой равно"] # 0x2a91 + - "⪒": [t: "больше над меньше над двойной чертой равно"] # 0x2a92 + - "⪓": [t: "меньше над наклонным равно над больше над наклонным равно"] # 0x2a93 + - "⪔": [t: "больше над наклонным равно над меньше над наклонным равно"] # 0x2a94 + - "⪕": [t: "наклонное равно или меньше"] # 0x2a95 + - "⪖": [t: "наклонное равно или больше"] # 0x2a96 + - "⪗": [t: "наклонное равно или меньше с точкой внутри"] # 0x2a97 + - "⪘": [t: "наклонное равно или больше с точкой внутри"] # 0x2a98 + - "⪙": [t: "двойная черта равно или меньше"] # 0x2a99 + - "⪚": [t: "двойная черта равно или больше"] # 0x2a9a + - "⪛": [t: "двойная черта наклонного равно или меньше"] # 0x2a9b + - "⪜": [t: "двойная черта наклонного равно или больше"] # 0x2a9c + - "⪝": [t: "подобно или меньше"] # 0x2a9d + - "⪞": [t: "подобно или больше"] # 0x2a9e + - "⪟": [t: "подобно над меньше над знаком равенства"] # 0x2a9f + - "⪠": [t: "подобно над больше над знаком равенства"] # 0x2aa0 + - "⪡": [t: "двойное вложенное меньше"] # 0x2aa1 + - "⪢": [t: "двойное вложенное больше"] # 0x2aa2 + - "⪣": [t: "двойное вложенное меньше с подчёркиванием"] # 0x2aa3 + - "⪤": [t: "больше, перекрывающее меньше"] # 0x2aa4 + - "⪥": [t: "больше рядом с меньше"] # 0x2aa5 + - "⪦": [t: "меньше, закрытое кривой"] # 0x2aa6 + - "⪧": [t: "больше, закрытое кривой"] # 0x2aa7 + - "⪨": [t: "меньше, закрытое кривой, над наклонным равно"] # 0x2aa8 + - "⪩": [t: "больше, закрытое кривой, над наклонным равно"] # 0x2aa9 + - "⪪": [t: "меньше, чем"] # 0x2aaa + - "⪫": [t: "больше, чем"] # 0x2aab + - "⪬": [t: "меньше или равно"] # 0x2aac + - "⪭": [t: "больше или равно"] # 0x2aad + - "⪮": [t: "знак равенства с волнистой линией сверху"] # 0x2aae + - "⪯": [t: "предшествует над одинарной чертой равно"] # 0x2aaf + - "⪰": [t: "следует над одинарной чертой равно"] # 0x2ab0 + - "⪱": [t: "предшествует над одинарной чертой не равно"] # 0x2ab1 + - "⪲": [t: "следует над одинарной чертой не равно"] # 0x2ab2 + - "⪳": [t: "предшествует над знаком равенства"] # 0x2ab3 + - "⪴": [t: "следует над знаком равенства"] # 0x2ab4 + - "⪵": [t: "предшествует над не равно"] # 0x2ab5 + - "⪶": [t: "следует над не равно"] # 0x2ab6 + - "⪷": [t: "предшествует над почти равно"] # 0x2ab7 + - "⪸": [t: "следует над почти равно"] # 0x2ab8 + - "⪹": [t: "предшествует над не почти равно"] # 0x2ab9 + - "⪺": [t: "следует над не почти равно"] # 0x2aba + - "⪻": [t: "двойное предшествует"] # 0x2abb + - "⪼": [t: "двойное следует"] # 0x2abc + - "⪽": [t: "подмножество с точкой"] # 0x2abd + - "⪾": [t: "надмножество с точкой"] # 0x2abe + - "⪿": [t: "подмножество со знаком плюс снизу"] # 0x2abf + - "⫀": [t: "надмножество со знаком плюс снизу"] # 0x2ac0 + - "⫁": [t: "подмножество со знаком умножения снизу"] # 0x2ac1 + - "⫂": [t: "надмножество со знаком умножения снизу"] # 0x2ac2 + - "⫃": [t: "подмножество или равно с точкой сверху"] # 0x2ac3 + - "⫄": [t: "надмножество или равно с точкой сверху"] # 0x2ac4 + - "⫅": [t: "подмножество над знаком равенства"] # 0x2ac5 + - "⫆": [t: "надмножество над знаком равенства"] # 0x2ac6 + - "⫇": [t: "подмножество над оператором тильды"] # 0x2ac7 + - "⫈": [t: "надмножество над оператором тильды"] # 0x2ac8 + - "⫉": [t: "подмножество над почти равно"] # 0x2ac9 + - "⫊": [t: "надмножество над почти равно"] # 0x2aca + - "⫋": [t: "подмножество над не равно"] # 0x2acb + - "⫌": [t: "надмножество над не равно"] # 0x2acc + - "⫍": [t: "квадратный левый открытый оператор"] # 0x2acd + - "⫎": [t: "квадратный правый открытый оператор"] # 0x2ace + - "⫏": [t: "замкнутое подмножество"] # 0x2acf + - "⫐": [t: "замкнутое надмножество"] # 0x2ad0 + - "⫑": [t: "замкнутое подмножество или равно"] # 0x2ad1 + - "⫒": [t: "замкнутое надмножество или равно"] # 0x2ad2 + - "⫓": [t: "подмножество над надмножеством"] # 0x2ad3 + - "⫔": [t: "надмножество над подмножеством"] # 0x2ad4 + - "⫕": [t: "подмножество над подмножеством"] # 0x2ad5 + - "⫖": [t: "надмножество над надмножеством"] # 0x2ad6 + - "⫗": [t: "надмножество рядом с подмножеством"] # 0x2ad7 + - "⫘": [t: "надмножество рядом и соединённое чертой с подмножеством"] # 0x2ad8 + - "⫙": [t: "элемент, открывающийся вниз"] # 0x2ad9 + - "⫚": [t: "вилы с t-образной вершиной"] # 0x2ada + - "⫛": [t: "трансверсальное пересечение"] # 0x2adb + - "⫝̸": [t: "ветвление"] # 0x2adc + - "⫝": [t: "неветвление"] # 0x2add + - "⫞": [t: "короткая левая метка"] # 0x2ade + - "⫟": [t: "короткая нижняя метка"] # 0x2adf + - "⫠": [t: "короткая верхняя метка"] # 0x2ae0 + - "⫡": [t: "перпендикуляр с s"] # 0x2ae1 + - "⫢": [t: "вертикальная черта тройной правый поворотный шлагбаум"] # 0x2ae2 + - "⫣": [t: "двойная вертикальная черта левый поворотный шлагбаум"] # 0x2ae3 + - "⫤": [t: "вертикальная черта двойной левый поворотный шлагбаум"] # 0x2ae4 + - "⫥": [t: "двойная вертикальная черта двойной левый поворотный шлагбаум"] # 0x2ae5 + - "⫦": [t: "длинная черта от левого элемента двойной вертикали"] # 0x2ae6 + - "⫧": [t: "короткая нижняя метка с надчеркиванием"] # 0x2ae7 + - "⫨": [t: "короткая верхняя метка с подчёркиванием"] # 0x2ae8 + - "⫩": [t: "короткая верхняя метка над короткой нижней меткой"] # 0x2ae9 + - "⫪": [t: "двойная нижняя метка"] # 0x2aea + - "⫫": [t: "двойная верхняя метка"] # 0x2aeb + - "⫬": [t: "двойной штрих знак отрицания"] # 0x2aec + - "⫭": [t: "перевёрнутый двойной штрих знак отрицания"] # 0x2aed + - "⫮": [t: "не делит с обратной отрицающей косой чертой"] # 0x2aee + - "⫯": [t: "вертикальная линия с кругом сверху"] # 0x2aef + - "⫰": [t: "вертикальная линия с кругом снизу"] # 0x2af0 + - "⫱": [t: "нижняя метка с кругом снизу"] # 0x2af1 + - "⫲": [t: "параллельно с горизонтальной чертой"] # 0x2af2 + - "⫳": [t: "параллельно с оператором тильды"] # 0x2af3 + - "⫴": [t: "тройная вертикальная черта бинарное отношение"] # 0x2af4 + - "⫵": [t: "тройная вертикальная черта с горизонтальной чертой"] # 0x2af5 + - "⫶": [t: "оператор тройного двоеточия"] # 0x2af6 + - "⫷": [t: "тройное вложенное меньше"] # 0x2af7 + - "⫸": [t: "тройное вложенное больше"] # 0x2af8 + - "⫹": [t: "двойная черта наклонного меньше или равно"] # 0x2af9 + - "⫺": [t: "двойная черта наклонного больше или равно"] # 0x2afa + - "⫻": [t: "тройная косая черта бинарное отношение"] # 0x2afb + - "⫼": [t: "большой оператор тройной вертикальной черты"] # 0x2afc + - "⫽": [t: "оператор двойной косой черты"] # 0x2afd + - "⫾": [t: "белая вертикальная черта"] # 0x2afe + - "⫿": [t: "белая вертикальная черта"] # 0x2aff + - "⬀": [t: "белая стрелка северо-восток"] # 0x2b00 + - "⬁": [t: "белая стрелка северо-запад"] # 0x2b01 + - "⬂": [t: "белая стрелка юго-восток"] # 0x2b02 + - "⬃": [t: "белая стрелка юго-запад"] # 0x2b03 + - "⬄": [t: "белая стрелка влево-вправо"] # 0x2b04 + - "⬅": [t: "чёрная стрелка влево"] # 0x2b05 + - "⬆": [t: "чёрная стрелка вверх"] # 0x2b06 + - "⬇": [t: "чёрная стрелка вниз"] # 0x2b07 + - "⬈": [t: "чёрная стрелка северо-восток"] # 0x2b08 + - "⬉": [t: "чёрная стрелка северо-запад"] # 0x2b09 + - "⬊": [t: "чёрная стрелка юго-восток"] # 0x2b0a + - "⬋": [t: "чёрная стрелка юго-запад"] # 0x2b0b + - "⬌": [t: "чёрная стрелка влево-вправо"] # 0x2b0c + - "⬍": [t: "чёрная стрелка вверх-вниз"] # 0x2b0d + - "⬎": [t: "стрелка вправо с наконечником вниз"] # 0x2b0e + - "⬏": [t: "стрелка вправо с наконечником вверх"] # 0x2b0f + - "⬐": [t: "стрелка влево с наконечником вниз"] # 0x2b10 + - "⬑": [t: "стрелка влево с наконечником вверх"] # 0x2b11 + - "⬒": [t: "квадрат с верхней половиной чёрной"] # 0x2b12 + - "⬓": [t: "квадрат с нижней половиной чёрной"] # 0x2b13 + - "⬔": [t: "квадрат с правой верхней диагональной половиной чёрной"] # 0x2b14 + - "⬕": [t: "квадрат с левой нижней диагональной половиной чёрной"] # 0x2b15 + - "⬖": [t: "ромб с левой половиной чёрной"] # 0x2b16 + - "⬗": [t: "ромб с правой половиной чёрной"] # 0x2b17 + - "⬘": [t: "ромб с верхней половиной чёрной"] # 0x2b18 + - "⬙": [t: "ромб с нижней половиной чёрной"] # 0x2b19 + - "⬚": [t: "квадрат"] # 0x2b1a + - "⬛": [t: "чёрный большой квадрат"] # 0x2b1b + - "⬜": [t: "белый большой квадрат"] # 0x2b1c + - "⬝": [t: "чёрный очень маленький квадрат"] # 0x2b1d + - "⬞": [t: "белый очень маленький квадрат"] # 0x2b1e + - "⬟": [t: "чёрный пятиугольник"] # 0x2b1f + - "⬠": [t: "белый пятиугольник"] # 0x2b20 + - "⬡": [t: "белый шестиугольник"] # 0x2b21 + - "⬢": [t: "чёрный шестиугольник"] # 0x2b22 + - "⬣": [t: "горизонтальный чёрный шестиугольник"] # 0x2b23 + - "⬤": [t: "чёрный большой круг"] # 0x2b24 + - "⬥": [t: "чёрный средний ромб"] # 0x2b25 + - "⬦": [t: "белый средний ромб"] # 0x2b26 + - "⬧": [t: "чёрный средний ромб"] # 0x2b27 + - "⬨": [t: "белый средний ромб"] # 0x2b28 + - "⬩": [t: "чёрный маленький ромб"] # 0x2b29 + - "⬪": [t: "чёрный маленький ромб"] # 0x2b2a + - "⬫": [t: "белый маленький ромб"] # 0x2b2b + - "⬬": [t: "чёрный горизонтальный эллипс"] # 0x2b2c + - "⬭": [t: "белый горизонтальный эллипс"] # 0x2b2d + - "⬮": [t: "чёрный вертикальный эллипс"] # 0x2b2e + - "⬯": [t: "белый вертикальный эллипс"] # 0x2b2f + - "⬰": [t: "стрелка влево с маленьким кругом"] # 0x2b30 + - "⬱": [t: "три стрелки влево"] # 0x2b31 + - "⬲": [t: "стрелка влево с плюсом в круге"] # 0x2b32 + - "⬳": [t: "длинная извилистая стрелка влево"] # 0x2b33 + - "⬴": [t: "стрелка влево с двумя головками и вертикальной чертой"] # 0x2b34 + - "⬵": [t: "стрелка влево с двумя головками и двойной вертикальной чертой"] # 0x2b35 + - "⬶": [t: "стрелка влево с двумя головками от черты"] # 0x2b36 + - "⬷": [t: "стрелка влево с двумя головками и тройным штрихом"] # 0x2b37 + - "⬸": [t: "стрелка влево с пунктирным стержнем"] # 0x2b38 + - "⬹": [t: "стрелка влево с хвостом и вертикальной чертой"] # 0x2b39 + - "⬺": [t: "стрелка влево с хвостом и двойной вертикальной чертой"] # 0x2b3a + - "⬻": [t: "стрелка влево с двумя головками и хвостом"] # 0x2b3b + - "⬼": [t: "стрелка влево с двумя головками, хвостом и вертикальной чертой"] # 0x2b3c + - "⬽": [t: "стрелка влево с двумя головками, хвостом и двойной вертикальной чертой"] # 0x2b3d + - "⬾": [t: "стрелка влево через x"] # 0x2b3e + - "⬿": [t: "волнистая стрелка, указывающая прямо влево"] # 0x2b3f + - "⭀": [t: "знак равенства над стрелкой влево"] # 0x2b40 + - "⭁": [t: "обратный оператор тильды над стрелкой влево"] # 0x2b41 + - "⭂": [t: "стрелка влево над обратным почти равно"] # 0x2b42 + - "⭃": [t: "стрелка вправо сквозь больше"] # 0x2b43 + - "⭄": [t: "стрелка вправо сквозь надмножество"] # 0x2b44 + - "⭅": [t: "учетверённая стрелка влево"] # 0x2b45 + - "⭆": [t: "учетверённая стрелка вправо"] # 0x2b46 + - "⭇": [t: "обратный оператор тильды над стрелкой вправо"] # 0x2b47 + - "⭈": [t: "стрелка вправо над обратным почти равно"] # 0x2b48 + - "⭉": [t: "оператор тильды над стрелкой влево"] # 0x2b49 + - "⭊": [t: "стрелка влево над почти равно"] # 0x2b4a + - "⭋": [t: "стрелка влево над обратным оператором тильды"] # 0x2b4b + - "⭌": [t: "стрелка вправо над обратным оператором тильды"] # 0x2b4c + - "⭐": [t: "белая средняя звезда"] # 0x2b50 + - "⭑": [t: "чёрная маленькая звезда"] # 0x2b51 + - "⭒": [t: "белая маленькая звезда"] # 0x2b52 + - "⭓": [t: "чёрный пятиугольник, указывающий вправо"] # 0x2b53 + - "⭔": [t: "белый пятиугольник, указывающий вправо"] # 0x2b54 + - "⭕": [t: "тяжёлый большой круг"] # 0x2b55 + - "⭖": [t: "тяжёлый овал с овалом внутри"] # 0x2b56 + - "⭗": [t: "тяжёлый круг с кругом внутри"] # 0x2b57 + - "⭘": [t: "тяжёлый круг"] # 0x2b58 + - "⭙": [t: "тяжёлый круговой андреевский крест"] # 0x2b59 + - "⸀": [t: "маркер замены прямого угла"] # 0x2e00 + - "⸁": [t: "маркер замены прямого угла с точками"] # 0x2e01 + - "⸂": [t: "левая скобка подстановки"] # 0x2e02 + - "⸃": [t: "правая скобка подстановки"] # 0x2e03 + - "⸄": [t: "левая пунктирная скобка подстановки"] # 0x2e04 + - "⸅": [t: "правая пунктирная скобка подстановки"] # 0x2e05 + - "⸆": [t: "приподнятый маркер интерполяции"] # 0x2e06 + - "⸇": [t: "приподнятый пунктирный маркер интерполяции"] # 0x2e07 + - "⸈": [t: "пунктирный маркер транспозиции"] # 0x2e08 + - "⸉": [t: "левая скобка транспозиции"] # 0x2e09 + - "⸊": [t: "правая скобка транспозиции"] # 0x2e0a + - "⸋": [t: "приподнятый квадрат"] # 0x2e0b + - "⸌": [t: "левая приподнятая скобка пропуска"] # 0x2e0c + - "⸍": [t: "правая приподнятая скобка пропуска"] # 0x2e0d + - "⸎": [t: "редакторская корона"] # 0x2e0e + - "⸏": [t: "параграфос"] # 0x2e0f + - "⸐": [t: "раздвоенный параграфос"] # 0x2e10 + - "⸑": [t: "перевёрнутый раздвоенный параграфос"] # 0x2e11 + - "⸒": [t: "гиподиастола"] # 0x2e12 + - "⸓": [t: "пунктирный обелос"] # 0x2e13 + - "⸔": [t: "нижняя анкора"] # 0x2e14 + - "⸕": [t: "верхняя анкора"] # 0x2e15 + - "⸖": [t: "пунктирный правый угол"] # 0x2e16 + - "⸗": [t: "двойной наклонный дефис"] # 0x2e17 + - "⸘": [t: "перевёрнутый интерробанг"] # 0x2e18 + - "⸙": [t: "пальмовая ветвь"] # 0x2e19 + - "⸚": [t: "дефис с диерезисом"] # 0x2e1a + - "⸛": [t: "тильда с кольцом сверху"] # 0x2e1b + - "⸜": [t: "левая нижняя скобка парафраза"] # 0x2e1c + - "⸝": [t: "правая нижняя скобка парафраза"] # 0x2e1d + - "⸞": [t: "тильда с точкой сверху"] # 0x2e1e + - "⸟": [t: "тильда с точкой снизу"] # 0x2e1f + - "⸠": [t: "левая вертикальная черта с пером"] # 0x2e20 + - "⸡": [t: "правая вертикальная черта с пером"] # 0x2e21 + - "⸢": [t: "левая верхняя половина скобки"] # 0x2e22 + - "⸣": [t: "правая верхняя половина скобки"] # 0x2e23 + - "⸤": [t: "левая нижняя половина скобки"] # 0x2e24 + - "⸥": [t: "правая нижняя половина скобки"] # 0x2e25 + - "⸦": [t: "левая боковая u-образная скобка"] # 0x2e26 + - "⸧": [t: "правая боковая u-образная скобка"] # 0x2e27 + - "⸨": [t: "левые двойные круглые скобки"] # 0x2e28 + - "⸩": [t: "правые двойные круглые скобки"] # 0x2e29 + - "⸪": [t: "две точки над одной точкой"] # 0x2e2a + - "⸫": [t: "одна точка над двумя точками"] # 0x2e2b + - "⸬": [t: "квадратные четыре точки"] # 0x2e2c + - "⸭": [t: "пятиточечный знак"] # 0x2e2d + - "⸮": [t: "перевёрнутый вопросительный знак"] # 0x2e2e + - "ⸯ": [t: "вертикальная тильда"] # 0x2e2f + - "⸰": [t: "кольцевая точка"] # 0x2e30 + - "⸱": [t: "средняя точка-разделитель слов"] # 0x2e31 + - "⸲": [t: "повёрнутая запятая"] # 0x2e32 + - "⸳": [t: "приподнятая точка"] # 0x2e33 + - "⸴": [t: "приподнятая запятая"] # 0x2e34 + - "⸵": [t: "повёрнутая точка с запятой"] # 0x2e35 + - "⸶": [t: "крестик с левым охранным элементом"] # 0x2e36 + - "⸷": [t: "крестик с правым охранным элементом"] # 0x2e37 + - "⸸": [t: "повёрнутый крестик"] # 0x2e38 + - "⸹": [t: "верхняя половина параграфного знака"] # 0x2e39 + - "⸺": [t: "два длинных тире"] # 0x2e3a + - "⸻": [t: "три длинных тире"] # 0x2e3b + - "〃": [t: "знак повторения"] # 0x3003 + - "〈": [t: "левая угловая скобка"] # 0x3008 + - "〉": [t: "правая угловая скобка"] # 0x3009 + - "《": [t: "левая двойная угловая скобка"] # 0x300a + - "》": [t: "правая двойная угловая скобка"] # 0x300b + - "「": [t: "левая угловая скобка"] # 0x300c + - "」": [t: "правая угловая скобка"] # 0x300d + - "『": [t: "левая белая угловая скобка"] # 0x300e + - "』": [t: "правая белая угловая скобка"] # 0x300f + - "【": [t: "левая чёрная чечевицеобразная скобка"] # 0x3010 + - "】": [t: "правая чёрная чечевицеобразная скобка"]# 0x3011 + - "〔": [t: "левая черепашья скобка"] # 0x3014 + - "〕": [t: "правая черепашья скобка"] # 0x3015 + - "〖": [t: "левая белая чечевицеобразная скобка"] # 0x3016 + - "〗": [t: "правая белая чечевицеобразная скобка"] # 0x3017 + - "〘": [t: "левая белая черепашья скобка"] # 0x3018 + - "〙": [t: "правая белая черепашья скобка"] # 0x3019 + - "〚": [t: "левая белая квадратная скобка"] # 0x301a + - "〛": [t: "правая белая квадратная скобка"] # 0x301b + - "〜": [t: "волновая черта"] # 0x301c + - "〰": [t: "волнистая черта"] # 0x3030 + - "㉈": [t: "десятка в круге на чёрном квадрате"] # 0x3248 + - "㉉": [t: "двадцать в круге на чёрном квадрате"] # 0x3249 + - "㉊": [t: "тридцать в круге на чёрном квадрате"] # 0x324a + - "㉋": [t: "сорок в круге на чёрном квадрате"] # 0x324b + - "㉌": [t: "пятьдесят в круге на чёрном квадрате"] # 0x324c + - "㉍": [t: "шестьдесят в круге на чёрном квадрате"] # 0x324d + - "㉎": [t: "семьдесят в круге на чёрном квадрате"] # 0x324e + - "㉏": [t: "восемьдесят в круге на чёрном квадрате"] # 0x324f + - "㉑": [t: "двадцать один в круге"] # 0x3251 + - "㉒": [t: "двадцать два в круге"] # 0x3252 + - "㉓": [t: "двадцать три в круге"] # 0x3253 + - "㉔": [t: "двадцать четыре в круге"] # 0x3254 + - "㉕": [t: "двадцать пять в круге"] # 0x3255 + - "㉖": [t: "двадцать шесть в круге"] # 0x3256 + - "㉗": [t: "двадцать семь в круге"] # 0x3257 + - "㉘": [t: "двадцать восемь в круге"] # 0x3258 + - "㉙": [t: "двадцать девять в круге"] # 0x3259 + - "㉚": [t: "тридцать в круге"] # 0x325a + - "㉛": [t: "тридцать один в круге"] # 0x325b + - "㉜": [t: "тридцать два в круге"] # 0x325c + - "㉝": [t: "тридцать три в круге"] # 0x325d + - "㉞": [t: "тридцать четыре в круге"] # 0x325e + - "㉟": [t: "тридцать пять в круге"] # 0x325f + - "㊱": [t: "тридцать шесть в круге"] # 0x32b1 + - "㊲": [t: "тридцать семь в круге"] # 0x32b2 + - "㊳": [t: "тридцать восемь в круге"] # 0x32b3 + - "㊴": [t: "тридцать девять в круге"] # 0x32b4 + - "㊵": [t: "сорок в круге"] # 0x32b5 + - "㊶": [t: "сорок один в круге"] # 0x32b6 + - "㊷": [t: "сорок два в круге"] # 0x32b7 + - "㊸": [t: "сорок три в круге"] # 0x32b8 + - "㊹": [t: "сорок четыре в круге"] # 0x32b9 + - "㊺": [t: "сорок пять в круге"] # 0x32ba + - "㊻": [t: "сорок шесть в круге"] # 0x32bb + - "㊼": [t: "сорок семь в круге"] # 0x32bc + - "㊽": [t: "сорок восемь в круге"] # 0x32bd + - "㊾": [t: "сорок девять в круге"] # 0x32be + - "㊿": [t: "пятьдесят в круге"] # 0x32bf + - "㋌": [t: "Меркурий"] # 0x32cc + - "㋍": [t: "эрги"] # 0x32cd + - "㋎": [t: "электрон-вольты"] # 0x32ce + - "㋏": [t: "знак ограниченной ответственности"] # 0x32cf + - "㍱": [t: "гектопаскали"] # 0x3371 + - "㍲": [t: "дальтоны"] # 0x3372 + - "㍳": [t: "астрономические единицы"] # 0x3373 + - "㍴": [t: "бары"] # 0x3374 + - "㍵": [t: "ов"] # 0x3375 + - "㍶": [t: "парсеки"] # 0x3376 + - "㍷": [t: "дециметры"] # 0x3377 + - "㍸": [t: "квадратные дециметры"] # 0x3378 + - "㍹": [t: "кубические дециметры"] # 0x3379 + - "㍺": [t: "инструментальные единицы"] # 0x337a + - "㎀": [t: "пикоамперы"] # 0x3380 + - "㎁": [t: "наноамперы"] # 0x3381 + - "㎂": [t: "микроамперы"] # 0x3382 + - "㎃": [t: "миллиамперы"] # 0x3383 + - "㎄": [t: "килоамперы"] # 0x3384 + - "㎅": [t: "килобайты"] # 0x3385 + - "㎆": [t: "мегабайты"] # 0x3386 + - "㎇": [t: "гигабайты"] # 0x3387 + - "㎈": [t: "калории"] # 0x3388 + - "㎉": [t: "килокалории"] # 0x3389 + - "㎊": [t: "пикофарады"] # 0x338a + - "㎋": [t: "нанофарады"] # 0x338b + - "㎌": [t: "микрофарады"] # 0x338c + - "㎍": [t: "микрограммы"] # 0x338d + - "㎎": [t: "миллиграммы"] # 0x338e + - "㎏": [t: "килограммы"] # 0x338f + - "㎐": [t: "герцы"] # 0x3390 + - "㎑": [t: "килогерцы"] # 0x3391 + - "㎒": [t: "мегагерцы"] # 0x3392 + - "㎓": [t: "гигагерцы"] # 0x3393 + - "㎔": [t: "терагерцы"] # 0x3394 + - "㎕": [t: "микролитры"] # 0x3395 + - "㎖": [t: "миллилитры"] # 0x3396 + - "㎗": [t: "децилитры"] # 0x3397 + - "㎘": [t: "килолитры"] # 0x3398 + - "㎙": [t: "фемтометры"] # 0x3399 + - "㎚": [t: "нанометры"] # 0x339a + - "㎛": [t: "микрометры"] # 0x339b + - "㎜": [t: "миллиметры"] # 0x339c + - "㎝": [t: "сантиметры"] # 0x339d + - "㎞": [t: "километры"] # 0x339e + - "㎟": [t: "квадратные миллиметры"] # 0x339f + - "㎠": [t: "квадратные сантиметры"] # 0x33a0 + - "㎡": [t: "квадратные метры"] # 0x33a1 + - "㎢": [t: "квадратные километры"] # 0x33a2 + - "㎣": [t: "кубические миллиметры"] # 0x33a3 + - "㎤": [t: "кубические сантиметры"] # 0x33a4 + - "㎥": [t: "кубические метры"] # 0x33a5 + - "㎦": [t: "кубические километры"] # 0x33a6 + - "㎧": [t: "метры в секунду"] # 0x33a7 + - "㎨": [t: "метры в секунду в квадрате"] # 0x33a8 + - "㎩": [t: "паскали"] # 0x33a9 + - "㎪": [t: "килопаскали"] # 0x33aa + - "㎫": [t: "мегапаскали"] # 0x33ab + - "㎬": [t: "гигапаскали"] # 0x33ac + - "㎭": [t: "радианы"] # 0x33ad + - "㎮": [t: "радианы в секунду"] # 0x33ae + - "㎯": [t: "радианы в секунду в квадрате"] # 0x33af + - "㎰": [t: "пикосекунды"] # 0x33b0 + - "㎱": [t: "наносекунды"] # 0x33b1 + - "㎲": [t: "микросекунды"] # 0x33b2 + - "㎳": [t: "миллисекунды"] # 0x33b3 + - "㎴": [t: "пиковольты"] # 0x33b4 + - "㎵": [t: "нановольты"] # 0x33b5 + - "㎶": [t: "микровольты"] # 0x33b6 + - "㎷": [t: "милливольты"] # 0x33b7 + - "㎸": [t: "киловольты"] # 0x33b8 + - "㎹": [t: "мегавольты"] # 0x33b9 + - "㎺": [t: "пиковатты"] # 0x33ba + - "㎻": [t: "нановатты"] # 0x33bb + - "㎼": [t: "микроватты"] # 0x33bc + - "㎽": [t: "милливатты"] # 0x33bd + - "㎾": [t: "киловатты"] # 0x33be + - "㎿": [t: "мегаватты"] # 0x33bf + - "㏀": [t: "килоомы"] # 0x33c0 + - "㏁": [t: "мегаомы"] # 0x33c1 + - "㏂": [t: "аттометры"] # 0x33c2 + - "㏃": [t: "беккерели"] # 0x33c3 + - "㏄": [t: "кубические сантиметры"] # 0x33c4 + - "㏅": [t: "канделы"] # 0x33c5 + - "㏆": [t: "кулоны на килограмм"] # 0x33c6 + - "㏇": [t: "cap C, o, period"] # 0x33c7 + - "㏈": [t: "децибелы"] # 0x33c8 + - "㏉": [t: "греи"] # 0x33c9 + - "㏊": [t: "гектары"] # 0x33ca + - "㏋": [t: "лошадиные силы"] # 0x33cb + - "㏌": [t: "дюймы"] # 0x33cc + - "㏍": [t: "килокельвины"] # 0x33cd + - "㏎": [t: "километры"] # 0x33ce + - "㏏": [t: "узлы"] # 0x33cf + - "㏐": [t: "люмены"] # 0x33d0 + - "㏑": [t: "натуральный логарифм"] # 0x33d1 + - "㏒": [t: "логарифм"] # 0x33d2 + - "㏓": [t: "люксы"] # 0x33d3 + - "㏔": [t: "миллибарны"] # 0x33d4 + - "㏕": [t: "мили"] # 0x33d5 + - "㏖": [t: "моли"] # 0x33d6 + - "㏗": [t: "pH"] # 0x33d7 + - "㏘": [t: "пикометры"] # 0x33d8 + - "㏙": [t: "частей на миллион"] # 0x33d9 + - "㏚": [t: "пета-рентгены"] # 0x33da + - "㏛": [t: "стерадианы"] # 0x33db + - "㏜": [t: "зиверты"] # 0x33dc + - "㏝": [t: "веберы"] # 0x33dd + - "㏞": [t: "вольты на метр"] # 0x33de + - "㏟": [t: "амперы на метр"] # 0x33df + - "㏿": [t: "галлоны"] # 0x33ff + - "": [t: "равно с крышкой снизу"] # 0xe900 + - "": [t: "равно с плюсом сверху"] # 0xe901 + - "": [t: "равно с плюсом снизу"] # 0xe902 + - "": [t: "тильда с плюсом сверху"] # 0xe903 + - "": [t: "тильда с плюсом снизу"] # 0xe904 + - "": [t: "двойное равно над больше"] # 0xe908 + - "": [t: "двойное равно над меньше"] # 0xe909 + - "": [t: "содержит или равно"] # 0xe90a + - "": [t: "надмножество или равно"] # 0xe90b + - "": [t: "подмножество или равно"] # 0xe90c + - "": [t: "равно над меньше"] # 0xe90d + - "": [t: "элемент или равно"] # 0xe912 + - "": [t: "равно или больше"] # 0xe913 + - "": [t: "приблизительное надмножество"] # 0xe914 + - "": [t: "приблизительное подмножество"] # 0xe915 + - "": [t: "надмножество с точкой включает как подотношение"] # 0xe916 + - "": [t: "подмножество с точкой включено как подотношение"] # 0xe917 + - "": [t: "равно с точкой снизу"] # 0xe918 + - "": [t: "левая точка над минусом над правой точкой"] # 0xe919 + - "": [t: "правая точка над минусом над левой точкой"] # 0xe91a + - "": [t: "почти равно минус"] # 0xe91f + - "": [t: "двойная квадратная чашка"] # 0xe920 + - "": [t: "двойная квадратная крышка"] # 0xe921 + - "": [t: "меньше равно или больше"] # 0xe922 + - "": [t: "тильда с точкой"] # 0xe924 + - "": [t: "тильда с двумя точками"] # 0xe925 + - "": [t: "меньше больше или равно"] # 0xe926 + - "": [t: "больше меньше или равно"] # 0xe927 + - "": [t: "эквивалентно или меньше"] # 0xe928 + - "": [t: "эквивалентно или больше"] # 0xe929 + - "": [t: "левый открытый оператор"] # 0xe92a + - "": [t: "правый открытый оператор"] # 0xe92b + - "": [t: "тождественно с точкой"] # 0xe92c + - "": [t: "больше равно или меньше"] # 0xe92d + - "": [t: "оператор черты"] # 0xe92e + - "": [t: "оператор двойной черты"] # 0xe92f + - "": [t: "оператор тройной черты"] # 0xe930 + - "": [t: "меньше или приблизительно равно"] # 0xe932 + - "": [t: "больше или приблизительно равно"] # 0xe933 + - "": [t: "вложенное меньше"] # 0xe936 + - "": [t: "вложенное больше"] # 0xe937 + - "": [t: "предшествует или эквивалентно"] # 0xe93a + - "": [t: "следует или эквивалентно"] # 0xe93b + - "": [t: "предшествует над равно"] # 0xe940 + - "": [t: "следует над равно"] # 0xe941 + - "": [t: "меньше равно наклонное больше"] # 0xe942 + - "": [t: "больше равно наклонное меньше"] # 0xe943 + - "": [t: "удовлетворяется"] # 0xe948 + - "": [t: "ленивая s"] # 0xe949 + - "": [t: "не утверждение"] # 0xe94a + - "": [t: "двойное равно"] # 0xe94b + - "": [t: "тройное равно"] # 0xe94c + - "": [t: "задержка правила"] # 0xe94d + - "": [t: "разделитель псевдонимов"] # 0xe94e + - "": [t: "нормальная подгруппа с чертой"] # 0xe950 + - "": [t: "содержит как нормальную подгруппу с чертой"] # 0xe951 + - "": [t: "круглое следовательно"] # 0xe954 + - "": [t: "улыбка под чертой"] # 0xe955 + - "": [t: "хмурый над чертой"] # 0xe956 + - "": [t: "надмножество или почти равно"] # 0xe957 + - "": [t: "подмножество или почти равно"] # 0xe958 + - "": [t: "больше почти равно или меньше"] # 0xe959 + - "": [t: "меньше почти равно или больше"] # 0xe95a + - "": [t: "двойное логическое или"] # 0xe95c + - "": [t: "двойное логическое и"] # 0xe95d + - "": [t: "логическое или с двойной чертой снизу"] # 0xe95e + - "": [t: "логическое или с чертой снизу"] # 0xe95f + - "": [t: "почти равно над равно"] # 0xe962 + - "": [t: "треугольник вершиной влево с биссектрисой"] # 0xe964 + - "": [t: "треугольник вершиной вправо с биссектрисой"] # 0xe965 + - "": [t: "равно с пунктирной верхней линией"] # 0xe966 + - "": [t: "предшествует с двоеточием"] # 0xe967 + - "": [t: "следует с двоеточием"] # 0xe968 + - "": [t: "меньше или равно наклонное"] # 0xe969 + - "": [t: "больше или равно наклонное"] # 0xe96a + - "": [t: "вложенное гораздо меньше"] # 0xe96b + - "": [t: "вложенное гораздо больше"] # 0xe96c + - "": [t: "разность между вариант"] # 0xe96d + - "": [t: "наложение меньше больше"] # 0xe96e + - "": [t: "наложение или и"] # 0xe96f + - "": [t: "надмножество над надмножеством"] # 0xe970 + - "": [t: "подмножество над подмножеством"] # 0xe971 + - "": [t: "надмножество над подмножеством"] # 0xe972 + - "": [t: "подмножество над надмножеством"] # 0xe973 + - "": [t: "тройная вертикальная черта"] # 0xe979 + - "": [t: "парные четверные вертикальные точки"] # 0xe97a + - "": [t: "перпендикуляр над чертой"] # 0xe97b + - "": [t: "левый поворотный шлагбаум двойной вертикальной черты"] # 0xe97c + - "": [t: "двойной левый поворотный шлагбаум двойной вертикальной черты"] # 0xe97d + - "": [t: "перпендикуляр над перевёрнутым перпендикуляром"] # 0xe97e + - "": [t: "двойной левый поворотный шлагбаум вертикальной черты"] # 0xe97f + - "": [t: "сферический угол, открывающийся вверх"] # 0xe980 + - "": [t: "двойная косая черта"] # 0xe981 + - "": [t: "прямой угол с угловой чертой"] # 0xe982 + - "": [t: "вертикальная черта в круге"] # 0xe984 + - "": [t: "знак деления в круге"] # 0xe985 + - "": [t: "пунктирная косая черта"] # 0xe986 + - "": [t: "пунктирная обратная косая черта"] # 0xe987 + - "": [t: "пунктирная средняя линия"] # 0xe988 + - "": [t: "пунктирная вертикальная черта"] # 0xe989 + - "": [t: "перпендикуляр с s"] # 0xe98a + - "": [t: "угол с s"] # 0xe98b + - "": [t: "сферический угол, открывающийся влево"] # 0xe98c + - "": [t: "угол, открывающийся влево"] # 0xe98d + - "": [t: "вертикальная черта с двойным крючком"] # 0xe98e + - "": [t: "средний оператор точки свободного радикала"] # 0xe98f + - "": [t: "белый треугольник вершиной вверх над чертой"] # 0xe990 + - "": [t: "тождественно и параллельно"] # 0xe991 + - "": [t: "произведение smash"] # 0xe992 + - "": [t: "оператор тройной черты с горизонтальной чертой"] # 0xe993 + - "": [t: "тождественно с двойной косой чертой"] # 0xe994 + - "": [t: "тройные перечёркнутые черты"] # 0xe995 + - "": [t: "вертикальная черта над кругом"] # 0xe996 + - "": [t: "вертикально пропорционально"] # 0xe997 + - "": [t: "чёрная последняя четверть луны"] # 0xe998 + - "": [t: "чёрная первая четверть луны"] # 0xe999 + - "": [t: "отрицательная синусоида"] # 0xe9a0 + - "": [t: "точка в скобках"] # 0xe9a1 + - "": [t: "круглые скобки"] # 0xe9a2 + - "": [t: "белая улыбка"] # 0xe9a3 + - "": [t: "белый хмурый"] # 0xe9a4 + - "": [t: "шестиугольник"] # 0xe9a5 + - "": [t: "эквивалентно над плюсом"] # 0xe9a6 + - "": [t: "плюс над эквивалентно"] # 0xe9a7 + - "": [t: "пересечение с засечками"] # 0xe9b0 + - "": [t: "объединение с засечками"] # 0xe9b1 + - "": [t: "квадратное пересечение с засечками"] # 0xe9b2 + - "": [t: "квадратное объединение с засечками"] # 0xe9b3 + - "": [t: "предшествует эквивалентно или следует"] # 0xe9e0 + - "": [t: "следует эквивалентно или предшествует"] # 0xe9e1 + - "": [t: "предшествует почти равно или следует"] # 0xe9e2 + - "": [t: "следует почти равно или предшествует"] # 0xe9e3 + - "": [t: "меньше эквивалентно или больше"] # 0xe9f0 + - "": [t: "больше эквивалентно или меньше"] # 0xe9f1 + - "": [t: "не вертикально гораздо меньше"] # 0xea00 + - "": [t: "не вертикально гораздо больше"] # 0xea01 + - "": [t: "не гораздо меньше вариант"] # 0xea02 + - "": [t: "не гораздо больше вариант"] # 0xea03 + - "": [t: "меньше вертикально не двойное равно"] # 0xea04 + - "": [t: "больше вертикально не двойное равно"] # 0xea05 + - "": [t: "не меньше или равно"] # 0xea06 + - "": [t: "не больше или равно"] # 0xea07 + - "": [t: "ни равно, ни меньше"] # 0xea09 + - "": [t: "не содержит или равно"] # 0xea0a + - "": [t: "ни надмножество, ни равно"] # 0xea0b + - "": [t: "ни подмножество, ни равно"] # 0xea0c + - "": [t: "обратная косая черта подмножества"] # 0xea0d + - "": [t: "ни равно, ни больше"] # 0xea0e + - "": [t: "не минус тильда оператор"] # 0xea0f + - "": [t: "ни равно, ни меньше"] # 0xea10 + - "": [t: "не оператор тильды"] # 0xea11 + - "": [t: "не элемент или равно"] # 0xea12 + - "": [t: "ни равно, ни больше"] # 0xea13 + - "": [t: "не почти равно"] # 0xea14 + - "": [t: "не следует подобно"] # 0xea15 + - "": [t: "меньше или наклонное равно с косой чертой"] # 0xea16 + - "": [t: "больше или наклонное равно с косой чертой"] # 0xea17 + - "": [t: "надмножество с косой чертой"] # 0xea1a + - "": [t: "не содержит"] # 0xea1b + - "": [t: "не меньше или равно"] # 0xea1d + - "": [t: "не больше или равно"] # 0xea1e + - "": [t: "не почти равно минус"] # 0xea1f + - "": [t: "отрицательная принадлежность с точкой сверху"] # 0xea22 + - "": [t: "не вертикальный угол"] # 0xea2c + - "": [t: "не параллельно наклонное"] # 0xea2d + - "": [t: "не оператор черты"] # 0xea2e + - "": [t: "не оператор двойной черты"] # 0xea2f + - "": [t: "не оператор тройной черты"] # 0xea30 + - "": [t: "меньше, но не приблизительно равно"] # 0xea32 + - "": [t: "больше, но не приблизительно равно"] # 0xea33 + - "": [t: "меньше или не равно"] # 0xea34 + - "": [t: "больше или не равно"] # 0xea35 + - "": [t: "не вложенное меньше"] # 0xea36 + - "": [t: "не вложенное больше"] # 0xea37 + - "": [t: "не гораздо меньше"] # 0xea38 + - "": [t: "не гораздо больше"] # 0xea39 + - "": [t: "предшествует, но не эквивалентно"] # 0xea3a + - "": [t: "следует, но не эквивалентно"] # 0xea3b + - "": [t: "предшествует, но не равно"] # 0xea3c + - "": [t: "следует, но не равно"] # 0xea3d + - "": [t: "не равно и не предшествует"] # 0xea3e + - "": [t: "не равно и не следует"] # 0xea3f + - "": [t: "предшествует, но не равно"] # 0xea40 + - "": [t: "следует, но не равно"] # 0xea41 + - "": [t: "не подмножество и не равно"] # 0xea42 + - "": [t: "не надмножество и не равно"] # 0xea43 + - "": [t: "подмножество или не равно"] # 0xea44 + - "": [t: "надмножество или не равно"] # 0xea45 + - "": [t: "не подмножество и не равно"] # 0xea46 + - "": [t: "не надмножество и не равно"] # 0xea47 + - "": [t: "не тройное меньше"] # 0xea48 + - "": [t: "не тройное больше"] # 0xea49 + - "": [t: "не предшествует равно"] # 0xea4c + - "": [t: "не следует равно"] # 0xea4d + - "": [t: "не нормальная подгруппа с чертой"] # 0xea50 + - "": [t: "не содержит как нормальную подгруппу с чертой"] # 0xea51 + - "": [t: "не разность между"] # 0xea52 + - "": [t: "не геометрически эквивалентно"] # 0xea53 + - "": [t: "не вертикально подобно"] # 0xea54 + - "": [t: "не равно или подобно"] # 0xea55 + - "": [t: "не вертикально приблизительно"] # 0xea56 + - "": [t: "не приблизительно тождественно"] # 0xea57 + - "": [t: "не волнистое равно"] # 0xea58 + - "": [t: "не волнистое одинарное равно"] # 0xea59 + - "": [t: "не равно с точкой"] # 0xea5a + - "": [t: "обратное не эквивалентно"] # 0xea5b + - "": [t: "не квадратное подмножество"] # 0xea60 + - "": [t: "не квадратное надмножество"] # 0xea61 + - "": [t: "не почти равно над равно"] # 0xea62 + - "": [t: "не строго эквивалентно"] # 0xea63 + - "": [t: "не конгруэнтно с точкой"] # 0xea64 + - "": [t: "обратное не равно"] # 0xea65 + - "": [t: "не вертикально левый треугольник равно"] # 0xea70 + - "": [t: "не вертикально правый треугольник равно"] # 0xea71 + - "": [t: "не частная"] # 0xea80 + - "": [t: "удлинитель надстрочной стрелки"] # 0xeb00 + - "": [t: "стрелка вправо над стрелкой влево"] # 0xeb01 + - "": [t: "стрелка вправо над стрелкой влево"] # 0xeb02 + - "": [t: "правая гарпунная скоба над левой гарпунной скобой"] # 0xeb03 + - "": [t: "правая гарпунная скоба над левой гарпунной скобой"] # 0xeb04 + - "": [t: "двойная стрелка северо-восток-юго-запад"] # 0xeb05 + - "": [t: "двойная стрелка северо-запад-юго-восток"] # 0xeb06 + - "": [t: "удлинитель горизонтальной гарпунной скобы"] # 0xeb07 + - "": [t: "дуговая стрелка влево против часовой стрелки"] # 0xeb08 + - "": [t: "дуговая стрелка вправо против часовой стрелки"] # 0xeb09 + - "": [t: "большой акцент стрелки вправо"] # 0xeb0b + - "": [t: "большой акцент стрелки влево"] # 0xeb0c + - "": [t: "наконечник стрелки влево"] # 0xeb0d + - "": [t: "наконечник стрелки вправо"] # 0xeb0e + - "": [t: "большая стрелка влево-вправо с чертой"] # 0xeb0f + - "": [t: "удлинитель горизонтальной двойной стрелки"] # 0xeb10 + - "": [t: "большая двойная стрелка влево-вправо с чертой"] # 0xeb11 + - "": [t: "стрелка вниз слева от стрелки вверх"] # 0xeb12 + - "": [t: "стрелка влево с поворотом вниз"] # 0xeb13 + - "": [t: "стрелка вправо с поворотом вверх"] # 0xeb14 + - "": [t: "стрелка влево с поворотом вверх"] # 0xeb15 + - "": [t: "дуговая стрелка против часовой стрелки по верхней полуокружности с плюсом"] # 0xeb16 + - "": [t: "дуговая стрелка по часовой стрелке по верхней полуокружности с минусом"] # 0xeb17 + - "": [t: "стрелка вправо с хвостом и чертой"] # 0xeb18 + - "": [t: "правая гарпунная скоба вниз"] # 0xeb19 + - "": [t: "левая гарпунная скоба вниз"] # 0xeb1a + - "": [t: "левая и правая гарпунные скобы вниз"] # 0xeb1b + - "": [t: "левая и правая гарпунные скобы вверх"] # 0xeb1c + - "": [t: "верхняя и нижняя гарпунные скобы влево"] # 0xeb1d + - "": [t: "верхняя и нижняя гарпунные скобы вправо"] # 0xeb1e + - "": [t: "стрелка вверх справа от стрелки вниз"] # 0xeb1f + - "": [t: "левая гарпунная скоба к черте с бородкой вверх"] # 0xeb20 + - "": [t: "правая гарпунная скоба к черте с бородкой вверх"] # 0xeb21 + - "": [t: "левая гарпунная скоба к черте с бородкой вниз"] # 0xeb22 + - "": [t: "правая гарпунная скоба к черте с бородкой вниз"] # 0xeb23 + - "": [t: "левая гарпунная скоба от черты с бородкой вверх"] # 0xeb24 + - "": [t: "правая гарпунная скоба от черты с бородкой вверх"] # 0xeb25 + - "": [t: "левая гарпунная скоба от черты с бородкой вниз"] # 0xeb26 + - "": [t: "правая гарпунная скоба от черты с бородкой вниз"] # 0xeb27 + - "": [t: "верхняя гарпунная скоба к черте с бородкой влево"] # 0xeb28 + - "": [t: "нижняя гарпунная скоба к черте с бородкой влево"] # 0xeb29 + - "": [t: "верхняя гарпунная скоба к черте с бородкой вправо"] # 0xeb2a + - "": [t: "нижняя гарпунная скоба к черте с бородкой вправо"] # 0xeb2b + - "": [t: "верхняя гарпунная скоба от черты с бородкой влево"] # 0xeb2c + - "": [t: "нижняя гарпунная скоба от черты с бородкой влево"] # 0xeb2d + - "": [t: "верхняя гарпунная скоба от черты с бородкой вправо"] # 0xeb2e + - "": [t: "нижняя гарпунная скоба от черты с бородкой вправо"] # 0xeb2f + - "": [t: "стрелка вверх к черте"] # 0xeb30 + - "": [t: "стрелка вниз к черте"] # 0xeb31 + - "": [t: "верхняя гарпунная скоба слева от нижней гарпунной скобы"] # 0xeb32 + - "": [t: "верхняя гарпунная скоба справа от нижней гарпунной скобы"] # 0xeb33 + - "": [t: "наконечник стрелки вверх"] # 0xeb34 + - "": [t: "наконечник стрелки вниз"] # 0xeb35 + - "": [t: "двойная гарпунная скоба с левой бородкой вниз, правой вверх"] # 0xeb36 + - "": [t: "двойная гарпунная скоба с левой бородкой вверх, правой вниз"] # 0xeb37 + - "": [t: "стрелка влево над чертой"] # 0xeb38 + - "": [t: "стрелка вправо над чертой"] # 0xeb39 + - "": [t: "стрелка влево под чертой"] # 0xeb3a + - "": [t: "стрелка вправо под чертой"] # 0xeb3b + - "": [t: "тройная стрелка влево-вправо"] # 0xeb3c + - "": [t: "двойная стрелка северо-восток-юго-восток"] # 0xeb3f + - "": [t: "дуговая стрелка влево против часовой стрелки по левой полуокружности"] # 0xeb40 + - "": [t: "дуговая стрелка влево по часовой стрелке по левой полуокружности"] # 0xeb41 + - "": [t: "стрелка влево-вправо с открытым кругом"] # 0xeb42 + - "": [t: "стрелка вправо над тильдой"] # 0xeb44 + - "": [t: "стрелка влево над тильдой"] # 0xeb45 + - "": [t: "левая гарпунная скоба над чертой"] # 0xeb48 + - "": [t: "правая гарпунная скоба над чертой"] # 0xeb49 + - "": [t: "левая гарпунная скоба под чертой"] # 0xeb4a + - "": [t: "правая гарпунная скоба под чертой"] # 0xeb4b + - "": [t: "приземистая чёрная стрелка влево"] # 0xeb4c + - "": [t: "дуговая стрелка вправо по часовой стрелке по правой полуокружности"] # 0xeb50 + - "": [t: "дуговая стрелка вправо против часовой стрелки по правой полуокружности"] # 0xeb51 + - "": [t: "стрелка влево-вправо с открытым кругом и гарпунной скобой"] # 0xeb52 + - "": [t: "стрелка вверх слева от вертикальной черты"] # 0xeb58 + - "": [t: "стрелка вниз слева от вертикальной черты"] # 0xeb59 + - "": [t: "стрелка вверх справа от вертикальной черты"] # 0xeb5a + - "": [t: "стрелка вниз справа от вертикальной черты"] # 0xeb5b + - "": [t: "стрелка вправо с удлинённым нисходящим крючком"] # 0xeb5c + - "": [t: "стрелка влево с удлинённым крючком"] # 0xeb5d + - "": [t: "стрелка влево с удлинённым нисходящим крючком"] # 0xeb5e + - "": [t: "стрелка вправо с удлинённым крючком"] # 0xeb5f + - "": [t: "не стрелка вправо волнистая"] # 0xeb60 + - "": [t: "не стрелка вправо изогнутая"] # 0xeb61 + - "": [t: "верхняя гарпунная скоба слева от вертикальной черты"] # 0xeb68 + - "": [t: "нижняя гарпунная скоба слева от вертикальной черты"] # 0xeb69 + - "": [t: "верхняя гарпунная скоба справа от вертикальной черты"] # 0xeb6a + - "": [t: "нижняя гарпунная скоба справа от вертикальной черты"] # 0xeb6b + - "": [t: "удлинитель вертикальной двойной стрелки"] # 0xeb6c + - "": [t: "удлинитель вертикальной гарпунной скобы с бородкой влево"] # 0xeb6d + - "": [t: "удлинитель вертикальной гарпунной скобы с бородкой вправо"] # 0xeb6e + - "": [t: "правая гарпунная скоба над левой гарпунной скобой справа"] # 0xeb6f + - "": [t: "правая гарпунная скоба над левой гарпунной скобой слева"] # 0xeb70 + - "": [t: "левая гарпунная скоба над правой гарпунной скобой справа"] # 0xeb71 + - "": [t: "левая гарпунная скоба над правой гарпунной скобой слева"] # 0xeb72 + - "": [t: "наконечник стрелки влево от черты"] # 0xeb73 + - "": [t: "удлинитель стрелки влево-вправо от черты"] # 0xeb74 + - "": [t: "хвост стрелки влево от черты"] # 0xeb75 + - "": [t: "хвост стрелки вправо от черты"] # 0xeb76 + - "": [t: "наконечник стрелки вправо от черты"] # 0xeb77 + - "": [t: "наконечник стрелки левой гарпунной скобы от черты с бородкой влево"] # 0xeb78 + - "": [t: "стрелка вправо над стрелкой влево справа"] # 0xeb79 + - "": [t: "стрелка вправо над стрелкой влево слева"] # 0xeb7a + - "": [t: "стрелка влево над стрелкой вправо справа"] # 0xeb7b + - "": [t: "стрелка влево над стрелкой вправо слева"] # 0xeb7c + - "": [t: "наконечник стрелки вверх от черты"] # 0xeb7d + - "": [t: "хвост стрелки вверх от черты"] # 0xeb7e + - "": [t: "хвост стрелки вниз от черты"] # 0xeb7f + - "": [t: "наконечник стрелки вниз от черты"] # 0xeb80 + - "": [t: "наконечник стрелки нижней гарпунной скобы от черты с бородкой вправо"] # 0xeb81 + - "": [t: "верхняя гарпунная скоба слева от нижней гарпунной скобы (низ)"] # 0xeb82 + - "": [t: "верхняя гарпунная скоба слева от нижней гарпунной скобы (удлинитель)"] # 0xeb83 + - "": [t: "нижняя гарпунная скоба слева от верхней гарпунной скобы (верх)"] # 0xeb84 + - "": [t: "верхняя гарпунная скоба слева от нижней гарпунной скобы (верх)"] # 0xeb85 + - "": [t: "нижняя гарпунная скоба слева от верхней гарпунной скобы (удлинитель)"] # 0xeb86 + - "": [t: "нижняя гарпунная скоба слева от верхней гарпунной скобы (низ)"] # 0xeb87 + - "": [t: "стрелка вверх слева от стрелки вниз (низ)"] # 0xeb88 + - "": [t: "стрелка вниз слева от стрелки вверх (верх)"] # 0xeb89 + - "": [t: "стрелка вверх слева от стрелки вниз (верх)"] # 0xeb8a + - "": [t: "стрелка вниз слева от стрелки вверх (низ)"] # 0xeb8b + - "": [t: "удлинитель стрелок влево-вправо"] # 0xeb8c + - "": [t: "удлинитель стрелки северо-восток"] # 0xeb8d + - "": [t: "удлинитель стрелки северо-запад"] # 0xeb8e + - "": [t: "нижняя фигурная скобка левая"] # 0xec00 + - "": [t: "нижняя фигурная скобка средняя"] # 0xec01 + - "": [t: "нижняя фигурная скобка правая"] # 0xec02 + - "": [t: "удлинитель горизонтальной фигурной скобки"] # 0xec03 + - "": [t: "верхняя фигурная скобка левая"] # 0xec04 + - "": [t: "верхняя фигурная скобка средняя"] # 0xec05 + - "": [t: "верхняя фигурная скобка правая"] # 0xec06 + - "": [t: "левая вертикальная черта"] # 0xec07 + - "": [t: "правая вертикальная черта"] # 0xec08 + - "": [t: "левая двойная вертикальная черта"] # 0xec09 + - "": [t: "правая двойная вертикальная черта"] # 0xec0a + - "": [t: "удлинитель горизонтальной скобки"] # 0xec0b + - "": [t: "нижняя квадратная скобка"] # 0xec0c + - "⎵": [t: "нижняя квадратная скобка"] # 0x23b5 + - "": [t: "верхняя квадратная скобка"] # 0xec0d + - "⎴": [t: "верхняя квадратная скобка"] # 0x23b4 + - "": [t: "нижняя скобка левая"] # 0xec0e + - "": [t: "нижняя скобка правая"] # 0xec0f + - "": [t: "верхняя скобка левая"] # 0xec10 + - "": [t: "верхняя скобка правая"] # 0xec11 + - "": [t: "левая круглая скобка 1"] # 0xec12 + - "": [t: "левая круглая скобка 2"] # 0xec13 + - "": [t: "левая круглая скобка 3"] # 0xec14 + - "": [t: "левая круглая скобка 4"] # 0xec15 + - "": [t: "правая круглая скобка 1"] # 0xec16 + - "": [t: "правая круглая скобка 2"] # 0xec17 + - "": [t: "правая круглая скобка 3"] # 0xec18 + - "": [t: "правая круглая скобка 4"] # 0xec19 + - "": [t: "радикал 1"] # 0xec1a + - "": [t: "радикал 2"] # 0xec1b + - "": [t: "радикал 3"] # 0xec1c + - "": [t: "радикал 4"] # 0xec1d + - "": [t: "радикал 5"] # 0xec1e + - "": [t: "нижняя часть радикала"] # 0xec1f + - "": [t: "вертикальный удлинитель радикала"] # 0xec20 + - "": [t: "верхняя часть радикала"] # 0xec21 + - "": [t: "левая белая скобка верх"] # 0xec22 + - "": [t: "левая белая скобка удлинитель"] # 0xec23 + - "": [t: "левая белая скобка низ"] # 0xec24 + - "": [t: "правая белая скобка верх"] # 0xec25 + - "": [t: "правая белая скобка удлинитель"] # 0xec26 + - "": [t: "правая белая скобка низ"] # 0xec27 + - "": [t: "левая белая фигурная скобка"] # 0xec30 + - "": [t: "правая белая фигурная скобка"] # 0xec31 + - "": [t: "знак деления уголком"] # 0xec32 + - "": [t: "удлинитель знака деления уголком"] # 0xec33 + - "": [t: "короткое деление"] # 0xec34 + - "": [t: "двойная юго-запад-северо-восток эм-связь"] # 0xec40 + - "": [t: "двойная северо-запад-юго-восток эм-связь"] # 0xec41 + - "": [t: "одинарная горизонтальная эм-связь"] # 0xec42 + - "": [t: "двойная горизонтальная эм-связь"] # 0xec43 + - "": [t: "тройная горизонтальная эм-связь"] # 0xec44 + - "": [t: "одинарная вертикальная эм-связь"] # 0xec45 + - "": [t: "двойная вертикальная эм-связь"] # 0xec46 + - "": [t: "тройная вертикальная эм-связь"] # 0xec47 + - "": [t: "меньше эм-связь"] # 0xec48 + - "": [t: "больше эм-связь"] # 0xec49 + - "": [t: "одинарная горизонтальная эн-связь"] # 0xec4a + - "": [t: "двойная горизонтальная эн-связь"] # 0xec4b + - "": [t: "тройная горизонтальная эн-связь"] # 0xec4c + - "": [t: "верхний левый прямоугольник"] # 0xec80 + - "": [t: "нижний левый прямоугольник"] # 0xec81 + - "": [t: "верхний правый прямоугольник"] # 0xec90 + - "": [t: "нижний правый прямоугольник"] # 0xec91 + - "": [t: "угол синтетического деления"] # 0xec92 + - "": [t: "горизонтальный удлинитель синтетического деления"] # 0xec93 + - "": [t: "вертикальный удлинитель синтетического деления"] # 0xec94 + - "": [t: "удлинитель левой верхней/нижней скобки"] # 0xec95 + - "": [t: "удлинитель правой верхней/нижней скобки"] # 0xec96 + - "": [t: "удлинитель верхней скобки"] # 0xec97 + - "": [t: "удлинитель вертикальной черты"] # 0xec98 + - "": [t: "удлинитель левой двойной вертикальной черты"] # 0xec99 + - "": [t: "удлинитель горизонтальной черты"] # 0xec9a + - "": [t: "удлинитель нижней скобки"] # 0xec9c + - "": [t: "нижняя круглая скобка правая"] # 0xec9d + - "": [t: "удлинитель нижней круглой скобки"] # 0xec9e + - "": [t: "нижняя круглая скобка левая"] # 0xec9f + - "": [t: "удлинитель верхней фигурной скобки"] # 0xeca0 + - "": [t: "верхняя круглая скобка левая"] # 0xeca1 + - "": [t: "удлинитель верхней круглой скобки"] # 0xeca2 + - "": [t: "верхняя круглая скобка правая"] # 0xeca3 + - "": [t: "удлинитель нижней фигурной скобки"] # 0xeca4 + - "": [t: "постоянная Планка, делённая на два пи"] # 0xed00 + - "": [t: "зеркальная g"] # 0xed01 + - "": [t: "j без точки"] # 0xed02 + - "": [t: "дигамма"] # 0xed03 + - "ϝ": [t: "дигамма"] # 0x3dd + - "": [t: "d"] # 0xed10 + - "ⅆ": [t: "d"] # 0x2146 + - "": [t: "e"] # 0xed11 + - "ⅇ": [t: "e"] # 0x2147 + - "": [t: "i"] # 0xed12 + - "ⅈ": [t: "i"] # 0x2148 + - "": [t: "j"] # 0xed13 - "ⅅ": - - spell: "translate('.', 'ⅅ', 'DD')" # 0xed16, 0x2145 - -# The private use chars are from MathType - - "": [t: "интегральная цикл контура против часовой стрелки"] # 0xee00 (en: 'anticlockwise contour integral loop', google translation) - - "": [t: "интегральная петля контура по часовой стрелке"] # 0xee01 (en: 'clockwise contour integral loop', google translation) - - "": [t: ""] # 0xee04 - - "": [t: ""] # 0xee05 - - "": [t: ""] # 0xee06 - - "": [t: ""] # 0xee07 - - "": [t: ""] # 0xee08 - - "": [t: ""] # 0xee09 - - "": [t: ""] # 0xee0a - - "": [t: ""] # 0xee0b - - "": [t: ""] # 0xee0c - - "": [t: "совместное статус украшения"] # 0xee0d (en: 'joint status embellishment', google translation) - - "": [t: "совместное статус украшений осталось"] # 0xee0e (en: 'joint status embellishment left', google translation) - - "": [t: "совместное статус правильно"] # 0xee0f (en: 'joint status embellishment right', google translation) - - "": [t: "совместное статус украснение"] # 0xee10 (en: 'joint status embellishment extender', google translation) - - "": [t: "интегральная петля"] # 0xee11 (en: 'integral loop', google translation) - - "": [t: "интегральная петля двойная"] # 0xee12 (en: 'integral loop double', google translation) - - "": [t: "интегральная петля triple"] # 0xee13 (en: 'integral loop triple', google translation) - - "": [t: "расширение интегральной петли двойной"] # 0xee15 (en: 'expanding integral loop double', google translation) - - "": [t: "расширение интегральной петли triple"] # 0xee16 (en: 'expanding integral loop triple', google translation) - - "": [t: "асимптотически равен акценту"] # 0xee17 (en: 'asymptotically equal to accent', google translation) - - "": [t: "акцент с равным знаком"] # 0xee18 (en: 'equal sign accent', google translation) - - "": [t: "четырехкратный prime"] # 0xee19 (en: 'quadruple prime', google translation) - - "": [t: "бар акцент с открытым кругом слева"] # 0xee1a (en: 'bar accent with open circle left', google translation) - - "": [t: "бар акцент с закрытым кругом слева"] # 0xee1b (en: 'bar accent with closed circle left', google translation) - - "": [t: "бар акцент с открытым кругом справа"] # 0xee1c (en: 'bar accent with open circle right', google translation) - - "": [t: "бар акцент с надтуми"] # 0xee1d (en: 'bar accent with over dot', google translation) - - "": [t: "бар акцент с под точкой"] # 0xee1e (en: 'bar accent with under dot', google translation) - - "": [t: "бар акцент с двойным над точкой"] # 0xee1f (en: 'bar accent with double over dot', google translation) - - "": [t: "бар акцент с двойным под точкой"] # 0xee20 (en: 'bar accent with double under dot', google translation) - - "": [t: "бар акцент с помощью кареты"] # 0xee21 (en: 'bar accent with caret', google translation) - - "": [t: "толстый под акцентом"] # 0xee22 (en: 'thick under bar accent', google translation) - - "": [t: "бар акцент с закрытым кругом справа"] # 0xee23 (en: 'bar accent with closed circle right', google translation) - - "": [t: "большая точка выше"] # 0xee24 (en: 'large dot above', google translation) - - "": [t: "марк выравнивания"] # 0xef00 (en: 'alignment mark', google 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: "отсутствующий термин"] # 0xef41 (en: 'missing term', google translation) - - "": [t: "контурная стрелка часовой стрелки слева"] # 0xef80 (en: 'clockwise contour integral arrow on left', google translation) - - "": [t: "интеграл с квадратом"] # 0xef81 (en: 'integral with square', google translation) - - "": [t: "интеграл со складом"] # 0xef82 (en: 'integral with slash', google translation) - - "": [t: "обратный интеграл"] # 0xef83 (en: 'reversed integral', google translation) - - "": [t: "двойной ноль над двойным ноль"] # 0xef90 (en: 'double zero over double zero', google translation) - - "": [t: "ноль со слэш"] # 0xef91 (en: 'zero with slash', google translation) - - # fraktur chars in math alphabetic block and also MathType private use area - # Some of these are reserved because they were used in Plane 0 -- that shouldn't be an issue other than causing the other chars to not display - - "𝔄-𝔜": # 0x1d504 - 0x1d51d ('z' version is reserved) - - t: "фрактур" # (en: 'fraktur', google translation) - - spell: "translate('.', '𝔄𝔅𝔆𝔇𝔈𝔉𝔊𝔋𝔌𝔍𝔎𝔏𝔐𝔑𝔒𝔓𝔔𝔕𝔖𝔗𝔘𝔙𝔚𝔛𝔜', 'ABCDEFGHIJKLMNOPQRSTUVWXY')" - - - "-": # 0xf000 - 0xf018 - - t: "фрактур" # (en: 'fraktur', google translation) + - spell: "translate('.', 'ⅅ', 'DD')" # 0xed16, 0x2145 + - "": [t: "контурный интеграл с петлёй против часовой стрелки"] # 0xee00 + - "": [t: "контурный интеграл с петлёй по часовой стрелке"] # 0xee01 + - "": [t: ""] # 0xee04 + - "": [t: ""] # 0xee05 + - "": [t: ""] # 0xee06 + - "": [t: ""] # 0xee07 + - "": [t: ""] # 0xee08 + - "": [t: ""] # 0xee09 + - "": [t: ""] # 0xee0a + - "": [t: ""] # 0xee0b + - "": [t: ""] # 0xee0c + - "": [t: "знак совместного состояния (надстрочный)"] # 0xee0d + - "": [t: "знак совместного состояния левый (надстрочный)"] # 0xee0e + - "": [t: "знак совместного состояния правый (надстрочный)"] # 0xee0f + - "": [t: "удлинитель знака совместного состояния"] # 0xee10 + - "": [t: "интеграл с петлёй"] # 0xee11 + - "": [t: "двойной интеграл с петлёй"] # 0xee12 + - "": [t: "тройной интеграл с петлёй"] # 0xee13 + - "": [t: "расширяющийся двойной интеграл с петлёй"] # 0xee15 + - "": [t: "расширяющийся тройной интеграл с петлёй"] # 0xee16 + - "": [t: "акцент асимптотического равенства"] # 0xee17 + - "": [t: "акцент знака равенства"] # 0xee18 + - "": [t: "четверной штрих"] # 0xee19 + - "": [t: "акцент черты с открытым кругом слева"] # 0xee1a + - "": [t: "акцент черты с закрытым кругом слева"] # 0xee1b + - "": [t: "акцент черты с открытым кругом справа"] # 0xee1c + - "": [t: "акцент черты с точкой сверху"] # 0xee1d + - "": [t: "акцент черты с точкой снизу"] # 0xee1e + - "": [t: "акцент черты с двойной точкой сверху"] # 0xee1f + - "": [t: "акцент черты с двойной точкой снизу"] # 0xee20 + - "": [t: "акцент черты с галочкой"] # 0xee21 + - "": [t: "акцент толстой нижней черты"] # 0xee22 + - "": [t: "акцент черты с закрытым кругом справа"] # 0xee23 + - "": [t: "большая точка сверху"] # 0xee24 + - "": [t: "метка выравнивания"] # 0xef00 + - "": [t: ""] # 0xef01 + - "​": [t: ""] # 0x200b + - "": [t: ""] # 0xef02 + - " ": [t: ""] # 0x2009 + - "": [t: ""] # 0xef03 + - " ": [t: ""] # 0x205f + - "": [t: ""] # 0xef04 + - "": [t: ""] # 0xef05 + - "": [t: ""] # 0xef06 + - "": [t: ""] # 0xef07 + - "": [t: ""] # 0xef08 + - "": [t: ""] # 0xef09 + - "": [t: ""] # 0xef0a + - " ": [t: ""] # 0x200a + - "": [t: ""] # 0xef22 + - "": [t: ""] # 0xef23 + - "": [t: ""] # 0xef24 + - "": [t: ""] # 0xef29 + - "": [t: "пропущенный термин"] # 0xef41 + - "": [t: "контурный интеграл по часовой стрелке со стрелкой слева"] # 0xef80 + - "": [t: "интеграл с квадратом"] # 0xef81 + - "": [t: "интеграл с косой чертой"] # 0xef82 + - "": [t: "перевёрнутый интеграл"] # 0xef83 + - "": [t: "двойной ноль над двойным нулём"] # 0xef90 + - "": [t: "ноль с косой чертой"] # 0xef91 - "𝔄-𝔜": # 0x1d504 - 0x1d51d + - t: "фрактур" + - spell: "translate('.', '𝔄𝔅𝔆𝔇𝔈𝔉𝔊𝔋𝔌𝔍𝔎𝔏𝔐𝔑𝔒𝔓𝔔𝔕𝔖𝔗𝔘𝔙𝔚𝔛𝔜', 'ABCDEFGHIJKLMNOPQRSTUVWXY')" + - "-": # 0xf000 - 0xf018 + - t: "фрактур" - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXY')" - - - "𝔞-𝔷": # 0x1d51e - 0x1d537 - - t: "фрактур" # (en: 'fraktur', google translation) + - "𝔞-𝔷": # 0x1d51e - 0x1d537 + - t: "фрактур" - spell: "translate('.', '𝔞𝔟𝔠𝔡𝔢𝔣𝔤𝔥𝔦𝔧𝔨𝔩𝔪𝔫𝔬𝔭𝔮𝔯𝔰𝔱𝔲𝔳𝔴𝔵𝔶𝔷', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf01a - 0xf033 - - t: "фрактур" # (en: 'fraktur', google translation) + - "-": # 0xf01a - 0xf033 + - t: "фрактур" - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - - "𝕬-𝖅": # 0x1D56C - 0x1D585 - - t: "fraktur bold" # (google translation) - - spell: "translate('.', '𝕬𝕭𝕮𝕯𝕰𝕱𝕲𝕳𝕴𝕵𝕶𝕷𝕸𝕹𝕺𝕻𝕼𝕽𝕾𝕿𝖀𝖁𝖂𝖃𝖄𝖅', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "-": # 0xf040 - 0xf059 - - t: "fraktur bold" # (google translation) + - "𝕬-𝖅": # 0x1D56C + - 0x1D585 + - t: "фрактур" + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] + - spell: "translate('.', '𝕬𝕭𝕮𝕯𝕰𝕱𝕲𝕳𝕴𝕵𝕶𝕷𝕸𝕹𝕺𝕻𝕼𝕽𝕾𝕿𝖀𝖁𝖂𝖃𝖄𝖅', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - "-": # 0xf040 - 0xf059 + - t: "фрактур" + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "𝖆-𝖟": # 0x1d586 - 0x1d59f - - t: "fraktur bold" # (google translation) + - "𝖆-𝖟": # 0x1d586 - 0x1d59f + - t: "фрактур" + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝖆𝖇𝖈𝖉𝖊𝖋𝖌𝖍𝖎𝖏𝖐𝖑𝖒𝖓𝖔𝖕𝖖𝖗𝖘𝖙𝖚𝖛𝖜𝖝𝖞𝖟', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf05a - 0xf073 - - t: "fraktur bold" # (google translation) + - "-": # 0xf05a - 0xf073 + - t: "фрактур" + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - 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: "двойной удар" # (en: 'double struck', google translation) + - "𝔸-𝕐": # 0x1d504 - 0x1d51d + - t: "дубль-шрифт" - spell: "translate('.', '𝔸𝔹𝔺𝔻𝔼𝔽𝔾𝔿𝕀𝕁𝕂𝕃𝕄𝕅𝕆𝕇𝕈𝕉𝕊𝕋𝕌𝕍𝕎𝕏𝕐', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "-": # 0xf080 - 0xf098 - - t: "двойной удар" # (en: 'double struck', google translation) + - "-": # 0xf080 - 0xf098 + - t: "дубль-шрифт" - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "𝕒-𝕫": # 0x1d552 - 0x1d56b - - t: "двойной удар" # (en: 'double struck', google translation) + - "𝕒-𝕫": # 0x1d552 - 0x1d56b + - t: "дубль-шрифт" - spell: "translate('.', '𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf09a - 0xf0b3 - - t: "двойной удар" # (en: 'double struck', google translation) + - "-": # 0xf09a - 0xf0b3 + - t: "дубль-шрифт" - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝟘-𝟡": # 0x1d7d8 - 0x1d7e1 - - t: "двойной удар" # (en: 'double struck', google translation) + - "𝟘-𝟡": # 0x1d7d8 - 0x1d7e1 + - t: "дубль-шрифт" - spell: "translate('.', '𝟘𝟙𝟚𝟛𝟜𝟝𝟞𝟟𝟠𝟡', '0123456789')" - - "-": # 0xf0c0 - 0xf0c9 - - t: "двойной удар" # (en: 'double struck', google translation) + - "-": # 0xf0c0 - 0xf0c9 + - t: "дубль-шрифт" - spell: "translate('.', '', '0123456789')" - - - "": [t: "дважды поразил нахбла"] # 0xf0ca (en: 'double struck nahblah', google translation) - - "": [t: "дважды ударил эйлера постоянна"] # 0xf0cb (en: 'double struck euler constant', google translation) - - # script chars in math alphabetic block and also MathType private use area - - "𝒜-𝒵": # 0x1d49c - 0x1d4b5 - - t: "сценарий" # (en: 'script', google translation) - - spell: "translate('.', '𝒜𝒝𝒞𝒟𝒠𝒡𝒢𝒣𝒤𝒥𝒦𝒧𝒨𝒩𝒪𝒫𝒬𝒭𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "-": # 0xf100 - 0xf119 - - t: "сценарий" # (en: 'script', google translation) + - "": [t: "дубль-шрифт набла"] # 0xf0ca + - "": [t: "дубль-шрифт константа Эйлера"] # 0xf0cb + - "𝒜-𝒵": # 0x1d49c - 0x1d4b5 + - t: "рукописный" + - spell: "translate('.', '𝒜𝒝𝒞𝒟𝒢𝒡𝒢𝒣𝒄𝒥𝒦𝒧𝒨𝒩𝒪𝒫𝒬𝒭𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - "-": # 0xf100 - 0xf119 + - t: "рукописный" - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "𝒶-𝓏": # 0x1d4b6 - 0x1d4cf - - t: "сценарий" # (en: 'script', google translation) - - spell: "translate('.', '𝒶𝒷𝒸𝒹𝒺𝒻𝒼𝒽𝒾𝒿𝓀𝓁𝓂𝓃𝓄𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf11a - 0xf133 - - t: "сценарий" # (en: 'script', google translation) + - "𝒶-𝓏": # 0x1d4b6 - 0x1d4cf + - t: "рукописный" + - spell: "translate('.', '𝒶𝒷𝒸𝒹𝒺𝒻𝒩𝒽𝒾𝒿𝓀𝓁𝓂𝓃𝓄𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏', 'abcdefghijklmnopqrstuvwxyz')" + - "-": # 0xf11a - 0xf133 + - t: "рукописный" - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - # bold script chars in math alphabetic block and also MathType private use area - - "𝓐-𝓩": # 0x1d4d0 - 0x1d4e9 - - t: "скрипт жирный" # (en: 'script bold', google translation) + - "𝓐-𝓩": # 0x1d4d0 - 0x1d4e9 + - t: "рукописный" + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝓐𝓑𝓒𝓓𝓔𝓕𝓖𝓗𝓘𝓙𝓚𝓛𝓜𝓝𝓞𝓟𝓠𝓡𝓢𝓣𝓤𝓥𝓦𝓧𝓨𝓩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "-": # 0xf140 - 0xf159 - - t: "скрипт жирный" # (en: 'script bold', google translation) + - "-": # 0xf140 - 0xf159 + - t: "рукописный" + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "𝓪-𝔃": # 0x1d4ea - 0x1d503 - - t: "скрипт жирный" # (en: 'script bold', google translation) + - "𝓪-𝔃": # 0x1d4ea - 0x1d503 + - t: "рукописный" + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝓪𝓫𝓬𝓭𝓮𝓯𝓰𝓱𝓲𝓳𝓴𝓵𝓶𝓷𝓸𝓹𝓺𝓻𝓼𝓽𝓾𝓿𝔀𝔁𝔂𝔃', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf15a - 0xf173 - - t: "скрипт жирный" # (en: 'script bold', google translation) + - "-": # 0xf15a - 0xf173 + - t: "рукописный" + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - - "-": # 0xf180 - 0xf199 + - "-": # 0xf180 - 0xf199 - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "": # 0xf19a + - "": # 0xf19a - test: if: "$CapitalLetters_Beep" then: @@ -2655,12 +2755,12 @@ en: 'right harpoon over left harpoon', google translation) if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "пропусков"] # (en: 'cap', google translation) + then: [t: "заглавная"] else: [x: "$SpeechOverrides_CapitalLetters"] - pitch: value: "$CapitalLetters_Pitch" - replace: [t: "лигатура ae"] # (en: 'ligature ae', google translation) - - "": # 0xf19b + replace: [t: "лигатура ae"] + - "": # 0xf19b - test: if: "$CapitalLetters_Beep" then: @@ -2673,12 +2773,12 @@ en: 'right harpoon over left harpoon', google translation) if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "пропусков"] # (en: 'cap', google translation) + then: [t: "заглавная"] else: [x: "$SpeechOverrides_CapitalLetters"] - pitch: value: "$CapitalLetters_Pitch" - replace: [t: "острый с"] # (en: 'sharp s', google translation) - - "": # 0xf19c + replace: [t: "эсцет"] + - "": # 0xf19c - test: if: "$CapitalLetters_Beep" then: @@ -2691,950 +2791,405 @@ en: 'right harpoon over left harpoon', google translation) if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "пропусков"] # (en: 'cap', google translation) + then: [t: "заглавная"] else: [x: "$SpeechOverrides_CapitalLetters"] - pitch: value: "$CapitalLetters_Pitch" - replace: [t: "o с инсультом"] # (en: 'o with stroke', google translation) - - # MathType only has a few of the cap Greek letters in PUA - - "": # 0xf201 - 0xf209 - - t: "двойной удар" # (en: 'double struck', google translation) + replace: [t: "o с чертой"] + - "": # 0xf201 - 0xf209 + - t: "дубль-шрифт" - spell: "translate('.', '', 'ΔΨΛΠΣΘΓΩΥ')" - - - "-": # 0xf220 - 0xf236 - - t: "двойной удар" # (en: 'double struck', google translation) + - "-": # 0xf220 - 0xf236 + - t: "дубль-шрифт" - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - - "": [t: "двойной удар final sigma"] # 0xf237 (en: 'double struck final sigma', google translation) - - "": [t: "дважды поразил ро"] # 0xf250 (en: 'double struck rho', google translation) - - "": [t: "двойной удар phi"] # 0xf251 (en: 'double struck phi', google translation) - - "𝐀-𝐙": # 0x1d400 - 0x1d419 - - t: "смелый" # (en: 'bold', google translation) + - "": [t: "дубль-шрифт конечная сигма"] # 0xf237 + - "": [t: "дубль-шрифт ро"] # 0xf250 + - "": [t: "дубль-шрифт фи"] # 0xf251 + - "𝐀-𝐙": # 0x1d400 - 0x1d419 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝐀𝐁𝐂𝐃𝐄𝐅𝐆𝐇𝐈𝐉𝐊𝐋𝐌𝐍𝐎𝐏𝐐𝐑𝐒𝐓𝐔𝐕𝐖𝐗𝐘𝐙', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "-": # 0xf260 - 0xf279 - - t: "смелый" # (en: 'bold', google translation) - - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "𝐚-𝐳": # 0x1d41a - 0x1d433 - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf260 - 0xf279 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] + - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + - "𝐚-𝐳": # 0x1d41a - 0x1d433 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝐚𝐛𝐜𝐝𝐞𝐟𝐠𝐡𝐢𝐣𝐤𝐥𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐭𝐮𝐯𝐰𝐱𝐲𝐳', 'abcdefghijklmnopqrstuvwxyz')" - - - "-": # 0xf27a - 0xf293 - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf27a - 0xf293 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - - "𝐴-𝑍": # 0x1d434 - 0x1d44d + - "𝐴-𝑍": # 0x1d434 - 0x1d44d - spell: "translate('.', '𝐴𝐵𝐶𝐷𝐸𝐹𝐺𝐻𝐼𝐽𝐾𝐿𝑀𝑁𝑂𝑃𝑄𝑅𝑆𝑇𝑈𝑉𝑊𝑋𝑌𝑍', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "-": # 0xf294 - 0xf2ad + - "-": # 0xf294 - 0xf2ad - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "𝑎-𝑧": # 0x1d44e - 0x1d467 + - "𝑎-𝑧": # 0x1d44e - 0x1d467 - spell: "translate('.', '𝑎𝑏𝑐𝑑𝑒𝑓𝑔𝑕𝑖𝑗𝑘𝑙𝑚𝑛𝑜𝑝𝑞𝑟𝑠𝑡𝑢𝑣𝑤𝑥𝑦𝑧', 'abcdefghijklmnopqrstuvwxyz')" - - - "-": # 0xf2ae - 0xf2c7 + - "-": # 0xf2ae - 0xf2c7 - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - - "𝑨-𝒁": # 0x1d468 - 0x1d481 - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "𝑨-𝒁": # 0x1d468 - 0x1d481 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝑨𝑩𝑪𝑫𝑬𝑭𝑮𝑯𝑰𝑱𝑲𝑳𝑴𝑵𝑶𝑷𝑸𝑹𝑺𝑻𝑼𝑽𝑾𝑿𝒀𝒁', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "-": # 0xf2c8 - 0xf2e1 - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf2c8 - 0xf2e1 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "𝒂-𝒛": # 0x1d482 - 0x1d49b - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "𝒂-𝒛": # 0x1d482 - 0x1d49b + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝒂𝒃𝒄𝒅𝒆𝒇𝒈𝒉𝒊𝒋𝒌𝒍𝒎𝒏𝒐𝒑𝒒𝒓𝒔𝒕𝒖𝒗𝒘𝒙𝒚𝒛', 'abcdefghijklmnopqrstuvwxyz')" - - - "-": # 0xf2e2 - 0xf2fb - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf2e2 - 0xf2fb + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - - "𝖠-𝖹": # 0x1d5a0 - 0x1d5b9 + - "𝖠-𝖹": # 0x1d5a0 - 0x1d5b9 - spell: "translate('.', '𝖠𝖡𝖢𝖣𝖤𝖥𝖦𝖧𝖨𝖩𝖪𝖫𝖬𝖭𝖮𝖯𝖰𝖱𝖲𝖳𝖴𝖵𝖶𝖷𝖸𝖹', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "-": # 0xf300 - 0xf319 + - "-": # 0xf300 - 0xf319 - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "𝖺-𝗓": # 0x1d5ba - 0x1d5d3 + - "𝖺-𝗓": # 0x1d5ba - 0x1d5d3 - spell: "translate('.', '𝖺𝖻𝖼𝖽𝖾𝖿𝗀𝗁𝗂𝗃𝗄𝗅𝗆𝗇𝗈𝗉𝗊𝗋𝗌𝗍𝗎𝗏𝗐𝗑𝗒𝗓', 'abcdefghijklmnopqrstuvwxyz')" - - - "-": # 0xf31a - 0xf333 + - "-": # 0xf31a - 0xf333 - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - - "𝗔-𝗭": # 0x1d5d4 - 0x1d5ed - - t: "смелый" # (en: 'bold', google translation) + - "𝗔-𝗭": # 0x1d5d4 - 0x1d5ed + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬𝗭', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "-": # 0xf334 - 0xf34d - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf334 - 0xf34d + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "𝗮-𝘇": # 0x1d5ee - 0x1d607 - - t: "смелый" # (en: 'bold', google translation) + - "𝗮-𝘇": # 0x1d5ee - 0x1d607 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇', 'abcdefghijklmnopqrstuvwxyz')" - - - "-": # 0xf34e - 0xf367 - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf34e - 0xf367 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝘈-𝘡": # 0x1d608 - 0x1d621 - # - t: "italic" + - "𝘈-𝘡": # 0x1d608 - 0x1d621 - spell: "translate('.', '𝘈𝘉𝘊𝘋𝘌𝘍𝘎𝘏𝘐𝘑𝘒𝘓𝘔𝘕𝘖𝘗𝘘𝘙𝘚𝘛𝘜𝘝𝘞𝘟𝘠𝘡', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf368 - 0xf381 - # - t: "italic" + - "-": # 0xf368 - 0xf381 - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "𝘢-𝘻": # 0x1d622 - 0x1d63b - # - t: "italic" + - "𝘢-𝘻": # 0x1d622 - 0x1d63b - spell: "translate('.', '𝘢𝘣𝘤𝘥𝘦𝘧𝘨𝘩𝘪𝘫𝘬𝘭𝘮𝘯𝘰𝘱𝘲𝘳𝘴𝘵𝘶𝘷𝘸𝘹𝘺𝘻', 'abcdefghijklmnopqrstuvwxyz')" - - - "-": # 0xf382 - 0xf39b - # - t: "italic" + - "-": # 0xf382 - 0xf39b - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - - "𝘼-𝙕": # 0x1d63c - 0x1d655 - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "𝘼-𝙕": # 0x1d63c - 0x1d655 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝘼𝘽𝘾𝘿𝙀𝙁𝙂𝙃𝙄𝙅𝙆𝙇𝙈𝙉𝙊𝙋𝙌𝙍𝙎𝙏𝙐𝙑𝙒𝙓𝙔𝙕', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "-": # 0xf39c - 0xf3b5 - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf39c - 0xf3b5 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "𝙖-𝙯": # 0x1d656 - 0x1d66f - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "𝙖-𝙯": # 0x1d656 - 0x1d66f + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝙖𝙗𝙘𝙙𝙚𝙛𝙜𝙝𝙞𝙟𝙠𝙡𝙢𝙣𝙤𝙥𝙦𝙧𝙨𝙩𝙪𝙫𝙬𝙭𝙮𝙯', 'abcdefghijklmnopqrstuvwxyz')" - - - "-": # 0xf3b6 - 0xf3cf - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf3b6 - 0xf3cf + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - - "𝙰-𝚉": # 0x1d670 - 0x1d689 + - "𝙰-𝚉": # 0x1d670 - 0x1d689 - spell: "translate('.', '𝙰𝙱𝙲𝙳𝙴𝙵𝙶𝙷𝙸𝙹𝙺𝙻𝙼𝙽𝙾𝙿𝚀𝚁𝚂𝚃𝚄𝚅𝚆𝚇𝚈𝚉', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "-": # 0xf3d0 - 0xf3e9 + - "-": # 0xf3d0 - 0xf3e9 - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - - "𝚊-𝚣": # 0x1d68a - 0x1d6a3 + - "𝚊-𝚣": # 0x1d68a - 0x1d6a3 - spell: "translate('.', '𝚊𝚋𝚌𝚍𝚎𝚏𝚐𝚑𝚒𝚓𝚔𝚕𝚖𝚗𝚘𝚙𝚚𝚛𝚜𝚝𝚞𝚟𝚠𝚡𝚢𝚣', 'abcdefghijklmnopqrstuvwxyz')" - - - "-": # 0xf3ea - 0xf403 + - "-": # 0xf3ea - 0xf403 - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - - "": [t: "бессмысленный я"] # 0xf404 (en: 'dotless i', google translation) - - "𝚤": [t: "бессмысленный я"] # 0x1d6a4 (en: 'dotless i', google translation) - - "𝚥": [t: "dotless j"] # 0x1d6a5 (google translation) - - - "𝚨-𝛀": # 0x1d6a8 - 0x1d6c0 - - t: "смелый" # (en: 'bold', google translation) + - "": [t: "i без точки"] # 0xf404 + - "𝚤": [t: "i без точки"] # 0x1d6a4 + - "𝚥": [t: "j без точки"] # 0x1d6a5 + - "𝚨-𝛀": # 0x1d6a8 - 0x1d6c0 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝚨𝚩𝚪𝚫𝚬𝚭𝚮𝚯𝚰𝚱𝚲𝚳𝚴𝚵𝚶𝚷𝚸𝚹𝚺𝚻𝚼𝚽𝚾𝚿𝛀', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - - "-": # 0xf408 - 0xf420 - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf408 - 0xf420 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - - "𝛂-𝛚": # 0x1d6c2 - 0x1d6da - - t: "смелый" # (en: 'bold', google translation) + - "𝛂-𝛚": # 0x1d6c2 - 0x1d6da + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝛂𝛃𝛄𝛅𝛆𝛇𝛈𝛉𝛊𝛋𝛌𝛍𝛎𝛏𝛐𝛑𝛒𝛓𝛔𝛕𝛖𝛗𝛘𝛙𝛚', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - - "-": # 0xf422 - 0xf43a - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf422 - 0xf43a + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - - "": [t: "смелый нахбла"] # 0xf421 (en: 'bold nahblah', google translation) - - "𝛁": [t: "смелый нахбла"] # 0x1d6c1 (en: 'bold nahblah', google translation) - - - "𝛛𝛜𝛝𝛞𝛟𝛠𝛡": # 0x1D6DB - 0x1D6E1 - - t: "смелый" # (en: 'bold', google translation) + - "": [t: "жирная набла"] # 0xf421 + - "𝛁": [t: "жирная набла"] # 0x1d6c1 + - "𝛛𝛜𝛝𝛞𝛟𝛠𝛡": # 0x1D6DB - 0x1D6E1 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝛛𝛜𝛝𝛞𝛟𝛠𝛡', '∂εθκφρπ')" - - - "": # 0xF43C - 0xF441 - - t: "смелый" # (en: 'bold', google translation) + - "": # 0xF43C - 0xF441 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', '∂εθκφρπ')" - - - "𝛢-𝛺": # 0x1d6e2 - 0x1d6fa - # - t: "italic" + - "𝛢-𝛺": # 0x1d6e2 - 0x1d6fa - spell: "translate('.', '𝛢𝛣𝛤𝛥𝛦𝛧𝛨𝛩𝛪𝛫𝛬𝛭𝛮𝛯𝛰𝛱𝛲𝛳𝛴𝛵𝛶𝛷𝛸𝛹𝛺', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - - "-": # 0xf442 - 0xf45a - # - t: "italic" + - "-": # 0xf442 - 0xf45a - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - - "𝛼-𝜔": # 0x1d6fc - 0x1d714 - # - t: "italic" + - "𝛼-𝜔": # 0x1d6fc - 0x1d714 - spell: "translate('.', '𝛼𝛽𝛾𝛿𝜀𝜁𝜂𝜃𝜄𝜅𝜆𝜇𝜈𝜉𝜊𝜋𝜌𝜍𝜎𝜏𝜐𝜑𝜒𝜓𝜔', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - - "-": # 0xf45c - 0xf474 - # - t: "italic" + - "-": # 0xf45c - 0xf474 - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - - "": [t: "курсив нахбла"] # 0xf45b (en: 'italic nahblah', google translation) - - "𝛻": [t: "курсив нахбла"] # 0x1d6fb (en: 'italic nahblah', google translation) - - - "𝜕𝜖𝜗𝜘𝜙𝜚𝜛": # 0x1d715 - 0x1d71b - # - t: "italic" + - "": [t: "курсивная набла"] # 0xf45b + - "𝛻": [t: "курсивная набла"] # 0x1d6fb + - "𝜕𝜖𝜗𝜘𝜙𝜚𝜛": # 0x1d715 - 0x1d71b - spell: "translate('.', '𝜕𝜖𝜗𝜘𝜙𝜚𝜛', '∂εθκφρπ')" - - - "": # 0xf475 - 0xf47b - # - t: "italic" + - "": # 0xf475 - 0xf47b - spell: "translate('.', '', '∂εθκφρπ')" - - - "𝜜-𝜴": # 0x1d71c - 0x1d734 - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "𝜜-𝜴": # 0x1d71c - 0x1d734 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝜜𝜝𝜞𝜟𝜠𝜡𝜢𝜣𝜤𝜥𝜦𝜧𝜨𝜩𝜪𝜫𝜬𝜭𝜮𝜯𝜰𝜱𝜲𝜳𝜴', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - - "-": # 0xf47c - 0xf494 - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf47c - 0xf494 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - - "𝜶-𝝎": # 0x1d736 - 0x1d74e - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "𝜶-𝝎": # 0x1d736 - 0x1d74e + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝜶𝜷𝜸𝜹𝜺𝜻𝜼𝜽𝜾𝜿𝝀𝝁𝝂𝝃𝝄𝝅𝝆𝝇𝝈𝝉𝝊𝝋𝝌𝝍𝝎', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - - "-": # 0xf496 - 0xf4ae - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf496 - 0xf4ae + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - - "𝝏𝝐𝝑𝝒𝝓𝝔𝝕": # 0x1d74f - 0x1d755 - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "𝝏𝝐𝝑𝝒𝝓𝝔𝝕": # 0x1d74f - 0x1d755 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝝏𝝐𝝑𝝒𝝓𝝔𝝕', '∂εθκφρπ')" - - - "": # 0xf422 - 0xf43a - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "": # 0xf422 - 0xf43a + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', '∂εθκφρπ')" - - - "𝜵": [t: "смелый курсив нахбла"] # 0x1d735 (en: 'bold italic nahblah', google translation) - - "": [t: "смелый курсив нахбла"] # 0xf495 (en: 'bold italic nahblah', google translation) - - - "𝝖-𝝮": # 0x1d756 - 0x1d76e - - t: "смелый" # (en: 'bold', google translation) + - "𝜵": [t: "жирная курсивная набла"] # 0x1d735 + - "": [t: "жирная курсивная набла"] # 0xf495 + - "𝝖-𝝮": # 0x1d756 - 0x1d76e + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝝖𝝗𝝘𝝙𝝚𝝛𝝜𝝝𝝞𝝟𝝠𝝡𝝢𝝣𝝤𝝥𝝦𝝧𝝨𝝩𝝪𝝫𝝬𝝭𝝮', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "-": # 0xf4b6 - 0xf4ce - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf4b6 - 0xf4ce + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - - "𝝰-𝞈": # 0x1d770 - 0x1d788 - - t: "смелый" # (en: 'bold', google translation) + - "𝝰-𝞈": # 0x1d770 - 0x1d788 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝝰𝝱𝝲𝝳𝝴𝝵𝝶𝝷𝝸𝝹𝝺𝝻𝝼𝝽𝝾𝝿𝞀𝞁𝞂𝞃𝞄𝞅𝞆𝞇𝞈', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - - "-": # 0xf4d0 - 0xf4e8 - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf4d0 - 0xf4e8 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - - "𝞉𝞊𝞋𝞌𝞍𝞎𝞏": # 0x1d789 - 0x1d78f - - t: "смелый" # (en: 'bold', google translation) + - "𝞉𝞊𝞋𝞌𝞍𝞎𝞏": # 0x1d789 - 0x1d78f + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝞉𝞊𝞋𝞌𝞍𝞎𝞏', '∂εθκφρπ')" - - - "": # 0xf4e9 - 0xf4ef - - t: "смелый" # (en: 'bold', google translation) + - "": # 0xf4e9 - 0xf4ef + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', '∂εθκφρπ')" - - - "": [t: "смелый нахбла"] # 0xf4cf (en: 'bold nahblah', google translation) - - "𝝯": [t: "смелый нахбла"] # 0x1d76f (en: 'bold nahblah', google translation) - - - "𝞐-𝞨": # 0x1d790 - 0x1d7a8 - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "": [t: "жирная набла"] # 0xf4cf + - "𝝯": [t: "жирная набла"] # 0x1d76f + - "𝞐-𝞨": # 0x1d790 - 0x1d7a8 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝞐𝞑𝞒𝞓𝞔𝞕𝞖𝞗𝞘𝞙𝞚𝞛𝞜𝞝𝞞𝞟𝞠𝞡𝞢𝞣𝞤𝞥𝞦𝞧𝞨', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - - "-": # 0xf4f0 - 0xf508 - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf4f0 - 0xf508 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - - "𝞪-𝟂": # 0x1d7aa - 0x1d7c2 - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "𝞪-𝟂": # 0x1d7aa - 0x1d7c2 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝞪𝞫𝞬𝞭𝞮𝞯𝞰𝞱𝞲𝞳𝞴𝞵𝞶𝞷𝞸𝞹𝞺𝞻𝞼𝞽𝞾𝞿𝟀𝟁𝟂', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - - "-": # 0xf50a - 0xf522 - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf50a - 0xf522 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - - "𝟃𝟄𝟅𝟆𝟇𝟈𝟉": # 0x1d7c3 - 0x1d7c9 - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "𝟃𝟄𝟅𝟆𝟇𝟈𝟉": # 0x1d7c3 - 0x1d7c9 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝟃𝟄𝟅𝟆𝟇𝟈𝟉', '∂εθκφρπ')" - - - "": # 0xf523 - 0xf529 - # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - "": # 0xf523 - 0xf529 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', '∂εθκφρπ')" - - - "": [t: "смелый нахбла"] # 0xf509 (en: 'bold nahblah', google translation) - - "𝞩": [t: "смелый нахбла"] # 0x1d7a9 (en: 'bold nahblah', google translation) - - - "-": # 0xf52e - 0xf537 (old MathType) - - t: "смелый" # (en: 'bold', google translation) + - "": [t: "жирная набла"] # 0xf509 + - "𝞩": [t: "жирная набла"] # 0x1d7a9 + - "-": # 0xf52e - 0xf537 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', '0123456789')" - - - "𝟎-𝟗": # 0x1d7ce - 0x1d7d7 - - t: "смелый" # (en: 'bold', google translation) + - "𝟎-𝟗": # 0x1d7ce - 0x1d7d7 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗', '0123456789')" - - - "-": # 0xf52e - 0xf537 (old MathType) - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf52e - 0xf537 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '', '0123456789')" - - - "𝟬-𝟵": # 0x1D7EC - 0x1D7F5 - - t: "смелый" # (en: 'bold', google translation) + - "𝟬-𝟵": # 0x1D7EC - 0x1D7F5 + - test: + if: "not($IgnoreBold)" + then: [t: "жирный"] - spell: "translate('.', '𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵', '0123456789')" - - - "-": # 0xf556 - 0xf55f (old MathType) + - "-": # 0xf556 - 0xf55f - spell: "translate('.', '', '0123456789')" - - - "𝟢-𝟫": # 0x1d7e2 - 0x1d7eb + - "𝟢-𝟫": # 0x1d7e2 - 0x1d7eb - spell: "translate('.', '𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿', '0123456789')" - - - "𝟶-𝟿": # 0x1d7f6 - 0x1d7ff + - "𝟶-𝟿": # 0x1d7f6 - 0x1d7ff - spell: "translate('.', '𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿', '0123456789')" - - - - "": [t: "неизвестный персонаж"] # 0xf700 (en: 'unknown character', google translation) - - "": [t: "нижний правый и нижний левый треугольники"] # 0xf726 (en: 'lower right and lower left triangles', google translation) - - "": [t: "горизонтальный эллипс"] # 0xf72d (en: 'horizontal ellipsis extender', google translation) - - "": [t: "средний горизонтальный эллипсис"] # 0xf72e (en: 'midline horizontal ellipsis extender', google translation) - - "": [t: "радикальный удлинитель"] # 0xf8e5 (en: 'radical extender', google translation) - - "": [t: "вертикальная стрелка удлинителя"] # 0xf8e6 (en: 'vertical arrow extender', google translation) - - "": [t: "горизонтальная стрелка"] # 0xf8e7 (en: 'horizontal arrow extender', google translation) - - "": [t: "зарегистрированный знак без засечка"] # 0xf8e8 (en: 'registered sign sans serif', google translation) - - "": [t: "знак авторского права без засечка"] # 0xf8e9 (en: 'copyright sign sans serif', google translation) - - "": [t: "торговая марка знака без засечка"] # 0xf8ea (en: 'trade mark sign sans serif', google translation) - - "": [t: "левая вершина скобки"] # 0xf8eb (en: 'left paren top', google translation) - - "": [t: "левая скобка удлинителя"] # 0xf8ec (en: 'left paren extender', google translation) - - "": [t: "левая скобка дна"] # 0xf8ed (en: 'left paren bottom', google translation) - - "": [t: "левый кронштейн"] # 0xf8ee (en: 'left bracket top', google translation) - - "": [t: "удлинитель левого кронштейна"] # 0xf8ef (en: 'left bracket extender', google translation) - - "": [t: "левый кронштейн дно"] # 0xf8f0 (en: 'left bracket bottom', google translation) - - "": [t: "левый топ"] # 0xf8f1 (en: 'left brace top', google translation) - - "": [t: "оставая скоба середины"] # 0xf8f2 (en: 'left brace mid', google translation) - - "": [t: "левое скоба дно"] # 0xf8f3 (en: 'left brace bottom', google translation) - - "": [t: "скоба удлинителя"] # 0xf8f4 (en: 'brace extender', google translation) - - "": [t: "интегральный удлинитель"] # 0xf8f5 (en: 'integral extender', google translation) - - "": [t: "правая скобка вершина"] # 0xf8f6 (en: 'right paren top', google translation) - - "": [t: "право скобка удлинителя"] # 0xf8f7 (en: 'right paren extender', google translation) - - "": [t: "правая скобка дна"] # 0xf8f8 (en: 'right paren bottom', google translation) - - "": [t: "вершина правого кронштейна"] # 0xf8f9 (en: 'right bracket top', google translation) - - "": [t: "правый растяжение"] # 0xf8fa (en: 'right bracket extender', google translation) - - "": [t: "правый кронштейн дно"] # 0xf8fb (en: 'right bracket bottom', google translation) - - "": [t: "правый топ"] # 0xf8fc (en: 'right brace top', google translation) - - "": [t: "правая скоба середина"] # 0xf8fd (en: 'right brace mid', google translation) - - "": [t: "правое скоба дно"] # 0xf8fe (en: 'right brace bottom', google translation) - - "": [t: "логотип apple"] # 0xf8ff (en: 'apple logo', google translation) - - "ff": [t: "фф"] # 0xfb00 (en: 'ff', google translation) - - "fi": [t: "фигура"] # 0xfb01 (en: 'fi', google translation) - - "fl": [t: "флорида"] # 0xfb02 (en: 'fl', google translation) - - "ffi": [t: "ffi"] # 0xfb03 (google translation) - - "ffl": [t: "ффл"] # 0xfb04 (en: 'ffl', google translation) - - "ſt": [t: "футов"] # 0xfb05 (en: 'ft', google translation) - - "st": [t: "ул"] # 0xfb06 (en: 'st', google translation) - - "﬩": [t: "ивритное письмо альтернатива плюс"] # 0xfb29 (en: 'hebrew letter alternative plus', google translation) - - "︠": [t: "лигатура оставила половину украшения"] # 0xfe20 (en: 'ligature left half embellishment', google translation) - - "︡": [t: "лигатура справа половина украшения"] # 0xfe21 (en: 'ligature right half embellishment', google translation) - - "︢": [t: "двойная тильда оставила половину украшения"] # 0xfe22 (en: 'double tilde left half embellishment', google translation) - - "︣": [t: "двойная тильда правое половина украшения"] # 0xfe23 (en: 'double tilde right half embellishment', google translation) - - "︤": [t: "макрон оставил половину украшения"] # 0xfe24 (en: 'macron left half embellishment', google translation) - - "︥": [t: "макрон правый половина украшения"] # 0xfe25 (en: 'macron right half embellishment', google translation) - - "︦": [t: "соединение украшений макрона"] # 0xfe26 (en: 'conjoining macron embellishment', google translation) - - "︵": [t: "над скобкой"] # 0xfe35 (en: 'over paren', google translation) - - "︶": [t: "под скобкой"] # 0xfe36 (en: 'under paren', google translation) - - "︷": [t: "над скобкой"] # 0xfe37 (en: 'over brace', google translation) - - "︸": [t: "под скобкой"] # 0xfe38 (en: 'under brace', google translation) - - "︿": [t: "над угловым кронштейном"] # 0xfe3f (en: 'over angle bracket', google translation) - - "﹀": [t: "под угловым кронштейном"] # 0xfe40 (en: 'under angle bracket', google translation) - - "﹡": [t: "маленькая звездочка"] # 0xfe61 (en: 'small asterisk', google translation) - - "﹢": [t: "маленький плюс"] # 0xfe62 (en: 'small plus', google translation) - - "﹣": [t: "маленький минус"] # 0xfe63 (en: 'small minus', google translation) - - "﹤": [t: "маленький меньше, чем"] # 0xfe64 (en: 'small less than', google translation) - - "﹥": [t: "маленький больше, чем"] # 0xfe65 (en: 'small greater than', google translation) - - "﹦": [t: "маленькие равны"] # 0xfe66 (en: 'small equals', google translation) - - "+": [t: "равна значению"] # 0xff0b (en: 'equals sign', google translation) - - "<": [t: "меньше, чем"] # 0xff1c (en: 'less than', google translation) - - "=": [t: "равно"] # 0xff1d (en: 'equals', google translation) - - ">": [t: "больше"] # 0xff1e (en: 'greater than', google translation) - - "\": [t: "backslash"] # 0xff3c (google translation) - - "^": [t: "шляп"] # 0xff3e (en: 'hat', google translation) - - "|": # 0xff5c - # note: for ClearSpeak and SimpleSpeak, "|" inside of sets is handled at the mrow level, same for 'sets' + - "": [t: "неизвестный символ"] # 0xf700 + - "": [t: "нижний правый и нижний левый треугольники"] # 0xf726 + - "": [t: "удлинитель горизонтального многоточия"] # 0xf72d + - "": [t: "удлинитель среднего горизонтального многоточия"] # 0xf72e + - "": [t: "удлинитель радикала"] # 0xf8e5 + - "": [t: "удлинитель вертикальной стрелки"] # 0xf8e6 + - "": [t: "удлинитель горизонтальной стрелки"] # 0xf8e7 + - "": [t: "знак зарегистрированной торговой марки без засечек"] # 0xf8e8 + - "": [t: "знак авторского права без засечек"] # 0xf8e9 + - "": [t: "знак торговой марки без засечек"] # 0xf8ea + - "": [t: "верхняя часть левой круглой скобки"] # 0xf8eb + - "": [t: "удлинитель левой круглой скобки"] # 0xf8ec + - "": [t: "нижняя часть левой круглой скобки"] # 0xf8ed + - "": [t: "верхняя часть левой квадратной скобки"] # 0xf8ee + - "": [t: "удлинитель левой квадратной скобки"] # 0xf8ef + - "": [t: "нижняя часть левой квадратной скобки"] # 0xf8f0 + - "": [t: "верхняя часть левой фигурной скобки"] # 0xf8f1 + - "": [t: "средняя часть левой фигурной скобки"] # 0xf8f2 + - "": [t: "нижняя часть левой фигурной скобки"] # 0xf8f3 + - "": [t: "удлинитель фигурной скобки"] # 0xf8f4 + - "": [t: "удлинитель интеграла"] # 0xf8f5 + - "": [t: "верхняя часть правой круглой скобки"] # 0xf8f6 + - "": [t: "удлинитель правой круглой скобки"] # 0xf8f7 + - "": [t: "нижняя часть правой круглой скобки"] # 0xf8f8 + - "": [t: "верхняя часть правой квадратной скобки"] # 0xf8f9 + - "": [t: "удлинитель правой квадратной скобки"] # 0xf8fa + - "": [t: "нижняя часть правой квадратной скобки"] # 0xf8fb + - "": [t: "верхняя часть правой фигурной скобки"] # 0xf8fc + - "": [t: "средняя часть правой фигурной скобки"] # 0xf8fd + - "": [t: "нижняя часть правой фигурной скобки"] # 0xf8fe + - "": [t: "логотип Apple"] # 0xf8ff + - "ff": [t: "ff"] # 0xfb00 + - "fi": [t: "fi"] # 0xfb01 + - "fl": [t: "fl"] # 0xfb02 + - "ffi": [t: "ffi"] # 0xfb03 + - "ffl": [t: "ffl"] # 0xfb04 + - "ſt": [t: "ft"] # 0xfb05 + - "st": [t: "st"] # 0xfb06 + - "﬩": [t: "ивритская альтернатива плюс"] # 0xfb29 + - "︠": [t: "левая половина лигатуры (надстрочный)"] # 0xfe20 + - "︡": [t: "правая половина лигатуры (надстрочный)"] # 0xfe21 + - "︢": [t: "левая половина двойной тильды (надстрочный)"] # 0xfe22 + - "︣": [t: "правая половина двойной тильды (надстрочный)"] # 0xfe23 + - "︤": [t: "левая половина макрона (надстрочный)"] # 0xfe24 + - "︥": [t: "правая половина макрона (надстрочный)"] # 0xfe25 + - "︦": [t: "соединительный макрон (надстрочный)"] # 0xfe26 + - "︵": [t: "верхняя круглая скобка"] # 0xfe35 + - "︶": [t: "нижняя круглая скобка"] # 0xfe36 + - "︷": [t: "верхняя фигурная скобка"] # 0xfe37 + - "︸": [t: "нижняя фигурная скобка"] # 0xfe38 + - "︿": [t: "верхняя угловая скобка"] # 0xfe3f + - "﹀": [t: "нижняя угловая скобка"] # 0xfe40 + - "﹡": [t: "маленькая звёздочка"] # 0xfe61 + - "﹢": [t: "маленький плюс"] # 0xfe62 + - "﹣": [t: "маленький минус"] # 0xfe63 + - "﹤": [t: "маленькое меньше"] # 0xfe64 + - "﹥": [t: "маленькое больше"] # 0xfe65 + - "﹦": [t: "маленькое равно"] # 0xfe66 + - "+": [t: "полноширинный знак плюс"] # 0xff0b + - "<": [t: "меньше"] # 0xff1c + - "=": [t: "равно"] # 0xff1d + - ">": [t: "больше"] # 0xff1e + - "\": [t: "обратная косая черта"] # 0xff3c + - "^": [t: "крышка"] # 0xff3e + - "|": # 0xff5c - with: - variables: [DefaultToGiven: "count(preceding-sibling::*)=1 and count(following-sibling::*)=1 and ../../../*[1][.='P']"] # P(A|B) + variables: [DefaultToGiven: "count(preceding-sibling::*)=1 and count(following-sibling::*)=1 and ../../../*[1][.='P']"] replace: - test: - if: "$SpeechStyle != 'ClearSpeak'" then_test: if: "$DefaultToGiven" - then: [t: "данный"] # (en: 'given', google translation) - else: [t: "вертикальная линия"] # (en: 'vertical line', google translation) + then: [t: "при условии"] + else: [t: "вертикальная черта"] - else_if: "not(preceding-sibling::*) or not(following-sibling::*)" - then: [t: "вертикальная линия"] # (en: 'vertical line', google translation) + then: [t: "вертикальная черта"] - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" - then: [t: "так что"] # (en: 'such that', google translation) + then: [t: "такой, что"] - else_if: "$ClearSpeak_VerticalLine = 'Given' or $DefaultToGiven" - then: [t: "данный"] # (en: 'given', google translation) - - else: [t: "разделение"] # (en: 'divides', google translation) - - "~": [t: "тилде"] # 0xff5e (en: 'tilde', google translation) - - "¬": [t: "нет"] # 0xffe2 (en: 'not', google translation) - - "←": [t: "стрелка влево"] # 0xffe9 (en: 'left arrow', google translation) - - "↑": [t: "стрелка вверх"] # 0xffea (en: 'up arrow', google translation) - - "→": [t: "стрелка вправо"] # 0xffeb (en: 'right arrow', google translation) - - "↓": [t: "стрелка вниз"] # 0xffec (en: 'down arrow', google translation) - - "": [t: "неизвестный или отсутствующий объект"] # 0xfffc (en: 'unknown or missing object', google translation) - - "�": [t: "неизвестный или отсутствующий символ"] # 0xfffd (en: 'unknown or missing character', google translation) -- "ˉ": [t: "макрон"] # 0x2c9 (en: 'modifier macron') -- "ˊ": [t: "акут"] # 0x2ca (en: 'modifier acute accent') -- "ˋ": [t: "гравис"] # 0x2cb (en: 'modifier grave accent') -- "ˌ": [t: "нижняя вертикальная черта"] # 0x2cc (en: 'modifier low vertical line') -- "ˍ": [t: "нижний макрон"] # 0x2cd (en: 'modifier low macron') -- "ˎ": [t: "нижний гравис"] # 0x2ce (en: 'modifier low grave accent') -- "ˏ": [t: "нижний акут"] # 0x2cf (en: 'modifier low acute accent') -- "ː": [t: "знак долготы"] # 0x2d0 (en: 'modifier triangular colon') -- "ˑ": [t: "половинный знак долготы"] # 0x2d1 (en: 'modifier half triangular colon') -- "˒": [t: "центрированное правое полукольцо"] # 0x2d2 (en: 'modifier centered right half ring') -- "˓": [t: "центрированное левое полукольцо"] # 0x2d3 (en: 'modifier centered left half ring') -- "˔": [t: "верхний упор"] # 0x2d4 (en: 'modifier up tack') -- "˕": [t: "нижний упор"] # 0x2d5 (en: 'modifier down tack') -- "˖": [t: "верхний индекс плюс"] # 0x2d6 (en: 'modifier plus sign') -- "˗": [t: "верхний индекс минус"] # 0x2d7 (en: 'modifier minus sign') -- "˘": [t: "бреве"] # 0x2d8 (en: 'breve') -- "˙": [t: "точка сверху"] # 0x2d9 (en: 'dot') -- "˚": [t: "кольцо сверху"] # 0x2da (en: 'ring above') -- "˛": [t: "огонек"] # 0x2db (en: 'ogonek') -- "˜": [t: "малая тильда"] # 0x2dc (en: 'small tilde') -- "˝": [t: "двойной акут"] # 0x2dd (en: 'double acute accent') -- "˞": [t: "ротический крюк"] # 0x2de (en: 'modifier rhotic hook') -- "˟": [t: "перечёркивающий акцент"] # 0x2df (en: 'modifier cross accent') -- "ˠ": [t: "верхний индекс гаммы"] # 0x2e0 (en: 'modifier small gamma') -- "ˡ": [t: "верхний индекс l"] # 0x2e1 (en: 'modifier small l') -- "ˢ": [t: "верхний индекс s"] # 0x2e2 (en: 'modifier small s') -- "ˣ": [t: "верхний индекс x"] # 0x2e3 (en: 'modifier small x') -- "ˤ": [t: "верхний индекс перевёрнутой гортанной смычки"] # 0x2e4 (en: 'modifier small reversed glottal stop') -- "˥": [t: "сверхвысокий тон"] # 0x2e5 (en: 'modifier extra-high tone bar') -- "˦": [t: "высокий тон"] # 0x2e6 (en: 'modifier high tone bar') -- "˧": [t: "средний тон"] # 0x2e7 (en: 'modifier mid tone bar') -- "˨": [t: "низкий тон"] # 0x2e8 (en: 'modifier low tone bar') -- "˩": [t: "сверхнизкий тон"] # 0x2e9 (en: 'modifier extra-low tone bar') -- "˪": [t: "знак тона инь"] # 0x2ea (en: 'modifier yin departing tone mark') -- "˫": [t: "знак тона ян"] # 0x2eb (en: 'modifier yang departing tone mark') -- "ˬ": [t: "звонкость"] # 0x2ec (en: 'modifier voicing') -- "˭": [t: "непридыхательность"] # 0x2ed (en: 'modifier unaspirated') -- "ˮ": [t: "двойной апостроф"] # 0x2ee (en: 'modifier double apostrophe') -- "˯": [t: "нижний наконечник стрелки вниз"] # 0x2ef (en: 'modifier low down arrowhead') -- "˰": [t: "нижний наконечник стрелки вверх"] # 0x2f0 (en: 'modifier low up arrowhead') -- "˱": [t: "нижний наконечник стрелки влево"] # 0x2f1 (en: 'modifier low left arrowhead') -- "˲": [t: "нижний наконечник стрелки вправо"] # 0x2f2 (en: 'modifier low right arrowhead') -- "˳": [t: "нижнее кольцо"] # 0x2f3 (en: 'modifier low ring') -- "˴": [t: "средний гравис"] # 0x2f4 (en: 'modifier middle grave accent') -- "˵": [t: "средний двойной гравис"] # 0x2f5 (en: 'modifier middle double grave accent') -- "˶": [t: "средний двойной акут"] # 0x2f6 (en: 'modifier middle double acute accent') -- "˷": [t: "нижняя тильда"] # 0x2f7 (en: 'modifier low tilde') -- "˸": [t: "верхнее двоеточие"] # 0x2f8 (en: 'modifier raised colon') -- "˹": [t: "начало высокого тона"] # 0x2f9 (en: 'modifier begin high tone') -- "˺": [t: "конец высокого тона"] # 0x2fa (en: 'modifier end high tone') -- "˻": [t: "начало низкого тона"] # 0x2fb (en: 'modifier begin low tone') -- "˼": [t: "конец низкого тона"] # 0x2fc (en: 'modifier end low tone') -- "˽": [t: "полка"] # 0x2fd (en: 'modifier shelf') -- "˾": [t: "открытая полка"] # 0x2fe (en: 'modifier open shelf') -- "˿": [t: "нижняя левая стрелка"] # 0x2ff (en: 'modifier low left arrow') -- "̀": [t: "комбинируемый гравис"] # 0x300 (en: 'grave accent embellishment') -- "́": [t: "комбинируемый акут"] # 0x301 (en: 'acute accent embellishment') -- "̂": [t: "комбинируемый циркумфлекс"] # 0x302 (en: 'circumflex accent embellishment') -- "̃": [t: "комбинируемая тильда"] # 0x303 (en: 'tilde embellishment') -- "̄": [t: "комбинируемый макрон"] # 0x304 (en: 'macron embellishment') -- "̅": [t: "комбинируемое надчёркивание"] # 0x305 (en: 'overbar embellishment') -- "̆": [t: "комбинируемое бреве"] # 0x306 (en: 'breve embellishment') -- "̇": [t: "комбинируемая точка сверху"] # 0x307 (en: 'dot above embellishment') -- "̈": [t: "комбинируемый диэрезис"] # 0x308 (en: 'diaeresis embellishment') -- "̉": [t: "комбинируемый крючок сверху"] # 0x309 (en: 'hook above embellishment') -- "̊": [t: "комбинируемое кольцо сверху"] # 0x30a (en: 'ring above embellishment') -- "̋": [t: "комбинируемый двойной акут"] # 0x30b (en: 'double acute accent embellishment') -- "̌": [t: "комбинируемый гачек"] # 0x30c (en: 'check') -- "̍": [t: "комбинируемая вертикальная линия сверху"] # 0x30d (en: 'vertical line above embellishment') -- "̎": [t: "комбинируемая двойная вертикальная линия сверху"] # 0x30e (en: 'double vertical line above embellishment') -- "̏": [t: "комбинируемый двойной гравис"] # 0x30f (en: 'double grave accent embellishment') -- "̐": [t: "комбинируемая чандрабинду"] # 0x310 (en: 'candrabindu embellishment') -- "̑": [t: "комбинируемое перевёрнутое бреве"] # 0x311 (en: 'inverted breve embellishment') -- "̒": [t: "комбинируемая перевёрнутая запятая сверху"] # 0x312 (en: 'turned comma above embellishment') -- "̓": [t: "комбинируемая запятая сверху"] # 0x313 (en: 'comma above embellishment') -- "̔": [t: "комбинируемая перевёрнутая запятая сверху"] # 0x314 (en: 'reversed comma above embellishment') -- "̕": [t: "комбинируемая запятая справа сверху"] # 0x315 (en: 'comma above right embellishment') -- "̖": [t: "комбинируемый гравис снизу"] # 0x316 (en: 'grave accent below embellishment') -- "̗": [t: "комбинируемый акут снизу"] # 0x317 (en: 'acute accent below embellishment') -- "̘": [t: "комбинируемый левый упор снизу"] # 0x318 (en: 'left tack below embellishment') -- "̙": [t: "комбинируемый правый упор снизу"] # 0x319 (en: 'right tack below embellishment') -- "̚": [t: "комбинируемый левый угол сверху"] # 0x31a (en: 'left angle above embellishment') -- "̛": [t: "комбинируемый рожок"] # 0x31b (en: 'horn embellishment') -- "̜": [t: "комбинируемое левое полукольцо снизу"] # 0x31c (en: 'left half ring below embellishment') -- "̝": [t: "комбинируемый верхний упор снизу"] # 0x31d (en: 'up tack below embellishment') -- "̞": [t: "комбинируемый нижний упор снизу"] # 0x31e (en: 'down tack below embellishment') -- "̟": [t: "комбинируемый знак плюс снизу"] # 0x31f (en: 'plus sign below embellishment') -- "̠": [t: "комбинируемый знак минус снизу"] # 0x320 (en: 'minus sign below embellishment') -- "̡": [t: "комбинируемый палатализованный крюк снизу"] # 0x321 (en: 'palatalized hook below embellishment') -- "̢": [t: "комбинируемый ретрофлексный крюк снизу"] # 0x322 (en: 'retroflex hook below embellishment') -- "̣": [t: "комбинируемая точка снизу"] # 0x323 (en: 'dot below embellishment') -- "̤": [t: "комбинируемый диэрезис снизу"] # 0x324 (en: 'diaeresis below embellishment') -- "̥": [t: "комбинируемое кольцо снизу"] # 0x325 (en: 'ring below embellishment') -- "̦": [t: "комбинируемая запятая снизу"] # 0x326 (en: 'comma below embellishment') -- "̧": [t: "комбинируемая седиль"] # 0x327 (en: 'cedilla embellishment') -- "̨": [t: "комбинируемый огонек"] # 0x328 (en: 'ogonek embellishment') -- "̩": [t: "комбинируемая вертикальная линия снизу"] # 0x329 (en: 'vertical line below embellishment') -- "̪": [t: "комбинируемый мостик снизу"] # 0x32a (en: 'bridge below embellishment') -- "̫": [t: "комбинируемая перевёрнутая двойная арка снизу"] # 0x32b (en: 'inverted double arch below embellishment') -- "̬": [t: "комбинируемый гачек снизу"] # 0x32c (en: 'caron below embellishment') -- "̭": [t: "комбинируемый циркумфлекс снизу"] # 0x32d (en: 'circumflex accent below embellishment') -- "̮": [t: "комбинируемое бреве снизу"] # 0x32e (en: 'breve below embellishment') -- "̯": [t: "комбинируемое перевёрнутое бреве снизу"] # 0x32f (en: 'inverted breve below embellishment') -- "̰": [t: "комбинируемая тильда снизу"] # 0x330 (en: 'tilde below embellishment') -- "̱": [t: "комбинируемый макрон снизу"] # 0x331 (en: 'macron below embellishment') -- "̲": [t: "комбинируемое подчёркивание"] # 0x332 (en: 'low line embellishment') -- "̳": [t: "комбинируемое двойное подчёркивание"] # 0x333 (en: 'double low line embellishment') -- "̴": [t: "комбинируемая наложенная тильда"] # 0x334 (en: 'tilde overlay embellishment') -- "̵": [t: "комбинируемая короткая черта"] # 0x335 (en: 'short stroke overlay embellishment') -- "̶": [t: "комбинируемая длинная черта"] # 0x336 (en: 'long stroke overlay embellishment') -- "̷": [t: "комбинируемый короткий слэш"] # 0x337 (en: 'short solidus overlay embellishment') -- "̸": [t: "комбинируемый длинный слэш"] # 0x338 (en: 'long solidus overlay embellishment') -- "̹": [t: "комбинируемое правое полукольцо снизу"] # 0x339 (en: 'right half ring below embellishment') -- "̺": [t: "комбинируемый перевёрнутый мостик снизу"] # 0x33a (en: 'inverted bridge below embellishment') -- "̻": [t: "комбинируемый квадрат снизу"] # 0x33b (en: 'square below embellishment') -- "̼": [t: "комбинируемая чайка снизу"] # 0x33c (en: 'seagull below embellishment') -- "̽": [t: "комбинируемый икс сверху"] # 0x33d (en: 'x above embellishment') -- "̾": [t: "комбинируемая вертикальная тильда"] # 0x33e (en: 'vertical tilde embellishment') -- "̿": [t: "комбинируемое двойное надчёркивание"] # 0x33f (en: 'double overline embellishment') -- "̀": [t: "комбинируемый знак гравис-тона"] # 0x340 (en: 'grave tone mark embellishment') -- "́": [t: "комбинируемый знак акут-тона"] # 0x341 (en: 'acute tone mark embellishment') -- "͆": [t: "комбинируемый мостик сверху"] # 0x346 (en: 'bridge above') - -- "ΪΫϏ": # 0x3aa, 0x3ab, 0x3cf - - test: - if: "$CapitalLetters_Beep" - then: - - audio: - value: "beep.mp4" - replace: [] - - test: - if: "$CapitalLetters_UseWord" - then_test: - if: "$SpeechOverrides_CapitalLetters = ''" - then_test: - if: "$Impairment = 'Blindness'" - then: [t: "заглавная"] # (en: 'cap') - else: [x: "$SpeechOverrides_CapitalLetters"] - - pitch: - value: "$CapitalLetters_Pitch" - replace: [spell: "translate('.', 'ΪΫϏ', 'ιυϗ')"] - - t: " с диэрезисом" # (en: 'with dialytika') -- "ϊ": [t: "йота с диэрезисом"] # 0x3ca (en: 'iota with dialytika') -- "ϋ": [t: "ипсилон с диэрезисом"] # 0x3cb (en: 'upsilon with dialytika') -- "ό": [t: "омикрон с ударением"] # 0x3cc (en: 'omicron with tonos') -- "ύ": [t: "ипсилон с ударением"] # 0x3cd (en: 'upsilon with tonos') -- "ώ": [t: "омега с ударением"] # 0x3ce (en: 'omega with tonos') -- "ϐ": [t: "бета"] # 0x3d0 (en: 'beta') -- "ϑ": [t: "тета"] # 0x3d1 (en: 'theta') -- "ϒ": [t: "ипсилон с крючком"] # 0x3d2 (en: 'upsilon with hook') -- "ϓ": [t: "ипсилон с акутом и крючком"] # 0x3d3 (en: 'upsilon with acute and hook') -- "ϔ": [t: "ипсилон с диэрезисом и крючком"] # 0x3d4 (en: 'upsilon with diaeresis and hook') -- "ϕ": [t: "фи"] # 0x3d5 (en: 'phi') -- "ϖ": [t: "пи"] # 0x3d6 (en: 'pi') -- "ϗ": [t: "кай"] # 0x3d7 (en: 'kai') -- "Ϙ": [t: "заглавная архаичная коппа"] # 0x3d8 (en: 'cap archaic koppa') -- "ϙ": [t: "архаичная коппа"] # 0x3d9 (en: 'archaic koppa') -- "ϵ": [t: "эпсилон"] # 0x3f5 (en: 'epsilon') -- "϶": [t: "обратный эпсилон"] # 0x3f6 (en: 'reversed epsilon') -- "А-Я": # 0x410 - 0x42f - - test: - if: "$CapitalLetters_Beep" - then: - - audio: - value: "beep.mp4" - replace: [] - - test: - if: "$CapitalLetters_UseWord" - then_test: - if: "$SpeechOverrides_CapitalLetters = ''" - then_test: - if: "$Impairment = 'Blindness'" - then: [t: "заглавная"] # (en: 'cap') - else: [x: "$SpeechOverrides_CapitalLetters"] - - pitch: - value: "$CapitalLetters_Pitch" - replace: [spell: "translate('.', 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', 'абвгдежзийклмнопрстуфхцчшщъыьэюя')"] -- "а": [t: "а"] # 0x430 -- "б": [t: "бэ"] # 0x431 -- "в": [t: "вэ"] # 0x432 -- "г": [t: "гэ"] # 0x433 -- "д": [t: "дэ"] # 0x434 -- "е": [t: "е"] # 0x435 -- "ж": [t: "жэ"] # 0x436 -- "з": [t: "зэ"] # 0x437 -- "и": [t: "и"] # 0x438 -- "й": [t: "и краткое"] # 0x439 -- "к": [t: "ка"] # 0x43a -- "л": [t: "эль"] # 0x43b -- "м": [t: "эм"] # 0x43c -- "н": [t: "эн"] # 0x43d -- "о": [t: "о"] # 0x43e -- "п": [t: "пэ"] # 0x43f -- "р": [t: "эр"] # 0x440 -- "с": [t: "эс"] # 0x441 -- "т": [t: "тэ"] # 0x442 -- "у": [t: "у"] # 0x443 -- "ф": [t: "эф"] # 0x444 -- "х": [t: "ха"] # 0x445 -- "ц": [t: "цэ"] # 0x446 -- "ч": [t: "чэ"] # 0x447 -- "ш": [t: "ша"] # 0x448 -- "щ": [t: "ща"] # 0x449 -- "ъ": [t: "твёрдый знак"] # 0x44a -- "ы": [t: "ы"] # 0x44b -- "ь": [t: "мягкий знак"] # 0x44c -- "э": [t: "э"] # 0x44d -- "ю": [t: "ю"] # 0x44e -- "я": [t: "я"] # 0x44f -- "؆": [t: "арабский кубический корень"] # 0x606 (en: 'Arabic-Indic cube root') -- "؇": [t: "арабский корень четвёртой степени"] # 0x607 (en: 'Arabic-Indic fourth root') -- "؈": [t: "арабский рай"] # 0x608 (en: 'Arabic ray') -- "‐": [t: "дефис"] # 0x2010 (en: 'hyphen') -- "‑": [t: "неразрывный дефис"] # 0x2011 (en: 'non-breaking hyphen') -- "‒": [t: "цифровое тире"] # 0x2012 (en: 'figure dash') -- "–": [t: "короткое тире"] # 0x2013 (en: 'en dash') -- "—": [t: "длинное тире"] # 0x2014 (en: 'em dash') -- "―": [t: "горизонтальная черта"] # 0x2015 (en: 'horizontal bar') -- "‖": [t: "двойная вертикальная линия"] # 0x2016 (en: 'double vertical line') -- "†": [t: "крестик"] # 0x2020 (en: 'dagger') -- "‡": [t: "двойной крестик"] # 0x2021 (en: 'double dagger') - -- " - ": [t: ""] # 0x2000 - 0x2007 (различные пробелы, не озвучиваются) - -- "•": # 0x2022 - - test: - if: "@data-chem-formula-op" - then: [t: "точка"] # в химических формулах - else: [t: "маркер"] # (en: 'bullet') - -- "…": # 0x2026 - test: - if: - - "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_Ellipses = 'Auto' or" - - "../*[1][.='…']" - then: [t: "многоточие"] # (en: 'dot dot dot') - else_test: - if: "count(following-sibling::*) = 0" - then: [t: "и так далее"] # (en: 'and so on') - else: [t: "и так далее до"] # (en: 'and so on up to') - -- "‰": [t: "промилле"] # 0x2030 (en: 'per mille') -- "‱": [t: "десять тысяч"] # 0x2031 (en: 'per ten thousand') -- "′": [t: "штрих"] # 0x2032 (en: 'prime') -- "″": [t: "двойной штрих"] # 0x2033 (en: 'double prime') -- "‴": [t: "тройной штрих"] # 0x2034 (en: 'triple prime') -- "‵": [t: "обратный штрих"] # 0x2035 (en: 'reversed prime') -- "‶": [t: "обратный двойной штрих"] # 0x2036 (en: 'reversed double prime') -- "‷": [t: "обратный тройной штрих"] # 0x2037 (en: 'reversed triple prime') -- "‸": [t: "в степени"] # 0x2038 (en: 'to the') -- "‹": [t: "левая одиночная угловая кавычка"] # 0x2039 (en: 'single left-pointing angle quote mark') -- "›": [t: "правая одиночная угловая кавычка"] # 0x203a (en: 'single right-pointing angle quote mark') -- "‼": [t: "двойной восклицательный знак"] # 0x203c (en: 'double factorial') -- "⁄": [t: "косая черта дроби"] # 0x2044 (en: 'fraction slash') -- "⁅": [t: "левая квадратная скобка с пером"] # 0x2045 (en: 'left square bracket with quill') -- "⁆": [t: "правая квадратная скобка с пером"] # 0x2046 (en: 'right square bracket with quill') -- "※": [t: "знак ссылки"] # 0x203b (en: 'reference mark') -- "‿": [t: "соединение снизу"] # 0x203F (en: 'under tie') -- "⁀": [t: "соединение сверху"] # 0x2040 (en: 'tie') -- "⁎": [t: "нижняя звёздочка"] # 0x204e (en: 'low asterisk') -- "⁏": [t: "обратная точка с запятой"] # 0x204f (en: 'reversed semicolon') -- "⁐": [t: "сомкнуть"] # 0x2050 (en: 'close up') -- "⁑": [t: "две вертикальные звёздочки"] # 0x2051 (en: 'two vertical asterisks') -- "⁒": [t: "коммерческий знак минус"] # 0x2052 (en: 'commercial minus sign') -- "⁗": [t: "четыре штриха"] # 0x2057 (en: 'quadruple prime') -- "⁠": [t: ""] # 0x2060 (невидимый соединитель) -- "⁰": [t: "в степени ноль"] # 0x2070 (en: 'to the zeroth power') -- "ⁱ": [t: "в степени i"] # 0x2071 (en: 'to the i-th power') -- "⁴": [t: "в четвёртой степени"] # 0x2074 (en: 'to the fourth power') -- "⁵": [t: "в пятой степени"] # 0x2075 (en: 'to the fifth power') -- "⁶": [t: "в шестой степени"] # 0x2076 (en: 'to the sixth power') -- "⁷": [t: "в седьмой степени"] # 0x2077 (en: 'to the seventh power') -- "⁸": [t: "в восьмой степени"] # 0x2078 (en: 'to the eighth power') -- "⁹": [t: "в девятой степени"] # 0x2079 (en: 'to the ninth power') -- "⁺": [t: "верхний индекс плюс"] # 0x207a (en: 'superscript plus sign') -- "⁻": [t: "верхний индекс минус"] # 0x207b (en: 'superscript minus') -- "⁼": [t: "верхний индекс равно"] # 0x207c (en: 'superscript equals sign') -- "⁽": [t: "верхний индекс левая скобка"] # 0x207d (en: 'superscript left parenthesis') -- "⁾": [t: "верхний индекс правая скобка"] # 0x207e (en: 'superscript right parenthesis') -- "ⁿ": [t: "в степени n"] # 0x207f (en: 'to the n-th power') -- "₀": [t: "индекс ноль"] # 0x2080 (en: 'sub zero') -- "₁": [t: "индекс один"] # 0x2081 (en: 'sub one') -- "₂": [t: "индекс два"] # 0x2082 (en: 'sub two') -- "₃": [t: "индекс три"] # 0x2083 (en: 'sub three') -- "₄": [t: "индекс четыре"] # 0x2084 (en: 'sub four') -- "₅": [t: "индекс пять"] # 0x2085 (en: 'sub five') -- "₆": [t: "индекс шесть"] # 0x2086 (en: 'sub six') -- "₇": [t: "индекс семь"] # 0x2087 (en: 'sub seven') -- "₈": [t: "индекс восемь"] # 0x2088 (en: 'sub eight') -- "₉": [t: "индекс девять"] # 0x2089 (en: 'sub nine') -- "₊": [t: "индекс плюс"] # 0x208a (en: 'subscript plus sign') -- "₋": [t: "индекс минус"] # 0x208b (en: 'subscript minus sign') -- "₌": [t: "индекс равно"] # 0x208c (en: 'subscript equals sign') -- "₍": [t: "индекс левая скобка"] # 0x208d (en: 'subscript left parenthesis') -- "₎": [t: "индекс правая скобка"] # 0x208e (en: 'subscript right parenthesis') -- "ₐ": [t: "индекс a"] # 0x2090 (en: 'sub a') -- "ₑ": [t: "индекс e"] # 0x2091 (en: 'sub e') -- "ₒ": [t: "индекс o"] # 0x2092 (en: 'sub o') -- "ₓ": [t: "индекс x"] # 0x2093 (en: 'sub x') -- "ₕ": [t: "индекс h"] # 0x2095 (en: 'sub h') -- "ₖ": [t: "индекс k"] # 0x2096 (en: 'sub k') -- "ₗ": [t: "индекс l"] # 0x2097 (en: 'sub l') -- "ₘ": [t: "индекс m"] # 0x2098 (en: 'sub m') -- "ₙ": [t: "индекс n"] # 0x2099 (en: 'sub n') -- "ₚ": [t: "индекс p"] # 0x209a (en: 'sub p') -- "ₛ": [t: "индекс s"] # 0x209b (en: 'sub s') -- "ₜ": [t: "индекс t"] # 0x209c (en: 'sub t') -- "₠": [t: "евро"] # 0x20a0 (en: 'european currency unit') — устаревший, но пусть будет евро -- "₡": [t: "колон"] # 0x20a1 (en: 'colon') -- "₢": [t: "крузейро"] # 0x20a2 (en: 'cruzeiro') -- "₣": [t: "франк"] # 0x20a3 (en: 'franc') -- "₤": [t: "лира"] # 0x20a4 (en: 'lira') -- "₥": [t: "милль"] # 0x20a5 (en: 'mill') -- "₦": [t: "найра"] # 0x20a6 (en: 'naira') -- "₧": [t: "песета"] # 0x20a7 (en: 'peseta') -- "₨": [t: "рупия"] # 0x20a8 (en: 'rupee') -- "₩": [t: "вона"] # 0x20a9 (en: 'won') -- "₪": [t: "новый шекель"] # 0x20aa (en: 'new sheqel') -- "₫": [t: "донг"] # 0x20ab (en: 'dong') -- "€": [t: "евро"] # 0x20ac (en: 'euro') -- "₭": [t: "кип"] # 0x20ad (en: 'kip') -- "₮": [t: "тугрик"] # 0x20ae (en: 'tugrik') -- "₯": [t: "драхма"] # 0x20af (en: 'drachma') -- "₰": [t: "пфенниг"] # 0x20b0 (en: 'german penny') -- "₱": [t: "песо"] # 0x20b1 (en: 'peso') -- "₲": [t: "гуарани"] # 0x20b2 (en: 'guarani') -- "₳": [t: "аустраль"] # 0x20b3 (en: 'austral') -- "₴": [t: "гривна"] # 0x20b4 (en: 'hryvnia') -- "₵": [t: "седи"] # 0x20b5 (en: 'cedi') -- "₶": [t: "ливр"] # 0x20b6 (en: 'livre tournois') -- "₷": [t: "спесмило"] # 0x20b7 (en: 'spesmilo') -- "₸": [t: "тенге"] # 0x20b8 (en: 'tenge') -- "₹": [t: "индийская рупия"] # 0x20b9 (en: 'indian rupee') -- "₺": [t: "турецкая лира"] # 0x20ba (en: 'turkish lira') -- "⃐": [t: "комбинируемый левый гарпун сверху"] # 0x20d0 (en: 'left harpoon above embellishment') -- "⃑": [t: "комбинируемый правый гарпун сверху"] # 0x20d1 (en: 'right harpoon above embellishment') -- "⃒": [t: "комбинируемая длинная вертикальная черта"] # 0x20d2 (en: 'long vertical line overlay embellishment') -- "⃓": [t: "комбинируемая короткая вертикальная черта"] # 0x20d3 (en: 'short vertical line overlay embellishment') -- "⃔": [t: "комбинируемая стрелка против часовой стрелки"] # 0x20d4 (en: 'anticlockwise arrow above embellishment') -- "⃕": [t: "комбинируемая стрелка по часовой стрелке"] # 0x20d5 (en: 'clockwise arrow above embellishment') -- "⃖": [t: "комбинируемая стрелка влево сверху"] # 0x20d6 (en: 'left arrow above embellishment') -- "⃗": [t: "комбинируемая стрелка вправо сверху"] # 0x20d7 (en: 'right arrow above embellishment') -- "⃘": [t: "комбинируемое кольцо"] # 0x20d8 (en: 'ring overlay embellishment') -- "⃙": [t: "комбинируемое кольцо по часовой стрелке"] # 0x20d9 (en: 'clockwise ring overlay embellishment') -- "⃚": [t: "комбинируемое кольцо против часовой стрелки"] # 0x20da (en: 'anticlockwise ring overlay embellishment') -- "⃛": [t: "комбинируемые три точки"] # 0x20db (en: 'triple dot') -- "⃜": [t: "комбинируемые четыре точки"] # 0x20dc (en: 'quadruple dot') -- "⃝": [t: "комбинируемый круг"] # 0x20dd (en: 'enclosing circle embellishment') -- "⃞": [t: "комбинируемый квадрат"] # 0x20de (en: 'enclosing square embellishment') -- "⃟": [t: "комбинируемый ромб"] # 0x20df (en: 'enclosing diamond embellishment') -- "⃠": [t: "комбинируемый круг с обратной косой"] # 0x20e0 (en: 'enclosing circle backslash embellishment') -- "⃡": [t: "комбинируемая стрелка влево-вправо сверху"] # 0x20e1 (en: 'left right arrow above embellishment') -- "⃢": [t: "комбинируемый прямоугольник"] # 0x20e2 (en: 'enclosing screen embellishment') -- "⃣": [t: "комбинируемый значок клавиши"] # 0x20e3 (en: 'enclosing keycap embellishment') -- "⃤": [t: "комбинируемый треугольник вверх"] # 0x20e4 (en: 'enclosing upward pointing triangle embellishment') -- "⃥": [t: "комбинируемая обратная косая черта"] # 0x20e5 (en: 'reverse solidus overlay embellishment') -- "⃦": [t: "комбинируемая двойная вертикальная черта"] # 0x20e6 (en: 'double vertical stroke embellishment') -- "⃧": [t: "комбинируемый символ аннуитета"] # 0x20e7 (en: 'annuity symbol embellishment') -- "⃨": [t: "комбинируемые три точки снизу"] # 0x20e8 (en: 'triple underdot') -- "⃩": [t: "комбинируемый широкий мостик сверху"] # 0x20e9 (en: 'wide bridge above embellishment') -- "⃪": [t: "комбинируемая левая стрелка"] # 0x20ea (en: 'leftwards arrow overlay embellishment') -- "⃫": [t: "комбинируемая длинная двойная косая"] # 0x20eb (en: 'long double solidus overlay embellishment') -- "⃬": [t: "комбинируемый правый гарпун вниз"] # 0x20ec (en: 'rightwards harpoon with barb downwards embellishment') -- "⃭": [t: "комбинируемый левый гарпун вниз"] # 0x20ed (en: 'leftwards harpoon with barb downwards embellishment') -- "⃮": [t: "комбинируемая левая стрелка снизу"] # 0x20ee (en: 'left arrow below embellishment') -- "⃯": [t: "комбинируемая правая стрелка снизу"] # 0x20ef (en: 'right arrow below embellishment') -- "⃰": [t: "комбинируемая звёздочка сверху"] # 0x20f0 (en: 'asterisk above embellishment') -- "℄": [t: "символ центровой линии"] # 0x2104 (en: 'center line symbol') -- "℅": [t: "вниманию"] # 0x2105 (en: 'care of') -- "℆": [t: "каждая"] # 0x2106 (en: 'cada una') -- "ℇ": [t: "постоянная Эйлера"] # 0x2107 (en: 'Euler's constant') -- "℈": [t: "скрупул"] # 0x2108 (en: 'scruple') -- "℉": [t: "градус Фаренгейта"] # 0x2109 (en: 'degree Fahrenheit') -- "ℊ": [t: "рукописная g"] # 0x210a (en: 'script g') -- "ℌℑℨℭ": # 0x210c, 0x2111, 0x2128, 0x212d - - t: "готическое" # (en: 'fraktur') - - spell: "translate('.', 'ℌℑℨℭ', 'HIZC')" -- "ℍℙℾℿ": # 0x210d, 0x2119, 0x213e, 0x213f - - t: "двойное" # (en: 'double struck') - - spell: "translate('.', 'ℍℙℾℿ', 'HPΓΠ')" -- "ℎ": [t: "постоянная Планка"] # 0x210e (en: 'Planck constant') -- "ℏ": [t: "постоянная Планка с чертой"] # 0x210f (en: 'h-bar') - -- "ℐℒ℘ℬℰℱℳ": # 0x2110, 0x2112, 0x2118, 0x2130, 0x2131, 0x2133 - - t: "рукописное" # (en: 'script') - - spell: "translate('.', 'ℐℒ℘ℬℰℱℳ', 'ILPBEFM')" - -- "ℓ": [t: "рукописная l"] # 0x2113 (en: 'script l') -- "℔": [t: "фунт"] # 0x2114 (en: 'pound') -- "№": [t: "номер"] # 0x2116 (en: 'numero') -- "℥": [t: "унция"] # 0x2125 (en: 'ounce') -- "Ω": [t: "ом"] # 0x2126 (en: 'ohm') -- "℧": [t: "сименс"] # 0x2127 (en: 'mho') -- "℩": [t: "перевёрнутая йота"] # 0x2129 (en: 'turned iota') -- "K": [t: "кельвин"] # 0x212a (en: 'kelvin') -- "Å": [t: "ангстрем"] # 0x212b (en: 'angstrom') -- "ℯ": [t: "рукописная e"] # 0x212f (en: 'script e') - -- "Ⅎ℺⅁⅂⅃⅄": # 0x2132, 0x213a, 0x2141, 0x2142, 0x2143, 0x2144 - - test: - - if: "'.' = '℺'" - then: [t: "повёрнутое"] # (en: 'rotated') - - else_if: "'.' = 'Ⅎ'" - then: [t: "перевёрнутое"] # (en: 'turned') - - else_if: "'.' = '⅃'" - then: [t: "обратное без засечек"] # (en: 'reversed sans-serif') - else: [t: "повёрнутое без засечек"] # (en: 'turned sans-serif') - - spell: "translate('.', 'Ⅎ℺⅁⅂⅃⅄', 'FQGLLY')" - -- "ℴ": [t: "рукописная o"] # 0x2134 (en: 'script o') -- "ℵ": [t: "алеф"] # 0x2135 (en: 'alef') -- "ℶ": [t: "бет"] # 0x2136 (en: 'bet') -- "ℷ": [t: "гимель"] # 0x2137 (en: 'gimel') -- "ℸ": [t: "далет"] # 0x2138 (en: 'dalet') -- "ℼ": [t: "двойное пи"] # 0x213c (en: 'double-struck pi') -- "ℽ": [t: "двойная гамма"] # 0x213d (en: 'double-struck gamma') -- "⅀": [t: "двойная сумма"] # 0x2140 (en: 'double-struck n-ary summation') -- "⅋": [t: "перевёрнутый амперсанд"] # 0x214b (en: 'turned ampersand') -- "⅌": [t: "на"] # 0x214c (en: 'per') -- "ⅎ": [t: "перевёрнутая f"] # 0x214e (en: 'turned f') -- "¼": [t: "одна четверть"] # 0x00bc (en: 'one quarter') -- "½": [t: "одна вторая"] # 0x00bd (en: 'one half') -- "¾": [t: "три четверти"] # 0x00be (en: 'three quarters') -- "⅐": [t: "одна седьмая"] # 0x2150 (en: 'one seventh') -- "⅑": [t: "одна девятая"] # 0x2151 (en: 'one ninth') -- "⅒": [t: "одна десятая"] # 0x2152 (en: 'one tenth') -- "⅓": [t: "одна треть"] # 0x2153 (en: 'one third') -- "⅔": [t: "две трети"] # 0x2154 (en: 'two thirds') -- "⅕": [t: "одна пятая"] # 0x2155 (en: 'one fifth') -- "⅖": [t: "две пятых"] # 0x2156 (en: 'two fifths') -- "⅗": [t: "три пятых"] # 0x2157 (en: 'three fifths') -- "⅘": [t: "четыре пятых"] # 0x2158 (en: 'four fifths') -- "⅙": [t: "одна шестая"] # 0x2159 (en: 'one sixth') -- "⅚": [t: "пять шестых"] # 0x215a (en: 'five sixths') -- "⅛": [t: "одна восьмая"] # 0x215b (en: 'one eighth') -- "⅜": [t: "три восьмых"] # 0x215c (en: 'three eighths') -- "⅝": [t: "пять восьмых"] # 0x215d (en: 'five eighths') -- "⅞": [t: "семь восьмых"] # 0x215e (en: 'seven eighths') -- "⅟": [t: "один"] # 0x215f (en: 'one over') -- "Ⅰ": [t: "один"] # 0x2160 (римская цифра) -- "Ⅱ": [t: "два"] # 0x2161 -- "Ⅲ": [t: "три"] # 0x2162 -- "Ⅳ": [t: "четыре"] # 0x2163 -- "Ⅴ": [t: "пять"] # 0x2164 -- "Ⅵ": [t: "шесть"] # 0x2165 -- "Ⅶ": [t: "семь"] # 0x2166 -- "Ⅷ": [t: "восемь"] # 0x2167 -- "Ⅸ": [t: "девять"] # 0x2168 -- "Ⅹ": [t: "десять"] # 0x2169 -- "Ⅺ": [t: "одиннадцать"] # 0x216a -- "Ⅻ": [t: "двенадцать"] # 0x216b -- "Ⅼ": [t: "пятьдесят"] # 0x216c -- "Ⅽ": [t: "сто"] # 0x216d -- "Ⅾ": [t: "пятьсот"] # 0x216e -- "Ⅿ": [t: "тысяча"] # 0x216f -- "ⅰ": [t: "один"] # 0x2170 -- "ⅱ": [t: "два"] # 0x2171 -- "ⅲ": [t: "три"] # 0x2172 -- "ⅳ": [t: "четыре"] # 0x2173 -- "ⅴ": [t: "пять"] # 0x2174 -- "ⅵ": [t: "шесть"] # 0x2175 -- "ⅶ": [t: "семь"] # 0x2176 -- "ⅷ": [t: "восемь"] # 0x2177 -- "ⅸ": [t: "девять"] # 0x2178 -- "ⅹ": [t: "десять"] # 0x2179 -- "ⅺ": [t: "одиннадцать"] # 0x217a -- "ⅻ": [t: "двенадцать"] # 0x217b -- "ⅼ": [t: "пятьдесят"] # 0x217c -- "ⅽ": [t: "сто"] # 0x217d -- "ⅾ": [t: "пятьсот"] # 0x217e -- "ⅿ": [t: "тысяча"] # 0x217f -- "↉": [t: "ноль третьих"] # 0x2189 (en: 'zero thirds') -- "←": [t: "стрелка влево"] # 0x2190 -- "↑": [t: "стрелка вверх"] # 0x2191 -- "→": [t: "стрелка вправо"] # 0x2192 -- "↓": [t: "стрелка вниз"] # 0x2193 -- "↔": [t: "стрелка влево-вправо"] # 0x2194 -- "↕": [t: "стрелка вверх-вниз"] # 0x2195 -- "↖": [t: "стрелка северо-запад"] # 0x2196 -- "↗": # 0x2197 - - test: - if: "ancestor::*[2][self::m:limit]" - then: [t: "стремится снизу"] # (en: 'approaches from below') - else: [t: "стрелка северо-восток"] # 0x2197 -- "↘": # 0x2198 - - test: - if: "ancestor::*[2][self::m:limit]" - then: [t: "стремится сверху"] # (en: 'approaches from above') - else: [t: "стрелка юго-восток"] # 0x2198 -- "↙": [t: "стрелка юго-запад"] # 0x2199 -- "↚": [t: "стрелка влево с чертой"] # 0x219a -- "↛": [t: "стрелка вправо с чертой"] # 0x219b -- "↜": [t: "стрелка влево волнистая"] # 0x219c -- "↝": [t: "стрелка вправо волнистая"] # 0x219d -- "↞": [t: "стрелка влево с двумя головками"] # 0x219e -- "↟": [t: "стрелка вверх с двумя головками"] # 0x219f -- "↠": [t: "стрелка вправо с двумя головками"] # 0x21a0 -- "↡": [t: "стрелка вниз с двумя головками"] # 0x21a1 -- "↢": [t: "стрелка влево с хвостом"] # 0x21a2 -- "↣": [t: "стрелка вправо с хвостом"] # 0x21a3 -- "↤": [t: "стрелка влево от черты"] # 0x21a4 -- "↥": [t: "стрелка вверх от черты"] # 0x21a5 -- "↦": [t: "стрелка вправо от черты"] # 0x21a6 -- "↧": [t: "стрелка вниз от черты"] # 0x21a7 -- "↨": [t: "стрелка вверх-вниз с основанием"] # 0x21a8 -- "↩": [t: "стрелка влево с крючком"] # 0x21a9 -- "↪": [t: "стрелка вправо с крючком"] # 0x21aa -- "↫": [t: "стрелка влево с петлей"] # 0x21ab -- "↬": [t: "стрелка вправо с петлей"] # 0x21ac -- "↭": [t: "стрелка влево-вправо волнистая"] # 0x21ad -- "↮": [t: "стрелка влево-вправо с чертой"] # 0x21ae -- "↯": [t: "стрелка зигзаг вниз"] # 0x21af -- "↰": [t: "стрелка вверх с наконечником влево"] # 0x21b0 -- "↱": [t: "стрелка вверх с наконечником вправо"] # 0x21b1 -- "↲": [t: "стрелка вниз с наконечником влево"] # 0x21b2 -- "↳": [t: "стрелка вниз с наконечником вправо"] # 0x21b3 -- "↴": [t: "стрелка вправо с углом вниз"] # 0x21b4 -- "↵": [t: "стрелка вниз с углом влево"] # 0x21b5 -- "↶": [t: "полукруг против часовой стрелки сверху"] # 0x21b6 -- "↷": [t: "полукруг по часовой стрелке сверху"] # 0x21b7 -- "↸": [t: "стрелка северо-запад к длинной черте"] # 0x21b8 -- "↹": [t: "стрелка влево к черте над стрелкой вправо к черте"] # 0x21b9 -- "↺": [t: "разомкнутый круг против часовой стрелки"] # 0x21ba -- "↻": [t: "разомкнутый круг по часовой стрелке"] # 0x21bb -- "↼": [t: "левый гарпун вверх"] # 0x21bc -- "↽": [t: "левый гарпун вниз"] # 0x21bd -- "↾": [t: "правый гарпун вверх"] # 0x21be -- "↿": [t: "левый гарпун вверх"] # 0x21bf (дубль? в оригинале было 'up harpoon left') -- "⇀": [t: "правый гарпун вверх"] # 0x21c0 -- "⇁": [t: "правый гарпун вниз"] # 0x21c1 -- "⇂": [t: "правый гарпун вниз"] # 0x21c2 (дубль? в оригинале 'down harpoon right') -- "⇃": [t: "левый гарпун вниз"] # 0x21c3 -- "⇄": [t: "стрелка вправо над стрелкой влево"] # 0x21c4 -- "⇅": [t: "стрелка вверх слева от стрелки вниз"] # 0x21c5 -- "⇆": [t: "стрелка влево над стрелкой вправо"] # 0x21c6 -- "⇇": [t: "две стрелки влево"] # 0x21c7 -- "⇈": [t: "две стрелки вверх"] # 0x21c8 -- "⇉": [t: "две стрелки вправо"] # 0x21c9 -- "⇊": [t: "две стрелки вниз"] # 0x21ca -- "⇋": [t: "левый гарпун над правым гарпуном"] # 0x21cb -- "⇌": [t: "правый гарпун над левым гарпуном"] # 0x21cc + then: [t: "при условии"] + - else: [t: "делит"] + - "~": [t: "тильда"] # 0xff5e + - "¬": [t: "не"] # 0xffe2 + - "←": [t: "стрелка влево"] # 0xffe9 + - "↑": [t: "стрелка вверх"] # 0xffea + - "→": [t: "стрелка вправо"] # 0xffeb + - "↓": [t: "стрелка вниз"] # 0xffec + - "": [t: "неизвестный или отсутствующий объект"] # 0xfffc + - "�": [t: "неизвестный или отсутствующий символ"] # 0xfffd + - "🣑": [t: "находится в равновесии с"] # 0x1F8D1 + - "🣒": [t: "находится в равновесии, смещённом вправо, с"] # 0x1F8D2 + - "🣓": [t: "находится в равновесии, смещённом влево, с"] # 0x1F8D3 + - "\uE410": [t: "частичная связь "] # 0xe410 + - "\uE411": [t: "двойная частичная связь "] # 0xe411 + - "\uE412": [t: "тройная частичная связь "] # 0xe412 + - "\uE428": [spell: "'⟵'"] # 0xe428 + - "\uE429": [spell: "'⟶'"] # 0xe429 + - "\uE42A": [spell: "'⟷'"] # 0xe42a + - "\uE408": [spell: "'🣑'"] # 0xe408 + - "\uE409": [spell: "'🣒'"] # 0xe409 + - "\uE40A": [spell: "'🣓'"] # 0xe40a + - "\uE42B": [spell: "'⇄'"] # 0xe42b + - "\uE42C": [spell: "'←'"] # 0xe42c + - "\uE42D": [spell: "'→'"] # 0xe42d + - "\uE42E": [spell: "'⇄'"] # 0xe42e defer to def of arrow From 62dfb84994db128e506ce3003bc935186d5f3422 Mon Sep 17 00:00:00 2001 From: Danil <81031453+Kostenkov-2021@users.noreply.github.com> Date: Tue, 28 Apr 2026 15:41:20 +0300 Subject: [PATCH 42/43] Use uppercase 'T' keys and fix text in ru rules MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace many occurrences of the lowercase 't' action key with uppercase 'T' in Rules/Languages/ru/ClearSpeak_Rules.yaml (and related case changes like ct -> CT) to align with the expected rule schema/consumer. Also apply minor Russian text corrections (e.g. "деленное на" → "делённое на"). No other logic changes. --- Rules/Languages/ru/ClearSpeak_Rules.yaml | 206 +++++++++++------------ 1 file changed, 103 insertions(+), 103 deletions(-) diff --git a/Rules/Languages/ru/ClearSpeak_Rules.yaml b/Rules/Languages/ru/ClearSpeak_Rules.yaml index e4754c95..9b6d21c4 100644 --- a/Rules/Languages/ru/ClearSpeak_Rules.yaml +++ b/Rules/Languages/ru/ClearSpeak_Rules.yaml @@ -23,7 +23,7 @@ tag: mn match: "starts-with(text(), '-')" replace: - - t: "минус" + - T: "минус" - x: "translate(text(), '-_', '')" - name: default @@ -32,26 +32,26 @@ replace: - test: if: "$Verbosity!='Terse'" - then: [t: ""] + then: [T: ""] - test: if: $ClearSpeak_Roots = 'PosNegSqRoot' or $ClearSpeak_Roots = 'PosNegSqRootEnd' then: - bookmark: "*[1]/@id" - test: if: parent::*[self::m:minus and count(*)=1] - then: [t: "отрицательный"] - else: [t: "положительный"] - - t: "квадратный корень" + then: [T: "отрицательный"] + else: [T: "положительный"] + - T: "квадратный корень" - test: if: "$Verbosity!='Terse'" - then: [t: "из"] + then: [T: "из"] else: [pause: short] - x: "*[1]" - test: - if: "$ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd'" then: - pause: short - - t: "конец корня" + - T: "конец корня" - pause: medium - else_if: "IsNode(*[1], 'simple')" then: [pause: short] @@ -72,16 +72,16 @@ then: [bookmark: "parent/@id"] - test: if: parent::m:minus - then: [t: "отрицательный"] - else: [t: "положительный"] + then: [T: "отрицательный"] + else: [T: "положительный"] - test: if: "*[2][self::m:mn and not(contains(., '.'))]" then_test: - if: "*[2][.='2']" - then: [t: "квадратный корень"] + then: [T: "квадратный корень"] - else_if: "*[2][.='3']" - then: [t: "кубический корень"] - - else: [x: "ToOrdinal(*[2])", t: "степени"] + then: [T: "кубический корень"] + - else: [x: "ToOrdinal(*[2])", T: "степени"] else: - test: if: "*[2][self::m:mi][string-length(.)=1]" @@ -89,16 +89,16 @@ - x: "*[2]" - pronounce: [{text: "-й"}, {ipa: "j"}, {sapi5: "y"}, {eloquence: "Y"}] else: {x: "*[2]"} - - t: "корень" + - T: "корень" - test: if: "$Verbosity!='Terse'" - then: [t: "из"] + then: [T: "из"] - x: "*[1]" - test: if: $ClearSpeak_Roots = 'RootEnd' or $ClearSpeak_Roots = 'PosNegSqRootEnd' then: - pause: short - - t: "конец корня" + - T: "конец корня" - pause: medium else_test: if: IsNode(*[1], 'simple') @@ -118,8 +118,8 @@ - bookmark: "@id" - test: if: "self::m:minus" - then: [t: "отрицательный"] - else: [t: "положительный"] + then: [T: "отрицательный"] + else: [T: "положительный"] - x: "*[1]" - name: per-fraction @@ -129,7 +129,7 @@ BaseNode(*[1])[contains(@data-intent-property, ':unit') or (self::m:mrow and self::*[3][contains(@data-intent-property, ':unit')])]" replace: - x: "*[1]" - - t: "в" + - T: "в" - x: "*[2]" - name: common-fraction @@ -168,15 +168,15 @@ - test: if: "$Verbosity!='Terse'" then: [ot: ""] - - t: "дробь" + - T: "дробь" - x: "*[1]" - - t: "деленное на" + - T: "делённое на" - x: "*[2]" - test: if: "$ClearSpeak_Fractions='OverEndFrac' or ($ClearSpeak_Fractions='EndFrac' and not( ($ClearSpeak_Fractions='Auto' or $ClearSpeak_Fractions='Ordinal' or $ClearSpeak_Fractions='EndFrac') and *[1][*[1][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or text()<20)] and *[2][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or (2<= text() and text()<=10))] ] and *[2][*[1][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or text()<20)] and *[2][self::m:mn][not(contains(., '.')) and ($ClearSpeak_Fractions='Ordinal' or (2<= text() and text()<=10))] ] ) )" then: - pause: short - - t: "конец дроби" + - T: "конец дроби" - pause: short - name: fraction-over-text @@ -197,13 +197,13 @@ - ")" replace: - x: "*[1]" - - t: "деленное на" + - T: "делённое на" - x: "*[2]" - test: if: "$ClearSpeak_Fractions='EndFrac' or $ClearSpeak_Fractions='OverEndFrac'" then: - pause: short - - t: "конец дроби" + - T: "конец дроби" - pause: short - name: default @@ -211,20 +211,20 @@ match: "." replace: - ot: "" - - t: "дробь: числитель" + - T: "дробь: числитель" - test: if: not(IsNode(*[1], 'simple')) then: [pause: medium] - x: "*[1]" - pause: medium - - t: "знаменатель" + - T: "знаменатель" - x: "*[2]" - pause: long - test: if: "$ClearSpeak_Fractions='EndFrac' or $ClearSpeak_Fractions='GeneralEndFrac'" then: - pause: short - - t: "конец дроби" + - T: "конец дроби" - pause: short - name: ClearSpeak-function-inverse @@ -233,11 +233,11 @@ replace: - test: if: $ClearSpeak_Trig = 'TrigInverse' - then: [{x: "*[1]"}, {bookmark: "*[2]/@id"}, t: "обратное"] + then: [{x: "*[1]"}, {bookmark: "*[2]/@id"}, T: "обратное"] else_test: if: $ClearSpeak_Trig = 'ArcTrig' - then: [bookmark: "*[2]/@id", t: "арка", x: "*[1]"] - else: [bookmark: "*[2]/@id", t: "обратное", x: "*[1]"] + then: [bookmark: "*[2]/@id", T: "дуга", x: "*[1]"] + else: [bookmark: "*[2]/@id", T: "обратное", x: "*[1]"] - name: function-squared-or-cubed tag: power @@ -249,8 +249,8 @@ - bookmark: "*[2]/@id" - test: if: "*[2][.='2']" - then: [t: "в квадрате"] - else: [t: "в кубе"] + then: [T: "в квадрате"] + else: [T: "в кубе"] - name: function-power tag: power @@ -265,7 +265,7 @@ if: "*[2][self::m:mn][not(contains(., '.'))]" then: [x: "ToOrdinal(*[2])"] else: [x: "*[2]"] - - t: "степени" + - T: "степени" - pause: short - x: "*[1]" @@ -276,18 +276,18 @@ - "*[2][self::m:power or self::m:power or self::m:mrow[m:power]]" replace: - x: "*[1]" - - t: "возведено в степень" + - T: "возведено в степень" - pause: short - x: "*[2]" - pause: medium - - t: "конец степени" + - T: "конец степени" - name: AfterPower-default tag: power match: "$ClearSpeak_Exponents = 'AfterPower'" replace: - x: "*[1]" - - t: "возведено в степень" + - T: "возведено в степень" - x: "*[2]" - pause: short @@ -297,7 +297,7 @@ replace: - x: "*[1]" - bookmark: "*[2]/@id" - - t: "в квадрате" + - T: "в квадрате" - name: cubed tag: power @@ -305,7 +305,7 @@ replace: - x: "*[1]" - bookmark: "*[2]/@id" - - t: "в кубе" + - T: "в кубе" - name: simple-integer tag: power @@ -315,11 +315,11 @@ - test: if: "*[2][.>0]" then: - - t: "в" + - T: "в" - x: "ToOrdinal(*[2])" - - t: "степени" + - T: "степени" else: - - t: "в степени" + - T: "в степени" - x: "*[2]" - test: if: "$ClearSpeak_Exponents != 'Ordinal' and *[2][.>0]" @@ -333,7 +333,7 @@ - " ]" replace: - x: "*[1]" - - t: "в степени" + - T: "в степени" - x: "*[2]" - name: simple-var @@ -341,7 +341,7 @@ match: "*[2][self::m:mi][string-length(.)=1]" replace: - x: "*[1]" - - t: "в степени" + - T: "в степени" - x: "*[2]" - pronounce: [{text: "-й"}, {ipa: "j"}, {sapi5: "y"}, {eloquence: "Y"}] @@ -360,8 +360,8 @@ - x: "*[1]" - test: if: "*[2]/*[2][.='2']" - then: [t: "во вторую степень"] - else: [t: "в третью степень"] + then: [T: "во вторую степень"] + else: [T: "в третью степень"] - name: nested-negative-squared-or-cubed tag: power @@ -380,8 +380,8 @@ - x: "*[1]" - test: if: "*[2]/*[1]/*[2][.='2']" - then: [t: "во вторую степень"] - else: [t: "в третью степень"] + then: [T: "во вторую степень"] + else: [T: "в третью степень"] - name: nested-var-squared-or-cubed tag: power @@ -402,8 +402,8 @@ - x: "*[1]" - test: if: "*[2]/*[3]/*[2][.='2']" - then: [t: "во вторую степень"] - else: [t: "в третью степень"] + then: [T: "во вторую степень"] + else: [T: "в третью степень"] - name: nested-negative-var-squared-or-cubed tag: power @@ -426,8 +426,8 @@ - x: "*[1]" - test: if: "*[2]/*[3]/*[2][.='2']" - then: [t: "во вторую степень"] - else: [t: "в третью степень"] + then: [T: "во вторую степень"] + else: [T: "в третью степень"] - name: default-exponent-power tag: power @@ -435,18 +435,18 @@ - "*[2][self::m:power or self::m:power or self::m:mrow[m:power]]" replace: - x: "*[1]" - - t: "возведено в степень" + - T: "возведено в степень" - pause: short - x: "*[2]" - pause: short - - t: "конец степени" + - T: "конец степени" - name: default tag: power match: "." replace: - x: "*[1]" - - t: "в степени" + - T: "в степени" - x: "*[2]" - name: ClearSpeak-absolute-value @@ -458,19 +458,19 @@ then: [t: ""] - test: if: "$ClearSpeak_AbsoluteValue = 'Cardinality'" - then: [t: "мощность множества"] - else: [t: "модуль"] - - t: "из" + then: [T: "мощность множества"] + else: [T: "модуль"] + - T: "из" - x: "*[1]" - test: if: "$ClearSpeak_AbsoluteValue = 'AbsEnd'" then: - pause: short - - t: "конец" + - T: "конец" - test: if: "$ClearSpeak_AbsoluteValue = 'Cardinality'" - then: [t: "мощности множества"] - else: [t: "модуля"] + then: [T: "мощности множества"] + else: [T: "модуля"] - pause: short - name: set @@ -479,24 +479,24 @@ replace: - test: - if: "count(*)=0" - then: [t: "пустое множество"] + then: [T: "пустое множество"] - else_if: "count(*)=2" then: - test: if: "$Verbosity!='Terse'" then: [t: ""] - - t: "пустое множество" + - T: "пустое множество" - else_if: "count(*[1]/*)=3 and *[1]/*[2][self::m:mo][.=':' or .='|' or .='∣']" then: - test: if: "$Verbosity!='Terse'" then: [t: ""] - - t: "множество" + - T: "множество" - test: if: $ClearSpeak_Sets != 'woAll' - then: [t: "всех"] + then: [T: "всех"] - x: "*[1]/*[1]" - - t: "таких, что" + - T: "таких, что" - x: "*[1]/*[3]" else: - test: @@ -505,7 +505,7 @@ - test: if: "$Verbosity!='Terse'" then: [t: ""] - - t: "множество" + - T: "множество" - x: "*[1]" - name: ClearSpeak-intervals @@ -515,9 +515,9 @@ tag: [open-interval, open-closed-interval, closed-interval, closed-open-interval] match: "." replace: - - t: "интервал от" + - T: "интервал от" - x: "*[1]" - - t: "до" + - T: "до" - x: "*[2]" - pause: short - test: @@ -525,17 +525,17 @@ then: - test: if: "starts-with(name(.), 'open')" - then: [t: "исключая"] - else: [t: "включая"] + then: [T: "исключая"] + else: [T: "включая"] - x: "*[1]" - test: if: "not($is_intervals_start_infinity or $is_intervals_end_infinity)" then_test: - if: "name(.)='open-interval'" - then: [t: "и"] + then: [T: "и"] - else_if: "name(.)='closed-interval'" - then: [t: "и"] - else: [t: "но"] + then: [T: "и"] + else: [T: "но"] - test: if: not($is_intervals_end_infinity) then: @@ -544,8 +544,8 @@ then: - test: if: "name(.) = 'open-interval' or name(.) = 'closed-open-interval'" - then: [t: "исключая"] - else: [t: "включая"] + then: [T: "исключая"] + else: [T: "включая"] - x: "*[2]" - name: binomial-frac-vector @@ -554,9 +554,9 @@ - "$ClearSpeak_Matrix = 'Combinatorics' and " - "count(*[1]/*)=1 and count(*)=2" replace: - - t: "число сочетаний из" + - T: "число сочетаний из" - x: "*[1]/*[1]/*" - - t: "по" + - T: "по" - x: "*[2]/*[1]/*" - name: ClearSpeak-default @@ -565,12 +565,12 @@ variables: [NextLineIsContinuedRow: "following-sibling::*[1][contains(@data-intent-property, ':continued-row:')]"] replace: - pause: medium - - t: "строка" + - T: "строка" - x: "count(preceding-sibling::*)+1" - test: if: .[self::m:mlabeledtr] then: - - t: "с меткой" + - T: "с меткой" - x: "*[1]/*" - pause: short - pause: medium @@ -591,21 +591,21 @@ if: "$log_is_simple" then_test: - if: "*[1][.='log']" - then: [t: "логарифм"] + then: [T: "логарифм"] - else_if: $ClearSpeak_Log = 'LnAsNaturalLog' - then: [t: "натуральный логарифм"] - else: [t: "натуральный логарифм"] + then: [T: "натуральный логарифм"] + else: [T: "натуральный логарифм"] else: - test: if: "$Verbosity!='Terse' and not(log_is_simple)" - then: [t: ""] + then: [T: ""] - test: - if: "*[1][.='log']" - then: [t: "логарифм"] + then: [T: "логарифм"] - else_if: $ClearSpeak_Log = 'LnAsNaturalLog' - then: [t: "натуральный логарифм"] - else: [t: "натуральный логарифм"] - - t: "от" + then: [T: "натуральный логарифм"] + else: [T: "натуральный логарифм"] + - T: "от" - pause: short - x: "*[3]" @@ -623,20 +623,20 @@ - x: "$LineCount" - test: - if: "($ClearSpeak_MultiLineLabel = 'Auto' and self::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case'" - then: [t: "случай"] + then: [T: "случай"] - else_if: "$ClearSpeak_MultiLineLabel = 'Auto' or $ClearSpeak_MultiLineLabel = 'Line' or $ClearSpeak_MultiLineLabel = 'None'" - then: [t: "строка"] + then: [T: "строка"] - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" - then: [t: "ограничение"] + then: [T: "ограничение"] - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" - then: [t: "уравнение"] + then: [T: "уравнение"] - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" - then: [t: "строка"] + then: [T: "строка"] - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" - then: [t: "шаг"] + then: [T: "шаг"] - test: - if: "$LineCount != 1" - then: [ct: "ов"] + then: [CT: "ов"] - pause: short - x: "*" - pause: long @@ -652,22 +652,22 @@ - pause: medium - test: - if: "($ClearSpeak_MultiLineLabel = 'Auto' and parent::m:piecewise) or $ClearSpeak_MultiLineLabel = 'Case'" - then: [t: "случае"] + then: [T: "случае"] - else_if: "$ClearSpeak_MultiLineLabel = 'Auto' or $ClearSpeak_MultiLineLabel = 'Line'" - then: [t: "строке"] + then: [T: "строке"] - else_if: "$ClearSpeak_MultiLineLabel = 'Constraint'" - then: [t: "ограничении"] + then: [T: "ограничении"] - else_if: "$ClearSpeak_MultiLineLabel = 'Equation'" - then: [t: "уравнении"] + then: [T: "уравнении"] - else_if: "$ClearSpeak_MultiLineLabel = 'Row'" - then: [t: "строке"] + then: [T: "строке"] - else_if: "$ClearSpeak_MultiLineLabel = 'Step'" - then: [t: "шаге"] + then: [T: "шаге"] - x: "count(preceding-sibling::*[not(contains(@data-intent-property, ':continued-row:'))]) + 1" - test: if: "self::m:mlabeledtr" then: - - t: "с меткой" + - T: "с меткой" - x: "*[1]/*" - test: - if: "$ClearSpeak_MultiLineLabel='None'" @@ -688,14 +688,14 @@ test: if: "$ClearSpeak_ImpliedTimes = 'None'" then: [t: ""] - else: [t: "умножить на"] + else: [T: "умножить на"] - name: no-times tag: mo match: - ".='⁢' and $ClearSpeak_ImpliedTimes = 'None'" replace: - - t: "" + - T: "" - name: ClearSpeak-times tag: mo @@ -721,7 +721,7 @@ - " IsBracketed(., '(', ')') or IsBracketed(., '[', ']') or IsBracketed(., '|', '|')]" - " )" replace: - - t: "умножить на" + - T: "умножить на" - name: no-say-parens tag: mrow From 5f6171421cf099af21549f7834d5e2922ad6fe99 Mon Sep 17 00:00:00 2001 From: Danil <81031453+Kostenkov-2021@users.noreply.github.com> Date: Tue, 28 Apr 2026 18:21:48 +0300 Subject: [PATCH 43/43] Update Russian Unicode speech rules Refine and expand Russian entries in unicode-full.yaml: many symbol translations were updated for clarity. --- Rules/Languages/ru/unicode-full.yaml | 6467 +++++++++++++------------- 1 file changed, 3315 insertions(+), 3152 deletions(-) diff --git a/Rules/Languages/ru/unicode-full.yaml b/Rules/Languages/ru/unicode-full.yaml index cd76b611..8023d87f 100644 --- a/Rules/Languages/ru/unicode-full.yaml +++ b/Rules/Languages/ru/unicode-full.yaml @@ -1,2648 +1,3241 @@ --- - - "¢": [t: "центы"] # 0xa2 (en: 'cents', google translation) - - "£": [t: "фунты"] # 0xa3 (en: 'pounds', google translation) - - "¤": [t: "знак валюты"] # 0xa4 (en: 'currency sign', google translation) - - "¥": [t: "иены"] # 0xa5 (en: 'yen', google translation) - - "¦": [t: "вертикальная пунктирная черта"] # 0xa6 (en: 'broken bar', google translation) - - "§": [t: "параграф"] # 0xa7 (en: 'section', google translation) - - "¨": [t: "две точки"] # 0xa8 (en: 'double dot', google translation) - - "©": [t: "авторское право"] # 0xa9 (en: 'copyright', google translation) - - "ª": [t: "женский порядковый индикатор"] # 0xaa (en: 'feminine ordinal indicator', google translation) - - "¬": [t: "отрицание"] # 0xac (en: 'not', google translation) - - "«": [t: "левая двойная угловая кавычка"] # 0xab (en: 'left-pointing double angle quote mark', google translation) - - "¯": # 0xaf + - "¢": [t: "центы"] # 0xa2 + - "£": [t: "фунты"] # 0xa3 + - "¤": [t: "знак валюты"] # 0xa4 + - "¥": [t: "иена"] # 0xa5 + - "¦": [t: "вертикальная черта с разрывом"] # 0xa6 + - "§": [t: "параграф"] # 0xa7 + - "¨": [t: "двойная точка"] # 0xa8 + - "©": [t: "авторское право"] # 0xa9 + - "ª": [t: "указатель женского рода"] # 0xaa + - "¬": [t: "не"] # 0xac + - "«": [t: "левая двойная угловая кавычка"] # 0xab + - "¯": # 0xaf - test: if: "ancestor::m:modified-variable and preceding-sibling::*[1][self::m:mi]" - then: [t: "черта"] # (en: 'bar', google translation) - else: [t: "линия"] # (en: 'line', google translation) - - "²": [t: "в квадрате"] # 0xb2 (en: 'two', google translation) - - "³": [t: "в кубе"] # 0xb3 (en: 'three', google translation) - - "´": [t: "акут"] # 0xb4 (en: 'acute', google translation) - - "µ": [t: "микро"] # 0xb5 (en: 'micro', google translation) - - "¹": [t: "в первой степени"] # 0xb9 (en: 'one', google translation) - - "º": [t: "мужской порядковый индикатор"] # 0xb9 (en: 'masculine ordinal indicator', google translation) + then: [t: "черта"] + else: [t: "линия"] + - "²": [t: "два"] # 0xb2 + - "³": [t: "три"] # 0xb3 + - "´": [t: "акут"] # 0xb4 + - "µ": [t: "микро"] # 0xb5 + - "¹": [t: "один"] # 0xb9 + - "º": [t: "указатель мужского рода"] # 0xb9 - "·": - test: if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolDot = 'Auto'" - then: [t: "умножить"] # (en: 'times', google translation) - else: [t: "точка"] # (en: 'dot') - - "×": # 0xd7 + then: [t: "умножить"] + else: [t: "точка"] + - "×": # 0xd7 - test: if: "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_MultSymbolX = 'Auto'" - then: [t: "умножить"] # (en: 'times', google translation) + then: [t: "умножить"] else_test: if: $ClearSpeak_MultSymbolX = 'By' - then: [t: "на"] # (en: 'by', google translation) - else: [t: "крестик"] # (en: 'cross') - - "÷": [t: "разделить на"] # 0xf7 (en: 'divided by') - - "¡": [t: "перевернутый восклицательный знак"] # 0xa1 (en: 'inverted exclamation mark', google translation) - - "¶": [t: "знак абзаца"] # 0xb6 (en: 'paragraph mark', google translation) - - "¿": [t: "перевёрнутый вопросительный знак"] # 0xbf (en: 'inverted question mark', google translation) - - - "ʰ": [t: "верхний индекс h"] # 0x2b0 (en: 'modifier small h', google translation) - - "ʱ": [t: "верхний индекс h с крючком"] # 0x2b1 (en: 'modifier small h with hook', google translation) - - "ʲ": [t: "верхний индекс j"] # 0x2b2 (en: 'modifier small j', google translation) - - "ʳ": [t: "верхний индекс r"] # 0x2b3 (en: 'modifier small r', google translation) - - "ʴ": [t: "верхний индекс перевёрнутого r"] # 0x2b4 (en: 'modifier small turned r', google translation) - - "ʵ": [t: "верхний индекс перевёрнутого r с крючком"] # 0x2b5 (en: 'modifier small turned r with hook', google translation) - - "ʶ": # 0x2b6 - - t: "верхний индекс перевёрнутой" # (en: 'modifier small inverted', google translation) + then: [t: "на"] + else: [t: "крест"] + - "÷": [t: "разделить на"] # 0xf7 + - "¡": [t: "перевёрнутый восклицательный знак"] # 0xa1 + - "¶": [t: "знак абзаца"] # 0xb6 + - "¿": [t: "перевёрнутый вопросительный знак"] # 0xbf + + - "ʰ": [t: "модификатор маленькая h"] # 0x2b0 + - "ʱ": [t: "модификатор маленькая h с крюком"] # 0x2b1 + - "ʲ": [t: "модификатор маленькая j"] # 0x2b2 + - "ʳ": [t: "модификатор маленькая r"] # 0x2b3 + - "ʴ": [t: "модификатор маленькая перевёрнутая r"] # 0x2b4 + - "ʵ": [t: "модификатор маленькая перевёрнутая r с крюком"] # 0x2b5 + - "ʶ": # 0x2b6 + - t: "модификатор маленькая перевёрнутая" - spell: "translate('R', 'R', 'R')" - - "ʷ": [t: "верхний индекс w"] # 0x2b7 (en: 'modifier small w', google translation) - - "ʸ": [t: "верхний индекс y"] # 0x2b8 (en: 'modifier small y', google translation) - - "ʹ": [t: "штрих"] # 0x2b9 (en: 'modifier prime', google translation) - - "ʺ": [t: "двойной штрих"] # 0x2ba (en: 'modifier double prime', google translation) - - "ʻ": [t: "перевёрнутая запятая"] # 0x2bb (en: 'modifier turned comma', google translation) - - "ʼ": [t: "апостроф"] # 0x2bc (en: 'modifier apostrophe', google translation) - - "ʽ": [t: "перевёрнутый апостроф"] # 0x2bd (en: 'modifier reversed comma', google translation) - - "ʾ": [t: "правое полукольцо"] # 0x2be (en: 'modifier right half ring', google translation) - - "ʿ": [t: "левое полукольцо"] # 0x2bf (en: 'modifier left half ring', google translation) - - "ˀ": [t: "гортанная смычка"] # 0x2c0 (en: 'modifier glottal stop', google translation) - - "ˁ": [t: "перевёрнутая гортанная смычка"] # 0x2c1 (en: 'modifier reversed glottal stop', google translation) - - "˂": [t: "левый наконечник стрелки"] # 0x2c2 (en: 'modifier left arrowhead', google translation) - - "˃": [t: "правый наконечник стрелки"] # 0x2c3 (en: 'modifier right arrowhead', google translation) - - "˄": [t: "верхний наконечник стрелки"] # 0x2c4 (en: 'modifier up arrowhead', google translation) - - "˅": [t: "нижний наконечник стрелки"] # 0x2c5 (en: 'modifier down arrowhead', google translation) - - "ˆ": [t: "циркумфлекс"] # 0x2c6 (en: 'modifier circumflex accent', google translation) - - "ˇ": [t: "гачек"] # 0x2c7 (en: 'check', google translation) - - "ˈ": [t: "вертикальная черта"] # 0x2c8 (en: 'modifier vertical line', google translation) -en: 'right harpoon over left harpoon', google translation) - - "⇍": [t: "слева двойная стрелка с ходом"] # 0x21cd (en: 'leftwards double arrow with stroke', google translation) - - "⇎": [t: "левая правая двойная стрелка с ходом"] # 0x21ce (en: 'left right double arrow with stroke', google translation) - - "⇏": [t: "права двойная стрелка с ходом"] # 0x21cf (en: 'rightwards double arrow with stroke', google translation) - - "⇐": [t: "левая двойная стрелка"] # 0x21d0 (en: 'leftwards double arrow', google translation) - - "⇑": [t: "вверх двойной стрелы"] # 0x21d1 (en: 'upwards double arrow', google translation) - - "⇒": [t: "права двойная стрелка"] # 0x21d2 (en: 'rightwards double arrow', google translation) - - "⇓": [t: "вниз двойной стрелы"] # 0x21d3 (en: 'downwards double arrow', google translation) - - "⇔": [t: "левая правая двойная стрелка"] # 0x21d4 (en: 'left right double arrow', google translation) - - "⇕": [t: "вниз по двойной стрелке"] # 0x21d5 (en: 'up down double arrow', google translation) - - "⇖": [t: "северо -западный двойной стрела"] # 0x21d6 (en: 'north west double arrow', google translation) - - "⇗": [t: "северо -восток двойной стрелы"] # 0x21d7 (en: 'north east double arrow', google translation) - - "⇘": [t: "юго -восточный двойной стрела"] # 0x21d8 (en: 'south east double arrow', google translation) - - "⇙": [t: "юго -западный двойной стрела"] # 0x21d9 (en: 'south west double arrow', google translation) - - "⇚": [t: "левая тройная стрелка"] # 0x21da (en: 'leftwards triple arrow', google translation) - - "⇛": [t: "прямо тройная стрелка"] # 0x21db (en: 'rightwards triple arrow', google translation) - - "⇜": [t: "слева стрелка"] # 0x21dc (en: 'leftwards squiggle arrow', google translation) - - "⇝": [t: "права средь стрелка"] # 0x21dd (en: 'rightwards squiggle arrow', google translation) - - "⇞": [t: "стрелка вверх с двойным ходом"] # 0x21de (en: 'upwards arrow with double stroke', google translation) - - "⇟": [t: "стрелка вниз с двойным ходом"] # 0x21df (en: 'downwards arrow with double stroke', google translation) - - "⇠": [t: "левая пунктирная стрела"] # 0x21e0 (en: 'leftwards dashed arrow', google translation) - - "⇡": [t: "вверх пунктирная стрелка"] # 0x21e1 (en: 'upwards dashed arrow', google translation) - - "⇢": [t: "прямо сразу же пунктирная стрелка"] # 0x21e2 (en: 'rightwards dashed arrow', google translation) - - "⇣": [t: "вниз потерпели стрелку"] # 0x21e3 (en: 'downwards dashed arrow', google translation) - - "⇤": [t: "стрелка слева до бара"] # 0x21e4 (en: 'leftwards arrow to bar', google translation) - - "⇥": [t: "право стрелы в бар"] # 0x21e5 (en: 'rightwards arrow to bar', google translation) - - "⇦": [t: "левая белая стрела"] # 0x21e6 (en: 'leftwards white arrow', google translation) - - "⇧": [t: "вверх белая стрела"] # 0x21e7 (en: 'upwards white arrow', google translation) - - "⇨": [t: "прямо белая стрелка"] # 0x21e8 (en: 'rightwards white arrow', google translation) - - "⇩": [t: "вниз белая стрелка"] # 0x21e9 (en: 'downwards white arrow', google translation) - - "⇪": [t: "вверх белая стрелка из бара"] # 0x21ea (en: 'upwards white arrow from bar', google translation) - - "⇫": [t: "вверх белая стрела на пьедестале"] # 0x21eb (en: 'upwards white arrow on pedestal', google translation) - - "⇬": [t: "вверх белая стрелка на пьедестале с горизонтальной баром"] # 0x21ec (en: 'upwards white arrow on pedestal with horizontal bar', google translation) - - "⇭": [t: "вверх белая стрелка на пьедестале с вертикальным баром"] # 0x21ed (en: 'upwards white arrow on pedestal with vertical bar', google translation) - - "⇮": [t: "вверх белая двойная стрелка"] # 0x21ee (en: 'upwards white double arrow', google translation) - - "⇯": [t: "вверх белая двойная стрелка на пьедестале"] # 0x21ef (en: 'upwards white double arrow on pedestal', google translation) - - "⇰": [t: "прямо белая стрелка от стены"] # 0x21f0 (en: 'rightwards white arrow from wall', google translation) - - "⇱": [t: "стрелка северо -запада в угол"] # 0x21f1 (en: 'north west arrow to corner', google translation) - - "⇲": [t: "юго -восточная стрела в угол"] # 0x21f2 (en: 'south east arrow to corner', google translation) - - "⇳": [t: "вниз по белой стрелке"] # 0x21f3 (en: 'up down white arrow', google translation) - - "⇴": [t: "стрелка правой с маленьким кругом"] # 0x21f4 (en: 'right arrow with small circle', google translation) - - "⇵": [t: "вниз стрелка слева от стрелы вверх"] # 0x21f5 (en: 'downwards arrow leftwards of upwards arrow', google translation) - - "⇶": [t: "три правых стрела"] # 0x21f6 (en: 'three rightwards arrows', google translation) - - "⇷": [t: "стрелка влево с вертикальным ходом"] # 0x21f7 (en: 'leftwards arrow with vertical stroke', google translation) - - "⇸": [t: "стрелка вправо с вертикальным ходом"] # 0x21f8 (en: 'rightwards arrow with vertical stroke', google translation) - - "⇹": [t: "стрелка влево справа с вертикальным ходом"] # 0x21f9 (en: 'left right arrow with vertical stroke', google translation) - - "⇺": [t: "стрелка влево с двойным вертикальным ходом"] # 0x21fa (en: 'leftwards arrow with double vertical stroke', google translation) - - "⇻": [t: "стрелка вправо с двойным вертикальным ходом"] # 0x21fb (en: 'rightwards arrow with double vertical stroke', google translation) - - "⇼": [t: "стрелка влево правой с двойным вертикальным ходом"] # 0x21fc (en: 'left right arrow with double vertical stroke', google translation) - - "⇽": [t: "слева открытая стрелка"] # 0x21fd (en: 'leftwards open headed arrow', google translation) - - "⇾": [t: "вправо открыто голова стрелы"] # 0x21fe (en: 'rightwards open headed arrow', google translation) - - "⇿": [t: "влево справа открытая стрелка"] # 0x21ff (en: 'left right open headed arrow', google translation) - - "∀": [t: "для всех"] # 0x2200 (en: 'for all') - - "∁": # 0x2201 - - test: - if: "$Verbosity!='Terse'" - then: [t: "а"] # (en: 'the', google translation) - - t: "дополнение" # (en: 'complement of') - - "∂": # 0x2202 + - "ʷ": [t: "модификатор маленькая w"] # 0x2b7 + - "ʸ": [t: "модификатор маленькая y"] # 0x2b8 + - "ʹ": [t: "модификатор штрих"] # 0x2b9 + - "ʺ": [t: "модификатор двойной штрих"] # 0x2ba + - "ʻ": [t: "модификатор перевёрнутая запятая"] # 0x2bb + - "ʼ": [t: "модификатор апостроф"] # 0x2bc + - "ʽ": [t: "модификатор обратная запятая"] # 0x2bd + - "ʾ": [t: "модификатор правое полукольцо"] # 0x2be + - "ʿ": [t: "модификатор левое полукольцо"] # 0x2bf + - "ˀ": [t: "модификатор гортанная смычка"] # 0x2c0 + - "ˁ": [t: "модификатор обратная гортанная смычка"] # 0x2c1 + - "˂": [t: "модификатор левый наконечник стрелки"] # 0x2c2 + - "˃": [t: "модификатор правый наконечник стрелки"] # 0x2c3 + - "˄": [t: "модификатор верхний наконечник стрелки"] # 0x2c4 + - "˅": [t: "модификатор нижний наконечник стрелки"] # 0x2c5 + - "ˆ": [t: "модификатор циркумфлекс"] # 0x2c6 + - "ˇ": [t: "гачек"] # 0x2c7 + - "ˈ": [t: "модификатор вертикальная линия"] # 0x2c8 + - "ˉ": [t: "модификатор макрон"] # 0x2c9 + - "ˊ": [t: "модификатор акут"] # 0x2ca + - "ˋ": [t: "модификатор гравис"] # 0x2cb + - "ˌ": [t: "модификатор нижняя вертикальная линия"] # 0x2cc + - "ˍ": [t: "модификатор нижний макрон"] # 0x2cd + - "ˎ": [t: "модификатор нижний гравис"] # 0x2ce + - "ˏ": [t: "модификатор нижний акут"] # 0x2cf + - "ː": [t: "модификатор треугольное двоеточие"] # 0x2d0 + - "ˑ": [t: "модификатор половинное треугольное двоеточие"] # 0x2d1 + - "˒": [t: "модификатор центральное правое полукольцо"] # 0x2d2 + - "˓": [t: "модификатор центральное левое полукольцо"] # 0x2d3 + - "˔": [t: "модификатор верхний таск"] # 0x2d4 + - "˕": [t: "модификатор нижний таск"] # 0x2d5 + - "˖": [t: "модификатор знак плюс"] # 0x2d6 + - "˗": [t: "модификатор знак минус"] # 0x2d7 + - "˘": [t: "бреве"] # 0x2d8 + - "˙": [t: "точка"] # 0x2d9 + - "˚": [t: "кольцо сверху"] # 0x2da + - "˛": [t: "огонек"] # 0x2db + - "˜": [t: "маленькая тильда"] # 0x2dc + - "˝": [t: "двойной акут"] # 0x2dd + - "˞": [t: "модификатор ротический крюк"] # 0x2de + - "˟": [t: "модификатор крестообразный акцент"] # 0x2df + - "ˠ": [t: "модификатор маленькая гамма"] # 0x2e0 + - "ˡ": [t: "модификатор маленькая l"] # 0x2e1 + - "ˢ": [t: "модификатор маленькая s"] # 0x2e2 + - "ˣ": [t: "модификатор маленькая x"] # 0x2e3 + - "ˤ": [t: "модификатор маленькая обратная гортанная смычка"] # 0x2e4 + - "˥": [t: "модификатор сверхвысокий тон"] # 0x2e5 + - "˦": [t: "модификатор высокий тон"] # 0x2e6 + - "˧": [t: "модификатор средний тон"] # 0x2e7 + - "˨": [t: "модификатор низкий тон"] # 0x2e8 + - "˩": [t: "модификатор сверхнизкий тон"] # 0x2e9 + - "˪": [t: "модификатор знак уходящего тона инь"] # 0x2ea + - "˫": [t: "модификатор знак уходящего тона ян"] # 0x2eb + - "ˬ": [t: "модификатор озвончение"] # 0x2ec + - "˭": [t: "модификатор отсутствие придыхания"] # 0x2ed + - "ˮ": [t: "модификатор двойной апостроф"] # 0x2ee + - "˯": [t: "модификатор нижний левый наконечник стрелки"] # 0x2ef + - "˰": [t: "модификатор нижний правый наконечник стрелки"] # 0x2f0 + - "˱": [t: "модификатор нижний левый наконечник стрелки"] # 0x2f1 + - "˲": [t: "модификатор нижний правый наконечник стрелки"] # 0x2f2 + - "˳": [t: "модификатор нижнее кольцо"] # 0x2f3 + - "˴": [t: "модификатор средний гравис"] # 0x2f4 + - "˵": [t: "модификатор средний двойной гравис"] # 0x2f5 + - "˶": [t: "модификатор средний двойной акут"] # 0x2f6 + - "˷": [t: "модификатор нижняя тильда"] # 0x2f7 + - "˸": [t: "модификатор приподнятое двоеточие"] # 0x2f8 + - "˹": [t: "модификатор начало высокого тона"] # 0x2f9 + - "˺": [t: "модификатор конец высокого тона"] # 0x2fa + - "˻": [t: "модификатор начало низкого тона"] # 0x2fb + - "˼": [t: "модификатор конец низкого тона"] # 0x2fc + - "˽": [t: "модификатор полка"] # 0x2fd + - "˾": [t: "модификатор открытая полка"] # 0x2fe + - "˿": [t: "модификатор нижняя левая стрелка"] # 0x2ff + - "̀": [t: "гравис"] # 0x300 + - "́": [t: "акут"] # 0x301 + - "̂": [t: "циркумфлекс"] # 0x302 + - "̃": [t: "тильда"] # 0x303 + - "̄": [t: "макрон"] # 0x304 + - "̅": [t: "надчеркивание"] # 0x305 + - "̆": [t: "бреве"] # 0x306 + - "̇": [t: "точка сверху"] # 0x307 + - "̈": [t: "диерезис"] # 0x308 + - "̉": [t: "крюк сверху"] # 0x309 + - "̊": [t: "кольцо сверху"] # 0x30a + - "̋": [t: "двойной акут"] # 0x30b + - "̌": [t: "гачек"] # 0x30c + - "̍": [t: "вертикальная линия сверху"] # 0x30d + - "̎": [t: "двойная вертикальная линия сверху"] # 0x30e + - "̏": [t: "двойной гравис"] # 0x30f + - "̐": [t: "чандрабинду"] # 0x310 + - "̑": [t: "перевёрнутое бреве"] # 0x311 + - "̒": [t: "перевёрнутая запятая сверху"] # 0x312 + - "̓": [t: "запятая сверху"] # 0x313 + - "̔": [t: "обратная запятая сверху"] # 0x314 + - "̕": [t: "запятая сверху справа"] # 0x315 + - "̖": [t: "гравис снизу"] # 0x316 + - "̗": [t: "акут снизу"] # 0x317 + - "̘": [t: "левый таск снизу"] # 0x318 + - "̙": [t: "правый таск снизу"] # 0x319 + - "̚": [t: "левый угол сверху"] # 0x31a + - "̛": [t: "рожок"] # 0x31b + - "̜": [t: "левое полукольцо снизу"] # 0x31c + - "̝": [t: "верхний таск снизу"] # 0x31d + - "̞": [t: "нижний таск снизу"] # 0x31e + - "̟": [t: "знак плюс снизу"] # 0x31f + - "̠": [t: "знак минус снизу"] # 0x320 + - "̡": [t: "палатализованный крюк снизу"] # 0x321 + - "̢": [t: "ретрофлексный крюк снизу"] # 0x322 + - "̣": [t: "точка снизу"] # 0x323 + - "̤": [t: "диерезис снизу"] # 0x324 + - "̥": [t: "кольцо снизу"] # 0x325 + - "̦": [t: "запятая снизу"] # 0x326 + - "̧": [t: "седиль"] # 0x327 + - "̨": [t: "огонек"] # 0x328 + - "̩": [t: "вертикальная линия снизу"] # 0x329 + - "̪": [t: "мостик снизу"] # 0x32a + - "̫": [t: "перевёрнутая двойная дуга снизу"] # 0x32b + - "̬": [t: "гачек снизу"] # 0x32c + - "̭": [t: "циркумфлекс снизу"] # 0x32d + - "̮": [t: "бреве снизу"] # 0x32e + - "̯": [t: "перевёрнутое бреве снизу"] # 0x32f + - "̰": [t: "тильда снизу"] # 0x330 + - "̱": [t: "макрон снизу"] # 0x331 + - "̲": [t: "нижнее подчёркивание"] # 0x332 + - "̳": [t: "двойное нижнее подчёркивание"] # 0x333 + - "̴": [t: "тильда поверх"] # 0x334 + - "̵": [t: "короткий штрих поверх"] # 0x335 + - "̶": [t: "длинный штрих поверх"] # 0x336 + - "̷": [t: "короткая косая черта поверх"] # 0x337 + - "̸": [t: "длинная косая черта поверх"] # 0x338 + - "̹": [t: "правое полукольцо снизу"] # 0x339 + - "̺": [t: "перевёрнутый мостик снизу"] # 0x33a + - "̻": [t: "квадрат снизу"] # 0x33b + - "̼": [t: "чайка снизу"] # 0x33c + - "̽": [t: "x сверху"] # 0x33d + - "̾": [t: "вертикальная тильда"] # 0x33e + - "̿": [t: "двойное надчёркивание"] # 0x33f + - "̀": [t: "знак тона гравис"] # 0x340 + - "́": [t: "знак тона акут"] # 0x341 + - "͆": [t: "мостик сверху"] # 0x346 + + - "ΪΫϏ": # 0x3aa, 0x3ab, 0x3cf + - test: + if: "$CapitalLetters_Beep" + then: + - audio: + value: "beep.mp4" + replace: [] + - test: + if: "$CapitalLetters_UseWord" + then_test: + if: "$SpeechOverrides_CapitalLetters = ''" + then_test: + if: "$Impairment = 'Blindness'" + then: [t: "заглавная"] + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [spell: "translate('.', 'ΪΫϏ', 'ιυϗ')"] + - t: "с диалитикой" + - "ϊ": [t: "йота с диалитикой"] # 0x3ca + - "ϋ": [t: "ипсилон с диалитикой"] # 0x3cb + - "ό": [t: "омикрон с тоносом"] # 0x3cc + - "ύ": [t: "ипсилон с тоносом"] # 0x3cd + - "ώ": [t: "омега с тоносом"] # 0x3ce + - "ϐ": [t: "бета"] # 0x3d0 + - "ϑ": [t: "тета"] # 0x3d1 + - "ϒ": [t: "ипсилон с крюком"] # 0x3d2 + - "ϓ": [t: "ипсилон с акутом и крюком"] # 0x3d3 + - "ϔ": [t: "ипсилон с диерезисом и крюком"] # 0x3d4 + - "ϕ": [t: "фи"] # 0x3d5 + - "ϖ": [t: "пи"] # 0x3d6 + - "ϗ": [t: "кай"] # 0x3d7 + - "Ϙ": [t: "заглавная архаическая коппа"] # 0x3d8 + - "ϙ": [t: "архаическая коппа"] # 0x3d9 + - "ϵ": [t: "эпсилон"] # 0x3f5 + - "϶": [t: "обратный эпсилон"] # 0x3f6 + - "А-Я": # 0x410 - 0x42f + - test: + if: "$CapitalLetters_Beep" + then: + - audio: + value: "beep.mp4" + replace: [] + - test: + if: "$CapitalLetters_UseWord" + then_test: + if: "$SpeechOverrides_CapitalLetters = ''" + then_test: + if: "$Impairment = 'Blindness'" + then: [t: "заглавная"] + else: [x: "$SpeechOverrides_CapitalLetters"] + - pitch: + value: "$CapitalLetters_Pitch" + replace: [spell: "translate('.', 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', 'абвгдежзийклмнопрстуфхцчшщъыьэюя')"] + - "а": [t: "а"] # 0x430 + - "б": [t: "бэ"] # 0x431 + - "в": [t: "вэ"] # 0x432 + - "г": [t: "гэ"] # 0x433 + - "д": [t: "дэ"] # 0x434 + - "е": [t: "е"] # 0x435 + - "ж": [t: "жэ"] # 0x436 + - "з": [t: "зэ"] # 0x437 + - "и": [t: "и"] # 0x438 + - "й": [t: "и краткое"] # 0x439 + - "к": [t: "ка"] # 0x43a + - "л": [t: "эль"] # 0x43b + - "м": [t: "эм"] # 0x43c + - "н": [t: "эн"] # 0x43d + - "о": [t: "о"] # 0x43e + - "п": [t: "пэ"] # 0x43f + - "р": [t: "эр"] # 0x440 + - "с": [t: "эс"] # 0x441 + - "т": [t: "тэ"] # 0x442 + - "у": [t: "у"] # 0x443 + - "ф": [t: "эф"] # 0x444 + - "х": [t: "ха"] # 0x445 + - "ц": [t: "цэ"] # 0x446 + - "ч": [t: "чэ"] # 0x447 + - "ш": [t: "ша"] # 0x448 + - "щ": [t: "ща"] # 0x449 + - "ъ": [t: "твёрдый знак"] # 0x44a + - "ы": [t: "ы"] # 0x44b + - "ь": [t: "мягкий знак"] # 0x44c + - "э": [t: "э"] # 0x44d + - "ю": [t: "ю"] # 0x44e + - "я": [t: "я"] # 0x44f + - "؆": [t: "арабско-индийский кубический корень"] # 0x606 + - "؇": [t: "арабско-индийский корень четвёртой степени"] # 0x607 + - "؈": [t: "арабский луч"] # 0x608 + - "‐": [t: "дефис"] # 0x2010 + - "‑": [t: "дефис"] # 0x2011 + - "‒": [t: "цифровое тире"] # 0x2012 + - "–": [t: "короткое тире"] # 0x2013 + - "—": [t: "длинное тире"] # 0x2014 + - "―": [t: "горизонтальная черта"] # 0x2015 + - "‖": [t: "двойная вертикальная линия"] # 0x2016 + - "†": [t: "крестик"] # 0x2020 + - "‡": [t: "двойной крестик"] # 0x2021 + + - " - ": [t: " "] # 0x2000 - 0x2007 + + - "•": # 0x2022 + - test: + if: "@data-chem-formula-op" + then: [t: "точка"] + else: [t: "буллит"] + + - "…": # 0x2026 + test: + if: + - "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_Ellipses = 'Auto' or" + # must be ClearSpeak and $ClearSpeak_Ellipses = 'AndSoOn' + # speak '…' as 'and so on...' unless expr starts with '…' + - "../*[1][.='…']" + then: [t: "точка точка точка"] + else_test: # must have $ClearSpeak_Ellipses = 'AndSoOn' + if: "count(following-sibling::*) = 0" + then: [t: "и так далее"] + else: [t: "и так далее вплоть до"] + + - "‰": [t: "промилле"] # 0x2030 + - "‱": [t: "на десять тысяч"] # 0x2031 + - "′": [t: "штрих"] # 0x2032 + - "″": [t: "двойной штрих"] # 0x2033 + - "‴": [t: "тройной штрих"] # 0x2034 + - "‵": [t: "обратный штрих"] # 0x2035 + - "‶": [t: "обратный двойной штрих"] # 0x2036 + - "‷": [t: "обратный тройной штрих"] # 0x2037 + - "‸": [t: "в степени"] # 0x2038 + - "‹": [t: "одинарная левая угловая кавычка"] # 0x2039 + - "›": [t: "одинарная правая угловая кавычка"] # 0x203a + - "‼": # 0x203c + - test: + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" + then: [t: "двойной восклицательный знак"] # 0x203c + else: [t: "двойной факториал"] # 0x203c + - "⁄": # 0x2044 + - test: + if: "ancestor-or-self::*[contains(@data-intent-property, ':literal:')]" + then: [t: "крупная косая черта"] # 0x203c + else: [t: "разделить на"] # 0x203c + - "⁅": [t: "левая квадратная скобка с пером"] # 0x2045 + - "⁆": [t: "правая квадратная скобка с пером"] # 0x2046 + - "※": [t: "знак ссылки"] # 0x203b + - "‿": [t: "нижняя лигатура"] # 0x203F + - "⁀": [t: "лигатура"] # 0x2040 + - "⁎": [t: "нижняя звёздочка"] # 0x204e + - "⁏": [t: "обратная точка с запятой"] # 0x204f + - "⁐": [t: "закрыть вплотную"] # 0x2050 + - "⁑": [t: "две вертикальные звёздочки"] # 0x2051 + - "⁒": [t: "коммерческий минус"] # 0x2052 + - "⁗": [t: "четверной штрих"] # 0x2057 + - "⁠": [t: ""] # 0x2060 + - "⁰": [t: "в нулевой степени"] # 0x2070 + - "ⁱ": [t: "в степени i"] # 0x2071 + - "⁴": [t: "в четвёртой степени"] # 0x2074 + - "⁵": [t: "в пятой степени"] # 0x2075 + - "⁶": [t: "в шестой степени"] # 0x2076 + - "⁷": [t: "в седьмой степени"] # 0x2077 + - "⁸": [t: "в восьмой степени"] # 0x2078 + - "⁹": [t: "в девятой степени"] # 0x2079 + - "⁺": [t: "верхний индекс плюс"] # 0x207a + - "⁻": [t: "верхний индекс минус"] # 0x207b + - "⁼": [t: "верхний индекс знак равенства"] # 0x207c + - "⁽": [t: "верхний индекс левая скобка"] # 0x207d + - "⁾": [t: "верхний индекс правая скобка"] # 0x207e + - "ⁿ": [t: "в энной степени"] # 0x207f + - "₀": [t: "нижний индекс ноль"] # 0x2080 + - "₁": [t: "нижний индекс один"] # 0x2081 + - "₂": [t: "нижний индекс два"] # 0x2082 + - "₃": [t: "нижний индекс три"] # 0x2083 + - "₄": [t: "нижний индекс четыре"] # 0x2084 + - "₅": [t: "нижний индекс пять"] # 0x2085 + - "₆": [t: "нижний индекс шесть"] # 0x2086 + - "₇": [t: "нижний индекс семь"] # 0x2087 + - "₈": [t: "нижний индекс восемь"] # 0x2088 + - "₉": [t: "нижний индекс девять"] # 0x2089 + - "₊": [t: "нижний индекс плюс"] # 0x208a + - "₋": [t: "нижний индекс минус"] # 0x208b + - "₌": [t: "нижний индекс знак равенства"] # 0x208c + - "₍": [t: "нижний индекс левая скобка"] # 0x208d + - "₎": [t: "нижний индекс правая скобка"] # 0x208e + - "ₐ": [t: "нижний индекс A"] # 0x2090 + - "ₑ": [t: "нижний индекс E"] # 0x2091 + - "ₒ": [t: "нижний индекс O"] # 0x2092 + - "ₓ": [t: "нижний индекс X"] # 0x2093 + - "ₕ": [t: "нижний индекс H"] # 0x2095 + - "ₖ": [t: "нижний индекс K"] # 0x2096 + - "ₗ": [t: "нижний индекс L"] # 0x2097 + - "ₘ": [t: "нижний индекс M"] # 0x2098 + - "ₙ": [t: "нижний индекс N"] # 0x2099 + - "ₚ": [t: "нижний индекс P"] # 0x209a + - "ₛ": [t: "нижний индекс S"] # 0x209b + - "ₜ": [t: "нижний индекс T"] # 0x209c + - "₠": [t: "евро для расчётов"] # 0x20a0 + - "₡": [t: "колоны"] # 0x20a1 + - "₢": [t: "крузейро"] # 0x20a2 + - "₣": [t: "франк"] # 0x20a3 + - "₤": [t: "лира"] # 0x20a4 + - "₥": [t: "милль"] # 0x20a5 + - "₦": [t: "найра"] # 0x20a6 + - "₧": [t: "песета"] # 0x20a7 + - "₨": [t: "рупии"] # 0x20a8 + - "₩": [t: "вона"] # 0x20a9 + - "₪": [t: "новый шекель"] # 0x20aa + - "₫": [t: "донг"] # 0x20ab + - "€": [t: "евро"] # 0x20ac + - "₭": [t: "кип"] # 0x20ad + - "₮": [t: "тугрик"] # 0x20ae + - "₯": [t: "драхма"] # 0x20af + - "₰": [t: "немецкий пфенниг"] # 0x20b0 + - "₱": [t: "песо"] # 0x20b1 + - "₲": [t: "гуарани"] # 0x20b2 + - "₳": [t: "аустраль"] # 0x20b3 + - "₴": [t: "гривна"] # 0x20b4 + - "₵": [t: "седи"] # 0x20b5 + - "₶": [t: "ливр турнуа"] # 0x20b6 + - "₷": [t: "спесмило"] # 0x20b7 + - "₸": [t: "тенге"] # 0x20b8 + - "₹": [t: "индийская рупия"] # 0x20b9 + - "₺": [t: "турецкая лира"] # 0x20ba + - "⃐": [t: "левый гарпун сверху"] # 0x20d0 + - "⃑": [t: "правый гарпун сверху"] # 0x20d1 + - "⃒": [t: "длинная вертикальная линия поверх"] # 0x20d2 + - "⃓": [t: "короткая вертикальная линия поверх"] # 0x20d3 + - "⃔": [t: "стрелка против часовой стрелки сверху"] # 0x20d4 + - "⃕": [t: "стрелка по часовой стрелке сверху"] # 0x20d5 + - "⃖": [t: "стрелка влево сверху"] # 0x20d6 + - "⃗": [t: "стрелка вправо сверху"] # 0x20d7 + - "⃘": [t: "кольцо поверх"] # 0x20d8 + - "⃙": [t: "кольцо по часовой стрелке поверх"] # 0x20d9 + - "⃚": [t: "кольцо против часовой стрелки поверх"] # 0x20da + - "⃛": [t: "тройная точка"] # 0x20db + - "⃜": [t: "четверная точка"] # 0x20dc + - "⃝": [t: "обводящий круг"] # 0x20dd + - "⃞": [t: "обводящий квадрат"] # 0x20de + - "⃟": [t: "обводящий ромб"] # 0x20df + - "⃠": [t: "обводящий круг с обратной косой чертой"] # 0x20e0 + - "⃡": [t: "стрелка влево-вправо сверху"] # 0x20e1 + - "⃢": [t: "обводящий экран"] # 0x20e2 + - "⃣": [t: "обводящая клавиша"] # 0x20e3 + - "⃤": [t: "обводящий треугольник остриём вверх"] # 0x20e4 + - "⃥": [t: "обратная косая черта поверх"] # 0x20e5 + - "⃦": [t: "двойной вертикальный штрих"] # 0x20e6 + - "⃧": [t: "символ аннуитета"] # 0x20e7 + - "⃨": [t: "тройная нижняя точка"] # 0x20e8 + - "⃩": [t: "широкий мостик сверху"] # 0x20e9 + - "⃪": [t: "стрелка влево поверх"] # 0x20ea + - "⃫": [t: "длинная двойная косая черта поверх"] # 0x20eb + - "⃬": [t: "правый гарпун с бородкой вниз"] # 0x20ec + - "⃭": [t: "левый гарпун с бородкой вниз"] # 0x20ed + - "⃮": [t: "стрелка влево снизу"] # 0x20ee + - "⃯": [t: "стрелка вправо снизу"] # 0x20ef + - "⃰": [t: "звёздочка сверху"] # 0x20f0 + - "℄": [t: "символ центральной линии"] # 0x2104 + - "℅": [t: "для передачи"] # 0x2105 + - "℆": [t: "каждая"] # 0x2106 + - "ℇ": [t: "постоянная Эйлера"] # 0x2107 + - "℈": [t: "скрупулы"] # 0x2108 + - "℉": [t: "градусы Фаренгейта"] # 0x2109 + - "ℊ": [t: "рукописная g"] # 0x210a + - "ℌℑℨℭ": # 0x210c, 0x2111, 0x2128, 0x212d + - t: "фрактура" + - spell: "translate('.', 'ℌℑℨℭ', 'HIZC')" + + - "ℍℙℾℿ": # 0x210d, 0x2119, 0x213e, 0x213f + - t: "двойной контур" + - spell: "translate('.', 'ℍℙℾℿ', 'HPΓΠ')" + + - "ℎ": [t: "постоянная Планка"] # 0x210e + - "ℏ": [t: "h с чертой"] # 0x210f + + - "ℐℒ℘ℬℰℱℳ": # 0x2110, 0x2112, 0x2118, 0x2130, 0x2131, 0x2133 + - t: "рукописная" + - spell: "translate('.', 'ℐℒ℘ℬℰℱℳ', 'ILPBEFM')" + + - "ℓ": [t: "рукописная l"] # 0x2113 + - "℔": [t: "фунты"] # 0x2114 + - "№": [t: "номер"] # 0x2116 + - "℥": [t: "унции"] # 0x2125 + - "Ω": [t: "омы"] # 0x2126 + - "℧": [t: "сименсы"] # 0x2127 + - "℩": [t: "перевёрнутая йота"] # 0x2129 + - "K": [t: "кельвин"] # 0x212a + - "Å": [t: "ангстремы"] # 0x212b + - "ℯ": [t: "рукописная e"] # 0x212f + + # coalesced some chars that use cap letters + - "Ⅎ℺⅁⅂⅃⅄": # 0x2132, 0x213a, 0x2141, 0x2142, 0x2143, 0x2144 + - test: + - if: "'.' = '℺'" + then: [t: "повёрнутая"] + - else_if: "'.' = 'Ⅎ'" + then: [t: "перевёрнутая"] + - else_if: "'.' = '⅃'" + then: [t: "обратная без засечек"] + else: [t: "перевёрнутая без засечек"] + - spell: "translate('.', 'Ⅎ℺⅁⅂⅃⅄', 'FQGLLY')" + + - "ℴ": [t: "рукописная o"] # 0x2134 + - "ℵ": [t: "алеф"] # 0x2135 + - "ℶ": [t: "бет"] # 0x2136 + - "ℷ": [t: "гимель"] # 0x2137 + - "ℸ": [t: "далет"] # 0x2138 + - "ℼ": [t: "пи с двойным контуром"] # 0x213c + - "ℽ": [t: "гамма с двойным контуром"] # 0x213d + - "⅀": [t: "n-арное суммирование с двойным контуром"] # 0x2140 + - "⅋": [t: "перевёрнутый амперсанд"] # 0x214b + - "⅌": [t: "на"] # 0x214c + - "ⅎ": [t: "перевёрнутая F"] # 0x214e + - "¼": [t: "одна четвёртая"] # 0x00bc + - "½": [t: "одна вторая"] # 0x00bd + - "¾": [t: "три четвёртых"] # 0x00be + - "⅐": [t: "одна седьмая"] # 0x2150 + - "⅑": [t: "одна девятая"] # 0x2151 + - "⅒": [t: "одна десятая"] # 0x2152 + - "⅓": [t: "одна треть"] # 0x2153 + - "⅔": [t: "две трети"] # 0x2154 + - "⅕": [t: "одна пятая"] # 0x2155 + - "⅖": [t: "две пятых"] # 0x2156 + - "⅗": [t: "три пятых"] # 0x2157 + - "⅘": [t: "четыре пятых"] # 0x2158 + - "⅙": [t: "одна шестая"] # 0x2159 + - "⅚": [t: "пять шестых"] # 0x215a + - "⅛": [t: "одна восьмая"] # 0x215b + - "⅜": [t: "три восьмых"] # 0x215c + - "⅝": [t: "пять восьмых"] # 0x215d + - "⅞": [t: "семь восьмых"] # 0x215e + - "⅟": [t: "единица делить на"] # 0x215f + - "Ⅰ": [t: "I"] # 0x2160 + - "Ⅱ": [t: "I I"] # 0x2161 + - "Ⅲ": [t: "I I I"] # 0x2162 + - "Ⅳ": [t: "I V"] # 0x2163 + - "Ⅴ": [t: "V"] # 0x2164 + - "Ⅵ": [t: "V I"] # 0x2165 + - "Ⅶ": [t: "V I I"] # 0x2166 + - "Ⅷ": [t: "V I I I"] # 0x2167 + - "Ⅸ": [t: "I X"] # 0x2168 + - "Ⅹ": [t: "X"] # 0x2169 + - "Ⅺ": [t: "X I"] # 0x216a + - "Ⅻ": [t: "X I I"] # 0x216b + - "Ⅼ": [t: "L"] # 0x216c + - "Ⅽ": [t: "C"] # 0x216d + - "Ⅾ": [t: "D"] # 0x216e + - "Ⅿ": [t: "M"] # 0x216f + - "ⅰ": [t: "I"] # 0x2170 + - "ⅱ": [t: "I I"] # 0x2171 + - "ⅲ": [t: "I I I"] # 0x2172 + - "ⅳ": [t: "I V"] # 0x2173 + - "ⅴ": [t: "V"] # 0x2174 + - "ⅵ": [t: "V I"] # 0x2175 + - "ⅶ": [t: "V I I"] # 0x2176 + - "ⅷ": [t: "V I I I"] # 0x2177 + - "ⅸ": [t: "I X"] # 0x2178 + - "ⅹ": [t: "X"] # 0x2179 + - "ⅺ": [t: "X I"] # 0x217a + - "ⅻ": [t: "X I I"] # 0x217b + - "ⅼ": [t: "L"] # 0x217c + - "ⅽ": [t: "C"] # 0x217d + - "ⅾ": [t: "D"] # 0x217e + - "ⅿ": [t: "M"] # 0x217f + - "↉": [t: "ноль третьих"] # 0x2189 + - "↔": [t: "стрелка влево-вправо"] # 0x2194 + - "↕": [t: "стрелка вверх-вниз"] # 0x2195 + - "↖": [t: "стрелка на северо-запад"] # 0x2196 + - "↗": # 0x2197 + - test: + if: "ancestor::*[2][self::m:limit]" + then: [t: "стремится снизу"] + else: [t: "стрелка на северо-восток"] + + - "↘": # 0x2198 + - test: + if: "ancestor::*[2][self::m:limit]" + then: [t: "стремится сверху"] + else: [t: "стрелка на юго-восток"] + + - "↙": [t: "стрелка на юго-запад"] # 0x2199 + - "↚": [t: "стрелка влево со штрихом"] # 0x219a + - "↛": [t: "стрелка вправо со штрихом"] # 0x219b + - "↜": [t: "волнистая стрелка влево"] # 0x219c + - "↝": [t: "волнистая стрелка вправо"] # 0x219d + - "↞": [t: "стрелка влево с двумя наконечниками"] # 0x219e + - "↟": [t: "стрелка вверх с двумя наконечниками"] # 0x219f + - "↠": [t: "стрелка вправо с двумя наконечниками"] # 0x21a0 + - "↡": [t: "стрелка вниз с двумя наконечниками"] # 0x21a1 + - "↢": [t: "стрелка влево с хвостом"] # 0x21a2 + - "↣": [t: "стрелка вправо с хвостом"] # 0x21a3 + - "↤": [t: "стрелка влево от черты"] # 0x21a4 + - "↥": [t: "стрелка вверх от черты"] # 0x21a5 + - "↦": [t: "стрелка вправо от черты"] # 0x21a6 + - "↧": [t: "стрелка вниз от черты"] # 0x21a7 + - "↨": [t: "стрелка вверх-вниз с основанием"] # 0x21a8 + - "↩": [t: "стрелка влево с крюком"] # 0x21a9 + - "↪": [t: "стрелка вправо с крюком"] # 0x21aa + - "↫": [t: "стрелка влево с петлёй"] # 0x21ab + - "↬": [t: "стрелка вправо с петлёй"] # 0x21ac + - "↭": [t: "волнистая стрелка влево-вправо"] # 0x21ad + - "↮": [t: "стрелка влево-вправо со штрихом"] # 0x21ae + - "↯": [t: "зигзагообразная стрелка вниз"] # 0x21af + - "↰": [t: "стрелка вверх с наконечником влево"] # 0x21b0 + - "↱": [t: "стрелка вверх с наконечником вправо"] # 0x21b1 + - "↲": [t: "стрелка вниз с наконечником влево"] # 0x21b2 + - "↳": [t: "стрелка вниз с наконечником вправо"] # 0x21b3 + - "↴": [t: "стрелка вправо с уголком вниз"] # 0x21b4 + - "↵": [t: "стрелка вниз с уголком влево"] # 0x21b5 + - "↶": [t: "верхняя полуокружность против часовой"] # 0x21b6 + - "↷": [t: "верхняя полуокружность по часовой"] # 0x21b7 + - "↸": [t: "стрелка на северо-запад к длинной черте"] # 0x21b8 + - "↹": [t: "стрелка влево к черте над стрелкой вправо к черте"] # 0x21b9 + - "↺": [t: "круговая стрелка против часовой"] # 0x21ba + - "↻": [t: "круговая стрелка по часовой"] # 0x21bb + - "↼": [t: "левый гарпун вверх"] # 0x21bc + - "↽": [t: "левый гарпун вниз"] # 0x21bd + - "↾": [t: "верхний гарпун вправо"] # 0x21be + - "↿": [t: "верхний гарпун влево"] # 0x21bf + - "⇀": [t: "правый гарпун вверх"] # 0x21c0 + - "⇁": [t: "правый гарпун вниз"] # 0x21c1 + - "⇂": [t: "нижний гарпун вправо"] # 0x21c2 + - "⇃": [t: "нижний гарпун влево"] # 0x21c3 + - "⇄": [t: "стрелка вправо над стрелкой влево"] # 0x21c4 + - "⇅": [t: "стрелка вверх слева от стрелки вниз"] # 0x21c5 + - "⇆": [t: "стрелка влево над стрелкой вправо"] # 0x21c6 + - "⇇": [t: "парные стрелки влево"] # 0x21c7 + - "⇈": [t: "парные стрелки вверх"] # 0x21c8 + - "⇉": [t: "парные стрелки вправо"] # 0x21c9 + - "⇊": [t: "парные стрелки вниз"] # 0x21ca + - "⇋": [t: "левый гарпун над правым гарпуном"] # 0x21cb + - "⇌": [t: "правый гарпун над левым гарпуном"] # 0x21cc + - "⇍": [t: "левая двойная стрелка со штрихом"] # 0x21cd + - "⇎": [t: "двойная стрелка влево-вправо со штрихом"] # 0x21ce + - "⇏": [t: "правая двойная стрелка со штрихом"] # 0x21cf + - "⇐": [t: "левая двойная стрелка"] # 0x21d0 + - "⇑": [t: "верхняя двойная стрелка"] # 0x21d1 + - "⇒": [t: "следует"] # 0x21d2 + - "⇓": [t: "нижняя двойная стрелка"] # 0x21d3 + - "⇔": [t: "тогда и только тогда"] # 0x21d4 + - "⇕": [t: "двойная стрелка вверх-вниз"] # 0x21d5 + - "⇖": [t: "двойная стрелка на северо-запад"] # 0x21d6 + - "⇗": [t: "двойная стрелка на северо-восток"] # 0x21d7 + - "⇘": [t: "двойная стрелка на юго-восток"] # 0x21d8 + - "⇙": [t: "двойная стрелка на юго-запад"] # 0x21d9 + - "⇚": [t: "левая тройная стрелка"] # 0x21da + - "⇛": [t: "правая тройная стрелка"] # 0x21db + - "⇜": [t: "левая волнистая стрелка"] # 0x21dc + - "⇝": [t: "правая волнистая стрелка"] # 0x21dd + - "⇞": [t: "стрелка вверх с двойным штрихом"] # 0x21de + - "⇟": [t: "стрелка вниз с двойным штрихом"] # 0x21df + - "⇠": [t: "левая пунктирная стрелка"] # 0x21e0 + - "⇡": [t: "верхняя пунктирная стрелка"] # 0x21e1 + - "⇢": [t: "правая пунктирная стрелка"] # 0x21e2 + - "⇣": [t: "нижняя пунктирная стрелка"] # 0x21e3 + - "⇤": [t: "стрелка влево к черте"] # 0x21e4 + - "⇥": [t: "стрелка вправо к черте"] # 0x21e5 + - "⇦": [t: "левая белая стрелка"] # 0x21e6 + - "⇧": [t: "верхняя белая стрелка"] # 0x21e7 + - "⇨": [t: "правая белая стрелка"] # 0x21e8 + - "⇩": [t: "нижняя белая стрелка"] # 0x21e9 + - "⇪": [t: "верхняя белая стрелка от черты"] # 0x21ea + - "⇫": [t: "верхняя белая стрелка на пьедестале"] # 0x21eb + - "⇬": [t: "верхняя белая стрелка на пьедестале с горизонтальной чертой"] # 0x21ec + - "⇭": [t: "верхняя белая стрелка на пьедестале с вертикальной чертой"] # 0x21ed + - "⇮": [t: "верхняя белая двойная стрелка"] # 0x21ee + - "⇯": [t: "верхняя белая двойная стрелка на пьедестале"] # 0x21ef + - "⇰": [t: "правая белая стрелка от стены"] # 0x21f0 + - "⇱": [t: "стрелка на северо-запад в угол"] # 0x21f1 + - "⇲": [t: "стрелка на юго-восток в угол"] # 0x21f2 + - "⇳": [t: "белая стрелка вверх-вниз"] # 0x21f3 + - "⇴": [t: "стрелка вправо с маленьким кругом"] # 0x21f4 + - "⇵": [t: "стрелка вниз слева от стрелки вверх"] # 0x21f5 + - "⇶": [t: "три стрелки вправо"] # 0x21f6 + - "⇷": [t: "стрелка влево с вертикальным штрихом"] # 0x21f7 + - "⇸": [t: "стрелка вправо с вертикальным штрихом"] # 0x21f8 + - "⇹": [t: "стрелка влево-вправо с вертикальным штрихом"] # 0x21f9 + - "⇺": [t: "стрелка влево с двойным вертикальным штрихом"] # 0x21fa + - "⇻": [t: "стрелка вправо с двойным вертикальным штрихом"] # 0x21fb + - "⇼": [t: "стрелка влево-вправо с двойным вертикальным штрихом"] # 0x21fc + - "⇽": [t: "левая открытая стрелка"] # 0x21fd + - "⇾": [t: "правая открытая стрелка"] # 0x21fe + - "⇿": [t: "открытая стрелка влево-вправо"] # 0x21ff + - "∀": [t: "для всех"] # 0x2200 + - "∁": # 0x2201 + - test: + if: "$Verbosity!='Terse'" + then: [ot: "the"] + - t: "дополнение" + - "∂": # 0x2202 - test: if: "$Verbosity='Terse'" - then: [t: "частично"] # (en: 'partial', google translation) - else: [t: "частный дифференциал"] # (en: 'partial derivative') - - "∃": [t: "существует"] # 0x2203 (en: 'there exists') - - "∄": [t: "не существует"] # 0x2204 (en: 'there does not exist') - - "∅": [t: "пустое множество"] # 0x2205 (en: 'empty set') - - "∆": # 0x2206 + then: [t: "частная"] + else: [t: "частная производная"] + - "∃": [t: "существует"] # 0x2203 + - "∄": [t: "не существует"] # 0x2204 + - "∅": [t: "пустое множество"] # 0x2205 + - "∆": # 0x2206 - test: if: "following-sibling::*" then_test: if: "$Verbosity!='Terse'" - then: [t: "лахплахан"] # "LahPlahsian" sounds better than "laplacian" in speech engines tested (en: 'the LahPlahsian of', google translation) - else: [t: "инкремент"] # (en: 'LahPlahsian') - else: [t: "инкремент"] # (en: 'LahPlahsian') + then: [t: "лапласиан от"] # "LahPlahsian" sounds better than "laplacian" in speech engines tested + else: [t: "лапласиан"] + else: [t: "лапласиан"] - - "∇": [t: "набла"] # 0x2207 (en: 'nahblah') - - "∉": # 0x2209 + - "∇": [t: "набла"] # 0x2207 + - "∉": # 0x2209 # rule is identical to 0x2208 - test: if: "$SpeechStyle != 'ClearSpeak'" - then: [t: "не элемент"] # (en: 'is not an element of', google translation) + then: [t: "не является элементом"] # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option else_test: - if: "../../self::m:set or ../../../self::m:set" # inside a set + if: "../../self::m:set or ../../../self::m:set" # inside a set then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "не в"] # (en: 'not in', google translation) + then: [t: "не в"] - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "не член"] # (en: 'not member of', google translation) + then: [t: "не является членом"] - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "не элемент"] # (en: 'not element of', google translation) - - else: [t: "не принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'not belonging to') + then: [t: "не является элементом"] + - else: [t: "не принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "не является членом"] # (en: 'is not a member of', google translation) + then: [t: "не является членом"] - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "не элемент"] # (en: 'is not an element of', google translation) + then: [t: "не является элементом"] - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "не в"] # (en: 'is not in', google translation) - - else: [t: "не принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'does not belong to') - - "∊": # 0x220a + then: [t: "не находится в"] + - else: [t: "не принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' + - "∊": # 0x220a - test: if: "$SpeechStyle != 'ClearSpeak'" then: - test: - if: "$Verbosity!='Terse' and not(parent::m:set)" # "the set x is an element of ..." sounds bad - then: [t: "является"] # (en: 'is', google translation) - - t: "малое принадлежит" # (en: 'an element of') + if: "$Verbosity!='Terse' and not(parent::m:set)" # "the set x is an element of ..." sounds bad + then: [t: "является"] + - t: "элементом" # Several options for speaking elements in ClearSpeak -- they split between being inside a set or not and then the option else_test: - if: "../../self::m:set or ../../../self::m:set" # inside a set + if: "../../self::m:set or ../../../self::m:set" # inside a set then_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "в"] # (en: 'in', google translation) + then: [t: "в"] - else_if: $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "член"] # (en: 'member of', google translation) + then: [t: "член"] - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "элемент"] # (en: 'element of', google translation) - - else: [t: "малое принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belonging to') + then: [t: "элемент"] + - else: [t: "принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' else_test: - if: $ClearSpeak_SetMemberSymbol = 'Auto' or $ClearSpeak_SetMemberSymbol = 'Member' - then: [t: "является членом"] # (en: 'is a member of', google translation) + then: [t: "является членом"] - else_if: $ClearSpeak_SetMemberSymbol = 'Element' - then: [t: "элемент"] # (en: 'is an element of', google translation) + then: [t: "является элементом"] - else_if: $ClearSpeak_SetMemberSymbol = 'In' - then: [t: "находится в"] # (en: 'is in', google translation) - - else: [t: "малое принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' (en: 'belongs to') - - "∋": [t: "содержит как член"] # 0x220b (en: 'contains the member') - - "∌": [t: "не содержит как член"] # 0x220c (en: 'does not contain the member') - - "∍": [t: "малое содержит как член"] # 0x220d (en: 'contains the member') - - "∎": [t: "конец доказательства"] # 0x220e (en: 'end of proof') - - "∏": [t: "эн-арное произведение"] # 0x220f (en: 'product') - - "∐": [t: "эн-арный сомножитель"] # 0x2210 (en: 'coproduct') - - "∑": [t: "эн-арная сумма"] # 0x2211 (en: 'sum') - - "−": [t: "минус"] # 0x2212 (en: 'minus') - - "∓": [t: "минус плюс"] # 0x2213 (en: 'minus or plus') - - "∔": [t: "плюс с точкой"] # 0x2214 (en: 'dot plus') - - "∕": [t: "знак деления"] # 0x2215 (en: 'divided by') - - "∖": [t: "разность множеств"] # 0x2216 (en: 'set minus') - - "∗": [t: "оператор звёздочка"] # 0x2217 (en: 'times') - - "∘": [t: "кольцо"] # 0x2218 (en: 'composed with') - - "∙": # 0x2219 + then: [t: "находится в"] + - else: [t: "принадлежит"] # $ClearSpeak_SetMemberSymbol = 'Belongs' + - "∋": [t: "содержит член"] # 0x220b + - "∌": [t: "не содержит член"] # 0x220c + - "∍": [t: "содержит член"] # 0x220d + - "∎": [t: "конец доказательства"] # 0x220e + - "∏": [t: "произведение"] # 0x220f + - "∐": [t: "копроизведение"] # 0x2210 + - "∑": [t: "сумма"] # 0x2211 + - "−": [t: "минус"] # 0x2212 + - "∓": [t: "минус или плюс"] # 0x2213 + - "∔": [t: "точка плюс"] # 0x2214 + - "∕": [t: "разделить на"] # 0x2215 + - "∖": [t: "разность множеств"] # 0x2216 + - "∗": [t: "умножить"] # 0x2217 + - "∘": [t: "композиция с"] # 0x2218 + - "∙": # 0x2219 - test: if: "@data-chem-formula-op" - then: [t: "точка"] # (en: 'dot', google translation) - else: [t: "буллит"] # (en: 'times') + then: [t: "точка"] + else: [t: "умножить"] - - "√": # 0x221a + - "√": # 0x221a - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # (en: 'the', google translation) - - t: "квадратный корень" # (en: 'square root of') - - "∛": # 0x221b + then: [ot: "the"] + - t: "квадратный корень из" + - "∛": # 0x221b - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # (en: 'the', google translation) - - t: "кубический корень" # (en: 'cube root of') - - "∜": # 0x221c + then: [ot: "the"] + - t: "кубический корень из" + - "∜": # 0x221c - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # (en: 'the', google translation) - - t: "корень четвёртой степени" # (en: 'fourth root of') - - "∝": # 0x221d + then: [ot: "the"] + - t: "корень четвёртой степени из" + - "∝": # 0x221d - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "пропорционально" # (en: 'proportional to') - - "∞": [t: "бесконечность"] # 0x221e (en: 'infinity') - - "∟": [t: "правый угол"] # 0x221f (en: 'right angle') - - "∠": [t: "угол"] # 0x2220 (en: 'angle') - - "∡": [t: "измеримый угол"] # 0x2221 (en: 'measured angle') - - "∢": [t: "сферический угол"] # 0x2222 (en: 'spherical angle') - - "∣": [t: "делит"] # 0x2223 (en: 'divides') - - "∤": [t: "не делит"] # 0x2224 (en: 'does not divide') - - "∧": [t: "логическое и"] # 0x2227 (en: 'and') - - "∨": [t: "логическое или"] # 0x2228 (en: 'or') - - "∩": [t: "пересечение"] # 0x2229 (en: 'intersection') - - "∪": [t: "объединение"] # 0x222a (en: 'union') - - "∫": [t: "интеграл"] # 0x222b (en: 'integral') - - "∬": [t: "двойной интеграл"] # 0x222c (en: 'double integral') - - "∭": [t: "тройной интеграл"] # 0x222d (en: 'triple integral') - - "∮": [t: "интеграл по контуру"] # 0x222e (en: 'contour integral') - - "∯": [t: "поверхностный интеграл"] # 0x222f (en: 'surface integral') - - "∰": [t: "интеграл по объёму"] # 0x2230 (en: 'volume integral') - - "∱": [t: "круговой интеграл"] # 0x2231 (en: 'clockwise integral') - - "∲": [t: "круговой интеграл по контуру"] # 0x2232 (en: 'clockwise contour integral') - - "∳": [t: "антикруговой интеграл по контуру"] # 0x2233 (en: 'anticlockwise contour integral') - - "∴": [t: "следовательно"] # 0x2234 (en: 'therefore') - - "∵": [t: "поскольку"] # 0x2235 (en: 'because') - - "∶": # 0x2236 + then: [t: "является"] + - t: "пропорционально" + - "∞": [t: "бесконечность"] # 0x221e + - "∟": [t: "прямой угол"] # 0x221f + - "∠": [t: "угол"] # 0x2220 + - "∡": [t: "измеренный угол"] # 0x2221 + - "∢": [t: "сферический угол"] # 0x2222 + - "∣": [t: "делит"] # 0x2223 + - "∤": [t: "не делит"] # 0x2224 + - "∧": [t: "и"] # 0x2227 + - "∨": [t: "или"] # 0x2228 + - "∩": [t: "пересечение"] # 0x2229 + - "∪": [t: "объединение"] # 0x222a + - "∫": [t: "интеграл"] # 0x222b + - "∬": [t: "двойной интеграл"] # 0x222c + - "∭": [t: "тройной интеграл"] # 0x222d + - "∮": [t: "контурный интеграл"] # 0x222e + - "∯": [t: "поверхностный интеграл"] # 0x222f + - "∰": [t: "объёмный интеграл"] # 0x2230 + - "∱": [t: "интеграл по часовой"] # 0x2231 + - "∲": [t: "контурный интеграл по часовой"] # 0x2232 + - "∳": [t: "контурный интеграл против часовой"] # 0x2233 + - "∴": [t: "следовательно"] # 0x2234 + - "∵": [t: "потому что"] # 0x2235 + - "∶": # 0x2236 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "отношение" # (en: 'to') - - "∷": [t: "пропорция"] # 0x2237 (en: 'as') - - "∸": [t: "минус с точкой"] # 0x2238 (en: 'dot minus') - - "∹": [t: "превышает"] # 0x2239 (en: 'has excess compared to') - - "∺": # 0x223a + then: [t: "является"] + - t: "к" + - "∷": [t: "как"] # 0x2237 + - "∸": [t: "точка минус"] # 0x2238 + - "∹": [t: "имеет избыток по сравнению с"] # 0x2239 + - "∺": # 0x223a - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "геометрическая пропорция" # (en: 'geometrically proportional to') - - "∻": # 0x223b + then: [t: "является"] + - t: "геометрически пропорционально" + - "∻": # 0x223b - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "гомотетия" # (en: 'homothetic to') - - "∼": [t: "тильда"] # 0x223c (en: 'varies with') - - "∽": [t: "обратная тильда"] # 0x223d (en: 'reversed tilde') - - "∾": # 0x223e + then: [t: "является"] + - t: "гомотетично" + - "∼": [t: "изменяется с"] # 0x223c + - "∽": [t: "обратная тильда"] # 0x223d + - "∾": # 0x223e - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "перевёрнутая плавная s" # (en: 'most positive') - - "∿": [t: "синусоидальная волна"] # 0x223f (en: 'sine wave') - - "≀": [t: "скрученное произведение"] # 0x2240 (en: 'wreath product') - - "≁": [t: "не эквивалентно"] # 0x2241 (en: 'not tilde') - - "≂": [t: "тильда с минусом"] # 0x2242 (en: 'minus tilde') - - "≃": # 0x2243 + then: [t: "является"] + - t: "наиболее положительным" + - "∿": [t: "синусоида"] # 0x223f + - "≀": [t: "венок"] # 0x2240 + - "≁": [t: "не тильда"] # 0x2241 + - "≂": [t: "минус тильда"] # 0x2242 + - "≃": # 0x2243 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "асимптотически равно" # (en: 'asymptotically equal to') - - "≄": # 0x2244 + then: [t: "является"] + - t: "асимптотически равно" + - "≄": # 0x2244 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не равно асимптотически" # (en: 'not asymptotically equal to') - - "≅": # 0x2245 + then: [t: "является"] + - t: "не асимптотически равно" + - "≅": # 0x2245 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "конгруэнтность" # (en: 'congruent to') - - "≆": # 0x2246 + then: [t: "является"] + - t: "конгруэнтно" + - "≆": # 0x2246 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "приблизительно но не точно равно" # (en: 'approximately but not actually equal to') - - "≇": # 0x2247 + then: [t: "является"] + - t: "приблизительно, но не фактически равно" + - "≇": # 0x2247 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не равно приблизительно или точно" # (en: 'not congruent to') - - "≈": # 0x2248 + then: [t: "является"] + - t: "не конгруэнтно" + - "≈": # 0x2248 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "приблизительно равно" # (en: 'approximately equal to') - - "≉": # 0x2249 + then: [t: "является"] + - t: "приблизительно равно" + - "≉": # 0x2249 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не приблизительно равно" # (en: 'not approximately equal to') - - "≊": # 0x224a + then: [t: "является"] + - t: "не приблизительно равно" + - "≊": # 0x224a - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "приблизительно равно или равно" # (en: 'approximately equal or equal to') - - "≋": [t: "тройная тильда"] # 0x224b (en: 'triple tilde') - - "≌": [t: "конгруэнтно"] # 0x224c (en: 'are all equal to') - - "≍": # 0x224d + then: [t: "является"] + - t: "приблизительно равно или равно" + - "≋": [t: "тройная тильда"] # 0x224b + - "≌": [t: "все равны"] # 0x224c + - "≍": # 0x224d - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "Эквивалентно" # (en: 'equivalent to') - - "≎": # 0x224e + then: [t: "является"] + - t: "эквивалентно" + - "≎": # 0x224e - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "Геометрически эквивалентно" # (en: 'geometrically equivalent to') - - "≏": # 0x224f + then: [t: "является"] + - t: "геометрически эквивалентно" + - "≏": # 0x224f - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # (en: 'the', google translation) - - t: "разность между" # (en: 'difference between') - - "≐": [t: "стремится к пределу"] # 0x2250 (en: 'approaches the limit') - - "≑": # 0x2251 + then: [ot: "the"] + - t: "разность" + - "≐": [t: "стремится к пределу"] # 0x2250 + - "≑": # 0x2251 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "геометрически равно" # (en: 'geometrically equal to') - - "≒": # 0x2252 + then: [t: "является"] + - t: "геометрически равно" + - "≒": # 0x2252 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "приблизительно равно или есть образ" # (en: 'approximately equal to or the image of') - - "≓": # 0x2253 + then: [t: "является"] + - t: "приблизительно равно или образ" + - "≓": # 0x2253 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is the', google translation) - - t: "есть образ или приблизительно равно" # (en: 'image of or approximately equal to') - - "≔": [t: "равно с двоеточием"] # 0x2254 (en: 'colon equals') - - "≕": [t: "равно с двоеточием"] # 0x2255 (en: 'equals colon') - - "≖": [t: "равно с кругом"] # 0x2256 (en: 'ring in equal to') - - "≗": # 0x2257 + then: [t: "является"] + - t: "образ или приблизительно равно" + - "≔": [t: "двоеточие равно"] # 0x2254 + - "≕": [t: "равно двоеточие"] # 0x2255 + - "≖": [t: "кольцо в равно"] # 0x2256 + - "≗": # 0x2257 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "равно с кругом" # (en: 'approximately equal to') - - "≘": [t: "соответствует"] # 0x2258 (en: 'corresponds to') - - "≙": [t: "охватывает"] # 0x2259 (en: 'estimates') - - "≚": # 0x225a + then: [t: "является"] + - t: "приблизительно равно" + - "≘": [t: "соответствует"] # 0x2258 + - "≙": [t: "оценивает"] # 0x2259 + - "≚": # 0x225a - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "изогонально равно" # (en: 'equiangular to') - - "≛": [t: "равно со звёздочкой"] # 0x225b (en: 'star equals') - - "≜": [t: "равно с дельтой"] # 0x225c (en: 'delta equals') - - "≝": [t: "равно по определению"] # 0x225d (en: 'is defined to be') - - "≞": # 0x225e + then: [t: "является"] + - t: "равноугольно" + - "≛": [t: "звезда равно"] # 0x225b + - "≜": [t: "дельта равно"] # 0x225c + - "≝": [t: "определяется как"] # 0x225d + - "≞": # 0x225e - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "измеряется" # (en: 'measured by') - - "≟": [t: "равно с вопросительным знаком"] # 0x225f (en: 'has an unknown relationship with') - - "≠": # 0x2260 + then: [t: "является"] + - t: "измеряется" + - "≟": [t: "имеет неизвестное отношение с"] # 0x225f + - "≠": # 0x2260 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не равно" # (en: 'not equal to') - - "≡": # 0x2261 + then: [t: "является"] + - t: "не равно" + - "≡": # 0x2261 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "тождественно равно" # (en: 'identical to') - - "≢": # 0x2262 + then: [t: "является"] + - t: "тождественно равно" + - "≢": # 0x2262 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не равно тождественно" # (en: 'not identical to') - - "≣": # 0x2263 + then: [t: "является"] + - t: "не тождественно равно" + - "≣": # 0x2263 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "строго эквивалентно" # (en: 'strictly equivalent to') - - "≦": [t: "меньше над равно"] # 0x2266 (en: 'less than over equal to') - - "≧": [t: "больше над равно"] # 0x2267 (en: 'greater than over equal to') - - "≨": # 0x2268 + then: [t: "является"] + - t: "строго эквивалентно" + - "≦": [t: "меньше или равно"] # 0x2266 (less than over equal to) фактически ≤ + - "≧": [t: "больше или равно"] # 0x2267 (greater than over equal to) фактически ≥ + - "≨": # 0x2268 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "меньше но не равно" # (en: 'less than but not equal to') - - "≩": # 0x2269 + then: [t: "является"] + - t: "меньше, но не равно" + - "≩": # 0x2269 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "больше но не равно" # (en: 'greater than but not equal to') - - "≪": # 0x226a + then: [t: "является"] + - t: "больше, но не равно" + - "≪": # 0x226a - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "много меньше" # (en: 'much less than') - - "≫": # 0x226b + then: [t: "является"] + - t: "много меньше" + - "≫": # 0x226b - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "много больше" # (en: 'much greater than') - - "≬": # 0x226c + then: [t: "является"] + - t: "много больше" + - "≬": # 0x226c - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "между" # (en: 'between') - - "≭": # 0x226d + then: [t: "является"] + - t: "между" + - "≭": # 0x226d - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не эквивалентно" # (en: 'not equivalent to') - - "≮": # 0x226e + then: [t: "является"] + - t: "не эквивалентно" + - "≮": # 0x226e - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не меньше" # (en: 'not less than') - - "≯": # 0x226f + then: [t: "является"] + - t: "не меньше" + - "≯": # 0x226f - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не больше" # (en: 'not greater than') - - "≰": # 0x2270 + then: [t: "является"] + - t: "не больше" + - "≰": # 0x2270 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "ни меньше ни равно" # (en: 'neither less than nor equal to') - - "≱": # 0x2271 + then: [t: "является"] + - t: "ни меньше, ни равно" + - "≱": # 0x2271 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "ни больше ни равно" # (en: 'neither greater than nor equal to') - - "≲": # 0x2272 + then: [t: "является"] + - t: "ни больше, ни равно" + - "≲": # 0x2272 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "меньше или эквивалентно" # (en: 'less than or equivalent to') - - "≳": # 0x2273 + then: [t: "является"] + - t: "меньше или эквивалентно" + - "≳": # 0x2273 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "больше или эквивалентно" # (en: 'greater than or equivalent to') - - "≴": # 0x2274 + then: [t: "является"] + - t: "больше или эквивалентно" + - "≴": # 0x2274 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "ни меньше ни эквивалентно" # (en: 'neither less than nor equivalent to') - - "≵": # 0x2275 + then: [t: "является"] + - t: "ни меньше, ни эквивалентно" + - "≵": # 0x2275 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "ни больше ни эквивалентно" # (en: 'neither greater than nor equivalent to') - - "≶": # 0x2276 + then: [t: "является"] + - t: "ни больше, ни эквивалентно" + - "≶": # 0x2276 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "меньше или больше" # (en: 'less than or greater than') - - "≷": # 0x2277 + then: [t: "является"] + - t: "меньше или больше" + - "≷": # 0x2277 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "больше или меньше" # (en: 'greater than or less than') - - "≸": # 0x2278 + then: [t: "является"] + - t: "больше или меньше" + - "≸": # 0x2278 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "ни меньше ни больше" # (en: 'neither less than nor greater than') - - "≹": # 0x2279 + then: [t: "является"] + - t: "ни меньше, ни больше" + - "≹": # 0x2279 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "ни больше ни меньше" # (en: 'neither greater than nor less than') - - "≺": [t: "предшествует"] # 0x227a (en: 'precedes') - - "≻": [t: "следует за"] # 0x227b (en: 'succeeds') - - "≼": [t: "предшествует или равно"] # 0x227c (en: 'precedes or is equal to') - - "≽": [t: "следует за или равно"] # 0x227d (en: 'succeeds or is equal to') - - "≾": [t: "предшествует или эквивалентно"] # 0x227e (en: 'precedes or is equivalent to') - - "≿": [t: "следует за или эквивалентно"] # 0x227f (en: 'succeeds or is equivalent to') - - "⊀": [t: "не предшествует"] # 0x2280 (en: 'does not precede') - - "⊁": [t: "не следует за"] # 0x2281 (en: 'does not succeed') - - "⊂": # 0x2282 + then: [t: "является"] + - t: "ни больше, ни меньше" + - "≺": [t: "предшествует"] # 0x227a + - "≻": [t: "следует"] # 0x227b + - "≼": [t: "предшествует или равно"] # 0x227c + - "≽": [t: "следует или равно"] # 0x227d + - "≾": [t: "предшествует или эквивалентно"] # 0x227e + - "≿": [t: "следует или эквивалентно"] # 0x227f + - "⊀": [t: "не предшествует"] # 0x2280 + - "⊁": [t: "не следует"] # 0x2281 + - "⊂": # 0x2282 - test: if: "$Verbosity!='Terse'" - then: [t: "является а"] # (en: 'is a', google translation) - - t: "подмножество" # (en: 'subset of') - - "⊃": # 0x2283 + then: [t: "является"] + - t: "подмножеством" + - "⊃": # 0x2283 - test: if: "$Verbosity!='Terse'" - then: [t: "является а"] # (en: 'is a', google translation) - - t: "надмножество" # (en: 'superset of') - - "⊄": # 0x2284 + then: [t: "является"] + - t: "надмножеством" + - "⊄": # 0x2284 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не подмножество" # (en: 'not a subset of') - - "⊅": # 0x2285 + then: [t: "является"] + - t: "не подмножеством" + - "⊅": # 0x2285 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не надмножество" # (en: 'not a superset of') - - "⊆": # 0x2286 + then: [t: "является"] + - t: "не надмножеством" + - "⊆": # 0x2286 - test: if: "$Verbosity!='Terse'" - then: [t: "является а"] # (en: 'is a', google translation) - - t: "подмножество или равно" # (en: 'subset of or equal to') - - "⊇": # 0x2287 + then: [t: "является"] + - t: "подмножеством или равно" + - "⊇": # 0x2287 - test: if: "$Verbosity!='Terse'" - then: [t: "является а"] # (en: 'is a', google translation) - - t: "надмножество или равно" # (en: 'superset of or equal to') - - "⊈": # 0x2288 + then: [t: "является"] + - t: "надмножеством или равно" + - "⊈": # 0x2288 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "ни подмножество ни равно" # (en: 'neither a subset of nor equal to') - - "⊉": # 0x2289 + then: [t: "является"] + - t: "ни подмножеством, ни равно" + - "⊉": # 0x2289 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "ни надмножество ни равно" # (en: 'neither a superset of nor equal to') - - "⊊": [t: "подмножество но не равно"] # 0x228a (en: 'subset of with not equal to') - - "⊋": [t: "надмножество но не равно"] # 0x228b (en: 'superset of with not equal to') - - "⊌": [t: "мультимножество"] # 0x228c (en: 'multiset') - - "⊍": [t: "умножение мультимножеств"] # 0x228d (en: 'multiset multiplication') - - "⊎": [t: "объединение мультимножеств"] # 0x228e (en: 'multiset union') - - "⊏": [t: "образ в квадрате"] # 0x228f (en: 'square image of') - - "⊐": [t: "прообраз в квадрате"] # 0x2290 (en: 'square original of') - - "⊑": [t: "образ в квадрате или равно"] # 0x2291 (en: 'square image of or equal to') - - "⊒": [t: "прообраз в квадрате или равно"] # 0x2292 (en: 'square original of or equal to') - - "⊓": [t: "пересечение в квадрате"] # 0x2293 (en: 'square cap') - - "⊔": [t: "объединение в квадрате"] # 0x2294 (en: 'square cup') - - "⊕": [t: "плюс в круге"] # 0x2295 (en: 'circled plus') - - "⊖": [t: "минус в круге"] # 0x2296 (en: 'circled minus') - - "⊗": [t: "произведение в круге"] # 0x2297 (en: 'circled times') - - "⊘": [t: "дробная черта в круге"] # 0x2298 (en: 'circled slash') - - "⊙": [t: "точка в круге"] # 0x2299 (en: 'circled dot operator') - - "⊚": [t: "кольцо в круге"] # 0x229a (en: 'circled ring') - - "⊛": [t: "звёздочка в круге"] # 0x229b (en: 'circled asterisk') - - "⊜": [t: "равно в круге"] # 0x229c (en: 'circled equals') - - "⊝": [t: "дефис в круге"] # 0x229d (en: 'circled dash') - - "⊞": [t: "плюс в квадрате"] # 0x229e (en: 'squared plus') - - "⊟": [t: "минус в квадрате"] # 0x229f (en: 'squared minus') - - "⊠": [t: "произведение в квадрате"] # 0x22a0 (en: 'squared times') - - "⊡": [t: "точка в квадрате"] # 0x22a1 (en: 'squared dot operator') - - "⊢": [t: "шеврон вправо"] # 0x22a2 (en: 'proves') - - "⊣": [t: "шеврон влево"] # 0x22a3 (en: 'does not yield') - - "⊤": [t: "шеврон вниз"] # 0x22a4 (en: 'top') - - "⊥": # 0x22a5 + then: [t: "является"] + - t: "ни надмножеством, ни равно" + - "⊊": [t: "подмножество, но не равно"] # 0x228a + - "⊋": [t: "надмножество, но не равно"] # 0x228b + - "⊌": [t: "мультимножество"] # 0x228c + - "⊍": [t: "умножение мультимножеств"] # 0x228d + - "⊎": [t: "объединение мультимножеств"] # 0x228e + - "⊏": [t: "квадратный образ"] # 0x228f + - "⊐": [t: "квадратный прообраз"] # 0x2290 + - "⊑": [t: "квадратный образ или равно"] # 0x2291 + - "⊒": [t: "квадратный прообраз или равно"] # 0x2292 + - "⊓": [t: "квадратное пересечение"] # 0x2293 + - "⊔": [t: "квадратное объединение"] # 0x2294 + - "⊕": [t: "плюс в круге"] # 0x2295 + - "⊖": [t: "минус в круге"] # 0x2296 + - "⊗": [t: "умножить в круге"] # 0x2297 + - "⊘": [t: "косая черта в круге"] # 0x2298 + - "⊙": [t: "точка в круге"] # 0x2299 + - "⊚": [t: "кольцо в круге"] # 0x229a + - "⊛": [t: "звёздочка в круге"] # 0x229b + - "⊜": [t: "равно в круге"] # 0x229c + - "⊝": [t: "тире в круге"] # 0x229d + - "⊞": [t: "плюс в квадрате"] # 0x229e + - "⊟": [t: "минус в квадрате"] # 0x229f + - "⊠": [t: "умножить в квадрате"] # 0x22a0 + - "⊡": [t: "точка в квадрате"] # 0x22a1 + - "⊢": [t: "доказывает"] # 0x22a2 + - "⊣": [t: "не выводит"] # 0x22a3 + - "⊤": [t: "истина"] # 0x22a4 + - "⊥": # 0x22a5 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "перпендикулярно" # (en: 'bottom') - - "⊦": [t: "высказывание"] # 0x22a6 (en: 'reduces to') - - "⊧": [t: "модулирует"] # 0x22a7 (en: 'models') - - "⊨": # 0x22a8 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "истина" # (en: 'true') - - "⊩": [t: "влечёт"] # 0x22a9 (en: 'forces') - - "⊪": [t: "тройная вертикальная черта с перекладиной справа"] # 0x22aa (en: 'triple vertical bar right turnstile') - - "⊫": [t: "двойная вертикальная черта с двойной перекладиной справа"] # 0x22ab (en: 'double vertical bar double right turnstile') - - "⊬": [t: "не доказано"] # 0x22ac (en: 'does not prove') - - "⊭": # 0x22ad - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не истина" # (en: 'not true') - - "⊮": [t: "не влечёт"] # 0x22ae (en: 'does not force') - - "⊯": [t: "двойная вертикальная черта с двойной перекладиной справа с отрицанием"] # 0x22af (en: 'negated double vertical bar double right turnstile') - - "⊰": [t: "предшествует относительно"] # 0x22b0 (en: 'precedes under relation') - - "⊱": [t: "следует за относительно"] # 0x22b1 (en: 'succeeds under relation') - - "⊲": # 0x22b2 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "нормальная подгруппа" # (en: 'a normal subgroup of') - - "⊳": [t: "содержит как нормальную подгруппу"] # 0x22b3 (en: 'contains as a normal subgroup') - - "⊴": # 0x22b4 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "нормальная подгруппа или равно" # (en: 'a normal subgroup of or equal to') - - "⊵": [t: "содержит как нормальную подгруппу или равно"] # 0x22b5 (en: 'contains as a normal subgroup or equal to') - - "⊶": # 0x22b6 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "прообраз" # (en: 'the original of') - - "⊷": # 0x22b7 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "образ" # (en: 'an image of') - - "⊸": [t: "многозначное отображение"] # 0x22b8 (en: 'multimap') - - "⊹": [t: "Эрмитово сопряжение матрицы"] # 0x22b9 (en: 'hermitian conjugate matrix') - - "⊺": [t: "включение"] # 0x22ba (en: 'intercalate') - - "⊻": [t: "исключающее или"] # 0x22bb (en: 'xor') - - "⊼": [t: "и с отрицанием"] # 0x22bc (en: 'nand') - - "⊽": [t: "или с отрицанием"] # 0x22bd (en: 'nor') - - "⊾": [t: "правый угол с дугой"] # 0x22be (en: 'right angle with arc') - - "⊿": [t: "треугольник вершиной вправо"] # 0x22bf (en: 'right triangle') - - "⋀": [t: "эн-арное логическое и"] # 0x22c0 (en: 'logical and') - - "⋁": [t: "эн-арное логическое или"] # 0x22c1 (en: 'logical or') - - "⋂": [t: "эн-арное пересечение"] # 0x22c2 (en: 'intersection') - - "⋃": [t: "эн-арное объединение"] # 0x22c3 (en: 'union') - - "⋄": [t: "ромб"] # 0x22c4 (en: 'diamond operator') - - "⋅": # 0x22c5 + then: [t: "является"] + - t: "ложь" + - "⊦": [t: "сводится к"] # 0x22a6 + - "⊧": [t: "моделирует"] # 0x22a7 + - "⊨": # 0x22a8 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "истинно" + - "⊩": [t: "форсирует"] # 0x22a9 + - "⊪": [t: "тройная вертикальная черта с правым турникетом"] # 0x22aa + - "⊫": [t: "двойная вертикальная черта с двойным правым турникетом"] # 0x22ab + - "⊬": [t: "не доказывает"] # 0x22ac + - "⊭": # 0x22ad + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "не истинно" + - "⊮": [t: "не форсирует"] # 0x22ae + - "⊯": [t: "отрицание двойной вертикальной черты с двойным правым турникетом"] # 0x22af + - "⊰": [t: "предшествует по отношению"] # 0x22b0 + - "⊱": [t: "следует по отношению"] # 0x22b1 + - "⊲": # 0x22b2 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "нормальной подгруппой" + - "⊳": [t: "содержит как нормальную подгруппу"] # 0x22b3 + - "⊴": # 0x22b4 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "нормальной подгруппой или равно" + - "⊵": [t: "содержит как нормальную подгруппу или равно"] # 0x22b5 + - "⊶": # 0x22b6 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "прообразом" + - "⊷": # 0x22b7 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "образом" + - "⊸": [t: "мультиотображение"] # 0x22b8 + - "⊹": [t: "эрмитово сопряжённая матрица"] # 0x22b9 + - "⊺": [t: "интеркалат"] # 0x22ba + - "⊻": [t: "исключающее или"] # 0x22bb + - "⊼": [t: "не-и"] # 0x22bc + - "⊽": [t: "не-или"] # 0x22bd + - "⊾": [t: "прямой угол с дугой"] # 0x22be + - "⊿": [t: "прямоугольный треугольник"] # 0x22bf + - "⋀": [t: "логическое и"] # 0x22c0 + - "⋁": [t: "логическое или"] # 0x22c1 + - "⋂": [t: "пересечение"] # 0x22c2 + - "⋃": [t: "объединение"] # 0x22c3 + - "⋄": [t: "ромб"] # 0x22c4 + - "⋅": # 0x22c5 - test: if: "@data-chem-formula-op" - then: [t: "точка"] # (en: 'dot', google translation) - else: [t: "оператор точка"] # (en: 'times') + then: [t: "точка"] + else: [t: "умножить"] - - "⋆": [t: "оператор звёздочка"] # 0x22c6 (en: 'times') - - "⋇": [t: "кратность деления"] # 0x22c7 (en: 'division times') - - "⋈": [t: "бабочка"] # 0x22c8 (en: 'bowtie') - - "⋉": # 0x22c9 + - "⋆": [t: "умножить"] # 0x22c6 + - "⋇": [t: "деление с умножением"] # 0x22c7 + - "⋈": [t: "бантик"] # 0x22c8 + - "⋉": # 0x22c9 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "полупрямое произведение с нормальным фактором слева" # (en: 'the left normal factor semidirect product of') - - "⋊": # 0x22ca + then: [t: "является"] + - t: "левым нормальным полупрямым произведением" + - "⋊": # 0x22ca - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "полупрямое произведение с нормальным фактором справа" # (en: 'the right normal factor semidirect product of') - - "⋋": # 0x22cb + then: [t: "является"] + - t: "правым нормальным полупрямым произведением" + - "⋋": # 0x22cb - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "левое полупрямое произведение" # (en: 'the left semidirect product of') - - "⋌": # 0x22cc + then: [t: "является"] + - t: "левым полупрямым произведением" + - "⋌": # 0x22cc - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "правое полупрямое произведение" # (en: 'the right semidirect product of') - - "⋍": [t: "обратное волнистое равно"] # 0x22cd (en: 'reversed tilde equals') - - "⋎": [t: "волнистое логическое или"] # 0x22ce (en: 'curly logical or') - - "⋏": [t: "волнистое логическое и"] # 0x22cf (en: 'curly logical and') - - "⋐": # 0x22d0 + then: [t: "является"] + - t: "правым полупрямым произведением" + - "⋍": [t: "обратная тильда равно"] # 0x22cd + - "⋎": [t: "фигурное логическое или"] # 0x22ce + - "⋏": [t: "фигурное логическое и"] # 0x22cf + - "⋐": # 0x22d0 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "двойное подмножество" # (en: 'a double subset of') - - "⋑": # 0x22d1 + then: [t: "является"] + - t: "двойным подмножеством" + - "⋑": # 0x22d1 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "двойное надмножество" # (en: 'a double superset of') - - "⋒": # 0x22d2 + then: [t: "является"] + - t: "двойным надмножеством" + - "⋒": # 0x22d2 - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # (en: 'the', google translation) - - t: "двойное пересечение" # (en: 'double intersection of') - - "⋓": # 0x22d3 + then: [ot: "the"] + - t: "двойное пересечение" + - "⋓": # 0x22d3 - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # (en: 'the', google translation) - - t: "двойное объединение" # (en: 'double union of') - - "⋔": # 0x22d4 + then: [ot: "the"] + - t: "двойное объединение" + - "⋔": # 0x22d4 - test: if: "$Verbosity!='Terse'" - then: [t: "а"] # (en: 'the', google translation) - - t: "вилка" # (en: 'proper intersection of') - - "⋕": # 0x22d5 + then: [ot: "the"] + - t: "собственное пересечение" + - "⋕": # 0x22d5 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "равно и параллельно" # (en: 'equal to and parallel to') - - "⋖": [t: "меньше с точкой"] # 0x22d6 (en: 'less than with dot') - - "⋗": [t: "больше с точкой"] # 0x22d7 (en: 'greater than with dot') - - "⋘": # 0x22d8 + then: [t: "является"] + - t: "равно и параллельно" + - "⋖": [t: "меньше с точкой"] # 0x22d6 + - "⋗": [t: "больше с точкой"] # 0x22d7 + - "⋘": # 0x22d8 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "очень много меньше" # (en: 'very much less than') - - "⋙": # 0x22d9 + then: [t: "является"] + - t: "очень много меньше" + - "⋙": # 0x22d9 - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "очень много больше" # (en: 'very much greater than') - - "⋚": # 0x22da + then: [t: "является"] + - t: "очень много больше" + - "⋚": # 0x22da - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "меньше равно или больше" # (en: 'less than equal to or greater than') - - "⋛": # 0x22db + then: [t: "является"] + - t: "меньше, равно или больше" + - "⋛": # 0x22db - test: if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "больше равно или меньше" # (en: 'greater than equal to or less than') - - "⋜": # 0x22dc - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "равно или меньше" # (en: 'equal to or less than') - - "⋝": # 0x22dd - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "равно или больше" # (en: 'equal to or greater than') - - "⋞": # 0x22de - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "равно или предшествует" # (en: 'equal to or precedes') - - "⋟": # 0x22df - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "равно или следует за" # (en: 'equal to or succeeds') - - "⋠": [t: "не предшествует или равно"] # 0x22e0 (en: 'does not precede nor is equal to') - - "⋡": [t: "не следует за или равно"] # 0x22e1 (en: 'does not succeed nor is equal to') - - "⋢": [t: "не образ в квадрате или равно"] # 0x22e2 (en: 'not square image of or equal to') - - "⋣": [t: "не прообраз в квадрате или равно"] # 0x22e3 (en: 'not square original of or equal to') - - "⋤": [t: "образ в квадрате или не равно"] # 0x22e4 (en: 'square image of or not equal to') - - "⋥": [t: "прообраз в квадрате или не равно"] # 0x22e5 (en: 'square original of or not equal to') - - "⋦": # 0x22e6 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "меньше но не эквивалентно" # (en: 'less than but not equivalent to') - - "⋧": # 0x22e7 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "больше но не эквивалентно" # (en: 'greater than but not equivalent to') - - "⋨": [t: "предшествует но не эквивалентно"] # 0x22e8 (en: 'precedes but is not equivalent to') - - "⋩": [t: "следует за но не эквивалентно"] # 0x22e9 (en: 'succeeds but is not equivalent to') - - "⋪": # 0x22ea - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не содержится как нормальная подгруппа" # (en: 'not a normal subgroup of') - - "⋫": [t: "не содержит как нормальную подгруппу"] # 0x22eb (en: 'does not contain as a normal subgroup') - - "⋬": # 0x22ec - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "не содержится как нормальная подгруппа или равно" # (en: 'not a normal subgroup of nor is equal to') - - "⋭": [t: "не содержит как нормальную подгруппу или равно"] # 0x22ed (en: 'does not contain as a normal subgroup nor is equal to') - - "⋮": [t: "вертикальное многоточие"] # 0x22ee (en: 'vertical ellipsis') - - "⋯": [t: "внутристрочное горизонтальное многоточие"] # 0x22ef (en: 'dot dot dot') - - "⋰": [t: "диагональное многоточие сверху вправо"] # 0x22f0 (en: 'upwards diagonal ellipsis') - - "⋱": [t: "диагональное многоточие снизу вправо"] # 0x22f1 (en: 'diagonal ellipsis') - - "⋲": [t: "принадлежит с длинным горизонтальным штрихом"] # 0x22f2 (en: 'element of with long horizontal stroke') - - "⋳": [t: "принадлежит с вертикальной чертой в конце горизонтального штриха"] # 0x22f3 (en: 'element of with vertical bar at end of horizontal stroke') - - "⋴": [t: "малое принадлежит с вертикальной чертой в конце горизонтального штриха"] # 0x22f4 (en: 'element of with vertical bar at end of horizontal stroke') - - "⋵": [t: "принадлежит с точкой сверху"] # 0x22f5 (en: 'element of with dot above') - - "⋶": [t: "принадлежит с чертой сверху"] # 0x22f6 (en: 'element of with overbar') - - "⋷": [t: "малое принадлежит с чертой сверху"] # 0x22f7 (en: 'element of with overbar') - - "⋸": [t: "принадлежит с чертой снизу"] # 0x22f8 (en: 'element of with underbar') - - "⋹": [t: "принадлежит с двумя горизонтальными штрихами"] # 0x22f9 (en: 'element of with two horizontal strokes') - - "⋺": [t: "содержит с длинным горизонтальным штрихом"] # 0x22fa (en: 'contains with long horizontal stroke') - - "⋻": [t: "содержит с вертикальной чертой в конце горизонтального штриха"] # 0x22fb (en: 'contains with vertical bar at end of horizontal stroke') - - "⋼": [t: "малое содержит с вертикальной чертой в конце горизонтального штриха"] # 0x22fc (en: 'contains with vertical bar at end of horizontal stroke') - - "⋽": [t: "содержит с чертой сверху"] # 0x22fd (en: 'contains with overbar') - - "⋾": [t: "малое содержит с чертой сверху"] # 0x22fe (en: 'contains with overbar') - - "⋿": [t: "знак принадлежности z-нотации"] # 0x22ff (en: 'z notation bag membership') - - "⌀": [t: "диаметр"] # 0x2300 (en: 'diameter', google translation) - - "⌁": [t: "электрическая стрелка"] # 0x2301 (en: 'electric arrow', google translation) - - "⌂": [t: "дом"] # 0x2302 (en: 'house', google translation) - - "⌃": [t: "вверх стрел"] # 0x2303 (en: 'up arrowhead', google translation) - - "⌄": [t: "вниз стрелка"] # 0x2304 (en: 'down arrowhead', google translation) - - "⌅": [t: "проектив"] # 0x2305 (en: 'projective', google translation) - - "⌆": [t: "перспектива"] # 0x2306 (en: 'perspective', google translation) - - "⌇": [t: "волнистая линия"] # 0x2307 (en: 'wavy line', google translation) - - "⌈": [t: "левый потолок"] # 0x2308 (en: 'left ceiling', google translation) - - "⌉": [t: "правый потолок"] # 0x2309 (en: 'right ceiling', google translation) - - "⌊": [t: "левый пол"] # 0x230a (en: 'left floor', google translation) - - "⌋": [t: "правый этаж"] # 0x230b (en: 'right floor', google translation) - - "⌌": [t: "нижний правый урожай"] # 0x230c (en: 'bottom right crop', google translation) - - "⌍": [t: "внизу левый урожай"] # 0x230d (en: 'bottom left crop', google translation) - - "⌎": [t: "верхний правый урожай"] # 0x230e (en: 'top right crop', google translation) - - "⌏": [t: "верхний левый урожай"] # 0x230f (en: 'top left crop', google translation) - - "⌐": [t: "перевернулся, а не знак"] # 0x2310 (en: 'reversed not sign', google translation) - - "⌑": [t: "квадратный лозонь"] # 0x2311 (en: 'square lozenge', google translation) - - "⌒": [t: "дуговой"] # 0x2312 (en: 'arc', google translation) - - "⌓": [t: "сегмент"] # 0x2313 (en: 'segment', google translation) - - "⌔": [t: "сектор"] # 0x2314 (en: 'sector', google translation) - - "⌕": [t: "телефон рекордер"] # 0x2315 (en: 'telephone recorder', google translation) - - "⌖": [t: "индикатор положения перекрестие"] # 0x2316 (en: 'position indicator crosshairs', google translation) - - "⌗": [t: "viewdata square"] # 0x2317 (google translation) - - "⌘": [t: "знак интереса"] # 0x2318 (en: 'place of interest sign', google translation) - - "⌙": [t: "не повернул знак"] # 0x2319 (en: 'turned not sign', google translation) - - "⌚": [t: "смотреть"] # 0x231a (en: 'watch', google translation) - - "⌛": [t: "песочные часы"] # 0x231b (en: 'hourglass', google translation) - - "⌜": [t: "верхний левый угол"] # 0x231c (en: 'top left corner', google translation) - - "⌝": [t: "верхний правый угол"] # 0x231d (en: 'top right corner', google translation) - - "⌞": [t: "нижний левый угол"] # 0x231e (en: 'bottom left corner', google translation) - - "⌟": [t: "нижний правый угол"] # 0x231f (en: 'bottom right corner', google translation) - - "⌠": [t: "верхняя половина интеграла"] # 0x2320 (en: 'top half integral', google translation) - - "⌡": [t: "интеграл нижней половины"] # 0x2321 (en: 'bottom half integral', google translation) - - "⌢": [t: "хмуриться"] # 0x2322 (en: 'frown', google translation) - - "⌣": [t: "улыбка"] # 0x2323 (en: 'smile', google translation) - - "⌤": [t: "вверх стрелка между двумя горизонтальными стержнями"] # 0x2324 (en: 'up arrowhead between two horizontal bars', google translation) - - "⌥": [t: "вариант ключа"] # 0x2325 (en: 'option key', google translation) - - "⌦": [t: "стереть вправо"] # 0x2326 (en: 'erase to the right', google translation) - - "⌧": [t: "x в прямоугольной коробке"] # 0x2327 (en: 'x in a rectangle box', google translation) - - "⌨": [t: "клавиатура"] # 0x2328 (en: 'keyboard', google translation) - - "〈": [t: "левый угловой кронштейн"] # 0x2329 (en: 'left pointing angle bracket', google translation) - - "〉": [t: "кронштейн с углом правого направления"] # 0x232a (en: 'right pointing angle bracket', google translation) - - "⌫": [t: "стереть слева"] # 0x232b (en: 'erase to the left', google translation) - - "⌬": [t: "бензол кольцо"] # 0x232c (en: 'benzene ring', google translation) - - "⌭": [t: "цилиндричность"] # 0x232d (en: 'cylindricity', google translation) - - "⌮": [t: "все вокруг профиля"] # 0x232e (en: 'all around profile', google translation) - - "⌯": [t: "симметрия"] # 0x232f (en: 'symmetry', google translation) - - "⌰": [t: "полное выпуск"] # 0x2330 (en: 'total runout', google translation) - - "⌱": [t: "измерение происхождение"] # 0x2331 (en: 'dimension origin', google translation) - - "⌲": [t: "конический конус"] # 0x2332 (en: 'conical taper', google translation) - - "⌳": [t: "склон"] # 0x2333 (en: 'slope', google translation) - - "⌴": [t: "countbore"] # 0x2334 (en: 'counterbore', google translation) - - "⌵": [t: "countersink"] # 0x2335 (google translation) - - "⌶": [t: "apl i beam"] # 0x2336 (google translation) - - "⌽": [t: "apl circle stile"] # 0x233d (google translation) - - "⌿": [t: "apl slash bar"] # 0x233f (google translation) - - "⍰": [t: "неизвестная коробка"] # 0x2370 (en: 'unknown box', google translation) - - "⍼": [t: "правый угол с нисходящим зигзагообразной стрелкой"] # 0x237c (en: 'right angle with downwards zigzag arrow', google translation) - - "⎔": [t: "шестигранник"] # 0x2394 (en: 'hexagon', google translation) - - "⎕": [t: "коробка"] # 0x2395 (en: 'box', google translation) - - "⎶": [t: "нижний квадратный кронштейн над верхним квадратным кронштейном"] # 0x23b6 (en: 'bottom square bracket over top square bracket', google translation) - - "⏜": [t: "лучшая скобка"] # 0x23dc (en: 'top paren', google translation) - - "⏝": [t: "нижняя скобка"] # 0x23dd (en: 'bottom paren', google translation) - - "⏞": [t: "лучшая скоба"] # 0x23de (en: 'top brace', google translation) - - "⏟": [t: "нижняя скоба"] # 0x23df (en: 'bottom brace', google translation) - - "⏠": [t: "лучшая кронштейна для черепахи"] # 0x23e0 (en: 'top tortoise shell bracket', google translation) - - "⏡": [t: "нижняя черепаха скорлупа"] # 0x23e1 (en: 'bottom tortoise shell bracket', google translation) - - "⏢": [t: "белый трапеция"] # 0x23e2 (en: 'white trapezium', google translation) - - "⏣": [t: "бензол прямо с кругом"] # 0x23e3 (en: 'benzene right with circle', google translation) - - "⏤": [t: "прямо"] # 0x23e4 (en: 'straightness', google translation) - - "⏥": [t: "плоскостность"] # 0x23e5 (en: 'flatness', google translation) - - "⏦": # 0x23e6 + then: [t: "является"] + - t: "больше, равно или меньше" + - "⋜": # 0x22dc + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "равно или меньше" + - "⋝": # 0x22dd + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "равно или больше" + - "⋞": # 0x22de + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "равно или предшествует" + - "⋟": # 0x22df + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "равно или следует" + - "⋠": [t: "не предшествует и не равно"] # 0x22e0 + - "⋡": [t: "не следует и не равно"] # 0x22e1 + - "⋢": [t: "не квадратный образ или равно"] # 0x22e2 + - "⋣": [t: "не квадратный прообраз или равно"] # 0x22e3 + - "⋤": [t: "квадратный образ или не равно"] # 0x22e4 + - "⋥": [t: "квадратный прообраз или не равно"] # 0x22e5 + - "⋦": # 0x22e6 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "меньше, но не эквивалентно" + - "⋧": # 0x22e7 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "больше, но не эквивалентно" + - "⋨": [t: "предшествует, но не эквивалентно"] # 0x22e8 + - "⋩": [t: "следует, но не эквивалентно"] # 0x22e9 + - "⋪": # 0x22ea + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "не нормальной подгруппой" + - "⋫": [t: "не содержит как нормальную подгруппу"] # 0x22eb + - "⋬": # 0x22ec + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "не нормальной подгруппой и не равно" + - "⋭": [t: "не содержит как нормальную подгруппу и не равно"] # 0x22ed + - "⋮": [t: "вертикальное многоточие"] # 0x22ee + - "⋯": [t: "точка точка точка"] # 0x22ef + - "⋰": [t: "диагональное многоточие вверх"] # 0x22f0 + - "⋱": [t: "диагональное многоточие"] # 0x22f1 + - "⋲": [t: "элемент с длинным горизонтальным штрихом"] # 0x22f2 + - "⋳": [t: "элемент с вертикальной чертой в конце горизонтального штриха"] # 0x22f3 + - "⋴": [t: "элемент с вертикальной чертой в конце горизонтального штриха"] # 0x22f4 + - "⋵": [t: "элемент с точкой сверху"] # 0x22f5 + - "⋶": [t: "элемент с надчеркиванием"] # 0x22f6 + - "⋷": [t: "элемент с надчеркиванием"] # 0x22f7 + - "⋸": [t: "элемент с подчеркиванием"] # 0x22f8 + - "⋹": [t: "элемент с двумя горизонтальными штрихами"] # 0x22f9 + - "⋺": [t: "содержит с длинным горизонтальным штрихом"] # 0x22fa + - "⋻": [t: "содержит с вертикальной чертой в конце горизонтального штриха"] # 0x22fb + - "⋼": [t: "содержит с вертикальной чертой в конце горизонтального штриха"] # 0x22fc + - "⋽": [t: "содержит с надчеркиванием"] # 0x22fd + - "⋾": [t: "содержит с надчеркиванием"] # 0x22fe + - "⋿": [t: "Z-нотация принадлежность мультимножеству"] # 0x22ff + - "⌀": [t: "диаметр"] # 0x2300 + - "⌁": [t: "электрическая стрелка"] # 0x2301 + - "⌂": [t: "домик"] # 0x2302 + - "⌃": [t: "наконечник стрелки вверх"] # 0x2303 + - "⌄": [t: "наконечник стрелки вниз"] # 0x2304 + - "⌅": [t: "проективный"] # 0x2305 + - "⌆": [t: "перспектива"] # 0x2306 + - "⌇": [t: "волнистая линия"] # 0x2307 + - "⌈": [t: "левый потолок"] # 0x2308 + - "⌉": [t: "правый потолок"] # 0x2309 + - "⌊": [t: "левый пол"] # 0x230a + - "⌋": [t: "правый пол"] # 0x230b + - "⌌": [t: "нижняя правая обрезка"] # 0x230c + - "⌍": [t: "нижняя левая обрезка"] # 0x230d + - "⌎": [t: "верхняя правая обрезка"] # 0x230e + - "⌏": [t: "верхняя левая обрезка"] # 0x230f + - "⌐": [t: "обратный знак отрицания"] # 0x2310 + - "⌑": [t: "квадратная луковица"] # 0x2311 + - "⌒": [t: "дуга"] # 0x2312 + - "⌓": [t: "сегмент"] # 0x2313 + - "⌔": [t: "сектор"] # 0x2314 + - "⌕": [t: "телефонный рекордер"] # 0x2315 + - "⌖": [t: "перекрестие индикатора позиции"] # 0x2316 + - "⌗": [t: "квадрат видеоданных"] # 0x2317 + - "⌘": [t: "знак места интереса"] # 0x2318 + - "⌙": [t: "перевёрнутый знак отрицания"] # 0x2319 + - "⌚": [t: "часы"] # 0x231a + - "⌛": [t: "песочные часы"] # 0x231b + - "⌜": [t: "верхний левый угол"] # 0x231c + - "⌝": [t: "верхний правый угол"] # 0x231d + - "⌞": [t: "нижний левый угол"] # 0x231e + - "⌟": [t: "нижний правый угол"] # 0x231f + - "⌠": [t: "верхняя половина интеграла"] # 0x2320 + - "⌡": [t: "нижняя половина интеграла"] # 0x2321 + - "⌢": [t: "хмурый"] # 0x2322 + - "⌣": [t: "улыбка"] # 0x2323 + - "⌤": [t: "наконечник стрелки вверх между двумя горизонтальными чертами"] # 0x2324 + - "⌥": [t: "клавиша Option"] # 0x2325 + - "⌦": [t: "стереть вправо"] # 0x2326 + - "⌧": [t: "x в прямоугольной рамке"] # 0x2327 + - "⌨": [t: "клавиатура"] # 0x2328 + - "〈": [t: "левая угловая скобка"] # 0x2329 + - "〉": [t: "правая угловая скобка"] # 0x232a + - "⌫": [t: "стереть влево"] # 0x232b + - "⌬": [t: "бензольное кольцо"] # 0x232c + - "⌭": [t: "цилиндричность"] # 0x232d + - "⌮": [t: "профиль по всему контуру"] # 0x232e + - "⌯": [t: "симметрия"] # 0x232f + - "⌰": [t: "полное радиальное биение"] # 0x2330 + - "⌱": [t: "начало размера"] # 0x2331 + - "⌲": [t: "конусность"] # 0x2332 + - "⌳": [t: "уклон"] # 0x2333 + - "⌴": [t: "цековка"] # 0x2334 + - "⌵": [t: "зенковка"] # 0x2335 + - "⌶": [t: "APL двутавр"] # 0x2336 + - "⌽": [t: "APL круговой столбик"] # 0x233d + - "⌿": [t: "APL косая черта"] # 0x233f + - "⍰": [t: "неизвестный ящик"] # 0x2370 + - "⍼": [t: "прямой угол с зигзагообразной стрелкой вниз"] # 0x237c + - "⎔": [t: "шестиугольник"] # 0x2394 + - "⎕": [t: "ящик"] # 0x2395 + - "⎶": [t: "нижняя квадратная скобка над верхней квадратной скобкой"] # 0x23b6 + - "⏜": [t: "верхняя скобка"] # 0x23dc + - "⏝": [t: "нижняя скобка"] # 0x23dd + - "⏞": [t: "верхняя фигурная скобка"] # 0x23de + - "⏟": [t: "нижняя фигурная скобка"] # 0x23df + - "⏠": [t: "верхняя черепашья скобка"] # 0x23e0 + - "⏡": [t: "нижняя черепашья скобка"] # 0x23e1 + - "⏢": [t: "белая трапеция"] # 0x23e2 + - "⏣": [t: "бензол с кругом справа"] # 0x23e3 + - "⏤": [t: "прямолинейность"] # 0x23e4 + - "⏥": [t: "плоскостность"] # 0x23e5 + - "⏦": # 0x23e6 - spell: "ac" - - t: "текущий" # (en: 'current', google translation) - - "⏧": [t: "электрическое пересечение"] # 0x23e7 (en: 'electrical intersection', google translation) - - "①-⑨": # 0x2460 - 0x2469 - - t: "кружит" # (en: 'circled', google translation) + - t: "ток" + - "⏧": [t: "электрическое пересечение"] # 0x23e7 + - "①-⑨": # 0x2460 - 0x2469 + - t: "в круге" - spell: "translate('.', '①②③④⑤⑥⑦⑧⑨', '123456789')" - - "⑩": [t: "кружит десять"] # 0x2469 (en: 'circled ten', google translation) - - "⑪": [t: "обернуто одиннадцать"] # 0x246a (en: 'circled eleven', google translation) - - "⑫": [t: "обернуло двенадцать"] # 0x246b (en: 'circled twelve', google translation) - - "⑬": [t: "кругло тринадцать"] # 0x246c (en: 'circled thirteen', google translation) - - "⑭": [t: "кружит четырнадцать"] # 0x246d (en: 'circled fourteen', google translation) - - "⑮": [t: "кружит пятнадцать"] # 0x246e (en: 'circled fifteen', google translation) - - "⑯": [t: "кружит шестнадцать"] # 0x246f (en: 'circled sixteen', google translation) - - "⑰": [t: "обведено семнадцатью"] # 0x2470 (en: 'circled seventeen', google translation) - - "⑱": [t: "обведенный атин"] # 0x2471 (en: 'circled eighteen', google translation) - - "⑳": [t: "кружит двадцать"] # 0x2473 (en: 'circled twenty', google translation) - - "⑴-⑼": # 0x2474 - 0x247d - - t: "скобки" # (en: 'parenthesized', google translation) + - "⑩": [t: "десять в круге"] # 0x2469 + - "⑪": [t: "одиннадцать в круге"] # 0x246a + - "⑫": [t: "двенадцать в круге"] # 0x246b + - "⑬": [t: "тринадцать в круге"] # 0x246c + - "⑭": [t: "четырнадцать в круге"] # 0x246d + - "⑮": [t: "пятнадцать в круге"] # 0x246e + - "⑯": [t: "шестнадцать в круге"] # 0x246f + - "⑰": [t: "семнадцать в круге"] # 0x2470 + - "⑱": [t: "восемнадцать в круге"] # 0x2471 + - "⑳": [t: "двадцать в круге"] # 0x2473 + - "⑴-⑼": # 0x2474 - 0x247d + - t: "в скобках" - spell: "translate('.', '⑴⑵⑶⑷⑸⑹⑺⑻⑼', '123456789')" - - "⑽": [t: "круженные скобки, которые десять"] # 0x247d (en: 'parenthesized ten', google translation) - - "⑾": [t: "кламок, это одиннадцать"] # 0x247e (en: 'parenthesized eleven', google translation) - - "⑿": [t: "кламок, это двенадцать"] # 0x247f (en: 'parenthesized twelve', google translation) - - "⒀": [t: "скобки, это тринадцать"] # 0x2480 (en: 'parenthesized thirteen', google translation) - - "⒁": [t: "скобки, это четырнадцать"] # 0x2481 (en: 'parenthesized fourteen', google translation) - - "⒂": [t: "скобки, это пятнадцать"] # 0x2482 (en: 'parenthesized fifteen', google translation) - - "⒃": [t: "круженные скобки, это шестнадцать"] # 0x2483 (en: 'parenthesized sixteen', google translation) - - "⒄": [t: "кламок, это семнадцать"] # 0x2484 (en: 'parenthesized seventeen', google translation) - - "⒅": [t: "скобки, это атин"] # 0x2485 (en: 'parenthesized eighteen', google translation) - - "⒆": [t: "кламок, это девятнадцать"] # 0x2486 (en: 'parenthesized nineteen', google translation) - - "⒇": [t: "скобки, это двадцать"] # 0x2487 (en: 'parenthesized twenty', google translation) - - "⒈-⒐": # 0x2488 - 0x2491 + - "⑽": [t: "десять в скобках"] # 0x247d + - "⑾": [t: "одиннадцать в скобках"] # 0x247e + - "⑿": [t: "двенадцать в скобках"] # 0x247f + - "⒀": [t: "тринадцать в скобках"] # 0x2480 + - "⒁": [t: "четырнадцать в скобках"] # 0x2481 + - "⒂": [t: "пятнадцать в скобках"] # 0x2482 + - "⒃": [t: "шестнадцать в скобках"] # 0x2483 + - "⒄": [t: "семнадцать в скобках"] # 0x2484 + - "⒅": [t: "восемнадцать в скобках"] # 0x2485 + - "⒆": [t: "девятнадцать в скобках"] # 0x2486 + - "⒇": [t: "двадцать в скобках"] # 0x2487 + - "⒈-⒐": # 0x2488 - 0x2491 - spell: "translate('.', '⒈⒉⒊⒋⒌⒍⒎⒏⒐', '123456789')" - - t: "с периодом" # (en: 'with period', google translation) - - "⒑": [t: "десять с периодом"] # 0x2491 (en: 'ten with period', google translation) - - "⒒": [t: "одиннадцать с периодом"] # 0x2492 (en: 'eleven with period', google translation) - - "⒓": [t: "двенадцать с периодом"] # 0x2493 (en: 'twelve with period', google translation) - - "⒔": [t: "тринадцать с периодом"] # 0x2494 (en: 'thirteen with period', google translation) - - "⒕": [t: "четырнадцать с периодом"] # 0x2495 (en: 'fourteen with period', google translation) - - "⒖": [t: "пятнадцать с периодом"] # 0x2496 (en: 'fifteen with period', google translation) - - "⒗": [t: "шестнадцать с периодом"] # 0x2497 (en: 'sixteen with period', google translation) - - "⒘": [t: "семнадцать с периодом"] # 0x2498 (en: 'seventeen with period', google translation) - - "⒙": [t: "с периодом"] # 0x2499 (en: 'eighteen with period', google translation) - - "⒚": [t: "девятнадцать с периодом"] # 0x249a (en: 'nineteen with period', google translation) - - "⒛": [t: "двадцать с периодом"] # 0x249b (en: 'twenty with period', google translation) - - "⒜-⒵": # 0x249c - 0x24b5 - - t: "скобки" # (en: 'parenthesized', google translation) + - t: "с точкой" + - "⒑": [t: "десять с точкой"] # 0x2491 + - "⒒": [t: "одиннадцать с точкой"] # 0x2492 + - "⒓": [t: "двенадцать с точкой"] # 0x2493 + - "⒔": [t: "тринадцать с точкой"] # 0x2494 + - "⒕": [t: "четырнадцать с точкой"] # 0x2495 + - "⒖": [t: "пятнадцать с точкой"] # 0x2496 + - "⒗": [t: "шестнадцать с точкой"] # 0x2497 + - "⒘": [t: "семнадцать с точкой"] # 0x2498 + - "⒙": [t: "восемнадцать с точкой"] # 0x2499 + - "⒚": [t: "девятнадцать с точкой"] # 0x249a + - "⒛": [t: "двадцать с точкой"] # 0x249b + - "⒜-⒵": # 0x249c - 0x24b5 + - t: "в скобках" - spell: "translate('.', '⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵', 'abcdefghijklmnopqrstuvwxyz')" - - "Ⓐ-ⓩ": # 0x24b6 - 0x24cf - - t: "кружит" # (en: 'circled', google translation) + - "Ⓐ-ⓩ": # 0x24b6 - 0x24cf + - t: "в круге" - spell: "translate('.', 'ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "ⓐ-ⓩ": # 0x24d0 - 0x24e9 - - t: "кружит" # (en: 'circled', google translation) + - "🅐-🅩": # 0x1f150 - 0x1f169 + - t: "в чёрном круге" + - spell: "translate('.', '🅐🅑🅒🅓🅔🅕🅖🅗🅘🅙🅚🅛🅜🅝🅞🅟🅠🅡🅢🅣🅤🅥🅦🅧🅨🅩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" + + - "ⓐ-ⓩ": # 0x24d0 - 0x24e9 + - t: "в круге" - spell: "translate('.', 'ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ', 'abcdefghijklmnopqrstuvwxyz')" - - "⓪": [t: "обведено ноль"] # 0x24ea (en: 'circled zero', google translation) - - "⓫": [t: "черный кружок одиннадцать"] # 0x24eb (en: 'black circled eleven', google translation) - - "⓬": [t: "черный кружок двенадцать"] # 0x24ec (en: 'black circled twelve', google translation) - - "⓭": [t: "черный кружит тринадцать"] # 0x24ed (en: 'black circled thirteen', google translation) - - "⓮": [t: "черный кружит четырнадцать"] # 0x24ee (en: 'black circled fourteen', google translation) - - "⓯": [t: "черный кружит пятнадцать"] # 0x24ef (en: 'black circled fifteen', google translation) - - "⓰": [t: "черный кружит шестнадцать"] # 0x24f0 (en: 'black circled sixteen', google translation) - - "⓱": [t: "черный кружок семнадцать"] # 0x24f1 (en: 'black circled seventeen', google translation) - - "⓲": [t: "черный кружит атин"] # 0x24f2 (en: 'black circled eighteen', google translation) - - "⓳": [t: "черный кружок девятнадцать"] # 0x24f3 (en: 'black circled nineteen', google translation) - - "⓴": [t: "черный кружит двадцать"] # 0x24f4 (en: 'black circled twenty', google translation) - - "⓵-⓽": # 0x24f5 - 0x24fe - - t: "двойной обведенный" # (en: 'double circled', google translation) + - "⓪": [t: "ноль в круге"] # 0x24ea + - "⓫": [t: "одиннадцать в чёрном круге"] # 0x24eb + - "⓬": [t: "двенадцать в чёрном круге"] # 0x24ec + - "⓭": [t: "тринадцать в чёрном круге"] # 0x24ed + - "⓮": [t: "четырнадцать в чёрном круге"] # 0x24ee + - "⓯": [t: "пятнадцать в чёрном круге"] # 0x24ef + - "⓰": [t: "шестнадцать в чёрном круге"] # 0x24f0 + - "⓱": [t: "семнадцать в чёрном круге"] # 0x24f1 + - "⓲": [t: "восемнадцать в чёрном круге"] # 0x24f2 + - "⓳": [t: "девятнадцать в чёрном круге"] # 0x24f3 + - "⓴": [t: "двадцать в чёрном круге"] # 0x24f4 + - "⓵-⓽": # 0x24f5 - 0x24fe + - t: "в двойном круге" - spell: "translate('.', '⓵⓶⓷⓸⓹⓺⓻⓼⓽', '123456789')" - - "⓾": [t: "двойной обведка десять"] # 0x24fe (en: 'double circled ten', google translation) - - "⓿": [t: "черный кружок ноль"] # 0x24ff (en: 'black circled zero', google translation) - - "■": [t: "черный квадрат"] # 0x25a0 (en: 'black square', google translation) - - "□": [t: "белый квадрат"] # 0x25a1 (en: 'white square', google translation) - - "▢": [t: "белый квадрат с округлыми углами"] # 0x25a2 (en: 'white square with rounded corners', google translation) - - "▣": [t: "белый квадрат, содержащий маленький черный квадрат"] # 0x25a3 (en: 'white square containing small black square', google translation) - - "▤": [t: "квадрат с горизонтальной заполнением"] # 0x25a4 (en: 'square with horizontal fill', google translation) - - "▥": [t: "квадрат с вертикальной заполнением"] # 0x25a5 (en: 'square with vertical fill', google translation) - - "▦": [t: "квадрат с ортогональной заполнением crosshatch"] # 0x25a6 (en: 'square with orthogonal crosshatch fill', google translation) - - "▧": [t: "квадрат с верхним левым к нижним правым заполнением"] # 0x25a7 (en: 'square with upper left to lower right fill', google translation) - - "▨": [t: "квадрат с верхним правом к нижней левой заполнению"] # 0x25a8 (en: 'square with upper right to lower left fill', google translation) - - "▩": [t: "квадрат с диагональной заполнением crosshatch"] # 0x25a9 (en: 'square with diagonal crosshatch fill', google translation) - - "▪": [t: "черный маленький квадрат"] # 0x25aa (en: 'black small square', google translation) - - "▫": [t: "белый маленький квадрат"] # 0x25ab (en: 'white small square', google translation) - - "▬": [t: "черный прямоугольник"] # 0x25ac (en: 'black rectangle', google translation) - - "▭": [t: "белый прямоугольник"] # 0x25ad (en: 'white rectangle', google translation) - - "▮": [t: "черный вертикальный прямоугольник"] # 0x25ae (en: 'black vertical rectangle', google translation) - - "▯": [t: "белый вертикальный прямоугольник"] # 0x25af (en: 'white vertical rectangle', google translation) - - "▰": [t: "черный параллелограмм"] # 0x25b0 (en: 'black parallelogram', google translation) - - "▱": [t: "белый параллелограмм"] # 0x25b1 (en: 'white parallelogram', google translation) - - "▲": [t: "черный, указывающий треугольник"] # 0x25b2 (en: 'black up pointing triangle', google translation) - - "△": [t: "треугольник"] # 0x25b3 (en: 'white up pointing triangle') - - "▴": [t: "черный, указывая маленький треугольник"] # 0x25b4 (en: 'black up pointing small triangle', google translation) - - "▵": [t: "белый, указывая маленький треугольник"] # 0x25b5 (en: 'white up pointing small triangle', google translation) - - "▶": [t: "черный правый треугольник"] # 0x25b6 (en: 'black right pointing triangle', google translation) - - "▷": [t: "белый правый треугольник"] # 0x25b7 (en: 'white right pointing triangle', google translation) - - "▸": [t: "черный правый указывает на маленький треугольник"] # 0x25b8 (en: 'black right pointing small triangle', google translation) - - "▹": [t: "белый правый указывает на маленький треугольник"] # 0x25b9 (en: 'white right pointing small triangle', google translation) - - "►": [t: "черный правый указатель"] # 0x25ba (en: 'black right pointing pointer', google translation) - - "▻": [t: "белый указатель правого указателя"] # 0x25bb (en: 'white right pointing pointer', google translation) - - "▼": [t: "черный вниз по направлению треугольника"] # 0x25bc (en: 'black down pointing triangle', google translation) - - "▽": [t: "белый вниз по направлению треугольника"] # 0x25bd (en: 'white down pointing triangle', google translation) - - "▾": [t: "черный, указывая маленький треугольник"] # 0x25be (en: 'black down pointing small triangle', google translation) - - "▿": [t: "белый вниз, указывая маленький треугольник"] # 0x25bf (en: 'white down pointing small triangle', google translation) - - "◀": [t: "черный левый треугольник"] # 0x25c0 (en: 'black left pointing triangle', google translation) - - "◁": [t: "белый левый треугольник"] # 0x25c1 (en: 'white left pointing triangle', google translation) - - "◂": [t: "черный влево указывает на маленький треугольник"] # 0x25c2 (en: 'black left pointing small triangle', google translation) - - "◃": [t: "белый влево указывает на маленький треугольник"] # 0x25c3 (en: 'white left pointing small triangle', google translation) - - "◄": [t: "черный левый указатель"] # 0x25c4 (en: 'black left pointing pointer', google translation) - - "◅": [t: "белый влево указатель указатель"] # 0x25c5 (en: 'white left pointing pointer', google translation) - - "◆": [t: "черный бриллиант"] # 0x25c6 (en: 'black diamond', google translation) - - "◇": [t: "белый бриллиант"] # 0x25c7 (en: 'white diamond', google translation) - - "◈": [t: "белый бриллиант, содержащий черный маленький бриллиант"] # 0x25c8 (en: 'white diamond containing black small diamond', google translation) - - "◉": [t: "рыбей"] # 0x25c9 (en: 'fisheye', google translation) - - "◊": [t: "лозонг"] # 0x25ca (en: 'lozenge', google translation) - - "○": [t: "белый круг"] # 0x25cb (en: 'white circle', google translation) - - "◌": [t: "пунктирный круг"] # 0x25cc (en: 'dotted circle', google translation) - - "◍": [t: "круг с вертикальной заполнением"] # 0x25cd (en: 'circle with vertical fill', google translation) - - "◎": [t: "bullseye"] # 0x25ce (google translation) - - "●": [t: "черный круг"] # 0x25cf (en: 'black circle', google translation) - - "◐": [t: "круг с левой половиной черной"] # 0x25d0 (en: 'circle with left half black', google translation) - - "◑": [t: "круг с правой половиной черной"] # 0x25d1 (en: 'circle with right half black', google translation) - - "◒": [t: "круг с нижней половиной черной"] # 0x25d2 (en: 'circle with lower half black', google translation) - - "◓": [t: "круг с верхней половиной черной"] # 0x25d3 (en: 'circle with upper half black', google translation) - - "◔": [t: "круг с верхним правым квадрантом черным"] # 0x25d4 (en: 'circle with upper right quadrant black', google translation) - - "◕": [t: "круг со всеми, кроме верхнего левого квадранта черного"] # 0x25d5 (en: 'circle with all but upper left quadrant black', google translation) - - "◖": [t: "оставил половину черного круга"] # 0x25d6 (en: 'left half black circle', google translation) - - "◗": [t: "правый половина черного круга"] # 0x25d7 (en: 'right half black circle', google translation) - - "◘": [t: "обратная пуля"] # 0x25d8 (en: 'inverse bullet', google translation) - - "◙": [t: "обратный белый круг"] # 0x25d9 (en: 'inverse white circle', google translation) - - "◚": [t: "верхняя половина обратного белого круга"] # 0x25da (en: 'upper half inverse white circle', google translation) - - "◛": [t: "нижняя половина обратного белого круга"] # 0x25db (en: 'lower half inverse white circle', google translation) - - "◜": [t: "верхняя левая квадрантная круговая дуга"] # 0x25dc (en: 'upper left quadrant circular arc', google translation) - - "◝": [t: "верхний правый квадрант круглая дуга"] # 0x25dd (en: 'upper right quadrant circular arc', google translation) - - "◞": [t: "круглая дуга нижнего правого квадранта"] # 0x25de (en: 'lower right quadrant circular arc', google translation) - - "◟": [t: "круглая дуга нижнего левого квадранта"] # 0x25df (en: 'lower left quadrant circular arc', google translation) - - "◠": [t: "верхняя половина круга"] # 0x25e0 (en: 'upper half circle', google translation) - - "◡": [t: "нижний половинный круг"] # 0x25e1 (en: 'lower half circle', google translation) - - "◢": [t: "черный треугольник в нижнем правом"] # 0x25e2 (en: 'black lower right triangle', google translation) - - "◣": [t: "черный нижний левый треугольник"] # 0x25e3 (en: 'black lower left triangle', google translation) - - "◤": [t: "черный верхний левый треугольник"] # 0x25e4 (en: 'black upper left triangle', google translation) - - "◥": [t: "черный верхний правый треугольник"] # 0x25e5 (en: 'black upper right triangle', google translation) - - "◦": [t: "композиция"] # 0x25e6 (en: 'composition', google translation) - - "◧": [t: "квадрат с левой половиной черной"] # 0x25e7 (en: 'square with left half black', google translation) - - "◨": [t: "квадрат с правой половиной черной"] # 0x25e8 (en: 'square with right half black', google translation) - - "◩": [t: "квадрат с верхней левой половиной черной"] # 0x25e9 (en: 'square with upper left half black', google translation) - - "◪": [t: "квадрат с правой правой половиной черной"] # 0x25ea (en: 'square with lower right half black', google translation) - - "◫": [t: "белый квадрат с пополам"] # 0x25eb (en: 'white square with bisecting line', google translation) - - "◬": [t: "белый, указывающий треугольник с точкой"] # 0x25ec (en: 'white up pointing triangle with dot', google translation) - - "◭": [t: "укажите треугольник с левой половиной черной"] # 0x25ed (en: 'up pointing triangle with left half black', google translation) - - "◮": [t: "укажите треугольник с правой половиной черной"] # 0x25ee (en: 'up pointing triangle with right half black', google translation) - - "◯": [t: "большой круг"] # 0x25ef (en: 'large circle', google translation) - - "◰": [t: "белый квадрат с верхним левым квадрантом"] # 0x25f0 (en: 'white square with upper left quadrant', google translation) - - "◱": [t: "белый квадрат с нижним левым квадрантом"] # 0x25f1 (en: 'white square with lower left quadrant', google translation) - - "◲": [t: "белый квадрат с нижним правым квадрантом"] # 0x25f2 (en: 'white square with lower right quadrant', google translation) - - "◳": [t: "белый квадрат с верхним правым квадрантом"] # 0x25f3 (en: 'white square with upper right quadrant', google translation) - - "◴": [t: "белый круг с верхним левым квадрантом"] # 0x25f4 (en: 'white circle with upper left quadrant', google translation) - - "◵": [t: "белый круг с нижним левым квадрантом"] # 0x25f5 (en: 'white circle with lower left quadrant', google translation) - - "◶": [t: "белый круг с нижним правым квадрантом"] # 0x25f6 (en: 'white circle with lower right quadrant', google translation) - - "◷": [t: "белый круг с верхним правым квадрантом"] # 0x25f7 (en: 'white circle with upper right quadrant', google translation) - - "◸": [t: "верхний левый треугольник"] # 0x25f8 (en: 'upper left triangle', google translation) - - "◹": [t: "верхний правый треугольник"] # 0x25f9 (en: 'upper right triangle', google translation) - - "◺": [t: "нижний левый треугольник"] # 0x25fa (en: 'lower left triangle', google translation) - - "◻": [t: "квадрат"] # 0x25fb (en: 'white medium square') - - "◼": [t: "черный средний квадрат"] # 0x25fc (en: 'black medium square', google translation) - - "◽": [t: "белый средний маленький квадрат"] # 0x25fd (en: 'white medium small square', google translation) - - "◾": [t: "черный средний маленький квадрат"] # 0x25fe (en: 'black medium small square', google translation) - - "◿": [t: "нижний правый треугольник"] # 0x25ff (en: 'lower right triangle', google translation) - - "★": [t: "черная звезда"] # 0x2605 (en: 'black star', google translation) - - "☆": [t: "белая звезда"] # 0x2606 (en: 'white star', google translation) - - "☉": [t: "солнце"] # 0x2609 (en: 'sun', google translation) - - "☌": [t: "соединение"] # 0x260c (en: 'conjuction', google translation) - - "☒": [t: "балла на баллов с x"] # 0x2612 (en: 'ballot box with x', google translation) - - "☽": [t: "восковая луна"] # 0x263d (en: 'waxing moon', google translation) - - "☾": [t: "убывающая луна"] # 0x263e (en: 'waning moon', google translation) - - "☿": [t: "меркурий"] # 0x263f (en: 'mercury', google translation) - - "♀": [t: "женский"] # 0x2640 (en: 'female', google translation) - - "♁": [t: "земля"] # 0x2641 (en: 'earth', google translation) - - "♂": [t: "мужской"] # 0x2642 (en: 'male', google translation) - - "♃": [t: "юпитер"] # 0x2643 (en: 'jupiter', google translation) - - "♄": [t: "сатурн"] # 0x2644 (en: 'saturn', google translation) - - "♅": [t: "уран"] # 0x2645 (en: 'uranus', google translation) - - "♆": [t: "нептун"] # 0x2646 (en: 'neptune', google translation) - - "♇": [t: "плутон"] # 0x2647 (en: 'pluto', google translation) - - "♈": [t: "овен"] # 0x2648 (en: 'aries', google translation) - - "♉": [t: "телец"] # 0x2649 (en: 'taurus', google translation) - - "♩": [t: "четверть примечания"] # 0x2669 (en: 'quarter note', google translation) - - "♭": [t: "плоский"] # 0x266d (en: 'flat', google translation) - - "♮": [t: "множество натуральных чисел"] # 0x266e (en: 'natural') - - "♯": [t: "острый"] # 0x266f (en: 'sharp', google translation) - - "♠": [t: "черная лопата костюма"] # 0x2660 (en: 'black spade suit', google translation) - - "♡": [t: "белый сердечный костюм"] # 0x2661 (en: 'white heart suit', google translation) - - "♢": [t: "белый бриллиантовый костюм"] # 0x2662 (en: 'white diamond suit', google translation) - - "♣": [t: "черный клубный костюм"] # 0x2663 (en: 'black club suit', google translation) - - "♤": [t: "белая локомочная костюм"] # 0x2664 (en: 'white spade suit', google translation) - - "♥": [t: "черный сердечный костюм"] # 0x2665 (en: 'black heart suit', google translation) - - "♦": [t: "черный бриллиантовый костюм"] # 0x2666 (en: 'black diamond suit', google translation) - - "♧": [t: "белый клубный костюм"] # 0x2667 (en: 'white club suit', google translation) - - "⚀": [t: "умереть лицо 1"] # 0x2680 (en: 'die face 1', google translation) - - "⚁": [t: "умереть лицо 2"] # 0x2681 (en: 'die face 2', google translation) - - "⚂": [t: "умереть лицо 3"] # 0x2682 (en: 'die face 3', google translation) - - "⚃": [t: "умереть лицо 4"] # 0x2683 (en: 'die face 4', google translation) - - "⚄": [t: "умереть лицо 5"] # 0x2684 (en: 'die face 5', google translation) - - "⚅": [t: "умереть лицо 6"] # 0x2685 (en: 'die face 6', google translation) - - "⚆": [t: "белый круг с точкой справа"] # 0x2686 (en: 'white circle with dot right', google translation) - - "⚇": [t: "белый круг с двумя точками"] # 0x2687 (en: 'white circle wiht two dots', google translation) - - "⚈": [t: "черный круг с точкой справа"] # 0x2688 (en: 'black circle with dot right', google translation) - - "⚉": [t: "черный круг с двумя точками"] # 0x2689 (en: 'black circle wiht two dots', google translation) - - "⚪": [t: "средний белый круг"] # 0x26aa (en: 'medium white circle', google translation) - - "⚫": [t: "средний черный круг"] # 0x26ab (en: 'medium black circle', google translation) - - "⚬": [t: "средний маленький белый круг"] # 0x26ac (en: 'medium small white circle', google translation) - - "⚲": [t: "средний"] # 0x26b2 (en: 'neuter', google translation) - - "✓": [t: "отметка"] # 0x2713 (en: 'check mark', google translation) - - "✠": [t: "мальтийский крест"] # 0x2720 (en: 'maltese cross', google translation) - - "✪": [t: "кружная белая звезда"] # 0x272a (en: 'circled white star', google translation) - - "✶": [t: "шесть пинтированной черной звезды"] # 0x2736 (en: 'six pionted black star', google translation) - - "❨": [t: "средние левые скобки - орнамент"] # 0x2768 (en: 'medium left parentheses ornament', google translation) - - "❩": [t: "средние правые скобки - орнамент"] # 0x2769 (en: 'medium right parentheses ornament', google translation) - - "❪": [t: "средняя сплюснутая левая скобка - орнамент"] # 0x276a (en: 'medium flattened left parentheses ornament', google translation) - - "❫": [t: "средняя сплющенная правая скобка орнамент"] # 0x276b (en: 'medium flattened right parentheses ornament', google translation) - - "❬": [t: "средний левый угловой скобки"] # 0x276c (en: 'medium left-pointing angle bracket ornament', google translation) - - "❭": [t: "средний правый угловой кронштейн орнамент"] # 0x276d (en: 'medium right-pointing angle bracket ornament', google translation) - - "❮": [t: "тяжелый левый угловой котировочный орнамент"] # 0x276e (en: 'heavy left-pointing angle quotation mark ornament', google translation) - - "❯": [t: "тяжелый правый угол угла для кавычки"] # 0x276f (en: 'heavy right-pointing angle quotation mark ornament', google translation) - - "❰": [t: "тяжелый левый угловой скобок украшен"] # 0x2770 (en: 'heavy left-pointing angle bracket ornament', google translation) - - "❱": [t: "тяжелый правый угловой скобок украшен"] # 0x2771 (en: 'heavy right-pointing angle bracket ornament', google translation) - - "❲": [t: "светлый левый орнамент с кронштейном черепахи"] # 0x2772 (en: 'light left tortoise shell bracket ornament', google translation) - - "❳": [t: "светлый правый черепаховый скорбящий орнамент"] # 0x2773 (en: 'light right tortoise shell bracket ornament', google translation) - - "❴": [t: "средний левый прудовый орнамент"] # 0x2774 (en: 'medium left brace ornament', google translation) - - "❵": [t: "средний правый скоба орнамент"] # 0x2775 (en: 'medium right brace ornament', google translation) - - "❶": [t: "черный кружит один"] # 0x2776 (en: 'black circled one', google translation) - - "❷": [t: "черный кружит два"] # 0x2777 (en: 'black circled two', google translation) - - "❸": [t: "черный кружит три"] # 0x2778 (en: 'black circled three', google translation) - - "❹": [t: "черный кружит четыре"] # 0x2779 (en: 'black circled four', google translation) - - "❺": [t: "черный кружит пять"] # 0x277a (en: 'black circled five', google translation) - - "❻": [t: "черный кружит шесть"] # 0x277b (en: 'black circled six', google translation) - - "❼": [t: "черный кружит семь"] # 0x277c (en: 'black circled seven', google translation) - - "❽": [t: "черный кружит в"] # 0x277d (en: 'black circled eight', google translation) - - "❾": [t: "черный кружит девять"] # 0x277e (en: 'black circled nine', google translation) - - "❿": [t: "черный кружит десять"] # 0x277f (en: 'black circled ten', google translation) - - "➀": [t: "обведенный без засечка"] # 0x2780 (en: 'circled sans serif one', google translation) - - "➁": [t: "обведено без засечка два"] # 0x2781 (en: 'circled sans serif two', google translation) - - "➂": [t: "обведено без засечка"] # 0x2782 (en: 'circled sans serif three', google translation) - - "➃": [t: "обведено без засечка четверка"] # 0x2783 (en: 'circled sans serif four', google translation) - - "➄": [t: "circled sans serif five"] # 0x2784 (google translation) - - "➅": [t: "обведено без засечка шесть"] # 0x2785 (en: 'circled sans serif six', google translation) - - "➆": [t: "обведено без засечка семь"] # 0x2786 (en: 'circled sans serif seven', google translation) - - "➇": [t: "обведено без засечка в"] # 0x2787 (en: 'circled sans serif eight', google translation) - - "➈": [t: "обведено без засечка девять"] # 0x2788 (en: 'circled sans serif nine', google translation) - - "➉": [t: "обведено без засечка"] # 0x2789 (en: 'circled sans serif ten', google translation) - - "➊": [t: "черный кружок без засечка"] # 0x278a (en: 'black circled sans serif one', google translation) - - "➋": [t: "черный кружок без засечка два"] # 0x278b (en: 'black circled sans serif two', google translation) - - "➌": [t: "черный кружок без засечка три"] # 0x278c (en: 'black circled sans serif three', google translation) - - "➍": [t: "черный кружок без засечка четыре"] # 0x278d (en: 'black circled sans serif four', google translation) - - "➎": [t: "черный кружок без засечка пять"] # 0x278e (en: 'black circled sans serif five', google translation) - - "➏": [t: "черный кружок без засеяния шесть"] # 0x278f (en: 'black circled sans serif six', google translation) - - "➐": [t: "черный кружок без засеяния"] # 0x2790 (en: 'black circled sans serif seven', google translation) - - "➑": [t: "черный кружок без засечка в"] # 0x2791 (en: 'black circled sans serif eight', google translation) - - "➒": [t: "черный кружок без засеяния девять"] # 0x2792 (en: 'black circled sans serif nine', google translation) - - "➓": [t: "черный кружок без засечка"] # 0x2793 (en: 'black circled sans serif ten', google translation) - - "➔": [t: "тяжелая широкая правая стрела"] # 0x2794 (en: 'heavy wide-headed rightwards arrow', google translation) - - "➕": [t: "тяжелый плюс знак"] # 0x2795 (en: 'heavy plus sign', google translation) - - "➖": [t: "тяжелый минус знак"] # 0x2796 (en: 'heavy minus sign', google translation) - - "➗": [t: "знак тяжелой дивизии"] # 0x2797 (en: 'heavy division sign', google translation) - - "➘": [t: "тяжелая юго -восточная стрела"] # 0x2798 (en: 'heavy south east arrow', google translation) - - "➙": [t: "тяжелая справа стрелы"] # 0x2799 (en: 'heavy rightwards arrow', google translation) - - "➚": [t: "тяжелая северо -восточная стрела"] # 0x279a (en: 'heavy north east arrow', google translation) - - "➛": [t: "стрелка вправо"] # 0x279b (en: 'drafting point rightwards arrow', google translation) - - "➜": [t: "тяжелая круглая стрелка вправо"] # 0x279c (en: 'heavy round-tipped rightwards arrow', google translation) - - "➝": [t: "треугольник с головой справа"] # 0x279d (en: 'triangle-headed rightwards arrow', google translation) - - "➞": [t: "тяжелый треугольный голод справа от стрелы"] # 0x279e (en: 'heavy triangle-headed rightwards arrow', google translation) - - "➟": [t: "убитый треугольник с головой справа"] # 0x279f (en: 'dashed triangle-headed rightwards arrow', google translation) - - "➠": [t: "тяжелый пунктирный треугольник с головой справа"] # 0x27a0 (en: 'heavy dashed triangle-headed rightwards arrow', google translation) - - "➡": [t: "черная справа стрелы"] # 0x27a1 (en: 'black rightwards arrow', google translation) - - "➢": [t: "три d вершина освещены стрелкой вправо"] # 0x27a2 (en: 'three d top lighted rightwards arrow', google translation) - - "➣": [t: "три д дно освещены вправо стрел"] # 0x27a3 (en: 'three d bottom lighted rightwards arrow', google translation) - - "➤": [t: "черный вправо стрел"] # 0x27a4 (en: 'black rightwards arrowhead', google translation) - - "➥": [t: "тяжелая черная изогнутая вниз и вправо стрел"] # 0x27a5 (en: 'heavy black curved downwards and rightwards arrow', google translation) - - "➦": [t: "тяжелая черная изогнутая стрелка вверх и вправо"] # 0x27a6 (en: 'heavy black curved upwards and rightwards arrow', google translation) - - "➧": [t: "приседание черное вправо стрел"] # 0x27a7 (en: 'squat black rightwards arrow', google translation) - - "➨": [t: "тяжелая вогнутая черная черная стрелка"] # 0x27a8 (en: 'heavy concave-pointed black rightwards arrow', google translation) - - "➩": [t: "стрелка вправо с правой потертой вправо"] # 0x27a9 (en: 'right-shaded white rightwards arrow', google translation) - - "➪": [t: "стрелка вправо налево"] # 0x27aa (en: 'left-shaded white rightwards arrow', google translation) - - "➫": [t: "стрелка с затенением с задней частью"] # 0x27ab (en: 'back-tilted shadowed white rightwards arrow', google translation) - - "➬": [t: "стрелка спереди с передним наклоном"] # 0x27ac (en: 'front-tilted shadowed white rightwards arrow', google translation) - - "➭": [t: "тяжелая белая в нижней части белой стрелы вправо"] # 0x27ad (en: 'heavy lower right-shadowed white rightwards arrow', google translation) - - "➮": [t: "тяжелая верхняя правая белая стрелка вправо"] # 0x27ae (en: 'heavy upper right-shadowed white rightwards arrow', google translation) - - "➯": [t: "стрелка с надписью с надписью с надписью"] # 0x27af (en: 'notched lower right-shadowed white rightwards arrow', google translation) - - "➱": [t: "стрелка с надписью с надписью с надписью"] # 0x27b1 (en: 'notched upper right-shadowed white rightwards arrow', google translation) - - "➲": [t: "кругл тяжелый белый вправо стрел"] # 0x27b2 (en: 'circled heavy white rightwards arrow', google translation) - - "➳": [t: "белоснежка вправо стрел"] # 0x27b3 (en: 'white-feathered rightwards arrow', google translation) - - "➴": [t: "чернокожая юго-восточная стрела"] # 0x27b4 (en: 'black-feathered south east arrow', google translation) - - "➵": [t: "чернокожие вправо стрел"] # 0x27b5 (en: 'black-feathered rightwards arrow', google translation) - - "➶": [t: "чернокожая северо-восточная стрела"] # 0x27b6 (en: 'black-feathered north east arrow', google translation) - - "➷": [t: "тяжелая чернокожая юго-восточная стрела"] # 0x27b7 (en: 'heavy black-feathered south east arrow', google translation) - - "➸": [t: "тяжелая чернокожая стрелка вправо"] # 0x27b8 (en: 'heavy black-feathered rightwards arrow', google translation) - - "➹": [t: "тяжелая чернокожая северо-восточная стрела"] # 0x27b9 (en: 'heavy black-feathered north east arrow', google translation) - - "➺": [t: "teradrop-barbed вправо стрел"] # 0x27ba (en: 'teradrop-barbed rightwards arrow', google translation) - - "➻": [t: "тяжелая слезоточивая капля стрелка вправо"] # 0x27bb (en: 'heavy teardrop-shanked rightwards arrow', google translation) - - "➼": [t: "клин-хвост вправо стрел"] # 0x27bc (en: 'wedge-tailed rightwards arrow', google translation) - - "➽": [t: "тяжелая клинохволока вправо стрел"] # 0x27bd (en: 'heavy wedge-tailed rightwards arrow', google translation) - - "➾": [t: "открытая стрелка вправо"] # 0x27be (en: 'open-outlined rightwards arrow', google translation) - - "⟀": [t: "трехмерный угол"] # 0x27c0 (en: 'three dimensional angle', google translation) - - "⟁": [t: "белый треугольник, содержащий маленький белый треугольник"] # 0x27c1 (en: 'white triangle containing small white triangle', google translation) - - "⟂": # 0x27c2 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "перпендикулярно" # (en: 'perpendicular to', google translation) - - "⟃": # 0x27c3 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "открытая подмножество" # (en: 'an open subset of', google translation) - - "⟄": # 0x27c4 - - test: - if: "$Verbosity!='Terse'" - then: [t: "является"] # (en: 'is', google translation) - - t: "открытый суперсет" # (en: 'an open superset of', google translation) - - "⟅": [t: "левый s-образный мешок разделитель"] # 0x27c5 (en: 'left s-shaped bag delimiter', google translation) - - "⟆": [t: "правая s-образная сумка разделителя"] # 0x27c6 (en: 'right s-shaped bag delimiter', google translation) - - "⟇": [t: "или с точкой внутри"] # 0x27c7 (en: 'or with dot inside', google translation) - - "⟈": [t: "обратный солидус предшествует подмножеству"] # 0x27c8 (en: 'reverse solidus preceding subset', google translation) - - "⟉": [t: "суперсет предшествует солидному"] # 0x27c9 (en: 'superset preceding solidus', google translation) - - "⟊": [t: "вертикальная планка с горизонтальным ходом"] # 0x27ca (en: 'vertical bar with horizontal stroke', google translation) - - "⟋": [t: "математический восходящий диагональ"] # 0x27cb (en: 'mathematical rising diagonal', google translation) - - "⟌": [t: "длинное подразделение"] # 0x27cc (en: 'long division', google translation) - - "⟍": [t: "математический падающий диагональ"] # 0x27cd (en: 'mathematical falling diagonal', google translation) - - "⟎": [t: "квадратный логический и"] # 0x27ce (en: 'squared logical and', google translation) - - "⟏": [t: "квадратный логический или"] # 0x27cf (en: 'squared logical or', google translation) - - "⟐": [t: "белый бриллиант с центрированной точкой"] # 0x27d0 (en: 'white diamond with centered dot', google translation) - - "⟑": [t: "и с точкой"] # 0x27d1 (en: 'and with dot', google translation) - - "⟒": [t: "элемент открытия вверх"] # 0x27d2 (en: 'element of opening upwards', google translation) - - "⟓": [t: "нижний правый угол с точкой"] # 0x27d3 (en: 'lower right corner with dot', google translation) - - "⟔": [t: "верхний левый угол с точкой"] # 0x27d4 (en: 'upper left corner with dot', google translation) - - "⟕": [t: "оставлено внешним соединением"] # 0x27d5 (en: 'left outer join', google translation) - - "⟖": [t: "прямое внешнее соединение"] # 0x27d6 (en: 'right outer join', google translation) - - "⟗": [t: "полное внешнее соединение"] # 0x27d7 (en: 'full outer join', google translation) - - "⟘": [t: "большой притяжение"] # 0x27d8 (en: 'large up tack', google translation) - - "⟙": [t: "большой вниз"] # 0x27d9 (en: 'large down tack', google translation) - - "⟚": [t: "левый и правый двойной турникет"] # 0x27da (en: 'left and right double turnstile', google translation) - - "⟛": [t: "левый и правый притяжение"] # 0x27db (en: 'left and right tack', google translation) - - "⟜": [t: "оставил мультимап"] # 0x27dc (en: 'left multimap', google translation) - - "⟝": [t: "длинная правая притяжение"] # 0x27dd (en: 'long right tack', google translation) - - "⟞": [t: "долгое левое"] # 0x27de (en: 'long left tack', google translation) - - "⟟": [t: "вверх по кругу выше"] # 0x27df (en: 'up tack with circle above', google translation) - - "⟠": [t: "lozenge, разделенный горизонтальным правлением"] # 0x27e0 (en: 'lozenge divided by horizontal rule', google translation) - - "⟡": [t: "белый вогнутый бриллиант"] # 0x27e1 (en: 'white concave sided diamond', google translation) - - "⟢": [t: "белый вогнутый бриллиант с левым тиком"] # 0x27e2 (en: 'white concave sided diamond with leftwards tick', google translation) - - "⟣": [t: "белый вогнутый бриллиант с правой клеткой"] # 0x27e3 (en: 'white concave sided diamond with rightwards tick', google translation) - - "⟤": [t: "белый квадрат с левой частью"] # 0x27e4 (en: 'white square with leftwards tick', google translation) - - "⟥": [t: "белый квадрат с правой клеткой"] # 0x27e5 (en: 'white square with rightwards tick', google translation) - - "⟦": [t: "левый белый квадратный кронштейн"] # 0x27e6 (en: 'left white square bracket', google translation) - - "⟧": [t: "правый белый квадратный кронштейн"] # 0x27e7 (en: 'right white square bracket', google translation) - - "⟨": [t: "левый угловой кронштейн"] # 0x27e8 (en: 'left angle bracket', google translation) - - "⟩": [t: "правый угловой кронштейн"] # 0x27e9 (en: 'right angle bracket', google translation) - - "⟪": [t: "левый двухугольный кронштейн"] # 0x27ea (en: 'left double angle bracket', google translation) - - "⟫": [t: "правый двойной угловой кронштейн"] # 0x27eb (en: 'right double angle bracket', google translation) - - "⟬": [t: "оставил белую черепаховую скорлупу"] # 0x27ec (en: 'left white tortoise shell bracket', google translation) - - "⟭": [t: "правый белый кронштейн с черепахой"] # 0x27ed (en: 'right white tortoise shell bracket', google translation) - - "⟮": [t: "осталось сплющенной скобки"] # 0x27ee (en: 'left flattened parenthesis', google translation) - - "⟯": [t: "правый сплющенной скобок"] # 0x27ef (en: 'right flattened parenthesis', google translation) - - "⟰": [t: "вверх четырехкратной стрелы"] # 0x27f0 (en: 'upwards quadruple arrow', google translation) - - "⟱": [t: "вниз по четыре раза стрелка"] # 0x27f1 (en: 'downwards quadruple arrow', google translation) - - "⟲": [t: "антиколевая стрельба по обрыванию круга"] # 0x27f2 (en: 'anticlockwise gapped circle arrow', google translation) - - "⟳": [t: "по часовой стрелке защелкивая стрелка"] # 0x27f3 (en: 'clockwise gapped circle arrow', google translation) - - "⟴": [t: "правая стрелка с circled plus"] # 0x27f4 (en: 'right arrow with circled plus', google translation) - - "⟵": [t: "длинная левая стрела"] # 0x27f5 (en: 'long leftwards arrow', google translation) - - "⟶": [t: "длинная справа стрелы"] # 0x27f6 (en: 'long rightwards arrow', google translation) - - "⟷": [t: "длинная левая стрелка вправо"] # 0x27f7 (en: 'long left right arrow', google translation) - - "⟸": [t: "длинная слева двойная стрела"] # 0x27f8 (en: 'long leftwards double arrow', google translation) - - "⟹": [t: "длинная направо двойная стрелка"] # 0x27f9 (en: 'long rightwards double arrow', google translation) - - "⟺": [t: "длинная левая правая двойная стрелка"] # 0x27fa (en: 'long left right double arrow', google translation) - - "⟻": [t: "длинная стрелка влево из бара"] # 0x27fb (en: 'long leftwards arrow from bar', google translation) - - "⟼": [t: "длинная стрелка вправо из бара"] # 0x27fc (en: 'long rightwards arrow from bar', google translation) - - "⟽": [t: "длинная слева двойная стрелка из бара"] # 0x27fd (en: 'long leftwards double arrow from bar', google translation) - - "⟾": [t: "длинная направо с двойной стрелкой из бара"] # 0x27fe (en: 'long rightwards double arrow from bar', google translation) - - "⟿": [t: "длинные направо suggle arrow"] # 0x27ff (en: 'long rightwards squiggle arrow', google translation) - - "⤀": [t: "пряга две головные стрелки с вертикальным ходом"] # 0x2900 (en: 'rightwards two headed arrow with vertical stroke', google translation) - - "⤁": [t: "права два головая стрелка с двойным вертикальным ходом"] # 0x2901 (en: 'rightwards two headed arrow with double vertical stroke', google translation) - - "⤂": [t: "левая двойная стрелка с вертикальным ходом"] # 0x2902 (en: 'leftwards double arrow with vertical stroke', google translation) - - "⤃": [t: "права двойная стрелка с вертикальным ходом"] # 0x2903 (en: 'rightwards double arrow with vertical stroke', google translation) - - "⤄": [t: "левая правая двойная стрелка с вертикальным ходом"] # 0x2904 (en: 'left right double arrow with vertical stroke', google translation) - - "⤅": [t: "прямо сразу же две головой стрелы из бара"] # 0x2905 (en: 'rightwards two headed arrow from bar', google translation) - - "⤆": [t: "слева двойная стрелка из бара"] # 0x2906 (en: 'leftwards double arrow from bar', google translation) - - "⤇": [t: "права двойная стрелка из бара"] # 0x2907 (en: 'rightwards double arrow from bar', google translation) - - "⤈": [t: "стрелка вниз с горизонтальным ходом"] # 0x2908 (en: 'downwards arrow with horizontal stroke', google translation) - - "⤉": [t: "стрелка вверх с горизонтальным ходом"] # 0x2909 (en: 'upwards arrow with horizontal stroke', google translation) - - "⤊": [t: "вверх тройной стрелкой"] # 0x290a (en: 'upwards triple arrow', google translation) - - "⤋": [t: "вниз по тройной стрелке"] # 0x290b (en: 'downwards triple arrow', google translation) - - "⤌": [t: "слева двойная стрелка"] # 0x290c (en: 'leftwards double dash arrow', google translation) - - "⤍": [t: "право двойная стрелка"] # 0x290d (en: 'rightwards double dash arrow', google translation) - - "⤎": [t: "левая тройная стрелка"] # 0x290e (en: 'leftwards triple dash arrow', google translation) - - "⤏": [t: "права тредная дапа"] # 0x290f (en: 'rightwards triple dash arrow', google translation) - - "⤐": [t: "прямо два голова triple dash arrow"] # 0x2910 (en: 'rightwards two headed triple dash arrow', google translation) - - "⤑": [t: "стрелка вправо с пунктирным стеблем"] # 0x2911 (en: 'rightwards arrow with dotted stem', google translation) - - "⤒": [t: "вверх стрелой в бар"] # 0x2912 (en: 'upwards arrow to bar', google translation) - - "⤓": [t: "вниз стрелы в бар"] # 0x2913 (en: 'downwards arrow to bar', google translation) - - "⤔": [t: "стрелка вправо с хвостом и вертикальным ходом"] # 0x2914 (en: 'rightwards arrow with tail and vertical stroke', google translation) - - "⤕": [t: "стрелка вправо с хвостом и двойным вертикальным ходом"] # 0x2915 (en: 'rightwards arrow with tail and double vertical stroke', google translation) - - "⤖": [t: "права два головая стрела с хвостом"] # 0x2916 (en: 'rightwards two headed arrow with tail', google translation) - - "⤗": [t: "пряга две головные стрелки с хвостом с вертикальным ходом"] # 0x2917 (en: 'rightwards two headed arrow with tail with vertical stroke', google translation) - - "⤘": [t: "пряга две головные стрелки с хвостом с двойным вертикальным ходом"] # 0x2918 (en: 'rightwards two headed arrow with tail with double vertical stroke', google translation) - - "⤙": [t: "левый хвост стрелы"] # 0x2919 (en: 'leftwards arrow tail', google translation) - - "⤚": [t: "права стрелка хвост"] # 0x291a (en: 'rightwards arrow tail', google translation) - - "⤛": [t: "левый двойной стрелок хвост"] # 0x291b (en: 'leftwards double arrow tail', google translation) - - "⤜": [t: "права двойной стрелок хвост"] # 0x291c (en: 'rightwards double arrow tail', google translation) - - "⤝": [t: "стрелка слева до заполненного алмаза"] # 0x291d (en: 'leftwards arrow to filled diamond', google translation) - - "⤞": [t: "стрелка вправо до наполненного бриллианта"] # 0x291e (en: 'rightwards arrow to filled diamond', google translation) - - "⤟": [t: "стрелка влево от бара до наполненного алмаза"] # 0x291f (en: 'leftwards arrow from bar to filled diamond', google translation) - - "⤠": [t: "стрелка вправо от бара до наполненного алмаза"] # 0x2920 (en: 'rightwards arrow from bar to filled diamond', google translation) - - "⤡": [t: "северо -западный и юго -восточный стрелка"] # 0x2921 (en: 'north west and south east arrow', google translation) - - "⤢": [t: "северо -восток и юго -западный стрела"] # 0x2922 (en: 'north east and south west arrow', google translation) - - "⤣": [t: "стрелка северо -запада с крючком"] # 0x2923 (en: 'north west arrow with hook', google translation) - - "⤤": [t: "стрелка на северо -восток с крючком"] # 0x2924 (en: 'north east arrow with hook', google translation) - - "⤥": [t: "юго -восточная стрела с крючком"] # 0x2925 (en: 'south east arrow with hook', google translation) - - "⤦": [t: "юго -западная стрела с крючком"] # 0x2926 (en: 'south west arrow with hook', google translation) - - "⤧": [t: "северо -западный стрела и северо -восточный стрела"] # 0x2927 (en: 'north west arrow and north east arrow', google translation) - - "⤨": [t: "северо -восточный стрела и юго -восточная стрела"] # 0x2928 (en: 'north east arrow and south east arrow', google translation) - - "⤩": [t: "юго -восточная стрела и юго -западный стрела"] # 0x2929 (en: 'south east arrow and south west arrow', google translation) - - "⤪": [t: "юго -западная стрела и северо -западный стрелка"] # 0x292a (en: 'south west arrow and north west arrow', google translation) - - "⤫": [t: "повышение диагонального пересечения падающих диагональ"] # 0x292b (en: 'rising diagonal crossing falling diagonal', google translation) - - "⤬": [t: "падение диагонального пересечения, поднимающееся диагональ"] # 0x292c (en: 'falling diagonal crossing rising diagonal', google translation) - - "⤭": [t: "юго -восточная стрелка, пересекающая северо -восточную стрелу"] # 0x292d (en: 'south east arrow crossing north east arrow', google translation) - - "⤮": [t: "северо -восток стрелы, пересекающая юго -восточную стрелу"] # 0x292e (en: 'north east arrow crossing south east arrow', google translation) - - "⤯": [t: "падение диагонального пересечения северо -востока стрелы"] # 0x292f (en: 'falling diagonal crossing north east arrow', google translation) - - "⤰": [t: "повышение диагонального пересечения юго -восточной стрелы"] # 0x2930 (en: 'rising diagonal crossing south east arrow', google translation) - - "⤱": [t: "северо -восточный стрелка пересекает северо -западный стрел"] # 0x2931 (en: 'north east arrow crossing north west arrow', google translation) - - "⤲": [t: "северо -западный стрела, пересекающая северо -восток стрелы"] # 0x2932 (en: 'north west arrow crossing north east arrow', google translation) - - "⤳": [t: "волна стрелка, указывающая прямо прямо вправо"] # 0x2933 (en: 'wave arrow pointing directly right', google translation) - - "⤴": [t: "стрелка указывает вправо, затем скручивается вверх"] # 0x2934 (en: 'arrow pointing rightwards then curving upwards', google translation) - - "⤵": [t: "стрелка указывает вправо, затем изогнулась вниз"] # 0x2935 (en: 'arrow pointing rightwards then curving downwards', google translation) - - "⤶": [t: "стрелка указывает вниз, а затем изогнут влево"] # 0x2936 (en: 'arrow pointing downwards then curving leftwards', google translation) - - "⤷": [t: "стрелка указывает вниз, а затем изогнут вправо"] # 0x2937 (en: 'arrow pointing downwards then curving rightwards', google translation) - - "⤸": [t: "стрелка правой боковой дуги по часовой стрелке"] # 0x2938 (en: 'right side arc clockwise arrow', google translation) - - "⤹": [t: "стрелка левой стороны против часовой стрелки"] # 0x2939 (en: 'left side arc anticlockwise arrow', google translation) - - "⤺": [t: "верхняя дуга против часовой стрелы"] # 0x293a (en: 'top arc anticlockwise arrow', google translation) - - "⤻": [t: "нижняя дуга против часовой стрелки"] # 0x293b (en: 'bottom arc anticlockwise arrow', google translation) - - "⤼": [t: "верхняя дуговая стрелка с минус"] # 0x293c (en: 'top arc clockwise arrow with minus', google translation) - - "⤽": [t: "верхняя дуга против часовой стрелки с плюсом"] # 0x293d (en: 'top arc anticlockwise arrow with plus', google translation) - - "⤾": [t: "нижняя правая полукруглая стрелка по часовой стрелке"] # 0x293e (en: 'lower right semicircular clockwise arrow', google translation) - - "⤿": [t: "левый левый полукруглый стрелка против часовой стрелки"] # 0x293f (en: 'lower left semicircular anticlockwise arrow', google translation) - - "⥀": [t: "стрелка против часовой стрелки"] # 0x2940 (en: 'anticlockwise closed circle arrow', google translation) - - "⥁": [t: "по часовой стрелке закрытый круг стрелы"] # 0x2941 (en: 'clockwise closed circle arrow', google translation) - - "⥂": [t: "стрелка вправо над короткой левой стрелкой"] # 0x2942 (en: 'rightwards arrow above short leftwards arrow', google translation) - - "⥃": [t: "стрелка влево над короткой стрелой вправо"] # 0x2943 (en: 'leftwards arrow above short rightwards arrow', google translation) - - "⥄": [t: "короткая стрелка вправо над стрельбой влево"] # 0x2944 (en: 'short rightwards arrow above leftwards arrow', google translation) - - "⥅": [t: "стрелка вправо с плюсом ниже"] # 0x2945 (en: 'rightwards arrow with plus below', google translation) - - "⥆": [t: "стрелка влево с плюсом ниже"] # 0x2946 (en: 'leftwards arrow with plus below', google translation) - - "⥇": [t: "стрелка вправо через x"] # 0x2947 (en: 'rightwards arrow through x', google translation) - - "⥈": [t: "левая стрелка справа через круг"] # 0x2948 (en: 'left right arrow through circle', google translation) - - "⥉": [t: "вверху две головы стрелы из круга"] # 0x2949 (en: 'upwards two headed arrow from circle', google translation) - - "⥊": [t: "левый барб вверх по правой барб вниз по гарпуне"] # 0x294a (en: 'left barb up right barb down harpoon', google translation) - - "⥋": [t: "левый барб вниз по правой барб вверх по гарпуне"] # 0x294b (en: 'left barb down right barb up harpoon', google translation) - - "⥌": [t: "вверх барб прямо вниз по левому гарпуне"] # 0x294c (en: 'up barb right down barb left harpoon', google translation) - - "⥍": [t: "вверх по барб налево барб правой гарпун"] # 0x294d (en: 'up barb left down barb right harpoon', google translation) - - "⥎": [t: "левый барб вверх по правой барб -харпун"] # 0x294e (en: 'left barb up right barb up harpoon', google translation) - - "⥏": [t: "вверх барб прямо вниз, барб правый гарпун"] # 0x294f (en: 'up barb right down barb right harpoon', google translation) - - "⥐": [t: "левый барб вниз по правой барб вниз по гарпуне"] # 0x2950 (en: 'left barb down right barb down harpoon', google translation) - - "⥑": [t: "вверх барб оставил барб, покинув гарпун"] # 0x2951 (en: 'up barb left down barb left harpoon', google translation) - - "⥒": [t: "левый гарпун с барб до бар"] # 0x2952 (en: 'leftwards harpoon with barb up to bar', google translation) - - "⥓": [t: "прямо гарпун с барб до бара"] # 0x2953 (en: 'rightwards harpoon with barb up to bar', google translation) - - "⥔": [t: "вверх гарпун с барб прямо к баре"] # 0x2954 (en: 'upwards harpoon with barb right to bar', google translation) - - "⥕": [t: "вниз по гарпуне с барб прямо к бар"] # 0x2955 (en: 'downwards harpoon with barb right to bar', google translation) - - "⥖": [t: "слева гарпун с барб до бара"] # 0x2956 (en: 'leftwards harpoon with barb down to bar', google translation) - - "⥗": [t: "прямо гарпун с барб до бара"] # 0x2957 (en: 'rightwards harpoon with barb down to bar', google translation) - - "⥘": [t: "вверх гарпун с кобкой, оставленной в бар"] # 0x2958 (en: 'upwards harpoon with barb left to bar', google translation) - - "⥙": [t: "вниз по гарпуне с кобкой, оставленной в бар"] # 0x2959 (en: 'downwards harpoon with barb left to bar', google translation) - - "⥚": [t: "слева гарпун с барб из бара"] # 0x295a (en: 'leftwards harpoon with barb up from bar', google translation) - - "⥛": [t: "прямо гарпун с барб из бара"] # 0x295b (en: 'rightwards harpoon with barb up from bar', google translation) - - "⥜": [t: "вверх гарпун с барб прямо из бара"] # 0x295c (en: 'upwards harpoon with barb right from bar', google translation) - - "⥝": [t: "вниз по гарпуне с барб прямо из бара"] # 0x295d (en: 'downwards harpoon with barb right from bar', google translation) - - "⥞": [t: "налево гарпун с барб вниз от бара"] # 0x295e (en: 'leftwards harpoon with barb down from bar', google translation) - - "⥟": [t: "прямо гарпун с барб вниз от бара"] # 0x295f (en: 'rightwards harpoon with barb down from bar', google translation) - - "⥠": [t: "вверх гарпун с барб слева от бара"] # 0x2960 (en: 'upwards harpoon with barb left from bar', google translation) - - "⥡": [t: "вниз по гарпуне с кобкой слева от бара"] # 0x2961 (en: 'downwards harpoon with barb left from bar', google translation) - - "⥢": [t: "налево гарпун с барб вверх по левому гарпуне с барб вниз"] # 0x2962 (en: 'leftwards harpoon with barb up above leftwards harpoon with barb down', google translation) - - "⥣": [t: "вверх гарпун с кобкой слева рядом вверх вверх гарпун с барком справа"] # 0x2963 (en: 'upwards harpoon with barb left beside upwards harpoon with barb right', google translation) - - "⥤": [t: "прямо гарпун с барб вверх по правой гарпуне с барб"] # 0x2964 (en: 'rightwards harpoon with barb up above rightwards harpoon with barb down', google translation) - - "⥥": [t: "вниз по гарпуне с кобкой слева рядом вниз по гарпуне с барком справа"] # 0x2965 (en: 'downwards harpoon with barb left beside downwards harpoon with barb right', google translation) - - "⥦": [t: "влево гарпун с барб вверх по правой гарпуне с барб"] # 0x2966 (en: 'leftwards harpoon with barb up above rightwards harpoon with barb up', google translation) - - "⥧": [t: "влево гарпун с барб вниз по правой гарпуне с барб вниз"] # 0x2967 (en: 'leftwards harpoon with barb down above rightwards harpoon with barb down', google translation) - - "⥨": [t: "вправо гарпун с барб над левым гарпуном с барб"] # 0x2968 (en: 'rightwards harpoon with barb up above leftwards harpoon with barb up', google translation) - - "⥩": [t: "вправо гарпун с барб вниз над левым гарпуном с барб вниз"] # 0x2969 (en: 'rightwards harpoon with barb down above leftwards harpoon with barb down', google translation) - - "⥪": [t: "слева гарпун с барб наверху длинного хранения"] # 0x296a (en: 'leftwards harpoon with barb up above long dash', google translation) - - "⥫": [t: "слева гарпун с барб внизу длинной чертой"] # 0x296b (en: 'leftwards harpoon with barb down below long dash', google translation) - - "⥬": [t: "прямо гарпун с барб наверху длинной чертой"] # 0x296c (en: 'rightwards harpoon with barb up above long dash', google translation) - - "⥭": [t: "прямо гарпун с барб внизу длинной чертой"] # 0x296d (en: 'rightwards harpoon with barb down below long dash', google translation) - - "⥮": [t: "вверх по гарпуне с кобкой слева рядом с вниз по гарпуне с барком справа"] # 0x296e (en: 'upwards harpoon with barb left beside downwards harpoon with barb right', google translation) - - "⥯": [t: "вниз по гарпуне с кобкой слева рядом с горной вверх с барком справа"] # 0x296f (en: 'downwards harpoon with barb left beside upwards harpoon with barb right', google translation) - - "⥰": [t: "правая двойная стрелка с округлой головой"] # 0x2970 (en: 'right double arrow with rounded head', google translation) - - "⥱": [t: "равняется над стрельбой справа"] # 0x2971 (en: 'equals above rightwards arrow', google translation) - - "⥲": [t: "оператор тильде выше стрелы справа"] # 0x2972 (en: 'tilde operator above rightwards arrow', google translation) - - "⥳": [t: "стрелка влево над оператором тильды"] # 0x2973 (en: 'leftwards arrow above tilde operator', google translation) - - "⥴": [t: "стрелка вправо над оператором тильды"] # 0x2974 (en: 'rightwards arrow above tilde operator', google translation) - - "⥵": [t: "стрелка вправо выше почти равна"] # 0x2975 (en: 'rightwards arrow above almost equal to', google translation) - - "⥶": [t: "меньше, чем выше левой стрелы"] # 0x2976 (en: 'less than above leftwards arrow', google translation) - - "⥷": [t: "стрелка слева через меньше"] # 0x2977 (en: 'leftwards arrow through less than', google translation) - - "⥸": [t: "больше, чем выше, стрелка вправо"] # 0x2978 (en: 'greater than above rightwards arrow', google translation) - - "⥹": [t: "подмножество выше стрелки справа"] # 0x2979 (en: 'subset above rightwards arrow', google translation) - - "⥺": [t: "стрелка влево через подмножество"] # 0x297a (en: 'leftwards arrow through subset', google translation) - - "⥻": [t: "суперсет над стрелкой влево"] # 0x297b (en: 'superset above leftwards arrow', google translation) - - "⥼": [t: "оставил рыбный хвост"] # 0x297c (en: 'left fish tail', google translation) - - "⥽": [t: "правый рыбный хвост"] # 0x297d (en: 'right fish tail', google translation) - - "⥾": [t: "вверх по рыбному хвосту"] # 0x297e (en: 'up fish tail', google translation) - - "⥿": [t: "вниз по рыбному хвосту"] # 0x297f (en: 'down fish tail', google translation) - - "⦀": [t: "тройной вертикальный разделитель"] # 0x2980 (en: 'triple vertical bar delimiter', google translation) - - "⦁": [t: "z letation spot"] # 0x2981 (en: 'z notation spot', google translation) - - "⦂": [t: "z обозначения типа толстой кишки"] # 0x2982 (en: 'z notation type colon', google translation) - - "⦃": [t: "оставил белую скобу"] # 0x2983 (en: 'left white brace', google translation) - - "⦄": [t: "правая белая скоба"] # 0x2984 (en: 'right white brace', google translation) - - "⦅": [t: "левая белая скобкатиз"] # 0x2985 (en: 'left white parenthesis', google translation) - - "⦆": [t: "правый белый скол"] # 0x2986 (en: 'right white parenthesis', google translation) - - "⦇": [t: "z letation left image cracket"] # 0x2987 (en: 'z notation left image bracket', google translation) - - "⦈": [t: "z обозначения правильный кронштейн изображения"] # 0x2988 (en: 'z notation right image bracket', google translation) - - "⦉": [t: "z обозначения левого связующего кронштейна"] # 0x2989 (en: 'z notation left binding bracket', google translation) - - "⦊": [t: "z обозначение правого связующего кронштейна"] # 0x298a (en: 'z notation right binding bracket', google translation) - - "⦋": [t: "левый квадратный кронштейн с андербаром"] # 0x298b (en: 'left square bracket with underbar', google translation) - - "⦌": [t: "правый квадратный кронштейн с андербаром"] # 0x298c (en: 'right square bracket with underbar', google translation) - - "⦍": [t: "левый квадратный кронштейн с тиком в верхнем углу"] # 0x298d (en: 'left square bracket with tick in top corner', google translation) - - "⦎": [t: "правый квадратный кронштейн с клелем в нижнем углу"] # 0x298e (en: 'right square bracket with tick in bottom corner', google translation) - - "⦏": [t: "левый квадратный кронштейн с клелем в нижнем углу"] # 0x298f (en: 'left square bracket with tick in bottom corner', google translation) - - "⦐": [t: "правый квадратный кронштейн с тиком в верхнем углу"] # 0x2990 (en: 'right square bracket with tick in top corner', google translation) - - "⦑": [t: "левый угловой кронштейн с точкой"] # 0x2991 (en: 'left angle bracket with dot', google translation) - - "⦒": [t: "правой угловой кронштейн с точкой"] # 0x2992 (en: 'right angle bracket with dot', google translation) - - "⦓": [t: "левая дуга меньше, чем кронштейна"] # 0x2993 (en: 'left arc less than bracket', google translation) - - "⦔": [t: "правая дуга больше, чем кронштейна"] # 0x2994 (en: 'right arc greater than bracket', google translation) - - "⦕": [t: "двойная левая дуга больше, чем кронштейна"] # 0x2995 (en: 'double left arc greater than bracket', google translation) - - "⦖": [t: "двойная правая дуга меньше, чем кронштейна"] # 0x2996 (en: 'double right arc less than bracket', google translation) - - "⦗": [t: "оставленный черный кронштейн с панциркой черепахи"] # 0x2997 (en: 'left black tortoise shell bracket', google translation) - - "⦘": [t: "правый черный кронштейн shell"] # 0x2998 (en: 'right black tortoise shell bracket', google translation) - - "⦙": [t: "пунктирный забор"] # 0x2999 (en: 'dotted fence', google translation) - - "⦚": [t: "вертикальная зигзагообразная линия"] # 0x299a (en: 'vertical zigzag line', google translation) - - "⦛": [t: "измеренное угловое отверстие слева"] # 0x299b (en: 'measured angle opening left', google translation) - - "⦜": [t: "вариант правого угла с квадратом"] # 0x299c (en: 'right angle variant with square', google translation) - - "⦝": [t: "измеренный правый угол с точкой"] # 0x299d (en: 'measured right angle with dot', google translation) - - "⦞": [t: "угол с s внутри"] # 0x299e (en: 'angle with s inside', google translation) - - "⦟": [t: "острый угол"] # 0x299f (en: 'acute angle', google translation) - - "⦠": [t: "сферический угол открывается слева"] # 0x29a0 (en: 'spherical angle opening left', google translation) - - "⦡": [t: "сферический угол открывается"] # 0x29a1 (en: 'spherical angle opening up', google translation) - - "⦢": [t: "повернут угол"] # 0x29a2 (en: 'turned angle', google translation) - - "⦣": [t: "обратный угол"] # 0x29a3 (en: 'reversed angle', google translation) - - "⦤": [t: "угол с андербаром"] # 0x29a4 (en: 'angle with underbar', google translation) - - "⦥": [t: "обратный угол с помощью подножия"] # 0x29a5 (en: 'reversed angle with underbar', google translation) - - "⦦": [t: "косой угол открывается"] # 0x29a6 (en: 'oblique angle opening up', google translation) - - "⦧": [t: "косой угол открывается вниз"] # 0x29a7 (en: 'oblique angle opening down', google translation) - - "⦨": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей вверх и вправо"] # 0x29a8 (en: 'measured angle with open arm ending in arrow pointing up and to the right', google translation) - - "⦩": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей вверх и влево"] # 0x29a9 (en: 'measured angle with open arm ending in arrow pointing up and to the left', google translation) - - "⦪": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей вниз и вправо"] # 0x29aa (en: 'measured angle with open arm ending in arrow pointing down and to the right', google translation) - - "⦫": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей вниз и слева"] # 0x29ab (en: 'measured angle with open arm ending in arrow pointing down and to the left', google translation) - - "⦬": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей вправо и вверх"] # 0x29ac (en: 'measured angle with open arm ending in arrow pointing right and up', google translation) - - "⦭": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей влево и вверх"] # 0x29ad (en: 'measured angle with open arm ending in arrow pointing left and up', google translation) - - "⦮": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей вправо и вниз"] # 0x29ae (en: 'measured angle with open arm ending in arrow pointing right and down', google translation) - - "⦯": [t: "измеренный угол с открытой рукой, заканчивающейся стрелкой, указывающей влево и вниз"] # 0x29af (en: 'measured angle with open arm ending in arrow pointing left and down', google translation) - - "⦰": [t: "обратный пустой набор"] # 0x29b0 (en: 'reversed empty set', google translation) - - "⦱": [t: "пустой набор с overbar"] # 0x29b1 (en: 'empty set with overbar', google translation) - - "⦲": [t: "пустой набор с небольшим кругом выше"] # 0x29b2 (en: 'empty set with small circle above', google translation) - - "⦳": [t: "пустой набор со стрелкой вправо выше"] # 0x29b3 (en: 'empty set with right arrow above', google translation) - - "⦴": [t: "пустой набор со стрелкой левой выше"] # 0x29b4 (en: 'empty set with left arrow above', google translation) - - "⦵": [t: "круг с горизонтальным баром"] # 0x29b5 (en: 'circle with horizontal bar', google translation) - - "⦶": [t: "обведенный вертикальным баром"] # 0x29b6 (en: 'circled vertical bar', google translation) - - "⦷": [t: "обведенный параллельно"] # 0x29b7 (en: 'circled parallel', google translation) - - "⦸": [t: "circled reverse solidus"] # 0x29b8 (google translation) - - "⦹": [t: "обведенный перпендикулярным"] # 0x29b9 (en: 'circled perpendicular', google translation) - - "⦺": [t: "circled, разделенная горизонтальной стержней и верхней половиной, разделенной на вертикальный стержень"] # 0x29ba (en: 'circled divided by horizontal bar and top half divided by vertical bar', google translation) - - "⦻": [t: "круг с наложением x"] # 0x29bb (en: 'circle with superimposed x', google translation) - - "⦼": [t: "объисхоженная против часовой стрелки по вращению знака дивизии"] # 0x29bc (en: 'circled anticlockwise rotated division sign', google translation) - - "⦽": [t: "вверх стрелой через круг"] # 0x29bd (en: 'up arrow through circle', google translation) - - "⦾": [t: "обведенная белая пуля"] # 0x29be (en: 'circled white bullet', google translation) - - "⦿": [t: "кружная пуля"] # 0x29bf (en: 'circled bullet', google translation) - - "⧀": [t: "кружит меньше, чем"] # 0x29c0 (en: 'circled less than', google translation) - - "⧁": [t: "обведенный больше, чем"] # 0x29c1 (en: 'circled greater than', google translation) - - "⧂": [t: "круг с маленьким кругом справа"] # 0x29c2 (en: 'circle with small circle to the right', google translation) - - "⧃": [t: "обведите с двумя горизонтальными ударами справа"] # 0x29c3 (en: 'circle with two horizontal strokes to the right', google translation) - - "⧄": [t: "квадратная растущая диагональная черта"] # 0x29c4 (en: 'squared rising diagonal slash', google translation) - - "⧅": [t: "квадратная падающая диагональная черта"] # 0x29c5 (en: 'squared falling diagonal slash', google translation) - - "⧆": [t: "квадратная звездочка"] # 0x29c6 (en: 'squared asterisk', google translation) - - "⧇": [t: "квадратный маленький круг"] # 0x29c7 (en: 'squared small circle', google translation) - - "⧈": [t: "квадратный квадрат"] # 0x29c8 (en: 'squared square', google translation) - - "⧉": [t: "двое присоединились к квадратам"] # 0x29c9 (en: 'two joined squares', google translation) - - "⧊": [t: "треугольник с точкой выше"] # 0x29ca (en: 'triangle with dot above', google translation) - - "⧋": [t: "треугольник с верхней частью"] # 0x29cb (en: 'triangle with underbar', google translation) - - "⧌": [t: "s в треугольнике"] # 0x29cc (en: 's in triangle', google translation) - - "⧍": [t: "треугольник с засечками внизу"] # 0x29cd (en: 'triangle with serifs at bottom', google translation) - - "⧎": [t: "правый треугольник над левым треугольником"] # 0x29ce (en: 'right triangle above left triangle', google translation) - - "⧏": [t: "левый треугольник рядом с вертикальным баром"] # 0x29cf (en: 'left triangle beside vertical bar', google translation) - - "⧐": [t: "вертикальный батончик рядом с правым треугольником"] # 0x29d0 (en: 'vertical bar beside right triangle', google translation) - - "⧑": [t: "боути с левой половиной черной"] # 0x29d1 (en: 'bowtie with left half black', google translation) - - "⧒": [t: "боути с правой половиной черной"] # 0x29d2 (en: 'bowtie with right half black', google translation) - - "⧓": [t: "черный бабочка"] # 0x29d3 (en: 'black bowtie', google translation) - - "⧔": [t: "раз с левой половиной черной"] # 0x29d4 (en: 'times with left half black', google translation) - - "⧕": [t: "раз с правой половиной черной"] # 0x29d5 (en: 'times with right half black', google translation) - - "⧖": [t: "белые дни"] # 0x29d6 (en: 'white hourglass', google translation) - - "⧗": [t: "черные песочные часы"] # 0x29d7 (en: 'black hourglass', google translation) - - "⧘": [t: "оставил вигги"] # 0x29d8 (en: 'left wiggly fence', google translation) - - "⧙": [t: "правый шаткий забор"] # 0x29d9 (en: 'right wiggly fence', google translation) - - "⧚": [t: "оставил двойной шаткий забор"] # 0x29da (en: 'left double wiggly fence', google translation) - - "⧛": [t: "правый двойной забор"] # 0x29db (en: 'right double wiggly fence', google translation) - - "⧜": [t: "неполная бесконечность"] # 0x29dc (en: 'incomplete infinity', google translation) - - "⧝": [t: "связывать бесконечность"] # 0x29dd (en: 'tie over infinity', google translation) - - "⧞": [t: "бесконечность отрицается с вертикальной стержней"] # 0x29de (en: 'infinity negated with vertical bar', google translation) - - "⧟": [t: "двойной многократный мультимап"] # 0x29df (en: 'double-ended multimap', google translation) - - "⧠": [t: "квадрат с контурированным контуром"] # 0x29e0 (en: 'square with contoured outline', google translation) - - "⧡": [t: "увеличивается как"] # 0x29e1 (en: 'increases as', google translation) - - "⧢": [t: "перетасовать продукт"] # 0x29e2 (en: 'shuffle product', google translation) - - "⧣": [t: "равняется знаку и наклонной параллели"] # 0x29e3 (en: 'equals sign and slanted parallel', google translation) - - "⧤": [t: "равняется знаку и наклонной параллельно с тильдой выше"] # 0x29e4 (en: 'equals sign and slanted parallel with tilde above', google translation) - - "⧥": [t: "идентично и наклонной параллельно"] # 0x29e5 (en: 'identical to and slanted parallel', google translation) - - "⧦": [t: "глейх старк"] # 0x29e6 (en: 'gleich stark', google translation) - - "⧧": [t: "термодинамический"] # 0x29e7 (en: 'thermodynamic', google translation) - - "⧨": [t: "вниз по направлению треугольника с левой половиной черной"] # 0x29e8 (en: 'down pointing triangle with left half black', google translation) - - "⧩": [t: "вниз по указанию треугольника с правой половиной черной"] # 0x29e9 (en: 'down pointing triangle with right half black', google translation) - - "⧪": [t: "черный бриллиант со стрелой"] # 0x29ea (en: 'black diamond with down arrow', google translation) - - "⧫": [t: "черный ронник"] # 0x29eb (en: 'black lozenge', google translation) - - "⧬": [t: "белый круг со стрелой вниз"] # 0x29ec (en: 'white circle with down arrow', google translation) - - "⧭": [t: "черный круг со стрелой вниз"] # 0x29ed (en: 'black circle with down arrow', google translation) - - "⧮": [t: "ошибка белой квадраты"] # 0x29ee (en: 'error-barred white square', google translation) - - "⧯": [t: "ошибка, черный квадрат"] # 0x29ef (en: 'error-barred black square', google translation) - - "⧰": [t: "ошибка белого алмаза"] # 0x29f0 (en: 'error-barred white diamond', google translation) - - "⧱": [t: "ошибка с черным бриллиантом"] # 0x29f1 (en: 'error-barred black diamond', google translation) - - "⧲": [t: "ошибка белого круга"] # 0x29f2 (en: 'error-barred white circle', google translation) - - "⧳": [t: "ошибка, черный круг"] # 0x29f3 (en: 'error-barred black circle', google translation) - - "⧴": [t: "задерживается правилом"] # 0x29f4 (en: 'rule-delayed', google translation) - - "⧵": [t: "обратный оператор solidus"] # 0x29f5 (en: 'reverse solidus operator', google translation) - - "⧶": [t: "solidus с overbar"] # 0x29f6 (en: 'solidus with overbar', google translation) - - "⧷": [t: "обратный солидус с горизонтальным ходом"] # 0x29f7 (en: 'reverse solidus with horizontal stroke', google translation) - - "⧸": [t: "большой солис"] # 0x29f8 (en: 'big solidus', google translation) - - "⧹": [t: "большой обратный солидус"] # 0x29f9 (en: 'big reverse solidus', google translation) - - "⧺": [t: "двойной плюс"] # 0x29fa (en: 'double plus', google translation) - - "⧻": [t: "тройной плюс"] # 0x29fb (en: 'triple plus', google translation) - - "⧼": [t: "влево укажите изогнутый угловой кронштейн"] # 0x29fc (en: 'left pointing curved angle bracket', google translation) - - "⧽": [t: "право указывает на изогнутый угловой кронштейн"] # 0x29fd (en: 'right pointing curved angle bracket', google translation) - - "⧾": [t: "крошечный"] # 0x29fe (en: 'tiny', google translation) - - "⧿": [t: "мин"] # 0x29ff (en: 'miny', google translation) - - "⨀": [t: "circled dot operator"] # 0x2a00 (google translation) - - "⨁": [t: "circled plus operator"] # 0x2a01 (google translation) - - "⨂": [t: "оператор times circled"] # 0x2a02 (en: 'circled times operator', google translation) - - "⨃": [t: "оператор профсоюза с dot"] # 0x2a03 (en: 'union operator with dot', google translation) - - "⨄": [t: "оператор профсоюза с плюсом"] # 0x2a04 (en: 'union operator with plus', google translation) - - "⨅": [t: "квадратный перекрестный оператор"] # 0x2a05 (en: 'square intersection operator', google translation) - - "⨆": [t: "оператор square union"] # 0x2a06 (en: 'square union operator', google translation) - - "⨇": [t: "два логических и оператор"] # 0x2a07 (en: 'two logical and operator', google translation) - - "⨈": [t: "два логичных или оператор"] # 0x2a08 (en: 'two logical or operator', google translation) - - "⨉": [t: "времена оператор"] # 0x2a09 (en: 'times operator', google translation) - - "⨊": [t: "модуле две суммы"] # 0x2a0a (en: 'modulo two sum', google translation) - - "⨋": [t: "суммирование с интегральным"] # 0x2a0b (en: 'summation with integral', google translation) - - "⨌": [t: "четырехкратный интегральный оператор"] # 0x2a0c (en: 'quadruple integral operator', google translation) - - "⨍": [t: "конечная часть интеграла"] # 0x2a0d (en: 'finite part integral', google translation) - - "⨎": [t: "интеграл с двойным ходом"] # 0x2a0e (en: 'integral with double stroke', google translation) - - "⨏": [t: "интегральный средний со слэш"] # 0x2a0f (en: 'integral average with slash', google translation) - - "⨐": [t: "функция циркуляции"] # 0x2a10 (en: 'circulation function', google translation) - - "⨑": [t: "против часовой стрельбы интеграция"] # 0x2a11 (en: 'anticlockwise integration', google translation) - - "⨒": [t: "линейная интеграция с прямоугольным путем вокруг полюса"] # 0x2a12 (en: 'line integration with rectangular path around pole', google translation) - - "⨓": [t: "линейная интеграция с полукруглым путем вокруг полюса"] # 0x2a13 (en: 'line integration with semicircular path around pole', google translation) - - "⨔": [t: "линейная интеграция не включая полюс"] # 0x2a14 (en: 'line integration not including the pole', google translation) - - "⨕": [t: "интеграл вокруг оператора точек"] # 0x2a15 (en: 'integral around a point operator', google translation) - - "⨖": [t: "интегральный оператор quaternion"] # 0x2a16 (en: 'quaternion integral operator', google translation) - - "⨗": [t: "интеграл со стрелкой левой с крючком"] # 0x2a17 (en: 'integral with leftwards arrow with hook', google translation) - - "⨘": [t: "интеграл с знаком times"] # 0x2a18 (en: 'integral with times sign', google translation) - - "⨙": [t: "интеграл с пересечением"] # 0x2a19 (en: 'integral with intersection', google translation) - - "⨚": [t: "интеграл с профсоюзом"] # 0x2a1a (en: 'integral with union', google translation) - - "⨛": [t: "интеграл с overbar"] # 0x2a1b (en: 'integral with overbar', google translation) - - "⨜": [t: "интеграл с underbar"] # 0x2a1c (en: 'integral with underbar', google translation) - - "⨝": [t: "присоединиться"] # 0x2a1d (en: 'join', google translation) - - "⨞": [t: "большой левый оператор треугольника"] # 0x2a1e (en: 'large left triangle operator', google translation) - - "⨟": [t: "z состав схемы записей"] # 0x2a1f (en: 'z notation schema composition', google translation) - - "⨠": [t: "z схема записей"] # 0x2a20 (en: 'z notation schema piping', google translation) - - "⨡": [t: "z проекция схемы нотации"] # 0x2a21 (en: 'z notation schema projection', google translation) - - "⨢": [t: "плюс знак с кругом выше"] # 0x2a22 (en: 'plus sign with circle above', google translation) - - "⨣": [t: "плюс знак с акцентом на округ"] # 0x2a23 (en: 'plus sign with circumflex accent above', google translation) - - "⨤": [t: "плюс знак с тильдой выше"] # 0x2a24 (en: 'plus sign with tilde above', google translation) - - "⨥": [t: "плюс знак с точкой ниже"] # 0x2a25 (en: 'plus sign with dot below', google translation) - - "⨦": [t: "плюс знак с тильдой ниже"] # 0x2a26 (en: 'plus sign with tilde below', google translation) - - "⨧": [t: "плюс знак с подписанием второго"] # 0x2a27 (en: 'plus sign with subscript two', google translation) - - "⨨": [t: "плюс знак с черным треугольником"] # 0x2a28 (en: 'plus sign with black triangle', google translation) - - "⨩": [t: "знак минус с запятой выше"] # 0x2a29 (en: 'minus sign with comma above', google translation) - - "⨪": [t: "знак минус с точкой ниже"] # 0x2a2a (en: 'minus sign with dot below', google translation) - - "⨫": [t: "знак минус с падающими точками"] # 0x2a2b (en: 'minus sign with falling dots', google translation) - - "⨬": [t: "знак минус с растущими точками"] # 0x2a2c (en: 'minus sign with rising dots', google translation) - - "⨭": [t: "плюс войти в левый половинный круг"] # 0x2a2d (en: 'plus sign in left half circle', google translation) - - "⨮": [t: "плюс войти в правый половинный круг"] # 0x2a2e (en: 'plus sign in right half circle', google translation) - - "⨯": # 0x2a2f + - "⓾": [t: "десять в двойном круге"] # 0x24fe + - "⓿": [t: "ноль в чёрном круге"] # 0x24ff + - "■": [t: "чёрный квадрат"] # 0x25a0 + - "□": [t: "белый квадрат"] # 0x25a1 + - "▢": [t: "белый квадрат со скруглёнными углами"] # 0x25a2 + - "▣": [t: "белый квадрат, содержащий маленький чёрный квадрат"] # 0x25a3 + - "▤": [t: "квадрат с горизонтальной заливкой"] # 0x25a4 + - "▥": [t: "квадрат с вертикальной заливкой"] # 0x25a5 + - "▦": [t: "квадрат с ортогональной перекрёстной штриховкой"] # 0x25a6 + - "▧": [t: "квадрат с заливкой от верхнего левого к нижнему правому"] # 0x25a7 + - "▨": [t: "квадрат с заливкой от верхнего правого к нижнему левому"] # 0x25a8 + - "▩": [t: "квадрат с диагональной перекрёстной штриховкой"] # 0x25a9 + - "▪": [t: "чёрный маленький квадрат"] # 0x25aa + - "▫": [t: "белый маленький квадрат"] # 0x25ab + - "▬": [t: "чёрный прямоугольник"] # 0x25ac + - "▭": [t: "белый прямоугольник"] # 0x25ad + - "▮": [t: "чёрный вертикальный прямоугольник"] # 0x25ae + - "▯": [t: "белый вертикальный прямоугольник"] # 0x25af + - "▰": [t: "чёрный параллелограмм"] # 0x25b0 + - "▱": [t: "белый параллелограмм"] # 0x25b1 + - "▲": [t: "чёрный треугольник остриём вверх"] # 0x25b2 + - "△": [t: "треугольник"] # 0x25b3 + - "▴": [t: "чёрный маленький треугольник остриём вверх"] # 0x25b4 + - "▵": [t: "белый маленький треугольник остриём вверх"] # 0x25b5 + - "▶": [t: "чёрный треугольник остриём вправо"] # 0x25b6 + - "▷": [t: "белый треугольник остриём вправо"] # 0x25b7 + - "▸": [t: "чёрный маленький треугольник остриём вправо"] # 0x25b8 + - "▹": [t: "белый маленький треугольник остриём вправо"] # 0x25b9 + - "►": [t: "чёрный указатель вправо"] # 0x25ba + - "▻": [t: "белый указатель вправо"] # 0x25bb + - "▼": [t: "чёрный треугольник остриём вниз"] # 0x25bc + - "▽": [t: "белый треугольник остриём вниз"] # 0x25bd + - "▾": [t: "чёрный маленький треугольник остриём вниз"] # 0x25be + - "▿": [t: "белый маленький треугольник остриём вниз"] # 0x25bf + - "◀": [t: "чёрный треугольник остриём влево"] # 0x25c0 + - "◁": [t: "белый треугольник остриём влево"] # 0x25c1 + - "◂": [t: "чёрный маленький треугольник остриём влево"] # 0x25c2 + - "◃": [t: "белый маленький треугольник остриём влево"] # 0x25c3 + - "◄": [t: "чёрный указатель влево"] # 0x25c4 + - "◅": [t: "белый указатель влево"] # 0x25c5 + - "◆": [t: "чёрный ромб"] # 0x25c6 + - "◇": [t: "белый ромб"] # 0x25c7 + - "◈": [t: "белый ромб, содержащий чёрный маленький ромб"] # 0x25c8 + - "◉": [t: "рыбий глаз"] # 0x25c9 + - "◊": [t: "луковица"] # 0x25ca + - "○": [t: "белый круг"] # 0x25cb + - "◌": [t: "пунктирный круг"] # 0x25cc + - "◍": [t: "круг с вертикальной заливкой"] # 0x25cd + - "◎": [t: "мишень"] # 0x25ce + - "●": [t: "чёрный круг"] # 0x25cf + - "◐": [t: "круг с левой половиной чёрной"] # 0x25d0 + - "◑": [t: "круг с правой половиной чёрной"] # 0x25d1 + - "◒": [t: "круг с нижней половиной чёрной"] # 0x25d2 + - "◓": [t: "круг с верхней половиной чёрной"] # 0x25d3 + - "◔": [t: "круг с верхним правым квадрантом чёрным"] # 0x25d4 + - "◕": [t: "круг со всем, кроме верхнего левого квадранта, чёрным"] # 0x25d5 + - "◖": [t: "левая половина чёрного круга"] # 0x25d6 + - "◗": [t: "правая половина чёрного круга"] # 0x25d7 + - "◘": [t: "инверсный буллит"] # 0x25d8 + - "◙": [t: "инверсный белый круг"] # 0x25d9 + - "◚": [t: "верхняя половина инверсного белого круга"] # 0x25da + - "◛": [t: "нижняя половина инверсного белого круга"] # 0x25db + - "◜": [t: "дуга верхнего левого квадранта"] # 0x25dc + - "◝": [t: "дуга верхнего правого квадранта"] # 0x25dd + - "◞": [t: "дуга нижнего правого квадранта"] # 0x25de + - "◟": [t: "дуга нижнего левого квадранта"] # 0x25df + - "◠": [t: "верхняя половина круга"] # 0x25e0 + - "◡": [t: "нижняя половина круга"] # 0x25e1 + - "◢": [t: "чёрный нижний правый треугольник"] # 0x25e2 + - "◣": [t: "чёрный нижний левый треугольник"] # 0x25e3 + - "◤": [t: "чёрный верхний левый треугольник"] # 0x25e4 + - "◥": [t: "чёрный верхний правый треугольник"] # 0x25e5 + - "◦": [t: "композиция"] # 0x25e6 + - "◧": [t: "квадрат с левой половиной чёрной"] # 0x25e7 + - "◨": [t: "квадрат с правой половиной чёрной"] # 0x25e8 + - "◩": [t: "квадрат с верхней левой половиной чёрной"] # 0x25e9 + - "◪": [t: "квадрат с нижней правой половиной чёрной"] # 0x25ea + - "◫": [t: "белый квадрат с биссектрисой"] # 0x25eb + - "◬": [t: "белый треугольник остриём вверх с точкой"] # 0x25ec + - "◭": [t: "треугольник остриём вверх с левой половиной чёрной"] # 0x25ed + - "◮": [t: "треугольник остриём вверх с правой половиной чёрной"] # 0x25ee + - "◯": [t: "большой круг"] # 0x25ef + - "◰": [t: "белый квадрат с верхним левым квадрантом"] # 0x25f0 + - "◱": [t: "белый квадрат с нижним левым квадрантом"] # 0x25f1 + - "◲": [t: "белый квадрат с нижним правым квадрантом"] # 0x25f2 + - "◳": [t: "белый квадрат с верхним правым квадрантом"] # 0x25f3 + - "◴": [t: "белый круг с верхним левым квадрантом"] # 0x25f4 + - "◵": [t: "белый круг с нижним левым квадрантом"] # 0x25f5 + - "◶": [t: "белый круг с нижним правым квадрантом"] # 0x25f6 + - "◷": [t: "белый круг с верхним правым квадрантом"] # 0x25f7 + - "◸": [t: "верхний левый треугольник"] # 0x25f8 + - "◹": [t: "верхний правый треугольник"] # 0x25f9 + - "◺": [t: "нижний левый треугольник"] # 0x25fa + - "◻": [t: "белый средний квадрат"] # 0x25fb + - "◼": [t: "чёрный средний квадрат"] # 0x25fc + - "◽": [t: "белый средне-маленький квадрат"] # 0x25fd + - "◾": [t: "чёрный средне-маленький квадрат"] # 0x25fe + - "◿": [t: "нижний правый треугольник"] # 0x25ff + - "★": [t: "чёрная звезда"] # 0x2605 + - "☆": [t: "белая звезда"] # 0x2606 + - "☉": [t: "солнце"] # 0x2609 + - "☌": [t: "соединение"] # 0x260c + - "☒": [t: "бюллетень с крестиком"] # 0x2612 + - "☽": [t: "растущая луна"] # 0x263d + - "☾": [t: "убывающая луна"] # 0x263e + - "☿": [t: "Меркурий"] # 0x263f + - "♀": [t: "женский"] # 0x2640 + - "♁": [t: "Земля"] # 0x2641 + - "♂": [t: "мужской"] # 0x2642 + - "♃": [t: "Юпитер"] # 0x2643 + - "♄": [t: "Сатурн"] # 0x2644 + - "♅": [t: "Уран"] # 0x2645 + - "♆": [t: "Нептун"] # 0x2646 + - "♇": [t: "Плутон"] # 0x2647 + - "♈": [t: "Овен"] # 0x2648 + - "♉": [t: "Телец"] # 0x2649 + - "♩": [t: "четвертная нота"] # 0x2669 + - "♭": [t: "бемоль"] # 0x266d + - "♮": [t: "бекар"] # 0x266e + - "♯": [t: "диез"] # 0x266f + - "♠": [t: "чёрная масть пики"] # 0x2660 + - "♡": [t: "белая масть червы"] # 0x2661 + - "♢": [t: "белая масть бубны"] # 0x2662 + - "♣": [t: "чёрная масть трефы"] # 0x2663 + - "♤": [t: "белая масть пики"] # 0x2664 + - "♥": [t: "чёрная масть червы"] # 0x2665 + - "♦": [t: "чёрная масть бубны"] # 0x2666 + - "♧": [t: "белая масть трефы"] # 0x2667 + - "⚀": [t: "кость 1"] # 0x2680 + - "⚁": [t: "кость 2"] # 0x2681 + - "⚂": [t: "кость 3"] # 0x2682 + - "⚃": [t: "кость 4"] # 0x2683 + - "⚄": [t: "кость 5"] # 0x2684 + - "⚅": [t: "кость 6"] # 0x2685 + - "⚆": [t: "белый круг с точкой справа"] # 0x2686 + - "⚇": [t: "белый круг с двумя точками"] # 0x2687 + - "⚈": [t: "чёрный круг с точкой справа"] # 0x2688 + - "⚉": [t: "чёрный круг с двумя точками"] # 0x2689 + - "⚪": [t: "средний белый круг"] # 0x26aa + - "⚫": [t: "средний чёрный круг"] # 0x26ab + - "⚬": [t: "средний маленький белый круг"] # 0x26ac + - "⚲": [t: "средний род"] # 0x26b2 + - "✓": [t: "галочка"] # 0x2713 + - "✠": [t: "мальтийский крест"] # 0x2720 + - "✪": [t: "белая звезда в круге"] # 0x272a + - "✶": [t: "шестиконечная чёрная звезда"] # 0x2736 + - "❨": [t: "средний левый круглый орнамент"] # 0x2768 + - "❩": [t: "средний правый круглый орнамент"] # 0x2769 + - "❪": [t: "средний уплощённый левый круглый орнамент"] # 0x276a + - "❫": [t: "средний уплощённый правый круглый орнамент"] # 0x276b + - "❬": [t: "средний левый угловой орнамент"] # 0x276c + - "❭": [t: "средний правый угловой орнамент"] # 0x276d + - "❮": [t: "жирный левый угловой кавычковый орнамент"] # 0x276e + - "❯": [t: "жирный правый угловой кавычковый орнамент"] # 0x276f + - "❰": [t: "жирный левый угловой орнамент"] # 0x2770 + - "❱": [t: "жирный правый угловой орнамент"] # 0x2771 + - "❲": [t: "лёгкий левый черепаший орнамент"] # 0x2772 + - "❳": [t: "лёгкий правый черепаший орнамент"] # 0x2773 + - "❴": [t: "средний левый фигурный орнамент"] # 0x2774 + - "❵": [t: "средний правый фигурный орнамент"] # 0x2775 + - "❶": [t: "один в чёрном круге"] # 0x2776 + - "❷": [t: "два в чёрном круге"] # 0x2777 + - "❸": [t: "три в чёрном круге"] # 0x2778 + - "❹": [t: "четыре в чёрном круге"] # 0x2779 + - "❺": [t: "пять в чёрном круге"] # 0x277a + - "❻": [t: "шесть в чёрном круге"] # 0x277b + - "❼": [t: "семь в чёрном круге"] # 0x277c + - "❽": [t: "восемь в чёрном круге"] # 0x277d + - "❾": [t: "девять в чёрном круге"] # 0x277e + - "❿": [t: "десять в чёрном круге"] # 0x277f + - "➀": [t: "один в круге без засечек"] # 0x2780 + - "➁": [t: "два в круге без засечек"] # 0x2781 + - "➂": [t: "три в круге без засечек"] # 0x2782 + - "➃": [t: "четыре в круге без засечек"] # 0x2783 + - "➄": [t: "пять в круге без засечек"] # 0x2784 + - "➅": [t: "шесть в круге без засечек"] # 0x2785 + - "➆": [t: "семь в круге без засечек"] # 0x2786 + - "➇": [t: "восемь в круге без засечек"] # 0x2787 + - "➈": [t: "девять в круге без засечек"] # 0x2788 + - "➉": [t: "десять в круге без засечек"] # 0x2789 + - "➊": [t: "один в чёрном круге без засечек"] # 0x278a + - "➋": [t: "два в чёрном круге без засечек"] # 0x278b + - "➌": [t: "три в чёрном круге без засечек"] # 0x278c + - "➍": [t: "четыре в чёрном круге без засечек"] # 0x278d + - "➎": [t: "пять в чёрном круге без засечек"] # 0x278e + - "➏": [t: "шесть в чёрном круге без засечек"] # 0x278f + - "➐": [t: "семь в чёрном круге без засечек"] # 0x2790 + - "➑": [t: "восемь в чёрном круге без засечек"] # 0x2791 + - "➒": [t: "девять в чёрном круге без засечек"] # 0x2792 + - "➓": [t: "десять в чёрном круге без засечек"] # 0x2793 + - "➔": [t: "жирная широкая стрелка вправо"] # 0x2794 + - "➕": [t: "жирный знак плюс"] # 0x2795 + - "➖": [t: "жирный знак минус"] # 0x2796 + - "➗": [t: "жирный знак деления"] # 0x2797 + - "➘": [t: "жирная стрелка на юго-восток"] # 0x2798 + - "➙": [t: "жирная стрелка вправо"] # 0x2799 + - "➚": [t: "жирная стрелка на северо-восток"] # 0x279a + - "➛": [t: "стрелка вправо с чертёжным наконечником"] # 0x279b + - "➜": [t: "жирная стрелка вправо с закруглённым наконечником"] # 0x279c + - "➝": [t: "стрелка вправо с треугольным наконечником"] # 0x279d + - "➞": [t: "жирная стрелка вправо с треугольным наконечником"] # 0x279e + - "➟": [t: "пунктирная стрелка вправо с треугольным наконечником"] # 0x279f + - "➠": [t: "жирная пунктирная стрелка вправо с треугольным наконечником"] # 0x27a0 + - "➡": [t: "чёрная стрелка вправо"] # 0x27a1 + - "➢": [t: "трёхмерная стрелка вправо с верхней подсветкой"] # 0x27a2 + - "➣": [t: "трёхмерная стрелка вправо с нижней подсветкой"] # 0x27a3 + - "➤": [t: "чёрный наконечник стрелки вправо"] # 0x27a4 + - "➥": [t: "жирная чёрная изогнутая вниз и вправо стрелка"] # 0x27a5 + - "➦": [t: "жирная чёрная изогнутая вверх и вправо стрелка"] # 0x27a6 + - "➧": [t: "приземистая чёрная стрелка вправо"] # 0x27a7 + - "➨": [t: "жирная чёрная стрелка вправо с вогнутым наконечником"] # 0x27a8 + - "➩": [t: "белая стрелка вправо с правой тенью"] # 0x27a9 + - "➪": [t: "белая стрелка вправо с левой тенью"] # 0x27aa + - "➫": [t: "белая стрелка вправо с задней наклонной тенью"] # 0x27ab + - "➬": [t: "белая стрелка вправо с передней наклонной тенью"] # 0x27ac + - "➭": [t: "белая стрелка вправо с жирной нижней правой тенью"] # 0x27ad + - "➮": [t: "белая стрелка вправо с жирной верхней правой тенью"] # 0x27ae + - "➯": [t: "белая стрелка вправо с нижней правой тенью и зарубкой"] # 0x27af + - "➱": [t: "белая стрелка вправо с верхней правой тенью и зарубкой"] # 0x27b1 + - "➲": [t: "жирная белая стрелка вправо в круге"] # 0x27b2 + - "➳": [t: "белая оперённая стрелка вправо"] # 0x27b3 + - "➴": [t: "чёрная оперённая стрелка на юго-восток"] # 0x27b4 + - "➵": [t: "чёрная оперённая стрелка вправо"] # 0x27b5 + - "➶": [t: "чёрная оперённая стрелка на северо-восток"] # 0x27b6 + - "➷": [t: "жирная чёрная оперённая стрелка на юго-восток"] # 0x27b7 + - "➸": [t: "жирная чёрная оперённая стрелка вправо"] # 0x27b8 + - "➹": [t: "жирная чёрная оперённая стрелка на северо-восток"] # 0x27b9 + - "➺": [t: "стрелка вправо с каплевидным наконечником"] # 0x27ba + - "➻": [t: "жирная стрелка вправо с каплевидным древком"] # 0x27bb + - "➼": [t: "стрелка вправо с клиновидным хвостом"] # 0x27bc + - "➽": [t: "жирная стрелка вправо с клиновидным хвостом"] # 0x27bd + - "➾": [t: "контурная стрелка вправо"] # 0x27be + - "⟀": [t: "трёхмерный угол"] # 0x27c0 + - "⟁": [t: "белый треугольник, содержащий маленький белый треугольник"] # 0x27c1 + - "⟂": # 0x27c2 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "перпендикуляром к" + - "⟃": # 0x27c3 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "открытым подмножеством" + - "⟄": # 0x27c4 + - test: + if: "$Verbosity!='Terse'" + then: [t: "является"] + - t: "открытым надмножеством" + - "⟅": [t: "левый S-образный разделитель"] # 0x27c5 + - "⟆": [t: "правый S-образный разделитель"] # 0x27c6 + - "⟇": [t: "или с точкой внутри"] # 0x27c7 + - "⟈": [t: "обратная косая перед подмножеством"] # 0x27c8 + - "⟉": [t: "надмножество перед косой"] # 0x27c9 + - "⟊": [t: "вертикальная черта с горизонтальным штрихом"] # 0x27ca + - "⟋": [t: "математическая восходящая диагональ"] # 0x27cb + - "⟌": [t: "длинное деление"] # 0x27cc + - "⟍": [t: "математическая нисходящая диагональ"] # 0x27cd + - "⟎": [t: "квадратное логическое и"] # 0x27ce + - "⟏": [t: "квадратное логическое или"] # 0x27cf + - "⟐": [t: "белый ромб с центральной точкой"] # 0x27d0 + - "⟑": [t: "и с точкой"] # 0x27d1 + - "⟒": [t: "элемент, открывающийся вверх"] # 0x27d2 + - "⟓": [t: "нижний правый угол с точкой"] # 0x27d3 + - "⟔": [t: "верхний левый угол с точкой"] # 0x27d4 + - "⟕": [t: "левое внешнее соединение"] # 0x27d5 + - "⟖": [t: "правое внешнее соединение"] # 0x27d6 + - "⟗": [t: "полное внешнее соединение"] # 0x27d7 + - "⟘": [t: "большой верхний таск"] # 0x27d8 + - "⟙": [t: "большой нижний таск"] # 0x27d9 + - "⟚": [t: "левый и правый двойной турникет"] # 0x27da + - "⟛": [t: "левый и правый таск"] # 0x27db + - "⟜": [t: "левое мультиотображение"] # 0x27dc + - "⟝": [t: "длинный правый таск"] # 0x27dd + - "⟞": [t: "длинный левый таск"] # 0x27de + - "⟟": [t: "верхний таск с кругом сверху"] # 0x27df + - "⟠": [t: "луковица, разделённая горизонтальной линией"] # 0x27e0 + - "⟡": [t: "белый вогнутый ромб"] # 0x27e1 + - "⟢": [t: "белый вогнутый ромб с левой отметкой"] # 0x27e2 + - "⟣": [t: "белый вогнутый ромб с правой отметкой"] # 0x27e3 + - "⟤": [t: "белый квадрат с левой отметкой"] # 0x27e4 + - "⟥": [t: "белый квадрат с правой отметкой"] # 0x27e5 + - "⟦": [t: "левая белая квадратная скобка"] # 0x27e6 + - "⟧": [t: "правая белая квадратная скобка"] # 0x27e7 + - "⟨": [t: "левая угловая скобка"] # 0x27e8 + - "⟩": [t: "правая угловая скобка"] # 0x27e9 + - "⟪": [t: "левая двойная угловая скобка"] # 0x27ea + - "⟫": [t: "правая двойная угловая скобка"] # 0x27eb + - "⟬": [t: "левая белая черепашья скобка"] # 0x27ec + - "⟭": [t: "правая белая черепашья скобка"] # 0x27ed + - "⟮": [t: "левая уплощённая скобка"] # 0x27ee + - "⟯": [t: "правая уплощённая скобка"] # 0x27ef + - "⟰": [t: "верхняя четверная стрелка"] # 0x27f0 + - "⟱": [t: "нижняя четверная стрелка"] # 0x27f1 + - "⟲": [t: "круговая стрелка против часовой с разрывом"] # 0x27f2 + - "⟳": [t: "круговая стрелка по часовой с разрывом"] # 0x27f3 + - "⟴": [t: "стрелка вправо с плюсом в круге"] # 0x27f4 + - "⟵": [t: "длинная стрелка влево"] # 0x27f5 + - "⟶": [t: "длинная стрелка вправо"] # 0x27f6 + - "⟷": [t: "длинная стрелка влево-вправо"] # 0x27f7 + - "⟸": [t: "длинная левая двойная стрелка"] # 0x27f8 + - "⟹": [t: "следует"] # 0x27f9 + - "⟺": [t: "тогда и только тогда"] # 0x27fa + - "⟻": [t: "длинная стрелка влево от черты"] # 0x27fb + - "⟼": [t: "длинная стрелка вправо от черты"] # 0x27fc + - "⟽": [t: "длинная левая двойная стрелка от черты"] # 0x27fd + - "⟾": [t: "длинная правая двойная стрелка от черты"] # 0x27fe + - "⟿": [t: "длинная волнистая стрелка вправо"] # 0x27ff + - "⤀": [t: "стрелка вправо с двумя наконечниками и вертикальным штрихом"] # 0x2900 + - "⤁": [t: "стрелка вправо с двумя наконечниками и двойным вертикальным штрихом"] # 0x2901 + - "⤂": [t: "левая двойная стрелка с вертикальным штрихом"] # 0x2902 + - "⤃": [t: "правая двойная стрелка с вертикальным штрихом"] # 0x2903 + - "⤄": [t: "двойная стрелка влево-вправо с вертикальным штрихом"] # 0x2904 + - "⤅": [t: "стрелка вправо с двумя наконечниками от черты"] # 0x2905 + - "⤆": [t: "левая двойная стрелка от черты"] # 0x2906 + - "⤇": [t: "правая двойная стрелка от черты"] # 0x2907 + - "⤈": [t: "стрелка вниз с горизонтальным штрихом"] # 0x2908 + - "⤉": [t: "стрелка вверх с горизонтальным штрихом"] # 0x2909 + - "⤊": [t: "верхняя тройная стрелка"] # 0x290a + - "⤋": [t: "нижняя тройная стрелка"] # 0x290b + - "⤌": [t: "левая двойная пунктирная стрелка"] # 0x290c + - "⤍": [t: "правая двойная пунктирная стрелка"] # 0x290d + - "⤎": [t: "левая тройная пунктирная стрелка"] # 0x290e + - "⤏": [t: "правая тройная пунктирная стрелка"] # 0x290f + - "⤐": [t: "стрелка вправо с двумя наконечниками и тройным пунктиром"] # 0x2910 + - "⤑": [t: "стрелка вправо с пунктирным стволом"] # 0x2911 + - "⤒": [t: "стрелка вверх к черте"] # 0x2912 + - "⤓": [t: "стрелка вниз к черте"] # 0x2913 + - "⤔": [t: "стрелка вправо с хвостом и вертикальным штрихом"] # 0x2914 + - "⤕": [t: "стрелка вправо с хвостом и двойным вертикальным штрихом"] # 0x2915 + - "⤖": [t: "стрелка вправо с двумя наконечниками и хвостом"] # 0x2916 + - "⤗": [t: "стрелка вправо с двумя наконечниками, хвостом и вертикальным штрихом"] # 0x2917 + - "⤘": [t: "стрелка вправо с двумя наконечниками, хвостом и двойным вертикальным штрихом"] # 0x2918 + - "⤙": [t: "хвост стрелки влево"] # 0x2919 + - "⤚": [t: "хвост стрелки вправо"] # 0x291a + - "⤛": [t: "хвост левой двойной стрелки"] # 0x291b + - "⤜": [t: "хвост правой двойной стрелки"] # 0x291c + - "⤝": [t: "стрелка влево к залитому ромбу"] # 0x291d + - "⤞": [t: "стрелка вправо к залитому ромбу"] # 0x291e + - "⤟": [t: "стрелка влево от черты к залитому ромбу"] # 0x291f + - "⤠": [t: "стрелка вправо от черты к залитому ромбу"] # 0x2920 + - "⤡": [t: "стрелка на северо-запад и юго-восток"] # 0x2921 + - "⤢": [t: "стрелка на северо-восток и юго-запад"] # 0x2922 + - "⤣": [t: "стрелка на северо-запад с крюком"] # 0x2923 + - "⤤": [t: "стрелка на северо-восток с крюком"] # 0x2924 + - "⤥": [t: "стрелка на юго-восток с крюком"] # 0x2925 + - "⤦": [t: "стрелка на юго-запад с крюком"] # 0x2926 + - "⤧": [t: "стрелка на северо-запад и северо-восток"] # 0x2927 + - "⤨": [t: "стрелка на северо-восток и юго-восток"] # 0x2928 + - "⤩": [t: "стрелка на юго-восток и юго-запад"] # 0x2929 + - "⤪": [t: "стрелка на юго-запад и северо-запад"] # 0x292a + - "⤫": [t: "восходящая диагональ пересекает нисходящую"] # 0x292b + - "⤬": [t: "нисходящая диагональ пересекает восходящую"] # 0x292c + - "⤭": [t: "стрелка на юго-восток пересекает стрелку на северо-восток"] # 0x292d + - "⤮": [t: "стрелка на северо-восток пересекает стрелку на юго-восток"] # 0x292e + - "⤯": [t: "нисходящая диагональ пересекает стрелку на северо-восток"] # 0x292f + - "⤰": [t: "восходящая диагональ пересекает стрелку на юго-восток"] # 0x2930 + - "⤱": [t: "стрелка на северо-восток пересекает стрелку на северо-запад"] # 0x2931 + - "⤲": [t: "стрелка на северо-запад пересекает стрелку на северо-восток"] # 0x2932 + - "⤳": [t: "волновая стрелка, указывающая прямо вправо"] # 0x2933 + - "⤴": [t: "стрелка вправо, затем изгибается вверх"] # 0x2934 + - "⤵": [t: "стрелка вправо, затем изгибается вниз"] # 0x2935 + - "⤶": [t: "стрелка вниз, затем изгибается влево"] # 0x2936 + - "⤷": [t: "стрелка вниз, затем изгибается вправо"] # 0x2937 + - "⤸": [t: "дуговая стрелка по часовой с правой стороны"] # 0x2938 + - "⤹": [t: "дуговая стрелка против часовой с левой стороны"] # 0x2939 + - "⤺": [t: "верхняя дуговая стрелка против часовой"] # 0x293a + - "⤻": [t: "нижняя дуговая стрелка против часовой"] # 0x293b + - "⤼": [t: "верхняя дуговая стрелка по часовой с минусом"] # 0x293c + - "⤽": [t: "верхняя дуговая стрелка против часовой с плюсом"] # 0x293d + - "⤾": [t: "нижняя правая полукруглая стрелка по часовой"] # 0x293e + - "⤿": [t: "нижняя левая полукруглая стрелка против часовой"] # 0x293f + - "⥀": [t: "замкнутая круговая стрелка против часовой"] # 0x2940 + - "⥁": [t: "замкнутая круговая стрелка по часовой"] # 0x2941 + - "⥂": [t: "стрелка вправо над короткой стрелкой влево"] # 0x2942 + - "⥃": [t: "стрелка влево над короткой стрелкой вправо"] # 0x2943 + - "⥄": [t: "короткая стрелка вправо над стрелкой влево"] # 0x2944 + - "⥅": [t: "стрелка вправо с плюсом снизу"] # 0x2945 + - "⥆": [t: "стрелка влево с плюсом снизу"] # 0x2946 + - "⥇": [t: "стрелка вправо сквозь x"] # 0x2947 + - "⥈": [t: "стрелка влево-вправо сквозь круг"] # 0x2948 + - "⥉": [t: "стрелка вверх с двумя наконечниками из круга"] # 0x2949 + - "⥊": [t: "левый гарпун вверх, правый гарпун вниз"] # 0x294a + - "⥋": [t: "левый гарпун вниз, правый гарпун вверх"] # 0x294b + - "⥌": [t: "верхний гарпун вправо, нижний гарпун влево"] # 0x294c + - "⥍": [t: "верхний гарпун влево, нижний гарпун вправо"] # 0x294d + - "⥎": [t: "левый гарпун вверх, правый гарпун вверх"] # 0x294e + - "⥏": [t: "верхний гарпун вправо, нижний гарпун вправо"] # 0x294f + - "⥐": [t: "левый гарпун вниз, правый гарпун вниз"] # 0x2950 + - "⥑": [t: "верхний гарпун влево, нижний гарпун влево"] # 0x2951 + - "⥒": [t: "левый гарпун вверх к черте"] # 0x2952 + - "⥓": [t: "правый гарпун вверх к черте"] # 0x2953 + - "⥔": [t: "верхний гарпун вправо к черте"] # 0x2954 + - "⥕": [t: "нижний гарпун вправо к черте"] # 0x2955 + - "⥖": [t: "левый гарпун вниз к черте"] # 0x2956 + - "⥗": [t: "правый гарпун вниз к черте"] # 0x2957 + - "⥘": [t: "верхний гарпун влево к черте"] # 0x2958 + - "⥙": [t: "нижний гарпун влево к черте"] # 0x2959 + - "⥚": [t: "левый гарпун вверх от черты"] # 0x295a + - "⥛": [t: "правый гарпун вверх от черты"] # 0x295b + - "⥜": [t: "верхний гарпун вправо от черты"] # 0x295c + - "⥝": [t: "нижний гарпун вправо от черты"] # 0x295d + - "⥞": [t: "левый гарпун вниз от черты"] # 0x295e + - "⥟": [t: "правый гарпун вниз от черты"] # 0x295f + - "⥠": [t: "верхний гарпун влево от черты"] # 0x2960 + - "⥡": [t: "нижний гарпун влево от черты"] # 0x2961 + - "⥢": [t: "левый гарпун вверх над левым гарпуном вниз"] # 0x2962 + - "⥣": [t: "верхний гарпун влево рядом с верхним гарпуном вправо"] # 0x2963 + - "⥤": [t: "правый гарпун вверх над правым гарпуном вниз"] # 0x2964 + - "⥥": [t: "нижний гарпун влево рядом с нижним гарпуном вправо"] # 0x2965 + - "⥦": [t: "левый гарпун вверх над правым гарпуном вверх"] # 0x2966 + - "⥧": [t: "левый гарпун вниз над правым гарпуном вниз"] # 0x2967 + - "⥨": [t: "правый гарпун вверх над левым гарпуном вверх"] # 0x2968 + - "⥩": [t: "правый гарпун вниз над левым гарпуном вниз"] # 0x2969 + - "⥪": [t: "левый гарпун вверх над длинным тире"] # 0x296a + - "⥫": [t: "левый гарпун вниз под длинным тире"] # 0x296b + - "⥬": [t: "правый гарпун вверх над длинным тире"] # 0x296c + - "⥭": [t: "правый гарпун вниз под длинным тире"] # 0x296d + - "⥮": [t: "верхний гарпун влево рядом с нижним гарпуном вправо"] # 0x296e + - "⥯": [t: "нижний гарпун влево рядом с верхним гарпуном вправо"] # 0x296f + - "⥰": [t: "правая двойная стрелка с закруглённой головкой"] # 0x2970 + - "⥱": [t: "равно над стрелкой вправо"] # 0x2971 + - "⥲": [t: "тильда над стрелкой вправо"] # 0x2972 + - "⥳": [t: "стрелка влево над тильдой"] # 0x2973 + - "⥴": [t: "стрелка вправо над тильдой"] # 0x2974 + - "⥵": [t: "стрелка вправо над почти равно"] # 0x2975 + - "⥶": [t: "меньше над стрелкой влево"] # 0x2976 + - "⥷": [t: "стрелка влево сквозь меньше"] # 0x2977 + - "⥸": [t: "больше над стрелкой вправо"] # 0x2978 + - "⥹": [t: "подмножество над стрелкой вправо"] # 0x2979 + - "⥺": [t: "стрелка влево сквозь подмножество"] # 0x297a + - "⥻": [t: "надмножество над стрелкой влево"] # 0x297b + - "⥼": [t: "левый рыбий хвост"] # 0x297c + - "⥽": [t: "правый рыбий хвост"] # 0x297d + - "⥾": [t: "верхний рыбий хвост"] # 0x297e + - "⥿": [t: "нижний рыбий хвост"] # 0x297f + - "⦀": [t: "тройная вертикальная черта-разделитель"] # 0x2980 + - "⦁": [t: "Z-нотация пятно"] # 0x2981 + - "⦂": [t: "Z-нотация типовое двоеточие"] # 0x2982 + - "⦃": [t: "левая белая фигурная скобка"] # 0x2983 + - "⦄": [t: "правая белая фигурная скобка"] # 0x2984 + - "⦅": [t: "левая белая скобка"] # 0x2985 + - "⦆": [t: "правая белая скобка"] # 0x2986 + - "⦇": [t: "Z-нотация левая скобка образа"] # 0x2987 + - "⦈": [t: "Z-нотация правая скобка образа"] # 0x2988 + - "⦉": [t: "Z-нотация левая скобка связывания"] # 0x2989 + - "⦊": [t: "Z-нотация правая скобка связывания"] # 0x298a + - "⦋": [t: "левая квадратная скобка с подчёркиванием"] # 0x298b + - "⦌": [t: "правая квадратная скобка с подчёркиванием"] # 0x298c + - "⦍": [t: "левая квадратная скобка с отметкой в верхнем углу"] # 0x298d + - "⦎": [t: "правая квадратная скобка с отметкой в нижнем углу"] # 0x298e + - "⦏": [t: "левая квадратная скобка с отметкой в нижнем углу"] # 0x298f + - "⦐": [t: "правая квадратная скобка с отметкой в верхнем углу"] # 0x2990 + - "⦑": [t: "левая угловая скобка с точкой"] # 0x2991 + - "⦒": [t: "правая угловая скобка с точкой"] # 0x2992 + - "⦓": [t: "левая дуговая скобка меньше"] # 0x2993 + - "⦔": [t: "правая дуговая скобка больше"] # 0x2994 + - "⦕": [t: "двойная левая дуговая скобка больше"] # 0x2995 + - "⦖": [t: "двойная правая дуговая скобка меньше"] # 0x2996 + - "⦗": [t: "левая чёрная черепашья скобка"] # 0x2997 + - "⦘": [t: "правая чёрная черепашья скобка"] # 0x2998 + - "⦙": [t: "пунктирный забор"] # 0x2999 + - "⦚": [t: "вертикальная зигзагообразная линия"] # 0x299a + - "⦛": [t: "измеренный угол, открытый влево"] # 0x299b + - "⦜": [t: "вариант прямого угла с квадратом"] # 0x299c + - "⦝": [t: "измеренный прямой угол с точкой"] # 0x299d + - "⦞": [t: "угол с s внутри"] # 0x299e + - "⦟": [t: "острый угол"] # 0x299f + - "⦠": [t: "сферический угол, открытый влево"] # 0x29a0 + - "⦡": [t: "сферический угол, открытый вверх"] # 0x29a1 + - "⦢": [t: "перевёрнутый угол"] # 0x29a2 + - "⦣": [t: "обратный угол"] # 0x29a3 + - "⦤": [t: "угол с подчёркиванием"] # 0x29a4 + - "⦥": [t: "обратный угол с подчёркиванием"] # 0x29a5 + - "⦦": [t: "косой угол, открытый вверх"] # 0x29a6 + - "⦧": [t: "косой угол, открытый вниз"] # 0x29a7 + - "⦨": [t: "измеренный угол с открытым лучом, заканчивающимся стрелкой вверх и вправо"] # 0x29a8 + - "⦩": [t: "измеренный угол с открытым лучом, заканчивающимся стрелкой вверх и влево"] # 0x29a9 + - "⦪": [t: "измеренный угол с открытым лучом, заканчивающимся стрелкой вниз и вправо"] # 0x29aa + - "⦫": [t: "измеренный угол с открытым лучом, заканчивающимся стрелкой вниз и влево"] # 0x29ab + - "⦬": [t: "измеренный угол с открытым лучом, заканчивающимся стрелкой вправо и вверх"] # 0x29ac + - "⦭": [t: "измеренный угол с открытым лучом, заканчивающимся стрелкой влево и вверх"] # 0x29ad + - "⦮": [t: "измеренный угол с открытым лучом, заканчивающимся стрелкой вправо и вниз"] # 0x29ae + - "⦯": [t: "измеренный угол с открытым лучом, заканчивающимся стрелкой влево и вниз"] # 0x29af + - "⦰": [t: "обратное пустое множество"] # 0x29b0 + - "⦱": [t: "пустое множество с надчёркиванием"] # 0x29b1 + - "⦲": [t: "пустое множество с маленьким кругом сверху"] # 0x29b2 + - "⦳": [t: "пустое множество со стрелкой вправо сверху"] # 0x29b3 + - "⦴": [t: "пустое множество со стрелкой влево сверху"] # 0x29b4 + - "⦵": [t: "круг с горизонтальной чертой"] # 0x29b5 + - "⦶": [t: "вертикальная черта в круге"] # 0x29b6 + - "⦷": [t: "параллельность в круге"] # 0x29b7 + - "⦸": [t: "обратная косая черта в круге"] # 0x29b8 + - "⦹": [t: "перпендикуляр в круге"] # 0x29b9 + - "⦺": [t: "круг, разделённый горизонтальной чертой, верхняя половина разделена вертикальной чертой"] # 0x29ba + - "⦻": [t: "круг с наложенным x"] # 0x29bb + - "⦼": [t: "знак деления, повёрнутый против часовой в круге"] # 0x29bc + - "⦽": [t: "стрелка вверх сквозь круг"] # 0x29bd + - "⦾": [t: "белый буллит в круге"] # 0x29be + - "⦿": [t: "буллит в круге"] # 0x29bf + - "⧀": [t: "меньше в круге"] # 0x29c0 + - "⧁": [t: "больше в круге"] # 0x29c1 + - "⧂": [t: "круг с маленьким кругом справа"] # 0x29c2 + - "⧃": [t: "круг с двумя горизонтальными штрихами справа"] # 0x29c3 + - "⧄": [t: "квадратная восходящая диагональная черта"] # 0x29c4 + - "⧅": [t: "квадратная нисходящая диагональная черта"] # 0x29c5 + - "⧆": [t: "звёздочка в квадрате"] # 0x29c6 + - "⧇": [t: "маленький круг в квадрате"] # 0x29c7 + - "⧈": [t: "квадрат в квадрате"] # 0x29c8 + - "⧉": [t: "два соединённых квадрата"] # 0x29c9 + - "⧊": [t: "треугольник с точкой сверху"] # 0x29ca + - "⧋": [t: "треугольник с подчёркиванием"] # 0x29cb + - "⧌": [t: "s в треугольнике"] # 0x29cc + - "⧍": [t: "треугольник с засечками внизу"] # 0x29cd + - "⧎": [t: "правый треугольник над левым треугольником"] # 0x29ce + - "⧏": [t: "левый треугольник рядом с вертикальной чертой"] # 0x29cf + - "⧐": [t: "вертикальная черта рядом с правым треугольником"] # 0x29d0 + - "⧑": [t: "бантик с левой половиной чёрной"] # 0x29d1 + - "⧒": [t: "бантик с правой половиной чёрной"] # 0x29d2 + - "⧓": [t: "чёрный бантик"] # 0x29d3 + - "⧔": [t: "крест с левой половиной чёрной"] # 0x29d4 + - "⧕": [t: "крест с правой половиной чёрной"] # 0x29d5 + - "⧖": [t: "белые песочные часы"] # 0x29d6 + - "⧗": [t: "чёрные песочные часы"] # 0x29d7 + - "⧘": [t: "левый волнистый забор"] # 0x29d8 + - "⧙": [t: "правый волнистый забор"] # 0x29d9 + - "⧚": [t: "левый двойной волнистый забор"] # 0x29da + - "⧛": [t: "правый двойной волнистый забор"] # 0x29db + - "⧜": [t: "неполная бесконечность"] # 0x29dc + - "⧝": [t: "лигатура над бесконечностью"] # 0x29dd + - "⧞": [t: "бесконечность, перечёркнутая вертикальной чертой"] # 0x29de + - "⧟": [t: "двустороннее мультиотображение"] # 0x29df + - "⧠": [t: "квадрат с контурным очертанием"] # 0x29e0 + - "⧡": [t: "возрастает как"] # 0x29e1 + - "⧢": [t: "шаффл-произведение"] # 0x29e2 + - "⧣": [t: "знак равенства и наклонная параллельность"] # 0x29e3 + - "⧤": [t: "знак равенства и наклонная параллельность с тильдой сверху"] # 0x29e4 + - "⧥": [t: "тождественно и наклонная параллельность"] # 0x29e5 + - "⧦": [t: "равносильно"] # 0x29e6 + - "⧧": [t: "термодинамический"] # 0x29e7 + - "⧨": [t: "треугольник остриём вниз с левой половиной чёрной"] # 0x29e8 + - "⧩": [t: "треугольник остриём вниз с правой половиной чёрной"] # 0x29e9 + - "⧪": [t: "чёрный ромб со стрелкой вниз"] # 0x29ea + - "⧫": [t: "чёрная луковица"] # 0x29eb + - "⧬": [t: "белый круг со стрелкой вниз"] # 0x29ec + - "⧭": [t: "чёрный круг со стрелкой вниз"] # 0x29ed + - "⧮": [t: "белый квадрат с планками погрешностей"] # 0x29ee + - "⧯": [t: "чёрный квадрат с планками погрешностей"] # 0x29ef + - "⧰": [t: "белый ромб с планками погрешностей"] # 0x29f0 + - "⧱": [t: "чёрный ромб с планками погрешностей"] # 0x29f1 + - "⧲": [t: "белый круг с планками погрешностей"] # 0x29f2 + - "⧳": [t: "чёрный круг с планками погрешностей"] # 0x29f3 + - "⧴": [t: "отложенное правило"] # 0x29f4 + - "⧵": [t: "оператор обратная косая черта"] # 0x29f5 + - "⧶": [t: "косая черта с надчёркиванием"] # 0x29f6 + - "⧷": [t: "обратная косая черта с горизонтальным штрихом"] # 0x29f7 + - "⧸": [t: "большая косая черта"] # 0x29f8 + - "⧹": [t: "большая обратная косая черта"] # 0x29f9 + - "⧺": [t: "двойной плюс"] # 0x29fa + - "⧻": [t: "тройной плюс"] # 0x29fb + - "⧼": [t: "левая изогнутая угловая скобка"] # 0x29fc + - "⧽": [t: "правая изогнутая угловая скобка"] # 0x29fd + - "⧾": [t: "крошечный"] # 0x29fe + - "⧿": [t: "малюсенький"] # 0x29ff + - "⨀": [t: "оператор точка в круге"] # 0x2a00 + - "⨁": [t: "оператор плюс в круге"] # 0x2a01 + - "⨂": [t: "оператор умножить в круге"] # 0x2a02 + - "⨃": [t: "оператор объединение с точкой"] # 0x2a03 + - "⨄": [t: "оператор объединение с плюсом"] # 0x2a04 + - "⨅": [t: "оператор квадратное пересечение"] # 0x2a05 + - "⨆": [t: "оператор квадратное объединение"] # 0x2a06 + - "⨇": [t: "оператор двойное логическое и"] # 0x2a07 + - "⨈": [t: "оператор двойное логическое или"] # 0x2a08 + - "⨉": [t: "оператор умножения"] # 0x2a09 + - "⨊": [t: "сумма по модулю два"] # 0x2a0a + - "⨋": [t: "суммирование с интегралом"] # 0x2a0b + - "⨌": [t: "оператор четверной интеграл"] # 0x2a0c + - "⨍": [t: "интеграл конечной части"] # 0x2a0d + - "⨎": [t: "интеграл с двойным штрихом"] # 0x2a0e + - "⨏": [t: "интегральное среднее с косой чертой"] # 0x2a0f + - "⨐": [t: "функция циркуляции"] # 0x2a10 + - "⨑": [t: "интеграл против часовой"] # 0x2a11 + - "⨒": [t: "линейный интеграл с прямоугольным путём вокруг полюса"] # 0x2a12 + - "⨓": [t: "линейный интеграл с полукруглым путём вокруг полюса"] # 0x2a13 + - "⨔": [t: "линейный интеграл, не включающий полюс"] # 0x2a14 + - "⨕": [t: "оператор интеграл вокруг точки"] # 0x2a15 + - "⨖": [t: "оператор интеграл кватерниона"] # 0x2a16 + - "⨗": [t: "интеграл со стрелкой влево с крюком"] # 0x2a17 + - "⨘": [t: "интеграл со знаком умножения"] # 0x2a18 + - "⨙": [t: "интеграл с пересечением"] # 0x2a19 + - "⨚": [t: "интеграл с объединением"] # 0x2a1a + - "⨛": [t: "интеграл с надчёркиванием"] # 0x2a1b + - "⨜": [t: "интеграл с подчёркиванием"] # 0x2a1c + - "⨝": [t: "соединение"] # 0x2a1d + - "⨞": [t: "оператор большой левый треугольник"] # 0x2a1e + - "⨟": [t: "Z-нотация композиция схемы"] # 0x2a1f + - "⨠": [t: "Z-нотация конвейер схемы"] # 0x2a20 + - "⨡": [t: "Z-нотация проекция схемы"] # 0x2a21 + - "⨢": [t: "знак плюс с кругом сверху"] # 0x2a22 + - "⨣": [t: "знак плюс с циркумфлексом сверху"] # 0x2a23 + - "⨤": [t: "знак плюс с тильдой сверху"] # 0x2a24 + - "⨥": [t: "знак плюс с точкой снизу"] # 0x2a25 + - "⨦": [t: "знак плюс с тильдой снизу"] # 0x2a26 + - "⨧": [t: "знак плюс с индексом два"] # 0x2a27 + - "⨨": [t: "знак плюс с чёрным треугольником"] # 0x2a28 + - "⨩": [t: "знак минус с запятой сверху"] # 0x2a29 + - "⨪": [t: "знак минус с точкой снизу"] # 0x2a2a + - "⨫": [t: "знак минус с падающими точками"] # 0x2a2b + - "⨬": [t: "знак минус с растущими точками"] # 0x2a2c + - "⨭": [t: "знак плюс в левой половине круга"] # 0x2a2d + - "⨮": [t: "знак плюс в правой половине круга"] # 0x2a2e + - "⨯": # 0x2a2f - test: if: "$Verbosity='Terse'" - then: [t: "крест"] # (en: 'cross', google translation) - else: [t: "кросс -продукт"] # (en: 'cross product', google translation) - - "⨰": [t: "знак умножения с точкой выше"] # 0x2a30 (en: 'multiplication sign with dot above', google translation) - - "⨱": [t: "знак умножения с помощью подножия"] # 0x2a31 (en: 'multiplication sign with underbar', google translation) - - "⨲": [t: "семидажный продукт с нижней частью закрыта"] # 0x2a32 (en: 'semidirect product with bottom closed', google translation) - - "⨳": [t: "разбить продукт"] # 0x2a33 (en: 'smash product', google translation) - - "⨴": [t: "знак умножения в левом половине круга"] # 0x2a34 (en: 'multiplication sign in left half circle', google translation) - - "⨵": [t: "умножение подписывает правый половину круга"] # 0x2a35 (en: 'multiplication sign in right half circle', google translation) - - "⨶": [t: "кольвный знак умножения с акцентом на округ"] # 0x2a36 (en: 'circled multiplication sign with circumflex accent', google translation) - - "⨷": [t: "знак умножения в двойном круге"] # 0x2a37 (en: 'multiplication sign in double circle', google translation) - - "⨸": [t: "знак окружающего дивизиона"] # 0x2a38 (en: 'circled division sign', google translation) - - "⨹": [t: "плюс знак в треугольнике"] # 0x2a39 (en: 'plus sign in triangle', google translation) - - "⨺": [t: "минус знак в треугольнике"] # 0x2a3a (en: 'minus sign in triangle', google translation) - - "⨻": [t: "знак умножения в треугольнике"] # 0x2a3b (en: 'multiplication sign in triangle', google translation) - - "⨼": [t: "интерьер продукт"] # 0x2a3c (en: 'interior product', google translation) - - "⨽": [t: "ремьер внутренний продукт"] # 0x2a3d (en: 'righthand interior product', google translation) - - "⨾": [t: "z обозначения реляционного состава"] # 0x2a3e (en: 'z notation relational composition', google translation) - - "⨿": [t: "объединение или совместный"] # 0x2a3f (en: 'amalgamation or coproduct', google translation) - - "⩀": [t: "пересечение с точкой"] # 0x2a40 (en: 'intersection with dot', google translation) - - "⩁": [t: "союз с минус знак"] # 0x2a41 (en: 'union with minus sign', google translation) - - "⩂": [t: "союз с overbar"] # 0x2a42 (en: 'union with overbar', google translation) - - "⩃": [t: "пересечение с overbar"] # 0x2a43 (en: 'intersection with overbar', google translation) - - "⩄": [t: "пересечение с логическим и"] # 0x2a44 (en: 'intersection with logical and', google translation) - - "⩅": [t: "союз с логическим или"] # 0x2a45 (en: 'union with logical or', google translation) - - "⩆": [t: "союз выше пересечения"] # 0x2a46 (en: 'union above intersection', google translation) - - "⩇": [t: "пересечение над союзом"] # 0x2a47 (en: 'intersection above union', google translation) - - "⩈": [t: "союз над решеткой над перекрестком"] # 0x2a48 (en: 'union above bar above intersection', google translation) - - "⩉": [t: "пересечение над решеткой над союзом"] # 0x2a49 (en: 'intersection above bar above union', google translation) - - "⩊": [t: "союз рядом и присоединился к профсоюзам"] # 0x2a4a (en: 'union beside and joined with union', google translation) - - "⩋": [t: "пересечение рядом и соединяется с перекрестком"] # 0x2a4b (en: 'intersection beside and joined with intersection', google translation) - - "⩌": [t: "закрыт союз со скидками"] # 0x2a4c (en: 'closed union with serifs', google translation) - - "⩍": [t: "закрыто пересечение с засечками"] # 0x2a4d (en: 'closed intersection with serifs', google translation) - - "⩎": [t: "двойной квадратный перекресток"] # 0x2a4e (en: 'double square intersection', google translation) - - "⩏": [t: "двойной квадратный союз"] # 0x2a4f (en: 'double square union', google translation) - - "⩐": [t: "закрыт союз с засечками и разбейте продукт"] # 0x2a50 (en: 'closed union with serifs and smash product', google translation) - - "⩑": [t: "логично и с точкой выше"] # 0x2a51 (en: 'logical and with dot above', google translation) - - "⩒": [t: "логично или с точкой выше"] # 0x2a52 (en: 'logical or with dot above', google translation) - - "⩓": [t: "двойной логический и"] # 0x2a53 (en: 'double logical and', google translation) - - "⩔": [t: "двойной логический или"] # 0x2a54 (en: 'double logical or', google translation) - - "⩕": [t: "два пересекающихся логических и"] # 0x2a55 (en: 'two intersecting logical and', google translation) - - "⩖": [t: "два пересекающихся логических или"] # 0x2a56 (en: 'two intersecting logical or', google translation) - - "⩗": [t: "наклонение большого или"] # 0x2a57 (en: 'sloping large or', google translation) - - "⩘": [t: "наклонение большого и"] # 0x2a58 (en: 'sloping large and', google translation) - - "⩙": [t: "логичный или перекрывающийся логический и"] # 0x2a59 (en: 'logical or overlapping logical and', google translation) - - "⩚": [t: "логично и со средним стеблем"] # 0x2a5a (en: 'logical and with middle stem', google translation) - - "⩛": [t: "логично или со средним стеблем"] # 0x2a5b (en: 'logical or with middle stem', google translation) - - "⩜": [t: "логично и с горизонтальной чертой"] # 0x2a5c (en: 'logical and with horizontal dash', google translation) - - "⩝": [t: "логично или с горизонтальной чертой"] # 0x2a5d (en: 'logical or with horizontal dash', google translation) - - "⩞": [t: "логично и с двойной верхней"] # 0x2a5e (en: 'logical and with double overbar', google translation) - - "⩟": [t: "логично и с андербаром"] # 0x2a5f (en: 'logical and with underbar', google translation) - - "⩠": [t: "логично и с двойной подношкой"] # 0x2a60 (en: 'logical and with double underbar', google translation) - - "⩡": [t: "маленький век с верхней частью"] # 0x2a61 (en: 'small vee with underbar', google translation) - - "⩢": [t: "логично или с двойной верхней"] # 0x2a62 (en: 'logical or with double overbar', google translation) - - "⩣": [t: "логично или с двойной подношкой"] # 0x2a63 (en: 'logical or with double underbar', google translation) - - "⩤": [t: "z обозначения домена антиоритет"] # 0x2a64 (en: 'z notation domain antirestriction', google translation) - - "⩥": [t: "z обозначения диапазона антиреализации"] # 0x2a65 (en: 'z notation range antirestriction', google translation) - - "⩦": [t: "соответствует знаку с точкой ниже"] # 0x2a66 (en: 'equals sign with dot below', google translation) - - "⩧": [t: "идентично dot выше"] # 0x2a67 (en: 'identical with dot above', google translation) - - "⩨": [t: "тройной горизонтальный стержень с двойным вертикальным ходом"] # 0x2a68 (en: 'triple horizontal bar with double vertical stroke', google translation) - - "⩩": [t: "тройной горизонтальный бар с тройным вертикальным ходом"] # 0x2a69 (en: 'triple horizontal bar with triple vertical stroke', google translation) - - "⩪": [t: "оператор тильде с точкой выше"] # 0x2a6a (en: 'tilde operator with dot above', google translation) - - "⩫": [t: "оператор тильде с ростами точками"] # 0x2a6b (en: 'tilde operator with rising dots', google translation) - - "⩬": [t: "аналогично минус аналогично"] # 0x2a6c (en: 'similar minus similar', google translation) - - "⩭": [t: "конгруэнтен с точкой выше"] # 0x2a6d (en: 'congruent with dot above', google translation) - - "⩮": [t: "равняется звездочке"] # 0x2a6e (en: 'equals with asterisk', google translation) - - "⩯": [t: "почти равен с обходом акцента"] # 0x2a6f (en: 'almost equal to with circumflex accent', google translation) - - "⩰": [t: "приблизительно равен или равен"] # 0x2a70 (en: 'approximately equal to or equal to', google translation) - - "⩱": [t: "равна знаку выше плюс знак"] # 0x2a71 (en: 'equals sign above plus sign', google translation) - - "⩲": [t: "плюс знак выше равняется знаку"] # 0x2a72 (en: 'plus sign above equals sign', google translation) - - "⩳": [t: "соответствует знаку над оператором тильды"] # 0x2a73 (en: 'equals sign above tilde operator', google translation) - - "⩴": [t: "двойная толстая кишка равна"] # 0x2a74 (en: 'double colon equal', google translation) - - "⩵": [t: "два последовательных признаков"] # 0x2a75 (en: 'two consecutive equals signs', google translation) - - "⩶": [t: "три последовательных признаков"] # 0x2a76 (en: 'three consecutive equals signs', google translation) - - "⩷": [t: "соответствует знаку с двумя точками выше и две точки ниже"] # 0x2a77 (en: 'equals sign with two dots above and two dots below', google translation) - - "⩸": [t: "эквивалент с четырьмя точками выше"] # 0x2a78 (en: 'equivalent with four dots above', google translation) - - "⩹": [t: "меньше, чем с кругом внутри"] # 0x2a79 (en: 'less than with circle inside', google translation) - - "⩺": [t: "больше, чем с кругом внутри"] # 0x2a7a (en: 'greater than with circle inside', google translation) - - "⩻": [t: "меньше, чем с вопросом выше"] # 0x2a7b (en: 'less than with question mark above', google translation) - - "⩼": [t: "больше, чем с вопросительным знаком выше"] # 0x2a7c (en: 'greater than with question mark above', google translation) - - "⩽": [t: "меньше, чем или наклонен равен"] # 0x2a7d (en: 'less than or slanted equal to', google translation) - - "⩾": [t: "больше, чем или наклонен равен"] # 0x2a7e (en: 'greater than or slanted equal to', google translation) - - "⩿": [t: "меньше, чем или наклонен, равный точкой внутри"] # 0x2a7f (en: 'less than or slanted equal to with dot inside', google translation) - - "⪀": [t: "больше, чем или наклонен, равный точкой внутри"] # 0x2a80 (en: 'greater than or slanted equal to with dot inside', google translation) - - "⪁": [t: "меньше, чем или наклонен, равный точкой выше"] # 0x2a81 (en: 'less than or slanted equal to with dot above', google translation) - - "⪂": [t: "больше, чем или наклонен, равным точке выше"] # 0x2a82 (en: 'greater than or slanted equal to with dot above', google translation) - - "⪃": [t: "меньше, чем или наклонен, равный точкой вверху справа"] # 0x2a83 (en: 'less than or slanted equal to with dot above right', google translation) - - "⪄": [t: "больше, чем или наклонен, равный точкой вверху слева"] # 0x2a84 (en: 'greater than or slanted equal to with dot above left', google translation) - - "⪅": [t: "меньше или приблизительно"] # 0x2a85 (en: 'less than or approximate', google translation) - - "⪆": [t: "больше или приблизительно"] # 0x2a86 (en: 'greater than or approximate', google translation) - - "⪇": [t: "меньше, чем и одна строка не равна"] # 0x2a87 (en: 'less than and single line not equal to', google translation) - - "⪈": [t: "больше и единственная линия не равна"] # 0x2a88 (en: 'greater than and single line not equal to', google translation) - - "⪉": [t: "меньше, чем и не приблизительно"] # 0x2a89 (en: 'less than and not approximate', google translation) - - "⪊": [t: "больше, чем и не приблизительно"] # 0x2a8a (en: 'greater than and not approximate', google translation) - - "⪋": [t: "меньше, чем выше двойной линии, равна выше, чем"] # 0x2a8b (en: 'less than above double line equal above greater than', google translation) - - "⪌": [t: "больше, чем выше, двойная линия равна выше меньше, чем"] # 0x2a8c (en: 'greater than above double line equal above less than', google translation) - - "⪍": [t: "меньше, чем выше, похожие или равные"] # 0x2a8d (en: 'less than above similar or equal', google translation) - - "⪎": [t: "больше, чем выше, похожие или равные"] # 0x2a8e (en: 'greater than above similar or equal', google translation) - - "⪏": [t: "меньше, чем выше, больше выше, чем"] # 0x2a8f (en: 'less than above similar above greater than', google translation) - - "⪐": [t: "больше, чем выше, подобно выше меньше, чем"] # 0x2a90 (en: 'greater than above similar above less than', google translation) - - "⪑": [t: "меньше, чем выше, чем выше, двойная линия равна"] # 0x2a91 (en: 'less than above greater than above double line equal', google translation) - - "⪒": [t: "больше, чем выше, меньше, чем выше, двойная линия равна"] # 0x2a92 (en: 'greater than above less than above double line equal', google translation) - - "⪓": [t: "меньше, чем выше наклонного, равного выше выше, чем выше, наклонное, равное"] # 0x2a93 (en: 'less than above slanted equal above greater than above slanted equal', google translation) - - "⪔": [t: "больше, чем выше, наклонное, равное выше, чем выше выше, наклоненного равных"] # 0x2a94 (en: 'greater than above slanted equal above less than above slanted equal', google translation) - - "⪕": [t: "наклонен равен или меньше"] # 0x2a95 (en: 'slanted equal to or less than', google translation) - - "⪖": [t: "наклонен равен или больше"] # 0x2a96 (en: 'slanted equal to or greater than', google translation) - - "⪗": [t: "наклонен равен или меньше, чем с точкой внутри"] # 0x2a97 (en: 'slanted equal to or less than with dot inside', google translation) - - "⪘": [t: "наклонен равен или больше, чем с точкой внутри"] # 0x2a98 (en: 'slanted equal to or greater than with dot inside', google translation) - - "⪙": [t: "двойная линия, равная или меньше"] # 0x2a99 (en: 'double line equal to or less than', google translation) - - "⪚": [t: "двойная линия, равная или больше"] # 0x2a9a (en: 'double line equal to or greater than', google translation) - - "⪛": [t: "двойная линия наклонена, равна или меньше"] # 0x2a9b (en: 'double line slanted equal to or less than', google translation) - - "⪜": [t: "двойная линия наклонена, равна или больше"] # 0x2a9c (en: 'double line slanted equal to or greater than', google translation) - - "⪝": [t: "аналогично или меньше"] # 0x2a9d (en: 'similar or less than', google translation) - - "⪞": [t: "аналогично или больше, чем"] # 0x2a9e (en: 'similar or greater than', google translation) - - "⪟": [t: "аналогично выше, чем выше, равна знаку"] # 0x2a9f (en: 'similar above less than above equals sign', google translation) - - "⪠": [t: "аналогично выше, чем выше, равна знаку"] # 0x2aa0 (en: 'similar above greater than above equals sign', google translation) - - "⪡": [t: "двойной вложенной меньше, чем"] # 0x2aa1 (en: 'double nested less than', google translation) - - "⪢": [t: "двойной вложенной больше, чем"] # 0x2aa2 (en: 'double nested greater than', google translation) - - "⪣": [t: "двойной вложенной меньше, чем с поднятой"] # 0x2aa3 (en: 'double nested less than with underbar', google translation) - - "⪤": [t: "больше, чем перекрывание меньше, чем"] # 0x2aa4 (en: 'greater than overlapping less than', google translation) - - "⪥": [t: "больше, чем помимо меньше"] # 0x2aa5 (en: 'greater than beside less than', google translation) - - "⪦": [t: "менее, чем закрыто по кривой"] # 0x2aa6 (en: 'less than closed by curve', google translation) - - "⪧": [t: "больше, чем закрыто кривой"] # 0x2aa7 (en: 'greater than closed by curve', google translation) - - "⪨": [t: "менее, чем закрыто кривой выше наклонной равной"] # 0x2aa8 (en: 'less than closed by curve above slanted equal', google translation) - - "⪩": [t: "больше, чем закрыто кривой выше наклонного равного"] # 0x2aa9 (en: 'greater than closed by curve above slanted equal', google translation) - - "⪪": [t: "меньше, чем"] # 0x2aaa (en: 'smaller than', google translation) - - "⪫": [t: "больше, чем"] # 0x2aab (en: 'larger than', google translation) - - "⪬": [t: "меньше, чем или равно"] # 0x2aac (en: 'smaller than or equal to', google translation) - - "⪭": [t: "больше или равного"] # 0x2aad (en: 'larger than or equal to', google translation) - - "⪮": [t: "равняется знаку с ухабкой выше"] # 0x2aae (en: 'equals sign with bumpy above', google translation) - - "⪯": [t: "предшествующее выше одной линии равняется знаку"] # 0x2aaf (en: 'precedes above single line equals sign', google translation) - - "⪰": [t: "успех выше одной линии, равным знаку"] # 0x2ab0 (en: 'succeeds above single line equals sign', google translation) - - "⪱": [t: "предшествует над одной линией не равна"] # 0x2ab1 (en: 'precedes above single line not equal to', google translation) - - "⪲": [t: "преуспевает над одной линией не равна"] # 0x2ab2 (en: 'succeeds above single line not equal to', google translation) - - "⪳": [t: "предыдущие выше равны знака"] # 0x2ab3 (en: 'precedes above equals sign', google translation) - - "⪴": [t: "успех выше равняется знаку"] # 0x2ab4 (en: 'succeeds above equals sign', google translation) - - "⪵": [t: "предшествует выше, а не равно"] # 0x2ab5 (en: 'precedes above not equal to', google translation) - - "⪶": [t: "преуспевает выше не равных"] # 0x2ab6 (en: 'succeeds above not equal to', google translation) - - "⪷": [t: "предшествует выше почти равного"] # 0x2ab7 (en: 'precedes above almost equal to', google translation) - - "⪸": [t: "превышает почти равные"] # 0x2ab8 (en: 'succeeds above almost equal to', google translation) - - "⪹": [t: "предшествует выше почти равных"] # 0x2ab9 (en: 'precedes above not almost equal to', google translation) - - "⪺": [t: "преуспевает выше почти равным"] # 0x2aba (en: 'succeeds above not almost equal to', google translation) - - "⪻": [t: "двойной предшествующий"] # 0x2abb (en: 'double precedes', google translation) - - "⪼": [t: "двойной успех"] # 0x2abc (en: 'double succeeds', google translation) - - "⪽": [t: "подмножество с точкой"] # 0x2abd (en: 'subset with dot', google translation) - - "⪾": [t: "суперсет с точкой"] # 0x2abe (en: 'superset with dot', google translation) - - "⪿": [t: "подмножество с плюсом знаком ниже"] # 0x2abf (en: 'subset with plus sign below', google translation) - - "⫀": [t: "superset с плюсом знаком ниже"] # 0x2ac0 (en: 'superset with plus sign below', google translation) - - "⫁": [t: "подмножество с указанием умножения ниже"] # 0x2ac1 (en: 'subset with multiplication sign below', google translation) - - "⫂": [t: "суперсет с знаком умножения ниже"] # 0x2ac2 (en: 'superset with multiplication sign below', google translation) - - "⫃": [t: "подмножество или равное точке выше"] # 0x2ac3 (en: 'subset of or equal to with dot above', google translation) - - "⫄": [t: "суперсет или равный с точкой выше"] # 0x2ac4 (en: 'superset of or equal to with dot above', google translation) - - "⫅": [t: "подмножество вышеупомянутого знака"] # 0x2ac5 (en: 'subset of above equals sign', google translation) - - "⫆": [t: "суперсет выше, равным знаку"] # 0x2ac6 (en: 'superset of above equals sign', google translation) - - "⫇": [t: "подмножество вышеупомянутого оператора тильды"] # 0x2ac7 (en: 'subset of above tilde operator', google translation) - - "⫈": [t: "суперсет выше оператора тильде"] # 0x2ac8 (en: 'superset of above tilde operator', google translation) - - "⫉": [t: "подмножество выше почти равного"] # 0x2ac9 (en: 'subset of above almost equal to', google translation) - - "⫊": [t: "суперсет выше почти равный"] # 0x2aca (en: 'superset of above almost equal to', google translation) - - "⫋": [t: "подмножество выше не равное"] # 0x2acb (en: 'subset above not equal to', google translation) - - "⫌": [t: "суперсет выше не равен"] # 0x2acc (en: 'superset of above not equal to', google translation) - - "⫍": [t: "квадратный левый оператор открытой коробки"] # 0x2acd (en: 'square left open box operator', google translation) - - "⫎": [t: "квадратный правый оператор открытой коробки"] # 0x2ace (en: 'square right open box operator', google translation) - - "⫏": [t: "закрытый подмножество"] # 0x2acf (en: 'closed subset', google translation) - - "⫐": [t: "закрытый суперсет"] # 0x2ad0 (en: 'closed superset', google translation) - - "⫑": [t: "закрытое подмножество или равное"] # 0x2ad1 (en: 'closed subset or equal to', google translation) - - "⫒": [t: "закрытый суперсет или равен"] # 0x2ad2 (en: 'closed superset or equal to', google translation) - - "⫓": [t: "подмножество над суперсетом"] # 0x2ad3 (en: 'subset above superset', google translation) - - "⫔": [t: "суперсет выше подмножества"] # 0x2ad4 (en: 'superset above subset', google translation) - - "⫕": [t: "подмножество выше подмножества"] # 0x2ad5 (en: 'subset above subset', google translation) - - "⫖": [t: "суперсет над суперсет"] # 0x2ad6 (en: 'superset above superset', google translation) - - "⫗": [t: "суперсет рядом с подмножества"] # 0x2ad7 (en: 'superset beside subset', google translation) - - "⫘": [t: "суперсет рядом и присоединился к dash с подмножеством"] # 0x2ad8 (en: 'superset beside and joined by dash with subset', google translation) - - "⫙": [t: "элемент открытия вниз"] # 0x2ad9 (en: 'element of opening downwards', google translation) - - "⫚": [t: "pitchfork с tee top"] # 0x2ada (en: 'pitchfork with tee top', google translation) - - "⫛": [t: "поперечное перекресток"] # 0x2adb (en: 'transversal intersection', google translation) - - "⫝̸": [t: "разбрызгивание"] # 0x2adc (en: 'forking', google translation) - - "⫝": [t: "не призванное"] # 0x2add (en: 'nonforking', google translation) - - "⫞": [t: "короткий левый притяжение"] # 0x2ade (en: 'short left tack', google translation) - - "⫟": [t: "краткий удар"] # 0x2adf (en: 'short down tack', google translation) - - "⫠": [t: "краткий притяжение"] # 0x2ae0 (en: 'short up tack', google translation) - - "⫡": [t: "перпендикуляр с с"] # 0x2ae1 (en: 'perpendicular with s', google translation) - - "⫢": [t: "вертикальный батончик тройной правый турникет"] # 0x2ae2 (en: 'vertical bar triple right turnstile', google translation) - - "⫣": [t: "двойная вертикальная стержня левая турникета"] # 0x2ae3 (en: 'double vertical bar left turnstile', google translation) - - "⫤": [t: "вертикальный стержень двойной левый турнинель"] # 0x2ae4 (en: 'vertical bar double left turnstile', google translation) - - "⫥": [t: "двойная вертикальная стержня двойной левой турникет"] # 0x2ae5 (en: 'double vertical bar double left turnstile', google translation) - - "⫦": [t: "длинный бросок от левого члена двойной вертикали"] # 0x2ae6 (en: 'long dash from left member of double vertical', google translation) - - "⫧": [t: "краткий удар с overbar"] # 0x2ae7 (en: 'short down tack with overbar', google translation) - - "⫨": [t: "краткий притяжение с помощью верхней части"] # 0x2ae8 (en: 'short up tack with underbar', google translation) - - "⫩": [t: "краткий удар над коротким путем"] # 0x2ae9 (en: 'short up tack above short down tack', google translation) - - "⫪": [t: "двойной удар"] # 0x2aea (en: 'double down tack', google translation) - - "⫫": [t: "удвоить такту"] # 0x2aeb (en: 'double up tack', google translation) - - "⫬": [t: "двойной удар, а не знак"] # 0x2aec (en: 'double stroke not sign', google translation) - - "⫭": [t: "обратный двойной удар, а не знак"] # 0x2aed (en: 'reversed double stroke not sign', google translation) - - "⫮": [t: "не разделяется с обратной слэш"] # 0x2aee (en: 'does not divide with reversed negation slash', google translation) - - "⫯": [t: "вертикальная линия с кругом выше"] # 0x2aef (en: 'vertical line with circle above', google translation) - - "⫰": [t: "вертикальная линия с кругом ниже"] # 0x2af0 (en: 'vertical line with circle below', google translation) - - "⫱": [t: "вниз по кругу ниже"] # 0x2af1 (en: 'down tack with circle below', google translation) - - "⫲": [t: "параллельно с горизонтальным ходом"] # 0x2af2 (en: 'parallel with horizontal stroke', google translation) - - "⫳": [t: "параллельно с оператором тильды"] # 0x2af3 (en: 'parallel with tilde operator', google translation) - - "⫴": [t: "тройная вертикальная бинарная связь"] # 0x2af4 (en: 'triple vertical bar binary relation', google translation) - - "⫵": [t: "тройная вертикальная стержень с горизонтальным ходом"] # 0x2af5 (en: 'triple vertical bar with horizontal stroke', google translation) - - "⫶": [t: "тройной оператор толстой кишки"] # 0x2af6 (en: 'triple colon operator', google translation) - - "⫷": [t: "тройной вложенной меньше, чем"] # 0x2af7 (en: 'triple nested less than', google translation) - - "⫸": [t: "тройной вложенной больше, чем"] # 0x2af8 (en: 'triple nested greater than', google translation) - - "⫹": [t: "двойная линия наклонена меньше или равна"] # 0x2af9 (en: 'double line slanted less than or equal to', google translation) - - "⫺": [t: "двойная линия наклонена больше или равна"] # 0x2afa (en: 'double line slanted greater than or equal to', google translation) - - "⫻": [t: "тройное солидус бинарное отношение"] # 0x2afb (en: 'triple solidus binary relation', google translation) - - "⫼": [t: "большой тройной вертикальный оператор"] # 0x2afc (en: 'large triple vertical bar operator', google translation) - - "⫽": [t: "двойной оператор solidus"] # 0x2afd (en: 'double solidus operator', google translation) - - "⫾": [t: "белый вертикальный бар"] # 0x2afe (en: 'white vertical bar', google translation) - - "⫿": [t: "белый вертикальный бар"] # 0x2aff (en: 'white vertical bar', google translation) - - "⬀": [t: "северо -восточный белый стрела"] # 0x2b00 (en: 'north east white arrow', google translation) - - "⬁": [t: "северо -западный белый стрела"] # 0x2b01 (en: 'north west white arrow', google translation) - - "⬂": [t: "юго -восточная белая стрела"] # 0x2b02 (en: 'south east white arrow', google translation) - - "⬃": [t: "юго -западный белый стрелка"] # 0x2b03 (en: 'south west white arrow', google translation) - - "⬄": [t: "левая правая белая стрелка"] # 0x2b04 (en: 'left right white arrow', google translation) - - "⬅": [t: "левая черная стрела"] # 0x2b05 (en: 'leftwards black arrow', google translation) - - "⬆": [t: "вверх черную стрелу"] # 0x2b06 (en: 'upwards black arrow', google translation) - - "⬇": [t: "вниз черная стрелка"] # 0x2b07 (en: 'downwards black arrow', google translation) - - "⬈": [t: "северо -восточный черная стрелка"] # 0x2b08 (en: 'north east black arrow', google translation) - - "⬉": [t: "северо -западный черная стрелка"] # 0x2b09 (en: 'north west black arrow', google translation) - - "⬊": [t: "юго -восточная черная стрела"] # 0x2b0a (en: 'south east black arrow', google translation) - - "⬋": [t: "юго -западная черная стрела"] # 0x2b0b (en: 'south west black arrow', google translation) - - "⬌": [t: "левая правая черная стрелка"] # 0x2b0c (en: 'left right black arrow', google translation) - - "⬍": [t: "вниз по черной стрелке"] # 0x2b0d (en: 'up down black arrow', google translation) - - "⬎": [t: "стрелка вправо с наконечником вниз"] # 0x2b0e (en: 'rightwards arrow with tip downwards', google translation) - - "⬏": [t: "стрелка вправо с наконечником вверх"] # 0x2b0f (en: 'rightwards arrow with tip upwards', google translation) - - "⬐": [t: "стрелка влево с наконечником вниз"] # 0x2b10 (en: 'leftwards arrow with tip downwards', google translation) - - "⬑": [t: "стрелка влево с наконечником вверх"] # 0x2b11 (en: 'leftwards arrow with tip upwards', google translation) - - "⬒": [t: "квадрат с верхней половиной черной"] # 0x2b12 (en: 'square with top half black', google translation) - - "⬓": [t: "квадрат с нижней половиной черной"] # 0x2b13 (en: 'square with bottom half black', google translation) - - "⬔": [t: "квадрат с верхней правой диагональной половиной черной"] # 0x2b14 (en: 'square with upper right diagonal half black', google translation) - - "⬕": [t: "квадрат с нижней левой диагональной половиной черной"] # 0x2b15 (en: 'square with lower left diagonal half black', google translation) - - "⬖": [t: "алмаз с левой половиной черной"] # 0x2b16 (en: 'diamond with left half black', google translation) - - "⬗": [t: "алмаз с правой половиной черной"] # 0x2b17 (en: 'diamond with right half black', google translation) - - "⬘": [t: "алмаз с верхней половиной черной"] # 0x2b18 (en: 'diamond with top half black', google translation) - - "⬙": [t: "алмаз с нижней половиной черной"] # 0x2b19 (en: 'diamond with bottom half black', google translation) - - "⬚": [t: "коробка"] # 0x2b1a (en: 'box', google translation) - - "⬛": [t: "черный большой квадрат"] # 0x2b1b (en: 'black large square', google translation) - - "⬜": [t: "белый большой квадрат"] # 0x2b1c (en: 'white large square', google translation) - - "⬝": [t: "черный очень маленький квадрат"] # 0x2b1d (en: 'black very small square', google translation) - - "⬞": [t: "белый очень маленький квадрат"] # 0x2b1e (en: 'white very small square', google translation) - - "⬟": [t: "черный пентагон"] # 0x2b1f (en: 'black pentagon', google translation) - - "⬠": [t: "белый пентагон"] # 0x2b20 (en: 'white pentagon', google translation) - - "⬡": [t: "белый шестигранник"] # 0x2b21 (en: 'white hexagon', google translation) - - "⬢": [t: "черный шестигранник"] # 0x2b22 (en: 'black hexagon', google translation) - - "⬣": [t: "горизонтальный черный шестигран"] # 0x2b23 (en: 'horizontal black hexagon', google translation) - - "⬤": [t: "черный большой круг"] # 0x2b24 (en: 'black large circle', google translation) - - "⬥": [t: "черный средний бриллиант"] # 0x2b25 (en: 'black medium diamond', google translation) - - "⬦": [t: "белый средний бриллиант"] # 0x2b26 (en: 'white medium diamond', google translation) - - "⬧": [t: "черный средний роньон"] # 0x2b27 (en: 'black medium lozenge', google translation) - - "⬨": [t: "белый средний роньон"] # 0x2b28 (en: 'white medium lozenge', google translation) - - "⬩": [t: "черный маленький бриллиант"] # 0x2b29 (en: 'black small diamond', google translation) - - "⬪": [t: "черный маленький ронд"] # 0x2b2a (en: 'black small lozenge', google translation) - - "⬫": [t: "белый маленький роньон"] # 0x2b2b (en: 'white small lozenge', google translation) - - "⬬": [t: "черный горизонтальный эллипс"] # 0x2b2c (en: 'black horizontal ellipse', google translation) - - "⬭": [t: "белый горизонтальный эллипс"] # 0x2b2d (en: 'white horizontal ellipse', google translation) - - "⬮": [t: "черный вертикальный эллипс"] # 0x2b2e (en: 'black vertical ellipse', google translation) - - "⬯": [t: "белый вертикальный эллипс"] # 0x2b2f (en: 'white vertical ellipse', google translation) - - "⬰": [t: "левая стрелка с маленьким кругом"] # 0x2b30 (en: 'left arrow with small circle', google translation) - - "⬱": [t: "три левые стрелы"] # 0x2b31 (en: 'three leftwards arrows', google translation) - - "⬲": [t: "левая стрелка с circled plus"] # 0x2b32 (en: 'left arrow with circled plus', google translation) - - "⬳": [t: "длинный левый наносит удар стрелка"] # 0x2b33 (en: 'long leftwards squiggle arrow', google translation) - - "⬴": [t: "слева две головные стрелки с вертикальным ходом"] # 0x2b34 (en: 'leftwards two headed arrow with vertical stroke', google translation) - - "⬵": [t: "слева две головы стрелка с двойным вертикальным ходом"] # 0x2b35 (en: 'leftwards two headed arrow with double vertical stroke', google translation) - - "⬶": [t: "слева две голова стрелы из бара"] # 0x2b36 (en: 'leftwards two headed arrow from bar', google translation) - - "⬷": [t: "слева две головы triple dash arrow"] # 0x2b37 (en: 'leftwards two headed triple dash arrow', google translation) - - "⬸": [t: "стрелка влево с пунктирным стеблем"] # 0x2b38 (en: 'leftwards arrow with dotted stem', google translation) - - "⬹": [t: "стрелка влево с хвостом с вертикальным ходом"] # 0x2b39 (en: 'leftwards arrow with tail with vertical stroke', google translation) - - "⬺": [t: "стрелка влево с двойным вертикальным ходом"] # 0x2b3a (en: 'leftwards arrow with tail with double vertical stroke', google translation) - - "⬻": [t: "слева две головные стрелы с хвостом"] # 0x2b3b (en: 'leftwards two headed arrow with tail', google translation) - - "⬼": [t: "слева две головные стрелки с хвостом с вертикальным ходом"] # 0x2b3c (en: 'leftwards two headed arrow with tail with vertical stroke', google translation) - - "⬽": [t: "влево две головы стрелка с хвостом с двойным вертикальным ходом"] # 0x2b3d (en: 'leftwards two headed arrow with tail with double vertical stroke', google translation) - - "⬾": [t: "стрелка влево через x"] # 0x2b3e (en: 'leftwards arrow through x', google translation) - - "⬿": [t: "волновая стрелка, указывающая прямо влево"] # 0x2b3f (en: 'wave arrow pointing directly left', google translation) - - "⭀": [t: "равен знак над стрелкой влево"] # 0x2b40 (en: 'equals sign above leftwards arrow', google translation) - - "⭁": [t: "обратный оператор тильды над стрелкой левой"] # 0x2b41 (en: 'reverse tilde operator above leftwards arrow', google translation) - - "⭂": [t: "стрелка влево выше обратно почти равна"] # 0x2b42 (en: 'leftwards arrow above reverse almost equal to', google translation) - - "⭃": [t: "стрелка вправо через больше"] # 0x2b43 (en: 'rightwards arrow through greater than', google translation) - - "⭄": [t: "прямо стрелка через суперсет"] # 0x2b44 (en: 'rightwards arrow through superset', google translation) - - "⭅": [t: "левая четырехкратная стрелка"] # 0x2b45 (en: 'leftwards quadruple arrow', google translation) - - "⭆": [t: "прямо четырехкратная стрелка"] # 0x2b46 (en: 'rightwards quadruple arrow', google translation) - - "⭇": [t: "обратный оператор тильды выше стрелы вправо"] # 0x2b47 (en: 'reverse tilde operator above rightwards arrow', google translation) - - "⭈": [t: "стрелка вправо выше обратно почти равна"] # 0x2b48 (en: 'rightwards arrow above reverse almost equal to', google translation) - - "⭉": [t: "оператор тильде над стрелкой левой"] # 0x2b49 (en: 'tilde operator above leftwards arrow', google translation) - - "⭊": [t: "стрелка влево выше почти равна"] # 0x2b4a (en: 'leftwards arrow above almost equal to', google translation) - - "⭋": [t: "стрелка влево над оператором обратной тилды"] # 0x2b4b (en: 'leftwards arrow above reverse tilde operator', google translation) - - "⭌": [t: "стрелка вправо над оператором обратной тилды"] # 0x2b4c (en: 'rightwards arrow above reverse tilde operator', google translation) - - "⭐": [t: "белая средняя звезда"] # 0x2b50 (en: 'white medium star', google translation) - - "⭑": [t: "черная маленькая звезда"] # 0x2b51 (en: 'black small star', google translation) - - "⭒": [t: "белая маленькая звезда"] # 0x2b52 (en: 'white small star', google translation) - - "⭓": [t: "черное правое направление пентагона"] # 0x2b53 (en: 'black right pointing pentagon', google translation) - - "⭔": [t: "белый правый направление пентагона"] # 0x2b54 (en: 'white right pointing pentagon', google translation) - - "⭕": [t: "тяжелый большой круг"] # 0x2b55 (en: 'heavy large circle', google translation) - - "⭖": [t: "тяжелый овал с овальным внутри"] # 0x2b56 (en: 'heavy oval with oval inside', google translation) - - "⭗": [t: "тяжелый круг с кругом внутри"] # 0x2b57 (en: 'heavy circle with circle inside', google translation) - - "⭘": [t: "тяжелый круг"] # 0x2b58 (en: 'heavy circle', google translation) - - "⭙": [t: "тяжелая кружовая сальир"] # 0x2b59 (en: 'heavy circled saltire', google translation) - - "⸀": [t: "маркер подстановки правого угла"] # 0x2e00 (en: 'right angle substitution marker', google translation) - - "⸁": [t: "прямой угол пунктирный маркер замены"] # 0x2e01 (en: 'right angle dotted substitution marker', google translation) - - "⸂": [t: "левая замена кронштейна"] # 0x2e02 (en: 'left substitution bracket', google translation) - - "⸃": [t: "правая замена кронштейна"] # 0x2e03 (en: 'right substitution bracket', google translation) - - "⸄": [t: "левая пунктирная замена кронштейна"] # 0x2e04 (en: 'left dotted substitution bracket', google translation) - - "⸅": [t: "правая пунктирная замена кронштейна"] # 0x2e05 (en: 'right dotted substitution bracket', google translation) - - "⸆": [t: "повышенный маркер интерполяции"] # 0x2e06 (en: 'raised interpolation marker', google translation) - - "⸇": [t: "повышенный пунктированный маркер интерполяции"] # 0x2e07 (en: 'raised dotted interpolation marker', google translation) - - "⸈": [t: "пунктирный маркер маркера транспозиции"] # 0x2e08 (en: 'dotted transposition marker marker', google translation) - - "⸉": [t: "левый транспонированный кронштейн"] # 0x2e09 (en: 'left transposition bracket', google translation) - - "⸊": [t: "правый транспонированный кронштейн"] # 0x2e0a (en: 'right transposition bracket', google translation) - - "⸋": [t: "поднятый квадрат"] # 0x2e0b (en: 'raised square', google translation) - - "⸌": [t: "оставленный поднятый кронштейн упущений"] # 0x2e0c (en: 'left raised omission bracket', google translation) - - "⸍": [t: "правый поднятый кронштейн упущений"] # 0x2e0d (en: 'right raised omission bracket', google translation) - - "⸎": [t: "редакция коронис"] # 0x2e0e (en: 'editorial coronis', google translation) - - "⸏": [t: "параграф"] # 0x2e0f (en: 'paragraphos', google translation) - - "⸐": [t: "разветвленные параграфоры"] # 0x2e10 (en: 'forked paragraphos', google translation) - - "⸑": [t: "обратите вспять разветвленные параграфы"] # 0x2e11 (en: 'reversed forked paragraphos', google translation) - - "⸒": [t: "гиподиастоль"] # 0x2e12 (en: 'hypodiastole', google translation) - - "⸓": [t: "пунктирные обелос"] # 0x2e13 (en: 'dotted obelos', google translation) - - "⸔": [t: "вниз анкоры"] # 0x2e14 (en: 'downwards ancora', google translation) - - "⸕": [t: "вверх анкоры"] # 0x2e15 (en: 'upwards ancora', google translation) - - "⸖": [t: "пунктирный угол правого направления"] # 0x2e16 (en: 'dotted right pointing angle', google translation) - - "⸗": [t: "двойной косой дефис"] # 0x2e17 (en: 'double oblique hyphen', google translation) - - "⸘": [t: "перевернутый межробанг"] # 0x2e18 (en: 'inverted interrobang', google translation) - - "⸙": [t: "палмсб"] # 0x2e19 (en: 'palm branch', google translation) - - "⸚": [t: "дефис с диарезом"] # 0x2e1a (en: 'hyphen with diaeresis', google translation) - - "⸛": [t: "тильде с кольцом выше"] # 0x2e1b (en: 'tilde with ring above', google translation) - - "⸜": [t: "оставил низкий перефразированный кронштейн"] # 0x2e1c (en: 'left low paraphrase bracket', google translation) - - "⸝": [t: "правый низкий перефразированный кронштейн"] # 0x2e1d (en: 'right low paraphrase bracket', google translation) - - "⸞": [t: "тильде с точкой выше"] # 0x2e1e (en: 'tilde with dot above', google translation) - - "⸟": [t: "тильде с точкой ниже"] # 0x2e1f (en: 'tilde with dot below', google translation) - - "⸠": [t: "левая вертикальная прунка с перо"] # 0x2e20 (en: 'left vertical bar with quill', google translation) - - "⸡": [t: "правая вертикальная планка с перо"] # 0x2e21 (en: 'right vertical bar with quill', google translation) - - "⸢": [t: "верх слева половина кронштейна"] # 0x2e22 (en: 'top left half bracket', google translation) - - "⸣": [t: "верхний правый половина кронштейна"] # 0x2e23 (en: 'top right half bracket', google translation) - - "⸤": [t: "внизу левой половины кронштейна"] # 0x2e24 (en: 'bottom left half bracket', google translation) - - "⸥": [t: "внизу правой половины кронштейна"] # 0x2e25 (en: 'bottom right half bracket', google translation) - - "⸦": [t: "слева в сторону u кронштейн"] # 0x2e26 (en: 'left sideways u bracket', google translation) - - "⸧": [t: "прямо сбоку с кронштейном"] # 0x2e27 (en: 'right sideways u bracket', google translation) - - "⸨": [t: "оставлены двойными скобками"] # 0x2e28 (en: 'left double parentheses', google translation) - - "⸩": [t: "правая двойная скобка"] # 0x2e29 (en: 'right double parentheses', google translation) - - "⸪": [t: "две точки за одну точечную пунктуацию"] # 0x2e2a (en: 'two dots over one dot punctuation', google translation) - - "⸫": [t: "одна точка за две точки пунктуации"] # 0x2e2b (en: 'one dot over two dots punctuation', google translation) - - "⸬": [t: "квадрат четыре точечных пунктуации"] # 0x2e2c (en: 'squared four dot punctuation', google translation) - - "⸭": [t: "пять точечных знаков"] # 0x2e2d (en: 'five dot mark', google translation) - - "⸮": [t: "обратный вопрос"] # 0x2e2e (en: 'reversed question mark', google translation) - - "ⸯ": [t: "вертикальная тильда"] # 0x2e2f (en: 'vertical tilde', google translation) - - "⸰": [t: "кольцевая точка"] # 0x2e30 (en: 'ring point', google translation) - - "⸱": [t: "слово сепаратор средняя точка"] # 0x2e31 (en: 'word separator middle dot', google translation) - - "⸲": [t: "повернулся запятой"] # 0x2e32 (en: 'turned comma', google translation) - - "⸳": [t: "повышенная точка"] # 0x2e33 (en: 'raised dot', google translation) - - "⸴": [t: "поднятый запятой"] # 0x2e34 (en: 'raised comma', google translation) - - "⸵": [t: "стал полуколоном"] # 0x2e35 (en: 'turned semicolon', google translation) - - "⸶": [t: "кинжал с левым охраной"] # 0x2e36 (en: 'dagger with left guard', google translation) - - "⸷": [t: "кинжал с правой охраной"] # 0x2e37 (en: 'dagger with right guard', google translation) - - "⸸": [t: "стал кинжалом"] # 0x2e38 (en: 'turned dagger', google translation) - - "⸹": [t: "знак верхней половины секции"] # 0x2e39 (en: 'top half section sign', google translation) - - "⸺": [t: "два дэш"] # 0x2e3a (en: 'two em dash', google translation) - - "⸻": [t: "три дэш"] # 0x2e3b (en: 'three em dash', google translation) - - "〃": [t: "то же самое"] # 0x3003 (en: 'ditto mark', google translation) - - "〈": [t: "левый угловой кронштейн"] # 0x3008 (en: 'left angle bracket', google translation) - - "〉": [t: "правый угловой кронштейн"] # 0x3009 (en: 'right angle bracket', google translation) - - "《": [t: "левый двухугольный кронштейн"] # 0x300a (en: 'left double angle bracket', google translation) - - "》": [t: "правый двойной угловой кронштейн"] # 0x300b (en: 'right double angle bracket', google translation) - - "「": [t: "левый угловой кронштейн"] # 0x300c (en: 'left corner bracket', google translation) - - "」": [t: "правый угловой кронштейн"] # 0x300d (en: 'right corner bracket', google translation) - - "『": [t: "левый белый угловой кронштейн"] # 0x300e (en: 'left white corner bracket', google translation) - - "』": [t: "правый белый угловой кронштейн"] # 0x300f (en: 'right white corner bracket', google translation) - - "【": [t: "левый черный линзоулярный кронштейн"] # 0x3010 (en: 'left black lenticular bracket', google translation) - - "】": [t: "правый черный линзоушковой кронштейн"] # 0x3011 (en: 'right black lenticular bracket', google translation) - - "〔": [t: "левая кронштейн с черепахой"] # 0x3014 (en: 'left tortoise shell bracket', google translation) - - "〕": [t: "правая черепаховая оболочка"] # 0x3015 (en: 'right tortoise shell bracket', google translation) - - "〖": [t: "левый белый линзоушковый кронштейн"] # 0x3016 (en: 'left white lenticular bracket', google translation) - - "〗": [t: "правый белый линзо -линзовый кронштейн"] # 0x3017 (en: 'right white lenticular bracket', google translation) - - "〘": [t: "оставил белую черепаховую скорлупу"] # 0x3018 (en: 'left white tortoise shell bracket', google translation) - - "〙": [t: "правый белый кронштейн с черепахой"] # 0x3019 (en: 'right white tortoise shell bracket', google translation) - - "〚": [t: "левый белый квадратный кронштейн"] # 0x301a (en: 'left white square bracket', google translation) - - "〛": [t: "правый белый квадратный кронштейн"] # 0x301b (en: 'right white square bracket', google translation) - - "〜": [t: "волновая черта"] # 0x301c (en: 'wave dash', google translation) - - "〰": [t: "wavy dash"] # 0x3030 (google translation) - - "㉈": [t: "обернут номер десять на черном квадрате"] # 0x3248 (en: 'circled number ten on black square', google translation) - - "㉉": [t: "обернут номер двадцать на черной площади"] # 0x3249 (en: 'circled number twenty on black square', google translation) - - "㉊": [t: "обернут номер тридцать на черном квадрате"] # 0x324a (en: 'circled number thirty on black square', google translation) - - "㉋": [t: "обернутое число сорок на черных площади"] # 0x324b (en: 'circled number forty on blacks square', google translation) - - "㉌": [t: "обернут номер пятьдесят на черной площади"] # 0x324c (en: 'circled number fifty on black square', google translation) - - "㉍": [t: "обернут номер шестьдесят на черной площади"] # 0x324d (en: 'circled number sixty on black square', google translation) - - "㉎": [t: "кругет номер семьдесят на черной площади"] # 0x324e (en: 'circled number seventy on black square', google translation) - - "㉏": [t: "обернутый номер на черном квадрате"] # 0x324f (en: 'circled number eighty on black square', google translation) - - "㉑": [t: "обернут номер двадцать один"] # 0x3251 (en: 'circled number twenty one', google translation) - - "㉒": [t: "кругл номер двадцать два"] # 0x3252 (en: 'circled number twenty two', google translation) - - "㉓": [t: "кругл номер двадцать три"] # 0x3253 (en: 'circled number twenty three', google translation) - - "㉔": [t: "кругл номер двадцать четыре"] # 0x3254 (en: 'circled number twenty four', google translation) - - "㉕": [t: "обернут номер двадцать пять"] # 0x3255 (en: 'circled number twenty five', google translation) - - "㉖": [t: "обернут номер двадцать шесть"] # 0x3256 (en: 'circled number twenty six', google translation) - - "㉗": [t: "обернут номер двадцать семь"] # 0x3257 (en: 'circled number twenty seven', google translation) - - "㉘": [t: "обернут номер двадцать в"] # 0x3258 (en: 'circled number twenty eight', google translation) - - "㉙": [t: "обернуто номером двадцать девять"] # 0x3259 (en: 'circled number twenty nine', google translation) - - "㉚": [t: "кружит номер тридцать"] # 0x325a (en: 'circled number thirty', google translation) - - "㉛": [t: "кругл номер тридцать"] # 0x325b (en: 'circled number thirty one', google translation) - - "㉜": [t: "кругет номер тридцать два"] # 0x325c (en: 'circled number thirty two', google translation) - - "㉝": [t: "кругл номер тридцать три"] # 0x325d (en: 'circled number thirty three', google translation) - - "㉞": [t: "кругл номер тридцать четыре"] # 0x325e (en: 'circled number thirty four', google translation) - - "㉟": [t: "обернут номер тридцать пять"] # 0x325f (en: 'circled number thirty five', google translation) - - "㊱": [t: "обернут номер тридцать шесть"] # 0x32b1 (en: 'circled number thirty six', google translation) - - "㋌": [t: "меркурий"] # 0x32cc (en: 'mercury', google translation) - - "㋍": [t: "ergs"] # 0x32cd (google translation) - - "㋎": [t: "электронные вольт"] # 0x32ce (en: 'electron volts', google translation) - - "㋏": [t: "знак с ограниченной ответственностью"] # 0x32cf (en: 'limited liability sign', google translation) - - "㍱": [t: "гектопаскалы"] # 0x3371 (en: 'hectopascals', google translation) - - "㍲": [t: "дальтон"] # 0x3372 (en: 'daltons', google translation) - - "㍳": [t: "астрономические единицы"] # 0x3373 (en: 'astronomical units', google translation) - - "㍴": [t: "батончики"] # 0x3374 (en: 'bars', google translation) - - "㍵": [t: "o v"] # 0x3375 (google translation) - - "㍶": [t: "парсек"] # 0x3376 (en: 'parsecs', google translation) - - "㍷": [t: "дециметры"] # 0x3377 (en: 'decimeters', google translation) - - "㍸": [t: "дециметры в квадрате"] # 0x3378 (en: 'decimeters squared', google translation) - - "㍹": [t: "дециметры кубики"] # 0x3379 (en: 'decimeters cubed', google translation) - - "㍺": [t: "инструментальные единицы"] # 0x337a (en: 'instrumental units', google translation) - - "㎀": [t: "пикоэмпс"] # 0x3380 (en: 'picoamps', google translation) - - "㎁": [t: "наноампы"] # 0x3381 (en: 'nanoamps', google translation) - - "㎂": [t: "микроампы"] # 0x3382 (en: 'microamps', google translation) - - "㎃": [t: "миллиамп"] # 0x3383 (en: 'milliamps', google translation) - - "㎄": [t: "киломп"] # 0x3384 (en: 'kiloamps', google translation) - - "㎅": [t: "килобиты"] # 0x3385 (en: 'kilobytes', google translation) - - "㎆": [t: "мегабайты"] # 0x3386 (en: 'megabytes', google translation) - - "㎇": [t: "гигабайты"] # 0x3387 (en: 'gigabytes', google translation) - - "㎈": [t: "калории"] # 0x3388 (en: 'calories', google translation) - - "㎉": [t: "килокалории"] # 0x3389 (en: 'kilocalories', google translation) - - "㎊": [t: "пикофарадс"] # 0x338a (en: 'picofarads', google translation) - - "㎋": [t: "нанофарады"] # 0x338b (en: 'nanofarads', google translation) - - "㎌": [t: "микрофарады"] # 0x338c (en: 'microfarads', google translation) - - "㎍": [t: "микрограммы"] # 0x338d (en: 'micrograms', google translation) - - "㎎": [t: "миллиграммы"] # 0x338e (en: 'milligrams', google translation) - - "㎏": [t: "килограммы"] # 0x338f (en: 'kilograms', google translation) - - "㎐": [t: "герц"] # 0x3390 (en: 'hertz', google translation) - - "㎑": [t: "килогерц"] # 0x3391 (en: 'kilohertz', google translation) - - "㎒": [t: "мегахерц"] # 0x3392 (en: 'megahertz', google translation) - - "㎓": [t: "гигагерц"] # 0x3393 (en: 'gigahertz', google translation) - - "㎔": [t: "терагерц"] # 0x3394 (en: 'terahertz', google translation) - - "㎕": [t: "микролитры"] # 0x3395 (en: 'microliters', google translation) - - "㎖": [t: "миллилитры"] # 0x3396 (en: 'milliliters', google translation) - - "㎗": [t: "децилиторы"] # 0x3397 (en: 'deciliters', google translation) - - "㎘": [t: "килолитры"] # 0x3398 (en: 'kiloliters', google translation) - - "㎙": [t: "фемтометры"] # 0x3399 (en: 'femtometers', google translation) - - "㎚": [t: "нанометры"] # 0x339a (en: 'nanometers', google translation) - - "㎛": [t: "микрометры"] # 0x339b (en: 'micrometers', google translation) - - "㎜": [t: "миллиметры"] # 0x339c (en: 'millimeters', google translation) - - "㎝": [t: "сантиметры"] # 0x339d (en: 'centimeters', google translation) - - "㎞": [t: "километры"] # 0x339e (en: 'kilometers', google translation) - - "㎟": [t: "миллиметры в квадрате"] # 0x339f (en: 'millimeters squared', google translation) - - "㎠": [t: "самедимеры в квадрате"] # 0x33a0 (en: 'centimeters squared', google translation) - - "㎡": [t: "метры квадрат"] # 0x33a1 (en: 'meters squared', google translation) - - "㎢": [t: "километры в квадрате"] # 0x33a2 (en: 'kilometers squared', google translation) - - "㎣": [t: "миллиметровые кубики"] # 0x33a3 (en: 'millimeters cubed', google translation) - - "㎤": [t: "медингеры кубики"] # 0x33a4 (en: 'centimeters cubed', google translation) - - "㎥": [t: "метры кубики"] # 0x33a5 (en: 'meters cubed', google translation) - - "㎦": [t: "километры кубики"] # 0x33a6 (en: 'kilometers cubed', google translation) - - "㎧": [t: "метры в секунду"] # 0x33a7 (en: 'meters per second', google translation) - - "㎨": [t: "метры в секунду квадрат"] # 0x33a8 (en: 'meters per second squared', google translation) - - "㎩": [t: "паскалы"] # 0x33a9 (en: 'pascals', google translation) - - "㎪": [t: "килопаскалы"] # 0x33aa (en: 'kilopascals', google translation) - - "㎫": [t: "мегапаскалы"] # 0x33ab (en: 'megapascals', google translation) - - "㎬": [t: "гигаскаскалы"] # 0x33ac (en: 'gigapascals', google translation) - - "㎭": [t: "рад"] # 0x33ad (en: 'rads', google translation) - - "㎮": [t: "радс в секунду"] # 0x33ae (en: 'rads per second', google translation) - - "㎯": [t: "радс в секунду квадрат"] # 0x33af (en: 'rads per second squared', google translation) - - "㎰": [t: "пикосекунд"] # 0x33b0 (en: 'picoseconds', google translation) - - "㎱": [t: "наносекунд"] # 0x33b1 (en: 'nanoseconds', google translation) - - "㎲": [t: "микросекунд"] # 0x33b2 (en: 'microseconds', google translation) - - "㎳": [t: "миллисекунды"] # 0x33b3 (en: 'milliseconds', google translation) - - "㎴": [t: "пиковолтс"] # 0x33b4 (en: 'picovolts', google translation) - - "㎵": [t: "нановолты"] # 0x33b5 (en: 'nanovolts', google translation) - - "㎶": [t: "микроволты"] # 0x33b6 (en: 'microvolts', google translation) - - "㎷": [t: "миливолты"] # 0x33b7 (en: 'millivolts', google translation) - - "㎸": [t: "киловолты"] # 0x33b8 (en: 'kilovolts', google translation) - - "㎹": [t: "мегаволты"] # 0x33b9 (en: 'megavolts', google translation) - - "㎺": [t: "пикаттс"] # 0x33ba (en: 'picowatts', google translation) - - "㎻": [t: "нановатты"] # 0x33bb (en: 'nanowatts', google translation) - - "㎼": [t: "микроволты"] # 0x33bc (en: 'microwatts', google translation) - - "㎽": [t: "милливаттс"] # 0x33bd (en: 'milliwatts', google translation) - - "㎾": [t: "киловатт"] # 0x33be (en: 'kilowatts', google translation) - - "㎿": [t: "мегаватт"] # 0x33bf (en: 'megawatts', google translation) - - "㏀": [t: "кило-омс"] # 0x33c0 (en: 'kilo-ohms', google translation) - - "㏁": [t: "megaohms"] # 0x33c1 (google translation) - - "㏂": [t: "аттометры"] # 0x33c2 (en: 'attometers', google translation) - - "㏃": [t: "беккерелс"] # 0x33c3 (en: 'becquerels', google translation) - - "㏄": [t: "кубические сантиметра"] # 0x33c4 (en: 'cubic centimeters', google translation) - - "㏅": [t: "канделас"] # 0x33c5 (en: 'candelas', google translation) - - "㏆": [t: "кулоны на килограмм"] # 0x33c6 (en: 'coulombs per kilogram', google translation) - - "㏇": [t: "верхний c, o, период"] # 0x33c7 (I have no idea what this is) (en: 'cap C, o, period', google translation) - - "㏈": [t: "децибел"] # 0x33c8 (en: 'decibels', google translation) - - "㏉": [t: "серые"] # 0x33c9 (en: 'grays', google translation) - - "㏊": [t: "гектары"] # 0x33ca (en: 'hectares', google translation) - - "㏋": [t: "лошадиная сила"] # 0x33cb (en: 'horsepower', google translation) - - "㏌": [t: "дюймы"] # 0x33cc (en: 'inches', google translation) - - "㏍": [t: "килокелвин"] # 0x33cd (en: 'kilokelvins', google translation) - - "㏎": [t: "километры"] # 0x33ce (en: 'kilometers', google translation) - - "㏏": [t: "узлы"] # 0x33cf (en: 'knots', google translation) - - "㏐": [t: "люмены"] # 0x33d0 (en: 'lumens', google translation) - - "㏑": [t: "натуральный журнал"] # 0x33d1 (en: 'natural log', google translation) - - "㏒": [t: "логарифм"] # 0x33d2 (en: 'logarithm', google translation) - - "㏓": [t: "люкс"] # 0x33d3 (en: 'lux', google translation) - - "㏔": [t: "millibarns"] # 0x33d4 (google translation) - - "㏕": [t: "мельницы"] # 0x33d5 (en: 'mills', google translation) - - "㏖": [t: "родинки"] # 0x33d6 (en: 'moles', google translation) - - "㏗": [t: "п"] # 0x33d7 (en: 'p h', google translation) - - "㏘": [t: "пикометры"] # 0x33d8 (en: 'picometers', google translation) - - "㏙": [t: "части на миллион"] # 0x33d9 (en: 'parts per million', google translation) - - "㏚": [t: "петароентгены"] # 0x33da (en: 'petaroentgens', google translation) - - "㏛": [t: "стерадцы"] # 0x33db (en: 'steradians', google translation) - - "㏜": [t: "веса"] # 0x33dc (en: 'sieverts', google translation) - - "㏝": [t: "веберс"] # 0x33dd (en: 'webers', google translation) - - "㏞": [t: "вольт на метр"] # 0x33de (en: 'volts per meter', google translation) - - "㏟": [t: "усилители на метр"] # 0x33df (en: 'amps per meter', google translation) - - "㏿": [t: "галлоны"] # 0x33ff (en: 'gallons', google translation) - - "": [t: "равна шляпе ниже"] # 0xe900 (en: 'equals with hat below', google translation) - - "": [t: "равно с плюсом выше"] # 0xe901 (en: 'equals with plus above', google translation) - - "": [t: "равно с плюсом ниже"] # 0xe902 (en: 'equals with plus below', google translation) - - "": [t: "тильде с плюсом выше"] # 0xe903 (en: 'tilde with plus above', google translation) - - "": [t: "тильде с плюсом ниже"] # 0xe904 (en: 'tilde with plus below', google translation) - - "": [t: "равное вдвое больше, чем"] # 0xe908 (en: 'equal double over greater than', google translation) - - "": [t: "равное вдвое больше, чем"] # 0xe909 (en: 'equal double over less than', google translation) - - "": [t: "содержит или равен"] # 0xe90a (en: 'contains or equal to', google translation) - - "": [t: "суперсет или равен"] # 0xe90b (en: 'superset of or equal to', google translation) - - "": [t: "подмножество или равное"] # 0xe90c (en: 'subset of or equal to', google translation) - - "": [t: "равное за меньшее, чем"] # 0xe90d (en: 'equal over less than', google translation) - - "": [t: "элемент или равен"] # 0xe912 (en: 'element of or equal to', google translation) - - "": [t: "равен или больше"] # 0xe913 (en: 'equal to or greater than', google translation) - - "": [t: "приблизительный суперсет"] # 0xe914 (en: 'approximate superset of', google translation) - - "": [t: "приблизительное подмножество"] # 0xe915 (en: 'approximate subset of', google translation) - - "": [t: "superset of dot включает в себя как субосвязь"] # 0xe916 (en: 'superset of with dot includes as sub relation', google translation) - - "": [t: "подмножество с точкой включено как суботенок"] # 0xe917 (en: 'subset of with dot is included in as sub relation', google translation) - - "": [t: "равное с точкой ниже"] # 0xe918 (en: 'equal with dot below', google translation) - - "": [t: "левая точка над минусом над правой точкой"] # 0xe919 (en: 'left dot over minus over right dot', google translation) - - "": [t: "правая точка через минус над левой точкой"] # 0xe91a (en: 'right dot over minus over left dot', google translation) - - "": [t: "почти равен минус"] # 0xe91f (en: 'almost equal to minus', google translation) - - "": [t: "двойная квадратная чашка"] # 0xe920 (en: 'double square cup', google translation) - - "": [t: "двойной квадратный верхний регистр"] # 0xe921 (en: 'double square cap', google translation) - - "": [t: "менее чем равен или больше"] # 0xe922 (en: 'less than equal to or greater than', google translation) - - "": [t: "тильде с точкой"] # 0xe924 (en: 'tilde with dot', google translation) - - "": [t: "тильде с двумя точками"] # 0xe925 (en: 'tilde with two dots', google translation) - - "": [t: "меньше, чем больше или равно"] # 0xe926 (en: 'less than greater than or equal to', google translation) - - "": [t: "больше, чем меньше или равно"] # 0xe927 (en: 'greater than less than or equal to', google translation) - - "": [t: "эквивалентно или меньше"] # 0xe928 (en: 'equivalent to or less than', google translation) - - "": [t: "эквивалентно или больше"] # 0xe929 (en: 'equivalent to or greater than', google translation) - - "": [t: "оставленный оператор открытой коробки"] # 0xe92a (en: 'left open box operator', google translation) - - "": [t: "правый оператор открытой коробки"] # 0xe92b (en: 'right open box operator', google translation) - - "": [t: "идентично с точкой"] # 0xe92c (en: 'identical to with dot', google translation) - - "": [t: "больше, чем равен или меньше"] # 0xe92d (en: 'greater than equal to or less than', google translation) - - "": [t: "оператор бара"] # 0xe92e (en: 'bar operator', google translation) - - "": [t: "оператор двойного бара"] # 0xe92f (en: 'double bar operator', google translation) - - "": [t: "оператор triple bar"] # 0xe930 (en: 'triple bar operator', google translation) - - "": [t: "меньше или приблизительно равен"] # 0xe932 (en: 'less than or approximately equal to', google translation) - - "": [t: "больше или приблизительно равен"] # 0xe933 (en: 'greater than or approximately equal to', google translation) - - "": [t: "вкладывается меньше, чем"] # 0xe936 (en: 'nested less than', google translation) - - "": [t: "вложенные больше, чем"] # 0xe937 (en: 'nested greater than', google translation) - - "": [t: "предшествует или эквивалентно"] # 0xe93a (en: 'precedes or equivalent to', google translation) - - "": [t: "добивается успеха или эквивалентно"] # 0xe93b (en: 'succeeds or equivalent to', google translation) - - "": [t: "предшествует равным"] # 0xe940 (en: 'precedes over equal', google translation) - - "": [t: "преуспевает в равных"] # 0xe941 (en: 'succeeds over equal', google translation) - - "": [t: "менее равное наклонное больше"] # 0xe942 (en: 'less equal slanted greater', google translation) - - "": [t: "больше равных наклонных меньше"] # 0xe943 (en: 'greater equal slanted less', google translation) - - "": [t: "удовлетворен"] # 0xe948 (en: 'satisfied by', google translation) - - "": [t: "ленивый с"] # 0xe949 (en: 'lazy s', google translation) - - "": [t: "не утверждение"] # 0xe94a (en: 'not assertion', google translation) - - "": [t: "двойной равный"] # 0xe94b (en: 'double equal', google translation) - - "": [t: "тройной равный"] # 0xe94c (en: 'triple equal', google translation) - - "": [t: "правило задержано"] # 0xe94d (en: 'rule delayed', google translation) - - "": [t: "псевдоним разделитель"] # 0xe94e (en: 'alias delimiter', google translation) - - "": [t: "нормальная подгруппа с баром"] # 0xe950 (en: 'normal subgroup of with bar', google translation) - - "": [t: "содержит как обычную подгруппу с стержнем"] # 0xe951 (en: 'contains as normal subgroup with bar', google translation) - - "": [t: "раунд подразумевает"] # 0xe954 (en: 'round implies', google translation) - - "": [t: "улыбка под баром"] # 0xe955 (en: 'smile under bar', google translation) - - "": [t: "нахмуриться над баром"] # 0xe956 (en: 'frown over bar', google translation) - - "": [t: "суперсет или почти равен"] # 0xe957 (en: 'superset of or almost equal to', google translation) - - "": [t: "подмножество или почти равен"] # 0xe958 (en: 'subset of or almost equal to', google translation) - - "": [t: "больше, чем почти равен или меньше"] # 0xe959 (en: 'greater than almost equal to or less than', google translation) - - "": [t: "меньше, чем почти равное или больше, чем"] # 0xe95a (en: 'less than almost equal or greater than', google translation) - - "": [t: "двойной логический или"] # 0xe95c (en: 'double logical or', google translation) - - "": [t: "двойной логический и"] # 0xe95d (en: 'double logical and', google translation) - - "": [t: "логично или с двойной полосой ниже"] # 0xe95e (en: 'logical or with double bar below', google translation) - - "": [t: "логично или с стержней ниже"] # 0xe95f (en: 'logical or with bar below', google translation) - - "": [t: "почти равны по сравнению с равными"] # 0xe962 (en: 'almost equal over equal', google translation) - - "": [t: "левый указательный треугольник с пополам"] # 0xe964 (en: 'left pointing triangle with bisecting bar', google translation) - - "": [t: "право указывает треугольник с пополам"] # 0xe965 (en: 'right pointing triangle with bisecting bar', google translation) - - "": [t: "равно с пунктирной верхней линией"] # 0xe966 (en: 'equals with dotted top line', google translation) - - "": [t: "предшествует толстой кишке"] # 0xe967 (en: 'precedes with colon', google translation) - - "": [t: "преуспевает с толстой кишкой"] # 0xe968 (en: 'succeeds with colon', google translation) - - "": [t: "меньше или равного наклонного"] # 0xe969 (en: 'smaller than or equal slanted', google translation) - - "": [t: "больше или равных наклонных"] # 0xe96a (en: 'larger than or equal slanted', google translation) - - "": [t: "вложено намного меньше, чем"] # 0xe96b (en: 'nested very much less than', google translation) - - "": [t: "вложено намного больше, чем"] # 0xe96c (en: 'nested very much greater than', google translation) - - "": [t: "разница между вариантом"] # 0xe96d (en: 'difference between variant', google translation) - - "": [t: "меньше, чем больше наложения"] # 0xe96e (en: 'less than greater than overlay', google translation) - - "": [t: "логичный или логичный и наложенный"] # 0xe96f (en: 'logical or logical and overlay', google translation) - - "": [t: "суперсет над суперсет"] # 0xe970 (en: 'superset over superset', google translation) - - "": [t: "подмножество над подмножества"] # 0xe971 (en: 'subset over subset', google translation) - - "": [t: "суперсет над подмножества"] # 0xe972 (en: 'superset over subset', google translation) - - "": [t: "подмножество над суперсет"] # 0xe973 (en: 'subset over superset', google translation) - - "": [t: "тройной вертикальный бар"] # 0xe979 (en: 'triple vertical bar', google translation) - - "": [t: "парные четырехкратные вертикальные точки"] # 0xe97a (en: 'paired quadruple vertical dots', google translation) - - "": [t: "перпендикулярно над стержней"] # 0xe97b (en: 'perpendicular over bar', google translation) - - "": [t: "левый турничный перевозка двойной вертикальной прунки"] # 0xe97c (en: 'left turnstile double vertical bar', google translation) - - "": [t: "двойной левый турничный перевозка двойной вертикальный бар"] # 0xe97d (en: 'double left turnstile double vertical bar', google translation) - - "": [t: "перпендикулярно перевернутую перпендикулярную"] # 0xe97e (en: 'perpendicular over inverted perpendicular', google translation) - - "": [t: "двойной левый вертикальный стержень"] # 0xe97f (en: 'double left turnstile vertical bar', google translation) - - "": [t: "сферический угол открывается"] # 0xe980 (en: 'spherical angle opening up', google translation) - - "": [t: "двойная черта"] # 0xe981 (en: 'double slash', google translation) - - "": [t: "правильный конг с угрым"] # 0xe982 (en: 'right angle with corner', google translation) - - "": [t: "обведенный вертикальным баром"] # 0xe984 (en: 'circled vertical bar', google translation) - - "": [t: "знак окружающего дивизиона"] # 0xe985 (en: 'circled division sign', google translation) - - "": [t: "пунктирный солидус"] # 0xe986 (en: 'dashed solidus', google translation) - - "": [t: "разбитая обратная черта"] # 0xe987 (en: 'dashed backslash', google translation) - - "": [t: "пунктирная средняя линия"] # 0xe988 (en: 'dashed mid line', google translation) - - "": [t: "пунктирная вертикальная бар"] # 0xe989 (en: 'dashed vertical bar', google translation) - - "": [t: "перпендикуляр с с"] # 0xe98a (en: 'perpendicular with s', google translation) - - "": [t: "угол с с"] # 0xe98b (en: 'angle with s', google translation) - - "": [t: "сферический угол открывается слева"] # 0xe98c (en: 'spherical angle opening left', google translation) - - "": [t: "угол открывается слева"] # 0xe98d (en: 'angle opening left', google translation) - - "": [t: "вертикальная планка с двойным крючком"] # 0xe98e (en: 'vertical bar with double hook', google translation) - - "": [t: "средний точечный оператор свободный радикал"] # 0xe98f (en: 'medium dot operator free radical', google translation) - - "": [t: "белый, укажите треугольник над стержней"] # 0xe990 (en: 'white up pointing triangle above bar', google translation) - - "": [t: "идентично и параллельно"] # 0xe991 (en: 'identical and parallel to', google translation) - - "": [t: "разбить продукт"] # 0xe992 (en: 'smash product', google translation) - - "": [t: "оператор с тройным бар с горизонтальным баром"] # 0xe993 (en: 'triple bar operator with horizontal bar', google translation) - - "": [t: "идентично с двойной чертой"] # 0xe994 (en: 'identical to with double slash', google translation) - - "": [t: "тройные скрещенные бары"] # 0xe995 (en: 'triple crossed bars', google translation) - - "": [t: "вертикальная планка над кругом"] # 0xe996 (en: 'vertical bar over circle', google translation) - - "": [t: "вертикальный пропорциональный"] # 0xe997 (en: 'vertical proportional to', google translation) - - "": [t: "черная последняя четверть луна"] # 0xe998 (en: 'black last quarter moon', google translation) - - "": [t: "черная первая четверть луна"] # 0xe999 (en: 'black first quarter moon', google translation) - - "": [t: "отрицательная синусоидальная волна"] # 0xe9a0 (en: 'negative sine wave', google translation) - - "": [t: "клаженные скобки"] # 0xe9a1 (en: 'parenthesized dot', google translation) - - "": [t: "скол"] # 0xe9a2 (en: 'parens', google translation) - - "": [t: "белая улыбка"] # 0xe9a3 (en: 'white smile', google translation) - - "": [t: "белый хмурый взгляд"] # 0xe9a4 (en: 'white frown', google translation) - - "": [t: "шестигранник"] # 0xe9a5 (en: 'hexagon', google translation) - - "": [t: "эквивалентно более плюс"] # 0xe9a6 (en: 'equivalent to over plus', google translation) - - "": [t: "плюс, эквивалентный"] # 0xe9a7 (en: 'plus over equivalent to', google translation) - - "": [t: "перекрестные засечки"] # 0xe9b0 (en: 'intersection serifs', google translation) - - "": [t: "союз serifs"] # 0xe9b1 (en: 'union serifs', google translation) - - "": [t: "квадратный перекресток засечений"] # 0xe9b2 (en: 'square intersection serifs', google translation) - - "": [t: "square union serifs"] # 0xe9b3 (google translation) - - "": [t: "предшествует эквивалентному или успешному"] # 0xe9e0 (en: 'precedes equivalent to or succeeds', google translation) - - "": [t: "успешно эквивалентно или предшествует"] # 0xe9e1 (en: 'succeeds equivalent to or precedes', google translation) - - "": [t: "предшествует почти равен или добивается успеха"] # 0xe9e2 (en: 'precedes almost equal to or succeeds', google translation) - - "": [t: "успешно практически равен или предшествует"] # 0xe9e3 (en: 'succeeds almost equal to or precedes', google translation) - - "": [t: "менее чем эквивалентно или больше"] # 0xe9f0 (en: 'less than equivalent to or greater than', google translation) - - "": [t: "больше, чем эквивалентно или меньше"] # 0xe9f1 (en: 'greater than equivalent to or less than', google translation) - - "": [t: "не гораздо меньше, чем"] # 0xea00 (en: 'not vert much less than', google translation) - - "": [t: "не гораздо больше, чем"] # 0xea01 (en: 'not vert much greater than', google translation) - - "": [t: "не намного меньше варианта"] # 0xea02 (en: 'not much less than variant', google translation) - - "": [t: "не намного больше, чем вариант"] # 0xea03 (en: 'not much greater than variant', google translation) - - "": [t: "меньше верного не вдвое равно"] # 0xea04 (en: 'less vert not double equals', google translation) - - "": [t: "gt vert не двойной равен"] # 0xea05 (en: 'gt vert not double equals', google translation) - - "": [t: "не меньше или равны"] # 0xea06 (en: 'not less than or equal to', google translation) - - "": [t: "не больше или равен"] # 0xea07 (en: 'not greater than or equal to', google translation) - - "": [t: "ни равняется и не меньше, чем"] # 0xea09 (en: 'neither equal to nor less than', google translation) - - "": [t: "не содержит или не равен"] # 0xea0a (en: 'does not contain or equal to', google translation) - - "": [t: "ни суперсет, ни равен"] # 0xea0b (en: 'neither superset of nor equal to', google translation) - - "": [t: "ни подмножество и не равное"] # 0xea0c (en: 'neither subset of nor equal to', google translation) - - "": [t: "обратный solidus submet"] # 0xea0d (en: 'reverse solidus subset', google translation) - - "": [t: "ни равняется и не больше"] # 0xea0e (en: 'neither equal to nor greater than', google translation) - - "": [t: "не минус оператор тильды"] # 0xea0f (en: 'not minus tilde operator', google translation) - - "": [t: "ни равняется и не меньше, чем"] # 0xea10 (en: 'neither equal to nor less than', google translation) - - "": [t: "не оператор тильды"] # 0xea11 (en: 'not tilde operator', google translation) - - "": [t: "не элемент или равен"] # 0xea12 (en: 'not element of or equal to', google translation) - - "": [t: "ни равняется и не больше"] # 0xea13 (en: 'neither equal to nor greater than', google translation) - - "": [t: "не почти равен"] # 0xea14 (en: 'not almost equal', google translation) - - "": [t: "не удается аналогично"] # 0xea15 (en: 'not succeeds similar', google translation) - - "": [t: "меньше, чем или наклонен, равный с чертой"] # 0xea16 (en: 'less than or slanted equal to with slash', google translation) - - "": [t: "больше, чем или наклонен, равный с чертой"] # 0xea17 (en: 'greater than or slanted equal to with slash', google translation) - - "": [t: "superset solidus"] # 0xea1a (google translation) - - "": [t: "не содержит"] # 0xea1b (en: 'does not contain', google translation) - - "": [t: "не меньше или равны"] # 0xea1d (en: 'not less than or equal to', google translation) - - "": [t: "не больше или равен"] # 0xea1e (en: 'not greater than or equal to', google translation) - - "": [t: "не почти равен минус"] # 0xea1f (en: 'not almost equal to minus', google translation) - - "": [t: "отрицание установки членства dot выше"] # 0xea22 (en: 'negated set membership dot above', google translation) - - "": [t: "не угол верта"] # 0xea2c (en: 'not vert angle', google translation) - - "": [t: "не параллельно наклонен"] # 0xea2d (en: 'not parallel slanted', google translation) - - "": [t: "не оператор бара"] # 0xea2e (en: 'not bar operator', google translation) - - "": [t: "не двойной оператор"] # 0xea2f (en: 'not double bar operator', google translation) - - "": [t: "не оператор тройного бар"] # 0xea30 (en: 'not triple bar operator', google translation) - - "": [t: "меньше, но не приблизительно равен"] # 0xea32 (en: 'less than but not approximately equal to', google translation) - - "": [t: "больше, чем, но не приблизительно равен"] # 0xea33 (en: 'greater than but not approximately equal to', google translation) - - "": [t: "меньше, чем или нет"] # 0xea34 (en: 'less than or not equal to', google translation) - - "": [t: "больше или нет"] # 0xea35 (en: 'greater than or not equal to', google translation) - - "": [t: "не вложено меньше, чем"] # 0xea36 (en: 'not nested less than', google translation) - - "": [t: "не вложено больше, чем"] # 0xea37 (en: 'not nested greater than', google translation) - - "": [t: "не намного меньше"] # 0xea38 (en: 'not much less than', google translation) - - "": [t: "не намного больше, чем"] # 0xea39 (en: 'not much greater than', google translation) - - "": [t: "предшествует, но не эквивалентно"] # 0xea3a (en: 'precedes but not equivalent to', google translation) - - "": [t: "успешно, но не эквивалентно"] # 0xea3b (en: 'succeeds but not equivalent to', google translation) - - "": [t: "предшествует, но не равен"] # 0xea3c (en: 'precedes but not equal to', google translation) - - "": [t: "добивается успеха, но не равен"] # 0xea3d (en: 'succeeds but not equal to', google translation) - - "": [t: "не равняется и не предшествует"] # 0xea3e (en: 'does not equal or precede', google translation) - - "": [t: "не равняется и не преуспевает"] # 0xea3f (en: 'does not equal or succeed', google translation) - - "": [t: "предшествует, но не равен"] # 0xea40 (en: 'precedes but not equal to', google translation) - - "": [t: "добивается успеха, но не равен"] # 0xea41 (en: 'succeeds but not equal to', google translation) - - "": [t: "не подмножество и не равен"] # 0xea42 (en: 'not subset of nor equal to', google translation) - - "": [t: "не суперсет и не равен"] # 0xea43 (en: 'not superset of nor equal to', google translation) - - "": [t: "подмножество или не равен"] # 0xea44 (en: 'subset of or not equal to', google translation) - - "": [t: "суперсет или не равен"] # 0xea45 (en: 'superset of or not equal to', google translation) - - "": [t: "не подмножество и не равен"] # 0xea46 (en: 'not subset of nor equal to', google translation) - - "": [t: "не суперсет и не равен"] # 0xea47 (en: 'not superset of nor equal to', google translation) - - "": [t: "не тройной меньше, чем"] # 0xea48 (en: 'not triple less than', google translation) - - "": [t: "не тройной больше, чем"] # 0xea49 (en: 'not triple greater than', google translation) - - "": [t: "не предшествует"] # 0xea4c (en: 'not precedes equals', google translation) - - "": [t: "не удастся"] # 0xea4d (en: 'not succeeds equals', google translation) - - "": [t: "не нормальная подгруппа с баром"] # 0xea50 (en: 'not normal subgroup of with bar', google translation) - - "": [t: "не содержит как обычную подгруппу с стержнем"] # 0xea51 (en: 'does not contain as normal subgroup with bar', google translation) - - "": [t: "не разница между"] # 0xea52 (en: 'not difference between', google translation) - - "": [t: "не геометрически эквивалент"] # 0xea53 (en: 'not geometrically equivalent to', google translation) - - "": [t: "не так же"] # 0xea54 (en: 'not vert similar', google translation) - - "": [t: "не равен или похож"] # 0xea55 (en: 'not equal or similar', google translation) - - "": [t: "не vert приблизительно"] # 0xea56 (en: 'not vert approximate', google translation) - - "": [t: "не приблизительно идентично"] # 0xea57 (en: 'not approximately identical to', google translation) - - "": [t: "не ухабистый"] # 0xea58 (en: 'not bumpy equals', google translation) - - "": [t: "не ухабистый сингл равна"] # 0xea59 (en: 'not bumpy single equals', google translation) - - "": [t: "не равна точке"] # 0xea5a (en: 'not equal dot', google translation) - - "": [t: "обратный не эквивалентный"] # 0xea5b (en: 'reverse not equivalent', google translation) - - "": [t: "не квадратный подмножество"] # 0xea60 (en: 'not square subset', google translation) - - "": [t: "не квадратный суперсет"] # 0xea61 (en: 'not square superset', google translation) - - "": [t: "не почти равен по сравнению с равными"] # 0xea62 (en: 'not almost equal over equal', google translation) - - "": [t: "не строго эквивалентно"] # 0xea63 (en: 'not strictly equivalent to', google translation) - - "": [t: "не конгруэнтная точка"] # 0xea64 (en: 'not congruent dot', google translation) - - "": [t: "обратный не равен"] # 0xea65 (en: 'reverse not equal', google translation) - - "": [t: "не верно левый треугольник равен"] # 0xea70 (en: 'not vert left triangle equals', google translation) - - "": [t: "не верный правый треугольник равна"] # 0xea71 (en: 'not vert right triangle equals', google translation) - - "": [t: "не частично"] # 0xea80 (en: 'not partial', google translation) - - "": [t: "стрелка украшивание"] # 0xeb00 (en: 'arrow embellishment extender', google translation) - - "": [t: "стрелка направо над стрелкой влево"] # 0xeb01 (en: 'arrow rightwards over arrow leftwards', google translation) - - "": [t: "стрелка направо над стрелкой влево"] # 0xeb02 (en: 'arrow rightwards over arrow leftwards', google translation) - - "": [t: "гарпун прямо над гарпуном слева"] # 0xeb03 (en: 'harpoon right over harpoon left', google translation) - - "": [t: "гарпун прямо над гарпуном слева"] # 0xeb04 (en: 'harpoon right over harpoon left', google translation) - - "": [t: "двойная стрелка на северо -востоке юго -запада"] # 0xeb05 (en: 'double arrow northeast southwest', google translation) - - "": [t: "двойная стрелка на северо -западе юго -востока"] # 0xeb06 (en: 'double arrow northwest southeast', google translation) - - "": [t: "горизонтальный удлинитель гарпуна"] # 0xeb07 (en: 'horizontal harpoon extender', google translation) - - "": [t: "ангарная часовая дуга слева стрелка"] # 0xeb08 (en: 'anticlockwise arc leftwards arrow', google translation) - - "": [t: "ангарная часовая дуга вправо стрел"] # 0xeb09 (en: 'anticlockwise arc rightwards arrow', google translation) - - "": [t: "большой справа акцент стрелы"] # 0xeb0b (en: 'large rightwards arrow accent', google translation) - - "": [t: "большой левый акцент стрелы"] # 0xeb0c (en: 'large leftwards arrow accent', google translation) - - "": [t: "слева стрела"] # 0xeb0d (en: 'leftwards arrowhead', google translation) - - "": [t: "право среда"] # 0xeb0e (en: 'rightwards arrowhead', google translation) - - "": [t: "большая левая стрелка справа с ходом"] # 0xeb0f (en: 'large left right arrow with stroke', google translation) - - "": [t: "горизонтальный удлинитель двойной стрелки"] # 0xeb10 (en: 'horizontal double arrow extender', google translation) - - "": [t: "большая левая правая двойная стрелка с ходом"] # 0xeb11 (en: 'large left right double arrow with stroke', google translation) - - "": [t: "вниз стрелка слева от стрелы вверх"] # 0xeb12 (en: 'downwards arrow leftwards of upwards arrow', google translation) - - "": [t: "стрелка влево с углом вниз"] # 0xeb13 (en: 'leftwards arrow with corner downwards', google translation) - - "": [t: "стрелка вправо с углом вверх"] # 0xeb14 (en: 'rightwards arrow with corner upwards', google translation) - - "": [t: "стрелка влево с углом вверх"] # 0xeb15 (en: 'leftwards arrow with corner upwards', google translation) - - "": [t: "верхняя стрелка в верхней части часовой стрелки с плюсом"] # 0xeb16 (en: 'anticlockwise top semicircle arrow with plus', google translation) - - "": [t: "верхняя стрелка по часовой стрелке с минус"] # 0xeb17 (en: 'clockwise top semicircle arrow with minus', google translation) - - "": [t: "стрелка вправо с хвостом с ходом"] # 0xeb18 (en: 'rightwards arrow with tail with stroke', google translation) - - "": [t: "правый гарпун вниз"] # 0xeb19 (en: 'right harpoon down', google translation) - - "": [t: "оставил гарпун вниз"] # 0xeb1a (en: 'left harpoon down', google translation) - - "": [t: "левый правый гарпун вниз"] # 0xeb1b (en: 'left right harpoon down', google translation) - - "": [t: "левый правый гарпун вверх"] # 0xeb1c (en: 'left right harpoon up', google translation) - - "": [t: "вниз по гарпуне ушел"] # 0xeb1d (en: 'up down harpoon left', google translation) - - "": [t: "вверх по гарпуне справа"] # 0xeb1e (en: 'up down harpoon right', google translation) - - "": [t: "стрелка вверх справа от стрелы вниз"] # 0xeb1f (en: 'upwards arrow to the right of downwards arrow', google translation) - - "": [t: "слева гарпун, чтобы бар с барб вверх"] # 0xeb20 (en: 'leftwards harpoon to bar with barb upwards', google translation) - - "": [t: "прямо гарпун, чтобы бар с барб вверх"] # 0xeb21 (en: 'rightwards harpoon to bar with barb upwards', google translation) - - "": [t: "левый гарпун, чтобы бар с барб вниз"] # 0xeb22 (en: 'leftwards harpoon to bar with barb downwards', google translation) - - "": [t: "прямо гарпун, чтобы бар с барб вниз"] # 0xeb23 (en: 'rightwards harpoon to bar with barb downwards', google translation) - - "": [t: "левый гарпун из бара с барб вверх"] # 0xeb24 (en: 'leftwards harpoon from bar with barb upwards', google translation) - - "": [t: "прямо гарпун из бара с барб вверх"] # 0xeb25 (en: 'rightwards harpoon from bar with barb upwards', google translation) - - "": [t: "левый гарпун из бара с барб вниз"] # 0xeb26 (en: 'leftwards harpoon from bar with barb downwards', google translation) - - "": [t: "прямо гарпун из бара с барб вниз"] # 0xeb27 (en: 'rightwards harpoon from bar with barb downwards', google translation) - - "": [t: "вверх гарпун, чтобы бар с барком слева"] # 0xeb28 (en: 'upwards harpoon to bar with barb leftwards', google translation) - - "": [t: "вниз по гарпуне, чтобы бар с барб налево"] # 0xeb29 (en: 'downwards harpoon to bar with barb leftwards', google translation) - - "": [t: "вверх гарпун, чтобы бар с барб вправо"] # 0xeb2a (en: 'upwards harpoon to bar with barb rightwards', google translation) - - "": [t: "вниз по гарпуне, чтобы бар с барб вправо"] # 0xeb2b (en: 'downwards harpoon to bar with barb rightwards', google translation) - - "": [t: "вверх гарпун из бара с барб слева"] # 0xeb2c (en: 'upwards harpoon from bar with barb leftwards', google translation) - - "": [t: "вниз по гарпуне из бара с барб слева"] # 0xeb2d (en: 'downwards harpoon from bar with barb leftwards', google translation) - - "": [t: "вверх гарпун из бара с барб справа"] # 0xeb2e (en: 'upwards harpoon from bar with barb rightwards', google translation) - - "": [t: "вниз по гарпуне из бара с барб прямо на это"] # 0xeb2f (en: 'downwards harpoon from bar with barb rightwards', google translation) - - "": [t: "вверх стрелой в бар"] # 0xeb30 (en: 'upwards arrow to bar', google translation) - - "": [t: "вниз стрелы в бар"] # 0xeb31 (en: 'downwards arrow to bar', google translation) - - "": [t: "вверх гарпун слева от гарпуна вниз"] # 0xeb32 (en: 'upwards harpoon to the left of downwards harpoon', google translation) - - "": [t: "вверх гарпун справа от вниз гарпун"] # 0xeb33 (en: 'upwards harpoon to the right of downwards harpoon', google translation) - - "": [t: "вверх стрелка"] # 0xeb34 (en: 'upwards arrowhead', google translation) - - "": [t: "вниз стрелка"] # 0xeb35 (en: 'downwards arrowhead', google translation) - - "": [t: "двойной гарпун с левой барб вниз вправо"] # 0xeb36 (en: 'double harpoon with leftwards barb down rightwards barb up', google translation) - - "": [t: "двойной гарпун с левой барб вверх вправо барб вниз"] # 0xeb37 (en: 'double harpoon with leftwards barb up rightwards barb down', google translation) - - "": [t: "стрелка влево над баром"] # 0xeb38 (en: 'leftwards arrow over bar', google translation) - - "": [t: "права стрелка над баром"] # 0xeb39 (en: 'rightwards arrow over bar', google translation) - - "": [t: "стрелка влево под баром"] # 0xeb3a (en: 'leftwards arrow under bar', google translation) - - "": [t: "стрелка вправо под баром"] # 0xeb3b (en: 'rightwards arrow under bar', google translation) - - "": [t: "левая правая тройная стрелка"] # 0xeb3c (en: 'left right triple arrow', google translation) - - "": [t: "двойная стрелка на северо -востоке юго -востока"] # 0xeb3f (en: 'double arrow northeast southeast', google translation) - - "": [t: "антикомальная часовая стрелка слева"] # 0xeb40 (en: 'anticlockwise left semicircle arrow', google translation) - - "": [t: "по часовой стрелке левая стрелка полукруга"] # 0xeb41 (en: 'clockwise left semicircle arrow', google translation) - - "": [t: "левый открытый круг левый правый стрелка"] # 0xeb42 (en: 'left open circle left right arrow', google translation) - - "": [t: "право стрелы над тильдой"] # 0xeb44 (en: 'rightwards arrow over tilde', google translation) - - "": [t: "стрелка слева над тильдой"] # 0xeb45 (en: 'leftwards arrow over tilde', google translation) - - "": [t: "слева гарпун над баром"] # 0xeb48 (en: 'leftwards harpoon over bar', google translation) - - "": [t: "прямо гарпун над баром"] # 0xeb49 (en: 'rightwards harpoon over bar', google translation) - - "": [t: "левый гарпун под баром"] # 0xeb4a (en: 'leftwards harpoon under bar', google translation) - - "": [t: "прямо гарпун под баром"] # 0xeb4b (en: 'rightwards harpoon under bar', google translation) - - "": [t: "приседание чернокожие левые стрелы"] # 0xeb4c (en: 'squat black leftwards arrow', google translation) - - "": [t: "по часовой стрелке правая стрелка полукруга"] # 0xeb50 (en: 'clockwise right semicircle arrow', google translation) - - "": [t: "антиковая стрелка правой полукруги"] # 0xeb51 (en: 'anticlockwise right semicircle arrow', google translation) - - "": [t: "левый открытый круг влево правый гарпун"] # 0xeb52 (en: 'left open circle left right harpoon', google translation) - - "": [t: "вверх стрелка слева от вертикального бара"] # 0xeb58 (en: 'upwards arrow leftwards of vertical bar', google translation) - - "": [t: "вниз стрелка слева от вертикального бара"] # 0xeb59 (en: 'downwards arrow leftwards of vertical bar', google translation) - - "": [t: "вверх стрелка вправо от вертикального бара"] # 0xeb5a (en: 'upwards arrow rightwards of vertical bar', google translation) - - "": [t: "стрелка вниз вправо от вертикального бара"] # 0xeb5b (en: 'downwards arrow rightwards of vertical bar', google translation) - - "": [t: "стрелка вправо с расширенным крюком вниз"] # 0xeb5c (en: 'rightwards arrow with extended downwards hook', google translation) - - "": [t: "стрелка влево с расширенным крючком"] # 0xeb5d (en: 'leftwards arrow with extended hook', google translation) - - "": [t: "стрелка влево с протяженным крюком вниз"] # 0xeb5e (en: 'leftwards arrow with extended downwards hook', google translation) - - "": [t: "стрелка вправо с расширенным крючком"] # 0xeb5f (en: 'rightwards arrow with extended hook', google translation) - - "": [t: "не правая стрелка волнистая"] # 0xeb60 (en: 'not right arrow wavy', google translation) - - "": [t: "не правая стрелка изогнута"] # 0xeb61 (en: 'not right arrow curved', google translation) - - "": [t: "вверх гарпун слева от вертикального бара"] # 0xeb68 (en: 'upwards harpoon leftwards of vertical bar', google translation) - - "": [t: "вниз по гарпуне слева от вертикального бара"] # 0xeb69 (en: 'downwards harpoon leftwards of vertical bar', google translation) - - "": [t: "вверх гарпун прямо наоборот вертикального бара"] # 0xeb6a (en: 'upwards harpoon rightwards of vertical bar', google translation) - - "": [t: "вниз по гарпуне прямо с вертикальным баром"] # 0xeb6b (en: 'downwards harpoon rightwards of vertical bar', google translation) - - "": [t: "вертикальная двойная стрелка"] # 0xeb6c (en: 'vertical double arrow extender', google translation) - - "": [t: "вертикальный гарпун с левым удлинителем"] # 0xeb6d (en: 'vertical harpoon with barb left extender', google translation) - - "": [t: "вертикальный гарпун с правым удлинителем барб"] # 0xeb6e (en: 'vertical harpoon with barb right extender', google translation) - - "": [t: "правый гарпун над левым гарпуном вправо"] # 0xeb6f (en: 'right harpoon over left harpoon right', google translation) - - "": [t: "правый гарпун над левым гарпуном слева"] # 0xeb70 (en: 'right harpoon over left harpoon left', google translation) - - "": [t: "левый гарпун над правым гарпуном вправо"] # 0xeb71 (en: 'left harpoon over right harpoon right', google translation) - - "": [t: "левый гарпун над правой гарпуной слева"] # 0xeb72 (en: 'left harpoon over right harpoon left', google translation) - - "": [t: "стрела влево от стрелки бара"] # 0xeb73 (en: 'leftwards arrow from bar arrowhead', google translation) - - "": [t: "стрела влево вправо от стрелки из бара"] # 0xeb74 (en: 'leftwards rightwards arrow from bar extender', google translation) - - "": [t: "стрелка влево от шарнирного хвоста"] # 0xeb75 (en: 'leftwards arrow from bar tail', google translation) - - "": [t: "стрелка вправо от хвоста"] # 0xeb76 (en: 'rightwards arrow from bar tail', google translation) - - "": [t: "стрелка вправо от стрелки бар"] # 0xeb77 (en: 'rightwards arrow from bar arrowhead', google translation) - - "": [t: "вверх гарпун из бара с барб -слева стрел"] # 0xeb78 (en: 'upwards harpoon from bar with barb leftwards arrowhead', google translation) - - "": [t: "стрелка вправо над стрелкой влево справа"] # 0xeb79 (en: 'rightwards arrow over leftwards arrow right', google translation) - - "": [t: "вправо стрел налево стрел влево"] # 0xeb7a (en: 'rightwards arrow over leftwards arrow left', google translation) - - "": [t: "стрелка слева направо вправо"] # 0xeb7b (en: 'leftwards arrow over rightwards arrow right', google translation) - - "": [t: "стрелка слева направо влево"] # 0xeb7c (en: 'leftwards arrow over rightwards arrow left', google translation) - - "": [t: "стрелка вверх от стрелки бара"] # 0xeb7d (en: 'upwards arrow from bar arrowhead', google translation) - - "": [t: "стрелка вверх от хвоста"] # 0xeb7e (en: 'upwards arrow from bar tail', google translation) - - "": [t: "стрелка вниз от хвоста"] # 0xeb7f (en: 'downwards arrow from bar tail', google translation) - - "": [t: "стрелка вниз от стрелки бар"] # 0xeb80 (en: 'downwards arrow from bar arrowhead', google translation) - - "": [t: "вниз по гарпуне от бара с барб прямо сразу"] # 0xeb81 (en: 'downwards harpoon from bar with barb rightwards arrowhead', google translation) - - "": [t: "вверх гарпун слева от дна вниз вниз"] # 0xeb82 (en: 'upwards harpoon to the left of downwards harpoon bottom', google translation) - - "": [t: "вверх гарпун слева от вниз харпун экспендера"] # 0xeb83 (en: 'upwards harpoon to the left of downwards harpoon extender', google translation) - - "": [t: "вниз по гарпуне слева от вершины harpoon вверх"] # 0xeb84 (en: 'downwards harpoon to the left of upwards harpoon top', google translation) - - "": [t: "вверх гарпун слева от вершины гарпуна вниз"] # 0xeb85 (en: 'upwards harpoon to the left of downwards harpoon top', google translation) - - "": [t: "вниз по гарпуне слева от удлинителя harpoon вверх"] # 0xeb86 (en: 'downwards harpoon to the left of the upwards harpoon extender', google translation) - - "": [t: "вниз по гарпуне слева от дна вверх гарпуна"] # 0xeb87 (en: 'downwards harpoon to the left of the upwards harpoon bottom', google translation) - - "": [t: "вверх стрелка слева от дна стрелы вниз"] # 0xeb88 (en: 'upwards arrow leftwards of downwards arrow bottom', google translation) - - "": [t: "вниз стрелка слева от вершины стрелы вверх"] # 0xeb89 (en: 'downwards arrow leftwards of upwards arrow top', google translation) - - "": [t: "вверх стрелка слева от вершины стрелы вниз"] # 0xeb8a (en: 'upwards arrow leftwards of downwards arrow top', google translation) - - "": [t: "вниз стрелка слева от дна стрелы вверх"] # 0xeb8b (en: 'downwards arrow leftwards of upwards arrow bottom', google translation) - - "": [t: "левый направо стрелками удлинитель"] # 0xeb8c (en: 'leftwards rightwards arrows extender', google translation) - - "": [t: "северо -восточный экспендер"] # 0xeb8d (en: 'north east arrow extender', google translation) - - "": [t: "северо -западный экспендер"] # 0xeb8e (en: 'north west arrow extender', google translation) - - "": [t: "вниз по направлению скобки влево"] # 0xec00 (en: 'down pointing brace left', google translation) - - "": [t: "вниз по направлению скобки в середине"] # 0xec01 (en: 'down pointing brace mid', google translation) - - "": [t: "вниз по указанию скобки вправо"] # 0xec02 (en: 'down pointing brace right', google translation) - - "": [t: "горизонтальный удлинитель"] # 0xec03 (en: 'horizontal brace extender', google translation) - - "": [t: "укажите скобку влево"] # 0xec04 (en: 'up pointing brace left', google translation) - - "": [t: "укажите скобку в середине"] # 0xec05 (en: 'up pointing brace mid', google translation) - - "": [t: "установленная скоба правильно"] # 0xec06 (en: 'up-pointing brace right', google translation) - - "": [t: "левый вертикальный бар"] # 0xec07 (en: 'left vertical bar', google translation) - - "": [t: "правый вертикальный бар"] # 0xec08 (en: 'right vertical bar', google translation) - - "": [t: "левый двойной вертикальный бар"] # 0xec09 (en: 'left double vertical bar', google translation) - - "": [t: "правая двойная вертикальная бар"] # 0xec0a (en: 'right double vertical bar', google translation) - - "": [t: "горизонтальный растяжение кронштейна"] # 0xec0b (en: 'horizontal bracket extender', google translation) - - "": [t: "под квадратным кронштейном"] # 0xec0c (en: 'under square bracket', google translation) - - "⎵": [t: "под квадратным кронштейном"] # 0x23b5 (en: 'under square bracket', google translation) - - "": [t: "над квадратным кронштейном"] # 0xec0d (en: 'over square bracket', google translation) - - "⎴": [t: "над квадратным кронштейном"] # 0x23b4 (en: 'over square bracket', google translation) - - "": [t: "под скобкой ушел"] # 0xec0e (en: 'under bracket left', google translation) - - "": [t: "под скобкой справа"] # 0xec0f (en: 'under bracket right', google translation) - - "": [t: "за скобкой ушел"] # 0xec10 (en: 'over bracket left', google translation) - - "": [t: "над кронштейном вправо"] # 0xec11 (en: 'over bracket right', google translation) - - "": [t: "левый скол 1"] # 0xec12 (en: 'left parens 1', google translation) - - "": [t: "левый скол 2"] # 0xec13 (en: 'left parens 2', google translation) - - "": [t: "левый скол 3"] # 0xec14 (en: 'left parens 3', google translation) - - "": [t: "левый скол 4"] # 0xec15 (en: 'left parens 4', google translation) - - "": [t: "правая скобка 1"] # 0xec16 (en: 'right parens 1', google translation) - - "": [t: "правая скобка 2"] # 0xec17 (en: 'right parens 2', google translation) - - "": [t: "правая скобка 3"] # 0xec18 (en: 'right parens 3', google translation) - - "": [t: "правая скобка 4"] # 0xec19 (en: 'right parens 4', google translation) - - "": [t: "радикальный 1"] # 0xec1a (en: 'radical 1', google translation) - - "": [t: "радикальный 2"] # 0xec1b (en: 'radical 2', google translation) - - "": [t: "радикал 3"] # 0xec1c (en: 'radical 3', google translation) - - "": [t: "радикал 4"] # 0xec1d (en: 'radical 4', google translation) - - "": [t: "радикал 5"] # 0xec1e (en: 'radical 5', google translation) - - "": [t: "радикальное дно"] # 0xec1f (en: 'radical bottom', google translation) - - "": [t: "радикальный вертикальный удлинитель"] # 0xec20 (en: 'radical vertical extender', google translation) - - "": [t: "радикальный топ"] # 0xec21 (en: 'radical top', google translation) - - "": [t: "оставленный белый топ кронштейна"] # 0xec22 (en: 'left white bracket top', google translation) - - "": [t: "оставый белый растяжение кронштейна"] # 0xec23 (en: 'left white bracket extender', google translation) - - "": [t: "левый белый кронштейн дно"] # 0xec24 (en: 'left white bracket bottom', google translation) - - "": [t: "правый белый кронштейн"] # 0xec25 (en: 'right white bracket top', google translation) - - "": [t: "правый белый кронштейн"] # 0xec26 (en: 'right white bracket extender', google translation) - - "": [t: "правый белый кронштейн дно"] # 0xec27 (en: 'right white bracket bottom', google translation) - - "": [t: "оставил белый кудрявый кронштейн"] # 0xec30 (en: 'left white curly bracket', google translation) - - "": [t: "правый белый кудрявый кронштейн"] # 0xec31 (en: 'right white curly bracket', google translation) - - "": [t: "знак длинного дивизии"] # 0xec32 (en: 'long division sign', google translation) - - "": [t: "длинное знаком дивизии"] # 0xec33 (en: 'long division sign extender', google translation) - - "": [t: "короткое подразделение"] # 0xec34 (en: 'short division', google translation) - - "": [t: "двойной юго -запад к северо -востоку эм бонд"] # 0xec40 (en: 'double southwest to northeast em bond', google translation) - - "": [t: "двойной северо -запад до юго -восточной эм бонд"] # 0xec41 (en: 'double northwest to southeast em bond', google translation) - - "": [t: "единая горизонтальная em -связь"] # 0xec42 (en: 'single horizontal em bond', google translation) - - "": [t: "двойная горизонтальная em -связь"] # 0xec43 (en: 'double horizontal em bond', google translation) - - "": [t: "тройная горизонтальная эм бонг"] # 0xec44 (en: 'triple horizontal em bond', google translation) - - "": [t: "одиночная вертикальная облигация"] # 0xec45 (en: 'single vertical em bond', google translation) - - "": [t: "двойная вертикальная облигация"] # 0xec46 (en: 'double vertical em bond', google translation) - - "": [t: "тройная вертикальная облигация"] # 0xec47 (en: 'triple vertical em bond', google translation) - - "": [t: "меньше, чем эм бонд"] # 0xec48 (en: 'less than em bond', google translation) - - "": [t: "больше, чем эм бонд"] # 0xec49 (en: 'greater than em bond', google translation) - - "": [t: "одиночная горизонтальная en bond"] # 0xec4a (en: 'single horizontal en bond', google translation) - - "": [t: "двойная горизонтальная en bond"] # 0xec4b (en: 'double horizontal en bond', google translation) - - "": [t: "тройная горизонтальная связь"] # 0xec4c (en: 'triple horizontal en bond', google translation) - - "": [t: "верхний левый прямоугольник"] # 0xec80 (en: 'top left rectangle', google translation) - - "": [t: "внизу левый прямоугольник"] # 0xec81 (en: 'bottom left rectangle', google translation) - - "": [t: "вверху правого прямоугольника"] # 0xec90 (en: 'top right rectangle', google translation) - - "": [t: "нижний правый прямоугольник"] # 0xec91 (en: 'bottom right rectangle', google translation) - - "": [t: "синтетический угол дивизии"] # 0xec92 (en: 'synthetic division corner', google translation) - - "": [t: "синтетическое разделение горизонтальное удлинитель"] # 0xec93 (en: 'synthetic division horizontal extender', google translation) - - "": [t: "вертикальное удлинение синтетического деления"] # 0xec94 (en: 'synthetic division vertical extender', google translation) - - "": [t: "левый потолок"] # 0xec95 (en: 'left ceiling floor extender', google translation) - - "": [t: "правый потолок"] # 0xec96 (en: 'right ceiling floor extender', google translation) - - "": [t: "над скобком удлинителя"] # 0xec97 (en: 'over bracket extender', google translation) - - "": [t: "вертикальный батончик"] # 0xec98 (en: 'vertical bar extender', google translation) - - "": [t: "левый двойной вертикальный удлинитель"] # 0xec99 (en: 'left double vertical bar extender', google translation) - - "": [t: "горизонтальный батончик"] # 0xec9a (en: 'horizontal bar extender', google translation) - - "": [t: "под преодолеванием кронштейна"] # 0xec9c (en: 'under bracket extender', google translation) - - "": [t: "указывая в скобках справа"] # 0xec9d (en: 'down pointing paren right', google translation) - - "": [t: "указывание о скобках"] # 0xec9e (en: 'down pointing paren extender', google translation) - - "": [t: "установка вниз по указанию скобок"] # 0xec9f (en: 'down pointing paren left', google translation) - - "": [t: "укажите удлинители"] # 0xeca0 (en: 'up pointing brace extender', google translation) - - "": [t: "указывая в скобках"] # 0xeca1 (en: 'up pointing paren left', google translation) - - "": [t: "укажите удлинители скобок"] # 0xeca2 (en: 'up pointing paren extender', google translation) - - "": [t: "указывая в скобках"] # 0xeca3 (en: 'up pointing paren right', google translation) - - "": [t: "вниз по направлению скобки удлинителя"] # 0xeca4 (en: 'down pointing brace extender', google translation) - - "": [t: "планка константа над двумя pi bar"] # 0xed00 (en: 'planck constant over two pi bar', google translation) - - "": [t: "зеркало g"] # 0xed01 (en: 'mirror g', google translation) - - "": [t: "dotless j"] # 0xed02 (google translation) - - "": [t: "дигамма"] # 0xed03 (en: 'digamma', google translation) - - "ϝ": [t: "дигамма"] # 0x3dd (en: 'digamma') - - "": [t: ""] # 0xed10 (en: 'd', google translation) - - "ⅆ": [t: "ⅆ"] # 0x2146 (en: 'd', google translation) - - "": [t: ""] # 0xed11 (en: 'e', google translation) - - "ⅇ": [t: "ⅇ"] # 0x2147 (en: 'e', google translation) - - "": [t: ""] # 0xed12 (en: 'i', google translation) - - "ⅈ": [t: "ⅈ"] # 0x2148 (en: 'i', google translation) - - "": [t: ""] # 0xed13 (en: 'j', google translation) + then: [t: "крест"] + else: [t: "векторное произведение"] + - "⨰": [t: "знак умножения с точкой сверху"] # 0x2a30 + - "⨱": [t: "знак умножения с подчёркиванием"] # 0x2a31 + - "⨲": [t: "полупрямое произведение с замкнутым низом"] # 0x2a32 + - "⨳": [t: "разбивающее произведение"] # 0x2a33 + - "⨴": [t: "знак умножения в левой половине круга"] # 0x2a34 + - "⨵": [t: "знак умножения в правой половине круга"] # 0x2a35 + - "⨶": [t: "знак умножения в круге с циркумфлексом"] # 0x2a36 + - "⨷": [t: "знак умножения в двойном круге"] # 0x2a37 + - "⨸": [t: "знак деления в круге"] # 0x2a38 + - "⨹": [t: "знак плюс в треугольнике"] # 0x2a39 + - "⨺": [t: "знак минус в треугольнике"] # 0x2a3a + - "⨻": [t: "знак умножения в треугольнике"] # 0x2a3b + - "⨼": [t: "внутреннее произведение"] # 0x2a3c + - "⨽": [t: "правое внутреннее произведение"] # 0x2a3d + - "⨾": [t: "Z-нотация реляционная композиция"] # 0x2a3e + - "⨿": [t: "амальгама или копроизведение"] # 0x2a3f + - "⩀": [t: "пересечение с точкой"] # 0x2a40 + - "⩁": [t: "объединение со знаком минус"] # 0x2a41 + - "⩂": [t: "объединение с надчёркиванием"] # 0x2a42 + - "⩃": [t: "пересечение с надчёркиванием"] # 0x2a43 + - "⩄": [t: "пересечение с логическим и"] # 0x2a44 + - "⩅": [t: "объединение с логическим или"] # 0x2a45 + - "⩆": [t: "объединение над пересечением"] # 0x2a46 + - "⩇": [t: "пересечение над объединением"] # 0x2a47 + - "⩈": [t: "объединение над чертой над пересечением"] # 0x2a48 + - "⩉": [t: "пересечение над чертой над объединением"] # 0x2a49 + - "⩊": [t: "объединение рядом и соединённое с объединением"] # 0x2a4a + - "⩋": [t: "пересечение рядом и соединённое с пересечением"] # 0x2a4b + - "⩌": [t: "замкнутое объединение с засечками"] # 0x2a4c + - "⩍": [t: "замкнутое пересечение с засечками"] # 0x2a4d + - "⩎": [t: "двойное квадратное пересечение"] # 0x2a4e + - "⩏": [t: "двойное квадратное объединение"] # 0x2a4f + - "⩐": [t: "замкнутое объединение с засечками и разбивающим произведением"] # 0x2a50 + - "⩑": [t: "логическое и с точкой сверху"] # 0x2a51 + - "⩒": [t: "логическое или с точкой сверху"] # 0x2a52 + - "⩓": [t: "двойное логическое и"] # 0x2a53 + - "⩔": [t: "двойное логическое или"] # 0x2a54 + - "⩕": [t: "два пересекающихся логических и"] # 0x2a55 + - "⩖": [t: "два пересекающихся логических или"] # 0x2a56 + - "⩗": [t: "наклонное большое или"] # 0x2a57 + - "⩘": [t: "наклонное большое и"] # 0x2a58 + - "⩙": [t: "логическое или перекрывает логическое и"] # 0x2a59 + - "⩚": [t: "логическое и со средним стержнем"] # 0x2a5a + - "⩛": [t: "логическое или со средним стержнем"] # 0x2a5b + - "⩜": [t: "логическое и с горизонтальным тире"] # 0x2a5c + - "⩝": [t: "логическое или с горизонтальным тире"] # 0x2a5d + - "⩞": [t: "логическое и с двойным надчёркиванием"] # 0x2a5e + - "⩟": [t: "логическое и с подчёркиванием"] # 0x2a5f + - "⩠": [t: "логическое и с двойным подчёркиванием"] # 0x2a60 + - "⩡": [t: "маленькая галочка с подчёркиванием"] # 0x2a61 + - "⩢": [t: "логическое или с двойным надчёркиванием"] # 0x2a62 + - "⩣": [t: "логическое или с двойным подчёркиванием"] # 0x2a63 + - "⩤": [t: "Z-нотация антиограничение области"] # 0x2a64 + - "⩥": [t: "Z-нотация антиограничение диапазона"] # 0x2a65 + - "⩦": [t: "знак равенства с точкой снизу"] # 0x2a66 + - "⩧": [t: "тождественно с точкой сверху"] # 0x2a67 + - "⩨": [t: "тройная горизонтальная черта с двойным вертикальным штрихом"] # 0x2a68 + - "⩩": [t: "тройная горизонтальная черта с тройным вертикальным штрихом"] # 0x2a69 + - "⩪": [t: "тильда с точкой сверху"] # 0x2a6a + - "⩫": [t: "тильда с растущими точками"] # 0x2a6b + - "⩬": [t: "похоже минус похоже"] # 0x2a6c + - "⩭": [t: "конгруэнтно с точкой сверху"] # 0x2a6d + - "⩮": [t: "равно со звёздочкой"] # 0x2a6e + - "⩯": [t: "почти равно с циркумфлексом"] # 0x2a6f + - "⩰": [t: "приблизительно равно или равно"] # 0x2a70 + - "⩱": [t: "знак равенства над знаком плюс"] # 0x2a71 + - "⩲": [t: "знак плюс над знаком равенства"] # 0x2a72 + - "⩳": [t: "знак равенства над тильдой"] # 0x2a73 + - "⩴": [t: "двойное двоеточие равно"] # 0x2a74 + - "⩵": [t: "два последовательных знака равенства"] # 0x2a75 + - "⩶": [t: "три последовательных знака равенства"] # 0x2a76 + - "⩷": [t: "знак равенства с двумя точками сверху и двумя точками снизу"] # 0x2a77 + - "⩸": [t: "эквивалентно с четырьмя точками сверху"] # 0x2a78 + - "⩹": [t: "меньше с кругом внутри"] # 0x2a79 + - "⩺": [t: "больше с кругом внутри"] # 0x2a7a + - "⩻": [t: "меньше с вопросительным знаком сверху"] # 0x2a7b + - "⩼": [t: "больше с вопросительным знаком сверху"] # 0x2a7c + - "⩽": [t: "меньше или наклонно равно"] # 0x2a7d + - "⩾": [t: "больше или наклонно равно"] # 0x2a7e + - "⩿": [t: "меньше или наклонно равно с точкой внутри"] # 0x2a7f + - "⪀": [t: "больше или наклонно равно с точкой внутри"] # 0x2a80 + - "⪁": [t: "меньше или наклонно равно с точкой сверху"] # 0x2a81 + - "⪂": [t: "больше или наклонно равно с точкой сверху"] # 0x2a82 + - "⪃": [t: "меньше или наклонно равно с точкой сверху справа"] # 0x2a83 + - "⪄": [t: "больше или наклонно равно с точкой сверху слева"] # 0x2a84 + - "⪅": [t: "меньше или приблизительно"] # 0x2a85 + - "⪆": [t: "больше или приблизительно"] # 0x2a86 + - "⪇": [t: "меньше и одинарная линия не равно"] # 0x2a87 + - "⪈": [t: "больше и одинарная линия не равно"] # 0x2a88 + - "⪉": [t: "меньше и не приблизительно"] # 0x2a89 + - "⪊": [t: "больше и не приблизительно"] # 0x2a8a + - "⪋": [t: "меньше над двойной линией равно над больше"] # 0x2a8b + - "⪌": [t: "больше над двойной линией равно над меньше"] # 0x2a8c + - "⪍": [t: "меньше над похоже или равно"] # 0x2a8d + - "⪎": [t: "больше над похоже или равно"] # 0x2a8e + - "⪏": [t: "меньше над похоже над больше"] # 0x2a8f + - "⪐": [t: "больше над похоже над меньше"] # 0x2a90 + - "⪑": [t: "меньше над больше над двойной линией равно"] # 0x2a91 + - "⪒": [t: "больше над меньше над двойной линией равно"] # 0x2a92 + - "⪓": [t: "меньше над наклонным равно над больше над наклонным равно"] # 0x2a93 + - "⪔": [t: "больше над наклонным равно над меньше над наклонным равно"] # 0x2a94 + - "⪕": [t: "наклонно равно или меньше"] # 0x2a95 + - "⪖": [t: "наклонно равно или больше"] # 0x2a96 + - "⪗": [t: "наклонно равно или меньше с точкой внутри"] # 0x2a97 + - "⪘": [t: "наклонно равно или больше с точкой внутри"] # 0x2a98 + - "⪙": [t: "двойная линия равно или меньше"] # 0x2a99 + - "⪚": [t: "двойная линия равно или больше"] # 0x2a9a + - "⪛": [t: "двойная линия наклонно равно или меньше"] # 0x2a9b + - "⪜": [t: "двойная линия наклонно равно или больше"] # 0x2a9c + - "⪝": [t: "похоже или меньше"] # 0x2a9d + - "⪞": [t: "похоже или больше"] # 0x2a9e + - "⪟": [t: "похоже над меньше над знаком равенства"] # 0x2a9f + - "⪠": [t: "похоже над больше над знаком равенства"] # 0x2aa0 + - "⪡": [t: "двойное вложенное меньше"] # 0x2aa1 + - "⪢": [t: "двойное вложенное больше"] # 0x2aa2 + - "⪣": [t: "двойное вложенное меньше с подчёркиванием"] # 0x2aa3 + - "⪤": [t: "больше перекрывает меньше"] # 0x2aa4 + - "⪥": [t: "больше рядом с меньше"] # 0x2aa5 + - "⪦": [t: "меньше замкнутое кривой"] # 0x2aa6 + - "⪧": [t: "больше замкнутое кривой"] # 0x2aa7 + - "⪨": [t: "меньше замкнутое кривой над наклонным равно"] # 0x2aa8 + - "⪩": [t: "больше замкнутое кривой над наклонным равно"] # 0x2aa9 + - "⪪": [t: "меньше чем"] # 0x2aaa + - "⪫": [t: "больше чем"] # 0x2aab + - "⪬": [t: "меньше чем или равно"] # 0x2aac + - "⪭": [t: "больше чем или равно"] # 0x2aad + - "⪮": [t: "знак равенства с бугром сверху"] # 0x2aae + - "⪯": [t: "предшествует над одинарной линией равенства"] # 0x2aaf + - "⪰": [t: "следует над одинарной линией равенства"] # 0x2ab0 + - "⪱": [t: "предшествует над одинарной линией не равно"] # 0x2ab1 + - "⪲": [t: "следует над одинарной линией не равно"] # 0x2ab2 + - "⪳": [t: "предшествует над знаком равенства"] # 0x2ab3 + - "⪴": [t: "следует над знаком равенства"] # 0x2ab4 + - "⪵": [t: "предшествует над не равно"] # 0x2ab5 + - "⪶": [t: "следует над не равно"] # 0x2ab6 + - "⪷": [t: "предшествует над почти равно"] # 0x2ab7 + - "⪸": [t: "следует над почти равно"] # 0x2ab8 + - "⪹": [t: "предшествует над не почти равно"] # 0x2ab9 + - "⪺": [t: "следует над не почти равно"] # 0x2aba + - "⪻": [t: "двойное предшествует"] # 0x2abb + - "⪼": [t: "двойное следует"] # 0x2abc + - "⪽": [t: "подмножество с точкой"] # 0x2abd + - "⪾": [t: "надмножество с точкой"] # 0x2abe + - "⪿": [t: "подмножество со знаком плюс снизу"] # 0x2abf + - "⫀": [t: "надмножество со знаком плюс снизу"] # 0x2ac0 + - "⫁": [t: "подмножество со знаком умножения снизу"] # 0x2ac1 + - "⫂": [t: "надмножество со знаком умножения снизу"] # 0x2ac2 + - "⫃": [t: "подмножество или равно с точкой сверху"] # 0x2ac3 + - "⫄": [t: "надмножество или равно с точкой сверху"] # 0x2ac4 + - "⫅": [t: "подмножество над знаком равенства"] # 0x2ac5 + - "⫆": [t: "надмножество над знаком равенства"] # 0x2ac6 + - "⫇": [t: "подмножество над тильдой"] # 0x2ac7 + - "⫈": [t: "надмножество над тильдой"] # 0x2ac8 + - "⫉": [t: "подмножество над почти равно"] # 0x2ac9 + - "⫊": [t: "надмножество над почти равно"] # 0x2aca + - "⫋": [t: "подмножество над не равно"] # 0x2acb + - "⫌": [t: "надмножество над не равно"] # 0x2acc + - "⫍": [t: "квадратный левый открытый ящик"] # 0x2acd + - "⫎": [t: "квадратный правый открытый ящик"] # 0x2ace + - "⫏": [t: "замкнутое подмножество"] # 0x2acf + - "⫐": [t: "замкнутое надмножество"] # 0x2ad0 + - "⫑": [t: "замкнутое подмножество или равно"] # 0x2ad1 + - "⫒": [t: "замкнутое надмножество или равно"] # 0x2ad2 + - "⫓": [t: "подмножество над надмножеством"] # 0x2ad3 + - "⫔": [t: "надмножество над подмножеством"] # 0x2ad4 + - "⫕": [t: "подмножество над подмножеством"] # 0x2ad5 + - "⫖": [t: "надмножество над надмножеством"] # 0x2ad6 + - "⫗": [t: "надмножество рядом с подмножеством"] # 0x2ad7 + - "⫘": [t: "надмножество рядом и соединённое тире с подмножеством"] # 0x2ad8 + - "⫙": [t: "элемент, открытый вниз"] # 0x2ad9 + - "⫚": [t: "вилы с тройником сверху"] # 0x2ada + - "⫛": [t: "трансверсальное пересечение"] # 0x2adb + - "⫝̸": [t: "ветвление"] # 0x2adc + - "⫝": [t: "неветвление"] # 0x2add + - "⫞": [t: "короткий левый таск"] # 0x2ade + - "⫟": [t: "короткий нижний таск"] # 0x2adf + - "⫠": [t: "короткий верхний таск"] # 0x2ae0 + - "⫡": [t: "перпендикуляр с s"] # 0x2ae1 + - "⫢": [t: "вертикальная черта тройной правый турникет"] # 0x2ae2 + - "⫣": [t: "двойная вертикальная черта левый турникет"] # 0x2ae3 + - "⫤": [t: "вертикальная черта двойной левый турникет"] # 0x2ae4 + - "⫥": [t: "двойная вертикальная черта двойной левый турникет"] # 0x2ae5 + - "⫦": [t: "длинное тире от левого члена двойной вертикальной"] # 0x2ae6 + - "⫧": [t: "короткий нижний таск с надчёркиванием"] # 0x2ae7 + - "⫨": [t: "короткий верхний таск с подчёркиванием"] # 0x2ae8 + - "⫩": [t: "короткий верхний таск над коротким нижним таском"] # 0x2ae9 + - "⫪": [t: "двойной нижний таск"] # 0x2aea + - "⫫": [t: "двойной верхний таск"] # 0x2aeb + - "⫬": [t: "знак не с двойным штрихом"] # 0x2aec + - "⫭": [t: "обратный знак не с двойным штрихом"] # 0x2aed + - "⫮": [t: "не делит с обратной перечёркивающей косой"] # 0x2aee + - "⫯": [t: "вертикальная линия с кругом сверху"] # 0x2aef + - "⫰": [t: "вертикальная линия с кругом снизу"] # 0x2af0 + - "⫱": [t: "нижний таск с кругом снизу"] # 0x2af1 + - "⫲": [t: "параллельно с горизонтальным штрихом"] # 0x2af2 + - "⫳": [t: "параллельно с тильдой"] # 0x2af3 + - "⫴": [t: "тройная вертикальная черта бинарное отношение"] # 0x2af4 + - "⫵": [t: "тройная вертикальная черта с горизонтальным штрихом"] # 0x2af5 + - "⫶": [t: "оператор тройное двоеточие"] # 0x2af6 + - "⫷": [t: "тройное вложенное меньше"] # 0x2af7 + - "⫸": [t: "тройное вложенное больше"] # 0x2af8 + - "⫹": [t: "двойная линия наклонно меньше или равно"] # 0x2af9 + - "⫺": [t: "двойная линия наклонно больше или равно"] # 0x2afa + - "⫻": [t: "тройная косая черта бинарное отношение"] # 0x2afb + - "⫼": [t: "оператор большая тройная вертикальная черта"] # 0x2afc + - "⫽": [t: "оператор двойная косая черта"] # 0x2afd + - "⫾": [t: "белая вертикальная черта"] # 0x2afe + - "⫿": [t: "белая вертикальная черта"] # 0x2aff + - "⬀": [t: "белая стрелка на северо-восток"] # 0x2b00 + - "⬁": [t: "белая стрелка на северо-запад"] # 0x2b01 + - "⬂": [t: "белая стрелка на юго-восток"] # 0x2b02 + - "⬃": [t: "белая стрелка на юго-запад"] # 0x2b03 + - "⬄": [t: "белая стрелка влево-вправо"] # 0x2b04 + - "⬅": [t: "чёрная стрелка влево"] # 0x2b05 + - "⬆": [t: "чёрная стрелка вверх"] # 0x2b06 + - "⬇": [t: "чёрная стрелка вниз"] # 0x2b07 + - "⬈": [t: "чёрная стрелка на северо-восток"] # 0x2b08 + - "⬉": [t: "чёрная стрелка на северо-запад"] # 0x2b09 + - "⬊": [t: "чёрная стрелка на юго-восток"] # 0x2b0a + - "⬋": [t: "чёрная стрелка на юго-запад"] # 0x2b0b + - "⬌": [t: "чёрная стрелка влево-вправо"] # 0x2b0c + - "⬍": [t: "чёрная стрелка вверх-вниз"] # 0x2b0d + - "⬎": [t: "стрелка вправо с наконечником вниз"] # 0x2b0e + - "⬏": [t: "стрелка вправо с наконечником вверх"] # 0x2b0f + - "⬐": [t: "стрелка влево с наконечником вниз"] # 0x2b10 + - "⬑": [t: "стрелка влево с наконечником вверх"] # 0x2b11 + - "⬒": [t: "квадрат с верхней половиной чёрной"] # 0x2b12 + - "⬓": [t: "квадрат с нижней половиной чёрной"] # 0x2b13 + - "⬔": [t: "квадрат с верхней правой диагональной половиной чёрной"] # 0x2b14 + - "⬕": [t: "квадрат с нижней левой диагональной половиной чёрной"] # 0x2b15 + - "⬖": [t: "ромб с левой половиной чёрной"] # 0x2b16 + - "⬗": [t: "ромб с правой половиной чёрной"] # 0x2b17 + - "⬘": [t: "ромб с верхней половиной чёрной"] # 0x2b18 + - "⬙": [t: "ромб с нижней половиной чёрной"] # 0x2b19 + - "⬚": [t: "ящик"] # 0x2b1a + - "⬛": [t: "чёрный большой квадрат"] # 0x2b1b + - "⬜": [t: "белый большой квадрат"] # 0x2b1c + - "⬝": [t: "чёрный очень маленький квадрат"] # 0x2b1d + - "⬞": [t: "белый очень маленький квадрат"] # 0x2b1e + - "⬟": [t: "чёрный пятиугольник"] # 0x2b1f + - "⬠": [t: "белый пятиугольник"] # 0x2b20 + - "⬡": [t: "белый шестиугольник"] # 0x2b21 + - "⬢": [t: "чёрный шестиугольник"] # 0x2b22 + - "⬣": [t: "горизонтальный чёрный шестиугольник"] # 0x2b23 + - "⬤": [t: "чёрный большой круг"] # 0x2b24 + - "⬥": [t: "чёрный средний ромб"] # 0x2b25 + - "⬦": [t: "белый средний ромб"] # 0x2b26 + - "⬧": [t: "чёрная средняя луковица"] # 0x2b27 + - "⬨": [t: "белая средняя луковица"] # 0x2b28 + - "⬩": [t: "чёрный маленький ромб"] # 0x2b29 + - "⬪": [t: "чёрная маленькая луковица"] # 0x2b2a + - "⬫": [t: "белая маленькая луковица"] # 0x2b2b + - "⬬": [t: "чёрный горизонтальный эллипс"] # 0x2b2c + - "⬭": [t: "белый горизонтальный эллипс"] # 0x2b2d + - "⬮": [t: "чёрный вертикальный эллипс"] # 0x2b2e + - "⬯": [t: "белый вертикальный эллипс"] # 0x2b2f + - "⬰": [t: "стрелка влево с маленьким кругом"] # 0x2b30 + - "⬱": [t: "три стрелки влево"] # 0x2b31 + - "⬲": [t: "стрелка влево с плюсом в круге"] # 0x2b32 + - "⬳": [t: "длинная волнистая стрелка влево"] # 0x2b33 + - "⬴": [t: "стрелка влево с двумя наконечниками и вертикальным штрихом"] # 0x2b34 + - "⬵": [t: "стрелка влево с двумя наконечниками и двойным вертикальным штрихом"] # 0x2b35 + - "⬶": [t: "стрелка влево с двумя наконечниками от черты"] # 0x2b36 + - "⬷": [t: "стрелка влево с двумя наконечниками и тройным пунктиром"] # 0x2b37 + - "⬸": [t: "стрелка влево с пунктирным стволом"] # 0x2b38 + - "⬹": [t: "стрелка влево с хвостом и вертикальным штрихом"] # 0x2b39 + - "⬺": [t: "стрелка влево с хвостом и двойным вертикальным штрихом"] # 0x2b3a + - "⬻": [t: "стрелка влево с двумя наконечниками и хвостом"] # 0x2b3b + - "⬼": [t: "стрелка влево с двумя наконечниками, хвостом и вертикальным штрихом"] # 0x2b3c + - "⬽": [t: "стрелка влево с двумя наконечниками, хвостом и двойным вертикальным штрихом"] # 0x2b3d + - "⬾": [t: "стрелка влево сквозь x"] # 0x2b3e + - "⬿": [t: "волновая стрелка, указывающая прямо влево"] # 0x2b3f + - "⭀": [t: "знак равенства над стрелкой влево"] # 0x2b40 + - "⭁": [t: "обратная тильда над стрелкой влево"] # 0x2b41 + - "⭂": [t: "стрелка влево над обратным почти равно"] # 0x2b42 + - "⭃": [t: "стрелка вправо сквозь больше"] # 0x2b43 + - "⭄": [t: "стрелка вправо сквозь надмножество"] # 0x2b44 + - "⭅": [t: "левая четверная стрелка"] # 0x2b45 + - "⭆": [t: "правая четверная стрелка"] # 0x2b46 + - "⭇": [t: "обратная тильда над стрелкой вправо"] # 0x2b47 + - "⭈": [t: "стрелка вправо над обратным почти равно"] # 0x2b48 + - "⭉": [t: "тильда над стрелкой влево"] # 0x2b49 + - "⭊": [t: "стрелка влево над почти равно"] # 0x2b4a + - "⭋": [t: "стрелка влево над обратной тильдой"] # 0x2b4b + - "⭌": [t: "стрелка вправо над обратной тильдой"] # 0x2b4c + - "⭐": [t: "белая средняя звезда"] # 0x2b50 + - "⭑": [t: "чёрная маленькая звезда"] # 0x2b51 + - "⭒": [t: "белая маленькая звезда"] # 0x2b52 + - "⭓": [t: "чёрный пятиугольник остриём вправо"] # 0x2b53 + - "⭔": [t: "белый пятиугольник остриём вправо"] # 0x2b54 + - "⭕": [t: "жирный большой круг"] # 0x2b55 + - "⭖": [t: "жирный овал с овалом внутри"] # 0x2b56 + - "⭗": [t: "жирный круг с кругом внутри"] # 0x2b57 + - "⭘": [t: "жирный круг"] # 0x2b58 + - "⭙": [t: "жирный круг с андреевским крестом"] # 0x2b59 + - "⸀": [t: "маркер замены прямым углом"] # 0x2e00 + - "⸁": [t: "маркер замены прямым углом с точкой"] # 0x2e01 + - "⸂": [t: "левая скобка замены"] # 0x2e02 + - "⸃": [t: "правая скобка замены"] # 0x2e03 + - "⸄": [t: "левая пунктирная скобка замены"] # 0x2e04 + - "⸅": [t: "правая пунктирная скобка замены"] # 0x2e05 + - "⸆": [t: "приподнятый маркер вставки"] # 0x2e06 + - "⸇": [t: "приподнятый пунктирный маркер вставки"] # 0x2e07 + - "⸈": [t: "пунктирный маркер транспозиции"] # 0x2e08 + - "⸉": [t: "левая скобка транспозиции"] # 0x2e09 + - "⸊": [t: "правая скобка транспозиции"] # 0x2e0a + - "⸋": [t: "приподнятый квадрат"] # 0x2e0b + - "⸌": [t: "левая приподнятая скобка пропуска"] # 0x2e0c + - "⸍": [t: "правая приподнятая скобка пропуска"] # 0x2e0d + - "⸎": [t: "издательская коронида"] # 0x2e0e + - "⸏": [t: "параграфос"] # 0x2e0f + - "⸐": [t: "вилообразный параграфос"] # 0x2e10 + - "⸑": [t: "обратный вилообразный параграфос"] # 0x2e11 + - "⸒": [t: "гиподиастола"] # 0x2e12 + - "⸓": [t: "пунктирный обел"] # 0x2e13 + - "⸔": [t: "нижняя якорная скобка"] # 0x2e14 + - "⸕": [t: "верхняя якорная скобка"] # 0x2e15 + - "⸖": [t: "пунктирный правый угол"] # 0x2e16 + - "⸗": [t: "двойной косой дефис"] # 0x2e17 + - "⸘": [t: "перевёрнутый интерробанг"] # 0x2e18 + - "⸙": [t: "пальмовая ветвь"] # 0x2e19 + - "⸚": [t: "дефис с диерезисом"] # 0x2e1a + - "⸛": [t: "тильда с кольцом сверху"] # 0x2e1b + - "⸜": [t: "левая нижняя парафразная скобка"] # 0x2e1c + - "⸝": [t: "правая нижняя парафразная скобка"] # 0x2e1d + - "⸞": [t: "тильда с точкой сверху"] # 0x2e1e + - "⸟": [t: "тильда с точкой снизу"] # 0x2e1f + - "⸠": [t: "левая вертикальная черта с пером"] # 0x2e20 + - "⸡": [t: "правая вертикальная черта с пером"] # 0x2e21 + - "⸢": [t: "верхняя левая половина скобки"] # 0x2e22 + - "⸣": [t: "верхняя правая половина скобки"] # 0x2e23 + - "⸤": [t: "нижняя левая половина скобки"] # 0x2e24 + - "⸥": [t: "нижняя правая половина скобки"] # 0x2e25 + - "⸦": [t: "левая боковая U-скобка"] # 0x2e26 + - "⸧": [t: "правая боковая U-скобка"] # 0x2e27 + - "⸨": [t: "левая двойная скобка"] # 0x2e28 + - "⸩": [t: "правая двойная скобка"] # 0x2e29 + - "⸪": [t: "две точки над одной точкой"] # 0x2e2a + - "⸫": [t: "одна точка над двумя точками"] # 0x2e2b + - "⸬": [t: "квадратная четырёхточечная пунктуация"] # 0x2e2c + - "⸭": [t: "знак из пяти точек"] # 0x2e2d + - "⸮": [t: "обратный вопросительный знак"] # 0x2e2e + - "ⸯ": [t: "вертикальная тильда"] # 0x2e2f + - "⸰": [t: "кольцевая точка"] # 0x2e30 + - "⸱": [t: "разделитель слов средняя точка"] # 0x2e31 + - "⸲": [t: "перевёрнутая запятая"] # 0x2e32 + - "⸳": [t: "приподнятая точка"] # 0x2e33 + - "⸴": [t: "приподнятая запятая"] # 0x2e34 + - "⸵": [t: "перевёрнутая точка с запятой"] # 0x2e35 + - "⸶": [t: "крестик с левой защитой"] # 0x2e36 + - "⸷": [t: "крестик с правой защитой"] # 0x2e37 + - "⸸": [t: "перевёрнутый крестик"] # 0x2e38 + - "⸹": [t: "верхняя половина знака параграфа"] # 0x2e39 + - "⸺": [t: "два длинных тире"] # 0x2e3a + - "⸻": [t: "три длинных тире"] # 0x2e3b + - "〃": [t: "знак повторения"] # 0x3003 + - "〈": [t: "левая угловая скобка"] # 0x3008 + - "〉": [t: "правая угловая скобка"] # 0x3009 + - "《": [t: "левая двойная угловая скобка"] # 0x300a + - "》": [t: "правая двойная угловая скобка"] # 0x300b + - "「": [t: "левая угловая скобка"] # 0x300c + - "」": [t: "правая угловая скобка"] # 0x300d + - "『": [t: "левая белая угловая скобка"] # 0x300e + - "』": [t: "правая белая угловая скобка"] # 0x300f + - "【": [t: "левая чёрная лентикулярная скобка"] # 0x3010 + - "】": [t: "правая чёрная лентикулярная скобка"] # 0x3011 + - "〔": [t: "открывающая черепашья скобка"] # 0x3014 + - "〕": [t: "закрывающая черепашья скобка"] # 0x3015 + - "〖": [t: "левая белая лентикулярная скобка"] # 0x3016 + - "〗": [t: "правая белая лентикулярная скобка"] # 0x3017 + - "〘": [t: "левая белая черепашья скобка"] # 0x3018 + - "〙": [t: "правая белая черепашья скобка"] # 0x3019 + - "〚": [t: "левая белая квадратная скобка"] # 0x301a + - "〛": [t: "правая белая квадратная скобка"] # 0x301b + - "〜": [t: "волновое тире"] # 0x301c + - "〰": [t: "волнистое тире"] # 0x3030 + - "㉈": [t: "число десять в круге на чёрном квадрате"] # 0x3248 + - "㉉": [t: "число двадцать в круге на чёрном квадрате"] # 0x3249 + - "㉊": [t: "число тридцать в круге на чёрном квадрате"] # 0x324a + - "㉋": [t: "число сорок в круге на чёрном квадрате"] # 0x324b + - "㉌": [t: "число пятьдесят в круге на чёрном квадрате"] # 0x324c + - "㉍": [t: "число шестьдесят в круге на чёрном квадрате"] # 0x324d + - "㉎": [t: "число семьдесят в круге на чёрном квадрате"] # 0x324e + - "㉏": [t: "число восемьдесят в круге на чёрном квадрате"] # 0x324f + - "㉑": [t: "число двадцать один в круге"] # 0x3251 + - "㉒": [t: "число двадцать два в круге"] # 0x3252 + - "㉓": [t: "число двадцать три в круге"] # 0x3253 + - "㉔": [t: "число двадцать четыре в круге"] # 0x3254 + - "㉕": [t: "число двадцать пять в круге"] # 0x3255 + - "㉖": [t: "число двадцать шесть в круге"] # 0x3256 + - "㉗": [t: "число двадцать семь в круге"] # 0x3257 + - "㉘": [t: "число двадцать восемь в круге"] # 0x3258 + - "㉙": [t: "число двадцать девять в круге"] # 0x3259 + - "㉚": [t: "число тридцать в круге"] # 0x325a + - "㉛": [t: "число тридцать один в круге"] # 0x325b + - "㉜": [t: "число тридцать два в круге"] # 0x325c + - "㉝": [t: "число тридцать три в круге"] # 0x325d + - "㉞": [t: "число тридцать четыре в круге"] # 0x325e + - "㉟": [t: "число тридцать пять в круге"] # 0x325f + - "㊱": [t: "число тридцать шесть в круге"] # 0x32b1 + - "㊲": [t: "число тридцать семь в круге"] # 0x32b2 + - "㊳": [t: "число тридцать восемь в круге"] # 0x32b3 + - "㊴": [t: "число тридцать девять в круге"] # 0x32b4 + - "㊵": [t: "число сорок в круге"] # 0x32b5 + - "㊶": [t: "число сорок один в круге"] # 0x32b6 + - "㊷": [t: "число сорок два в круге"] # 0x32b7 + - "㊸": [t: "число сорок три в круге"] # 0x32b8 + - "㊹": [t: "число сорок четыре в круге"] # 0x32b9 + - "㊺": [t: "число сорок пять в круге"] # 0x32ba + - "㊻": [t: "число сорок шесть в круге"] # 0x32bb + - "㊼": [t: "число сорок семь в круге"] # 0x32bc + - "㊽": [t: "число сорок восемь в круге"] # 0x32bd + - "㊾": [t: "число сорок девять в круге"] # 0x32be + - "㊿": [t: "число пятьдесят в круге"] # 0x32bf + - "㋌": [t: "Меркурий"] # 0x32cc + - "㋍": [t: "эрги"] # 0x32cd + - "㋎": [t: "электрон-вольты"] # 0x32ce + - "㋏": [t: "знак ограниченной ответственности"] # 0x32cf + - "㍱": [t: "гектопаскали"] # 0x3371 + - "㍲": [t: "дальтоны"] # 0x3372 + - "㍳": [t: "астрономические единицы"] # 0x3373 + - "㍴": [t: "бары"] # 0x3374 + - "㍵": [t: "о в"] # 0x3375 + - "㍶": [t: "парсеки"] # 0x3376 + - "㍷": [t: "дециметры"] # 0x3377 + - "㍸": [t: "квадратные дециметры"] # 0x3378 + - "㍹": [t: "кубические дециметры"] # 0x3379 + - "㍺": [t: "инструментальные единицы"] # 0x337a + - "㎀": [t: "пикоамперы"] # 0x3380 + - "㎁": [t: "наноамперы"] # 0x3381 + - "㎂": [t: "микроамперы"] # 0x3382 + - "㎃": [t: "миллиамперы"] # 0x3383 + - "㎄": [t: "килоамперы"] # 0x3384 + - "㎅": [t: "килобайты"] # 0x3385 + - "㎆": [t: "мегабайты"] # 0x3386 + - "㎇": [t: "гигабайты"] # 0x3387 + - "㎈": [t: "калории"] # 0x3388 + - "㎉": [t: "килокалории"] # 0x3389 + - "㎊": [t: "пикофарады"] # 0x338a + - "㎋": [t: "нанофарады"] # 0x338b + - "㎌": [t: "микрофарады"] # 0x338c + - "㎍": [t: "микрограммы"] # 0x338d + - "㎎": [t: "миллиграммы"] # 0x338e + - "㎏": [t: "килограммы"] # 0x338f + - "㎐": [t: "герцы"] # 0x3390 + - "㎑": [t: "килогерцы"] # 0x3391 + - "㎒": [t: "мегагерцы"] # 0x3392 + - "㎓": [t: "гигагерцы"] # 0x3393 + - "㎔": [t: "терагерцы"] # 0x3394 + - "㎕": [t: "микролитры"] # 0x3395 + - "㎖": [t: "миллилитры"] # 0x3396 + - "㎗": [t: "децилитры"] # 0x3397 + - "㎘": [t: "килолитры"] # 0x3398 + - "㎙": [t: "фемтометры"] # 0x3399 + - "㎚": [t: "нанометры"] # 0x339a + - "㎛": [t: "микрометры"] # 0x339b + - "㎜": [t: "миллиметры"] # 0x339c + - "㎝": [t: "сантиметры"] # 0x339d + - "㎞": [t: "километры"] # 0x339e + - "㎟": [t: "квадратные миллиметры"] # 0x339f + - "㎠": [t: "квадратные сантиметры"] # 0x33a0 + - "㎡": [t: "квадратные метры"] # 0x33a1 + - "㎢": [t: "квадратные километры"] # 0x33a2 + - "㎣": [t: "кубические миллиметры"] # 0x33a3 + - "㎤": [t: "кубические сантиметры"] # 0x33a4 + - "㎥": [t: "кубические метры"] # 0x33a5 + - "㎦": [t: "кубические километры"] # 0x33a6 + - "㎧": [t: "метры в секунду"] # 0x33a7 + - "㎨": [t: "метры в секунду в квадрате"] # 0x33a8 + - "㎩": [t: "паскали"] # 0x33a9 + - "㎪": [t: "килопаскали"] # 0x33aa + - "㎫": [t: "мегапаскали"] # 0x33ab + - "㎬": [t: "гигапаскали"] # 0x33ac + - "㎭": [t: "рады"] # 0x33ad + - "㎮": [t: "рады в секунду"] # 0x33ae + - "㎯": [t: "рады в секунду в квадрате"] # 0x33af + - "㎰": [t: "пикосекунды"] # 0x33b0 + - "㎱": [t: "наносекунды"] # 0x33b1 + - "㎲": [t: "микросекунды"] # 0x33b2 + - "㎳": [t: "миллисекунды"] # 0x33b3 + - "㎴": [t: "пиковольты"] # 0x33b4 + - "㎵": [t: "нановольты"] # 0x33b5 + - "㎶": [t: "микровольты"] # 0x33b6 + - "㎷": [t: "милливольты"] # 0x33b7 + - "㎸": [t: "киловольты"] # 0x33b8 + - "㎹": [t: "мегавольты"] # 0x33b9 + - "㎺": [t: "пиковатты"] # 0x33ba + - "㎻": [t: "нановатты"] # 0x33bb + - "㎼": [t: "микроватты"] # 0x33bc + - "㎽": [t: "милливатты"] # 0x33bd + - "㎾": [t: "киловатты"] # 0x33be + - "㎿": [t: "мегаватты"] # 0x33bf + - "㏀": [t: "килоомы"] # 0x33c0 + - "㏁": [t: "мегаомы"] # 0x33c1 + - "㏂": [t: "аттометры"] # 0x33c2 + - "㏃": [t: "беккерели"] # 0x33c3 + - "㏄": [t: "кубические сантиметры"] # 0x33c4 + - "㏅": [t: "канделы"] # 0x33c5 + - "㏆": [t: "кулоны на килограмм"] # 0x33c6 + - "㏇": [t: "заглавная C, o, точка"] # 0x33c7 (I have no idea what this is) + - "㏈": [t: "децибелы"] # 0x33c8 + - "㏉": [t: "греи"] # 0x33c9 + - "㏊": [t: "гектары"] # 0x33ca + - "㏋": [t: "лошадиные силы"] # 0x33cb + - "㏌": [t: "дюймы"] # 0x33cc + - "㏍": [t: "килокельвины"] # 0x33cd + - "㏎": [t: "километры"] # 0x33ce + - "㏏": [t: "узлы"] # 0x33cf + - "㏐": [t: "люмены"] # 0x33d0 + - "㏑": [t: "натуральный логарифм"] # 0x33d1 + - "㏒": [t: "логарифм"] # 0x33d2 + - "㏓": [t: "люксы"] # 0x33d3 + - "㏔": [t: "миллибарны"] # 0x33d4 + - "㏕": [t: "милли"] # 0x33d5 + - "㏖": [t: "моли"] # 0x33d6 + - "㏗": [t: "пэ аш"] # 0x33d7 + - "㏘": [t: "пикометры"] # 0x33d8 + - "㏙": [t: "частей на миллион"] # 0x33d9 + - "㏚": [t: "петарентгены"] # 0x33da + - "㏛": [t: "стерадианы"] # 0x33db + - "㏜": [t: "зиверты"] # 0x33dc + - "㏝": [t: "веберы"] # 0x33dd + - "㏞": [t: "вольты на метр"] # 0x33de + - "㏟": [t: "амперы на метр"] # 0x33df + - "㏿": [t: "галлоны"] # 0x33ff + - "": [t: "равно с крышкой снизу"] # 0xe900 + - "": [t: "равно с плюсом сверху"] # 0xe901 + - "": [t: "равно с плюсом снизу"] # 0xe902 + - "": [t: "тильда с плюсом сверху"] # 0xe903 + - "": [t: "тильда с плюсом снизу"] # 0xe904 + - "": [t: "равно двойное над больше"] # 0xe908 + - "": [t: "равно двойное над меньше"] # 0xe909 + - "": [t: "содержит или равно"] # 0xe90a + - "": [t: "надмножество или равно"] # 0xe90b + - "": [t: "подмножество или равно"] # 0xe90c + - "": [t: "равно над меньше"] # 0xe90d + - "": [t: "элемент или равно"] # 0xe912 + - "": [t: "равно или больше"] # 0xe913 + - "": [t: "приблизительное надмножество"] # 0xe914 + - "": [t: "приблизительное подмножество"] # 0xe915 + - "": [t: "надмножество с точкой включает как подотношение"] # 0xe916 + - "": [t: "подмножество с точкой включено как подотношение"] # 0xe917 + - "": [t: "равно с точкой снизу"] # 0xe918 + - "": [t: "левая точка над минусом над правой точкой"] # 0xe919 + - "": [t: "правая точка над минусом над левой точкой"] # 0xe91a + - "": [t: "почти равно минус"] # 0xe91f + - "": [t: "двойное квадратное объединение"] # 0xe920 + - "": [t: "двойное квадратное пересечение"] # 0xe921 + - "": [t: "меньше, равно или больше"] # 0xe922 + - "": [t: "тильда с точкой"] # 0xe924 + - "": [t: "тильда с двумя точками"] # 0xe925 + - "": [t: "меньше, больше или равно"] # 0xe926 + - "": [t: "больше, меньше или равно"] # 0xe927 + - "": [t: "эквивалентно или меньше"] # 0xe928 + - "": [t: "эквивалентно или больше"] # 0xe929 + - "": [t: "левый открытый ящик"] # 0xe92a + - "": [t: "правый открытый ящик"] # 0xe92b + - "": [t: "тождественно с точкой"] # 0xe92c + - "": [t: "больше, равно или меньше"] # 0xe92d + - "": [t: "оператор черта"] # 0xe92e + - "": [t: "оператор двойная черта"] # 0xe92f + - "": [t: "оператор тройная черта"] # 0xe930 + - "": [t: "меньше или приблизительно равно"] # 0xe932 + - "": [t: "больше или приблизительно равно"] # 0xe933 + - "": [t: "вложенное меньше"] # 0xe936 + - "": [t: "вложенное больше"] # 0xe937 + - "": [t: "предшествует или эквивалентно"] # 0xe93a + - "": [t: "следует или эквивалентно"] # 0xe93b + - "": [t: "предшествует над равно"] # 0xe940 + - "": [t: "следует над равно"] # 0xe941 + - "": [t: "меньше, равно, наклонно больше"] # 0xe942 + - "": [t: "больше, равно, наклонно меньше"] # 0xe943 + - "": [t: "удовлетворяется"] # 0xe948 + - "": [t: "ленивое s"] # 0xe949 + - "": [t: "не утверждение"] # 0xe94a + - "": [t: "двойное равно"] # 0xe94b + - "": [t: "тройное равно"] # 0xe94c + - "": [t: "правило отложено"] # 0xe94d + - "": [t: "разделитель псевдонимов"] # 0xe94e + - "": [t: "нормальная подгруппа с чертой"] # 0xe950 + - "": [t: "содержит как нормальную подгруппу с чертой"] # 0xe951 + - "": [t: "скруглённое следует"] # 0xe954 + - "": [t: "улыбка под чертой"] # 0xe955 + - "": [t: "хмурый над чертой"] # 0xe956 + - "": [t: "надмножество или почти равно"] # 0xe957 + - "": [t: "подмножество или почти равно"] # 0xe958 + - "": [t: "больше, почти равно или меньше"] # 0xe959 + - "": [t: "меньше, почти равно или больше"] # 0xe95a + - "": [t: "двойное логическое или"] # 0xe95c + - "": [t: "двойное логическое и"] # 0xe95d + - "": [t: "логическое или с двойной чертой снизу"] # 0xe95e + - "": [t: "логическое или с чертой снизу"] # 0xe95f + - "": [t: "почти равно над равно"] # 0xe962 + - "": [t: "левый треугольник с биссектрисой"] # 0xe964 + - "": [t: "правый треугольник с биссектрисой"] # 0xe965 + - "": [t: "равно с пунктирной верхней линией"] # 0xe966 + - "": [t: "предшествует с двоеточием"] # 0xe967 + - "": [t: "следует с двоеточием"] # 0xe968 + - "": [t: "меньше или равно наклонное"] # 0xe969 + - "": [t: "больше или равно наклонное"] # 0xe96a + - "": [t: "вложенное очень много меньше"] # 0xe96b + - "": [t: "вложенное очень много больше"] # 0xe96c + - "": [t: "разность вариант"] # 0xe96d + - "": [t: "меньше больше наложение"] # 0xe96e + - "": [t: "логическое или логическое и наложение"] # 0xe96f + - "": [t: "надмножество над надмножеством"] # 0xe970 + - "": [t: "подмножество над подмножеством"] # 0xe971 + - "": [t: "надмножество над подмножеством"] # 0xe972 + - "": [t: "подмножество над надмножеством"] # 0xe973 + - "": [t: "тройная вертикальная черта"] # 0xe979 + - "": [t: "парные четверные вертикальные точки"] # 0xe97a + - "": [t: "перпендикуляр над чертой"] # 0xe97b + - "": [t: "левый турникет двойная вертикальная черта"] # 0xe97c + - "": [t: "двойной левый турникет двойная вертикальная черта"] # 0xe97d + - "": [t: "перпендикуляр над перевёрнутым перпендикуляром"] # 0xe97e + - "": [t: "двойной левый турникет вертикальная черта"] # 0xe97f + - "": [t: "сферический угол, открытый вверх"] # 0xe980 + - "": [t: "двойная косая черта"] # 0xe981 + - "": [t: "прямой угол с уголком"] # 0xe982 + - "": [t: "вертикальная черта в круге"] # 0xe984 + - "": [t: "знак деления в круге"] # 0xe985 + - "": [t: "пунктирная косая черта"] # 0xe986 + - "": [t: "пунктирная обратная косая черта"] # 0xe987 + - "": [t: "пунктирная средняя линия"] # 0xe988 + - "": [t: "пунктирная вертикальная черта"] # 0xe989 + - "": [t: "перпендикуляр с s"] # 0xe98a + - "": [t: "угол с s"] # 0xe98b + - "": [t: "сферический угол, открытый влево"] # 0xe98c + - "": [t: "угол, открытый влево"] # 0xe98d + - "": [t: "вертикальная черта с двойным крюком"] # 0xe98e + - "": [t: "средняя точка свободный радикал"] # 0xe98f + - "": [t: "белый треугольник остриём вверх над чертой"] # 0xe990 + - "": [t: "тождественно и параллельно"] # 0xe991 + - "": [t: "разбивающее произведение"] # 0xe992 + - "": [t: "тройная черта с горизонтальной чертой"] # 0xe993 + - "": [t: "тождественно с двойной косой чертой"] # 0xe994 + - "": [t: "тройные перекрещенные черты"] # 0xe995 + - "": [t: "вертикальная черта над кругом"] # 0xe996 + - "": [t: "вертикальная пропорциональность"] # 0xe997 + - "": [t: "чёрная последняя четверть луны"] # 0xe998 + - "": [t: "чёрная первая четверть луны"] # 0xe999 + - "": [t: "отрицательная синусоида"] # 0xe9a0 + - "": [t: "точка в скобках"] # 0xe9a1 + - "": [t: "скобки"] # 0xe9a2 + - "": [t: "белая улыбка"] # 0xe9a3 + - "": [t: "белый хмурый"] # 0xe9a4 + - "": [t: "шестиугольник"] # 0xe9a5 + - "": [t: "эквивалентно над плюсом"] # 0xe9a6 + - "": [t: "плюс над эквивалентно"] # 0xe9a7 + - "": [t: "пересечение с засечками"] # 0xe9b0 + - "": [t: "объединение с засечками"] # 0xe9b1 + - "": [t: "квадратное пересечение с засечками"] # 0xe9b2 + - "": [t: "квадратное объединение с засечками"] # 0xe9b3 + - "": [t: "предшествует, эквивалентно или следует"] # 0xe9e0 + - "": [t: "следует, эквивалентно или предшествует"] # 0xe9e1 + - "": [t: "предшествует, почти равно или следует"] # 0xe9e2 + - "": [t: "следует, почти равно или предшествует"] # 0xe9e3 + - "": [t: "меньше, эквивалентно или больше"] # 0xe9f0 + - "": [t: "больше, эквивалентно или меньше"] # 0xe9f1 + - "": [t: "не очень много меньше"] # 0xea00 + - "": [t: "не очень много больше"] # 0xea01 + - "": [t: "не много меньше вариант"] # 0xea02 + - "": [t: "не много больше вариант"] # 0xea03 + - "": [t: "меньше, верт. не двойное равно"] # 0xea04 + - "": [t: "больше, верт. не двойное равно"] # 0xea05 + - "": [t: "не меньше и не равно"] # 0xea06 + - "": [t: "не больше и не равно"] # 0xea07 + - "": [t: "ни равно, ни меньше"] # 0xea09 + - "": [t: "не содержит и не равно"] # 0xea0a + - "": [t: "ни надмножество, ни равно"] # 0xea0b + - "": [t: "ни подмножество, ни равно"] # 0xea0c + - "": [t: "обратная косая подмножество"] # 0xea0d + - "": [t: "ни равно, ни больше"] # 0xea0e + - "": [t: "не минус тильда"] # 0xea0f + - "": [t: "ни равно, ни меньше"] # 0xea10 + - "": [t: "не тильда"] # 0xea11 + - "": [t: "не элемент и не равно"] # 0xea12 + - "": [t: "ни равно, ни больше"] # 0xea13 + - "": [t: "не почти равно"] # 0xea14 + - "": [t: "не следует похоже"] # 0xea15 + - "": [t: "меньше или наклонно равно с косой чертой"] # 0xea16 + - "": [t: "больше или наклонно равно с косой чертой"] # 0xea17 + - "": [t: "надмножество косая черта"] # 0xea1a + - "": [t: "не содержит"] # 0xea1b + - "": [t: "не меньше или не равно"] # 0xea1d + - "": [t: "не больше или не равно"] # 0xea1e + - "": [t: "не почти равно минус"] # 0xea1f + - "": [t: "отрицательная принадлежность множеству с точкой сверху"] # 0xea22 + - "": [t: "не вертикальный угол"] # 0xea2c + - "": [t: "не параллельно наклонно"] # 0xea2d + - "": [t: "не оператор черта"] # 0xea2e + - "": [t: "не оператор двойная черта"] # 0xea2f + - "": [t: "не оператор тройная черта"] # 0xea30 + - "": [t: "меньше, но не приблизительно равно"] # 0xea32 + - "": [t: "больше, но не приблизительно равно"] # 0xea33 + - "": [t: "меньше или не равно"] # 0xea34 + - "": [t: "больше или не равно"] # 0xea35 + - "": [t: "не вложенное меньше"] # 0xea36 + - "": [t: "не вложенное больше"] # 0xea37 + - "": [t: "не много меньше"] # 0xea38 + - "": [t: "не много больше"] # 0xea39 + - "": [t: "предшествует, но не эквивалентно"] # 0xea3a + - "": [t: "следует, но не эквивалентно"] # 0xea3b + - "": [t: "предшествует, но не равно"] # 0xea3c + - "": [t: "следует, но не равно"] # 0xea3d + - "": [t: "не равно и не предшествует"] # 0xea3e + - "": [t: "не равно и не следует"] # 0xea3f + - "": [t: "предшествует, но не равно"] # 0xea40 + - "": [t: "следует, но не равно"] # 0xea41 + - "": [t: "не подмножество и не равно"] # 0xea42 + - "": [t: "не надмножество и не равно"] # 0xea43 + - "": [t: "подмножество или не равно"] # 0xea44 + - "": [t: "надмножество или не равно"] # 0xea45 + - "": [t: "не подмножество и не равно"] # 0xea46 + - "": [t: "не надмножество и не равно"] # 0xea47 + - "": [t: "не тройное меньше"] # 0xea48 + - "": [t: "не тройное больше"] # 0xea49 + - "": [t: "не предшествует равно"] # 0xea4c + - "": [t: "не следует равно"] # 0xea4d + - "": [t: "не нормальная подгруппа с чертой"] # 0xea50 + - "": [t: "не содержит как нормальную подгруппу с чертой"] # 0xea51 + - "": [t: "не разность"] # 0xea52 + - "": [t: "не геометрически эквивалентно"] # 0xea53 + - "": [t: "не вертикально похоже"] # 0xea54 + - "": [t: "не равно или не похоже"] # 0xea55 + - "": [t: "не вертикально приблизительно"] # 0xea56 + - "": [t: "не приблизительно тождественно"] # 0xea57 + - "": [t: "не бугристое равно"] # 0xea58 + - "": [t: "не бугристое одинарное равно"] # 0xea59 + - "": [t: "не равно с точкой"] # 0xea5a + - "": [t: "обратное не эквивалентно"] # 0xea5b + - "": [t: "не квадратное подмножество"] # 0xea60 + - "": [t: "не квадратное надмножество"] # 0xea61 + - "": [t: "не почти равно над равно"] # 0xea62 + - "": [t: "не строго эквивалентно"] # 0xea63 + - "": [t: "не конгруэнтно с точкой"] # 0xea64 + - "": [t: "обратное не равно"] # 0xea65 + - "": [t: "не вертикально левый треугольник равно"] # 0xea70 + - "": [t: "не вертикально правый треугольник равно"] # 0xea71 + - "": [t: "не частная"] # 0xea80 + - "": [t: "удлинитель стрелки"] # 0xeb00 + - "": [t: "стрелка вправо над стрелкой влево"] # 0xeb01 + - "": [t: "стрелка вправо над стрелкой влево"] # 0xeb02 + - "": [t: "гарпун вправо над гарпуном влево"] # 0xeb03 + - "": [t: "гарпун вправо над гарпуном влево"] # 0xeb04 + - "": [t: "двойная стрелка северо-восток-юго-запад"] # 0xeb05 + - "": [t: "двойная стрелка северо-запад-юго-восток"] # 0xeb06 + - "": [t: "горизонтальный удлинитель гарпуна"] # 0xeb07 + - "": [t: "дуговая стрелка против часовой влево"] # 0xeb08 + - "": [t: "дуговая стрелка против часовой вправо"] # 0xeb09 + - "": [t: "большая стрелка вправо акцент"] # 0xeb0b + - "": [t: "большая стрелка влево акцент"] # 0xeb0c + - "": [t: "наконечник стрелки влево"] # 0xeb0d + - "": [t: "наконечник стрелки вправо"] # 0xeb0e + - "": [t: "большая стрелка влево-вправо со штрихом"] # 0xeb0f + - "": [t: "горизонтальный удлинитель двойной стрелки"] # 0xeb10 + - "": [t: "большая двойная стрелка влево-вправо со штрихом"] # 0xeb11 + - "": [t: "стрелка вниз слева от стрелки вверх"] # 0xeb12 + - "": [t: "стрелка влево с уголком вниз"] # 0xeb13 + - "": [t: "стрелка вправо с уголком вверх"] # 0xeb14 + - "": [t: "стрелка влево с уголком вверх"] # 0xeb15 + - "": [t: "верхняя полуокружность против часовой с плюсом"] # 0xeb16 + - "": [t: "верхняя полуокружность по часовой с минусом"] # 0xeb17 + - "": [t: "стрелка вправо с хвостом со штрихом"] # 0xeb18 + - "": [t: "правый гарпун вниз"] # 0xeb19 + - "": [t: "левый гарпун вниз"] # 0xeb1a + - "": [t: "левый и правый гарпун вниз"] # 0xeb1b + - "": [t: "левый и правый гарпун вверх"] # 0xeb1c + - "": [t: "верхний и нижний гарпун влево"] # 0xeb1d + - "": [t: "верхний и нижний гарпун вправо"] # 0xeb1e + - "": [t: "стрелка вверх справа от стрелки вниз"] # 0xeb1f + - "": [t: "левый гарпун к черте остриём вверх"] # 0xeb20 + - "": [t: "правый гарпун к черте остриём вверх"] # 0xeb21 + - "": [t: "левый гарпун к черте остриём вниз"] # 0xeb22 + - "": [t: "правый гарпун к черте остриём вниз"] # 0xeb23 + - "": [t: "левый гарпун от черты остриём вверх"] # 0xeb24 + - "": [t: "правый гарпун от черты остриём вверх"] # 0xeb25 + - "": [t: "левый гарпун от черты остриём вниз"] # 0xeb26 + - "": [t: "правый гарпун от черты остриём вниз"] # 0xeb27 + - "": [t: "верхний гарпун к черте остриём влево"] # 0xeb28 + - "": [t: "нижний гарпун к черте остриём влево"] # 0xeb29 + - "": [t: "верхний гарпун к черте остриём вправо"] # 0xeb2a + - "": [t: "нижний гарпун к черте остриём вправо"] # 0xeb2b + - "": [t: "верхний гарпун от черты остриём влево"] # 0xeb2c + - "": [t: "нижний гарпун от черты остриём влево"] # 0xeb2d + - "": [t: "верхний гарпун от черты остриём вправо"] # 0xeb2e + - "": [t: "нижний гарпун от черты остриём вправо"] # 0xeb2f + - "": [t: "стрелка вверх к черте"] # 0xeb30 + - "": [t: "стрелка вниз к черте"] # 0xeb31 + - "": [t: "верхний гарпун слева от нижнего гарпуна"] # 0xeb32 + - "": [t: "верхний гарпун справа от нижнего гарпуна"] # 0xeb33 + - "": [t: "наконечник стрелки вверх"] # 0xeb34 + - "": [t: "наконечник стрелки вниз"] # 0xeb35 + - "": [t: "двойной гарпун с левым остриём вниз, правым вверх"] # 0xeb36 + - "": [t: "двойной гарпун с левым остриём вверх, правым вниз"] # 0xeb37 + - "": [t: "стрелка влево над чертой"] # 0xeb38 + - "": [t: "стрелка вправо над чертой"] # 0xeb39 + - "": [t: "стрелка влево под чертой"] # 0xeb3a + - "": [t: "стрелка вправо под чертой"] # 0xeb3b + - "": [t: "тройная стрелка влево-вправо"] # 0xeb3c + - "": [t: "двойная стрелка северо-восток-юго-восток"] # 0xeb3f + - "": [t: "левая полуокружность против часовой"] # 0xeb40 + - "": [t: "левая полуокружность по часовой"] # 0xeb41 + - "": [t: "левый открытый круг стрелка влево-вправо"] # 0xeb42 + - "": [t: "стрелка вправо над тильдой"] # 0xeb44 + - "": [t: "стрелка влево над тильдой"] # 0xeb45 + - "": [t: "левый гарпун над чертой"] # 0xeb48 + - "": [t: "правый гарпун над чертой"] # 0xeb49 + - "": [t: "левый гарпун под чертой"] # 0xeb4a + - "": [t: "правый гарпун под чертой"] # 0xeb4b + - "": [t: "приземистая чёрная стрелка влево"] # 0xeb4c + - "": [t: "правая полуокружность по часовой"] # 0xeb50 + - "": [t: "правая полуокружность против часовой"] # 0xeb51 + - "": [t: "левый открытый круг левый-правый гарпун"] # 0xeb52 + - "": [t: "стрелка вверх слева от вертикальной черты"] # 0xeb58 + - "": [t: "стрелка вниз слева от вертикальной черты"] # 0xeb59 + - "": [t: "стрелка вверх справа от вертикальной черты"] # 0xeb5a + - "": [t: "стрелка вниз справа от вертикальной черты"] # 0xeb5b + - "": [t: "стрелка вправо с удлинённым нижним крюком"] # 0xeb5c + - "": [t: "стрелка влево с удлинённым крюком"] # 0xeb5d + - "": [t: "стрелка влево с удлинённым нижним крюком"] # 0xeb5e + - "": [t: "стрелка вправо с удлинённым крюком"] # 0xeb5f + - "": [t: "не волнистая стрелка вправо"] # 0xeb60 + - "": [t: "не изогнутая стрелка вправо"] # 0xeb61 + - "": [t: "верхний гарпун слева от вертикальной черты"] # 0xeb68 + - "": [t: "нижний гарпун слева от вертикальной черты"] # 0xeb69 + - "": [t: "верхний гарпун справа от вертикальной черты"] # 0xeb6a + - "": [t: "нижний гарпун справа от вертикальной черты"] # 0xeb6b + - "": [t: "вертикальный удлинитель двойной стрелки"] # 0xeb6c + - "": [t: "вертикальный удлинитель гарпуна с остриём влево"] # 0xeb6d + - "": [t: "вертикальный удлинитель гарпуна с остриём вправо"] # 0xeb6e + - "": [t: "правый гарпун над левым гарпуном, правый"] # 0xeb6f + - "": [t: "правый гарпун над левым гарпуном, левый"] # 0xeb70 + - "": [t: "левый гарпун над правым гарпуном, правый"] # 0xeb71 + - "": [t: "левый гарпун над правым гарпуном, левый"] # 0xeb72 + - "": [t: "наконечник стрелки влево от черты"] # 0xeb73 + - "": [t: "удлинитель стрелки влево-вправо от черты"] # 0xeb74 + - "": [t: "хвост стрелки влево от черты"] # 0xeb75 + - "": [t: "хвост стрелки вправо от черты"] # 0xeb76 + - "": [t: "наконечник стрелки вправо от черты"] # 0xeb77 + - "": [t: "наконечник верхнего гарпуна от черты с остриём влево"] # 0xeb78 + - "": [t: "стрелка вправо над стрелкой влево, правая"] # 0xeb79 + - "": [t: "стрелка вправо над стрелкой влево, левая"] # 0xeb7a + - "": [t: "стрелка влево над стрелкой вправо, правая"] # 0xeb7b + - "": [t: "стрелка влево над стрелкой вправо, левая"] # 0xeb7c + - "": [t: "наконечник стрелки вверх от черты"] # 0xeb7d + - "": [t: "хвост стрелки вверх от черты"] # 0xeb7e + - "": [t: "хвост стрелки вниз от черты"] # 0xeb7f + - "": [t: "наконечник стрелки вниз от черты"] # 0xeb80 + - "": [t: "наконечник нижнего гарпуна от черты с остриём вправо"] # 0xeb81 + - "": [t: "верхний гарпун слева от нижнего гарпуна, низ"] # 0xeb82 + - "": [t: "верхний гарпун слева от нижнего гарпуна, удлинитель"] # 0xeb83 + - "": [t: "нижний гарпун слева от верхнего гарпуна, верх"] # 0xeb84 + - "": [t: "верхний гарпун слева от нижнего гарпуна, верх"] # 0xeb85 + - "": [t: "нижний гарпун слева от верхнего гарпуна, удлинитель"] # 0xeb86 + - "": [t: "нижний гарпун слева от верхнего гарпуна, низ"] # 0xeb87 + - "": [t: "стрелка вверх слева от стрелки вниз, низ"] # 0xeb88 + - "": [t: "стрелка вниз слева от стрелки вверх, верх"] # 0xeb89 + - "": [t: "стрелка вверх слева от стрелки вниз, верх"] # 0xeb8a + - "": [t: "стрелка вниз слева от стрелки вверх, низ"] # 0xeb8b + - "": [t: "удлинитель стрелок влево-вправо"] # 0xeb8c + - "": [t: "удлинитель стрелки на северо-восток"] # 0xeb8d + - "": [t: "удлинитель стрелки на северо-запад"] # 0xeb8e + - "": [t: "нижняя фигурная скобка, левая часть"] # 0xec00 + - "": [t: "нижняя фигурная скобка, средняя часть"] # 0xec01 + - "": [t: "нижняя фигурная скобка, правая часть"] # 0xec02 + - "": [t: "горизонтальный удлинитель фигурной скобки"] # 0xec03 + - "": [t: "верхняя фигурная скобка, левая часть"] # 0xec04 + - "": [t: "верхняя фигурная скобка, средняя часть"] # 0xec05 + - "": [t: "верхняя фигурная скобка, правая часть"] # 0xec06 + - "": [t: "левая вертикальная черта"] # 0xec07 + - "": [t: "правая вертикальная черта"] # 0xec08 + - "": [t: "левая двойная вертикальная черта"] # 0xec09 + - "": [t: "правая двойная вертикальная черта"] # 0xec0a + - "": [t: "горизонтальный удлинитель скобки"] # 0xec0b + - "": [t: "под квадратной скобкой"] # 0xec0c + - "⎵": [t: "под квадратной скобкой"] # 0x23b5 + - "": [t: "над квадратной скобкой"] # 0xec0d + - "⎴": [t: "над квадратной скобкой"] # 0x23b4 + - "": [t: "нижняя скобка, левая часть"] # 0xec0e + - "": [t: "нижняя скобка, правая часть"] # 0xec0f + - "": [t: "верхняя скобка, левая часть"] # 0xec10 + - "": [t: "верхняя скобка, правая часть"] # 0xec11 + - "": [t: "левая скобка 1"] # 0xec12 + - "": [t: "левая скобка 2"] # 0xec13 + - "": [t: "левая скобка 3"] # 0xec14 + - "": [t: "левая скобка 4"] # 0xec15 + - "": [t: "правая скобка 1"] # 0xec16 + - "": [t: "правая скобка 2"] # 0xec17 + - "": [t: "правая скобка 3"] # 0xec18 + - "": [t: "правая скобка 4"] # 0xec19 + - "": [t: "радикал 1"] # 0xec1a + - "": [t: "радикал 2"] # 0xec1b + - "": [t: "радикал 3"] # 0xec1c + - "": [t: "радикал 4"] # 0xec1d + - "": [t: "радикал 5"] # 0xec1e + - "": [t: "нижняя часть радикала"] # 0xec1f + - "": [t: "вертикальный удлинитель радикала"] # 0xec20 + - "": [t: "верхняя часть радикала"] # 0xec21 + - "": [t: "левая белая скобка, верхняя часть"] # 0xec22 + - "": [t: "левая белая скобка, удлинитель"] # 0xec23 + - "": [t: "левая белая скобка, нижняя часть"] # 0xec24 + - "": [t: "правая белая скобка, верхняя часть"] # 0xec25 + - "": [t: "правая белая скобка, удлинитель"] # 0xec26 + - "": [t: "правая белая скобка, нижняя часть"] # 0xec27 + - "": [t: "левая белая фигурная скобка"] # 0xec30 + - "": [t: "правая белая фигурная скобка"] # 0xec31 + - "": [t: "знак длинного деления"] # 0xec32 + - "": [t: "удлинитель знака длинного деления"] # 0xec33 + - "": [t: "короткое деление"] # 0xec34 + - "": [t: "двойная связь с юго-запада на северо-восток"] # 0xec40 + - "": [t: "двойная связь с северо-запада на юго-восток"] # 0xec41 + - "": [t: "одинарная горизонтальная связь"] # 0xec42 + - "": [t: "двойная горизонтальная связь"] # 0xec43 + - "": [t: "тройная горизонтальная связь"] # 0xec44 + - "": [t: "одинарная вертикальная связь"] # 0xec45 + - "": [t: "двойная вертикальная связь"] # 0xec46 + - "": [t: "тройная вертикальная связь"] # 0xec47 + - "": [t: "связь меньше"] # 0xec48 + - "": [t: "связь больше"] # 0xec49 + - "": [t: "одинарная горизонтальная связь en"] # 0xec4a + - "": [t: "двойная горизонтальная связь en"] # 0xec4b + - "": [t: "тройная горизонтальная связь en"] # 0xec4c + - "": [t: "верхний левый прямоугольник"] # 0xec80 + - "": [t: "нижний левый прямоугольник"] # 0xec81 + - "": [t: "верхний правый прямоугольник"] # 0xec90 + - "": [t: "нижний правый прямоугольник"] # 0xec91 + - "": [t: "угол синтетического деления"] # 0xec92 + - "": [t: "горизонтальный удлинитель синтетического деления"] # 0xec93 + - "": [t: "вертикальный удлинитель синтетического деления"] # 0xec94 + - "": [t: "удлинитель левого потолка/пола"] # 0xec95 + - "": [t: "удлинитель правого потолка/пола"] # 0xec96 + - "": [t: "удлинитель верхней скобки"] # 0xec97 + - "": [t: "удлинитель вертикальной черты"] # 0xec98 + - "": [t: "удлинитель левой двойной вертикальной черты"] # 0xec99 + - "": [t: "удлинитель горизонтальной черты"] # 0xec9a + - "": [t: "удлинитель нижней скобки"] # 0xec9c + - "": [t: "нижняя скобка, правая часть"] # 0xec9d + - "": [t: "удлинитель нижней скобки"] # 0xec9e + - "": [t: "нижняя скобка, левая часть"] # 0xec9f + - "": [t: "удлинитель верхней фигурной скобки"] # 0xeca0 + - "": [t: "верхняя скобка, левая часть"] # 0xeca1 + - "": [t: "удлинитель верхней скобки"] # 0xeca2 + - "": [t: "верхняя скобка, правая часть"] # 0xeca3 + - "": [t: "удлинитель нижней фигурной скобки"] # 0xeca4 + - "": [t: "h-бар"] # 0xed00 (планковская постоянная с чертой, стандартно "h-бар") + - "": [t: "зеркальная g"] # 0xed01 + - "": [t: "j без точки"] # 0xed02 + - "": [t: "дигамма"] # 0xed03 + - "ϝ": [t: "дигамма"] # 0x3dd + - "": [t: "d"] # 0xed10 + - "ⅆ": [t: "d"] # 0x2146 + - "": [t: "e"] # 0xed11 + - "ⅇ": [t: "e"] # 0x2147 + - "": [t: "i"] # 0xed12 + - "ⅈ": [t: "i"] # 0x2148 + - "": [t: "j"] # 0xed13 - "ⅅ": - - spell: "translate('.', 'ⅅ', 'DD')" # 0xed16, 0x2145 - -# The private use chars are from MathType - - "": [t: "интегральная цикл контура против часовой стрелки"] # 0xee00 (en: 'anticlockwise contour integral loop', google translation) - - "": [t: "интегральная петля контура по часовой стрелке"] # 0xee01 (en: 'clockwise contour integral loop', google translation) - - "": [t: ""] # 0xee04 - - "": [t: ""] # 0xee05 - - "": [t: ""] # 0xee06 - - "": [t: ""] # 0xee07 - - "": [t: ""] # 0xee08 - - "": [t: ""] # 0xee09 - - "": [t: ""] # 0xee0a - - "": [t: ""] # 0xee0b - - "": [t: ""] # 0xee0c - - "": [t: "совместное статус украшения"] # 0xee0d (en: 'joint status embellishment', google translation) - - "": [t: "совместное статус украшений осталось"] # 0xee0e (en: 'joint status embellishment left', google translation) - - "": [t: "совместное статус правильно"] # 0xee0f (en: 'joint status embellishment right', google translation) - - "": [t: "совместное статус украснение"] # 0xee10 (en: 'joint status embellishment extender', google translation) - - "": [t: "интегральная петля"] # 0xee11 (en: 'integral loop', google translation) - - "": [t: "интегральная петля двойная"] # 0xee12 (en: 'integral loop double', google translation) - - "": [t: "интегральная петля triple"] # 0xee13 (en: 'integral loop triple', google translation) - - "": [t: "расширение интегральной петли двойной"] # 0xee15 (en: 'expanding integral loop double', google translation) - - "": [t: "расширение интегральной петли triple"] # 0xee16 (en: 'expanding integral loop triple', google translation) - - "": [t: "асимптотически равен акценту"] # 0xee17 (en: 'asymptotically equal to accent', google translation) - - "": [t: "акцент с равным знаком"] # 0xee18 (en: 'equal sign accent', google translation) - - "": [t: "четырехкратный prime"] # 0xee19 (en: 'quadruple prime', google translation) - - "": [t: "бар акцент с открытым кругом слева"] # 0xee1a (en: 'bar accent with open circle left', google translation) - - "": [t: "бар акцент с закрытым кругом слева"] # 0xee1b (en: 'bar accent with closed circle left', google translation) - - "": [t: "бар акцент с открытым кругом справа"] # 0xee1c (en: 'bar accent with open circle right', google translation) - - "": [t: "бар акцент с надтуми"] # 0xee1d (en: 'bar accent with over dot', google translation) - - "": [t: "бар акцент с под точкой"] # 0xee1e (en: 'bar accent with under dot', google translation) - - "": [t: "бар акцент с двойным над точкой"] # 0xee1f (en: 'bar accent with double over dot', google translation) - - "": [t: "бар акцент с двойным под точкой"] # 0xee20 (en: 'bar accent with double under dot', google translation) - - "": [t: "бар акцент с помощью кареты"] # 0xee21 (en: 'bar accent with caret', google translation) - - "": [t: "толстый под акцентом"] # 0xee22 (en: 'thick under bar accent', google translation) - - "": [t: "бар акцент с закрытым кругом справа"] # 0xee23 (en: 'bar accent with closed circle right', google translation) - - "": [t: "большая точка выше"] # 0xee24 (en: 'large dot above', google translation) - - "": [t: "марк выравнивания"] # 0xef00 (en: 'alignment mark', google 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: "отсутствующий термин"] # 0xef41 (en: 'missing term', google translation) - - "": [t: "контурная стрелка часовой стрелки слева"] # 0xef80 (en: 'clockwise contour integral arrow on left', google translation) - - "": [t: "интеграл с квадратом"] # 0xef81 (en: 'integral with square', google translation) - - "": [t: "интеграл со складом"] # 0xef82 (en: 'integral with slash', google translation) - - "": [t: "обратный интеграл"] # 0xef83 (en: 'reversed integral', google translation) - - "": [t: "двойной ноль над двойным ноль"] # 0xef90 (en: 'double zero over double zero', google translation) - - "": [t: "ноль со слэш"] # 0xef91 (en: 'zero with slash', google translation) + - spell: "translate('.', 'ⅅ', 'DD')" # 0xed16, 0x2145 + +# Символы из частной области MathType + - "": [t: "контурный интеграл против часовой с петлёй"] # 0xee00 + - "": [t: "контурный интеграл по часовой с петлёй"] # 0xee01 + - "": [t: ""] # 0xee04 + - "": [t: ""] # 0xee05 + - "": [t: ""] # 0xee06 + - "": [t: ""] # 0xee07 + - "": [t: ""] # 0xee08 + - "": [t: ""] # 0xee09 + - "": [t: ""] # 0xee0a + - "": [t: ""] # 0xee0b + - "": [t: ""] # 0xee0c + - "": [t: "статус соединения"] # 0xee0d + - "": [t: "статус соединения, левая часть"] # 0xee0e + - "": [t: "статус соединения, правая часть"] # 0xee0f + - "": [t: "статус соединения, удлинитель"] # 0xee10 + - "": [t: "петля интеграла"] # 0xee11 + - "": [t: "двойная петля интеграла"] # 0xee12 + - "": [t: "тройная петля интеграла"] # 0xee13 + - "": [t: "расширяющаяся двойная петля интеграла"] # 0xee15 + - "": [t: "расширяющаяся тройная петля интеграла"] # 0xee16 + - "": [t: "асимптотически равно, акцент"] # 0xee17 + - "": [t: "знак равенства, акцент"] # 0xee18 + - "": [t: "четверной штрих"] # 0xee19 + - "": [t: "черта с открытым кружком слева"] # 0xee1a + - "": [t: "черта с закрытым кружком слева"] # 0xee1b + - "": [t: "черта с открытым кружком справа"] # 0xee1c + - "": [t: "черта с точкой сверху"] # 0xee1d + - "": [t: "черта с точкой снизу"] # 0xee1e + - "": [t: "черта с двойной точкой сверху"] # 0xee1f + - "": [t: "черта с двойной точкой снизу"] # 0xee20 + - "": [t: "черта с каретом"] # 0xee21 + - "": [t: "жирная нижняя черта"] # 0xee22 + - "": [t: "черта с закрытым кружком справа"] # 0xee23 + - "": [t: "большая точка сверху"] # 0xee24 + - "": [t: "знак выравнивания"] # 0xef00 + - "": [t: ""] # 0xef01 + - "​": [t: ""] # 0x200b + - "": [t: ""] # 0xef02 + - " ": [t: ""] # 0x2009 + - "": [t: ""] # 0xef03 + - " ": [t: ""] # 0x205f + - "": [t: ""] # 0xef04 + - "": [t: ""] # 0xef05 + - "": [t: ""] # 0xef06 + - "": [t: ""] # 0xef07 + - "": [t: ""] # 0xef08 + - "": [t: ""] # 0xef09 + - "": [t: ""] # 0xef0a + - " ": [t: ""] # 0x200a + - "": [t: ""] # 0xef22 + - "": [t: ""] # 0xef23 + - "": [t: ""] # 0xef24 + - "": [t: ""] # 0xef29 + - "": [t: "пропущенный член"] # 0xef41 + - "": [t: "контурный интеграл по часовой, стрелка слева"] # 0xef80 + - "": [t: "интеграл с квадратом"] # 0xef81 + - "": [t: "интеграл с косой чертой"] # 0xef82 + - "": [t: "обратный интеграл"] # 0xef83 + - "": [t: "двойной ноль над двойным нулём"] # 0xef90 + - "": [t: "ноль с косой чертой"] # 0xef91 # fraktur chars in math alphabetic block and also MathType private use area # Some of these are reserved because they were used in Plane 0 -- that shouldn't be an issue other than causing the other chars to not display - - "𝔄-𝔜": # 0x1d504 - 0x1d51d ('z' version is reserved) - - t: "фрактур" # (en: 'fraktur', google translation) + - "𝔄-𝔜": # 0x1d504 - 0x1d51d ('z' version is reserved) + - t: "фрактура" - spell: "translate('.', '𝔄𝔅𝔆𝔇𝔈𝔉𝔊𝔋𝔌𝔍𝔎𝔏𝔐𝔑𝔒𝔓𝔔𝔕𝔖𝔗𝔘𝔙𝔚𝔛𝔜', 'ABCDEFGHIJKLMNOPQRSTUVWXY')" - - "-": # 0xf000 - 0xf018 - - t: "фрактур" # (en: 'fraktur', google translation) + - "-": # 0xf000 - 0xf018 + - t: "фрактура" - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXY')" - - "𝔞-𝔷": # 0x1d51e - 0x1d537 - - t: "фрактур" # (en: 'fraktur', google translation) + - "𝔞-𝔷": # 0x1d51e - 0x1d537 + - t: "фрактура" - spell: "translate('.', '𝔞𝔟𝔠𝔡𝔢𝔣𝔤𝔥𝔦𝔧𝔨𝔩𝔪𝔫𝔬𝔭𝔮𝔯𝔰𝔱𝔲𝔳𝔴𝔵𝔶𝔷', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf01a - 0xf033 - - t: "фрактур" # (en: 'fraktur', google translation) + - "-": # 0xf01a - 0xf033 + - t: "фрактура" - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝕬-𝖅": # 0x1D56C - 0x1D585 - - t: "fraktur bold" # (google translation) + - "𝕬-𝖅": # 0x1D56C - 0x1D585 + - t: "фрактура" + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝕬𝕭𝕮𝕯𝕰𝕱𝕲𝕳𝕴𝕵𝕶𝕷𝕸𝕹𝕺𝕻𝕼𝕽𝕾𝕿𝖀𝖁𝖂𝖃𝖄𝖅', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf040 - 0xf059 - - t: "fraktur bold" # (google translation) + - "-": # 0xf040 - 0xf059 + - t: "фрактура" + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝖆-𝖟": # 0x1d586 - 0x1d59f - - t: "fraktur bold" # (google translation) + - "𝖆-𝖟": # 0x1d586 - 0x1d59f + - t: "фрактура" + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝖆𝖇𝖈𝖉𝖊𝖋𝖌𝖍𝖎𝖏𝖐𝖑𝖒𝖓𝖔𝖕𝖖𝖗𝖘𝖙𝖚𝖛𝖜𝖝𝖞𝖟', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf05a - 0xf073 - - t: "fraktur bold" # (google translation) + - "-": # 0xf05a - 0xf073 + - t: "фрактура" + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - 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: "двойной удар" # (en: 'double struck', google translation) + - "𝔸-𝕐": # 0x1d504 - 0x1d51d ('z' version is reserved) + - t: "двойной контур" - spell: "translate('.', '𝔸𝔹𝔺𝔻𝔼𝔽𝔾𝔿𝕀𝕁𝕂𝕃𝕄𝕅𝕆𝕇𝕈𝕉𝕊𝕋𝕌𝕍𝕎𝕏𝕐', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf080 - 0xf098 - - t: "двойной удар" # (en: 'double struck', google translation) + - "-": # 0xf080 - 0xf098 + - t: "двойной контур" - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝕒-𝕫": # 0x1d552 - 0x1d56b - - t: "двойной удар" # (en: 'double struck', google translation) + - "𝕒-𝕫": # 0x1d552 - 0x1d56b + - t: "двойной контур" - spell: "translate('.', '𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf09a - 0xf0b3 - - t: "двойной удар" # (en: 'double struck', google translation) + - "-": # 0xf09a - 0xf0b3 + - t: "двойной контур" - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝟘-𝟡": # 0x1d7d8 - 0x1d7e1 - - t: "двойной удар" # (en: 'double struck', google translation) + - "𝟘-𝟡": # 0x1d7d8 - 0x1d7e1 + - t: "двойной контур" - spell: "translate('.', '𝟘𝟙𝟚𝟛𝟜𝟝𝟞𝟟𝟠𝟡', '0123456789')" - - "-": # 0xf0c0 - 0xf0c9 - - t: "двойной удар" # (en: 'double struck', google translation) + - "-": # 0xf0c0 - 0xf0c9 + - t: "двойной контур" - spell: "translate('.', '', '0123456789')" - - "": [t: "дважды поразил нахбла"] # 0xf0ca (en: 'double struck nahblah', google translation) - - "": [t: "дважды ударил эйлера постоянна"] # 0xf0cb (en: 'double struck euler constant', google translation) + - "": [t: "набла с двойным контуром"] # 0xf0ca + - "": [t: "эйлерова константа с двойным контуром"] # 0xf0cb # script chars in math alphabetic block and also MathType private use area - - "𝒜-𝒵": # 0x1d49c - 0x1d4b5 - - t: "сценарий" # (en: 'script', google translation) + - "𝒜-𝒵": # 0x1d49c - 0x1d4b5 + - t: "рукописная" - spell: "translate('.', '𝒜𝒝𝒞𝒟𝒠𝒡𝒢𝒣𝒤𝒥𝒦𝒧𝒨𝒩𝒪𝒫𝒬𝒭𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf100 - 0xf119 - - t: "сценарий" # (en: 'script', google translation) + - "-": # 0xf100 - 0xf119 + - t: "рукописная" - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝒶-𝓏": # 0x1d4b6 - 0x1d4cf - - t: "сценарий" # (en: 'script', google translation) + - "𝒶-𝓏": # 0x1d4b6 - 0x1d4cf + - t: "рукописная" - spell: "translate('.', '𝒶𝒷𝒸𝒹𝒺𝒻𝒼𝒽𝒾𝒿𝓀𝓁𝓂𝓃𝓄𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf11a - 0xf133 - - t: "сценарий" # (en: 'script', google translation) + - "-": # 0xf11a - 0xf133 + - t: "рукописная" - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" # bold script chars in math alphabetic block and also MathType private use area - - "𝓐-𝓩": # 0x1d4d0 - 0x1d4e9 - - t: "скрипт жирный" # (en: 'script bold', google translation) + - "𝓐-𝓩": # 0x1d4d0 - 0x1d4e9 + - t: "рукописная" + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝓐𝓑𝓒𝓓𝓔𝓕𝓖𝓗𝓘𝓙𝓚𝓛𝓜𝓝𝓞𝓟𝓠𝓡𝓢𝓣𝓤𝓥𝓦𝓧𝓨𝓩', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf140 - 0xf159 - - t: "скрипт жирный" # (en: 'script bold', google translation) + - "-": # 0xf140 - 0xf159 + - t: "рукописная" + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝓪-𝔃": # 0x1d4ea - 0x1d503 - - t: "скрипт жирный" # (en: 'script bold', google translation) + - "𝓪-𝔃": # 0x1d4ea - 0x1d503 + - t: "рукописная" + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝓪𝓫𝓬𝓭𝓮𝓯𝓰𝓱𝓲𝓳𝓴𝓵𝓶𝓷𝓸𝓹𝓺𝓻𝓼𝓽𝓾𝓿𝔀𝔁𝔂𝔃', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf15a - 0xf173 - - t: "скрипт жирный" # (en: 'script bold', google translation) + - "-": # 0xf15a - 0xf173 + - t: "рукописная" + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf180 - 0xf199 + - "-": # 0xf180 - 0xf199 - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "": # 0xf19a + - "": # 0xf19a - test: if: "$CapitalLetters_Beep" then: @@ -2655,12 +3248,12 @@ en: 'right harpoon over left harpoon', google translation) if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "пропусков"] # (en: 'cap', google translation) + then: [t: "заглавная"] else: [x: "$SpeechOverrides_CapitalLetters"] - pitch: value: "$CapitalLetters_Pitch" - replace: [t: "лигатура ae"] # (en: 'ligature ae', google translation) - - "": # 0xf19b + replace: [t: "лигатура ae"] + - "": # 0xf19b - test: if: "$CapitalLetters_Beep" then: @@ -2673,12 +3266,12 @@ en: 'right harpoon over left harpoon', google translation) if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "пропусков"] # (en: 'cap', google translation) + then: [t: "заглавная"] else: [x: "$SpeechOverrides_CapitalLetters"] - pitch: value: "$CapitalLetters_Pitch" - replace: [t: "острый с"] # (en: 'sharp s', google translation) - - "": # 0xf19c + replace: [t: "эсцет"] + - "": # 0xf19c - test: if: "$CapitalLetters_Beep" then: @@ -2691,950 +3284,520 @@ en: 'right harpoon over left harpoon', google translation) if: "$SpeechOverrides_CapitalLetters = ''" then_test: if: "$Impairment = 'Blindness'" - then: [t: "пропусков"] # (en: 'cap', google translation) + then: [t: "заглавная"] else: [x: "$SpeechOverrides_CapitalLetters"] - pitch: value: "$CapitalLetters_Pitch" - replace: [t: "o с инсультом"] # (en: 'o with stroke', google translation) + replace: [t: "o со штрихом"] # MathType only has a few of the cap Greek letters in PUA - - "": # 0xf201 - 0xf209 - - t: "двойной удар" # (en: 'double struck', google translation) + - "": # 0xf201 - 0xf209 + - t: "двойной контур" - spell: "translate('.', '', 'ΔΨΛΠΣΘΓΩΥ')" - - "-": # 0xf220 - 0xf236 - - t: "двойной удар" # (en: 'double struck', google translation) + - "-": # 0xf220 - 0xf236 + - t: "двойной контур" - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "": [t: "двойной удар final sigma"] # 0xf237 (en: 'double struck final sigma', google translation) - - "": [t: "дважды поразил ро"] # 0xf250 (en: 'double struck rho', google translation) - - "": [t: "двойной удар phi"] # 0xf251 (en: 'double struck phi', google translation) - - "𝐀-𝐙": # 0x1d400 - 0x1d419 - - t: "смелый" # (en: 'bold', google translation) + - "": [t: "конечная сигма с двойным контуром"] # 0xf237 + - "": [t: "ро с двойным контуром"] # 0xf250 + - "": [t: "фи с двойным контуром"] # 0xf251 + - "𝐀-𝐙": # 0x1d400 - 0x1d419 + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝐀𝐁𝐂𝐃𝐄𝐅𝐆𝐇𝐈𝐉𝐊𝐋𝐌𝐍𝐎𝐏𝐐𝐑𝐒𝐓𝐔𝐕𝐖𝐗𝐘𝐙', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf260 - 0xf279 - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf260 - 0xf279 + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝐚-𝐳": # 0x1d41a - 0x1d433 - - t: "смелый" # (en: 'bold', google translation) + - "𝐚-𝐳": # 0x1d41a - 0x1d433 + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝐚𝐛𝐜𝐝𝐞𝐟𝐠𝐡𝐢𝐣𝐤𝐥𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐭𝐮𝐯𝐰𝐱𝐲𝐳', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf27a - 0xf293 - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf27a - 0xf293 + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝐴-𝑍": # 0x1d434 - 0x1d44d + - "𝐴-𝑍": # 0x1d434 - 0x1d44d - spell: "translate('.', '𝐴𝐵𝐶𝐷𝐸𝐹𝐺𝐻𝐼𝐽𝐾𝐿𝑀𝑁𝑂𝑃𝑄𝑅𝑆𝑇𝑈𝑉𝑊𝑋𝑌𝑍', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf294 - 0xf2ad + - "-": # 0xf294 - 0xf2ad - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝑎-𝑧": # 0x1d44e - 0x1d467 + - "𝑎-𝑧": # 0x1d44e - 0x1d467 - spell: "translate('.', '𝑎𝑏𝑐𝑑𝑒𝑓𝑔𝑕𝑖𝑗𝑘𝑙𝑚𝑛𝑜𝑝𝑞𝑟𝑠𝑡𝑢𝑣𝑤𝑥𝑦𝑧', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf2ae - 0xf2c7 + - "-": # 0xf2ae - 0xf2c7 - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝑨-𝒁": # 0x1d468 - 0x1d481 + - "𝑨-𝒁": # 0x1d468 - 0x1d481 # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝑨𝑩𝑪𝑫𝑬𝑭𝑮𝑯𝑰𝑱𝑲𝑳𝑴𝑵𝑶𝑷𝑸𝑹𝑺𝑻𝑼𝑽𝑾𝑿𝒀𝒁', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf2c8 - 0xf2e1 + - "-": # 0xf2c8 - 0xf2e1 # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝒂-𝒛": # 0x1d482 - 0x1d49b + - "𝒂-𝒛": # 0x1d482 - 0x1d49b # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝒂𝒃𝒄𝒅𝒆𝒇𝒈𝒉𝒊𝒋𝒌𝒍𝒎𝒏𝒐𝒑𝒒𝒓𝒔𝒕𝒖𝒗𝒘𝒙𝒚𝒛', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf2e2 - 0xf2fb + - "-": # 0xf2e2 - 0xf2fb # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝖠-𝖹": # 0x1d5a0 - 0x1d5b9 + - "𝖠-𝖹": # 0x1d5a0 - 0x1d5b9 - spell: "translate('.', '𝖠𝖡𝖢𝖣𝖤𝖥𝖦𝖧𝖨𝖩𝖪𝖫𝖬𝖭𝖮𝖯𝖰𝖱𝖲𝖳𝖴𝖵𝖶𝖷𝖸𝖹', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf300 - 0xf319 + - "-": # 0xf300 - 0xf319 - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝖺-𝗓": # 0x1d5ba - 0x1d5d3 + - "𝖺-𝗓": # 0x1d5ba - 0x1d5d3 - spell: "translate('.', '𝖺𝖻𝖼𝖽𝖾𝖿𝗀𝗁𝗂𝗃𝗄𝗅𝗆𝗇𝗈𝗉𝗊𝗋𝗌𝗍𝗎𝗏𝗐𝗑𝗒𝗓', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf31a - 0xf333 + - "-": # 0xf31a - 0xf333 - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝗔-𝗭": # 0x1d5d4 - 0x1d5ed - - t: "смелый" # (en: 'bold', google translation) + - "𝗔-𝗭": # 0x1d5d4 - 0x1d5ed + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬𝗭', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf334 - 0xf34d - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf334 - 0xf34d + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝗮-𝘇": # 0x1d5ee - 0x1d607 - - t: "смелый" # (en: 'bold', google translation) + - "𝗮-𝘇": # 0x1d5ee - 0x1d607 + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf34e - 0xf367 - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf34e - 0xf367 + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝘈-𝘡": # 0x1d608 - 0x1d621 + - "𝘈-𝘡": # 0x1d608 - 0x1d621 # - t: "italic" - spell: "translate('.', '𝘈𝘉𝘊𝘋𝘌𝘍𝘎𝘏𝘐𝘑𝘒𝘓𝘔𝘕𝘖𝘗𝘘𝘙𝘚𝘛𝘜𝘝𝘞𝘟𝘠𝘡', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf368 - 0xf381 + - "-": # 0xf368 - 0xf381 # - t: "italic" - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝘢-𝘻": # 0x1d622 - 0x1d63b + - "𝘢-𝘻": # 0x1d622 - 0x1d63b # - t: "italic" - spell: "translate('.', '𝘢𝘣𝘤𝘥𝘦𝘧𝘨𝘩𝘪𝘫𝘬𝘭𝘮𝘯𝘰𝘱𝘲𝘳𝘴𝘵𝘶𝘷𝘸𝘹𝘺𝘻', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf382 - 0xf39b + - "-": # 0xf382 - 0xf39b # - t: "italic" - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝘼-𝙕": # 0x1d63c - 0x1d655 + - "𝘼-𝙕": # 0x1d63c - 0x1d655 # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝘼𝘽𝘾𝘿𝙀𝙁𝙂𝙃𝙄𝙅𝙆𝙇𝙈𝙉𝙊𝙋𝙌𝙍𝙎𝙏𝙐𝙑𝙒𝙓𝙔𝙕', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf39c - 0xf3b5 + - "-": # 0xf39c - 0xf3b5 # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝙖-𝙯": # 0x1d656 - 0x1d66f + - "𝙖-𝙯": # 0x1d656 - 0x1d66f # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝙖𝙗𝙘𝙙𝙚𝙛𝙜𝙝𝙞𝙟𝙠𝙡𝙢𝙣𝙤𝙥𝙦𝙧𝙨𝙩𝙪𝙫𝙬𝙭𝙮𝙯', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf3b6 - 0xf3cf + - "-": # 0xf3b6 - 0xf3cf # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "𝙰-𝚉": # 0x1d670 - 0x1d689 + - "𝙰-𝚉": # 0x1d670 - 0x1d689 - spell: "translate('.', '𝙰𝙱𝙲𝙳𝙴𝙵𝙶𝙷𝙸𝙹𝙺𝙻𝙼𝙽𝙾𝙿𝚀𝚁𝚂𝚃𝚄𝚅𝚆𝚇𝚈𝚉', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "-": # 0xf3d0 - 0xf3e9 + - "-": # 0xf3d0 - 0xf3e9 - spell: "translate('.', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')" - - "𝚊-𝚣": # 0x1d68a - 0x1d6a3 + - "𝚊-𝚣": # 0x1d68a - 0x1d6a3 - spell: "translate('.', '𝚊𝚋𝚌𝚍𝚎𝚏𝚐𝚑𝚒𝚓𝚔𝚕𝚖𝚗𝚘𝚙𝚚𝚛𝚜𝚝𝚞𝚟𝚠𝚡𝚢𝚣', 'abcdefghijklmnopqrstuvwxyz')" - - "-": # 0xf3ea - 0xf403 + - "-": # 0xf3ea - 0xf403 - spell: "translate('.', '', 'abcdefghijklmnopqrstuvwxyz')" - - "": [t: "бессмысленный я"] # 0xf404 (en: 'dotless i', google translation) - - "𝚤": [t: "бессмысленный я"] # 0x1d6a4 (en: 'dotless i', google translation) - - "𝚥": [t: "dotless j"] # 0x1d6a5 (google translation) + - "": [t: "i без точки"] # 0xf404 + - "𝚤": [t: "i без точки"] # 0x1d6a4 + - "𝚥": [t: "j без точки"] # 0x1d6a5 - - "𝚨-𝛀": # 0x1d6a8 - 0x1d6c0 - - t: "смелый" # (en: 'bold', google translation) + - "𝚨-𝛀": # 0x1d6a8 - 0x1d6c0 + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝚨𝚩𝚪𝚫𝚬𝚭𝚮𝚯𝚰𝚱𝚲𝚳𝚴𝚵𝚶𝚷𝚸𝚹𝚺𝚻𝚼𝚽𝚾𝚿𝛀', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "-": # 0xf408 - 0xf420 - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf408 - 0xf420 + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "𝛂-𝛚": # 0x1d6c2 - 0x1d6da - - t: "смелый" # (en: 'bold', google translation) + - "𝛂-𝛚": # 0x1d6c2 - 0x1d6da + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝛂𝛃𝛄𝛅𝛆𝛇𝛈𝛉𝛊𝛋𝛌𝛍𝛎𝛏𝛐𝛑𝛒𝛓𝛔𝛕𝛖𝛗𝛘𝛙𝛚', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "-": # 0xf422 - 0xf43a - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf422 - 0xf43a + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "": [t: "смелый нахбла"] # 0xf421 (en: 'bold nahblah', google translation) - - "𝛁": [t: "смелый нахбла"] # 0x1d6c1 (en: 'bold nahblah', google translation) + - "": [t: "жирная набла"] # 0xf421 + - "𝛁": [t: "жирная набла"] # 0x1d6c1 - - "𝛛𝛜𝛝𝛞𝛟𝛠𝛡": # 0x1D6DB - 0x1D6E1 - - t: "смелый" # (en: 'bold', google translation) + - "𝛛𝛜𝛝𝛞𝛟𝛠𝛡": # 0x1D6DB - 0x1D6E1 + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝛛𝛜𝛝𝛞𝛟𝛠𝛡', '∂εθκφρπ')" - - "": # 0xF43C - 0xF441 - - t: "смелый" # (en: 'bold', google translation) + - "": # 0xF43C - 0xF441 + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', '∂εθκφρπ')" - - "𝛢-𝛺": # 0x1d6e2 - 0x1d6fa + - "𝛢-𝛺": # 0x1d6e2 - 0x1d6fa # - t: "italic" - spell: "translate('.', '𝛢𝛣𝛤𝛥𝛦𝛧𝛨𝛩𝛪𝛫𝛬𝛭𝛮𝛯𝛰𝛱𝛲𝛳𝛴𝛵𝛶𝛷𝛸𝛹𝛺', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "-": # 0xf442 - 0xf45a + - "-": # 0xf442 - 0xf45a # - t: "italic" - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "𝛼-𝜔": # 0x1d6fc - 0x1d714 + - "𝛼-𝜔": # 0x1d6fc - 0x1d714 # - t: "italic" - spell: "translate('.', '𝛼𝛽𝛾𝛿𝜀𝜁𝜂𝜃𝜄𝜅𝜆𝜇𝜈𝜉𝜊𝜋𝜌𝜍𝜎𝜏𝜐𝜑𝜒𝜓𝜔', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "-": # 0xf45c - 0xf474 + - "-": # 0xf45c - 0xf474 # - t: "italic" - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "": [t: "курсив нахбла"] # 0xf45b (en: 'italic nahblah', google translation) - - "𝛻": [t: "курсив нахбла"] # 0x1d6fb (en: 'italic nahblah', google translation) + - "": [t: "курсивная набла"] # 0xf45b + - "𝛻": [t: "курсивная набла"] # 0x1d6fb - - "𝜕𝜖𝜗𝜘𝜙𝜚𝜛": # 0x1d715 - 0x1d71b + - "𝜕𝜖𝜗𝜘𝜙𝜚𝜛": # 0x1d715 - 0x1d71b # - t: "italic" - spell: "translate('.', '𝜕𝜖𝜗𝜘𝜙𝜚𝜛', '∂εθκφρπ')" - - "": # 0xf475 - 0xf47b + - "": # 0xf475 - 0xf47b # - t: "italic" - spell: "translate('.', '', '∂εθκφρπ')" - - "𝜜-𝜴": # 0x1d71c - 0x1d734 + - "𝜜-𝜴": # 0x1d71c - 0x1d734 # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝜜𝜝𝜞𝜟𝜠𝜡𝜢𝜣𝜤𝜥𝜦𝜧𝜨𝜩𝜪𝜫𝜬𝜭𝜮𝜯𝜰𝜱𝜲𝜳𝜴', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "-": # 0xf47c - 0xf494 + - "-": # 0xf47c - 0xf494 # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "𝜶-𝝎": # 0x1d736 - 0x1d74e + - "𝜶-𝝎": # 0x1d736 - 0x1d74e # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝜶𝜷𝜸𝜹𝜺𝜻𝜼𝜽𝜾𝜿𝝀𝝁𝝂𝝃𝝄𝝅𝝆𝝇𝝈𝝉𝝊𝝋𝝌𝝍𝝎', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "-": # 0xf496 - 0xf4ae + - "-": # 0xf496 - 0xf4ae # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "𝝏𝝐𝝑𝝒𝝓𝝔𝝕": # 0x1d74f - 0x1d755 + - "𝝏𝝐𝝑𝝒𝝓𝝔𝝕": # 0x1d74f - 0x1d755 # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝝏𝝐𝝑𝝒𝝓𝝔𝝕', '∂εθκφρπ')" - - "": # 0xf422 - 0xf43a + - "": # 0xf422 - 0xf43a # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', '∂εθκφρπ')" - - "𝜵": [t: "смелый курсив нахбла"] # 0x1d735 (en: 'bold italic nahblah', google translation) - - "": [t: "смелый курсив нахбла"] # 0xf495 (en: 'bold italic nahblah', google translation) + - "𝜵": [t: "жирная курсивная набла"] # 0x1d735 + - "": [t: "жирная курсивная набла"] # 0xf495 - - "𝝖-𝝮": # 0x1d756 - 0x1d76e - - t: "смелый" # (en: 'bold', google translation) + - "𝝖-𝝮": # 0x1d756 - 0x1d76e + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝝖𝝗𝝘𝝙𝝚𝝛𝝜𝝝𝝞𝝟𝝠𝝡𝝢𝝣𝝤𝝥𝝦𝝧𝝨𝝩𝝪𝝫𝝬𝝭𝝮', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "-": # 0xf4b6 - 0xf4ce - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf4b6 - 0xf4ce + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "𝝰-𝞈": # 0x1d770 - 0x1d788 - - t: "смелый" # (en: 'bold', google translation) + - "𝝰-𝞈": # 0x1d770 - 0x1d788 + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝝰𝝱𝝲𝝳𝝴𝝵𝝶𝝷𝝸𝝹𝝺𝝻𝝼𝝽𝝾𝝿𝞀𝞁𝞂𝞃𝞄𝞅𝞆𝞇𝞈', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "-": # 0xf4d0 - 0xf4e8 - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf4d0 - 0xf4e8 + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "𝞉𝞊𝞋𝞌𝞍𝞎𝞏": # 0x1d789 - 0x1d78f - - t: "смелый" # (en: 'bold', google translation) + - "𝞉𝞊𝞋𝞌𝞍𝞎𝞏": # 0x1d789 - 0x1d78f + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝞉𝞊𝞋𝞌𝞍𝞎𝞏', '∂εθκφρπ')" - - "": # 0xf4e9 - 0xf4ef - - t: "смелый" # (en: 'bold', google translation) + - "": # 0xf4e9 - 0xf4ef + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', '∂εθκφρπ')" - - "": [t: "смелый нахбла"] # 0xf4cf (en: 'bold nahblah', google translation) - - "𝝯": [t: "смелый нахбла"] # 0x1d76f (en: 'bold nahblah', google translation) + - "": [t: "жирная набла"] # 0xf4cf + - "𝝯": [t: "жирная набла"] # 0x1d76f - - "𝞐-𝞨": # 0x1d790 - 0x1d7a8 + - "𝞐-𝞨": # 0x1d790 - 0x1d7a8 # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝞐𝞑𝞒𝞓𝞔𝞕𝞖𝞗𝞘𝞙𝞚𝞛𝞜𝞝𝞞𝞟𝞠𝞡𝞢𝞣𝞤𝞥𝞦𝞧𝞨', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "-": # 0xf4f0 - 0xf508 + - "-": # 0xf4f0 - 0xf508 # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩ')" - - "𝞪-𝟂": # 0x1d7aa - 0x1d7c2 + - "𝞪-𝟂": # 0x1d7aa - 0x1d7c2 # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝞪𝞫𝞬𝞭𝞮𝞯𝞰𝞱𝞲𝞳𝞴𝞵𝞶𝞷𝞸𝞹𝞺𝞻𝞼𝞽𝞾𝞿𝟀𝟁𝟂', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "-": # 0xf50a - 0xf522 + - "-": # 0xf50a - 0xf522 # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', 'αβγδεζηθικλμνξοπρςστυφχψω')" - - "𝟃𝟄𝟅𝟆𝟇𝟈𝟉": # 0x1d7c3 - 0x1d7c9 + - "𝟃𝟄𝟅𝟆𝟇𝟈𝟉": # 0x1d7c3 - 0x1d7c9 # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝟃𝟄𝟅𝟆𝟇𝟈𝟉', '∂εθκφρπ')" - - "": # 0xf523 - 0xf529 + - "": # 0xf523 - 0xf529 # - t: "bold italic" - - t: "смелый" # (en: 'bold', google translation) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', '∂εθκφρπ')" - - "": [t: "смелый нахбла"] # 0xf509 (en: 'bold nahblah', google translation) - - "𝞩": [t: "смелый нахбла"] # 0x1d7a9 (en: 'bold nahblah', google translation) + - "": [t: "жирная набла"] # 0xf509 + - "𝞩": [t: "жирная набла"] # 0x1d7a9 - - "-": # 0xf52e - 0xf537 (old MathType) - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf52e - 0xf537 (old MathType) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', '0123456789')" - - "𝟎-𝟗": # 0x1d7ce - 0x1d7d7 - - t: "смелый" # (en: 'bold', google translation) + - "𝟎-𝟗": # 0x1d7ce - 0x1d7d7 + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗', '0123456789')" - - "-": # 0xf52e - 0xf537 (old MathType) - - t: "смелый" # (en: 'bold', google translation) + - "-": # 0xf52e - 0xf537 (old MathType) + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '', '0123456789')" - - "𝟬-𝟵": # 0x1D7EC - 0x1D7F5 - - t: "смелый" # (en: 'bold', google translation) + - "𝟬-𝟵": # 0x1D7EC - 0x1D7F5 + - test: + if: "not($IgnoreBold)" + then: [t: "жирная"] - spell: "translate('.', '𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵', '0123456789')" - - "-": # 0xf556 - 0xf55f (old MathType) + - "-": # 0xf556 - 0xf55f (old MathType) - spell: "translate('.', '', '0123456789')" - - "𝟢-𝟫": # 0x1d7e2 - 0x1d7eb + - "𝟢-𝟫": # 0x1d7e2 - 0x1d7eb - spell: "translate('.', '𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿', '0123456789')" - - "𝟶-𝟿": # 0x1d7f6 - 0x1d7ff + - "𝟶-𝟿": # 0x1d7f6 - 0x1d7ff - spell: "translate('.', '𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿', '0123456789')" - - "": [t: "неизвестный персонаж"] # 0xf700 (en: 'unknown character', google translation) - - "": [t: "нижний правый и нижний левый треугольники"] # 0xf726 (en: 'lower right and lower left triangles', google translation) - - "": [t: "горизонтальный эллипс"] # 0xf72d (en: 'horizontal ellipsis extender', google translation) - - "": [t: "средний горизонтальный эллипсис"] # 0xf72e (en: 'midline horizontal ellipsis extender', google translation) - - "": [t: "радикальный удлинитель"] # 0xf8e5 (en: 'radical extender', google translation) - - "": [t: "вертикальная стрелка удлинителя"] # 0xf8e6 (en: 'vertical arrow extender', google translation) - - "": [t: "горизонтальная стрелка"] # 0xf8e7 (en: 'horizontal arrow extender', google translation) - - "": [t: "зарегистрированный знак без засечка"] # 0xf8e8 (en: 'registered sign sans serif', google translation) - - "": [t: "знак авторского права без засечка"] # 0xf8e9 (en: 'copyright sign sans serif', google translation) - - "": [t: "торговая марка знака без засечка"] # 0xf8ea (en: 'trade mark sign sans serif', google translation) - - "": [t: "левая вершина скобки"] # 0xf8eb (en: 'left paren top', google translation) - - "": [t: "левая скобка удлинителя"] # 0xf8ec (en: 'left paren extender', google translation) - - "": [t: "левая скобка дна"] # 0xf8ed (en: 'left paren bottom', google translation) - - "": [t: "левый кронштейн"] # 0xf8ee (en: 'left bracket top', google translation) - - "": [t: "удлинитель левого кронштейна"] # 0xf8ef (en: 'left bracket extender', google translation) - - "": [t: "левый кронштейн дно"] # 0xf8f0 (en: 'left bracket bottom', google translation) - - "": [t: "левый топ"] # 0xf8f1 (en: 'left brace top', google translation) - - "": [t: "оставая скоба середины"] # 0xf8f2 (en: 'left brace mid', google translation) - - "": [t: "левое скоба дно"] # 0xf8f3 (en: 'left brace bottom', google translation) - - "": [t: "скоба удлинителя"] # 0xf8f4 (en: 'brace extender', google translation) - - "": [t: "интегральный удлинитель"] # 0xf8f5 (en: 'integral extender', google translation) - - "": [t: "правая скобка вершина"] # 0xf8f6 (en: 'right paren top', google translation) - - "": [t: "право скобка удлинителя"] # 0xf8f7 (en: 'right paren extender', google translation) - - "": [t: "правая скобка дна"] # 0xf8f8 (en: 'right paren bottom', google translation) - - "": [t: "вершина правого кронштейна"] # 0xf8f9 (en: 'right bracket top', google translation) - - "": [t: "правый растяжение"] # 0xf8fa (en: 'right bracket extender', google translation) - - "": [t: "правый кронштейн дно"] # 0xf8fb (en: 'right bracket bottom', google translation) - - "": [t: "правый топ"] # 0xf8fc (en: 'right brace top', google translation) - - "": [t: "правая скоба середина"] # 0xf8fd (en: 'right brace mid', google translation) - - "": [t: "правое скоба дно"] # 0xf8fe (en: 'right brace bottom', google translation) - - "": [t: "логотип apple"] # 0xf8ff (en: 'apple logo', google translation) - - "ff": [t: "фф"] # 0xfb00 (en: 'ff', google translation) - - "fi": [t: "фигура"] # 0xfb01 (en: 'fi', google translation) - - "fl": [t: "флорида"] # 0xfb02 (en: 'fl', google translation) - - "ffi": [t: "ffi"] # 0xfb03 (google translation) - - "ffl": [t: "ффл"] # 0xfb04 (en: 'ffl', google translation) - - "ſt": [t: "футов"] # 0xfb05 (en: 'ft', google translation) - - "st": [t: "ул"] # 0xfb06 (en: 'st', google translation) - - "﬩": [t: "ивритное письмо альтернатива плюс"] # 0xfb29 (en: 'hebrew letter alternative plus', google translation) - - "︠": [t: "лигатура оставила половину украшения"] # 0xfe20 (en: 'ligature left half embellishment', google translation) - - "︡": [t: "лигатура справа половина украшения"] # 0xfe21 (en: 'ligature right half embellishment', google translation) - - "︢": [t: "двойная тильда оставила половину украшения"] # 0xfe22 (en: 'double tilde left half embellishment', google translation) - - "︣": [t: "двойная тильда правое половина украшения"] # 0xfe23 (en: 'double tilde right half embellishment', google translation) - - "︤": [t: "макрон оставил половину украшения"] # 0xfe24 (en: 'macron left half embellishment', google translation) - - "︥": [t: "макрон правый половина украшения"] # 0xfe25 (en: 'macron right half embellishment', google translation) - - "︦": [t: "соединение украшений макрона"] # 0xfe26 (en: 'conjoining macron embellishment', google translation) - - "︵": [t: "над скобкой"] # 0xfe35 (en: 'over paren', google translation) - - "︶": [t: "под скобкой"] # 0xfe36 (en: 'under paren', google translation) - - "︷": [t: "над скобкой"] # 0xfe37 (en: 'over brace', google translation) - - "︸": [t: "под скобкой"] # 0xfe38 (en: 'under brace', google translation) - - "︿": [t: "над угловым кронштейном"] # 0xfe3f (en: 'over angle bracket', google translation) - - "﹀": [t: "под угловым кронштейном"] # 0xfe40 (en: 'under angle bracket', google translation) - - "﹡": [t: "маленькая звездочка"] # 0xfe61 (en: 'small asterisk', google translation) - - "﹢": [t: "маленький плюс"] # 0xfe62 (en: 'small plus', google translation) - - "﹣": [t: "маленький минус"] # 0xfe63 (en: 'small minus', google translation) - - "﹤": [t: "маленький меньше, чем"] # 0xfe64 (en: 'small less than', google translation) - - "﹥": [t: "маленький больше, чем"] # 0xfe65 (en: 'small greater than', google translation) - - "﹦": [t: "маленькие равны"] # 0xfe66 (en: 'small equals', google translation) - - "+": [t: "равна значению"] # 0xff0b (en: 'equals sign', google translation) - - "<": [t: "меньше, чем"] # 0xff1c (en: 'less than', google translation) - - "=": [t: "равно"] # 0xff1d (en: 'equals', google translation) - - ">": [t: "больше"] # 0xff1e (en: 'greater than', google translation) - - "\": [t: "backslash"] # 0xff3c (google translation) - - "^": [t: "шляп"] # 0xff3e (en: 'hat', google translation) - - "|": # 0xff5c + - "": [t: "неизвестный символ"] # 0xf700 + - "": [t: "нижний правый и нижний левый треугольники"] # 0xf726 + - "": [t: "удлинитель горизонтального многоточия"] # 0xf72d + - "": [t: "удлинитель горизонтального многоточия по средней линии"] # 0xf72e + - "": [t: "удлинитель радикала"] # 0xf8e5 + - "": [t: "удлинитель вертикальной стрелки"] # 0xf8e6 + - "": [t: "удлинитель горизонтальной стрелки"] # 0xf8e7 + - "": [t: "знак зарегистрированного товарного знака без засечек"] # 0xf8e8 + - "": [t: "знак авторского права без засечек"] # 0xf8e9 + - "": [t: "знак торговой марки без засечек"] # 0xf8ea + - "": [t: "верхняя часть левой скобки"] # 0xf8eb + - "": [t: "удлинитель левой скобки"] # 0xf8ec + - "": [t: "нижняя часть левой скобки"] # 0xf8ed + - "": [t: "верхняя часть левой квадратной скобки"] # 0xf8ee + - "": [t: "удлинитель левой квадратной скобки"] # 0xf8ef + - "": [t: "нижняя часть левой квадратной скобки"] # 0xf8f0 + - "": [t: "верхняя часть левой фигурной скобки"] # 0xf8f1 + - "": [t: "средняя часть левой фигурной скобки"] # 0xf8f2 + - "": [t: "нижняя часть левой фигурной скобки"] # 0xf8f3 + - "": [t: "удлинитель фигурной скобки"] # 0xf8f4 + - "": [t: "удлинитель интеграла"] # 0xf8f5 + - "": [t: "верхняя часть правой скобки"] # 0xf8f6 + - "": [t: "удлинитель правой скобки"] # 0xf8f7 + - "": [t: "нижняя часть правой скобки"] # 0xf8f8 + - "": [t: "верхняя часть правой квадратной скобки"] # 0xf8f9 + - "": [t: "удлинитель правой квадратной скобки"] # 0xf8fa + - "": [t: "нижняя часть правой квадратной скобки"] # 0xf8fb + - "": [t: "верхняя часть правой фигурной скобки"] # 0xf8fc + - "": [t: "средняя часть правой фигурной скобки"] # 0xf8fd + - "": [t: "нижняя часть правой фигурной скобки"] # 0xf8fe + - "": [t: "логотип Apple"] # 0xf8ff + - "ff": [t: "ff"] # 0xfb00 + - "fi": [t: "fi"] # 0xfb01 + - "fl": [t: "fl"] # 0xfb02 + - "ffi": [t: "ffi"] # 0xfb03 + - "ffl": [t: "ffl"] # 0xfb04 + - "ſt": [t: "ft"] # 0xfb05 + - "st": [t: "st"] # 0xfb06 + - "﬩": [t: "альтернативный знак плюса в иврите"] # 0xfb29 + - "︠": [t: "левая половина лигатуры"] # 0xfe20 + - "︡": [t: "правая половина лигатуры"] # 0xfe21 + - "︢": [t: "левая половина двойной тильды"] # 0xfe22 + - "︣": [t: "правая половина двойной тильды"] # 0xfe23 + - "︤": [t: "левая половина макрона"] # 0xfe24 + - "︥": [t: "правая половина макрона"] # 0xfe25 + - "︦": [t: "соединительный макрон"] # 0xfe26 + - "︵": [t: "верхняя скобка"] # 0xfe35 + - "︶": [t: "нижняя скобка"] # 0xfe36 + - "︷": [t: "верхняя фигурная скобка"] # 0xfe37 + - "︸": [t: "нижняя фигурная скобка"] # 0xfe38 + - "︿": [t: "верхняя угловая скобка"] # 0xfe3f + - "﹀": [t: "нижняя угловая скобка"] # 0xfe40 + - "﹡": [t: "маленькая звёздочка"] # 0xfe61 + - "﹢": [t: "маленький плюс"] # 0xfe62 + - "﹣": [t: "маленький минус"] # 0xfe63 + - "﹤": [t: "маленький знак меньше"] # 0xfe64 + - "﹥": [t: "маленький знак больше"] # 0xfe65 + - "﹦": [t: "маленький знак равенства"] # 0xfe66 + - "+": [t: "полноширинный знак плюс"] # 0xff0b + - "<": [t: "меньше"] # 0xff1c + - "=": [t: "равно"] # 0xff1d + - ">": [t: "больше"] # 0xff1e + - "\": [t: "обратная косая черта"] # 0xff3c + - "^": [t: "крышка"] # 0xff3e + - "|": # 0xff5c # note: for ClearSpeak and SimpleSpeak, "|" inside of sets is handled at the mrow level, same for 'sets' - with: - variables: [DefaultToGiven: "count(preceding-sibling::*)=1 and count(following-sibling::*)=1 and ../../../*[1][.='P']"] # P(A|B) + variables: [DefaultToGiven: "count(preceding-sibling::*)=1 and count(following-sibling::*)=1 and ../../../*[1][.='P']"] # P(A|B) replace: - test: - if: "$SpeechStyle != 'ClearSpeak'" then_test: if: "$DefaultToGiven" - then: [t: "данный"] # (en: 'given', google translation) - else: [t: "вертикальная линия"] # (en: 'vertical line', google translation) + then: [t: "при условии"] + else: [t: "вертикальная черта"] - else_if: "not(preceding-sibling::*) or not(following-sibling::*)" - then: [t: "вертикальная линия"] # (en: 'vertical line', google translation) + then: [t: "вертикальная черта"] - else_if: "$ClearSpeak_VerticalLine = 'SuchThat'" - then: [t: "так что"] # (en: 'such that', google translation) + then: [t: "такой, что"] - else_if: "$ClearSpeak_VerticalLine = 'Given' or $DefaultToGiven" - then: [t: "данный"] # (en: 'given', google translation) - - else: [t: "разделение"] # (en: 'divides', google translation) - - "~": [t: "тилде"] # 0xff5e (en: 'tilde', google translation) - - "¬": [t: "нет"] # 0xffe2 (en: 'not', google translation) - - "←": [t: "стрелка влево"] # 0xffe9 (en: 'left arrow', google translation) - - "↑": [t: "стрелка вверх"] # 0xffea (en: 'up arrow', google translation) - - "→": [t: "стрелка вправо"] # 0xffeb (en: 'right arrow', google translation) - - "↓": [t: "стрелка вниз"] # 0xffec (en: 'down arrow', google translation) - - "": [t: "неизвестный или отсутствующий объект"] # 0xfffc (en: 'unknown or missing object', google translation) - - "�": [t: "неизвестный или отсутствующий символ"] # 0xfffd (en: 'unknown or missing character', google translation) -- "ˉ": [t: "макрон"] # 0x2c9 (en: 'modifier macron') -- "ˊ": [t: "акут"] # 0x2ca (en: 'modifier acute accent') -- "ˋ": [t: "гравис"] # 0x2cb (en: 'modifier grave accent') -- "ˌ": [t: "нижняя вертикальная черта"] # 0x2cc (en: 'modifier low vertical line') -- "ˍ": [t: "нижний макрон"] # 0x2cd (en: 'modifier low macron') -- "ˎ": [t: "нижний гравис"] # 0x2ce (en: 'modifier low grave accent') -- "ˏ": [t: "нижний акут"] # 0x2cf (en: 'modifier low acute accent') -- "ː": [t: "знак долготы"] # 0x2d0 (en: 'modifier triangular colon') -- "ˑ": [t: "половинный знак долготы"] # 0x2d1 (en: 'modifier half triangular colon') -- "˒": [t: "центрированное правое полукольцо"] # 0x2d2 (en: 'modifier centered right half ring') -- "˓": [t: "центрированное левое полукольцо"] # 0x2d3 (en: 'modifier centered left half ring') -- "˔": [t: "верхний упор"] # 0x2d4 (en: 'modifier up tack') -- "˕": [t: "нижний упор"] # 0x2d5 (en: 'modifier down tack') -- "˖": [t: "верхний индекс плюс"] # 0x2d6 (en: 'modifier plus sign') -- "˗": [t: "верхний индекс минус"] # 0x2d7 (en: 'modifier minus sign') -- "˘": [t: "бреве"] # 0x2d8 (en: 'breve') -- "˙": [t: "точка сверху"] # 0x2d9 (en: 'dot') -- "˚": [t: "кольцо сверху"] # 0x2da (en: 'ring above') -- "˛": [t: "огонек"] # 0x2db (en: 'ogonek') -- "˜": [t: "малая тильда"] # 0x2dc (en: 'small tilde') -- "˝": [t: "двойной акут"] # 0x2dd (en: 'double acute accent') -- "˞": [t: "ротический крюк"] # 0x2de (en: 'modifier rhotic hook') -- "˟": [t: "перечёркивающий акцент"] # 0x2df (en: 'modifier cross accent') -- "ˠ": [t: "верхний индекс гаммы"] # 0x2e0 (en: 'modifier small gamma') -- "ˡ": [t: "верхний индекс l"] # 0x2e1 (en: 'modifier small l') -- "ˢ": [t: "верхний индекс s"] # 0x2e2 (en: 'modifier small s') -- "ˣ": [t: "верхний индекс x"] # 0x2e3 (en: 'modifier small x') -- "ˤ": [t: "верхний индекс перевёрнутой гортанной смычки"] # 0x2e4 (en: 'modifier small reversed glottal stop') -- "˥": [t: "сверхвысокий тон"] # 0x2e5 (en: 'modifier extra-high tone bar') -- "˦": [t: "высокий тон"] # 0x2e6 (en: 'modifier high tone bar') -- "˧": [t: "средний тон"] # 0x2e7 (en: 'modifier mid tone bar') -- "˨": [t: "низкий тон"] # 0x2e8 (en: 'modifier low tone bar') -- "˩": [t: "сверхнизкий тон"] # 0x2e9 (en: 'modifier extra-low tone bar') -- "˪": [t: "знак тона инь"] # 0x2ea (en: 'modifier yin departing tone mark') -- "˫": [t: "знак тона ян"] # 0x2eb (en: 'modifier yang departing tone mark') -- "ˬ": [t: "звонкость"] # 0x2ec (en: 'modifier voicing') -- "˭": [t: "непридыхательность"] # 0x2ed (en: 'modifier unaspirated') -- "ˮ": [t: "двойной апостроф"] # 0x2ee (en: 'modifier double apostrophe') -- "˯": [t: "нижний наконечник стрелки вниз"] # 0x2ef (en: 'modifier low down arrowhead') -- "˰": [t: "нижний наконечник стрелки вверх"] # 0x2f0 (en: 'modifier low up arrowhead') -- "˱": [t: "нижний наконечник стрелки влево"] # 0x2f1 (en: 'modifier low left arrowhead') -- "˲": [t: "нижний наконечник стрелки вправо"] # 0x2f2 (en: 'modifier low right arrowhead') -- "˳": [t: "нижнее кольцо"] # 0x2f3 (en: 'modifier low ring') -- "˴": [t: "средний гравис"] # 0x2f4 (en: 'modifier middle grave accent') -- "˵": [t: "средний двойной гравис"] # 0x2f5 (en: 'modifier middle double grave accent') -- "˶": [t: "средний двойной акут"] # 0x2f6 (en: 'modifier middle double acute accent') -- "˷": [t: "нижняя тильда"] # 0x2f7 (en: 'modifier low tilde') -- "˸": [t: "верхнее двоеточие"] # 0x2f8 (en: 'modifier raised colon') -- "˹": [t: "начало высокого тона"] # 0x2f9 (en: 'modifier begin high tone') -- "˺": [t: "конец высокого тона"] # 0x2fa (en: 'modifier end high tone') -- "˻": [t: "начало низкого тона"] # 0x2fb (en: 'modifier begin low tone') -- "˼": [t: "конец низкого тона"] # 0x2fc (en: 'modifier end low tone') -- "˽": [t: "полка"] # 0x2fd (en: 'modifier shelf') -- "˾": [t: "открытая полка"] # 0x2fe (en: 'modifier open shelf') -- "˿": [t: "нижняя левая стрелка"] # 0x2ff (en: 'modifier low left arrow') -- "̀": [t: "комбинируемый гравис"] # 0x300 (en: 'grave accent embellishment') -- "́": [t: "комбинируемый акут"] # 0x301 (en: 'acute accent embellishment') -- "̂": [t: "комбинируемый циркумфлекс"] # 0x302 (en: 'circumflex accent embellishment') -- "̃": [t: "комбинируемая тильда"] # 0x303 (en: 'tilde embellishment') -- "̄": [t: "комбинируемый макрон"] # 0x304 (en: 'macron embellishment') -- "̅": [t: "комбинируемое надчёркивание"] # 0x305 (en: 'overbar embellishment') -- "̆": [t: "комбинируемое бреве"] # 0x306 (en: 'breve embellishment') -- "̇": [t: "комбинируемая точка сверху"] # 0x307 (en: 'dot above embellishment') -- "̈": [t: "комбинируемый диэрезис"] # 0x308 (en: 'diaeresis embellishment') -- "̉": [t: "комбинируемый крючок сверху"] # 0x309 (en: 'hook above embellishment') -- "̊": [t: "комбинируемое кольцо сверху"] # 0x30a (en: 'ring above embellishment') -- "̋": [t: "комбинируемый двойной акут"] # 0x30b (en: 'double acute accent embellishment') -- "̌": [t: "комбинируемый гачек"] # 0x30c (en: 'check') -- "̍": [t: "комбинируемая вертикальная линия сверху"] # 0x30d (en: 'vertical line above embellishment') -- "̎": [t: "комбинируемая двойная вертикальная линия сверху"] # 0x30e (en: 'double vertical line above embellishment') -- "̏": [t: "комбинируемый двойной гравис"] # 0x30f (en: 'double grave accent embellishment') -- "̐": [t: "комбинируемая чандрабинду"] # 0x310 (en: 'candrabindu embellishment') -- "̑": [t: "комбинируемое перевёрнутое бреве"] # 0x311 (en: 'inverted breve embellishment') -- "̒": [t: "комбинируемая перевёрнутая запятая сверху"] # 0x312 (en: 'turned comma above embellishment') -- "̓": [t: "комбинируемая запятая сверху"] # 0x313 (en: 'comma above embellishment') -- "̔": [t: "комбинируемая перевёрнутая запятая сверху"] # 0x314 (en: 'reversed comma above embellishment') -- "̕": [t: "комбинируемая запятая справа сверху"] # 0x315 (en: 'comma above right embellishment') -- "̖": [t: "комбинируемый гравис снизу"] # 0x316 (en: 'grave accent below embellishment') -- "̗": [t: "комбинируемый акут снизу"] # 0x317 (en: 'acute accent below embellishment') -- "̘": [t: "комбинируемый левый упор снизу"] # 0x318 (en: 'left tack below embellishment') -- "̙": [t: "комбинируемый правый упор снизу"] # 0x319 (en: 'right tack below embellishment') -- "̚": [t: "комбинируемый левый угол сверху"] # 0x31a (en: 'left angle above embellishment') -- "̛": [t: "комбинируемый рожок"] # 0x31b (en: 'horn embellishment') -- "̜": [t: "комбинируемое левое полукольцо снизу"] # 0x31c (en: 'left half ring below embellishment') -- "̝": [t: "комбинируемый верхний упор снизу"] # 0x31d (en: 'up tack below embellishment') -- "̞": [t: "комбинируемый нижний упор снизу"] # 0x31e (en: 'down tack below embellishment') -- "̟": [t: "комбинируемый знак плюс снизу"] # 0x31f (en: 'plus sign below embellishment') -- "̠": [t: "комбинируемый знак минус снизу"] # 0x320 (en: 'minus sign below embellishment') -- "̡": [t: "комбинируемый палатализованный крюк снизу"] # 0x321 (en: 'palatalized hook below embellishment') -- "̢": [t: "комбинируемый ретрофлексный крюк снизу"] # 0x322 (en: 'retroflex hook below embellishment') -- "̣": [t: "комбинируемая точка снизу"] # 0x323 (en: 'dot below embellishment') -- "̤": [t: "комбинируемый диэрезис снизу"] # 0x324 (en: 'diaeresis below embellishment') -- "̥": [t: "комбинируемое кольцо снизу"] # 0x325 (en: 'ring below embellishment') -- "̦": [t: "комбинируемая запятая снизу"] # 0x326 (en: 'comma below embellishment') -- "̧": [t: "комбинируемая седиль"] # 0x327 (en: 'cedilla embellishment') -- "̨": [t: "комбинируемый огонек"] # 0x328 (en: 'ogonek embellishment') -- "̩": [t: "комбинируемая вертикальная линия снизу"] # 0x329 (en: 'vertical line below embellishment') -- "̪": [t: "комбинируемый мостик снизу"] # 0x32a (en: 'bridge below embellishment') -- "̫": [t: "комбинируемая перевёрнутая двойная арка снизу"] # 0x32b (en: 'inverted double arch below embellishment') -- "̬": [t: "комбинируемый гачек снизу"] # 0x32c (en: 'caron below embellishment') -- "̭": [t: "комбинируемый циркумфлекс снизу"] # 0x32d (en: 'circumflex accent below embellishment') -- "̮": [t: "комбинируемое бреве снизу"] # 0x32e (en: 'breve below embellishment') -- "̯": [t: "комбинируемое перевёрнутое бреве снизу"] # 0x32f (en: 'inverted breve below embellishment') -- "̰": [t: "комбинируемая тильда снизу"] # 0x330 (en: 'tilde below embellishment') -- "̱": [t: "комбинируемый макрон снизу"] # 0x331 (en: 'macron below embellishment') -- "̲": [t: "комбинируемое подчёркивание"] # 0x332 (en: 'low line embellishment') -- "̳": [t: "комбинируемое двойное подчёркивание"] # 0x333 (en: 'double low line embellishment') -- "̴": [t: "комбинируемая наложенная тильда"] # 0x334 (en: 'tilde overlay embellishment') -- "̵": [t: "комбинируемая короткая черта"] # 0x335 (en: 'short stroke overlay embellishment') -- "̶": [t: "комбинируемая длинная черта"] # 0x336 (en: 'long stroke overlay embellishment') -- "̷": [t: "комбинируемый короткий слэш"] # 0x337 (en: 'short solidus overlay embellishment') -- "̸": [t: "комбинируемый длинный слэш"] # 0x338 (en: 'long solidus overlay embellishment') -- "̹": [t: "комбинируемое правое полукольцо снизу"] # 0x339 (en: 'right half ring below embellishment') -- "̺": [t: "комбинируемый перевёрнутый мостик снизу"] # 0x33a (en: 'inverted bridge below embellishment') -- "̻": [t: "комбинируемый квадрат снизу"] # 0x33b (en: 'square below embellishment') -- "̼": [t: "комбинируемая чайка снизу"] # 0x33c (en: 'seagull below embellishment') -- "̽": [t: "комбинируемый икс сверху"] # 0x33d (en: 'x above embellishment') -- "̾": [t: "комбинируемая вертикальная тильда"] # 0x33e (en: 'vertical tilde embellishment') -- "̿": [t: "комбинируемое двойное надчёркивание"] # 0x33f (en: 'double overline embellishment') -- "̀": [t: "комбинируемый знак гравис-тона"] # 0x340 (en: 'grave tone mark embellishment') -- "́": [t: "комбинируемый знак акут-тона"] # 0x341 (en: 'acute tone mark embellishment') -- "͆": [t: "комбинируемый мостик сверху"] # 0x346 (en: 'bridge above') - -- "ΪΫϏ": # 0x3aa, 0x3ab, 0x3cf - - test: - if: "$CapitalLetters_Beep" - then: - - audio: - value: "beep.mp4" - replace: [] - - test: - if: "$CapitalLetters_UseWord" - then_test: - if: "$SpeechOverrides_CapitalLetters = ''" - then_test: - if: "$Impairment = 'Blindness'" - then: [t: "заглавная"] # (en: 'cap') - else: [x: "$SpeechOverrides_CapitalLetters"] - - pitch: - value: "$CapitalLetters_Pitch" - replace: [spell: "translate('.', 'ΪΫϏ', 'ιυϗ')"] - - t: " с диэрезисом" # (en: 'with dialytika') -- "ϊ": [t: "йота с диэрезисом"] # 0x3ca (en: 'iota with dialytika') -- "ϋ": [t: "ипсилон с диэрезисом"] # 0x3cb (en: 'upsilon with dialytika') -- "ό": [t: "омикрон с ударением"] # 0x3cc (en: 'omicron with tonos') -- "ύ": [t: "ипсилон с ударением"] # 0x3cd (en: 'upsilon with tonos') -- "ώ": [t: "омега с ударением"] # 0x3ce (en: 'omega with tonos') -- "ϐ": [t: "бета"] # 0x3d0 (en: 'beta') -- "ϑ": [t: "тета"] # 0x3d1 (en: 'theta') -- "ϒ": [t: "ипсилон с крючком"] # 0x3d2 (en: 'upsilon with hook') -- "ϓ": [t: "ипсилон с акутом и крючком"] # 0x3d3 (en: 'upsilon with acute and hook') -- "ϔ": [t: "ипсилон с диэрезисом и крючком"] # 0x3d4 (en: 'upsilon with diaeresis and hook') -- "ϕ": [t: "фи"] # 0x3d5 (en: 'phi') -- "ϖ": [t: "пи"] # 0x3d6 (en: 'pi') -- "ϗ": [t: "кай"] # 0x3d7 (en: 'kai') -- "Ϙ": [t: "заглавная архаичная коппа"] # 0x3d8 (en: 'cap archaic koppa') -- "ϙ": [t: "архаичная коппа"] # 0x3d9 (en: 'archaic koppa') -- "ϵ": [t: "эпсилон"] # 0x3f5 (en: 'epsilon') -- "϶": [t: "обратный эпсилон"] # 0x3f6 (en: 'reversed epsilon') -- "А-Я": # 0x410 - 0x42f - - test: - if: "$CapitalLetters_Beep" - then: - - audio: - value: "beep.mp4" - replace: [] - - test: - if: "$CapitalLetters_UseWord" - then_test: - if: "$SpeechOverrides_CapitalLetters = ''" - then_test: - if: "$Impairment = 'Blindness'" - then: [t: "заглавная"] # (en: 'cap') - else: [x: "$SpeechOverrides_CapitalLetters"] - - pitch: - value: "$CapitalLetters_Pitch" - replace: [spell: "translate('.', 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', 'абвгдежзийклмнопрстуфхцчшщъыьэюя')"] -- "а": [t: "а"] # 0x430 -- "б": [t: "бэ"] # 0x431 -- "в": [t: "вэ"] # 0x432 -- "г": [t: "гэ"] # 0x433 -- "д": [t: "дэ"] # 0x434 -- "е": [t: "е"] # 0x435 -- "ж": [t: "жэ"] # 0x436 -- "з": [t: "зэ"] # 0x437 -- "и": [t: "и"] # 0x438 -- "й": [t: "и краткое"] # 0x439 -- "к": [t: "ка"] # 0x43a -- "л": [t: "эль"] # 0x43b -- "м": [t: "эм"] # 0x43c -- "н": [t: "эн"] # 0x43d -- "о": [t: "о"] # 0x43e -- "п": [t: "пэ"] # 0x43f -- "р": [t: "эр"] # 0x440 -- "с": [t: "эс"] # 0x441 -- "т": [t: "тэ"] # 0x442 -- "у": [t: "у"] # 0x443 -- "ф": [t: "эф"] # 0x444 -- "х": [t: "ха"] # 0x445 -- "ц": [t: "цэ"] # 0x446 -- "ч": [t: "чэ"] # 0x447 -- "ш": [t: "ша"] # 0x448 -- "щ": [t: "ща"] # 0x449 -- "ъ": [t: "твёрдый знак"] # 0x44a -- "ы": [t: "ы"] # 0x44b -- "ь": [t: "мягкий знак"] # 0x44c -- "э": [t: "э"] # 0x44d -- "ю": [t: "ю"] # 0x44e -- "я": [t: "я"] # 0x44f -- "؆": [t: "арабский кубический корень"] # 0x606 (en: 'Arabic-Indic cube root') -- "؇": [t: "арабский корень четвёртой степени"] # 0x607 (en: 'Arabic-Indic fourth root') -- "؈": [t: "арабский рай"] # 0x608 (en: 'Arabic ray') -- "‐": [t: "дефис"] # 0x2010 (en: 'hyphen') -- "‑": [t: "неразрывный дефис"] # 0x2011 (en: 'non-breaking hyphen') -- "‒": [t: "цифровое тире"] # 0x2012 (en: 'figure dash') -- "–": [t: "короткое тире"] # 0x2013 (en: 'en dash') -- "—": [t: "длинное тире"] # 0x2014 (en: 'em dash') -- "―": [t: "горизонтальная черта"] # 0x2015 (en: 'horizontal bar') -- "‖": [t: "двойная вертикальная линия"] # 0x2016 (en: 'double vertical line') -- "†": [t: "крестик"] # 0x2020 (en: 'dagger') -- "‡": [t: "двойной крестик"] # 0x2021 (en: 'double dagger') - -- " - ": [t: ""] # 0x2000 - 0x2007 (различные пробелы, не озвучиваются) - -- "•": # 0x2022 - - test: - if: "@data-chem-formula-op" - then: [t: "точка"] # в химических формулах - else: [t: "маркер"] # (en: 'bullet') - -- "…": # 0x2026 - test: - if: - - "$SpeechStyle != 'ClearSpeak' or $ClearSpeak_Ellipses = 'Auto' or" - - "../*[1][.='…']" - then: [t: "многоточие"] # (en: 'dot dot dot') - else_test: - if: "count(following-sibling::*) = 0" - then: [t: "и так далее"] # (en: 'and so on') - else: [t: "и так далее до"] # (en: 'and so on up to') - -- "‰": [t: "промилле"] # 0x2030 (en: 'per mille') -- "‱": [t: "десять тысяч"] # 0x2031 (en: 'per ten thousand') -- "′": [t: "штрих"] # 0x2032 (en: 'prime') -- "″": [t: "двойной штрих"] # 0x2033 (en: 'double prime') -- "‴": [t: "тройной штрих"] # 0x2034 (en: 'triple prime') -- "‵": [t: "обратный штрих"] # 0x2035 (en: 'reversed prime') -- "‶": [t: "обратный двойной штрих"] # 0x2036 (en: 'reversed double prime') -- "‷": [t: "обратный тройной штрих"] # 0x2037 (en: 'reversed triple prime') -- "‸": [t: "в степени"] # 0x2038 (en: 'to the') -- "‹": [t: "левая одиночная угловая кавычка"] # 0x2039 (en: 'single left-pointing angle quote mark') -- "›": [t: "правая одиночная угловая кавычка"] # 0x203a (en: 'single right-pointing angle quote mark') -- "‼": [t: "двойной восклицательный знак"] # 0x203c (en: 'double factorial') -- "⁄": [t: "косая черта дроби"] # 0x2044 (en: 'fraction slash') -- "⁅": [t: "левая квадратная скобка с пером"] # 0x2045 (en: 'left square bracket with quill') -- "⁆": [t: "правая квадратная скобка с пером"] # 0x2046 (en: 'right square bracket with quill') -- "※": [t: "знак ссылки"] # 0x203b (en: 'reference mark') -- "‿": [t: "соединение снизу"] # 0x203F (en: 'under tie') -- "⁀": [t: "соединение сверху"] # 0x2040 (en: 'tie') -- "⁎": [t: "нижняя звёздочка"] # 0x204e (en: 'low asterisk') -- "⁏": [t: "обратная точка с запятой"] # 0x204f (en: 'reversed semicolon') -- "⁐": [t: "сомкнуть"] # 0x2050 (en: 'close up') -- "⁑": [t: "две вертикальные звёздочки"] # 0x2051 (en: 'two vertical asterisks') -- "⁒": [t: "коммерческий знак минус"] # 0x2052 (en: 'commercial minus sign') -- "⁗": [t: "четыре штриха"] # 0x2057 (en: 'quadruple prime') -- "⁠": [t: ""] # 0x2060 (невидимый соединитель) -- "⁰": [t: "в степени ноль"] # 0x2070 (en: 'to the zeroth power') -- "ⁱ": [t: "в степени i"] # 0x2071 (en: 'to the i-th power') -- "⁴": [t: "в четвёртой степени"] # 0x2074 (en: 'to the fourth power') -- "⁵": [t: "в пятой степени"] # 0x2075 (en: 'to the fifth power') -- "⁶": [t: "в шестой степени"] # 0x2076 (en: 'to the sixth power') -- "⁷": [t: "в седьмой степени"] # 0x2077 (en: 'to the seventh power') -- "⁸": [t: "в восьмой степени"] # 0x2078 (en: 'to the eighth power') -- "⁹": [t: "в девятой степени"] # 0x2079 (en: 'to the ninth power') -- "⁺": [t: "верхний индекс плюс"] # 0x207a (en: 'superscript plus sign') -- "⁻": [t: "верхний индекс минус"] # 0x207b (en: 'superscript minus') -- "⁼": [t: "верхний индекс равно"] # 0x207c (en: 'superscript equals sign') -- "⁽": [t: "верхний индекс левая скобка"] # 0x207d (en: 'superscript left parenthesis') -- "⁾": [t: "верхний индекс правая скобка"] # 0x207e (en: 'superscript right parenthesis') -- "ⁿ": [t: "в степени n"] # 0x207f (en: 'to the n-th power') -- "₀": [t: "индекс ноль"] # 0x2080 (en: 'sub zero') -- "₁": [t: "индекс один"] # 0x2081 (en: 'sub one') -- "₂": [t: "индекс два"] # 0x2082 (en: 'sub two') -- "₃": [t: "индекс три"] # 0x2083 (en: 'sub three') -- "₄": [t: "индекс четыре"] # 0x2084 (en: 'sub four') -- "₅": [t: "индекс пять"] # 0x2085 (en: 'sub five') -- "₆": [t: "индекс шесть"] # 0x2086 (en: 'sub six') -- "₇": [t: "индекс семь"] # 0x2087 (en: 'sub seven') -- "₈": [t: "индекс восемь"] # 0x2088 (en: 'sub eight') -- "₉": [t: "индекс девять"] # 0x2089 (en: 'sub nine') -- "₊": [t: "индекс плюс"] # 0x208a (en: 'subscript plus sign') -- "₋": [t: "индекс минус"] # 0x208b (en: 'subscript minus sign') -- "₌": [t: "индекс равно"] # 0x208c (en: 'subscript equals sign') -- "₍": [t: "индекс левая скобка"] # 0x208d (en: 'subscript left parenthesis') -- "₎": [t: "индекс правая скобка"] # 0x208e (en: 'subscript right parenthesis') -- "ₐ": [t: "индекс a"] # 0x2090 (en: 'sub a') -- "ₑ": [t: "индекс e"] # 0x2091 (en: 'sub e') -- "ₒ": [t: "индекс o"] # 0x2092 (en: 'sub o') -- "ₓ": [t: "индекс x"] # 0x2093 (en: 'sub x') -- "ₕ": [t: "индекс h"] # 0x2095 (en: 'sub h') -- "ₖ": [t: "индекс k"] # 0x2096 (en: 'sub k') -- "ₗ": [t: "индекс l"] # 0x2097 (en: 'sub l') -- "ₘ": [t: "индекс m"] # 0x2098 (en: 'sub m') -- "ₙ": [t: "индекс n"] # 0x2099 (en: 'sub n') -- "ₚ": [t: "индекс p"] # 0x209a (en: 'sub p') -- "ₛ": [t: "индекс s"] # 0x209b (en: 'sub s') -- "ₜ": [t: "индекс t"] # 0x209c (en: 'sub t') -- "₠": [t: "евро"] # 0x20a0 (en: 'european currency unit') — устаревший, но пусть будет евро -- "₡": [t: "колон"] # 0x20a1 (en: 'colon') -- "₢": [t: "крузейро"] # 0x20a2 (en: 'cruzeiro') -- "₣": [t: "франк"] # 0x20a3 (en: 'franc') -- "₤": [t: "лира"] # 0x20a4 (en: 'lira') -- "₥": [t: "милль"] # 0x20a5 (en: 'mill') -- "₦": [t: "найра"] # 0x20a6 (en: 'naira') -- "₧": [t: "песета"] # 0x20a7 (en: 'peseta') -- "₨": [t: "рупия"] # 0x20a8 (en: 'rupee') -- "₩": [t: "вона"] # 0x20a9 (en: 'won') -- "₪": [t: "новый шекель"] # 0x20aa (en: 'new sheqel') -- "₫": [t: "донг"] # 0x20ab (en: 'dong') -- "€": [t: "евро"] # 0x20ac (en: 'euro') -- "₭": [t: "кип"] # 0x20ad (en: 'kip') -- "₮": [t: "тугрик"] # 0x20ae (en: 'tugrik') -- "₯": [t: "драхма"] # 0x20af (en: 'drachma') -- "₰": [t: "пфенниг"] # 0x20b0 (en: 'german penny') -- "₱": [t: "песо"] # 0x20b1 (en: 'peso') -- "₲": [t: "гуарани"] # 0x20b2 (en: 'guarani') -- "₳": [t: "аустраль"] # 0x20b3 (en: 'austral') -- "₴": [t: "гривна"] # 0x20b4 (en: 'hryvnia') -- "₵": [t: "седи"] # 0x20b5 (en: 'cedi') -- "₶": [t: "ливр"] # 0x20b6 (en: 'livre tournois') -- "₷": [t: "спесмило"] # 0x20b7 (en: 'spesmilo') -- "₸": [t: "тенге"] # 0x20b8 (en: 'tenge') -- "₹": [t: "индийская рупия"] # 0x20b9 (en: 'indian rupee') -- "₺": [t: "турецкая лира"] # 0x20ba (en: 'turkish lira') -- "⃐": [t: "комбинируемый левый гарпун сверху"] # 0x20d0 (en: 'left harpoon above embellishment') -- "⃑": [t: "комбинируемый правый гарпун сверху"] # 0x20d1 (en: 'right harpoon above embellishment') -- "⃒": [t: "комбинируемая длинная вертикальная черта"] # 0x20d2 (en: 'long vertical line overlay embellishment') -- "⃓": [t: "комбинируемая короткая вертикальная черта"] # 0x20d3 (en: 'short vertical line overlay embellishment') -- "⃔": [t: "комбинируемая стрелка против часовой стрелки"] # 0x20d4 (en: 'anticlockwise arrow above embellishment') -- "⃕": [t: "комбинируемая стрелка по часовой стрелке"] # 0x20d5 (en: 'clockwise arrow above embellishment') -- "⃖": [t: "комбинируемая стрелка влево сверху"] # 0x20d6 (en: 'left arrow above embellishment') -- "⃗": [t: "комбинируемая стрелка вправо сверху"] # 0x20d7 (en: 'right arrow above embellishment') -- "⃘": [t: "комбинируемое кольцо"] # 0x20d8 (en: 'ring overlay embellishment') -- "⃙": [t: "комбинируемое кольцо по часовой стрелке"] # 0x20d9 (en: 'clockwise ring overlay embellishment') -- "⃚": [t: "комбинируемое кольцо против часовой стрелки"] # 0x20da (en: 'anticlockwise ring overlay embellishment') -- "⃛": [t: "комбинируемые три точки"] # 0x20db (en: 'triple dot') -- "⃜": [t: "комбинируемые четыре точки"] # 0x20dc (en: 'quadruple dot') -- "⃝": [t: "комбинируемый круг"] # 0x20dd (en: 'enclosing circle embellishment') -- "⃞": [t: "комбинируемый квадрат"] # 0x20de (en: 'enclosing square embellishment') -- "⃟": [t: "комбинируемый ромб"] # 0x20df (en: 'enclosing diamond embellishment') -- "⃠": [t: "комбинируемый круг с обратной косой"] # 0x20e0 (en: 'enclosing circle backslash embellishment') -- "⃡": [t: "комбинируемая стрелка влево-вправо сверху"] # 0x20e1 (en: 'left right arrow above embellishment') -- "⃢": [t: "комбинируемый прямоугольник"] # 0x20e2 (en: 'enclosing screen embellishment') -- "⃣": [t: "комбинируемый значок клавиши"] # 0x20e3 (en: 'enclosing keycap embellishment') -- "⃤": [t: "комбинируемый треугольник вверх"] # 0x20e4 (en: 'enclosing upward pointing triangle embellishment') -- "⃥": [t: "комбинируемая обратная косая черта"] # 0x20e5 (en: 'reverse solidus overlay embellishment') -- "⃦": [t: "комбинируемая двойная вертикальная черта"] # 0x20e6 (en: 'double vertical stroke embellishment') -- "⃧": [t: "комбинируемый символ аннуитета"] # 0x20e7 (en: 'annuity symbol embellishment') -- "⃨": [t: "комбинируемые три точки снизу"] # 0x20e8 (en: 'triple underdot') -- "⃩": [t: "комбинируемый широкий мостик сверху"] # 0x20e9 (en: 'wide bridge above embellishment') -- "⃪": [t: "комбинируемая левая стрелка"] # 0x20ea (en: 'leftwards arrow overlay embellishment') -- "⃫": [t: "комбинируемая длинная двойная косая"] # 0x20eb (en: 'long double solidus overlay embellishment') -- "⃬": [t: "комбинируемый правый гарпун вниз"] # 0x20ec (en: 'rightwards harpoon with barb downwards embellishment') -- "⃭": [t: "комбинируемый левый гарпун вниз"] # 0x20ed (en: 'leftwards harpoon with barb downwards embellishment') -- "⃮": [t: "комбинируемая левая стрелка снизу"] # 0x20ee (en: 'left arrow below embellishment') -- "⃯": [t: "комбинируемая правая стрелка снизу"] # 0x20ef (en: 'right arrow below embellishment') -- "⃰": [t: "комбинируемая звёздочка сверху"] # 0x20f0 (en: 'asterisk above embellishment') -- "℄": [t: "символ центровой линии"] # 0x2104 (en: 'center line symbol') -- "℅": [t: "вниманию"] # 0x2105 (en: 'care of') -- "℆": [t: "каждая"] # 0x2106 (en: 'cada una') -- "ℇ": [t: "постоянная Эйлера"] # 0x2107 (en: 'Euler's constant') -- "℈": [t: "скрупул"] # 0x2108 (en: 'scruple') -- "℉": [t: "градус Фаренгейта"] # 0x2109 (en: 'degree Fahrenheit') -- "ℊ": [t: "рукописная g"] # 0x210a (en: 'script g') -- "ℌℑℨℭ": # 0x210c, 0x2111, 0x2128, 0x212d - - t: "готическое" # (en: 'fraktur') - - spell: "translate('.', 'ℌℑℨℭ', 'HIZC')" -- "ℍℙℾℿ": # 0x210d, 0x2119, 0x213e, 0x213f - - t: "двойное" # (en: 'double struck') - - spell: "translate('.', 'ℍℙℾℿ', 'HPΓΠ')" -- "ℎ": [t: "постоянная Планка"] # 0x210e (en: 'Planck constant') -- "ℏ": [t: "постоянная Планка с чертой"] # 0x210f (en: 'h-bar') - -- "ℐℒ℘ℬℰℱℳ": # 0x2110, 0x2112, 0x2118, 0x2130, 0x2131, 0x2133 - - t: "рукописное" # (en: 'script') - - spell: "translate('.', 'ℐℒ℘ℬℰℱℳ', 'ILPBEFM')" + then: [t: "при условии"] + - else: [t: "делит"] + - "~": [t: "тильда"] # 0xff5e + - "¬": [t: "не"] # 0xffe2 + - "←": [t: "стрелка влево"] # 0xffe9 + - "↑": [t: "стрелка вверх"] # 0xffea + - "→": [t: "стрелка вправо"] # 0xffeb + - "↓": [t: "стрелка вниз"] # 0xffec + - "": [t: "неизвестный или отсутствующий объект"] # 0xfffc + - "�": [t: "неизвестный или отсутствующий символ"] # 0xfffd + + - "🣑": [t: "находится в равновесии с"] # 0x1F8D1 + - "🣒": [t: "находится в равновесии, смещённом вправо, с"] # 0x1F8D2 + - "🣓": [t: "находится в равновесии, смещённом влево, с"] # 0x1F8D3 + +# MathJax v4 adopted these PUA values for some partial chem bonds that aren't in Unicode + - "\uE410": [t: "частичная связь "] # 0xe410 + - "\uE411": [t: "двойная частичная связь "] # 0xe411 + - "\uE412": [t: "тройная частичная связь "] # 0xe412 + +# MathJax v4 also adopted these PUA values for some arrows thar are in Unicode +# Hopefully these will be exported properly in future versions of MathJax + - "\uE428": [spell: "'⟵'"] # 0xe428 defer to def of arrow + - "\uE429": [spell: "'⟶'"] # 0xe429 defer to def of arrow + - "\uE42A": [spell: "'⟷'"] # 0xe42a defer to def of arrow + - "\uE408": [spell: "'🣑'"] # 0xe408 defer to def of arrow + - "\uE409": [spell: "'🣒'"] # 0xe409 defer to def of arrow + - "\uE40A": [spell: "'🣓'"] # 0xe40a defer to def of arrow + - "\uE42B": [spell: "'⇄'"] # 0xe42b defer to def of arrow + - "\uE42C": [spell: "'←'"] # 0xe42c defer to def of arrow + - "\uE42D": [spell: "'→'"] # 0xe42d defer to def of arrow + - "\uE42E": [spell: "'⇄'"] # 0xe42e defer to def of arrow -- "ℓ": [t: "рукописная l"] # 0x2113 (en: 'script l') -- "℔": [t: "фунт"] # 0x2114 (en: 'pound') -- "№": [t: "номер"] # 0x2116 (en: 'numero') -- "℥": [t: "унция"] # 0x2125 (en: 'ounce') -- "Ω": [t: "ом"] # 0x2126 (en: 'ohm') -- "℧": [t: "сименс"] # 0x2127 (en: 'mho') -- "℩": [t: "перевёрнутая йота"] # 0x2129 (en: 'turned iota') -- "K": [t: "кельвин"] # 0x212a (en: 'kelvin') -- "Å": [t: "ангстрем"] # 0x212b (en: 'angstrom') -- "ℯ": [t: "рукописная e"] # 0x212f (en: 'script e') - -- "Ⅎ℺⅁⅂⅃⅄": # 0x2132, 0x213a, 0x2141, 0x2142, 0x2143, 0x2144 - - test: - - if: "'.' = '℺'" - then: [t: "повёрнутое"] # (en: 'rotated') - - else_if: "'.' = 'Ⅎ'" - then: [t: "перевёрнутое"] # (en: 'turned') - - else_if: "'.' = '⅃'" - then: [t: "обратное без засечек"] # (en: 'reversed sans-serif') - else: [t: "повёрнутое без засечек"] # (en: 'turned sans-serif') - - spell: "translate('.', 'Ⅎ℺⅁⅂⅃⅄', 'FQGLLY')" - -- "ℴ": [t: "рукописная o"] # 0x2134 (en: 'script o') -- "ℵ": [t: "алеф"] # 0x2135 (en: 'alef') -- "ℶ": [t: "бет"] # 0x2136 (en: 'bet') -- "ℷ": [t: "гимель"] # 0x2137 (en: 'gimel') -- "ℸ": [t: "далет"] # 0x2138 (en: 'dalet') -- "ℼ": [t: "двойное пи"] # 0x213c (en: 'double-struck pi') -- "ℽ": [t: "двойная гамма"] # 0x213d (en: 'double-struck gamma') -- "⅀": [t: "двойная сумма"] # 0x2140 (en: 'double-struck n-ary summation') -- "⅋": [t: "перевёрнутый амперсанд"] # 0x214b (en: 'turned ampersand') -- "⅌": [t: "на"] # 0x214c (en: 'per') -- "ⅎ": [t: "перевёрнутая f"] # 0x214e (en: 'turned f') -- "¼": [t: "одна четверть"] # 0x00bc (en: 'one quarter') -- "½": [t: "одна вторая"] # 0x00bd (en: 'one half') -- "¾": [t: "три четверти"] # 0x00be (en: 'three quarters') -- "⅐": [t: "одна седьмая"] # 0x2150 (en: 'one seventh') -- "⅑": [t: "одна девятая"] # 0x2151 (en: 'one ninth') -- "⅒": [t: "одна десятая"] # 0x2152 (en: 'one tenth') -- "⅓": [t: "одна треть"] # 0x2153 (en: 'one third') -- "⅔": [t: "две трети"] # 0x2154 (en: 'two thirds') -- "⅕": [t: "одна пятая"] # 0x2155 (en: 'one fifth') -- "⅖": [t: "две пятых"] # 0x2156 (en: 'two fifths') -- "⅗": [t: "три пятых"] # 0x2157 (en: 'three fifths') -- "⅘": [t: "четыре пятых"] # 0x2158 (en: 'four fifths') -- "⅙": [t: "одна шестая"] # 0x2159 (en: 'one sixth') -- "⅚": [t: "пять шестых"] # 0x215a (en: 'five sixths') -- "⅛": [t: "одна восьмая"] # 0x215b (en: 'one eighth') -- "⅜": [t: "три восьмых"] # 0x215c (en: 'three eighths') -- "⅝": [t: "пять восьмых"] # 0x215d (en: 'five eighths') -- "⅞": [t: "семь восьмых"] # 0x215e (en: 'seven eighths') -- "⅟": [t: "один"] # 0x215f (en: 'one over') -- "Ⅰ": [t: "один"] # 0x2160 (римская цифра) -- "Ⅱ": [t: "два"] # 0x2161 -- "Ⅲ": [t: "три"] # 0x2162 -- "Ⅳ": [t: "четыре"] # 0x2163 -- "Ⅴ": [t: "пять"] # 0x2164 -- "Ⅵ": [t: "шесть"] # 0x2165 -- "Ⅶ": [t: "семь"] # 0x2166 -- "Ⅷ": [t: "восемь"] # 0x2167 -- "Ⅸ": [t: "девять"] # 0x2168 -- "Ⅹ": [t: "десять"] # 0x2169 -- "Ⅺ": [t: "одиннадцать"] # 0x216a -- "Ⅻ": [t: "двенадцать"] # 0x216b -- "Ⅼ": [t: "пятьдесят"] # 0x216c -- "Ⅽ": [t: "сто"] # 0x216d -- "Ⅾ": [t: "пятьсот"] # 0x216e -- "Ⅿ": [t: "тысяча"] # 0x216f -- "ⅰ": [t: "один"] # 0x2170 -- "ⅱ": [t: "два"] # 0x2171 -- "ⅲ": [t: "три"] # 0x2172 -- "ⅳ": [t: "четыре"] # 0x2173 -- "ⅴ": [t: "пять"] # 0x2174 -- "ⅵ": [t: "шесть"] # 0x2175 -- "ⅶ": [t: "семь"] # 0x2176 -- "ⅷ": [t: "восемь"] # 0x2177 -- "ⅸ": [t: "девять"] # 0x2178 -- "ⅹ": [t: "десять"] # 0x2179 -- "ⅺ": [t: "одиннадцать"] # 0x217a -- "ⅻ": [t: "двенадцать"] # 0x217b -- "ⅼ": [t: "пятьдесят"] # 0x217c -- "ⅽ": [t: "сто"] # 0x217d -- "ⅾ": [t: "пятьсот"] # 0x217e -- "ⅿ": [t: "тысяча"] # 0x217f -- "↉": [t: "ноль третьих"] # 0x2189 (en: 'zero thirds') -- "←": [t: "стрелка влево"] # 0x2190 -- "↑": [t: "стрелка вверх"] # 0x2191 -- "→": [t: "стрелка вправо"] # 0x2192 -- "↓": [t: "стрелка вниз"] # 0x2193 -- "↔": [t: "стрелка влево-вправо"] # 0x2194 -- "↕": [t: "стрелка вверх-вниз"] # 0x2195 -- "↖": [t: "стрелка северо-запад"] # 0x2196 -- "↗": # 0x2197 - - test: - if: "ancestor::*[2][self::m:limit]" - then: [t: "стремится снизу"] # (en: 'approaches from below') - else: [t: "стрелка северо-восток"] # 0x2197 -- "↘": # 0x2198 - - test: - if: "ancestor::*[2][self::m:limit]" - then: [t: "стремится сверху"] # (en: 'approaches from above') - else: [t: "стрелка юго-восток"] # 0x2198 -- "↙": [t: "стрелка юго-запад"] # 0x2199 -- "↚": [t: "стрелка влево с чертой"] # 0x219a -- "↛": [t: "стрелка вправо с чертой"] # 0x219b -- "↜": [t: "стрелка влево волнистая"] # 0x219c -- "↝": [t: "стрелка вправо волнистая"] # 0x219d -- "↞": [t: "стрелка влево с двумя головками"] # 0x219e -- "↟": [t: "стрелка вверх с двумя головками"] # 0x219f -- "↠": [t: "стрелка вправо с двумя головками"] # 0x21a0 -- "↡": [t: "стрелка вниз с двумя головками"] # 0x21a1 -- "↢": [t: "стрелка влево с хвостом"] # 0x21a2 -- "↣": [t: "стрелка вправо с хвостом"] # 0x21a3 -- "↤": [t: "стрелка влево от черты"] # 0x21a4 -- "↥": [t: "стрелка вверх от черты"] # 0x21a5 -- "↦": [t: "стрелка вправо от черты"] # 0x21a6 -- "↧": [t: "стрелка вниз от черты"] # 0x21a7 -- "↨": [t: "стрелка вверх-вниз с основанием"] # 0x21a8 -- "↩": [t: "стрелка влево с крючком"] # 0x21a9 -- "↪": [t: "стрелка вправо с крючком"] # 0x21aa -- "↫": [t: "стрелка влево с петлей"] # 0x21ab -- "↬": [t: "стрелка вправо с петлей"] # 0x21ac -- "↭": [t: "стрелка влево-вправо волнистая"] # 0x21ad -- "↮": [t: "стрелка влево-вправо с чертой"] # 0x21ae -- "↯": [t: "стрелка зигзаг вниз"] # 0x21af -- "↰": [t: "стрелка вверх с наконечником влево"] # 0x21b0 -- "↱": [t: "стрелка вверх с наконечником вправо"] # 0x21b1 -- "↲": [t: "стрелка вниз с наконечником влево"] # 0x21b2 -- "↳": [t: "стрелка вниз с наконечником вправо"] # 0x21b3 -- "↴": [t: "стрелка вправо с углом вниз"] # 0x21b4 -- "↵": [t: "стрелка вниз с углом влево"] # 0x21b5 -- "↶": [t: "полукруг против часовой стрелки сверху"] # 0x21b6 -- "↷": [t: "полукруг по часовой стрелке сверху"] # 0x21b7 -- "↸": [t: "стрелка северо-запад к длинной черте"] # 0x21b8 -- "↹": [t: "стрелка влево к черте над стрелкой вправо к черте"] # 0x21b9 -- "↺": [t: "разомкнутый круг против часовой стрелки"] # 0x21ba -- "↻": [t: "разомкнутый круг по часовой стрелке"] # 0x21bb -- "↼": [t: "левый гарпун вверх"] # 0x21bc -- "↽": [t: "левый гарпун вниз"] # 0x21bd -- "↾": [t: "правый гарпун вверх"] # 0x21be -- "↿": [t: "левый гарпун вверх"] # 0x21bf (дубль? в оригинале было 'up harpoon left') -- "⇀": [t: "правый гарпун вверх"] # 0x21c0 -- "⇁": [t: "правый гарпун вниз"] # 0x21c1 -- "⇂": [t: "правый гарпун вниз"] # 0x21c2 (дубль? в оригинале 'down harpoon right') -- "⇃": [t: "левый гарпун вниз"] # 0x21c3 -- "⇄": [t: "стрелка вправо над стрелкой влево"] # 0x21c4 -- "⇅": [t: "стрелка вверх слева от стрелки вниз"] # 0x21c5 -- "⇆": [t: "стрелка влево над стрелкой вправо"] # 0x21c6 -- "⇇": [t: "две стрелки влево"] # 0x21c7 -- "⇈": [t: "две стрелки вверх"] # 0x21c8 -- "⇉": [t: "две стрелки вправо"] # 0x21c9 -- "⇊": [t: "две стрелки вниз"] # 0x21ca -- "⇋": [t: "левый гарпун над правым гарпуном"] # 0x21cb -- "⇌": [t: "правый гарпун над левым гарпуном"] # 0x21cc