Skip to content

Releases: daisy/MathCATForPython

Development Build (using version 0.7.8-alpha)

Choose a tag to compare

@github-actions github-actions released this 22 Oct 23:19

Commits

V0.7.7

Choose a tag to compare

@github-actions github-actions released this 21 Oct 22:09

Changes since V0.7.5

User-facing highlights

Area Since 0.7.5
NVDA addon Single universal addon with both 32- and 64-bit binaries; new logo with hi-DPI rendering, dark-mode contrast pill, and rules-engine version label; last tested on NVDA 2026.2
Languages New: Greek, French, Hungarian, Polish, Russian; improvements German, Norwegian, Swedish, Traditional Chinese; translated navigation rules; column/row separator announcements
Braille New: Russian, French braille; major UEB BANA/ICEB updates; Nemeth 2022-ish fixes; Nemeth ⋄ fix; unicode ranges; BrailleCode refactor
Content Augmented matrices; chemistry (atomic-number scoring, arc-like symbols); multi-line script positions; currency/mtext cleanup; SSML fix; uptack → “perpendicular”
Packaging Minified Rules-minimized.zip; unified Rust rules packaging for CI, include-zip, and releases
Quality Fuzzing; better errors; dual no-unsafe CI track; CI on all branches and PRs

Details

NVDA addon (MathCATForPython)

  • Single addon build — one .nvda-addon ships both libmathcat_py_x86.pyd and libmathcat_py_x64.pyd; a bitness-aware loader picks the correct binary at runtime (#108)
  • Preferences dialog — new MathCAT logo artwork; sharp hi-DPI rendering via BitmapBundle; light rounded pill behind the logo on dark backgrounds; MathCAT rules-engine version shown below the logo (#109)
  • Compatibility — addon_lastTestedNVDAVersion updated to 2026.2
  • CI / release workflow — automatic builds and pre-releases on all branches (not just main); per-branch release tags; consolidated build-addon job; l10n sync remains main-only and no longer blocks builds on feature/release branches

Languages & speech

  • French (fr) — new
  • Greek (el) — new
  • Hungarian (hu) — new
  • Polish (pl) — new
  • Russian (ru) — new; speech changes merged (#689)
  • Norwegian (nb) — speech + navigation enhancements; navigation zoom no longer says “in” for prefix/silent intents (e.g. “b” instead of “in b” for -b)
  • Swedish (sv) — translation update (#682); same navigation zoom fix as Norwegian
  • German (de) — digit rules, units, and other speech fixes; set grammar; unit plurals and definitions; absolute-value ending; integral/logical symbols; “ray” → “Strahl”; “ruthe” → “Rute”; inverse grammar fixes
  • Traditional Chinese (zh-tw) — navigation / related rule updates; translation refresh from English (2026-06-15 baseline, #618)
  • English — core concept names (#381); principal Log vs log; identity / augmented matrices; black circled Latin letters; circled-number support; unit-definition cleanups
  • Navigation rules — initial multi-language translation of navigation command names
  • Cross-language — column and row separator announcements in matrices/tables (#679); multi-line script positions (mtable or nested munder/mover) separated by commas; uptack (⊥) speaks as “perpendicular” (#330); non-terse square root speech restored (#668); lg recognized as ASCIIMath function; better speech for missing/parse-error characters
  • Intent — inference tweaks; richer definitions.yaml format with | alternatives; intents aligned to core concepts with tests

Braille

  • Russian — new
  • French braille — new braille code with rules, unicode tables, and chemistry tests (initial release; some open questions remain)
  • Nemeth — 2022-oriented updates (ellipses, multipurpose between scripts, currency, typeform prefs cleanup, bugfixes); fixed braille for ⋄ (diamond operator, #703)
  • UEB — updated to latest BANA/ICEB guidance:
    • Grade-1 indicator rules revised; new G1 BANA/GTM mode preference
    • Expanded grade-2 contractions; fixed be / con / dis contractions at word starts
    • mtable row-start and row-terminator handling for linear braille (some rules provisional, pending ICEB feedback)
    • New accented-letter patterns (e.g. Ñ) and Hebrew alphabet indicator
    • Narrowed overly broad pseudo-script rule (also cleaned up in other braille codes)
  • Unicode tables — collapse to ranges + range fixups
  • Refactor — BrailleCode trait + registry
  • Table-related braille/rules work
  • Remove incomplete ASCIIMath-fi packaging that broke builds

Canonicalization, chemistry, robustness

  • Chemistry — mmultiscripts/scripts merge, atomic-number scoring and lookup table, chem-element intent/heuristics, chem test fixes; prescripts matching atomic number boost chemistry detection; primes on chem symbols (e.g. R') no longer rejected
  • Arc-like symbols — merge under restricted conditions (#698); arc look-alike chars fixed after canonicalization change
  • Bad mmultiscripts / empty bases / data-split cleanup
  • Currency symbols split out of mtext / mi / mn; less aggressive ? fill-in
  • Empty <mi> / degree edge cases; mtext-as-number → mn where appropriate
  • Stronger panic/error reporting (tests + containers)
  • SSML — stopped incorrectly escaping SSML (#585)

Internals

  • Rust edition 2024; lazy_static → LazyLock; API cleanups (AsRef<str>, etc.)
  • anyhow instead of error-chain
  • Optional no-unsafe via sxd-document-no-unsafe / sxd-xpath-no-unsafe (default = classic mode)
  • Rules packaging — unified Rust package-rules for CI, include-zip, and release zips; Rules-minimized.zip (flow-style YAML) for smaller downloads
  • CI — build/test/clippy for default and no-unsafe; fuzz both configs; CI on all branches and PRs; Python tooling CI; coverage; pre-release fixes
  • cargo-fuzz harness, dictionary, corpus cache, regression helpers
  • audit-translations and related Python/uv tooling; new --exclude option with tests
  • Parallel tests — serialized rules unzip/YAML reads to avoid races

Docs

  • README / product-page copy; AT notes (JAWS, Orca, Kurzweil, etc.)
  • User guides / translators’ guide work; example HTML for translator testing
  • New logo with hi-DPI rendering, dark-mode contrast pill on many pages.
  • User guide and translator’s guide revisions; updated acknowledgements; MathCAGT demo link in developer docs

0.7.6 beta 9

Choose a tag to compare

@github-actions github-actions released this 07 Aug 20:56

User-facing highlights

Area Since 0.7.5
Languages New: Greek, French, Hungarian, Polish, Russian; Improvements German, Norwegian, Traditional Chinease
Braille New: Russian; Nemeth 2022-ish fixes; unicode ranges; BrailleCode refactor
Content Augmented matrices; chemistry; currency/mtext cleanup; SSML fix
Quality Fuzzing; better errors; dual no-unsafe CI track

Details

Languages & speech

  • Polish (pl) — new
  • French (fr) — new
  • Greek (el) — new
  • Hungarian (hu) — new
  • Russian (ru) — new
  • Norwegian (nb) — speech + navigation enhancements
  • German (de) — digit rules, units, other speech fixes
  • Traditional Chinese (zn-tw) — navigation / related rule updates
  • English — core concept names (#381); principal Log vs log; identity / augmented matrices; black circled Latin letters; circled-number support; unit-definition cleanups
  • Intent — inference tweaks

Braille

  • Russian — new
  • Nemeth — 2022-oriented updates (ellipses, multipurpose between scripts, currency, typeform prefs cleanup, bugfixes)
  • Unicode tables — collapse to ranges + range fixups
  • Refactor — BrailleCode trait + registry
  • Table-related braille/rules work
  • Remove incomplete ASCIIMath-fi packaging that broke builds

Canonicalization, chemistry, robustness

  • Chemistry — mmultiscripts/scripts merge, atomic-number scoring, chem-element intent/heuristics, chem test fixes
  • Bad mmultiscripts / empty bases / data-split cleanup
  • Currency symbols split out of mtext / mi / mn; less aggressive ? fill-in
  • Empty <mi> / degree edge cases; mtext-as-number → mn where appropriate
  • Stronger panic/error reporting (tests + containers)
  • SSML — stopped incorrectly escaping SSML (#585)

Internals

  • Rust edition 2024; lazy_static → LazyLock; API cleanups (AsRef<str>, etc.)
  • anyhow instead of error-chain
  • Optional no-unsafe via sxd-document-no-unsafe / sxd-xpath-no-unsafe (default = classic mode)
  • CI — build/test/clippy for default and no-unsafe; fuzz both configs; CI on all branches; Python tooling CI; coverage; pre-release fixes
  • cargo-fuzz harness, dictionary, corpus cache, regression helpers
  • audit-translations and related Python/uv tooling
  • AGENTS.md, CODEOWNERS, CLI / mathml2text path
  • Dependency bumps; BrailleDocs publish exclude

Docs

  • README / product-page copy; AT notes (JAWS, Orca, Kurzweil, etc.)
  • User guides / translators’ guide work; example HTML for translator testing

V0.7.5

V0.7.5 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 17 Nov 22:05

Bugs Fixed

  • If MathML is directly embedded inside of a MathML leaf element, it will be spoken well.
  • Improved Chemistry so that if the intent property :chemical-formula is used, it is inherited and overrides heuristics to determine if something is a chemical formula. For example, "A=B" will now speak "=" as "double bond".
  • Fix bug in German translation for division involving units (=> "pro")
  • Fix bug in MathCAT dialog that prevented proper selection of Norwegian
  • For ASCIIMath, added translations for chars with umlauts and also for ß (goes to "ss" because there is no defined encoding for it)
  • Added literal speech for "‼" and "/" to English.

API Additions

  • Added calls for GetSupportedLanguages, GetSupportedSpeechStyles, and GetSupportedBrailleCodes.

V0.7.4-rc.1

V0.7.4-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 17 Nov 06:52

Bugs Fixed

  • If MathML is directly embedded inside of a MathML leaf element, it will be spoken well.
  • Improved Chemistry so that if the intent property :chemical-formula is used, it is inherited and overrides hueristics to determine if something is a chemical formula. For example, "A=B" will now speak "=" as "double bond".
  • Fix bug in German translation for division involving units (=> "pro")
  • Fix bug in MathCAT dialog that prevented proper selection of Norwegian
  • For ASCIIMath, added translations for chars with umlauts and also for ß (goes to "ss" because there is no defined encoding for it)
  • Added literal speech for "‼" and "/" to English.

API Additions

  • Added calls for GetSupportedLanguages, GetSupportedSpeechStyles, and GetSupportedBrailleCodes.

V0.7.3

Choose a tag to compare

@github-actions github-actions released this 03 Oct 12:40

No real changes.

The previous build was rejected because buildVars.py used "v" in the version number. The version number is updated here, but otherwise, there are no changes from 0.7.2.

V0.7.2

Choose a tag to compare

@github-actions github-actions released this 26 Sep 05:46
  • Added German translation. There is still more work to do on this, but I'm told it is usable.
  • Added Norwegian translation
  • Improved reading of "neuter" units
  • Changed some character wording ("if and only if", "implies", "triangle")
  • Fix problems with the zip files and regional variants. This should allow en-gb and zh-tw to be available.
  • Fixed bugs in navigating in character mode and simple mode.
  • Changed the names of some characters to be more semantic (e.g., "long double left right arrow" is not "if and only if").
  • Add some "literal" (not semantic) names for characters for LiteralSpeak and navigation.
  • Fixed some bugs dealing with "intent"
  • Fix a bug with generating id's that could cause a crash once every 36^4 times
  • Add another heuristic to prevent something from being a potential function (when the potential function name appears within the argument)
  • Fixed reading of a degree symbol followed by "F" or "C".
  • Corrected the rule for what is allowed for "intent"
  • Improved the inference rules for units (supports "mi" if it is marked as "normal")
  • Fixed a navigation bug with log, ln, and lg
  • Improved error messages -- these should aid in reporting problems in speech and navigation
  • Improved speech for fractions that involve units ("meters per second")
  • Many improvements to the recognition of Chemistry
  • Fixed a Nemeth bug where a script end and baseline indicator were emitted when neither should have been present.
  • Added varepsilon character to UEB
  • Fixed off-by-one error when computing what to highlight in braille.
  • Add definitions for "ⅆ", "ⅇ", "ⅈ" to braille codes

MathCAT 0.6.10 (Build for NVDA 2025.1)

Pre-release

Choose a tag to compare

@github-actions github-actions released this 16 Jun 23:36

Main change is to make this to work with NVDA 2025.1

The zip library version that MathCAT users was withdrawn and this is built on a newer version of zip.

MathCAT 0.6.9 (Build for NVDA 2025.1)

Choose a tag to compare

@github-actions github-actions released this 23 Apr 04:08

Changes since last release

  • Update manifest to indicate compatibility with 2025.1
  • Fix unhandled exception when opening up a new user preference file
  • Strip '_' and '-' from unmatched intent names (and literals). For example "my-function" should be "my function".
  • Add rule for "x check" (inverted hat)
  • Add rule for repeating decimals for 'en'. This only handles the line over the repeating part, not other notations.

MathCAT 0.6.8 (Build for NVDA 2024.4)

Choose a tag to compare

@github-actions github-actions released this 04 Mar 07:17

MathCAT Update Log

Note: this works with an early March, 2025 NVDA alpha build, but there is no guarantee it will work with 2025.1.

Version 0.6.8

Lots of changes because it has been a while since the last official release. These are the improvements since 0.5.6 (sorry, I didn't make a clean up

Languages and braille systems currently supported:

  • Languages: Chinese (Taiwan), English, Finnish, Indonesian, Spannish, Swedish, Vietnamese
  • Braille: CMU (Portuguese, Spanish), Finnish AsciiMath, LaTeX (as used in German braille), Nemeth, Swedish, UEB, Vietnamese

Speech

  • Added "LiteralSpeak" style that does not infer what the meaning of the math and therefore, how that meaning spoken.
  • Added more cases where invisible times is spoken (before roots)
  • Added ability for authors to insert pauses (English only at the moment)
  • Added a pause before row/equation/line labels
  • Added inference for cross-product and dot-product
  • Added inference for div, grad, and curl
  • Added special speech for zero, identity, and diagonal matrices in English
  • Be more restrictive when inferring a table
  • Add speech for coordinates ("the point at 1 comma 2")
  • Added pauses for a ","
  • Added an experimental :pause-long, :pause-medium, :pause-short for intent
  • Added an 'xlong' pause
  • Increased the meaning of short/medium/long pauses from 150ms/300ms/600ms to 200ms/400ms/800ms. As always, these are scaled to the speech rate.
  • In MathML 4, mlabedtr is deprecated. A workaround is to use the intent property :equation-label on an mtd and this is now supported
  • Added speech for units (e.g., "km", "in") -- won't work for single letter units such as "m" and "s" unless marked as a unit
  • Terse mode now says "of" for functions except for trig/log functions. It was a little too terse before.

Navigation

  • Added "Speech" to copy menu when navigating so that you can copy out the text used to speak the focus point in the expression being explored.
  • Substantial rewrite of the navigation rules so that follow the inferred meaning. For example, if MathCAT says "absolute value of x" and you "zoom in", then you move to the "x", not to a vertical bar. As another example, if MathCAT determines that a table consists of rows of equations, navigation won't concatenate the columns so that the table acts like there is only one column.
  • "Speak Overview" didn't do anything (fixed). Overviews remain under-developed.

Braille

  • Added preferences so that Nemeth users can remap typeforms (e.g, map BlackBoard Bold to a different character).
  • Changed Blackboard typeform indicator to reuse italic indicator instead of reusing the script indicator. By changing the Nemeth typeform values in NVDA's addon subdirectory addons\MathCAT\globalPlugins\MathCAT\Rulesprefs.yaml or adding it to %AppData%\MathCAT\prefs.yaml`, you can restore the old mapping.

Other

  • Fixed a bug with double-struck numbers for Nemeth.
  • Several fixes for recognizing chemistry.

Fixes

  • Fixed (I hope) a bug in espeak that caused the speech to get slower and slower
  • Forgot to implement relative slowdown when navigating -- fixed
  • Fixed sans-serif indicator for Nemeth braille.
  • Fixed a bug where empty cells in a table that is piecewise, m:system-of-equations or lines were spoken.
  • Fixed bug where open/closed intervals were inferred when brackets/parens were nested (can't be an interval).