Introducing ChatKeeper — a new tool from Martian Software that keeps your ChatGPT conversation history safe, searchable, and accessible forever. Try it for free!

<rundoc>: documentation single-sourcing ant task

Download v0.11 JavaDocs Source .zip v0.11 License

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.

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:

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.


Martian Software, Inc. footer logo