From 54231a8541deca709baeb49e35e62a4d7ecea00a Mon Sep 17 00:00:00 2001 From: "P. J. McDermott" Date: Sun, 22 Sep 2013 13:33:23 -0400 Subject: [PATCH] Initial commit. --- src/ssic.pl | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 src/ssic.pl diff --git a/src/ssic.pl b/src/ssic.pl new file mode 100644 index 0000000..30f1f25 --- /dev/null +++ b/src/ssic.pl @@ -0,0 +1,113 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Getopt::Std; +use CGI::SSI; + +sub main +{ + my %opts; + my $input; + my $output; + + $SIG{'__WARN__'} = \&warning; + + if (not getopts('o:hV', \%opts)) { + usage(*STDERR); + } + + if (exists($opts{'h'})) { + help(*STDERR); + exit(0); + } + if (exists($opts{'V'})) { + version(*STDERR); + exit(0); + } + + if ($#ARGV lt 0) { + error(4, "No input files\n"); + } + if (exists($opts{'o'})) { + if ($#ARGV gt 0) { + error(4, "Cannot specify -o with multiple files\n"); + } + compile($ARGV[0], $opts{'o'}); + } else { + for $input (@ARGV) { + $output = $input; + $output =~ s/\.[^.]+$/.html/; + compile($input, $output); + } + } +} + +sub usage +{ + my ($fh) = @_; + + printf($fh "Usage: %s [-o ] ...\n", $0); +} + +sub help +{ + my ($fh) = @_; + + usage($fh); + print("Options:\n"); + print(" -o Place the output into \n"); + print(" -h Display this information\n"); + print(" -V Display compiler version information\n"); +} + +sub version +{ + my ($fh) = @_; + + print("ssic 0.1.0\n"); + print("Copyright (C) 2013 Patrick \"P. J.\" McDermott\n"); + print("License GPLv3+: GNU GPL version 3 or later " . + ".\n"); + print("This is free software: you are free to change and " . + "redistribute it.\n"); + print("There is NO WARRANTY, to the extent permitted by law.\n"); +} + +sub warning +{ + my ($fmt, $args) = @_; + + printf("ssic: Warning: " . $fmt, $args); +} + +sub error +{ + my ($status, $fmt, $args) = @_; + + printf("ssic: Error: " . $fmt, $args); + exit($status); +} + +sub compile +{ + my ($input, $output) = @_; + my $input_fh; + my $output_fh; + my $ssi; + + if ($input eq $output) { + error(4, "Input and output files are equal\n"); + } + + open($input_fh, "<", $input); + open($output_fh, ">", $output); + + $CGI::SSI::DEBUG = 0; + $ssi = CGI::SSI->new(); + + print($output_fh $ssi->process(<$input_fh>)); +} + +main(); -- 2.31.1