rendered paste body#!/usr/bin/perl
use strict;
use Parse::RecDescent;
use File::Slurp;
use Data::Dumper; $Data::Dumper::Indent = 1;
$::RD_HINT = 1;
my $text = read_file( 'escrima.dump' );
my $parser = Parse::RecDescent->new( <<'END_GRAMMAR' );
hex_digit: /[abcdefABCDEF0123456789]/
uuid: 'UUID: ' ( hex_digit(8) '-' hex_digit(4) '-' hex_digit(4) '-' hex_digit(4) '-' hex_digit(12) ) "\n"
number: /\d+/
newline: /\n|\r\n|\x0A|\x0D|\x0D\x0A/
key: "K " number newline
{ print ::Dumper({%item}); my $len = $item{number}; $return = substr( $text, 0, $len, "" ); print ::Dumper([$return,$text]);}
value: "V " number newline
{ print ::Dumper({%item}); my $len = $item{number}; $return = substr( $text, 0, $len, "" ); print ::Dumper($text);}
kv_pair: key value
property_block: kv_pair(1..) 'PROPS-END' newline
dumpfile: key value
revision: revision_header "\n" property_block "\n" node(1..)
revision_header: 'Revision-number: ' number "\n" 'Prop-content-length: ' number "\n" 'Content-length: ' number "\n"
node: /.*/
END_GRAMMAR
die "Bad Grammar!" unless defined $parser;
$text = "K 7
svn:log
V 13
Inital import
"; my $foo = "
K 10
svn:author
V 6
immute
K 8
svn:date
V 27
2006-08-30T23:08:39.850827Z";
my $result = $parser->dumpfile( $text );
die "Bad Result!" unless defined $result;
print Dumper( $result );