Releases: NSoiffer/MathCATForC
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
mover
andmunder
from "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 setDecimalSeparators
andBlockSeparators
. Auto
sets those preferences based on the value of theLanguage
pref. 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-es
ores-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
MathRate
andPauseFactor
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
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
MathCAT C build 32 & 64 bit -- v0.3.9
- Added Traditional Chinese translation (thanks to Hon-Jang Yang)
- Fixed bug with navigating into the base of a scripted expression that has parenthesis
- Significantly changed the way whitespace is handled. This mainly affects braille output (spaces and "omission" detection).
- Improved recognition of chemistry
- UEB braille fixes that came up from adding chemistry examples
- UEB fixes for adding auxillary parenthesis in some cases
MathCAT C build 32 & 64 bit -- v0.3.8
Braille:
- Initial implementation of CMU -- the braille code used in Spanish and Portuguese speaking countries
- Fix some UEB bugs and added some characters for UEB
- Significant improvements to Vietnamese braille
Other fixes:
- Added Spanish translation
- Improvements to Vietnamese speech
- Fixed some navigation bugs when
AutoZoomOut
is False (not the default) - Several improvements for cleaning up poor MathML code
MathCAT C build 32 & 64 bit beta 1
Updated to v0.3.6 w/updates for Vietnam braille.
Updated again on 8/24 with changes to logs with bases, Greek letters, etc.
Supports a new option UseDropNumbers for numeric fractions.
Note: the initial dll's had a bug and have been replaced.
MathCAT C build 32 & 64 bit beta 2
Updated to latest fixes for numbers and units.