You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.2 KiB
101 lines
2.2 KiB
package ActiveState::Rx;
|
|
|
|
use strict;
|
|
our $VERSION = '0.60';
|
|
|
|
# <stolen from="re.pm">
|
|
sub doit {
|
|
my $on = shift;
|
|
my $debug = shift || "";
|
|
require XSLoader;
|
|
XSLoader::load('ActiveState::Rx');
|
|
set_debug($debug eq "debug" and $on);
|
|
install() if $on;
|
|
deinstall() unless $on || $debug;
|
|
}
|
|
|
|
sub import {
|
|
shift;
|
|
doit(1,@_);
|
|
}
|
|
|
|
sub unimport {
|
|
shift;
|
|
doit(0,@_);
|
|
}
|
|
# </stolen>
|
|
|
|
# Translate a regex hash structure into a more tree-like structure
|
|
# that is more easily traversed and analyzed.
|
|
sub translate_tree {
|
|
my %tree = %{shift()};
|
|
my $node = shift; # Starting node.
|
|
|
|
my @treeroots; # Array of top level tree nodes (roots).
|
|
|
|
while(defined $node) {
|
|
if(ref($tree{$node}) eq 'HASH') {
|
|
my %nodeguts = %{$tree{$node}};
|
|
|
|
# Add the node to the treeroots array only there
|
|
# exists a handler function that could some day
|
|
# "draw" it. We don't want to mess around with nodes we
|
|
# can't handle...
|
|
if(defined $nodeguts{TYPE}) {
|
|
push @treeroots, _process_node(\%tree, \%nodeguts, $node);
|
|
}
|
|
else {
|
|
print STDERR "Skipping node $node\n";
|
|
}
|
|
|
|
# If the current node didn't give us a next node to traverse to
|
|
# then we must give up.
|
|
unless($node = $nodeguts{NEXT}) {
|
|
last;
|
|
}
|
|
}
|
|
}
|
|
|
|
return \@treeroots;
|
|
}
|
|
|
|
sub _process_node {
|
|
my %tree = %{shift()};
|
|
my %nodeguts = %{shift()};
|
|
my $nodename = shift();
|
|
|
|
# print Dumper($nodename);
|
|
# print Dumper(\%nodeguts);
|
|
|
|
$nodeguts{'__this__'} = $nodename;
|
|
|
|
if($nodeguts{CHILD}) {
|
|
# Now build another translated tree based on the child node of
|
|
# this node.
|
|
my $treerootsref = translate_tree(\%tree, $nodeguts{CHILD});
|
|
$nodeguts{CHILD} = $treerootsref;
|
|
}
|
|
return \%nodeguts;
|
|
}
|
|
|
|
1;
|
|
|
|
__END__
|
|
|
|
=head1 NAME
|
|
|
|
ActiveState::Rx - Regular Expression Debugger
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
Please see L<ActiveState::Rx::Info> for details on how to use Rx.
|
|
|
|
=head1 AUTHOR
|
|
|
|
Mark-Jason Dominus <[email protected]>
|
|
Ken Simpson <[email protected]>
|
|
Neil Watkiss <[email protected]>
|
|
|
|
=head1 COPYRIGHT
|
|
|
|
Copyright (c) 2001, ActiveState SRL.
|