#! perl -w
# Parse ChangeLog
# Copyright: (C) Project PaoPei with zuihu 2004 JAPAN
# $Id: remoteclog.txt,v 1.2 2004/12/06 08:58:45 zuihu Exp $
package ParseChangeLog;
use strict;
use Parse::RecDescent;
use Data::Dumper;
our $VERSION = '0.1';
my $grammar = q(
file: entry(s)
{
my %file;
for (@{$item[1]})
{
(my $date = $_->[1]->[0]->[0]) =~ s/\-//og;
$file{$date} = $_->[1];
}
\%file;
}
entry: entryheader item(s)
{
my @entry;
push @entry, $item[1], $item[2];
[ $item[1], \@entry ];
}
entryheader: date user
{[$item[1], $item[2]]}
| date
{[$item[1]]}
date: /\d{4}-\d\d-\d\d/ /(\s\(.+?\))?/
{$item[1]}
user: /.+/
{$item[1]}
item: itemheader itembody(s)
{ [$item[1], $item[2]] }
| itemheader
{ [$item[1]] }
itemheader: /^\* / /([^\:]+)/ /:\s*/
{$item[2]}
itembody: /^(?!(\* .+?:|\d{4}-\d\d\-\d\d))(.*)/
{$item[1]}
);
my $text;
{
local $/ = undef;
$text = <STDIN>;
}
my $log = Parse::RecDescent->new($grammar)->file($text);
print Dumper($log);
2004-07 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31