## Usage:
#
# EvalExecs($html_to_parse) <== Evaluates 's
#
# EvalIncludes($html_to_parse) <== Evaluates 's
#
use Cwd;
sub EvalExecs {
my($cwd,$path,$html,$action,$mode,$file,$exec);
$cwd = getcwd();
if($^O =~ m/win/) {
if(substr($cwd,-1,1) eq "\\") {$cwd = substr($cwd,0,(length($cwd)-1))}
} else {
$cwd =~ s/\\/\//g;
if(substr($cwd,-1,1) eq "/") {$cwd = substr($cwd,0,(length($cwd)-1))}
}
$path = $ENV{'DOCUMENT_ROOT'};
if($^O =~ m/win/) {
if(substr($path,-1,1) eq "\\") {$path = substr($path,0,(length($path)-1))}
} else {
$path =~ s/\\/\//g;
if(substr($path,-1,1) eq "/") {$path = substr($path,0,(length($path)-1))}
}
$html = $_[0];
while($html =~ m//) {
$html =~ s/<__exec(.+)__>/<_INVALID_exec$1_INVALID_>/;
$html =~ s//<__exec$1__>/;
$action = $1;
if($action =~ m/cmd=/) {
$mode = 1;
if($action =~ m/cmd="(.+)"/) {
$file = $1;
}
elsif($action =~ m/cmd='(.+)'/) {
$file = $1;
}
} elsif($action =~ m/cgi=/) {
$mode = 2;
if($action =~ m/cgi="(.+)"/) {
$file = $1;
}
elsif($action =~ m/cgi='(.+)'/) {
$file = $1;
}
}
if(!$file) {next}
if($mode == 1) {
$exec = `$file`;
} else {
$exec = `perl $file`;
}
$html =~ s/<__exec(.+)__>/$exec/g;
return $html;
}
$html =~ s/<_INVALID_exec(.+)_INVALID_>//g;
}
sub EvalIncludes {
my($cwd,$path,$html,$action,$mode,$file,$final,$include,@temp,@dir,@include);
$cwd = getcwd();
if($^O =~ m/win/) {
if(substr($cwd,-1,1) eq "\\") {$cwd = substr($cwd,0,(length($cwd)-1))}
} else {
$cwd =~ s/\\/\//g;
if(substr($cwd,-1,1) eq "/") {$cwd = substr($cwd,0,(length($cwd)-1))}
}
$path = $ENV{'DOCUMENT_ROOT'};
if($^O =~ m/win/) {
if(substr($path,-1,1) eq "\\") {$path = substr($path,0,(length($path)-1))}
} else {
$path =~ s/\\/\//g;
if(substr($path,-1,1) eq "/") {$path = substr($path,0,(length($path)-1))}
}
$html = $_[0];
while($html =~ m//) {
$html =~ s/<__include(.+)__>/<_INVALID_include$1_INVALID_>/;
$html =~ s//<__include$1__>/;
$action = $1;
if($action =~ m/file=/) {
$mode = 1;
if($action =~ m/file="(.+)"/) {
$file = $1;
}
elsif($action =~ m/file='(.+)'/) {
$file = $1;
}
} elsif($action =~ m/virtual=/) {
$mode = 2;
if($action =~ m/virtual="(.+)"/) {
$file = $1;
}
elsif($action =~ m/virtual='(.+)'/) {
$file = $1;
}
}
if(!$file) {next}
if($mode == 1) {
if(-e "$cwd/$file") {$final = "$cwd/$file"}
else {
opendir(MAIN,"$cwd");
@temp = readdir(MAIN);
closedir(MAIN);
foreach $listed (@temp) {
if((-d "$cwd/$listed" && ($listed ne "." && $listed ne "..")) && (-e "$cwd/$listed/$file")) {$final = "$cwd/$listed/$file"; goto LAST}
elsif(-d "$cwd/$listed" && ($listed ne "." && $listed ne "..")) {push(@dirs,$listed)}
}
foreach $dir (@dirs) {
opendir(DIR,"$cwd/$dir");
@temp = readdir(DIR);
closedir(DIR);
foreach $listed (@temp) {
if(-d "$cwd/$dir/$listed" && -e "$cwd/$dir/$listed/$file") {$final = "$cwd/$dir/$listed/$file"; goto LAST}
elsif(-d "$cwd/$dir/$listed") {push(@dirs,"$dir/$listed")}
}
}
}
LAST: if(!$final) {next}
} else {
$final = "$path/$file";
}
if(@include) {
foreach $i (0..$#include) {
shift(@include);
}
}
open(INCLUDE,"$final");
@include = ;
close(INCLUDE);
$last = $include[-1];
$include = '';
foreach $i (@include) {
chomp($i);
if($i eq $last) {$include .= "$i";} else {$include .= "$i\n";}
}
$html =~ s/<__include(.+)__>/$include/g;
return $html;
}
$html =~ s/<_INVALID_include(.+)_INVALID_>//g;
}