`arc` + space + trig name is not merged
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 1-2 天
- 新手友好度
- 45/100
- Issue 类型
- 缺陷
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- rust
- 领域
- accessibility, testing
调研方向
Start in src/canonicalize.rs at merge_arc_trig and read the existing canonicalization tests around clean_up_arc_lookalike_mrow. Run the proposed clean_up_arc_mspace case to check how the spaced MathML is canonicalized. Done means arc plus a space and trig name merges correctly while arc followed by a cosine function stays separate; the Spanish workaround in Rules/Languages/es/SharedRules/general.yaml can then be removed.
由索引模型根据 Issue 内容生成。
描述
babel (Spanish) writes \arcsen as arc\,sen, and arc\,cos gives the same in English:
<math><mi>arc</mi><mi>cos</mi><mi>x</mi></math>
<math><mi>arc</mi><mspace width="0.167em"/><mi>cos</mi><mspace width="0.167em"/><mi>x</mi></math>
- without space: arccos of x
- with space: arc of cosine x
merge_arc_trig runs while the mspace is still a sibling. Skipping whitespace before checking the next sibling should fix it. Spanish has a temporary rule for this in general.yaml (from #945), to be removed once fixed.
Proposed patch (tested: cargo test passes; adds the test clean_up_arc_mspace):
diff --git a/src/canonicalize.rs b/src/canonicalize.rs
index 00a5165b..4f34bfd8 100644
--- a/src/canonicalize.rs
+++ b/src/canonicalize.rs
@@ -1793,12 +1793,21 @@ impl CanonicalizeContext {
return None;
}
+ // skip whitespace between "arc" and the trig name (e.g., babel writes \arcsen as arc\,sen)
let following_siblings = leaf.following_siblings();
- if following_siblings.is_empty() {
- return None;
+ let mut whitespace = Vec::new();
+ let mut following_sibling = None;
+ for &child in &following_siblings {
+ let child = as_element(child);
+ let child_name = name(child);
+ if child_name == "mspace" || (child_name == "mtext" && as_text(child).trim().is_empty()) {
+ whitespace.push(child);
+ } else {
+ following_sibling = Some(child);
+ break;
+ }
}
-
- let following_sibling = as_element(following_siblings[0]);
+ let following_sibling = following_sibling?;
let following_sibling_name = name(following_sibling);
if !(following_sibling_name == "mi" || following_sibling_name == "mo" || following_sibling_name == "mtext") {
return None;
@@ -1811,6 +1820,7 @@ impl CanonicalizeContext {
let new_text = "arc".to_string() + as_str!(following_text);
set_mathml_name(leaf, "mi");
leaf.set_text(&new_text);
+ whitespace.iter().for_each(|ws| ws.remove_from_parent());
following_sibling.remove_from_parent();
return Some(leaf);
}
@@ -6207,6 +6217,14 @@ mod canonicalize_tests {
are_strs_canonically_equal_result(test_str, target_str, &[])
}
+ #[test]
+ fn clean_up_arc_mspace() -> Result<()> {
+ // babel writes \arcsen as arc\,sen
+ let test_str = "<math><mi>arc</mi><mspace width='0.167em'/><mi>cos</mi><mspace width='0.167em'/><mi>x</mi></math>";
+ let target_str = "<math><mrow data-changed='added'><mi>arccos</mi><mo data-changed='added'>⁡</mo><mi data-previous-space-width='0.167'>x</mi></mrow></math>";
+ are_strs_canonically_equal_result(test_str, target_str, &[])
+ }
+
#[test]
fn clean_up_arc_lookalike_mrow() -> Result<()> {
// Frown over two capital identifiers is rewritten to the arc operator (U+2312)
With this, the Spanish workaround in Rules/Languages/es/SharedRules/general.yaml (the three arc-trig-separado* rules) can be removed. I have that change ready too: one Spanish test changes a pause (arco tangente; → arco tangente,, now the same as arctg), and if the Spanish navigation PR is merged first, zoom_in_all_babel_arc should expect acercado al máximo; arco seno instead of …; arc.
- 主要语言
- Rust
- 星标
- 130
- 派生
- 96
- 平均合并
- 1 天 1 小时
- 30 天内合并 PR
- 84
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
daisy/MathCAT 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 82/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 88/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 68/100
维护者通常 1 天内回复
-
discussion
难度 2/5 1-3 小时 新手友好度 70/100
维护者通常 1 天内回复
-
discussion translation
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 73/100
quarto-dev/q2#1155 ·
维护者通常 1 天内回复
-
backlog priority: low ui
难度 2/5 1-3 小时 新手友好度 65/100
storytold/vectorcraft#6445 · 1 条评论 ·
维护者通常 1 天内回复
-
area: cli kind:docs priority: P3
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
tursodatabase/libsql#2312 ·
维护者通常 11 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
paritytech/trie#251 ·
维护者通常 1 天内回复