summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorP. J. McDermott <pjm@nac.net>2013-09-23 11:08:24 (EDT)
committer P. J. McDermott <pjm@nac.net>2013-09-23 11:08:24 (EDT)
commitec6fe3631c44da06d59cf539ad8655d69626d922 (patch)
treef2f2913c5ca26cadcb2b12ba958e45ff4bf53964
parent874cafcd1d826d03066055b80c7900cae706f9c8 (diff)
downloadssic-ec6fe3631c44da06d59cf539ad8655d69626d922.zip
ssic-ec6fe3631c44da06d59cf539ad8655d69626d922.tar.gz
ssic-ec6fe3631c44da06d59cf539ad8655d69626d922.tar.bz2
Initialize compiler only once.
-rwxr-xr-xsrc/ssic.pl59
1 files changed, 37 insertions, 22 deletions
diff --git a/src/ssic.pl b/src/ssic.pl
index 81bb50d..73c608d 100755
--- a/src/ssic.pl
+++ b/src/ssic.pl
@@ -24,6 +24,7 @@ use CGI::SSI;
sub main
{
my %opts;
+ my $ssi;
my $input;
my $output;
@@ -54,18 +55,23 @@ sub main
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");
}
- compile($ARGV[0], $opts{'o'}, $opts{'D'}, $opts{'I'});
+ compile($ssi, $ARGV[0], $opts{'o'});
} else {
for $input (@ARGV) {
$output = $input;
$output =~ s/\.[^.]+$/.html/;
- compile($input, $output, $opts{'D'}, $opts{'I'});
+ compile($ssi, $input, $output);
}
}
+
+ undef $ssi;
}
sub usage
@@ -116,15 +122,35 @@ sub error
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
{
- my ($input, $output, $vars, $root) = @_;
+ my ($ssi, $input, $output) = @_;
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");
@@ -148,23 +174,12 @@ sub compile
}
# 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>));