|
Packit |
fcad23 |
#!/usr/bin/perl -w
|
|
Packit |
fcad23 |
##############################################################################
|
|
Packit |
fcad23 |
#
|
|
Packit |
fcad23 |
# Alex Burger - Oct 28th, 2004
|
|
Packit |
fcad23 |
#
|
|
Packit |
fcad23 |
# Purpose: Modify .html files to add a header and footer for use
|
|
Packit |
fcad23 |
# on the Net-SNMP web site.
|
|
Packit |
fcad23 |
#
|
|
Packit |
fcad23 |
# Can also be used to change the 'section' variable
|
|
Packit |
fcad23 |
# for use in the menu system.
|
|
Packit |
fcad23 |
#
|
|
Packit |
fcad23 |
# Notes: A backup of each file is made to *.old.
|
|
Packit |
fcad23 |
#
|
|
Packit |
fcad23 |
# Any DOS newlines are removed from the destination file.
|
|
Packit |
fcad23 |
#
|
|
Packit |
fcad23 |
# Permissions are maintained.
|
|
Packit |
fcad23 |
#
|
|
Packit |
fcad23 |
##############################################################################
|
|
Packit |
fcad23 |
#
|
|
Packit |
fcad23 |
use File::Copy;
|
|
Packit |
fcad23 |
use File::stat;
|
|
Packit |
fcad23 |
use Getopt::Long;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
my $tidy_options = '-f /dev/null -m -i -asxhtml -wrap 130 -quiet --quote-nbsp n';
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
my $pattern = '';
|
|
Packit |
fcad23 |
my $section = '';
|
|
Packit |
fcad23 |
my $tidy = 0;
|
|
Packit |
fcad23 |
my $body = 0;
|
|
Packit |
fcad23 |
my $help = 0;
|
|
Packit |
fcad23 |
my @files = ();
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
GetOptions ('pattern=s' => \$pattern,
|
|
Packit |
fcad23 |
'section=s' => \$section,
|
|
Packit |
fcad23 |
'tidy' => \$tidy,
|
|
Packit |
fcad23 |
'body' => \$body,
|
|
Packit |
fcad23 |
'help' => \$help);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if ($help == 1)
|
|
Packit |
fcad23 |
{
|
|
Packit |
fcad23 |
$USAGE = qq/
|
|
Packit |
fcad23 |
Usage:
|
|
Packit |
fcad23 |
add-header-footer [<options>] file1 file2 file3 ...
|
|
Packit |
fcad23 |
Options:
|
|
Packit |
fcad23 |
--section= Menu section
|
|
Packit |
fcad23 |
--tidy Run tidy on input file before processing (turns on --body)
|
|
Packit |
fcad23 |
--body Remove everything before <body> and after <\/body>
|
|
Packit |
fcad23 |
--help Display this message
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
Examples:
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
add-header-footer.pl --section=tutorial --body cat.html dog.html mouse.html
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
find . -name '*.html' | add-header-footer.pl --section=tutorial --body
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
/;
|
|
Packit |
fcad23 |
print $USAGE;
|
|
Packit |
fcad23 |
exit 0;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if ($ARGV[0]) {
|
|
Packit |
fcad23 |
# Files listed on command line
|
|
Packit |
fcad23 |
foreach my $arg (@ARGV) {
|
|
Packit |
fcad23 |
chomp $arg;
|
|
Packit |
fcad23 |
push @files, $arg;
|
|
Packit |
fcad23 |
#print "$arg\n";
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
else {
|
|
Packit |
fcad23 |
# No arguments, so accept STDIN
|
|
Packit |
fcad23 |
while (<STDIN>) {
|
|
Packit |
fcad23 |
chomp;
|
|
Packit |
fcad23 |
push @files, $_;
|
|
Packit |
fcad23 |
#print "$_\n";
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if (! (@files) ) {
|
|
Packit |
fcad23 |
exit 0;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
#print "@files";
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
foreach my $file (@files) {
|
|
Packit |
fcad23 |
chomp $file;
|
|
Packit |
fcad23 |
print "Processing file: $file\n";
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# Grab current permissions
|
|
Packit |
fcad23 |
my $sb = stat($file);
|
|
Packit |
fcad23 |
my $stat_permissions = sprintf ("%04o", $sb->mode & 07777);
|
|
Packit |
fcad23 |
my $stat_uid = $sb->uid;
|
|
Packit |
fcad23 |
my $stat_gid = $sb->gid;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
my @old_file = ();
|
|
Packit |
fcad23 |
my @new_file = ();
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
my $body_count = 0;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# Backup old file
|
|
Packit |
fcad23 |
if (! (copy ("$file", "$file.old"))) {
|
|
Packit |
fcad23 |
print "Could not backup existing file $file to $file.new. Aborting.\n";
|
|
Packit |
fcad23 |
next;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
# Set permissions on old file to match original file
|
|
Packit |
fcad23 |
chmod oct($stat_permissions), "$file.old";
|
|
Packit |
fcad23 |
chown $stat_uid, $stat_uid, "$file.old";
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if ($tidy == 1) {
|
|
Packit |
fcad23 |
$body = 1; # Enable body, as tidy will add it in.
|
|
Packit |
fcad23 |
my $tidy_command = "tidy $tidy_options $file";
|
|
Packit |
fcad23 |
`$tidy_command`;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if (open (I, "<$file")) {
|
|
Packit |
fcad23 |
# Load entire file
|
|
Packit |
fcad23 |
while () {
|
|
Packit |
fcad23 |
s/\015//g; # Remove any DOS newlines
|
|
Packit |
fcad23 |
chomp;
|
|
Packit |
fcad23 |
push (@old_file, $_);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
else {
|
|
Packit |
fcad23 |
print "Could not open file $file. Aborting\n";
|
|
Packit |
fcad23 |
next;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if (!@old_file) {
|
|
Packit |
fcad23 |
print "Empty file. Skipping\n";
|
|
Packit |
fcad23 |
next;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# Remove empty lines at start
|
|
Packit |
fcad23 |
while (1) {
|
|
Packit |
fcad23 |
if ($old_file[0] eq "") {
|
|
Packit |
fcad23 |
splice (@old_file, 0, 1);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
else {
|
|
Packit |
fcad23 |
last;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# Remove empty lines at end
|
|
Packit |
fcad23 |
while (1) {
|
|
Packit |
fcad23 |
if ($old_file[$#old_file] eq "") {
|
|
Packit |
fcad23 |
splice (@old_file, -1, 1);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
else {
|
|
Packit |
fcad23 |
last;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if ($body == 1) {
|
|
Packit |
fcad23 |
# Count the number of
|
|
Packit |
fcad23 |
for (my $i = 0; $i <= $#old_file; $i++) {
|
|
Packit |
fcad23 |
if ($old_file[$i] =~ /
|
|
Packit |
fcad23 |
$body_count++;
|
|
Packit |
fcad23 |
next;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# Remove anything before and including
|
|
Packit |
fcad23 |
while ($body_count > 0) {
|
|
Packit |
fcad23 |
while (! ($old_file[0] =~ /
|
|
Packit |
fcad23 |
splice (@old_file, 0, 1);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
splice (@old_file, 0, 1); #
|
|
Packit |
fcad23 |
$body_count--;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# Start to build new file in memory with header
|
|
Packit |
fcad23 |
push (@new_file, "\n");
|
|
Packit |
fcad23 |
push (@new_file, '' . "\n");
|
|
Packit |
fcad23 |
push (@new_file, '' . "\n");
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# Add in old file, skipping existing header and footer and stopping at <body/>
|
|
Packit |
fcad23 |
for (my $i = 0; $i <= $#old_file; $i++) {
|
|
Packit |
fcad23 |
if (!(defined($old_file[$i]))) { next; }
|
|
Packit |
fcad23 |
if ($body == 1 && ($old_file[$i] =~ /<\/body>/)) { last; }
|
|
Packit |
fcad23 |
elsif ($old_file[$i] =~ /
|
|
Packit |
fcad23 |
elsif ($old_file[$i] =~ //) { next; }
|
|
Packit |
fcad23 |
elsif ($old_file[$i] =~ //) { next; }
|
|
Packit |
fcad23 |
elsif ($old_file[$i] =~ //) { next; }
|
|
Packit |
fcad23 |
elsif ($old_file[$i] =~ //) { next; }
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
push (@new_file, $old_file[$i] . "\n");
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# Finish to building new file in memory with footer
|
|
Packit |
fcad23 |
push (@new_file, '' . "\n");
|
|
Packit |
fcad23 |
push (@new_file, '' . "\n");
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# Save new file
|
|
Packit |
fcad23 |
if (open (O, ">$file")) {
|
|
Packit |
fcad23 |
for (my $i = 0; $i <= $#new_file; $i++) {
|
|
Packit |
fcad23 |
print O "$new_file[$i]";
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
print O "\n";
|
|
Packit |
fcad23 |
close O;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# Set permissions
|
|
Packit |
fcad23 |
chmod oct($stat_permissions), $file;
|
|
Packit |
fcad23 |
chown $stat_uid, $stat_uid, $file;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
else {
|
|
Packit |
fcad23 |
print "Could not create new file: $file.new\n"
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
close I;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
|