Skip to content
18 changes: 16 additions & 2 deletions Rules/Languages/hu/SharedRules/default.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
- test:
- if: "string-length(.) = 1 and text() != '_'" # need unicode.tdl to kick in for single letter tokens
then: [x: "text()"]
- else_if: "@data-chem-element or @data-roman-numeral" # NavMode=Character needs this
- else_if: "@data-chem-element > 0 or @data-roman-numeral" # NavMode=Character needs this
then: [SPELL: "text()", pause: "short"]
else: [x: "translate(., '-_\u00A0', ' ')"] # from intent literals or from extra spaces added (which get deleted)

Expand Down Expand Up @@ -237,12 +237,26 @@
- x: "*[2]"
- T: "alatt" # phrase(x with z 'below' it)

# FIX: this only works for up to four dots (which is realistically all we need)
- name: dot-over
tag: modified-variable
match: "*[1][self::m:mi] and (*[2][translate(., '.', '')=''])"
replace:
- x: "*[1]"
- x: "IfThenElse(string-length(*[2])=1, 'pont',
IfThenElse(string-length(*[2])=2, 'pont pont',
IfThenElse(string-length(*[2])=3, 'pont pont pont', 'pont pont pont pont')
))"
- pause: short

# FIX: the 'translate' list is a little different from 'modified-variable', so we also include 'mover' (unify?)
- name: diacriticals
tag: mover
tag: [mover, modified-variable]
match: "*[1][self::m:mi] and *[2][translate(., '\u0306\u030c.\u00A8\u02D9\u20DB\u20DC`^ˇ~→¯_', '')='']"
replace:
- x: "*[1]"
- x: "*[2]"
- pause: short

- name: default
tag: mover
Expand Down
6 changes: 4 additions & 2 deletions Rules/Languages/hu/SharedRules/general.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -469,15 +469,17 @@
-
name: log # handle both log and ln (if in an mrow, 'intents' are used)
tag: mi
match: ".='log' or .='ln'"
match: ".='log' or .='Log' or .='ln'"
replace:
- bookmark: "@id"
- test:
- if: "$Verbosity!='Terse'"
then: [T: ""] # phrase('the' logarithm function is used in mathematics)
then: [OT: ""] # phrase('the' logarithm function is used in mathematics)
- test:
- if: ".= 'log'"
then: [T: "logaritmus"] # phrase(the 'log' function is used in mathematics)
- else_if: ".= 'Log'"
then: [T: "logaritmus főértéke"]
- else_if: "$Verbosity='Terse'"
then: [SPELL: "'ln'"]
else: [T: "természetes alapú logaritmus"] # phrase(the 'natural log' function is used in mathematics)
Expand Down
1 change: 0 additions & 1 deletion Rules/Languages/hu/unicode-full.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
---


- "¢": [T: "centiméter"] # 0xa2 (en: 'cents', DeepL translation)
- "£": [T: "font"] # 0xa3 (en: 'pounds', DeepL translation)
- "¤": [T: "valuta jel"] # 0xa4 (en: 'currency sign', DeepL translation)
Expand Down
1,122 changes: 547 additions & 575 deletions Rules/Languages/hu/unicode.yaml

Large diffs are not rendered by default.

