All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, using the reStructuredText format instead of Markdown.
This project adheres to Semantic Versioning starting with version 1.1.1.
1.9.0 -- 2020-04-07
- Add JSGF import resolution.
- Add new Grammar methods for getting Rule objects by name.
- Add 'grammar_name', 'rule_name' and 'wildcard_import' Import class properties.
- Add 'qualified_name' and 'fully_qualified_name' Rule class properties.
- Add missing Grammar 'import_names' property.
- Add missing Grammar 'remove_imports()' method.
- Change Grammar class to silently reject duplicate Import objects.
- Rename HiddenRule rule classes to PrivateRule instead and leave in HiddenRule aliases.
- Change Grammar.get_rule_from_name() method to validate the 'name' parameter.
- Change Grammar.remove_import() to only accept Import objects.
- Fix bug in Grammar.add_rule() that could cause RecursionErrors.
1.8.0 -- 2020-01-31
- Add 'case_sensitive' properties to Literal, Rule & Grammar classes.
- Change ChildList into a list wrapper class instead of a sub-class.
- Fix a pyparsing-related bug with the Repeat expansion class.
- Fix issues preventing serialization of expansions, rules and grammars.
1.7.1 -- 2019-07-10
- Add 'matching benchmark.py' script.
- Add a classifier for Python 3.4 in setup.py as it is a supported version.
- Rewrite Expansion.repetition_ancestor property.
- Use the setuptools.find_packages() function in setup.py instead of defining packages manually.
- Fix missing call to reset_for_new_match() in Rule.find_matching_part(). Some tests have also been added.
1.7.0 -- 2019-06-19
- Add Expansion and Rule generate() methods for generating matching strings. Thanks @embie27.
- Add unit tests for generate() methods into a new test/test_generators.py file. Thanks @embie27.
- Include the mock package in requirements.txt (test requirement).
- Fix two rule expansion parser bugs related to unary operators (+ or *).
- Keep required groupings during parsing to avoid unexpected consequences. Thanks @synesthesiam.
1.6.0 -- 2019-03-17
- Add support for JSGF alternative weights to the AlternativeSet class and the rule expansion parser.
- Add 'Expansion.matching_slice' property for getting the slice of the last speech string that matched an Expansion.
- Add 'Repeat.get_expansion_slices' method for getting matching slices of repeated rule expansions.
- Change AlternativeSet 'weights' list to use a dictionary instead.
- Change grammar class and parser to allow for optional grammar header values.
- Change input and output of the 'save_current_matches' and 'restore_current_matches' expansion functions.
- Change jsgf.ext.Dictation expansions to compile as "<DICTATION>" instead of "".
- Simplify the parser code and improve its performance.
- Use '<NULL>' instead of '<VOID>' to compile expansions that should have children but don't.
- Fix parser bug where sequences can lose tags. Thanks @synesthesiam.
- Fix parser bug with sequences and alternative sets.
1.5.1 -- 2018-10-28
- Add section in parser documentation with EBNF for the grammar parser.
- Change install instructions to use pip instead.
- Fix a few problems with the README.
- Fix missing newlines from Grammar.compile_to_file(). Thanks @daanzu.
1.5.0 -- 2018-09-11
- Add Expansion.matcher_element property.
- Add Expansion.invalidate_matcher method.
- Add Rule.find_matching_part method. Thanks @embie27.
- Add docstrings to undocumented classes and methods.
- Add Sphinx documentation project files in docs/ and use autodoc for automatic module, class, class member and function documentation.
- Add CHANGELOG.rst file and include it in the documentation.
- Make speech string matching scale to large rules/grammars.
- Make jsgf.ext.Dictation expansions match correctly in most circumstances.
- Allow rules to use optional only rule expansions.
- Update docstrings in all Python modules.
- Change internal matching method to implement for subclasses from _matches_internal to _make_matcher_element.
- Add deprecation note for the Grammar.compile_grammar method.
- Deprecate the ExpansionError and MatchError classes.
- Fix issue #12 and probably some other bugs where speech wouldn't match rules properly.
- Fix __hash__ methods for the Dictation and AlternativeSet classes.
- Remove support for matching ambiguous rule expansion because it is not worth the performance hit.
1.4.1 -- 2018-08-20
- Add ChildList list subclass for storing rule expansion children and updating parent-child relationships appropriately on list operations.
- Change Literal.text attribute into a property with some validation.
1.4.0 -- 2018-08-09
- Implement grammar, rule and expansion parsers.
- Add setters for the BaseRef name property and Expansion children property.
- Allow imported rule names to be used by NamedRuleRefs.
- Fix NamedRuleRefs for rule expansion functions and the Rule.dependencies property.
1.3.0 -- 2018-07-14
- Add methods/properties to the Rule and Grammar classes for JSGF tag support.
- Add rule resolution for NamedRuleRef class.
- Add method and property for checking expansion match values for each repetition.
- Fix various bugs with JSGF rule expansions.
1.2.3 -- 2018-06-02
- Add 'six' as a required package to support Python versions 2.x and 3.x.
- Change add_rule methods of grammar classes to silently fail when adding rules that are already in grammars.
- Fix hash implementations and __str__ methods for rule classes.
- Other minor fixes.
1.2.2 -- 2018-04-28
- Add Expansion.collect_leaves method.
- Reset match data for unmatched branches of expansion trees.
- Change Expansion leaf properties to also return RuleRefs.
- Move some Literal class properties to the Expansion superclass.
1.2.1 -- 2018-04-27
- Add calculation caching to improve matching performance.
- Add optional shallow parameter to Expansion functions like map_expansion.
- Fix bug with BaseRef/RuleRef comparison.
- Fix bug in expand_dictation_expansion function.
1.2.0 -- 2018-04-09
- Add a few methods and properties to Expansion classes.
- Add JointTreeContext class and find_expansion function.
- Add __rep__ methods to base classes for convenience.
- Fix a bug where rules with mutiple RuleRefs wouldn't match.
1.1.1 -- 2018-03-26
First tagged release and start of proper versioning. Too many changes to list here, see the changes by following the link above.