Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
0e9dbca
Refine matrix rule handling by adding support for augmented matrices;…
moritz-gross May 31, 2026
9ba3b3d
remove logging statement
NSoiffer May 31, 2026
9dc9d89
removed uneeded eprintlin!()
NSoiffer Jun 1, 2026
7044d40
Alternative fix to PR #540.
NSoiffer Jun 1, 2026
cec6805
Merge branch 'main' of https://github.com/daisy/MathCAT
NSoiffer Jun 1, 2026
a8f58d1
Merge branch 'ru'
NSoiffer Jun 1, 2026
278dcf5
Add Russian translation
NSoiffer Jun 1, 2026
4740065
Fix #585 -- SSML was being escaped.
NSoiffer Jun 2, 2026
63a688b
bump beta number
NSoiffer Jun 3, 2026
f595f8d
The range for MATHEMATICAL SANS-SERIF DIGITs had MATHEMATICAL MONOSPA…
NSoiffer Jun 3, 2026
cf0fb14
comment out some debug statements
NSoiffer Jun 3, 2026
0c2c668
Add 02DA (˚) to list of circle-like chars -- I thought I had done thi…
NSoiffer Jun 3, 2026
dec778f
Add source language option to translation audit tool
moritz-gross Jun 5, 2026
7ee775a
fix ruff
moritz-gross Jun 5, 2026
d86d7e5
fix ruff
moritz-gross Jun 5, 2026
454d0a9
Merge remote-tracking branch 'origin/audit-tool-compare-any-language'…
moritz-gross Jun 5, 2026
e0180a3
fix ruff
moritz-gross Jun 5, 2026
cd48925
Core concept names additions and tests -- issue 381 (#592)
ttpyorre Jun 8, 2026
80438d6
fix clippy warnings
NSoiffer Jun 8, 2026
78dfa58
Merge pull request #593 from moritz-gross/audit-tool-compare-any-lang…
moritz-gross Jun 8, 2026
f3796a9
use "ruamel.yaml>=0.19.1" in uv.lock and pyproject.toml
moritz-gross Jun 8, 2026
6f95dad
Merge pull request #595 from moritz-gross/fix/update-ruamal.yaml-version
moritz-gross Jun 8, 2026
fc0a327
handle canonicalize failure in containerized environments (#574)
venkatesh6114 Jun 11, 2026
6cfd4a1
add 1 week dependency cooldown for uv (#599)
moritz-gross Jun 12, 2026
dc9e535
fix rules for digits in german (#596)
moritz-gross Jun 12, 2026
fc4bf93
update navigation rules for traditional chinese (#588)
hjy1210 Jun 12, 2026
939be4a
Internally in definitions.yaml, MathCAT uses "nofix", but that's not
Jun 12, 2026
282ff43
Merge branch 'main' of https://github.com/daisy/MathCAT
Jun 12, 2026
6dd4f6c
don't say "indexed by", say "sub"
Jun 12, 2026
82a1cb4
add some terse and verbose forms of speech
Jun 13, 2026
33b88ec
fix typo
Jun 13, 2026
d96d6cd
Added an html file with all the test exprs so that translators have e…
NSoiffer Jun 14, 2026
12bcca9
Fix remaining erros after `definitions.yaml` was updated -- needed to…
NSoiffer Jun 14, 2026
2769905
fix clippy warning
NSoiffer Jun 14, 2026
7cd9d01
minor cleanup: remove ASCIIMath-fi reference
NSoiffer Jun 14, 2026
8ed33a1
Refactor braille.rs to a BrailleCode trait + registry
NSoiffer Jun 16, 2026
09c161a
improved counting for (likey) 8 bit codes when figuring out braille p…
NSoiffer Jun 16, 2026
1d6896f
make sure this is part of repo
NSoiffer Jun 22, 2026
49a23a8
add BrailleDocs to repo (stop ignoring)
NSoiffer Jun 22, 2026
8d0ae2c
updated data, does not include ASCII letters/digits
NSoiffer Jun 22, 2026
0728f54
First version of Russian Braille
Kostenkov-2021 Jun 1, 2026
8dbff73
typo in example
NSoiffer Jun 1, 2026
6c166d7
Russian Braille fixes
Kostenkov-2021 Jun 3, 2026
7fb107f
Braille - Latin and Greek letters fixes
Kostenkov-2021 Jun 3, 2026
5d8b293
Braille - Roots, powers and scripts
Kostenkov-2021 Jun 3, 2026
cfba39a
Update Russian Braille rules and mappings
Kostenkov-2021 Jun 3, 2026
3c84414
Add Russian language to docs
Kostenkov-2021 Jun 11, 2026
15b35ec
Refactor Russian function braille mapping
Kostenkov-2021 Jun 12, 2026
162af7d
Refine Russian wording in translators guide
Kostenkov-2021 Jun 24, 2026
c2c48a6
Merge branch 'ru' of https://github.com/Kostenkov-2021/MathCAT into ru
Kostenkov-2021 Jun 25, 2026
db01386
Add alphabet indicators in russian_cleanup
Kostenkov-2021 Jun 25, 2026
8b4331d
Russian braille: add GOST symbols and decimals
Kostenkov-2021 Jun 25, 2026
29a7588
Add vector/bar/arc mover rules and tests
Kostenkov-2021 Jun 25, 2026
1f5eaad
Add Russian braille math functions and limits
Kostenkov-2021 Jun 25, 2026
103b3f0
Support system left brace in Russian braille
Kostenkov-2021 Jun 25, 2026
847257a
Add Russian chemistry braille rules and tests
Kostenkov-2021 Jun 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ PythonScripts/encrypt.py
PythonScripts/intent-coverage.py
PythonScripts/PythonScripts.zip
PythonScripts/google-defs.yaml
BrailleDocs

src/errors.rs
src/pattern.pest
Expand All @@ -57,4 +56,4 @@ Rules/*/*/*.zip
# local caches when building Jekyll
docs/_site
docs/.jekyll-cache
docs/Gemfile.lock
docs/Gemfile.lock
Binary file not shown.
Binary file added BrailleDocs/BrailleMathCodes Repository.xlsx
Binary file not shown.
Binary file added BrailleDocs/CMU-changes-en.docx
Binary file not shown.
Binary file added BrailleDocs/CMU-changes.docx
Binary file not shown.
Binary file added BrailleDocs/CMU-chemistry(en).pdf
Binary file not shown.
Binary file added BrailleDocs/CMU-chemistry(es).pdf
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
281 changes: 281 additions & 0 deletions BrailleDocs/EuroBraille-abbrevs-Mathlib.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,281 @@
%
% LaTeX- Vereinfachungen / U.Nitsch 1994
% ----------------------------------------
% Liste aller Kommandos
% -----------------------
% Kommando anstelle von ... Bedeutung
%
% <= \le kleiner gleich
% << \ll viel kleiner
% >= \ge groesser gleich
% >> \gg viel groesser
% ~a ... \alpha ... kleine griechische Buchstaben
% ~A ... \Alpha ... grosse griechische Buchstaben
% \8 \infty unendlich
% \apx \approx etwa
% \be \begin{equation}
% \bea \begin{eqnarray}
% \beas \begin{eqnarray*}
% \bs \backslash Backslash
% \cd \cdots mittige Dots
% \da \downarrow einfacher Pfeil nach unten
% \dd \ddots diagonale Dots
% \Do \o kleines daenisches 'o'
% \ee \end{equation}
% \eea \end{eqnarray}
% \eeas \end{eqnarray*}
% \eqv \equiv aequivalent
% \es \emptyset leere Menge
% \ex \exists es existiert
% \f \frac Bruch
% \fa \forall fuer alle
% \fmf Rahmen um einfache Formel
% \fsf Rahmen um mehrzeilige Formel
% \inn \int\nolimits Integral nolimits
% \inl \int\limits Integral limits
% \l< \langle Winkelklammer links
% \la \leftarrow einfacher Pfeil nach links
% \ld \ldots line Dots
% \lgla \longleftarrow langer Pfeil nach links
% \lglra \longleftrightarrow langer Pfeil nach links und rechts
% \lgmt \longmapsto langer folgt-aus-Pfeil
% \lgra \longrightarrow langer Pfeil nach rechts
% \lra \leftrightarrow einfacher Pfeil nach links und rechts
% \Lra \leftrightarrow doppelter Pfeil nach links und rechts
% \lt \leadsto fuehrt-zu-Pfeil
% \mt \mapsto folgt-aus-Pfeil
% \n \not Negation
% \o+ \oplus
% \o- \ominus
% \o. \opoint
% \o/ \oslash
% \oin \oint\nolimits Kreisintegral nolimits
% \oil \oint\limits Kreisintegral limits
% \ol \overline Ueberstrich
% \ox \otimes
% \pn \prod\nolimits Produkt nolimits
% \pl \prod\limits Produkt limits
% \Pl \l kleines polnisches 'l'
% \pll \parallel parallel
% \r> \rangle Winkelklammer rechts
% \ra \rightarrow einfacher Pfeil nach rechts
% \Ra \rightarrow doppelter Pfeil nach rechts
% \s \sqrt Wurzel
% \sbs \subset Untermenge
% \sbse \subseteq Untermenge und gleich
% \sps \supset Obermenge
% \spse \supseteq Obermenge und gleich
% \sun \sum\nolimits Summe nolimits
% \sul \sum\limits Summe limits
% \tri \triangle Dreieck
% \ua \uparrow einfacher Pfeil nach unten
% \uda \updownarrow einfacher Pfeil nach unten und oben
% \ul \underline Unterstrich
% \vd \vdots vertikale Dots
% \x \times
%
% Noetige Umdefinitionen
% ------------------------
% Rettung der Symbole von \o und \l
%
\newsavebox{\boxA}
\sbox{\boxA}{\o}
\def\Do{\usebox{\boxA}}
\newsavebox{\boxB}
\sbox{\boxB}{\l}
\def\Pl{\usebox{\boxB}}
%
% Mathematische Umgebungen
% --------------------------
% Math- und Mathindent-Umgebung nicht weiter beachtet
%
\def\be{\begin{equation}}
\def\ee{\end{equation}}
\def\bea{\begin{eqnarray}}
\def\eea{\end{eqnarray}}
\def\beas{\begin{eqnarray*}}
\def\eeas{\end{eqnarray*}}
%
% Exponenten und Indizes
% ------------------------
% keine Vereinfachungen noetig
%
% Brueche
% ---------
\def\f{\frac}
%
% Wurzeln
% ---------
\def\s{\sqrt}
%
% Auslassungen
% --------------
\def\ld{\ldots}
\def\cd{\cdots}
\def\vd{\vdots}
\def\dd{\ddots}
%
% Griechische Buchstaben
% ------------------------
% Die verkuerzenden Schreibweisen der griech. Buchstaben sind aus der
% "Systematik der internat. Math.-schrift fuer Blinde" abgeleitet.
%
\catcode`\~=\active
\def~#1{\ifx#1a\alpha\fi
\ifx#1b\beta\fi
\ifx#1g\gamma\fi
\ifx#1d\delta\fi
\ifx#1e\epsilon\fi
\ifx#1z\zeta\fi
\ifx#1j\eta\fi
\ifx#1h\theta\fi
\ifx#1i\iota\fi
\ifx#1k\kappa\fi
\ifx#1l\lambda\fi
\ifx#1m\mu\fi
\ifx#1n\nu\fi
\ifx#1x\xi\fi
\ifx#1o o\fi
\ifx#1p\pi\fi
\ifx#1r\rho\fi
\ifx#1s\sigma\fi
\ifx#1t\tau\fi
\ifx#1u\upsilon\fi
\ifx#1f\phi\fi
\ifx#1c\chi\fi
\ifx#1y\psi\fi
\ifx#1w\omega\fi
\ifx#1A A\fi
\ifx#1B B\fi
\ifx#1G\Gamma\fi
\ifx#1D\Delta\fi
\ifx#1E E\fi
\ifx#1Z Z\fi
\ifx#1J H\fi
\ifx#1H\Theta\fi
\ifx#1I I\fi
\ifx#1K K\fi
\ifx#1L\Lambda\fi
\ifx#1M M\fi
\ifx#1N N\fi
\ifx#1X\Xi\fi
\ifx#1O O\fi
\ifx#1P\Pi\fi
\ifx#1R P\fi
\ifx#1S\Sigma\fi
\ifx#1T T\fi
\ifx#1U\Upsilon\fi
\ifx#1F\Phi\fi
\ifx#1C X\fi
\ifx#1Y\Psi\fi
\ifx#1W\Omega\fi}
%
% Zweistellige Operatoren
% -------------------------
% es wird mit dem daenischen 'o' konkurriert (wurde darum umbenannt)
%
\def\o#1{\ifx#1+\oplus\fi
\ifx#1-\ominus\fi
\ifx#1/\oslash\fi
\ifx#1.\odot\fi}
\def\ox{\otimes}
%
% Relationen
% ------------
\newsavebox{\boxC}
\sbox{\boxC}{$<$}
\catcode`\<=\active
\def<#1{\ifx#1=\le
\else\ifx#1<\ll
\else\usebox{\boxC}#1\fi\fi}
\newsavebox{\boxD}
\sbox{\boxD}{$>$}
\catcode`\>=\active
\def>#1{\ifx#1=\ge
\else\ifx#1>\gg
\else\usebox{\boxD}#1\fi\fi}
\def\n{\not}
\def\sbs{\subset}
\def\sps{\supset}
\def\sbse{\subseteq}
\def\spse{\supseteq}
\def\tri{\triangle}
\def\apx{\approx}
\def\eqv{\equiv}
\def\pll{\parallel}
%
% Pfeil- oder Zeigersymbole
% ---------------------------
% die wichtigsten Symbole wurden verkuerzt
%
\def\la{\leftarrow}
\def\ra{\rightarrow}
\def\Ra{\Rightarrow}
\def\ua{\uparrow}
\def\da{\downarrow}
\def\lra{\leftrightarrow}
\def\Lra{\leftrightarrow}
\def\uda{\updownarrow}
\def\lgla{\longleftarrow}
\def\lgra{\longrightarrow}
\def\lglra{\longleftrightarrow}
\def\mt{\mapsto}
\def\lgmt{\longmapsto}
\def\lt{\leadsto}
%
% Vermischte Symbole
% --------------------
\def\8{\infty}
\def\es{\emptyset}
\def\fa{\forall}
\def\ex{\exists}
\def\x{\times}
%
% Symbole mit unterschiedlichen Groessen und Grenzangaben
% ---------------------------------------------------------
% viele moegliche Abkuerzungen sind schon in Gebrauch
%
\def\inl{\int\limits}
\def\inn{\int\nolimits}
\def\oil{\oint\limits}
\def\oin{\oint\nolimits}
\def\pl{\prod\limits}
\def\pn{\prod\nolimits}
\def\sul{\sum\limits}
\def\sun{\sum\nolimits}
%
% Funktionen
% ------------
% keine Aenderungen empfehlenswert
%
% Begrenzer
% -----------
%
\def\l<{\langle}
\def\r>{\rangle}
\def\bs{\backslash}
%
% Diakritische Zeichen
% ----------------------
% Akzente, zu selten benoetigt
%
\def\ol{\overline}
\def\ul{\underline}
%
% Gestaltungsmittel
% -------------------
% Rahmen um Formeln, Determinanten, Matrizen
%
\def\fsf#1{\fbox{$#1$}}
\def\fmf#1{\fbox{$\begin{array}{rcl}#1\end{array}$}}
%
\def\dtm#1#2{\left|\begin{array}{#1}#2\end{array}\right|}
\def\mat#1{\left(\begin{pmatrix}#1\end{pmatrix}\right)}
\def\kla#1#2{\left\{\begin{array}{#1}#2\end{array}\right.}
%
% Anmerkung
% -----------
% Die in den Saveboxen abgelegten Symbole werden auch nach
% Schriftgroessenaenderungen in der Groesse dargestellt, die
% bei der Einspeicherung gegolten hat.
%
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added BrailleDocs/Swedish-braille(en).pdf
Binary file not shown.
Binary file added BrailleDocs/Swedish-braille(sv).pdf
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
5 changes: 5 additions & 0 deletions BrailleDocs/desktop.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[LocalizedFileNames]
B2. Signografia basica de las lenguas cooficiales espanolas V3.pdf=@B2. Signografia basica de las lenguas cooficiales espanolas V3.pdf,0
Codigo matematico unificado para Iberoamerica (en).pdf=@Codigo matematico unificado para Iberoamerica (en).pdf,0
BrailleMathCodes Repository.xlsx=@BrailleMathCodes Repository.xlsx,0
Vietnamese.Uncontracted.Braille.Update.in.MathCAT.docx=@Vietnamese.Uncontracted.Braille.Update.in.MathCAT.docx,0
Binary file not shown.
Binary file added BrailleDocs/nemeth1972-ocr.pdf
Binary file not shown.
Binary file not shown.
Binary file added BrailleDocs/notation_braille_chimie2008.pdf
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added BrailleDocs/notation_mathematique_braille2_0.pdf
Binary file not shown.
Binary file not shown.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "mathcat"
version = "0.7.6-beta.4"
version = "0.7.6-beta.5"
authors = ["Neil Soiffer <soiffer@alum.mit.edu>"]
license = "MIT"
description = "MathCAT: Math Capable Assistive Technology ('Speech and braille from MathML')"
Expand Down
19 changes: 13 additions & 6 deletions PythonScripts/audit_translations/README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# MathCAT Translation Audit Tool

This tool compares English YAML rule files with translated versions to identify translation gaps and formatting issues. It assists translators in ensuring their translations are complete, consistent, and properly formatted.
This tool compares YAML rule files from a source language with translated versions to identify translation gaps and formatting issues. It assists translators in ensuring their translations are complete, consistent, and properly formatted.

### 🔍 Detection Capabilities

The tool analyzes rule files to detect the following issues:

* **Missing Rules:** Rules present in the master English file but missing in the target translation.
* **Extra Rules:** Rules present in the translation but absent in English (flagged as potentially intentional language-specific additions).
* **Missing Rules:** Rules present in the source file but missing in the target translation.
* **Extra Rules:** Rules present in the target translation but absent in the source (flagged as potentially intentional language-specific additions).
* **Untranslated Text:** Detects text keys that still use **lowercase** formatting, indicating they haven't been verified or translated yet.
* **Rule Differences:** Structural changes (match expressions, conditions, variables, or test/replace layout) between English and the translation.
* **Rule Differences:** Structural changes (match expressions, conditions, variables, or test/replace layout) between the source and target translation.

Add `# audit-ignore` to a rule block to suppress auditing that rule.

Expand Down Expand Up @@ -57,20 +57,23 @@ The tool automatically adjusts its matching logic based on the file type:
**Syntax:**
```bash
uv run audit-translations <language> [--file <specific_file>]
uv run audit-translations <language> --source <source-language>
uv run audit-translations --list

# If running from the repo root, point uv at the project:
uv run --project PythonScripts audit-translations <language>
uv run --project PythonScripts audit-translations <language> --source <source-language>
uv run --project PythonScripts audit-translations --list
```

**Convenience Features:**
* `--list`: Displays all available languages.
* Region variants are shown as `lang-region` (e.g., `zz-aa`) based on subdirectories under `Rules/Languages/<lang>`.
* `--source`: Sets the source/reference language. Defaults to `en`.
* `--file`: Audits a single specific file instead of the whole directory.
* `--rules-dir`: Override the Rules/Languages directory path.
* `--only`: Filter issue types (comma-separated): `missing`, `untranslated`, `extra`, `diffs`, `all`.
* `--verbose`: Show detailed output including English/translated snippets for rule differences.
* `--verbose`: Show detailed output including source/target snippets for rule differences.
* **Summary Stats:** Provides a statistical summary after every run.

**Examples:**
Expand All @@ -88,19 +91,23 @@ uv run audit-translations es
# Audit German translations
uv run audit-translations de

# Compare Norwegian Bokmal against Swedish instead of English
uv run audit-translations nb --source sv

# Audit only a specific file
uv run audit-translations es --file SharedRules/default.yaml

# Audit a regional variant (merges Rules/Languages/de and Rules/Languages/de/CH)
uv run audit-translations de-CH

# Show detailed output with English/translated snippets for rule differences
# Show detailed output with source/target snippets for rule differences
uv run audit-translations es --verbose
```

**Running from the repo root (without `cd PythonScripts`):**
```bash
uv run --project PythonScripts audit-translations es
uv run --project PythonScripts audit-translations nb --source sv
uv run --project PythonScripts audit-translations --list
```

Expand Down
2 changes: 1 addition & 1 deletion PythonScripts/audit_translations/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""
MathCAT Translation Audit Tool

Compares English YAML rule files with translated versions to identify translation
Compares source YAML rule files with translated versions to identify translation
gaps and issues. This tool helps translators ensure their translations are complete
and properly formatted.

Expand Down
Loading
Loading