Releases: TalkingCatSW/MathCATForC
V0.7.5
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-formulais 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.
v0.7.2
Update to 0.7.0
There were several bugs, especially in navigation in 0.7.0. This hopefully fixes them.
Changes from v0.6.10
- 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 v0.7.0
MathCAT Update Log
Coming soon...
MathCAT v0.6.8
MathCAT Update Log
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 (Portugese, 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-shortfor 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,
mlabedtris deprecated. A workaround is to use the intent property:equation-labelon anmtdand 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
- 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).
MathCAT v0.6.6
General Information
Because 0.6.3 had some bad bugs around zipping , the following list is relative to v0.5.6.
I have redone the action file so that adding more builds will be easier and faster to build since they are done in parallel. Another goal is to be able to test each build with the simple C and C++ test files, but I haven't figured out how to compile for 32 bit C/C++ on a 64-bit Windows machine. Same for the AMD build. If you wish to use those, I strongly recommend running the tests to be sure the builds are working.
As noted below, this release brings support for several new languages and braille systems. Currently supported:
- Languages: Chinese (Taiwan), English, Finnish, Indonesian, Spannish, Swedish, Vietnamese
- Braille: CMU (Portugese, Spanish), Finnish AsciiMath, LaTeX (as used in German braille), Nemeth, Swedish, UEB, Vietnamese
New Features
Speech
- Added Swedish to supported languages.
- Added Finnish to supported languages.
- MathCAT will switch the voice when reading math if a different language from the current voice was set in the preference dialog.
- Added a en-UK variant with some British ways to speak bracketing chars.
- Added English rules for div, grad, and curl (calculus)
- Added English rule for
$P(A|B)$ so that | is spoken as "given" - In terse mode, integer subscripts are spoken as "x 1" instead of "x sub 1".
- Changed the speech for ≈ from "congruent to" to "approximately equal to"
- Changed speech for the general cases of
moverandmunderfrom "modified x with y above it" to "quantity x with y above it" - Improved rule for {} so that it isn't always spoken as "set of ...". It could just be bracketing chars.
- Tweaked the speech for ∈ inside of a set so that the word "is" is dropped when part of a set -- "the set of all x is an element of ..." sounds poor.
- Improved rule for chemistry recogition for atomic numbers.
- Update to speech hint property names in the proposed MathML Core property list
- Add speech for coordinates ("the point at 1 comma 2")
Braille
- Added support for Finnish version of AsciiMath braille
- Added support for Swedish braille
- Added support for Vietnamese accents position for Vietnamese braille vowel "rhymes".
Other
- All the language and braille Rule files are zipped up per directory and unzipped on demand.
- This currently saves ~5mb when Rules.zip is unzipped, and will save even more as more languages and braille codes are added.
- If you know certain languages or braille code will definitely be used (e.g., it is the default), then the files in those directories can be manually unzipped to save a few tens of milliseconds the first time the language/braille code by that user.
- Added new preference DecimalSeparator.
- The default value is Auto, with other values being ".", ",", and "Custom". The first three values set DecimalSeparators and BlockSeparators.
- Added more Unicode chars to include both all Unicode chars marked as "Sm" and those with a mathclass (except Alphabetic and Glyph classes) in the Unicode standard.
- Add support for some (upcoming) new Unicode characters (equilibrium arrows and others) used in Chemistry into UEB and Nemeth
- Several fixes for recognizing chemistry
Fixes
- Fixed a bug in UEB where passage mode should have been used for capitals.
- Fixed a crash with UEB in certain conditions with runs of capital letters.
- Fixed bug in Navigation of tables (previously reported "Error in Navigation").
- Fixed bug moving to previous/next column in tables when at a table row level.
- Fixed bug when trying to correct bad MathML representation of chemistry inside of the base of a script
- Fixed Vietnamese braille for "/"/
- After changing how prefs work in a previous version, I forgot to change MathRate and PauseFactor to be numbers, not strings.
- Fixed bug in the braille Rules (missed change from earlier) where a third argument should have been given to say to look in the Braille definitions.yaml files and not the speech ones when looking up the value of a definition.
- Cleaned up use of definitions.yaml.
- Fixed some bugs in the MathML cleanup for "," decimal separators.
- Found a bug in braille highlighting when nothing is highlighted (maybe never happens which is why I didn't see it in practice?)
- Fixed "Describe" mode so that it works -- it is still very minimal and probably not useful yet
- Add space after math speech to work around a MS Word bug that concatenates the next character in the text onto the math.
Zipped Files, new number separator handling, added Swedish
Update to MathCAT 0.6.1.
New features
- All the language and braille Rule files are zipped up per directory and unzipped on demand.
- This currently saves ~5mb when Rules.zip is unzipped, and will save even more as more languages and braille codes are added.
- If you know certain languages or braille code will definitely be used (e.g., it is the default), then the files in those directories can be manually unzipped to save a few tens of milliseconds the first time the language/braille code by that user.
- Added new preference
DecimalSeparator.- The default value is
Auto, with other values being ".", ",", and "Custom". The first three values setDecimalSeparatorsandBlockSeparators. Autosets those preferences based on the value of theLanguagepref. For some language such as Spanish,,is used in some countries and.is used in others. In this case, it is best to set the language to also include the country code (e.g,es-esores-mx) to ensure the right value is used.
- The default value is
- Added more Unicode chars to include both all Unicode chars marked as "Sm" and those with a mathclass (except Alphabetic and Glyph classes) in the Unicode standard.
- Added Swedish to supported languages.
Fixes
- After changing how prefs work in a previous version, I forgot to change
MathRateandPauseFactorto be numbers, not strings. - Fixed bug in the braille Rules (missed change from earlier) where a third argument should have been given to say to look in the Braille
definitions.yamlfiles and not the speech ones when looking up the value of a definition. - Cleaned up use of
definitions.yaml. - Fixed some bugs in the MathML cleanup for "," decimal separators.
- Found a bug in braille highlighting when nothing is highlighted (maybe never happens which is why I didn't see it in practice?)
- Fixed "Describe" mode so that it works -- it is still very minimal and probably not useful yet
New(ish) build
- Added Windows ARM 64-bit build in last release. Awaiting feedback that it works.
Development Build
Fixes
- Fixed a bug where the language reverted to English when changing speech styles.
- Fixed a bug with navigation and braille
- Fixed some Asciimath spacing problems.
- Improved chemistry recognition
- Updated MathCAT to new BANA Nemeth chemistry spec (still only single line and special case style/font changes not handled)
- Fix a crash when non-ASCII digits (e.g., bold digits) are used in numbers
- Don't use italic indicators in braille codes when the math alphanumeric italic chars are used
- Some other smaller bug fixes that weren't reported by users
New build
- Added Windows ARM 64-bit build. Awaiting feedback that it works
V0.5.1
The build now includes headers for C and C++
New Features:
- German braille code based on LaTeX
- ASCIIMath braille code
Unlike other braille codes, these two braille codes generate ASCII chars. This was done in consultation with German braille code developers so that both 6-dot and 8-dot German braille are supported, along with the possibility that other countries braille codes can be used. This requires that braille output table be set accordingly.
Interface Changes
Adds
const char *GetNavigationBraille()
This returns the braille associated with the current navigation focus. The returned braille ignores the context in which it lives (i.e., it is brailled as if the current navigation focus is the entire expression).
Note: the existing GetBraille(nav_node_id) returns the braille for entire expression with the braille indicated by nav_node_id highlighted as per the BrailleNavHighlight preference.
Copy As...
The addition of LaTeX and ASCIIMath braille codes allows for the implementation of a "Copy As" MathML/LaTeX/ASCIIMath feature. To help support this, MathCAT has a new CopyAs preference
This is part of the NVDA Addon. The implementation is in the addon file MathCAT.py, not MathCAT. For reference, the python code used in NVDA for it is:
copy_as = "mathml" # value used even if "CopyAs" pref is invalid
text_to_copy = ""
try:
copy_as = libmathcat.GetPreference("CopyAs").lower()
except Exception as e:
log.error(f"Not able to get 'CopyAs' preference: {e}")
if copy_as == "asciimath" or copy_as == "latex":
# save the old braille code, set the new one, get the braille, then reset the code
saved_braille_code: str = libmathcat.GetPreference("BrailleCode")
libmathcat.SetPreference("BrailleCode", "LaTeX" if copy_as == "latex" else "ASCIIMath")
text_to_copy = libmathcat.GetNavigationBraille()
libmathcat.SetPreference("BrailleCode", saved_braille_code)
if copy_as == "asciimath":
copy_as = "ASCIIMath" # speaks better in at least some voices
else:
mathml = libmathcat.GetNavigationMathML()[0]
if not re.match(self._startsWithMath, mathml):
mathml = (
"<math>\n" + mathml + "</math>"
) # copy will fix up name spacing
elif self.init_mathml != "":
mathml = self.init_mathml
text_to_copy = self._wrapMathMLForClipBoard(mathml)
self._copyToClipAsMathML(text_to_copy, copy_as == "mathml")
# Translators: copy to clipboard
ui.message(_("copy as ") + copy_as)
Hopefully this gives an idea of what needs to be done in other AT.
V0.4.0
Update to MathCAT 0.4.0
Interface Changes
Adds new interface calls for navigation (see mathcat.h for more information):
const char *SetNavigationLocation(NavigationLocation location)NavigationLocation GetNavigationLocation()NavigationLocation GetNavigationLocationFromBraillePosition(uint32_t position)
where NavigationLocation is defined as:
struct NavigationLocation {
const char *id;
uint32_t offset;
};
The following interfaces are deprecated and will go away in a future release:
const char *GetNavigationMathMLId()uint32_t GetNavigationMathMLOffset()
Supported Languages/Braille Codes
Supported languages: English, Spanish, Indonesian, Vietnamese, Chinese (Traditional)
Supported braille codes: CMU (Spanish, Portuguese), Nemeth, UEB, Vietnam
MathCAT C build 32 & 64 bit -- v0.3.10
Fix bugs in Vietnamese braille and also in Speech.
Also:
- Fix whitespace bug in HTML inside of tokens
- Fix roman numeral detection