projects
/
ssic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
874cafc
)
Initialize compiler only once.
author
P. J. McDermott
<pjm@nac.net>
Mon, 23 Sep 2013 15:08:24 +0000
(11:08 -0400)
committer
P. J. McDermott
<pjm@nac.net>
Mon, 23 Sep 2013 15:08:24 +0000
(11:08 -0400)
src/ssic.pl
patch
|
blob
|
history
diff --git
a/src/ssic.pl
b/src/ssic.pl
index 81bb50dfdcdc29868805a5e6374b78d6862894a6..73c608d134041f61294bb56c35c13a698d1e60f7 100755
(executable)
--- a/
src/ssic.pl
+++ b/
src/ssic.pl
@@
-24,6
+24,7
@@
use CGI::SSI;
sub main
{
my %opts;
sub main
{
my %opts;
+ my $ssi;
my $input;
my $output;
my $input;
my $output;
@@
-54,18
+55,23
@@
sub main
if ($#ARGV lt 0) {
error(4, "No input files\n");
}
if ($#ARGV lt 0) {
error(4, "No input files\n");
}
+
+ $ssi = init_compiler($opts{'D'}, $opts{'I'});
+
if (exists($opts{'o'})) {
if ($#ARGV gt 0) {
error(4, "Cannot specify -o with multiple files\n");
}
if (exists($opts{'o'})) {
if ($#ARGV gt 0) {
error(4, "Cannot specify -o with multiple files\n");
}
- compile($
ARGV[0], $opts{'o'}, $opts{'D'}, $opts{'I
'});
+ compile($
ssi, $ARGV[0], $opts{'o
'});
} else {
for $input (@ARGV) {
$output = $input;
$output =~ s/\.[^.]+$/.html/;
} else {
for $input (@ARGV) {
$output = $input;
$output =~ s/\.[^.]+$/.html/;
- compile($
input, $output, $opts{'D'}, $opts{'I'}
);
+ compile($
ssi, $input, $output
);
}
}
}
}
+
+ undef $ssi;
}
sub usage
}
sub usage
@@
-116,15
+122,35
@@
sub error
exit($status);
}
exit($status);
}
+sub init_compiler
+{
+ my ($vars, $root) = @_;
+ my $ssi;
+ my $var_name;
+ my $var_value;
+
+ %ENV = (
+ "DOCUMENT_ROOT" => $root,
+ );
+
+ $CGI::SSI::DEBUG = 0;
+ $ssi = CGI::SSI->new();
+
+ $ssi->set("DOCUMENT_ROOT" => $root);
+
+ while (($var_name, $var_value) = each(%{$vars})) {
+ $ssi->set($var_name => $var_value);
+ }
+
+ return $ssi;
+}
+
sub compile
{
sub compile
{
- my ($
input, $output, $vars, $roo
t) = @_;
+ my ($
ssi, $input, $outpu
t) = @_;
my $input_fh;
my $input_abs;
my $output_fh;
my $input_fh;
my $input_abs;
my $output_fh;
- my $ssi;
- my $var_name;
- my $var_value;
if ($input eq $output and $input ne "-") {
warning("Input and output files are equal\n");
if ($input eq $output and $input ne "-") {
warning("Input and output files are equal\n");
@@
-148,23
+174,12
@@
sub compile
}
# CGI::SSI uses SCRIPT_FILENAME to determine the value of LAST_MODIFIED.
}
# CGI::SSI uses SCRIPT_FILENAME to determine the value of LAST_MODIFIED.
- %ENV = (
- "DOCUMENT_NAME" => $input,
- "DOCUMENT_URI" => $input,
- "DOCUMENT_ROOT" => $root,
- "SCRIPT_FILENAME" => $input_abs,
- );
-
- $CGI::SSI::DEBUG = 0;
- $ssi = CGI::SSI->new(
- "DOCUMENT_NAME" => $input,
- "DOCUMENT_URI" => $input,
- "DOCUMENT_ROOT" => $root,
- );
+ $ENV{"DOCUMENT_NAME"} = $input;
+ $ENV{"DOCUMENT_URI"} = $input;
+ $ENV{"SCRIPT_FILENAME"} = $input_abs;
- while (($var_name, $var_value) = each(%{$vars})) {
- $ssi->set($var_name => $var_value);
- }
+ $ssi->set("DOCUMENT_NAME" => $input);
+ $ssi->set("DOCUMENT_URI" => $input);
print($output_fh $ssi->process(<$input_fh>));
print($output_fh $ssi->process(<$input_fh>));