0.036_01 2014-11-04 T. R. Wyant
Correctly mark the replacement portion of s///ee as code. Prior to
this release it was parsed as though no /e were present.
Make available the number of times a given modifier is asserted
(except for the match semantics modifiers which get handled
differently). See PPIx::Regexp::Token::Modifier->asserted() and
PPIx::Regexp::Tokenizer->modifier() for details.
commit ebc3635b4d4ef31fa1914a0c2abed1baea5be5ec
Author: Tom Wyant <wyant@cpan.org>
Date: Mon Nov 3 13:48:31 2014 -0500
Correctly handle /ee
The code was treating the replacement portion of s/foo/bar(42)/ee as
literals, rather than code.
0.036 2014-01-04 T. R. Wyant
Retract the "Allow non-ASCII white space under /x" change introduced
in version 0.033. I misread perl5170delta, and implemented early.
Change to explicit character class to recognize white space under /x.
I was previously using \s, which matched too much.
Thanks to Nobuo Kumagai for finding and reporting this.
0.035 2013-11-15 T. R. Wyant
Properly handle multi-character modifiers like /ee. We now handle /eie
as being the same as /eei. Thanks to Anonymous Monk for finding
this.
Properly handle \g and \k back references that do not correspond to an
actual capture group. They are now reblessed into the unknown token,
and counted as errors. Thanks to Anonymous Monk for finding this.
Add method error() to PPIx::Regexp::Element. This should return an
error message when the element is in error -- normally when it has
been blessed into the unknown token or structure.
Add method modifier_asserted() to PPIx::Regexp::Element. This walks
the parse tree backward to determine if the given modifier is in
effect for the element.
0.034 2013-05-11 T. R. Wyant
No changes since 0.033_01
0.033_01 2013-05-05 T. R. Wyant
Correct spelling and grammar errors in POD and comments. RT #85050.
Thanks David Steinbrunner for catching these.
0.033 2013-02-22 T. R. Wyant
Allow interpolation in regex sets. It implies Perl 5.17.9 or higher.
Allow non-ASCII white space under /x. It implies Perl 5.17.9 or
higher.
0.032 2013-02-06 T. R. Wyant
Fix problems with Regex Set functionality under Perl 5.6.2. CPAN
testers RULE!
0.031 2013-01-31 T. R. Wyant
Have PPIx::Regexp::Token::Code (and offspring) become
PPIx::Regexp::Token::Unknown inside a regex set.
0.030 2013-01-22 T. R. Wyant
Add Regex Sets, which were added to Perl as an experimental feature in
5.17.8. This is experimental in Perl, therefore the parse may
change.
Ditch PPIx::Regexp::Token::GroupType method __expect_after_match() in
favor of the more general __match_setup(). This is done without
deprecation because __expect_after_match() was documeted as
package-private, but noted in the change log because it _was_
documented.
0.029 2013-01-14 T. R. Wyant
No changes from 0.028_02.
0.028_02 2012-12-31 T. R. Wyant
Add method unescaped_content() to PPIx::Regexp::Element().
Rewrite the tokenizing code in PPIx::Regexp::Token::GroupType and
offspring to use regular expressions specific to the regexp
delimiter, and escaping only that delimiter. Thanks again to
Alexandr Ciornii for finding more of these.
0.028_01 2012-12-20 T. R. Wyant
Fix mis-parse of /(\?|I)/ as a branch reset (it's really an
alternation). There may be more of these lurking. Thanks to Alexandr
Ciornii for finding this one.
Add options -files and -objectify to eg/predump.
0.028 2012-06-06 T. R. Wyant
Replace all uses of YAML::Any with YAML, since they come in the same
distro, and YAML does not suffer from deprecation warnings.
0.027 2012-05-28 T. R. Wyant
Eliminate unescaped literal "{" characters in regexps in
PPIx::Regexp::Token::Backreference and
PPIx::Regexp::Token::CharClass::Simple. These are deprecated in 5.17.0.
0.026 2012-02-24 T. R. Wyant
Add support for \F (fold case), added in 5.15.8.
0.025 2012-01-04 T. R. Wyant
Tolerate leading and trailing white space around the regular
expression. These are still round-trip safe, since the white space
is tokenized.
Make Changes file conform to CPAN::Changes, and add
xt/author/changes.t to ensure continued compliance.
0.024 2011-12-17 T. R. Wyant
Reinstate author test xt/author/manifest.t, which was clobbered
shortly before the release of 0.021_10.
0.023 2011-12-08 T. R. Wyant
Correct address of FSF in the version of the GPL distributed in
LICENSES/Copying. Thanks to Petr Pisar for picking this up.
0.022 2011-11-24 T. R. Wyant
Correct various documentation errors.
The default-modifier functionality is no longer considered
experimental.
No code changes since 0.021_11.
0.021_11 2011-11-15 T. R. Wyant
Don't initialize effective modifiers with '^', since that wrongly
asserts that /d has been seen somewhere along the line.
Implement negation of match-semantic modifiers (e.g. 'no re /u;') by
setting the relevant datum to undef.
THE DEFAULT-MODIFIER FUNCTIONALITY IS EXPERIMENTAL, AND MAY BE CHANGED
WITHOUT NOTICE until the next production release.
0.021_10 2011-11-14 T. R. Wyant
Support for default modifiers. This includes:
* default_modifiers argument to new() in PPIx::Regexp,
PPIx::Regexp::Tokenizer, and PPIx::Regexp::Dumper
* Public method modifier_asserted() on PPIx::Regexp, to return
whether a given modifier is actually in effect. The results of the
modifier() method are unchanged.
THIS FUNCTIONALITY IS EXPERIMENTAL, AND MAY BE CHANGED OR REVOKED
WITHOUT WARNING.
Require Test::More 0.88 for installation. Eliminate all the 'eval
{ require ... }' logic in favor of 'use Test::More 0.88'.
Have Makefile.PL make use of {BUILD_REQUIRES} if it is available.
Fix PPIx::Regexp::Token::Whitespace->can_be_quantified() to return
false.
0.021 2011-07-22 T. R. Wyant
Modified tokenizer to correctly handle a back slash used as a
delimiter. I believe.
PPIx::Regexp::Dumper now dumps the results of ppi() if that method is
present and -verbose is asserted.
0.020 2011-04-02 T. R. Wyant
Corrected perl_version_introduced():
\R is now 5.009005 (was 5.000).
0.019 2011-03-01 T. R. Wyant
Various corrections to perl_version_introduced():
\X is now 5.006 (was 5.000);
\N{name} is now 5.006001 (was 5.006);
\N{U+xxxx} is now 5.008 (was 5.006).
The \C is now parsed as a PPIx::Regexp::Token::CharClass::Simple. It
was previously considered a PPIx::Regexp::Token::Literal.
Ensure that \N{$foo} parses as a Unicode literal, not a quantified \N.
The ordinal() method returns undef for this.
Understand the /aa modifier, introduced with 5.13.10.
Report perl_version_introduced() of 5.013010 for the new semantic
modifiers when modifying the entire expression.
Correct handling of interpolations like ${^foo} and $#{foo}.
0.018 2011-02-16 T. R. Wyant
No changes (other than version) since 0.017_02.
0.017_02 2011-01-31 T. R. Wyant
Override ppi() in PPIx::Regexp::Token::Interpolation to provide the
proper PPI when variable names are bracketed.
Properly parse bracketed variable names (I hope!), which may not be
subscripted.
0.017_01 2011-01-28 T. R. Wyant
Take account of possible '$' or '@' casts before a symbol in an
interpolation (e.g. $$foo{bar}, which is equivalent to $foo->{bar}).
0.017 2011-01-26 T. R. Wyant
Add the /a modifier to PPI::Regexp::Token::Modifiers, legal only in
the (?:...) construction. This was introduced in Perl 5.13.9.
When parsing an interpolation from a replacement string (rather than a
regular expression), take subscripts at face value rather than
trying to disambiguate them from quantifiers and character classes,
which they can't be in this context.
0.016 2011-01-05 T. R. Wyant
The PPIx::Regexp::Token::Code perl_version_introduced() method now
returns the minimum Perl version (currently set to 5.000) if it is
used to represent the substitution portion of s///e.
Update copyright to 2011.
0.015 2010-10-25 T. R. Wyant
Documented intent to revoke support for features introduced in a
development Perl which do not make it to a production release. This
is necessary because in this case the syntax could be reused with
different semantics.
Added support for Perl 5.13.6 (?^...) construction.
Added support for Perl 5.13.6 d, l, and u modifiers.
Fixed inconsistency in perl_version_introduced() results between
PPIx::Regexp::Token::Modifier and
PPIx::Regexp::Token::GroupType::Modifier.
Corrected PPIx::Regexp::Constant RE_CAPTURE_NAME docs, somehow missed
back at 0.010_01.
0.014 2010-10-14 T. R. Wyant
Recognize \o{...} as a PPIx::Regexp::Token::Literal, with
perl_version_introduced() of 5.0013003.
Terminate \0.. through \7.. after three characters, as Perl does.
These two were brought to my attention by Brian D. Foy's "The
Effective Perler" for October 11 2010,
http://www.effectiveperlprogramming.com/blog/697
Correct the PPIx::Regexp::Token::Literal ordinal() method for '\b'. As
a literal, this is a back space.
0.013 2010-10-10 T. R. Wyant
Declare a parse failure if characters are found between the '}' and
the ')' of (?{...}) and (??{...}), and rebless the tokens to
::Unknown. Perl does not accept anything here, so I think I should
not either.
Whitespace tweak in the PPIx::Regexp::Dumper test output for the
failures test.
Replace the PPI logic in PPIx::Regexp::Token::Code with a call to
$tokenizer->find_matching_delimiter(). This is actually the way Perl
works, as a look at toke.c and regcomp.c makes clear.
Push the perl_version_introduced() back to 5.0 at the request of
Alexandr Ciornii, for the potential benefit of Perl::MinimumVersion.
This was done mostly by reading the various perlre, perldelta, and
perlop documents, so these should be taken with a HUGE grain of
salt.
0.012 2010-09-26 T. R. Wyant
Track all the features reported as introduced (or removed) in Perl
5.010 back to Perl 5.009005, and report them as such.
Report modifier /r as having been introduced in Perl 5.013002, rather
than the default of 5.006.
0.011 2010-09-16 T. R. Wyant
No changes from 0.010_01.
0.010_01 2010-09-11 T. R. Wyant
Remove dependencies on Params::Util and Readonly. The latter was
requested by ADAMK for the benefit of Padre. It involved changing
the symbols exported from PPIx::Regexp::Constant, but these were
documented as private, so ...
Parse POSIX character classes [=a=] and [.a.] as
PPIx::Regexp::Token::CharClass::POSIX::Unknown, which counts as a
parse failure since these are not supported by Perl.
Make the PPI::Document created by PPIx::Regexp::Token::Code->ppi() be
read only. This means we need PPI 1.116. Cache the document, and
ensure the cached result is returned on subsequent calls.
0.010 2010-08-06 T. R. Wyant
Fix fatal error in PPIx::Regexp::Token::Code->ppi().
Move author tests from xt/ to xt/author/.
0.009 2010-08-03 T. R. Wyant
Recognize s/.../.../ee as being different from s/.../.../e. In
particular, the replacement portion of the former is _not_ a Perl
expression: it's an interpolatble string, which later gets
eval{}'ed.
0.008 2010-07-01 T. R. Wyant
Promote methods can_be_quantified() and is_quantifier() from
PPIx::Regexp::Token to PPIx::Regexp::Element, so all classes inherit
them. They still return true and false respectively.
Override can_be_quantified() to return false on PPIx::Regexp,
PPIx::Regexp::Structure::Quantifier,
PPIx::Regexp::Structure::Regexp, and
PPIx::Regexp::Structure::Replacement.
Override is_quantifier() to return true on
PPIx::Regexp::Structure::Quantifier.
Modify PPIx::Regexp::Dumper to be able to display can_be_quantified
and is_quantifier for PPIx::Regexp::Node objects when dumping
verbosely.
Convert internal data to Readonly in PPIx::Regexp::Lexer,
PPIx::Regexp::Token::CharClass::Simple,
PPIx::Regexp::Token::Structure, and PPIx::Regexp::Tokenizer.
Remove leftover boilerplate in PPIx::Regexp::Token::CharClass::Simple.
0.007_01 2010-06-28 T. R. Wyant
Explicitly require a minimum Perl of 5.006.
Centralized dependencies in inc/PPIx/Regexp/Meta.pm.
Removed claim that PPIx::Regexp is alpha code. Docs still say that the
interface can be changed, but now it will go through a deprecation
cycle.
0.007 2010-04-28 T. R. Wyant
PPIx::Regexp::Lexer no longer fails when encountering expressions like
m{)}. Instead, it marks the right parenthesis as an unmatched
delimiter.
0.006_01 2010-04-23 T. R. Wyant
Fixed RT 56864 - PPIx::Regexp::Lexer fails in Perl::Critic under Perl
5.13.0. This was due to the value of a returned $+[0] getting
transmogrified before the caller saw it. I never did isolate what
triggered the bug.
You can now get a tokenizer trace by setting environment value
PPIX_REGEXP_TOKENIZER_TRACE to a non-zero numeric value. This is
unsupported, though.
0.006 2010-02-26 T. R. Wyant
Update copyright from 2009 to 2009-2010.
Parse \N{...} in accordance with perl5115delta. The curlys must
contain an alpha followed by alphanumerics, spaces, parens, colons,
or dashes. \N{ without a matching } is a character class (if legal)
followed by a literal '{'.
Parse \N inside a character class as PPI::Regexp::Token::Unknown,
since Perl 5.11.5 considers this a compile error. A \N{...} inside a
character class is still OK.
Add method match() to PPIx::Regexp::Tokenizer. This is analogous to
capture(), but returns the entire matched string.
0.005 2009-12-26 T. R. Wyant
Recognize \N (without curlys), back-ported from Perl 6 into 5.11.
Recognize unicode characters as \N{[[:alpha:]] ... rather than
\N{[\w\s:] ... This is per the 5.11 documentation, but I think Perl
always worked this way.
Recognize loose matching of Unicode character classes, and allow '='
in lieu of a single ':' in a Unicode character class (this from Perl
5.11.3).
PPIx::Regexp::Dumper now produces the proper output when called with
perl_version => 1, test => 1.
Describe the typical content of the object in the documentation for
PPIx::Regexp::Structure::NamedCapture and
PPIx::Regexp::Token::GroupType::NamedCapture.
0.004 2009-11-09 T. R. Wyant
Have PPIx::Regexp::Token::Literal correctly recognize when
charnames::vianame() is unavailable, and decouple this from the
handling of \N{U+hhhh}.
Add dependency on Task::Weaken, since depending on Scalar::Util
appears not to cut it.
Correct the assignment of the license type in Makefile.PL.
0.003 2009-11-05 T. R. Wyant
Have PPIx::Regexp::Token::Literal recognize \N{U+hhhh} (where hhhh
represents hex digits), and provide its ordinal (hhhh). Remove
recognition of \N. (. = any character), which Perl does not do.
Fix $re->flush_cache() so that it actually removes $re and only
$re from the cache.
Add delimiters() method to PPIx::Regexp::Main and PPIx::Regexp.
Support this in eg/prenav.
Increase test coverage and remove dead code.
Count tests in t/parse.t and t/unit.t
0.002 2009-10-28 T. R. Wyant
In verbose mode, have PPIx::Regexp::Dumper dump the absolute capture
number referred to by a numbered reference.
Have eg/preslurp pass its -verbose option to PPIx::Regexp::Dumper
Don't use Test::More::isa_ok for the t/basic.t class heritage tests,
since some versions of Test::More require a reference for the first
argument of isa_ok().
0.001 2009-10-21 T. R. Wyant
Initial release.