summaryrefslogtreecommitdiffstats
path: root/src/ssic.pl
blob: cad68517be2fe7b93d81f69929f8ed4f9c74be91 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#!/usr/bin/perl

use strict;
use warnings;

use Getopt::Long;
use CGI::SSI;

sub main
{
	my %opts;
	my $input;
	my $output;

	$SIG{'__WARN__'} = \&warning;

	Getopt::Long::Configure("no_ignore_case", "bundling", "gnu_compat",
		"no_getopt_compat");
	if (not GetOptions(\%opts,
			"o=s",
			"h|help",
			"V|version",
		)) {
		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 <output>] <input> ...\n", $0);
}

sub help
{
	my ($fh) = @_;

	usage($fh);
	print("Options:\n");
	print("  -o <output>    Place the output into <output>\n");
	print("  -h, --help     Display this information\n");
	print("  -V, --version  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 " .
		"<http://gnu.org/licenses/gpl.html>.\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();