`arc` + space + trig name is not merged
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 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時間
- マージ済み PR(30日)
- 84
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
daisy/MathCAT のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
daisy/MathCAT#946 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
discussion
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
メンテナーはふだん 1 日以内に返信
-
discussion translation
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
daisy/MathCAT#675 · コメント 4 件 ·
メンテナーはふだん 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 日以内に返信
-
`NodeOwned::size_in_bytes` does not count the `ChildrenNodesOwned` heap allocation (since #216)オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
paritytech/trie#251 ·
メンテナーはふだん 1 日以内に返信