#!/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 = "
\n";
$html_end_verbatim = "\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]