The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
0.28  2007-11-2
- fixed test failures on Win32.
- fixed some typos in the POD.

0.27  2007-10-31
- updated <?XXX> to the new S05 syntax <.XXX>.
- added new module Pugs::Runtime::Tracer.
- added the util/update-tracer-demos script.
- added the util/gen-tracer-view.pl script for generating tracers like
   http://agentzh.org/misc/tracer/adder/index.html
- added options -D (for tracing support) and -T (for safe mode) to
  the comple_p6grammar.pl script.

0.26  2007-07-29
- added pos info (via '_pos => [ from, to ]' to regex AST's nodes
  and taught the two emitters not to dispatch on it. no failing tests.
- added t::lib::AST for AST regression tests.
- updated P::G::Rule.pmc accordingly.
- added t/ast/00-basic.t to test detailed AST structures using Data::Dumper.
- introduced $::PCR_SEED to provide a way to avoid randomness
  in the generated code
- added a corrosponding -s option to util/compile_p6grammar.pl.
- made util/update-rule-pmc-new to specify a fixed value for -s.
- added more tests to t/emitter/00-basic.t for the ratchet emitter.
- added the very useful "--- Layout" support to t::lib::Emitter.

0.25  2007-07-09
- Pugs::Emitter::Grammar::Perl5 : set sigspace for "rule XXX {...}"
  and calls the backtracking rule emitter for "regex XXX {...}".
- the ratchet rule emitter now saves the emitter params as special
  comments in the generated code to help debugging.
- fixed a bug in the parameter ordering of the ratchet emitter,
  now examples/digits.grammar no longer loops.
- added examples/langs.grammar (this file contains two grammars and
  the latter calls the subrules of the former and it works!)
- added examples/langs2.grammar to demonstrate the use of
  the "rule foo { ... }" syntax.
- added examples/Grammar.grammar which is the grammar spec
  for Perl 6 regexes themselves.
  this grammar file can be compiled by util/compile_p6grammar.pl
  down to a .pm file and replaces lib/Pugs/Grammar/Rule.pmc.
- added util/update-rule-pmc-new to automate this process.
- updated Rule.pmc using this new approach. It's about 4 times
  faster than the traditional v6.pm approach!
- compile_p6grammar.pl: prepends 'use strict; use warnings' and
  header comments to the .pm file generated.
- Pugs::Compiler::Regex now honors environment PCR_NO_CACHE,
  which can be used to disable the caching mechanism of PCR
  (recommended for PCR developers only).

0.24  2007-07-08
- added the bash script util/update-rule-pmc to automate the process
  of compiling Pugs/Grammar/Rule2.pm (in p6) down to Pugs/Grammar/Rule.pmc
  (in p5).
  it supports command line arguments "install", "revert", and "update".
  now we can call it to generate/update Rule.pmc like this:
    util/update-rule-pmc # compile only
    util/update-rule-pmc install # install only
    util/update-rule-pmc update  # compile and then install
    util/update-rule-pmc revert # svn revert .../Rule.pmc
- added util/gen-rule-pmc.pl to post-process the
  .pmc file generated by v6.pm from Pugs/Grammar/Rule2.pm
- implemented Pugs::Compiler::Grammar for compiling grammar spec like this:
    grammar Foo;
    token idents { <ident>* }
    rule blah { 'a'* <?ws>? <idents> }
    grammar Bar;
    regex hey { <alpha>**{2} }
- implemented Pugs::Emitter::Grammar::Perl5 for emitting Perl 5 source
  from grammar ASTs.
- added t/04-compiler-grammar.t for testing P::C::Grammar.
- added examples/adder.grammar and examples/digits.grammar which can be
  compiled by compile_p6grammar.pl down to Perl 5 module file.
- removed util/compile_p6grammar-token.pl since it's useless now.
- Makefile.PL - added File::Slurp as a new dependency to PCR.
- reimplemented util/compile_p6grammar.pl using Pugs::Compiler::Grammar
- Pugs::Grammar::Rule2.pm - allowed global code blocks "%{ ... %}" in
  the grammar spec.
- Pugs::Grammar::Rule2.pm - added new tokens "alnum", "alpha", "digit",
  "named_regex", "verbatim", "grammar", and "spec".
- updated Pugs::Grammar::Rule.pmc with util/update-rule-pmc accordingly.
- Makefile.PL - installs compile_p6grammar.pl by default.
- Pugs::Emitter::Rule::Perl5::Ratchet - fixed a bug regarding closures
  (or actions) in p6 regexes, which does not contain "return".
- P::G::Rule2.pm: removed the workaround for { die "..." } since i've
  already fixed it (see above).
- added t/declare/01-sigspace.t to test Pugs::Compiler::Rule's sigspace support.
- fixed a bug in Pugs::Compiler::Rule's compile method regarding modifiers
  with undef values.
- more POD documentation for Pugs::Compiler::Rule and Pugs::Compiler::Regex.
- fixed POD syntax errors in Precedence.pm and Parsec.pm.
- added t/00-pod-coverage.t and t/00-pod.t.
- fixed the :continue (:c) issue for the ratchet emitter by sticking with
  the original $str variable everywhere without passing sub arguments by copy.
- fixed a bug in Pugs::Compiler::Regex->compile regarding params handling.
- calls use_test_base() in Makefile.PL to bundle Test::Base with inc/.
added t/declare to hold declarative tests for PCR
- added t/lib/Regex.pm which subclasses Test::Base and serves
  as the tester scaffold for t/declare/*.t

0.23  2007-05-08

- implemented <?{...}> and <!{...}>
- token with non-greedy quantifier is transformed into a greedy quantifier
  with lookahead:   a b*? c  ->  a [ <!before c> b ]* c
- regex grammar: added <rule: string...> and <rule( params, ... ) syntax
- new ast node 'call'
- rules can have positional parameters
- "Whatever" {*}
- fixed ratchet quantifier - rollback .pos on fail
- added an initial double-quoted parser
- allow aliasing to a literal

- new syntax 'xxx' instead of <'xxx'>
- %($/) is read-write

0.22  2007-03-27

- fixed perl5.10 compatibility
- some fixes to character classes
- fixed bug: Pugs::Grammar::Base try to autoload DESTROY()

0.21  2007-03-12

- added external/internal 'ignorecase' flag in regex
- implemented hex/octal/named constants - \x, \o, \c, \X, \O, \C
- added Unicode properties, such as <isL> <!isL> <+isL> <-isL> 
- added StrPos class (Pugs::Runtime::StrPos)
  #reverted - Match->from() and Match->to now return Pugs::Runtime::StrPos objects.
  - for non-OO positions, use Match->to_codes and Match->from_codes 
- fixed non-capturing subrules in regex
- fixed <-alpha>
- implemented conjunctions with '&' (not in Regex runtime yet)
- implemented negated metasyntax <!...>
- implemented <fail>

0.20  2006-10-13

- each time <prior> is set to a new rule, it stores the previous 
  rule in a closure, so that subrules can have their own <prior>.
- implemented :c :continue

- several fixes to HsBridge

0.19  2006-09-27

- removed dependency Data::Dump::Streamer (t/01-iterator_engine.t)
- updated Pugs::Runtime::Match pod
- $/{0} === $/[0]
- Match.kv, Match.elems, Match.chars, Match.yaml
- RegexPerl5 accepts parameters  i m s x 
- <! ...> takes a metasyntax expression (not a rule pattern)
- Regex wasn't allowed to match at end of string
- Regex runtime detects infinite loop in <null>+ and fails
- more detailed quantifier parsing;
  added '**{range}' quantifier (needs emitter support)

- HsBridge - implements a Pugs/Haskell-compatible API

[ features available inside v6.pm only ]

- refactored Rule grammar to use shortcuts, such as
    { return { after => :$$<rule>, } }
- fixed '${...}', '$[...]', ':$<...>', '$0'
- fixed coercions in emitter

[ devel (svn.pugscode.org/pugs/perl5) version only ]

"plain_regex"
- code cleanup; added bug list
- added  ^^ $$ \n \N  - TimToady++
- /./ matches 2-char newline
- <'literal'>
- simple character classes, negated char classes
- ^ $ <null> \s, \S, etc
- <after ...>, <!after ...>, <before ...>, <!before ...>
- non-capturing group, captures, dot

"Pugs::Grammar::RulePure"
  pure-Perl6 version of the Rule grammar;
  this file currently can't be run due to PCR/v6 incompatible 
  calling conventions

0.18  2006-09-21

- implemented capturing to return object with <(...)>
- implemented Matching against non-strings
   my $rule = Pugs::Compiler::Regex->compile( '<.meth("param")>' );
   my $match = $rule->match( $object );
- implemented <at($pos)>
- fixed '^' and '$' in regexes

0.17  2006-09-13

- Grammar::Rule is now bootstrapped with v6.pm, instead of lrep
- implemented $<KEY>
- fixed bool result of quantified terms inside tokens
- fixed parsing of <'>>'>
- replaced 'do{}' with plain function calls in some places (optimization)
- implemented hash dispatch in Grammar::Rule (optimization)

0.16  2006-08-21

- removed Class::InsideOut dependency - 5% speed optimization, but there
  seems to be some gain in RAM usage also
- token <null>

0.15  2006-08-16

- stringification is handled by the 'return object', if it exists.
- fixed '..' in char classes
- ':' is ignored inside tokens
- updated the identifier list in Common.pm

0.11 to 0.14  2006-08-09

- several fixes and optimizations in hash and array interpolation
- fixed capture aliasing

- refactored Regex runtime:
-- reuses the matching string in submatches
-- resues the Match class for Token/Rule
-- more tests
- partially implemented 'static' capture numbering

0.10  2006-07-10

- added Pugs::Runtime::Common - contains utilities shared by all perl 6 
  mini-languages, such as namespace mangling.

0.09  2006-07-06

- 'install()' creates a rule in current namespace - implemented by broquaint
- fixed quoting in emitted :ratchet code
- implemented '<@rules>' in :ratchet mode

0.08  2006-07-04

- clear a warning in Pugs::Grammar::Rule - fixed by audreyt

0.07  2006-07-04

- updated Module::Install

0.06  2006-06-26

- new module Pugs::Grammar::Precedence

0.05  2006-06-13

- fixed internal <alpha> rule

- new module Pugs::Compiler::RegexPerl5 - wraps a perl5 regex into a method that
  returns a Match object. Note that this module doesn't provide backtracking to 
  caller rules.

0.04  2006-05-24

- new modules Pugs::Compiler::Token, Pugs::Compiler::Regex
- fixed Pugs::Compiler::Rule default switches to :ratchet, :sigspace.

- implemented 'sigspace' switch - in :ratchet mode only

0.03  2006-05-20

- '<after ...>' - in :ratchet mode only

- the 'p' switch should now be specified as 'p => 0' instead of 'p => 1'.
  'p => 1' now matches at the second character in the string.
  The default is 'p => undef' - matches anywhere in the string.

- added ':ratchet' switch. 

- implemented parameters in subrule call (named only, constants only)

- '<before ...>', '$'

- new class 'Pugs::Grammar::Category'

- implemented '%hash', but it doesn't use a trie yet.

- fixed subrule backtracking

- fixed method 'perl5'

- Perl 5 emitter character classes (partially) implemented

0.02  2006-03-28

- new method 'perl5', returns a string that can be eval'ed into a new PCR object

- match variables are available inside the rule: $0, $1
- /(.)*/ returns an array in @$0

- built-in rules: alpha, alnum, ...

- fixed grammar bug: '$var := (xxx)' is: '$<var> := (xxx)'

- implemented ':' (untested)

- Added support for Grammar inheritance
- rule methods are internally curryed into functions

  $rule = sub { Grammar->rule_method( @_ ) }

- faster Rule grammar
- Simplified 'match', 'capture' keys in internal Match

0.01 
- Initial CPAN release - Pod, Tests, Packaging by audreyt & others.