12 changes: 6 additions & 6 deletions tests/Languages/hu/ClearSpeak/large_ops.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ fn intersection_both() -> Result<()> {
</munderover>
<msub><mi>S</mi><mi>i</mi></msub>
</math>";
test("hu", "ClearSpeak", expr, "kereszteződés ettől: i egyenlő 1, eddig: 10 értéke:; nagy s alsó index i")?;
test("hu", "ClearSpeak", expr, "metszet ettől: i egyenlő 1, eddig: 10 értéke:; nagy s alsó index i")?;
return Ok(());

}
Expand All @@ -143,7 +143,7 @@ fn intersection_under() -> Result<()> {
</munder>
<msub><mi>S</mi><mi>i</mi></msub>
</math>";
test("hu", "ClearSpeak", expr, "kereszteződés alatta nagy c, nagy s alsó index i")?;
test("hu", "ClearSpeak", expr, "metszet alatta nagy c, nagy s alsó index i")?;
return Ok(());

}
Expand All @@ -155,7 +155,7 @@ fn intersection() -> Result<()> {
<mo>⋂</mo>
<msub><mi>S</mi><mi>i</mi></msub>
</math>";
test("hu", "ClearSpeak", expr, "kereszteződés nagy s alsó index i")?;
test("hu", "ClearSpeak", expr, "metszet nagy s alsó index i")?;
return Ok(());

}
Expand Down Expand Up @@ -217,7 +217,7 @@ fn integral_both() -> Result<()> {
</mrow>
<mtext>&#x2009;</mtext><mi>d</mi><mi>x</mi>
</math>";
test("hu", "ClearSpeak", expr, "integrál ettől: 0, eddig: 1 értéke:; f x; d x")?;
test("hu", "ClearSpeak", expr, "integrált ettől: 0, eddig: 1 értéke:; f x; d x")?;
return Ok(());

}
Expand All @@ -233,7 +233,7 @@ fn integral_under() -> Result<()> {
<mrow><mi>f</mi><mrow><mo>(</mo><mi>x</mi> <mo>)</mo></mrow></mrow>
<mi>d</mi><mi>x</mi>
</math>";
test("hu", "ClearSpeak", expr, "integrál alatta a valós számok halmaza; f x d x")?;
test("hu", "ClearSpeak", expr, "integrált alatta a valós számok halmaza; f x d x")?;
return Ok(());

}
Expand All @@ -246,7 +246,7 @@ fn integral() -> Result<()> {
<mrow><mi>f</mi><mrow><mo>(</mo><mi>x</mi> <mo>)</mo></mrow></mrow>
<mi>d</mi><mi>x</mi>
</math>";
test("hu", "ClearSpeak", expr, "integrál f x d x")?;
test("hu", "ClearSpeak", expr, "integrált f x d x")?;
return Ok(());

}
12 changes: 6 additions & 6 deletions tests/Languages/hu/SimpleSpeak/large_ops.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ fn intersection_both() -> Result<()> {
</munderover>
<msub><mi>S</mi><mi>i</mi></msub>
</math>";
test("hu", "SimpleSpeak", expr, "kereszteződés ettől: i egyenlő 1, eddig: 10 értéke:; nagy s alsó index i")?;
test("hu", "SimpleSpeak", expr, "metszet ettől: i egyenlő 1, eddig: 10 értéke:; nagy s alsó index i")?;
return Ok(());

}
Expand All @@ -143,7 +143,7 @@ fn intersection_under() -> Result<()> {
</munder>
<msub><mi>S</mi><mi>i</mi></msub>
</math>";
test("hu", "SimpleSpeak", expr, "kereszteződés alatta nagy c, nagy s alsó index i")?;
test("hu", "SimpleSpeak", expr, "metszet alatta nagy c, nagy s alsó index i")?;
return Ok(());

}
Expand All @@ -155,7 +155,7 @@ fn intersection() -> Result<()> {
<mo>⋂</mo>
<msub><mi>S</mi><mi>i</mi></msub>
</math>";
test("hu", "SimpleSpeak", expr, "kereszteződés nagy s alsó index i")?;
test("hu", "SimpleSpeak", expr, "metszet nagy s alsó index i")?;
return Ok(());

}
Expand Down Expand Up @@ -217,7 +217,7 @@ fn integral_both() -> Result<()> {
</mrow>
<mtext>&#x2009;</mtext><mi>d</mi><mi>x</mi>
</math>";
test("hu", "SimpleSpeak", expr, "integrál ettől: 0, eddig: 1 értéke:; f x; d x")?;
test("hu", "SimpleSpeak", expr, "integrált ettől: 0, eddig: 1 értéke:; f x; d x")?;
return Ok(());

}
Expand All @@ -233,7 +233,7 @@ fn integral_under() -> Result<()> {
<mrow><mi>f</mi><mrow><mo>(</mo><mi>x</mi> <mo>)</mo></mrow></mrow>
<mi>d</mi><mi>x</mi>
</math>";
test("hu", "SimpleSpeak", expr, "integrál alatta a valós számok halmaza; f x d x")?;
test("hu", "SimpleSpeak", expr, "integrált alatta a valós számok halmaza; f x d x")?;
return Ok(());

}
Expand All @@ -246,7 +246,7 @@ fn integral() -> Result<()> {
<mrow><mi>f</mi><mrow><mo>(</mo><mi>x</mi> <mo>)</mo></mrow></mrow>
<mi>d</mi><mi>x</mi>
</math>";
test("hu", "SimpleSpeak", expr, "integrál f x d x")?;
test("hu", "SimpleSpeak", expr, "integrált f x d x")?;
return Ok(());

}
22 changes: 11 additions & 11 deletions tests/Languages/hu/alphabets.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ fn special_alphabet_chars() -> Result<()> {
let expr = "<math> <mi>ℍ</mi><mo>,</mo><mi>ℿ</mi></math>";
test("hu", "SimpleSpeak", expr, "dupla leütésű nagy h, vessző; dupla leütésű nagy pí")?;
let expr = "<math> <mi>ℐ</mi><mo>,</mo><mi>ℳ</mi></math>";
test("hu", "SimpleSpeak", expr, "script nagy i vessző, script nagy m")?;
test("hu", "SimpleSpeak", expr, "alsó index nagy i, vessző, alsó index nagy m")?;
return Ok(());

}
Expand All @@ -37,7 +37,7 @@ fn greek() -> Result<()> {
#[test]
fn cap_cyrillic() -> Result<()> {
let expr = "<math> <mi>А</mi><mo>,</mo><mi>Я</mi></math>";
test("hu", "SimpleSpeak", expr, "nagybetű а vessző, nagybetű ya")?;
test("hu", "SimpleSpeak", expr, "nagy а vessző, nagy ciril ya")?;
return Ok(());

}
Expand Down Expand Up @@ -120,14 +120,14 @@ fn double_struck() -> Result<()> {
#[test]
fn script() -> Result<()> {
let expr = "<math> <mi>𝒜</mi><mo>,</mo><mi>𝒵</mi></math>";
test("hu", "SimpleSpeak", expr, "script nagy a vessző, script nagy z")?;
test("hu", "SimpleSpeak", expr, "alsó index nagy a, vessző, alsó index nagy z")?;
let expr = "<math> <mi>𝒶</mi><mo>,</mo><mi>𝓏</mi></math>";
test("hu", "SimpleSpeak", expr, "script a vessző, script z")?;
test("hu", "SimpleSpeak", expr, "alsó index a vessző, alsó index z")?;
// MathType private space versions
let expr = "<math> <mi></mi><mo>,</mo><mi></mi></math>";
test("hu", "SimpleSpeak", expr, "script nagy a vessző, script nagy z")?;
test("hu", "SimpleSpeak", expr, "alsó index nagy a, vessző, alsó index nagy z")?;
let expr = "<math> <mi></mi><mo>,</mo><mi></mi></math>";
test("hu", "SimpleSpeak", expr, "script a vessző, script z")?;
test("hu", "SimpleSpeak", expr, "alsó index a vessző, alsó index z")?;
return Ok(());

}
Expand All @@ -136,14 +136,14 @@ fn script() -> Result<()> {
#[test]
fn bold_script() -> Result<()> {
let expr = "<math> <mi>𝓐</mi><mo>,</mo><mi>𝓩</mi></math>";
test("hu", "SimpleSpeak", expr, "script félkövér nagy a, vessző; script félkövér nagy z")?;
test("hu", "SimpleSpeak", expr, "alsó index félkövér nagy a, vessző; alsó index félkövér nagy z")?;
let expr = "<math> <mi>𝓪</mi><mo>,</mo><mi>𝔃</mi></math>";
test("hu", "SimpleSpeak", expr, "script félkövér a, vessző, script félkövér z")?;
test("hu", "SimpleSpeak", expr, "alsó index félkövér a, vessző; alsó index félkövér z")?;
// MathType private space versions
let expr = "<math> <mi></mi><mo>,</mo><mi></mi></math>";
test("hu", "SimpleSpeak", expr, "script félkövér nagy a, vessző; script félkövér nagy z")?;
test("hu", "SimpleSpeak", expr, "alsó index félkövér nagy a, vessző; alsó index félkövér nagy z")?;
let expr = "<math> <mi></mi><mo>,</mo><mi></mi></math>";
test("hu", "SimpleSpeak", expr, "script félkövér a, vessző, script félkövér z")?;
test("hu", "SimpleSpeak", expr, "alsó index félkövér a, vessző; alsó index félkövér z")?;
return Ok(());

}
Expand Down Expand Up @@ -434,7 +434,7 @@ fn enclosed_numbers() -> Result<()> {
let expr = "<math> <mi>①</mi><mo>,</mo><mi>⑨</mi></math>";
test("hu", "SimpleSpeak", expr, "bekarikázott 1 vessző, bekarikázott 9")?;
let expr = "<math> <mi>❶</mi><mo>,</mo><mi>㊿</mi></math>";
test("hu", "SimpleSpeak", expr, "fekete bekarikázott egy, vessző; bekarikázott szám ötven")?;
test("hu", "SimpleSpeak", expr, "fekete bekarikázott egy, vessző; bekarikázott ötvenes szám")?;
let expr = "<math> <mi>⑴</mi><mo>,</mo><mi>⑼</mi></math>";
test("hu", "SimpleSpeak", expr, "zárójeles 1 vessző, zárójeles 9")?;
let expr = "<math> <mi>⒈</mi><mo>,</mo><mi>⒐</mi></math>";
Expand Down
56 changes: 41 additions & 15 deletions tests/Languages/hu/intent.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,40 +7,66 @@ use anyhow::Result;
// AI generated
#[test]
fn silent_intent() -> Result<()> {
let expr = "<math> <mrow intent='testing:silent($arg1, $arg2)'><mn arg='arg1'>2</mn> <mi arg='arg2'>x</mi></mrow> </math>";
let expr = "<math> <mrow intent='teszteljük:silent($arg1, $arg2)'><mn arg='arg1'>2</mn> <mi arg='arg2'>x</mi></mrow> </math>";
test("hu", "SimpleSpeak", expr, "2 x")?;
test("hu", "LiteralSpeak", expr, "2 x")?;
return Ok(());

}

#[test]
fn silent_intent_underscore() -> Result<()> {
let expr = "<math>
<msup intent='_($H,$n)'>
<mi arg='H' mathvariant='normal'>H</mi>
<mn arg='n'>2</mn>
</msup></math>";
test("hu", "SimpleSpeak", expr, "nagy h vessző, 2")?;
test("hu", "ClearSpeak", expr, "nagy h vessző, 2")?;
return Ok(());

}

#[test]
fn intent_prob_x() -> Result<()> {
//init_logger();
let expr = "<math>
<msup intent='$op($arg)'>
<mi arg='arg'>x</mi>
<mi arg='op' intent='valószínűség' mathvariant='normal'>P</mi>
</msup></math>";
test("hu", "ClearSpeak", expr, "valószínűség x")?;
return Ok(());

}

// AI generated
#[test]
fn prefix_intent() -> Result<()> {
let expr = r#"<math><msup intent='testing:prefix($x)'> <mi arg='x'>x</mi> <mi>T</mi> </msup> </math>"#;
test("hu", "SimpleSpeak", expr, "testing x")?;
let expr = r#"<math><msup intent='tesztelés:prefix($x)'> <mi arg='x'>x</mi> <mi>T</mi> </msup> </math>"#;
test("hu", "SimpleSpeak", expr, "tesztelés x")?;
return Ok(());

}

// AI generated
#[test]
fn postfix_intent() -> Result<()> {
let expr = r#"<math><msup intent='testing:postfix($x)'> <mi arg='x'>x</mi> <mi>T</mi> </msup> </math>"#;
test("hu", "SimpleSpeak", expr, "x testing")?;
let expr = r#"<math><msup intent='tesztelése:postfix($x)'> <mi arg='x'>x</mi> <mi>T</mi> </msup> </math>"#;
test("hu", "SimpleSpeak", expr, "x tesztelése")?;
return Ok(());

}

// AI generated
#[test]
fn infix_intent() -> Result<()> {
let expr = r#"<math><mrow intent='testing:infix($x, $y, $z, 2)'>
let expr = r#"<math><mrow intent='tesztelés:infix($x, $y, $z, 2)'>
<mi arg='x'>x</mi>
<mi arg='y'>y</mi>
<mi arg='z'>z</mi>
</mrow> </math>"#;
test("hu", "SimpleSpeak", expr, "x testing y testing z testing 2")?;
test("hu", "SimpleSpeak", expr, "x tesztelés y tesztelés z tesztelés 2")?;
return Ok(());

}
Expand All @@ -49,7 +75,7 @@ fn infix_intent() -> Result<()> {
#[test]
fn infix_intent_no_args() -> Result<()> {
// this is illegal intent, so it is just an mrow with one child
let expr = r#"<math><mrow intent='testing:infix()'>
let expr = r#"<math><mrow intent='teszteljük:infix()'>
<mi arg='x'>x</mi>
</mrow> </math>"#;
test("hu", "SimpleSpeak", expr, "x")?;
Expand All @@ -60,24 +86,24 @@ fn infix_intent_no_args() -> Result<()> {
// AI generated
#[test]
fn infix_intent_one_arg() -> Result<()> {
let expr = r#"<math><mrow intent='testing:infix($x)'>
let expr = r#"<math><mrow intent='teszteljük:infix($x)'>
<mi arg='x'>x</mi>
</mrow> </math>"#;
// Note: we say the intent name because there are infix plus/minus with a single arg due to continued rows or combined columns
test("hu", "SimpleSpeak", expr, "testing x")?;
test("hu", "SimpleSpeak", expr, "teszteljük x")?;
return Ok(());

}

// AI generated
#[test]
fn function_intent() -> Result<()> {
let expr = r#"<math><mrow intent='testing:function($x, $y, $z, 2)'>
let expr = r#"<math><mrow intent='teszteljük:function($x, $y, $z, 2)'>
<mi arg='x'>x</mi>
<mi arg='y'>y</mi>
<mi arg='z'>z</mi>
</mrow> </math>"#;
test("hu", "SimpleSpeak", expr, "testing x vessző, y vessző, z vessző, 2")?;
test("hu", "SimpleSpeak", expr, "teszteljük x vessző, y vessző, z vessző, 2")?;
return Ok(());

}
Expand All @@ -86,7 +112,7 @@ fn function_intent() -> Result<()> {
#[test]
fn function_no_args_intent() -> Result<()> {
// this is illegal intent, so it is just an mrow with one child
let expr = r#"<math><mrow intent='testing:function()'>
let expr = r#"<math><mrow intent='teszteljük:function()'>
<mi arg='x'>x</mi>
</mrow> </math>"#;
test("hu", "SimpleSpeak", expr, "x")?;
Expand All @@ -97,10 +123,10 @@ fn function_no_args_intent() -> Result<()> {
// AI generated
#[test]
fn function_one_arg_intent() -> Result<()> {
let expr = r#"<math><mrow intent='testing:function($x)'>
let expr = r#"<math><mrow intent='teszteljük:function($x)'>
<mi arg='x'>x</mi>
</mrow> </math>"#;
test("hu", "SimpleSpeak", expr, "testing x")?;
test("hu", "SimpleSpeak", expr, "teszteljük x")?;
return Ok(());

}
Expand Down
Loading
Loading