2.1.1 (2021-02-23)
Fixed
* fixed NameError when requiring only 'regexp_parser/scanner' in v2.1.0
o thanks to Jared White and Sam Ruby for the report
2.1.0 (2021-02-22)
Added
* common ancestor for all scanning/parsing/lexing errors
o Regexp::Parser::Error can now be rescued as a catch-all
o the following errors (and their many descendants) now inherit from it:
- Regexp::Expression::Conditional::TooManyBranches
- Regexp::Parser::ParserError
- Regexp::Scanner::ScannerError
- Regexp::Scanner::ValidationError
- Regexp::Syntax::SyntaxError
o it replaces ArgumentError in some rare cases
(Regexp::Parser.parse('?'))
o thanks to sandstrom for the cue
Fixed
* fixed scanning of whole-pattern recursion calls \g<0> and \g'0'
o a regression in v2.0.1 had caused them to be scanned as literals
* fixed scanning of some backreference and subexpression call edge cases
o e.g. \k<+1>, \g<x-1>
* fixed tokenization of some escapes in character sets
o ., |, {, }, (, ), ^, $, ?, +, *
o all of these correctly emitted #type :literal and #token :literal if
not escaped
o if escaped, they emitted e.g. #type :escape and #token :group_open for
[\(]
o the escaped versions now correctly emit #type :escape and #token
:literal
* fixed handling of control/metacontrol escapes in character sets
o e.g. [\cX], [\M-\C-X]
o they were misread as bunch of individual literals, escapes, and ranges
* fixed some cases where calling #dup/#clone on expressions led to shared
state