Martian Software, Inc. logo

<rundoc> v0.11

February 17, 2004

<rundoc> is an Ant task designed to help with the single-sourcing of program documentation. This task replaces special commands embedded within text files with their output in a specified format. Currently, only docbook format is supported.

For example, if a text file contains the text "@@rundoc:ls -l@@", and the task is called with the following code:

<taskdef name="rundoc" classname="com.martiansoftware.rundoc.RunDoc" classpath="rundoc-0.11.jar"/> <target name="testrundoc"> <rundoc prompt="[mlamb@morbo]$" format="docbook"> <fileset dir="." includes="test/*.txt"/> </rundoc> </target>

it might be replaced with something like this:

<prompt>[mlamb@morbo]$</prompt><command>ls -l</command> <computeroutput>total 40 drwxrwxr-x 3 mlamb mlamb 4096 Feb 15 18:45 build -rw-rw-r-- 1 mlamb mlamb 2365 Feb 15 19:22 build.xml drwxrwxr-x 2 mlamb mlamb 4096 Feb 15 18:51 CVS drwxrwxr-x 2 mlamb mlamb 4096 Feb 15 18:49 dist drwxrwxr-x 4 mlamb mlamb 4096 Feb 15 18:49 javadoc drwxrwxr-x 3 mlamb mlamb 4096 Feb 15 18:51 lib -rw-rw-r-- 1 mlamb mlamb 1481 Feb 1 19:09 LICENSE.txt -rw-rw-r-- 1 mlamb mlamb 336 Feb 1 20:02 README.txt drwxrwxr-x 4 mlamb mlamb 4096 Feb 15 18:51 src drwxrwxr-x 2 mlamb mlamb 4096 Feb 15 19:20 test </computeroutput>

Replacements are made in whatever files are included in the nested filesets; odds are you'll want to <copy> your files before running rundoc on the copies.

Rundoc supports nested <env> elements to pass environment variables to the executed process(es). See the documentation for <exec> for details on its use. Here's a simple example that's useful if rundoc will be running part of the current java project:

<target name="rundocs"> <!-- this example assumes that a temporary copy of your manual.xml docbook file has already been created in ${build} --> <rundoc prompt="[mlamb@hypno-toad]$" format="docbook"> <fileset file="${build}/manual.xml"/> <env key="CLASSPATH" value="${build}/> </rundoc> </target>

A typical usage scenario would be to put the @@rundoc:command@@ directly in the docbook source for your documentation between <screen> tags. The build process would then create a temporary copy of the docbook source, run <rundoc> against it, and finally run the modified docbook file through a formatter.

This task goes hand-in-hand with <snip>.

Multiple rundoc commands may be defined within a single file.

Possible Enhancements

I currently have no plans to implement these, but they would probably be useful to someone. Code contributions are welcome.

  • Provide a means to specify the directory in which the command should be run.
  • Support additional output formats (man? others?)

License

Copyright (c) 2004, Martian Software, Inc. All rights reserved.

This license is based upon the OSI-approved BSD License.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  • 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.
  • Neither the name of Martin Lamb nor the name of Martian Software, Inc. may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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.