#! /usr/bin/perl # # Copyright (c) 2005-2006 Motoyuki Kasahara # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. Neither the name of the project nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # # html-include -- tiny file inclusion processoor for HTML. # # Usage: # html-include [-o output-file] [input-file] # # `html-include' extracts file inclusion directives in HTML, and output # the result. The following is file inclusion directive line that # `html-include' recognizes: # # # # Note that "[ \t]*$|) { # # This is file inclusion directive line. # if (++$i >= $max_nest_level) { die "$0: too deep inclusion\n"; } $in_files[$i] = {'handle' => new FileHandle, 'name' => search_file($1), 'lineno' => 0}; if (!$in_files[$i]->{handle}->open('<' . $in_files[$i]->{name})) { die "$0: failed to open the file, $!: " . $in_files[$i]->{name} . "\n"; } if ($comment_mode) { print $out_file->{handle}->printf("\n", $in_files[$i]->{name}, $in_files[$i]->{lineno} + 1); } } else { $out_file->{handle}->print($_, "\n"); } $out_file->{lineno}++; } $in_files[$i]->{handle}->close(); last if (--$i < 0); if ($comment_mode) { $out_file->{handle}->printf("\n", $in_files[$i]->{name}, $in_files[$i]->{lineno} + 1); } } sub search_file ($) { my ($file) = @_; foreach my $dir (@search_paths) { return "$dir/$file" if (-r "$dir/$file"); } return $file; }