Newer
Older
Handbook / make-includes / include_content_files.pl
#!/usr/bin/perl

################################################################################
#
# File: $Id$
#
# When the derived XML source for a document we include the contents of
# all content files identified in an <@INC[]@> include tag. However, we
# can't just read all the tags willy-nilly, because some of them may be
# commented out. Commented out include tags should be ignored, because
# they may contain XML comments themselves, and nested XML comments are a
# no-no. This script solves the problem by simply stripping out all XML
# comments. This should have the side benefit of making the overall build
# process faster, because the XSLT processor doesn't have to process the
# comments.
#
################################################################################

use strict;

my $skip = 0;
my $paper_root = shift;
my $infilename = shift;

open INFILE,"<$infilename";

while (<INFILE>)
{
	# Switch skip mode on and off as we encounter open (<!--)
	# and close (-->) XML comment markers.
	$skip = 1 if /<!--/;
	$skip = 0 if /-->/;
	
	# Ignore everything while in skip mode.
	next if $skip || /-->/;
	
	# Otherwise, print stuff.
	if (/^(.*)<\@INC\[([^]]+)\]@>(.*)$/)
	{
		print "$1\n" . `cat $paper_root/$2` . "\n$3\n";
	}
	else
	{
		print;
	}
}

close INFILE;