summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Xerl/XML/Reader.pm183
-rwxr-xr-xindex.pl2
2 files changed, 97 insertions, 88 deletions
diff --git a/Xerl/XML/Reader.pm b/Xerl/XML/Reader.pm
index 51aa75b..7b5f8d4 100644
--- a/Xerl/XML/Reader.pm
+++ b/Xerl/XML/Reader.pm
@@ -73,114 +73,123 @@ sub parse($) {
# Allow <tag />
my $is_single_tag = $line =~ s#<([^/].+?)( (.*?))? ?/ *>#<$1 $3></$1>#o;
- # Open XML tag
- if ( $line =~ s#<([^/].+?)( (.*?))? *>##o ) {
- my ( $name, $params ) = ( $1, $3 );
+ my $flag = 0;
- # Ignore XML comments
- next if $name =~ /^!--/o;
+ do {
- $next = Xerl::XML::Element->new();
- $next->set_name($name);
- $next->set_prev($element);
- $next->set_single($is_single_tag);
+ # Open XML tag
+ if ( $line =~ s#<([^/].+?)( (.*?))? *>##o ) {
+ my ( $name, $params ) = ( $1, $3 );
+ $flag = 1;
- # Handle tag parameters
- if ( defined $params ) {
- my %params = $params =~ /
+ # Ignore XML comments
+ next if $name =~ /^!--/o;
+
+ $next = Xerl::XML::Element->new();
+ $next->set_name($name);
+ $next->set_prev($element);
+ $next->set_single($is_single_tag);
+
+ # Handle tag parameters
+ if ( defined $params ) {
+ my %params = $params =~ /
(?: ( [^\s]+? ) \s*=\s* (
(?: '(?:.|(?:\\'))*?' ) |
(?: "(?:.|(?:\\"))*?" ) |
(?: [^\s]+ ) ) )
/gox;
- # Remove " and '
- $params{$_} =~ s/^(?:"|')|(?:"|')$//go for keys %params;
- $next->set_params( \%params );
- $notrim = 1 if exists $params{notrim};
- }
-
- $element->push_array($next);
-
- $root = $element unless defined $root;
- $element = $next;
- $insert = $element;
-
- redo;
- }
-
- # Close XML tag
- if ( $line =~ s#<(/.+?)>##o ) {
-
- #print "XML::<$1>\n";
- if ( $element->get_name() eq 'includefiles' ) {
- my $config = $self->get_config();
- my $params = $element->get_params();
- my $path =
- $config->get_hostpath() . 'content/' . $params->{reldir};
- my $pattern = $params->{pattern};
- my $maxitems =
- exists $params->{maxitems} ? $params->{maxitems} : 100;
- my $startindex =
- exists $params->{startindex} ? $params->{startindex} : 0;
-
- my Xerl::Tools::FileIO $io =
- Xerl::Tools::FileIO->new( path => $path );
+ # Remove " and '
+ $params{$_} =~ s/^(?:"|')|(?:"|')$//go for keys %params;
+ $next->set_params( \%params );
+ $notrim = 1 if exists $params{notrim};
+ }
- $io->dslurp();
- $io->reverse_array() if exists $params->{reversed};
+ $element->push_array($next);
- for my $include ( grep { /$pattern/o } @{ $io->get_array() } ) {
- last unless $maxitems--;
- next if 0 < $startindex--;
+ $root = $element unless defined $root;
+ $element = $next;
+ $insert = $element;
- my Xerl::XML::Reader $reader = Xerl::XML::Reader->new(
- path => $include,
- config => $config
- );
+ redo;
+ }
- if ( -1 == $reader->open() ) {
- $config->set_finish_request(1);
- return undef;
+ # Close XML tag
+ if ( $line =~ s#<(/.+?)>##o ) {
+ $flag = 1;
+
+ #print "XML::<$1>\n";
+ if ( $element->get_name() eq 'includefiles' ) {
+ my $config = $self->get_config();
+ my $params = $element->get_params();
+ my $path =
+ $config->get_hostpath() . 'content/' . $params->{reldir};
+ my $pattern = $params->{pattern};
+ my $maxitems =
+ exists $params->{maxitems} ? $params->{maxitems} : 100;
+ my $startindex =
+ exists $params->{startindex} ? $params->{startindex} : 0;
+
+ my Xerl::Tools::FileIO $io =
+ Xerl::Tools::FileIO->new( path => $path );
+
+ $io->dslurp();
+ $io->reverse_array() if exists $params->{reversed};
+
+ for
+ my $include ( grep { /$pattern/o } @{ $io->get_array() } )
+ {
+ last unless $maxitems--;
+ next if 0 < $startindex--;
+
+ my Xerl::XML::Reader $reader = Xerl::XML::Reader->new(
+ path => $include,
+ config => $config
+ );
+
+ if ( -1 == $reader->open() ) {
+ $config->set_finish_request(1);
+ return undef;
+ }
+ $reader->parse();
+
+ my Xerl::XML::Element $starttag =
+ $reader->get_root()->starttag('content');
+
+ my $sep =
+ exists $params->{separator}
+ ? $params->{separator}
+ : 'noop';
+ $starttag->set_name($sep);
+ $element->set_name('noop');
+ $element->push_array($starttag);
}
- $reader->parse();
-
- my Xerl::XML::Element $starttag =
- $reader->get_root()->starttag('content');
-
- my $sep =
- exists $params->{separator}
- ? $params->{separator}
- : 'noop';
- $starttag->set_name($sep);
- $element->set_name('noop');
- $element->push_array($starttag);
}
- }
- $insert = $element;
- $prev = $element->get_prev();
- $element = $prev if defined $prev;
- $notrim = 0 if $notrim;
+ $insert = $element;
+ $prev = $element->get_prev();
+ $element = $prev if defined $prev;
+ $notrim = 0 if $notrim;
- redo;
- }
+ redo;
+ }
- # XML text
- if ( defined $insert
- and $line =~ s/^( *)(.+?) *$/$notrim ? $1.$2 : $2/oe )
- {
+ # XML text
+ if ( defined $insert
+ and $line =~ s/^( *)(.+?) *$/$notrim ? $1.$2 : $2/oe )
+ {
- if ($newlineadd) {
- $insert->append_text("\n");
- $newlineadd = 0;
- }
+ if ($newlineadd) {
+ $insert->append_text("\n");
+ $newlineadd = 0;
+ }
- $line =~ s/!!LT!!/</g;
- $line =~ s/!!GT!!/>/g;
+ $line =~ s/!!LT!!/</g;
+ $line =~ s/!!GT!!/>/g;
- $insert->append_text($line);
- }
+ $insert->append_text($line);
+ }
+ } while ( $flag == 1 );
}
$root->set_name('root');
diff --git a/index.pl b/index.pl
index d5a4ef3..985af29 100755
--- a/index.pl
+++ b/index.pl
@@ -9,7 +9,7 @@ use Socket;
use Sys::Hostname;
my $host = hostname();
-my $config = -e "config-$host.txt" ? "config-$host.txt" : 'config.txt';
+my $config = -e "config-$host.txt" ? "config-$host.txt" : 'config.txt';
my Xerl $xerl = Xerl->new( config => $config );
$xerl->run();