From 8485905de8b4c60dc6cc8672621ef0ae61df48fa Mon Sep 17 00:00:00 2001 From: Gianni Ceccarelli Date: Tue, 17 Mar 2009 16:34:32 +0100 Subject: some functions --- lib/Tree/Transform.pm | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'lib/Tree/Transform.pm') diff --git a/lib/Tree/Transform.pm b/lib/Tree/Transform.pm index 99cc07f..7b9af2c 100644 --- a/lib/Tree/Transform.pm +++ b/lib/Tree/Transform.pm @@ -1,8 +1,52 @@ package Tree::Transform; use Moose; +use Sub::Exporter; +use Params::Validate ':all'; our $VERSION='0.1'; +Sub::Exporter::setup_exporter({ + exports => [qw(tree_rule new_transformer)], + groups => { + default => [ 'tree_rule', + 'new_transformer' => {-as => 'new'} ], + } +}); + +sub _rules_store { + no strict 'refs'; + if (!defined *{$_[0].'::_tree_transform_rules'}{HASH}) { + *{$_[0].'::_tree_transform_rules'}={}; + } + return *{$_[0].'::_tree_transform_rules'}{HASH}; +} + +sub tree_rule { + my (%args)=validate(@_, { + match => { type => SCALAR, optional => 1 }, + action => { type => CODEREF }, + name => { type => SCALAR, optional => 1}, + priority => { type => SCALAR, default => 1 }, + }); + + # TODO at least one of 'name' and 'match' must be specified + + my $store=_rules_store(scalar caller); + + push @{$store->{by_match}},\%args; + if ($args{name}) { + push @{$store->{by_name}{$args{name}}},\%args; + } + + return; +} + +sub new_transformer { +} + +__PACKAGE__->meta->make_immutable;no Moose; +__END__ + =head1 NAME Tree::Transform - transform tree data, like XSLT but in Perl -- cgit v1.2.3