diff options
| author | Paul Buetow (pluto.buetow.org) <paul@buetow.org> | 2013-09-28 22:18:24 +0200 |
|---|---|---|
| committer | Paul Buetow (pluto.buetow.org) <paul@buetow.org> | 2013-09-28 22:18:24 +0200 |
| commit | fd7590d71aeee380e7c87ed77de592df1f30f5ef (patch) | |
| tree | 16884f61fbf6b75246784f8209cfa08786157fd4 | |
| parent | 340aa6d143806c2c800d0cb44e0e3ed5dd6e3a15 (diff) | |
Some small refactoring
| -rw-r--r-- | TODO | 1 | ||||
| -rw-r--r-- | Xerl/Base.pm | 1 | ||||
| -rw-r--r-- | Xerl/Main/Global.pm | 28 | ||||
| -rw-r--r-- | Xerl/Page/Configure.pm | 8 | ||||
| -rw-r--r-- | Xerl/Page/Content.pm | 1 | ||||
| -rw-r--r-- | Xerl/Page/Menu.pm | 2 | ||||
| -rw-r--r-- | Xerl/Page/Request.pm | 4 | ||||
| -rw-r--r-- | Xerl/Page/Templates.pm | 32 | ||||
| -rw-r--r-- | Xerl/Tools/FileIO.pm | 70 | ||||
| -rw-r--r-- | Xerl/XML/Element.pm | 2 | ||||
| -rw-r--r-- | Xerl/XML/Reader.pm | 4 |
11 files changed, 86 insertions, 67 deletions
@@ -1,6 +1,5 @@ Hint: Run 'make todo' to see everything in every file what is to do! -TODO: - Use more Modern Perl TODO: - Use X?HTML5 TODO: - Create a Debian package and put it to deb.buetow.org TODO: - Documentation of all features/options (manpage) diff --git a/Xerl/Base.pm b/Xerl/Base.pm index 9bb3d7f..043487b 100644 --- a/Xerl/Base.pm +++ b/Xerl/Base.pm @@ -43,6 +43,7 @@ sub exists($$) { sub AUTOLOAD { my UNIVERSAL $self = $_[0]; my $auto = our $AUTOLOAD; + return $self if $auto =~ /DESTROY/; if ( $auto =~ /.*::set_(.+)$/ ) { diff --git a/Xerl/Main/Global.pm b/Xerl/Main/Global.pm index 5ed8567..291eca7 100644 --- a/Xerl/Main/Global.pm +++ b/Xerl/Main/Global.pm @@ -45,8 +45,23 @@ sub PLAIN { sub REDIRECT ($) { my $location = shift; + say "Status: 301 Moved Permanantly"; print "Location: $location\n\n"; + + return undef; +} + +sub HTTP { + my $descr = _HTTP_DESCR(shift); + + print $descr; + local $, = ' '; + print $descr; + + Xerl::Main::Global::SHUTDOWN(); + + # Never reach this point return undef; } @@ -55,6 +70,7 @@ sub _HTTP_DESCR ($;$) { $infomsg //= ''; + # Sub returns one of the strings below if ( $status == 404 ) { "Status: 404 Not Found $infomsg\015\012\n\n" @@ -64,16 +80,4 @@ sub _HTTP_DESCR ($;$) { } } -sub HTTP { - my $descr = _HTTP_DESCR(shift); - print $descr; - local $, = ' '; - print $descr; - - Xerl::Main::Global::SHUTDOWN(); - - # Never reach this point - return undef; -} - 1; diff --git a/Xerl/Page/Configure.pm b/Xerl/Page/Configure.pm index 38d94e1..e359c52 100644 --- a/Xerl/Page/Configure.pm +++ b/Xerl/Page/Configure.pm @@ -63,18 +63,23 @@ sub defaults($) { unless ( -d $self->get_hostroot() . $self->get_host() ) { my $redirect = $self->get_hostroot() . 'redirect:' . $self->get_host(); + if ( -f $redirect ) { my Xerl::Tools::FileIO $file = Xerl::Tools::FileIO->new( 'path' => $redirect ); $file->fslurp(); + my $location = $file->shift(); Xerl::Main::Global::REDIRECT($location); $self->set_finish_request(1); } + my $alias = $self->get_hostroot() . 'alias:' . $self->get_host(); + if ( -f $alias ) { my Xerl::Tools::FileIO $file = Xerl::Tools::FileIO->new( 'path' => $alias ); + $file->fslurp(); $self->set_host( $file->shift() ); } @@ -113,7 +118,7 @@ sub defaults($) { $self->set_contentpath( $self->get_hostpath() . 'content/' ); - # $self->set_ipv6( $ENV{REMOTE_ADDR} =~ /:/ ? 1 : 0 ); + $self->set_is_ipv6( $ENV{REMOTE_ADDR} =~ /:/ ? 1 : 0 ); return undef; } @@ -123,6 +128,7 @@ sub eval($$) { my $val = $_[1]; $val =~ s/^!(.+)/`$1`/eo; + return $val; } diff --git a/Xerl/Page/Content.pm b/Xerl/Page/Content.pm index 401ec5a..c56db72 100644 --- a/Xerl/Page/Content.pm +++ b/Xerl/Page/Content.pm @@ -16,6 +16,7 @@ use Xerl::Base; use Xerl::XML::Reader; use Xerl::XML::Element; + use Xerl::Page::Rules; use Xerl::Page::Configure; diff --git a/Xerl/Page/Menu.pm b/Xerl/Page/Menu.pm index 80923ce..62cb58d 100644 --- a/Xerl/Page/Menu.pm +++ b/Xerl/Page/Menu.pm @@ -35,6 +35,7 @@ sub generate($;$) { for my $s (@site) { $content .= "$s.sub/"; $siteadd .= "$s/"; + $menuelem = $self->get_menu( $content, $siteadd, shift @compare ); $self->push_array($menuelem) if $menuelem->first_array()->array_length() > 1; @@ -46,6 +47,7 @@ sub generate($;$) { sub get_menu($$$$) { my Xerl::Page::Menu $self = $_[0]; my Xerl::Page::Configure $config = $self->get_config(); + my ( $content, $siteadd, $compare ) = ( @_[ 1 ... 2 ], lc $_[3] ); my $issubsection = $content =~ m{\.sub/$}; my $pattern = qr/\.(?:xml)|(?:sub)$/; diff --git a/Xerl/Page/Request.pm b/Xerl/Page/Request.pm index cb3a876..77f893d 100644 --- a/Xerl/Page/Request.pm +++ b/Xerl/Page/Request.pm @@ -34,9 +34,9 @@ sub parse($) { return $self unless defined; my $params = ''; - for ( split /&/ ) { - # List context uses ($1,$2) as method args + # List context uses ($1,$2) as method args + for ( split /&/ ) { $self->setval(/(.+?)=(.+)/); $params .= "&$1=$2" if $1 ne 'site'; } diff --git a/Xerl/Page/Templates.pm b/Xerl/Page/Templates.pm index c327cbb..75b3807 100644 --- a/Xerl/Page/Templates.pm +++ b/Xerl/Page/Templates.pm @@ -16,9 +16,11 @@ use Time::HiRes 'tv_interval'; use Digest::MD5; use Xerl::Base; + use Xerl::Page::Configure; use Xerl::Page::Content; use Xerl::Page::Menu; + use Xerl::Tools::FileIO; use constant RECURSIVE => 1; @@ -160,20 +162,6 @@ sub parsetemplate($$;$) { return undef; } -# Static sub -sub PARSELINE($$$;$) { - my Xerl::Page::Configure $config = $_[0]; - my ( $sep, $line, $foundflag ) = @_[ 1 .. 3 ]; - - $$line =~ s/$sep(!)?(.+?)$sep/ - defined $1 ? `$2` : - (ref $config->getval($2) eq 'ARRAY') - ? join '', @{$config->getval($2)} : - $config->getval($2)/eg and $$foundflag = 1; - - return undef; -} - sub print($;$) { my Xerl::Page::Templates $self = $_[0]; my Xerl::Page::Configure $config = $self->get_config(); @@ -187,6 +175,7 @@ sub print($;$) { $line =~ s#^Content-Type.*#Content-Type: text/plain#i; $hflag = 0; } + $line =~ s/ +/ /g; redo if !$flag and $line =~ s/<perl>((?:.|\n)*?)<\/perl>/eval $1/ego; @@ -212,10 +201,25 @@ sub print($;$) { $line =~ s/!!LT!!/</g; $line =~ s/!!GT!!/>/g; $line =~ s#!!URL\((.+?)\)!!#<a href="$1">$1</a>#g; + print $line; } return undef; } +# Static sub +sub PARSELINE($$$;$) { + my Xerl::Page::Configure $config = $_[0]; + my ( $sep, $line, $foundflag ) = @_[ 1 .. 3 ]; + + $$line =~ s/$sep(!)?(.+?)$sep/ + defined $1 ? `$2` : + (ref $config->getval($2) eq 'ARRAY') + ? join '', @{$config->getval($2)} : + $config->getval($2)/eg and $$foundflag = 1; + + return undef; +} + 1; diff --git a/Xerl/Tools/FileIO.pm b/Xerl/Tools/FileIO.pm index a594694..98765df 100644 --- a/Xerl/Tools/FileIO.pm +++ b/Xerl/Tools/FileIO.pm @@ -10,6 +10,8 @@ package Xerl::Tools::FileIO; use strict; use warnings; +use v5.14.0; + use Xerl::Base; use Xerl::Main::Global; @@ -78,40 +80,6 @@ sub fwriteappend($) { return undef; } -sub _fwrite($;$) { - my Xerl::Tools::FileIO $self = $_[0]; - my $append = $_[1]; - - my ( $path, $filename ) = - ( _SECUREPATH( $self->get_path() ), _SECUREPATH( $self->get_filename() ) ); - - my $path_ = ''; - for ( split /\//, $path ) { - $path_ .= $_ . '/'; - mkdir $path_ - or Xerl::Main::Global::ERROR( $!, $path_, caller() ) - unless -d $path_; - } - - my $f; - if ( $append == 0 ) { - open $f, ">$path$filename" - or Xerl::Main::Global::ERROR( $!, $path . $filename, caller() ); - - } - else { - open $f, ">>$path$filename" - or Xerl::Main::Global::ERROR( $!, $path . $filename, caller() ); - } - - flock $f, 2; - print $f @{ $self->get_array() }; - flock $f, 3; - close $f; - - return undef; -} - sub print($) { my Xerl::Tools::FileIO $self = $_[0]; @@ -153,6 +121,40 @@ sub pop($) { return $pop; } +sub _fwrite($;$) { + my Xerl::Tools::FileIO $self = $_[0]; + my $append = $_[1]; + + my ( $path, $filename ) = + ( _SECUREPATH( $self->get_path() ), _SECUREPATH( $self->get_filename() ) ); + + my $path_ = ''; + for ( split /\//, $path ) { + $path_ .= $_ . '/'; + mkdir $path_ + or Xerl::Main::Global::ERROR( $!, $path_, caller() ) + unless -d $path_; + } + + my $f; + if ( $append == 0 ) { + open $f, ">$path$filename" + or Xerl::Main::Global::ERROR( $!, $path . $filename, caller() ); + + } + else { + open $f, ">>$path$filename" + or Xerl::Main::Global::ERROR( $!, $path . $filename, caller() ); + } + + flock $f, 2; + print $f @{ $self->get_array() }; + flock $f, 3; + close $f; + + return undef; +} + use overload '+' => \&merge; sub _SECUREPATH($) { diff --git a/Xerl/XML/Element.pm b/Xerl/XML/Element.pm index d18e0b5..0867841 100644 --- a/Xerl/XML/Element.pm +++ b/Xerl/XML/Element.pm @@ -41,7 +41,7 @@ sub params_str($) { my Xerl::XML::Element $self = $_[0]; my $params = $self->get_params(); - return if $params eq ''; + return undef if $params eq ''; return join '', map { " $_=\"" . $params->{$_} . '"' } keys %$params; } diff --git a/Xerl/XML/Reader.pm b/Xerl/XML/Reader.pm index aeb8c74..c5ab2d3 100644 --- a/Xerl/XML/Reader.pm +++ b/Xerl/XML/Reader.pm @@ -17,7 +17,7 @@ use Xerl::XML::Element; use Xerl::XML::SAXHandler; sub open($) { - my Xerl::XML::Reader $self = $_[0]; + my Xerl::XML::Reader $self = shift; if ( -f $self->get_path() ) { return 0; @@ -28,7 +28,7 @@ sub open($) { } sub parse() { - my Xerl::XML::Reader $self = $_[0]; + my Xerl::XML::Reader $self = shift; my $sax_handler = Xerl::XML::SAXHandler->new(); my $parser = XML::SAX::ParserFactory->parser( Handler => $sax_handler ); |
