#!/usr/bin/perl
#
# Copyright (C) 1995 Andrew Ford
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# cfdoc -- Simple utility to document a cfengine configuration file
# (or other configuration file that uses '#' in the first
# line to indicate comments).
#
# Author:
# Andrew Ford Email: andrew@icarus.demon.co.uk
# Independent Software Consultant WWW: http://www.nhbs.co.uk/aford/aford.html
# "Brittany", Wells Road, Tel: +44 1452 770836 Fax: 770835
# Eastcombe, Stroud, GL6 7EE, GB Mobile: +44 385 258278
#
# Comments starting in column 0 are regarded as text to be typeset (this
# can contain arbitrary markup), while other lines are regarded as code
# to be set in a verbatim environment. The default comment indicator is
# '#' and verbatim environments are enclosed in \begin{verbatim} and
# \end{verbatim} pairs, but this behaviour can be overridden with command
# line options.
#
&parse_cmd_line;
&format_file;
# Format a file
sub format_file {
while (<>) {
# Start state - look for "#!/" on first line and ignore if found.
next if /^\#!(.*)/ && !$state++;
chop if /\n$/;
# Lines that start with a '#' in the first column are printed
# without the '#'
# If the previous line was not part of a comment then the
# currently open verbatim environment is closed.
if (/^$comment_marker\s*(.*)/) {
if ($in_code) {
print($end_verbatim);
$in_code = 0;
}
print("$1\n");
$blank_lines = 0;
}
# Other lines are printed in a verbatim environment (which
# is opened if not already open).
# Blank lines are counted and only output if they apear within
# a block of code.
else {
$blank_lines++, next if /^\s*$/;
if (!$in_code) {
print($start_verbatim);
$in_code = 1;
} elsif ($blank_lines) {
foreach $i (1 .. $blank_lines) {
print("\n");
}
$blank_lines = 0;
}
print("$_\n");
}
}
print $end_verbatim if $in_code;
}
# Parse the command line
sub parse_cmd_line {
$comment_marker = "#";
$latex_start_verbatim = "\\begin{verbatim}\n";
$latex_end_verbatim = "\\end{verbatim}\n";
$html_start_verbatim = "<PRE>\n";
$html_end_verbatim = "</PRE>\n";
$texinfo_start_verbatim = "\@smallexample\n";
$texinfo_end_verbatim = "\@end smallexample\n";
$start_verbatim = $latex_start_verbatim;
$end_verbatim = $latex_end_verbatim;
$usage = "usage: $0 [options] <file\n" .
" -c comment_marker string indicating comment line (default is '#')\n" .
" -l language markup language to use (default is LaTeX)\n" .
" -s start-marker markup for start of code (default \\begin{verbatim})\n" .
" -e end-marker markup for end of code (default \\end{verbatim})\n" .
"Known languages are \"LaTeX\" (default), \"HTML\" and \"texinfo\".\n";
require "getopts.pl";
&Getopts('c:l:s:e:') || die $usage;
if (defined($opt_c)) {
$comment_marker = $opt_c;
}
if (defined($opt_l)) {
if ($opt_l eq "latex" || $opt_l eq "LaTeX") {
$start_verbatim = $latex_start_verbatim;
$end_verbatim = $latex_end_verbatim;
} elsif ($opt_l eq "html" || $opt_l eq "HTML") {
$start_verbatim = $html_start_verbatim;
$end_verbatim = $html_end_verbatim;
} elsif ($opt_l eq "texinfo" || $opt_l eq "TEXINFO") {
$start_verbatim = $texinfo_start_verbatim;
$end_verbatim = $texinfo_end_verbatim;
} else {
die "Unknown markup language: \"$opt_l\".\n" . $usage;
}
}
if (defined($opt_s)) {
$start_verbatim = $opt_s;
}
if (defined($opt_e)) {
$end_verbatim = $opt_e;
}
}
syntax highlighted by Code2HTML, v. 0.9.1