Inverted CheckRuleFiles condition in SpeechRules::replace_single_char causes unicode-full.yaml to reload when CheckRuleFiles is "None"

Offen Anfängerfreundlich
#996 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
1/5
Geschätzter Aufwand
Unter einer Stunde
Anfängerfreundlichkeit
84/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
rust
Bereich
accessibility

Rechercherichtung

Lies src/speech.rs und vergleiche die Bedingung CheckRuleFiles in SpeechRules::replace_single_char mit den Prüfungen in SpeechRules::update und read_files. Ändere die Bedingung wie im Issue beschrieben und führe anschließend die relevanten Tests für das Laden von Regeldateien und das Ersetzen einzelner Zeichen aus. Fertig ist die Änderung, wenn "None" Dateizeitstempel ignoriert und "All" weiterhin Dateiänderungen erkennt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Summary

In src/speech.rs, SpeechRules::replace_single_char has an inverted equality check when computing should_ignore_file_time:

let should_ignore_file_time = pref_manager.pref_to_string("CheckRuleFiles") == "All";

Every other rule loader in src/speech.rs (such as SpeechRules::update and read_files) uses != "All":

let should_ignore_file_time = pref_manager.pref_to_string("CheckRuleFiles") != "All";
Impact
  1. When CheckRuleFiles: "None" (recommended for environments where rule files are static or loaded from in-memory archives/zip files):
    • should_ignore_file_time evaluates to false instead of true inside replace_single_char.
    • is_file_up_to_date checks the file's modification timestamp on every character lookup that falls back to unicode-full.yaml (such as Mathematical Italic characters 𝑥, 𝑎, 𝑏, 𝑐 after canonicalization).
    • In environments where rule files are backed by an in-memory filesystem or lack valid modification timestamps (returning UNIX_EPOCH), is_file_up_to_date returns false on every call, causing MathCAT to re-parse the ~6,500-entry unicode-full.yaml file on every single character lookup (~30ms per character on mobile devices, adding 200–480ms of latency per expression or navigation step).
  2. When CheckRuleFiles: "All":
    • should_ignore_file_time evaluates to true, so edits to unicode-full.yaml are ignored instead of being reloaded.
Proposed Fix

In src/speech.rs inside SpeechRules::replace_single_char, change == "All" to != "All":

-        let should_ignore_file_time = pref_manager.pref_to_string("CheckRuleFiles") == "All";
+        let should_ignore_file_time = pref_manager.pref_to_string("CheckRuleFiles") != "All";
Vorherrschende Sprache
Rust
Sterne
131
Forks
97
Ø Merge
21 Std. 45 Min.
Gemergte PRs (30 T.)
95

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus daisy/MathCAT

Alle Issues in daisy/MathCAT

Ähnliche Issues

Weitere Issues zu Rust

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.