summaryrefslogtreecommitdiff
path: root/libs/FLib/TableLayout
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2009-03-04 17:31:40 +0000
committerPaul Buetow <paul@buetow.org>2009-03-04 17:31:40 +0000
commit9129838d208c0df7293e5b757661125545cd6df8 (patch)
treecde0b095a7ad120b68450f705d8fc16d278bfff8 /libs/FLib/TableLayout
parente2c501ba5aaffd9d5ace6bc1706353d9f83329b7 (diff)
flib added
Diffstat (limited to 'libs/FLib/TableLayout')
-rw-r--r--libs/FLib/TableLayout/License.txt123
-rw-r--r--libs/FLib/TableLayout/README.txt34
-rw-r--r--libs/FLib/TableLayout/build.xml120
-rw-r--r--libs/FLib/TableLayout/doc-templates/License.html180
-rw-r--r--libs/FLib/TableLayout/doc/example/Example1.java180
-rw-r--r--libs/FLib/TableLayout/doc/example/TableExplorer.java1230
-rw-r--r--libs/FLib/TableLayout/doc/examples.html76
-rw-r--r--libs/FLib/TableLayout/doc/features.html55
-rw-r--r--libs/FLib/TableLayout/doc/images/Logo.pngbin0 -> 62326 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/screenshot1.pngbin0 -> 2523 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/screenshot2.pngbin0 -> 3997 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/tutorial1.pngbin0 -> 1245 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/tutorial2.pngbin0 -> 1724 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/tutorial3.pngbin0 -> 1797 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/tutorial4.pngbin0 -> 1765 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/tutorial5.pngbin0 -> 1433 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/tutorial6.pngbin0 -> 1048 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/tutorial7.pngbin0 -> 821 bytes
-rw-r--r--libs/FLib/TableLayout/doc/images/tutorial8.pngbin0 -> 923 bytes
-rw-r--r--libs/FLib/TableLayout/doc/index.html64
-rw-r--r--libs/FLib/TableLayout/doc/resources.html68
-rw-r--r--libs/FLib/TableLayout/doc/screenshots.html48
-rw-r--r--libs/FLib/TableLayout/doc/stylesheet.css48
-rw-r--r--libs/FLib/TableLayout/doc/tutorial.html338
-rw-r--r--libs/FLib/TableLayout/org/freixas/tablelayout/TableLayout.java2049
-rw-r--r--libs/FLib/TableLayout/project.dtd5193
26 files changed, 9806 insertions, 0 deletions
diff --git a/libs/FLib/TableLayout/License.txt b/libs/FLib/TableLayout/License.txt
new file mode 100644
index 0000000..be12e9d
--- /dev/null
+++ b/libs/FLib/TableLayout/License.txt
@@ -0,0 +1,123 @@
+ Artistic License
+
+Preamble
+
+The intent of this document is to state the conditions under which a
+Package may be copied, such that the Copyright Holder maintains some
+semblance of artistic control over the development of the package,
+while giving the users of the package the right to use and distribute
+the Package in a more-or-less customary fashion, plus the right to
+make reasonable modifications.
+
+Definitions:
+
+ * "Package" refers to the collection of files distributed by the
+ Copyright Holder, and derivatives of that collection of files
+ created through textual modification.
+
+ * "Standard Version" refers to such a Package if it has not been
+ modified, or has been modified in accordance with the wishes of
+ the Copyright Holder.
+
+ * "Copyright Holder" is whoever is named in the copyright or
+ copyrights for the package.
+
+ * "You" is you, if you're thinking about copying or distributing
+ this Package.
+
+ * "Reasonable copying fee" is whatever you can justify on the
+ basis of media cost, duplication charges, time of people
+ involved, and so on. (You will not be required to justify it to
+ the Copyright Holder, but only to the computing community at
+ large as a market that must bear the fee.)
+
+ * "Freely Available" means that no fee is charged for the item
+ itself, though there may be fees involved in handling the item.
+ It also means that recipients of the item may redistribute it
+ under the same conditions they received it.
+
+1. You may make and give away verbatim copies of the source form of
+ the Standard Version of this Package without restriction, provided
+ that you duplicate all of the original copyright notices and
+ associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications
+ derived from the Public Domain or from the Copyright Holder. A
+ Package modified in such a way shall still be considered the
+ Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way,
+ provided that you insert a prominent notice in each changed file
+ stating how and when you changed that file, and provided that you
+ do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise make
+ them Freely Available, such as by posting said modifications to
+ Usenet or an equivalent medium, or placing the modifications on
+ a major archive site such as ftp.uu.net, or by allowing the
+ Copyright Holder to include your modifications in the Standard
+ Version of the Package.
+
+ b) use the modified Package only within your corporation or
+ organization.
+
+ c) rename any non-standard executables so the names do not
+ conflict with standard executables, which must also be
+ provided, and provide a separate manual page for each
+ non-standard executable that clearly documents how it differs
+ from the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or
+ executable form, provided that you do at least ONE of the
+ following:
+
+ a) distribute a Standard Version of the executables and library
+ files, together with instructions (in the manual page or
+ equivalent) on where to get the Standard Version.
+
+ b) accompany the distribution with the machine-readable source of
+ the Package with your modifications.
+
+ c) accompany any non-standard executables with their corresponding
+ Standard Version executables, giving the non-standard
+ executables non-standard names, and clearly documenting the
+ differences in manual pages (or equivalent), together with
+ instructions on where to get the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of
+ this Package. You may charge any fee you choose for support of this
+ Package. You may not charge a fee for this Package itself. However,
+ you may distribute this Package in aggregate with other (possibly
+ commercial) programs as part of a larger (possibly commercial)
+ software distribution provided that you do not advertise this
+ Package as a product of your own.
+
+6. The scripts and library files supplied as input to or produced as
+ output from the programs of this Package do not automatically fall
+ under the copyright of this Package, but belong to whomever
+ generated them, and may be sold commercially, and may be aggregated
+ with this Package.
+
+7. C or perl subroutines supplied by you and linked into this Package
+ shall not be considered part of this Package.
+
+8. Aggregation of this Package with a commercial distribution is
+ always permitted provided that the use of this Package is embedded;
+ that is, when no overt attempt is made to make this Package's
+ interfaces visible to the end user of the commercial distribution.
+ Such use shall not be construed as a distribution of this Package.
+
+9. The name of the Copyright Holder may not be used to endorse or
+ promote products derived from this software without specific prior
+ written permission.
+
+10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE.
+
+The End
diff --git a/libs/FLib/TableLayout/README.txt b/libs/FLib/TableLayout/README.txt
new file mode 100644
index 0000000..6a3ac6e
--- /dev/null
+++ b/libs/FLib/TableLayout/README.txt
@@ -0,0 +1,34 @@
+ TableLayout
+
+This package provides a TableLayout manager for use in Java programs.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the Artistic License. You should have received a
+copy of the Artistic License along with this program (in file
+License.txt). If not, a copy is available at
+
+ http://opensource.org/licenses/artistic-license.php
+
+To build it you'll need Ant. I used version 1.6.2. Use
+
+ ant all
+
+This will create build/tablelayout.jar. To create the API
+documentation, use
+
+ ant javadoc
+
+To view all the documentation, view doc/index.html.
+
+There is a tutorial in doc/tutorial.html. There is also a sample Java
+program that uses the TableLayout class. You can build and run this
+program with
+
+ ant runExample1
+
+In addition, there is a tool you can use to practice using the
+TableLayout. It's called TableExplorer and follows the approach of a
+similar tool written for the GridBagLayout. Build and run this program
+with
+
+ ant runTableExplorer
diff --git a/libs/FLib/TableLayout/build.xml b/libs/FLib/TableLayout/build.xml
new file mode 100644
index 0000000..99384a6
--- /dev/null
+++ b/libs/FLib/TableLayout/build.xml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE project PUBLIC "-//ANT//DTD project//EN" "project.dtd">
+
+<project basedir="." default="all" name="TableLayout">
+
+ <!-- Set up the classpath for compilation and execution -->
+
+ <path id="project.class.path">
+ <pathelement location="."/>
+ </path>
+
+ <!-- Common settings for all targets -->
+
+ <target name="init" description="Initialize.">
+ <tstamp/>
+ </target>
+
+ <!-- Compile everything -->
+
+ <target depends="init" name="compile" description="Compile the project.">
+ <javac debug="true" deprecation="true" destdir="." srcdir=".">
+ <include name="org/freixas/**"/>
+ <include name="doc/example/**"/>
+ <classpath refid="project.class.path"/>
+ </javac>
+ </target>
+
+ <!-- Place the class files in a jar file -->
+
+ <target depends="compile" name="jar" description="Create a jar file.">
+ <mkdir dir="build"/>
+ <jar basedir="." compress="false" jarfile="build/tablelayout.jar">
+ <manifest>
+ <attribute name="Built-By" value="${user.name}"/>
+ <section name="TableLayout">
+ <attribute name="Specification-Title" value="TableLayout Library"/>
+ <attribute name="Specification-Version" value="${version}"/>
+ <attribute name="Implementation-Title" value="TableLayout"/>
+ <attribute name="Implementation-Version" value="${version} ${TODAY}"/>
+ </section>
+ </manifest>
+ <exclude name="**/*.java"/>
+ <exclude name="doc"/>
+ <exclude name="build"/>
+ <include name="org/freixas/tablelayout/*.class"/>
+ <include name="**/*.gif"/>
+ <include name="**/*.properties"/>
+ </jar>
+ </target>
+
+ <!-- Build all -->
+
+ <target depends="jar" name="all" description="Build everything.">
+ <echo message="TableLayout library built."/>
+ </target>
+
+ <!-- Run Example1 -->
+
+ <target depends="compile" name="runExample1" description="Run Example1.">
+ <java classname="doc.example.Example1" failonerror="true" fork="true">
+ <classpath refid="project.class.path"/>
+ </java>
+ </target>
+
+ <!-- Run TableExplorer -->
+
+ <target depends="compile" name="runTableExplorer" description="Run TableExplorer.">
+ <java classname="doc.example.TableExplorer" failonerror="true" fork="true">
+ <classpath refid="project.class.path"/>
+ </java>
+ </target>
+
+ <!-- Build the documentation -->
+
+ <target depends="init" name="javadoc" description="Javadoc for TableLayout.">
+ <mkdir dir="doc/api"/>
+ <copy todir="doc/api">
+ <fileset dir="doc-templates">
+ <include name="**/*.html"/>
+ </fileset>
+ </copy>
+ <javadoc
+ sourcepath="org"
+ destdir="doc/api"
+ use="true"
+ author="true"
+ windowtitle="TableLayout"
+ footer="&lt;small&gt;Copyright &#169; 2000-2005 Credence Systems Corporation&lt;br&gt;Licensed under the &lt;a href='{@docRoot}/License.html' target='_top'&gt;Artistic License&lt;/a&gt;&lt;/small&gt;">
+ <classpath refid="project.class.path"/>
+ <packageset dir=".">
+ <include name="org/freixas/**"/>
+ </packageset>
+ <link href="http://java.sun.com/j2se/1.5/docs/api/" />
+ </javadoc>
+ </target>
+
+ <!-- Clean the build tree -->
+
+ <target depends="init" name="clean" description="Clean all build products.">
+ <delete>
+ <fileset dir="org/freixas">
+ <include name="**/*.class"/>
+ </fileset>
+ </delete>
+ <delete>
+ <fileset dir="doc/example">
+ <include name="**/*.class"/>
+ </fileset>
+ </delete>
+ <delete dir="build"/>
+ <delete dir="doc/api"/>
+ </target>
+
+ <!-- Generate a DTD for this buildfile -->
+
+ <target name="dtd" description="Generate a DTD">
+ <antstructure output="project.dtd"/>
+ </target>
+
+</project>
diff --git a/libs/FLib/TableLayout/doc-templates/License.html b/libs/FLib/TableLayout/doc-templates/License.html
new file mode 100644
index 0000000..d5fbdc1
--- /dev/null
+++ b/libs/FLib/TableLayout/doc-templates/License.html
@@ -0,0 +1,180 @@
+<html>
+ <style type="text/css">
+ body {
+ font-family: Arial, Helvetica, sans-serif;
+ }
+
+ h1 {
+ text-align: center;
+ font-weight: bold;
+ font-size: 145%;
+ }
+
+ h2 {
+ text-align: left;
+ font-weight: bold;
+ font-size: 120%;
+ }
+
+ ol {
+ list-style-type: decimal;
+ }
+
+ ol ol {
+ list-style-type: lower-alpha;
+ }
+
+ li {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ }
+
+ </style>
+</head>
+
+ <body>
+
+ <h1>Artistic License</h1>
+
+ <h2>Preamble</h2>
+
+ <p>The intent of this document is to state the conditions under which a
+ Package may be copied, such that the Copyright Holder maintains some
+ semblance of artistic control over the development of the package,
+ while giving the users of the package the right to use and distribute
+ the Package in a more-or-less customary fashion, plus the right to
+ make reasonable modifications.</p>
+
+ <h2>Definitions:</h2>
+
+ <ul>
+
+ <li>"Package" refers to the collection of files distributed by the
+ Copyright Holder, and derivatives of that collection of files created
+ through textual modification.</li>
+
+ <li>"Standard Version" refers to such a Package if it has not been
+ modified, or has been modified in accordance with the wishes of the
+ Copyright Holder.</li>
+
+ <li>"Copyright Holder" is whoever is named in the copyright or
+ copyrights for the package.</li>
+
+ <li>"You" is you, if you're thinking about copying or distributing
+ this Package.</li>
+
+ <li>"Reasonable copying fee" is whatever you can justify on the basis
+ of media cost, duplication charges, time of people involved, and so
+ on. (You will not be required to justify it to the Copyright Holder,
+ but only to the computing community at large as a market that must
+ bear the fee.)</li>
+
+ <li>"Freely Available" means that no fee is charged for the item
+ itself, though there may be fees involved in handling the item. It
+ also means that recipients of the item may redistribute it under the
+ same conditions they received it.</li>
+
+ </ul>
+
+ <hr>
+
+ <ol>
+
+ <li>You may make and give away verbatim copies of the source form of
+ the Standard Version of this Package without restriction, provided
+ that you duplicate all of the original copyright notices and
+ associated disclaimers.</li>
+
+ <li>You may apply bug fixes, portability fixes and other modifications
+ derived from the Public Domain or from the Copyright Holder. A Package
+ modified in such a way shall still be considered the Standard
+ Version.</li>
+
+ <li>You may otherwise modify your copy of this Package in any way,
+ provided that you insert a prominent notice in each changed file
+ stating how and when you changed that file, and provided that you do
+ at least ONE of the following:
+
+ <ol>
+
+ <li>place your modifications in the Public Domain or otherwise make
+ them Freely Available, such as by posting said modifications to Usenet
+ or an equivalent medium, or placing the modifications on a major
+ archive site such as ftp.uu.net, or by allowing the Copyright Holder
+ to include your modifications in the Standard Version of the Package.</li>
+
+ <li>use the modified Package only within your corporation or
+ organization.</li>
+
+ <li>rename any non-standard executables so the names do not conflict
+ with standard executables, which must also be provided, and provide a
+ separate manual page for each non-standard executable that clearly
+ documents how it differs from the Standard Version.</li>
+
+ <li>make other distribution arrangements with the Copyright
+ Holder.</li>
+
+ </ol>
+ </li>
+
+ <li>You may distribute the programs of this Package in object code or
+ executable form, provided that you do at least ONE of the following:
+
+ <ol>
+
+ <li>distribute a Standard Version of the executables and library
+ files, together with instructions (in the manual page or equivalent)
+ on where to get the Standard Version.</li>
+
+ <li>accompany the distribution with the machine-readable source of the
+ Package with your modifications.</li>
+
+ <li>accompany any non-standard executables with their corresponding
+ Standard Version executables, giving the non-standard executables
+ non-standard names, and clearly documenting the differences in manual
+ pages (or equivalent), together with instructions on where to get the
+ Standard Version.</li>
+
+ <li>make other distribution arrangements with the Copyright
+ Holder.</li>
+
+ </ol>
+ </li>
+
+ <li>You may charge a reasonable copying fee for any distribution of
+ this Package. You may charge any fee you choose for support of this
+ Package. You may not charge a fee for this Package itself. However,
+ you may distribute this Package in aggregate with other (possibly
+ commercial) programs as part of a larger (possibly commercial)
+ software distribution provided that you do not advertise this Package
+ as a product of your own.</li>
+
+ <li>The scripts and library files supplied as input to or produced as
+ output from the programs of this Package do not automatically fall
+ under the copyright of this Package, but belong to whomever generated
+ them, and may be sold commercially, and may be aggregatedwith this
+ Package.</li>
+
+ <li>r perl subroutines supplied by you and linked into this Package
+ shall not be considered part of this Package.</li>
+
+ <li>Aggregation of this Package with a commercial distribution is
+ always permitted provided that the use of this Package is embedded;
+ that is, when no overt attempt is made to make this Package's
+ interfaces visible to the end user of the commercial distribution.
+ Such use shall not be construed as a distribution of this Package.</li>
+
+ <li>The name of the Copyright Holder may not be used to endorse or
+ promote products derived from this software without specific prior
+ written permission.</li>
+
+ <li>THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE.</li>
+
+ </ol>
+
+ <p>The End</p>
+ </body>
+</html>
diff --git a/libs/FLib/TableLayout/doc/example/Example1.java b/libs/FLib/TableLayout/doc/example/Example1.java
new file mode 100644
index 0000000..797d1e7
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/example/Example1.java
@@ -0,0 +1,180 @@
+//**********************************************************************
+// Package
+//**********************************************************************
+
+package doc.example;
+
+//**********************************************************************
+// Import list
+//**********************************************************************
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+
+import org.freixas.tablelayout.*;
+
+/**
+ * This example compares the GridBagLayout to the TableLayout. The
+ * same layout is created using each layout manager. The layouts are
+ * displayed in their own window.
+ *
+ * @author Antonio Freixas
+ */
+
+// Copyright © 2004 Antonio Freixas
+// All Rights Reserved.
+
+public class Example1
+{
+
+//**********************************************************************
+// Public Constants
+//**********************************************************************
+
+//**********************************************************************
+// Private Constants
+//**********************************************************************
+
+//**********************************************************************
+// Private Members
+//**********************************************************************
+
+//**********************************************************************
+// main
+//**********************************************************************
+
+public static void
+main(
+ String[] args)
+{
+ new Example1();
+}
+
+//**********************************************************************
+// Constructors
+//**********************************************************************
+
+/**
+ * Create the two windows and display them.
+ */
+
+public
+Example1()
+{
+ JFrame frame1 = createGridBagLayout();
+ JFrame frame2 = createTableLayout();
+ frame1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+ frame2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+ frame1.pack();
+ frame2.pack();
+ frame1.setLocation(10, 100);
+ frame2.setLocation(400, 100);
+ frame1.setVisible(true);
+ frame2.setVisible(true);
+}
+
+//**********************************************************************
+// Private
+//**********************************************************************
+
+/**
+ * Create the layout using GridBagLayout. This code comes from the API
+ * page for GridBagLayout.
+ *
+ * @return The JFrame containing the layout.
+ */
+
+public JFrame
+createGridBagLayout()
+{
+ JFrame frame = new JFrame("GridBagLayout");
+
+ GridBagLayout gridbag = new GridBagLayout();
+ GridBagConstraints c = new GridBagConstraints();
+
+ JPanel panel = new JPanel(gridbag);
+ frame.getContentPane().add(panel);
+
+ c.fill = GridBagConstraints.BOTH;
+ c.weightx = 1.0;
+ makebutton(panel, "Button1", gridbag, c);
+ makebutton(panel, "Button2", gridbag, c);
+ makebutton(panel, "Button3", gridbag, c);
+
+ c.gridwidth = GridBagConstraints.REMAINDER; //end row
+ makebutton(panel, "Button4", gridbag, c);
+
+ c.weightx = 0.0; //reset to the default
+ makebutton(panel, "Button5", gridbag, c); //another row
+
+ c.gridwidth = GridBagConstraints.RELATIVE; //next-to-last in row
+ makebutton(panel, "Button6", gridbag, c);
+
+ c.gridwidth = GridBagConstraints.REMAINDER; //end row
+ makebutton(panel, "Button7", gridbag, c);
+
+ c.gridwidth = 1; //reset to the default
+ c.gridheight = 2;
+ c.weighty = 1.0;
+ makebutton(panel, "Button8", gridbag, c);
+
+ c.weighty = 0.0; //reset to the default
+ c.gridwidth = GridBagConstraints.REMAINDER; //end row
+ c.gridheight = 1; //reset to the default
+ makebutton(panel, "Button9", gridbag, c);
+ makebutton(panel, "Button10", gridbag, c);
+
+ return frame;
+}
+
+/**
+ * Helper method for createGridBagLayout().
+ *
+ * @param panel The panel to add the button to.
+ * @param name The button's label.
+ * @param gridbag The GridBagLayout to use.
+ * @param c The constraints to use.
+ */
+
+private void
+makebutton(
+ JPanel panel,
+ String name,
+ GridBagLayout gridbag,
+ GridBagConstraints c)
+{
+ JButton button = new JButton(name);
+ gridbag.setConstraints(button, c);
+ panel.add(button);
+}
+
+/**
+ * Create the layout using TableLayout.
+ *
+ * @return The JFrame containing the layout.
+ */
+
+public JFrame
+createTableLayout()
+{
+ JFrame frame = new JFrame("TableLayout");
+
+ JPanel panel = new JPanel(new TableLayout("cols=4"));
+ frame.getContentPane().add(panel);
+
+ panel.add(new JButton("Button1"));
+ panel.add(new JButton("Button2"));
+ panel.add(new JButton("Button3"));
+ panel.add(new JButton("Button4"));
+ panel.add(new JButton("Button5"), "cspan=4");
+ panel.add(new JButton("Button6"), "cspan=3");
+ panel.add(new JButton("Button7"));
+ panel.add(new JButton("Button8"), "rspan=2");
+ panel.add(new JButton("Button9"), "cspan=3");
+ panel.add(new JButton("Button10"), "cspan=3 rweight=1");
+
+ return frame;
+}
+
+}
diff --git a/libs/FLib/TableLayout/doc/example/TableExplorer.java b/libs/FLib/TableLayout/doc/example/TableExplorer.java
new file mode 100644
index 0000000..d66c497
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/example/TableExplorer.java
@@ -0,0 +1,1230 @@
+//**********************************************************************
+// Package
+//**********************************************************************
+
+package doc.example;
+
+//**********************************************************************
+// Import list
+//**********************************************************************
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import javax.swing.event.*;
+import java.util.*;
+
+import org.freixas.tablelayout.*;
+
+/**
+ * This class allows a user to dynamically alter a set of components
+ * using the TableLayout class to explore the layout's abilities.
+ *
+ * @author Antonio Freixas
+ */
+
+public class TableExplorer
+ extends JFrame
+ implements CaretListener, ActionListener, ListSelectionListener,
+ FocusListener, MenuListener
+{
+
+//**********************************************************************
+// Constants
+//**********************************************************************
+
+static final String[] tablePositionList = {
+ "Default",
+ "tn", "tne", "tnw",
+ "ts", "tse", "tsw",
+ "te", "tw", "tc"
+};
+
+static final String[] tableFillList = {
+ "Default", "tfh", "tfv", "tf"
+};
+
+static final String[] positionList = {
+ "Default",
+ "n", "ne", "nw",
+ "s", "se", "sw",
+ "e", "w", "c"
+};
+
+static final String[] fillList = {
+ "Default", "fh", "fv", "f"
+};
+
+//**********************************************************************
+// Fields
+//**********************************************************************
+
+JFrame layout;
+JPanel layoutPane;
+JFrame code;
+JPanel codePane;
+
+HashMap compHash = new HashMap();
+HashMap attrHash = new HashMap();
+
+JMenu fileMenu;
+JMenu windowMenu;
+JMenu helpMenu;
+
+JMenuItem exitItem;
+JMenuItem previewItem;
+JMenuItem packItem;
+JMenuItem codeItem;
+JMenuItem generateItem;
+JMenuItem aboutItem;
+
+JButton upButton;
+JButton downButton;
+JButton removeButton;
+JButton addButton;
+
+JList compList;
+DefaultListModel compListModel;
+JTextField compEntryField;
+
+JTextField columnsField;
+JTextField[] tableInsetFields = new JTextField[4];
+JTextField rowGapField;
+JTextField colGapField;
+JComboBox tablePositionBox;
+JComboBox tableFillBox;
+
+JTextField[] tableCellInsetFields = new JTextField[4];
+JComboBox tableCellPositionBox;
+JComboBox tableCellFillBox;
+JTextField tableRowWeightField;
+JTextField tableColWeightField;
+
+JTextField tableAttributesField;
+
+JTextField[] insetFields = new JTextField[4];
+JComboBox positionBox;
+JComboBox fillBox;
+JTextField rowWeightField;
+JTextField colWeightField;
+JTextField colPositionField;
+JTextField skipCellsField;
+JTextField rowSpanField;
+JTextField colSpanField;
+
+JTextField cellAttributesField;
+
+JTextArea codeTextArea;
+JScrollPane codeTextScroll;
+
+String textWhenFocusGained = null;
+boolean ignoreEvents = false;
+
+TableAttributes tableAttributes = null;
+
+//**********************************************************************
+// Main
+//**********************************************************************
+
+static public void
+main(
+ String[] args)
+{
+ new TableExplorer();
+}
+
+//**********************************************************************
+// Constructors
+//**********************************************************************
+
+/**
+ * Create the TableExplorer JFrame.
+ */
+
+TableExplorer()
+{
+ super("TableExplorer");
+
+ // Table with three columns
+ // Row 1: Buttons for managing component list
+ // Row 2: Component list
+ // Row 3: Attribute settings
+
+ setJMenuBar(createJMenuBar());
+
+ getContentPane().setLayout(
+ new TableLayout("cols=3 cgap=5 " +
+ "titop=2 tibottom=2 tileft=2 tiright=2"));
+
+ getContentPane().add(createButtonPane());
+ getContentPane().add(createListPane(), "cweight=1");
+ getContentPane().add(createAttributePane(), "n fh");
+
+ pack();
+ setVisible(true);
+
+ layout = new JFrame("Table Layout Preview");
+ layoutPane = (JPanel)layout.getContentPane();
+ layoutPane.setName("DEBUG");
+ layoutPane.setLayout(new TableLayout());
+ layoutPane.setOpaque(true);
+
+ code = new JFrame("Table Layout Code");
+ codePane = createCodePane();
+ code.setContentPane(codePane);
+ code.pack();
+
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+ compEntryField.grabFocus();
+
+ layout.setSize(300, 300);
+}
+
+//**********************************************************************
+// Public
+//**********************************************************************
+
+public void
+caretUpdate(
+ CaretEvent e)
+{
+ if (e.getSource() == compEntryField) {
+ String text = compEntryField.getText();
+ addButton.setEnabled(text.length() > 0);
+ }
+}
+
+public void
+actionPerformed(
+ ActionEvent e)
+{
+ if (ignoreEvents) return;
+
+ if (e.getSource() == addButton ||
+ e.getSource() == compEntryField) {
+
+ String name = compEntryField.getText();
+
+ JButton button = new JButton(name);
+ addToLayout(button);
+ compHash.put(name, button);
+ attrHash.put(name, new Attributes());
+ compListModel.addElement(name);
+ compEntryField.setText("");
+ addButton.setEnabled(false);
+ }
+
+ else if (e.getSource() == removeButton) {
+ String name = (String)compList.getSelectedValue();
+ if (name != null) {
+ Component c = (Component)compHash.get(name);
+ layoutPane.remove(c);
+ compHash.remove(name);
+ attrHash.remove(name);
+ compListModel.removeElement(name);
+ removeButton.setEnabled(false);
+ layoutPane.revalidate();
+ }
+ }
+
+ else if (e.getSource() == upButton) {
+ int index = compList.getSelectedIndex();
+ if (index > 0) {
+ String name = (String)compListModel.elementAt(index);
+ compListModel.removeElementAt(index);
+ compListModel.insertElementAt(name, index - 1);
+ compList.setSelectedIndex(index - 1);
+
+ Component c = (Component)compHash.get(name);
+ Attributes a = (Attributes)attrHash.get(name);
+ layoutPane.remove(index);
+ layoutPane.add(c, a.toString(), index - 1);
+ layoutPane.revalidate();
+ }
+ }
+
+ else if (e.getSource() == downButton) {
+ int index = compList.getSelectedIndex();
+ if (index > -1 && index < compListModel.getSize() - 1) {
+ String name = (String)compListModel.elementAt(index);
+ compListModel.removeElementAt(index);
+ compListModel.insertElementAt(name, index + 1);
+ compList.setSelectedIndex(index + 1);
+
+ Component c = (Component)compHash.get(name);
+ Attributes a = (Attributes)attrHash.get(name);
+ layoutPane.remove(index);
+ layoutPane.add(c, a.toString(), index + 1);
+ layoutPane.revalidate();
+ }
+ }
+
+ else if (e.getSource() == insetFields[0] ||
+ e.getSource() == insetFields[1] ||
+ e.getSource() == insetFields[2] ||
+ e.getSource() == insetFields[3] ||
+ e.getSource() == positionBox ||
+ e.getSource() == fillBox ||
+ e.getSource() == rowWeightField ||
+ e.getSource() == colWeightField ||
+ e.getSource() == colPositionField ||
+ e.getSource() == skipCellsField ||
+ e.getSource() == rowSpanField ||
+ e.getSource() == colSpanField) {
+ String name = (String)compList.getSelectedValue();
+ changeLayout(name);
+ }
+
+ else if (e.getSource() == columnsField ||
+ e.getSource() == tableInsetFields[0] ||
+ e.getSource() == tableInsetFields[1] ||
+ e.getSource() == tableInsetFields[2] ||
+ e.getSource() == tableInsetFields[3] ||
+ e.getSource() == rowGapField ||
+ e.getSource() == colGapField ||
+ e.getSource() == tablePositionBox ||
+ e.getSource() == tableFillBox ||
+ e.getSource() == tableCellInsetFields[0] ||
+ e.getSource() == tableCellInsetFields[1] ||
+ e.getSource() == tableCellInsetFields[2] ||
+ e.getSource() == tableCellInsetFields[3] ||
+ e.getSource() == tableCellPositionBox ||
+ e.getSource() == tableCellFillBox ||
+ e.getSource() == tableRowWeightField ||
+ e.getSource() == tableColWeightField) {
+ changeTableLayout();
+ }
+
+ else if (e.getSource() == exitItem) {
+ System.exit(0);
+ }
+
+ else if (e.getSource() == previewItem) {
+ if (layout.isVisible()) {
+ layout.setVisible(false);
+ }
+ else {
+ layout.setVisible(true);
+ }
+ }
+
+ else if (e.getSource() == packItem) {
+ layout.pack();
+ }
+
+ else if (e.getSource() == codeItem) {
+ if (code.isVisible()) {
+ code.setVisible(false);
+ }
+ else {
+ generateCode();
+ code.setVisible(true);
+ }
+ }
+
+ else if (e.getSource() == generateItem) {
+ generateCode();
+ }
+
+ else if (e.getSource() == aboutItem) {
+ JOptionPane.showMessageDialog(this,
+ "<html>" +
+ "<h1><font face=Dialog>Table Explorer V1.0</font></h1>" +
+ "<font face=Dialog>Written by Antonio Freixas<br>" +
+ "<a src=\"mailto:tony@freixas.org\">tonyf@freixas.org</a>",
+ "About Table Explorer</font>",
+ JOptionPane.INFORMATION_MESSAGE);
+ }
+}
+
+public void
+valueChanged(
+ ListSelectionEvent e)
+{
+ if (ignoreEvents) return;
+
+ if (e.getSource() == compList) {
+ String name = (String)compList.getSelectedValue();
+ int index = compList.getSelectedIndex();
+
+ boolean hasObject = name != null;
+
+ removeButton.setEnabled(hasObject);
+ upButton.setEnabled(hasObject && index != 0);
+ downButton.setEnabled(hasObject &&
+ index != compListModel.getSize() - 1);
+ enableAttributes(hasObject);
+
+ if (hasObject) {
+ Attributes attributes = (Attributes)attrHash.get(name);
+ setAttributes(attributes);
+ }
+ }
+}
+
+public void
+focusGained(
+ FocusEvent e)
+{
+ if (e.getSource() == insetFields[0] ||
+ e.getSource() == insetFields[1] ||
+ e.getSource() == insetFields[2] ||
+ e.getSource() == insetFields[3] ||
+ e.getSource() == rowWeightField ||
+ e.getSource() == colWeightField ||
+ e.getSource() == colPositionField ||
+ e.getSource() == skipCellsField ||
+ e.getSource() == rowSpanField ||
+ e.getSource() == colSpanField||
+ e.getSource() == columnsField ||
+ e.getSource() == tableInsetFields[0] ||
+ e.getSource() == tableInsetFields[1] ||
+ e.getSource() == tableInsetFields[2] ||
+ e.getSource() == tableInsetFields[3] ||
+ e.getSource() == rowGapField ||
+ e.getSource() == colGapField ||
+ e.getSource() == tableCellInsetFields[0] ||
+ e.getSource() == tableCellInsetFields[1] ||
+ e.getSource() == tableCellInsetFields[2] ||
+ e.getSource() == tableCellInsetFields[3] ||
+ e.getSource() == tableRowWeightField ||
+ e.getSource() == tableColWeightField) {
+
+ JTextField field = (JTextField)e.getSource();
+ textWhenFocusGained = field.getText();
+ }
+ else if (e.getSource() == positionBox ||
+ e.getSource() == fillBox ||
+ e.getSource() == tablePositionBox ||
+ e.getSource() == tableFillBox ||
+ e.getSource() == tableCellPositionBox ||
+ e.getSource() == tableCellFillBox) {
+
+ JComboBox box = (JComboBox)e.getSource();
+ textWhenFocusGained = (String)box.getSelectedItem();
+ }
+ else {
+ textWhenFocusGained = null;
+ }
+}
+
+public void
+focusLost(
+ FocusEvent e)
+{
+ if (textWhenFocusGained != null) {
+ if (e.getSource() == insetFields[0] ||
+ e.getSource() == insetFields[1] ||
+ e.getSource() == insetFields[2] ||
+ e.getSource() == insetFields[3] ||
+ e.getSource() == rowWeightField ||
+ e.getSource() == colWeightField ||
+ e.getSource() == colPositionField ||
+ e.getSource() == skipCellsField ||
+ e.getSource() == rowSpanField ||
+ e.getSource() == colSpanField) {
+
+ JTextField field = (JTextField)e.getSource();
+ if (!textWhenFocusGained.equals(field.getText())) {
+ changeLayout();
+ }
+ }
+ else if (e.getSource() == positionBox ||
+ e.getSource() == fillBox) {
+ JComboBox box = (JComboBox)e.getSource();
+ if (!textWhenFocusGained.equals(box.getSelectedItem())) {
+ changeLayout();
+ }
+ }
+ else if (e.getSource() == columnsField ||
+ e.getSource() == tableInsetFields[0] ||
+ e.getSource() == tableInsetFields[1] ||
+ e.getSource() == tableInsetFields[2] ||
+ e.getSource() == tableInsetFields[3] ||
+ e.getSource() == rowGapField ||
+ e.getSource() == colGapField ||
+ e.getSource() == tableCellInsetFields[0] ||
+ e.getSource() == tableCellInsetFields[1] ||
+ e.getSource() == tableCellInsetFields[2] ||
+ e.getSource() == tableCellInsetFields[3] ||
+ e.getSource() == tableRowWeightField ||
+ e.getSource() == tableColWeightField) {
+
+ JTextField field = (JTextField)e.getSource();
+ if (!textWhenFocusGained.equals(field.getText())) {
+ changeTableLayout();
+ }
+ }
+
+ else if (e.getSource() == tablePositionBox ||
+ e.getSource() == tableFillBox ||
+ e.getSource() == tableCellPositionBox ||
+ e.getSource() == tableCellFillBox) {
+
+ JComboBox box = (JComboBox)e.getSource();
+ if (!textWhenFocusGained.equals(box.getSelectedItem())) {
+ changeTableLayout();
+ }
+ }
+ }
+
+ textWhenFocusGained = null;
+}
+
+public void
+menuCanceled(
+ MenuEvent e)
+{
+}
+
+public void
+menuDeselected(
+ MenuEvent e)
+{
+}
+
+public void
+menuSelected(
+ MenuEvent e)
+{
+ if (e.getSource() == windowMenu) {
+ if (layout.isVisible()) {
+ previewItem.setText("Hide Preview Window");
+ }
+ else {
+ previewItem.setText("Show Preview Window");
+ }
+ if (code.isVisible()) {
+ codeItem.setText("Hide Code Window");
+ }
+ else {
+ codeItem.setText("Show Code Window");
+ }
+ }
+}
+
+//**********************************************************************
+// Package Public
+//**********************************************************************
+
+JMenuBar
+createJMenuBar()
+{
+ JMenuBar menuBar = new JMenuBar();
+
+ fileMenu = new JMenu("File");
+ menuBar.add(fileMenu);
+ windowMenu = new JMenu("Window");
+ windowMenu.addMenuListener(this);
+ menuBar.add(windowMenu);
+ helpMenu = new JMenu("Help");
+ menuBar.add(helpMenu);
+
+ exitItem = new JMenuItem("Exit");
+ exitItem.addActionListener(this);
+ fileMenu.add(exitItem);
+
+ previewItem = new JMenuItem("Show Preview Window");
+ previewItem.addActionListener(this);
+ windowMenu.add(previewItem);
+
+ packItem = new JMenuItem("Pack Preview Window");
+ packItem.addActionListener(this);
+ windowMenu.add(packItem);
+
+ windowMenu.add(new JSeparator());
+
+ codeItem = new JMenuItem("Show Code Window");
+ codeItem.addActionListener(this);
+ windowMenu.add(codeItem);
+
+ generateItem = new JMenuItem("Generate Code");
+ generateItem.addActionListener(this);
+ windowMenu.add(generateItem);
+
+ aboutItem = new JMenuItem("About TableExplorer...");
+ aboutItem.addActionListener(this);
+ helpMenu.add(aboutItem);
+
+ return menuBar;
+}
+
+Component
+createButtonPane()
+{
+ JPanel topLevel = new JPanel(new TableLayout("cols=1"));
+
+ upButton = new JButton("Up");
+ upButton.setEnabled(false);
+ upButton.addActionListener(this);
+
+ downButton = new JButton("Down");
+ downButton.setEnabled(false);
+ downButton.addActionListener(this);
+
+ removeButton = new JButton("Remove");
+ removeButton.setEnabled(false);
+ removeButton.addActionListener(this);
+
+ addButton = new JButton("Add");
+ addButton.addActionListener(this);
+
+ topLevel.add(upButton);
+ topLevel.add(downButton, "rweight=1 n fh");
+ topLevel.add(removeButton, "rweight=1 s fh ");
+ topLevel.add(addButton);
+
+ return topLevel;
+}
+
+Component
+createListPane()
+{
+ JPanel topLevel = new JPanel(new TableLayout("cols=1 rgap=2"));
+
+ compListModel = new DefaultListModel();
+ compList = new JList(compListModel);
+ compList.setVisibleRowCount(20);
+ compList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+ compList.addListSelectionListener(this);
+
+ compEntryField = new JTextField("Start Here!");
+ compEntryField.selectAll();
+ compEntryField.setColumns(20);
+ compEntryField.addCaretListener(this);
+ compEntryField.addActionListener(this);
+
+ topLevel.add(compList, "rweight=1");
+ topLevel.add(compEntryField);
+
+ return topLevel;
+}
+
+Component
+createAttributePane()
+{
+ JPanel topLevel = new JPanel(new TableLayout("cols=3 rgap=2 cgap=5"));
+
+ // Table Attributes
+
+ topLevel.add(new JLabel("Table Attributes"), "cspan=3");
+
+ JPanel spacer1= new JPanel();
+ spacer1.setSize(20, 1);
+ topLevel.add(spacer1);
+ topLevel.add(new JLabel("Columns"));
+ columnsField = new JTextField(10);
+ columnsField.addActionListener(this);
+ columnsField.addFocusListener(this);
+ topLevel.add(columnsField);
+
+ topLevel.add(new JLabel("Table insets"), "col=1");
+ topLevel.add(createInsetsPane(tableInsetFields));
+
+ topLevel.add(new JLabel("Row gap"), "col=1");
+ rowGapField = new JTextField(10);
+ rowGapField.addActionListener(this);
+ rowGapField.addFocusListener(this);
+ topLevel.add(rowGapField);
+
+ topLevel.add(new JLabel("Column gap"), "col=1");
+ colGapField = new JTextField(10);
+ colGapField.addActionListener(this);
+ colGapField.addFocusListener(this);
+ topLevel.add(colGapField);
+
+ topLevel.add(new JLabel("Table position"), "col=1");
+ tablePositionBox = new JComboBox(tablePositionList);
+ tablePositionBox.addActionListener(this);
+ topLevel.add(tablePositionBox);
+
+ topLevel.add(new JLabel("Table fill"), "col=1");
+ tableFillBox = new JComboBox(tableFillList);
+ tableFillBox.addActionListener(this);
+ topLevel.add(tableFillBox);
+
+ // Table Cell Defaults
+
+ topLevel.add(new JLabel("Table Cell Defaults"), "cspan=3 itop=20");
+
+ topLevel.add(new JLabel("Cell insets"), "col=1");
+ topLevel.add(createInsetsPane(tableCellInsetFields));
+
+ topLevel.add(new JLabel("Cell position"), "col=1");
+ tableCellPositionBox = new JComboBox(positionList);
+ tableCellPositionBox.addActionListener(this);
+ topLevel.add(tableCellPositionBox);
+
+ topLevel.add(new JLabel("Cell fill"), "col=1");
+ tableCellFillBox = new JComboBox(fillList);
+ tableCellFillBox.addActionListener(this);
+ topLevel.add(tableCellFillBox);
+
+ topLevel.add(new JLabel("Row weight"), "col=1");
+ tableRowWeightField = new JTextField(10);
+ tableRowWeightField.addActionListener(this);
+ tableRowWeightField.addFocusListener(this);
+ topLevel.add(tableRowWeightField);
+
+ topLevel.add(new JLabel("Column weight"), "col=1");
+ tableColWeightField = new JTextField(10);
+ tableColWeightField.addActionListener(this);
+
+ tableColWeightField.addFocusListener(this);
+ topLevel.add(tableColWeightField);
+
+ topLevel.add(new JLabel("Attributes"), "itop=5 col=0 cspan=2");
+ tableAttributesField = new JTextField();
+ tableAttributesField.setEditable(false);
+ topLevel.add(tableAttributesField, "itop=5");
+
+ // Make sure components are initialized as per the default table
+ // attributes
+
+ tableAttributes = new TableAttributes();
+ setTableAttributes(tableAttributes);
+
+ // Cell Attributes
+
+ topLevel.add(new JSeparator(), "cspan=3 itop=20 ibottom=5");
+
+ topLevel.add(new JLabel("Cell Attributes"), "cspan=3");
+
+ topLevel.add(new JLabel("Cell insets"), "col=1");
+ topLevel.add(createInsetsPane(insetFields));
+
+ topLevel.add(new JLabel("Cell position"), "col=1");
+ positionBox = new JComboBox(positionList);
+ positionBox.addActionListener(this);
+ topLevel.add(positionBox);
+
+ topLevel.add(new JLabel("Cell fill"), "col=1");
+ fillBox = new JComboBox(fillList);
+ fillBox.addActionListener(this);
+ topLevel.add(fillBox);
+
+ topLevel.add(new JLabel("Row weight"), "col=1");
+ rowWeightField = new JTextField(10);
+ rowWeightField.addActionListener(this);
+ rowWeightField.addFocusListener(this);
+ topLevel.add(rowWeightField);
+
+ topLevel.add(new JLabel("Column weight"), "col=1");
+ colWeightField = new JTextField(10);
+ colWeightField.addActionListener(this);
+ colWeightField.addFocusListener(this);
+ topLevel.add(colWeightField);
+
+ topLevel.add(new JLabel("Column position"), "col=1");
+ colPositionField = new JTextField(10);
+ colPositionField.addActionListener(this);
+ colPositionField.addFocusListener(this);
+ topLevel.add(colPositionField);
+
+ topLevel.add(new JLabel("Skip cells"), "col=1");
+ skipCellsField = new JTextField(10);
+ skipCellsField.addActionListener(this);
+ skipCellsField.addFocusListener(this);
+ topLevel.add(skipCellsField);
+
+ topLevel.add(new JLabel("Row span"), "col=1");
+ rowSpanField = new JTextField(10);
+ rowSpanField.addActionListener(this);
+ rowSpanField.addFocusListener(this);
+ topLevel.add(rowSpanField);
+
+ topLevel.add(new JLabel("Column span"), "col=1");
+ colSpanField = new JTextField(10);
+ colSpanField.addActionListener(this);
+ colSpanField.addFocusListener(this);
+ topLevel.add(colSpanField);
+
+ topLevel.add(new JLabel("Attributes"), "itop=5 col=0 cspan=2");
+ cellAttributesField = new JTextField();
+ cellAttributesField.setEditable(false);
+ topLevel.add(cellAttributesField, "itop=5");
+
+ enableAttributes(false);
+
+ return topLevel;
+}
+
+Component
+createInsetsPane(
+ JTextField[] insetFields)
+{
+ JPanel topLevel = new JPanel(new TableLayout("cols=3"));
+
+ for (int i = 0; i < 4; i++) {
+ insetFields[i] = new JTextField(2);
+ insetFields[i].addActionListener(this);
+ insetFields[i].addFocusListener(this);
+ }
+
+ topLevel.add(insetFields[0], "col=1");
+ topLevel.add(insetFields[1], "col=0");
+ topLevel.add(insetFields[2], "col=2");
+ topLevel.add(insetFields[3], "col=1");
+
+ return topLevel;
+}
+
+JPanel
+createCodePane()
+{
+ JPanel topLevel = new JPanel(new TableLayout("cols=2 rgap=2 cgap=5"));
+
+ codeTextArea = new JTextArea(15, 30);
+ codeTextScroll = new JScrollPane(codeTextArea);
+ topLevel.add(codeTextScroll, "cspan=2 rweight=1");
+
+ return topLevel;
+}
+
+void
+addToLayout(
+ Component c)
+{
+ try {
+ layoutPane.add(c);
+ }
+ catch (IllegalArgumentException e) {
+ JOptionPane.showMessageDialog(
+ this, e.toString(), "Attribute Error", JOptionPane.ERROR_MESSAGE);
+ }
+ layoutPane.revalidate();
+}
+
+void
+addToLayout(
+ Component c,
+ String a,
+ int index)
+{
+ try {
+ layoutPane.add(c, a, index);
+ }
+ catch (IllegalArgumentException e) {
+ JOptionPane.showMessageDialog(
+ this, e.toString(), "Attribute Error", JOptionPane.ERROR_MESSAGE);
+ }
+ layoutPane.revalidate();
+}
+
+void
+changeTableLayout()
+{
+ tableAttributes = getTableAttributes();
+ try {
+ ((TableLayout)layoutPane.getLayout()).setTableAttributes(
+ tableAttributes.toString());
+ }
+ catch (IllegalArgumentException e) {
+ JOptionPane.showMessageDialog(
+ this, e.toString(), "Attribute Error", JOptionPane.ERROR_MESSAGE);
+ }
+ layoutPane.revalidate();
+ setTableAttributes(tableAttributes); // Normalize appearance
+}
+
+void
+changeLayout()
+{
+ String name = (String)compList.getSelectedValue();
+ changeLayout(name);
+}
+
+void
+changeLayout(
+ String name)
+{
+ if (name == null) return;
+
+ Component c = (Component)compHash.get(name);
+ Attributes attributes = getAttributes();
+ try {
+ ((TableLayout)layoutPane.getLayout()).setAttributes(
+ c, attributes.toString());
+ }
+ catch (IllegalArgumentException e) {
+ JOptionPane.showMessageDialog(
+ this, e.toString(), "Attribute Error", JOptionPane.ERROR_MESSAGE);
+ }
+ layoutPane.revalidate();
+ setAttributes(attributes); // Normalize appearance
+ attrHash.put(name, attributes);
+}
+
+TableAttributes
+getTableAttributes()
+{
+ TableAttributes attributes = new TableAttributes();
+
+ attributes.columns = getNumber(attributes.columns, columnsField);
+ attributes.rGap = getNumber(attributes.rGap, rowGapField);
+ attributes.cGap = getNumber(attributes.cGap, colGapField);
+
+ attributes.tableInsets.top =
+ getNumber(attributes.tableInsets.top, tableInsetFields[0]);
+ attributes.tableInsets.left =
+ getNumber(attributes.tableInsets.left, tableInsetFields[1]);
+ attributes.tableInsets.right =
+ getNumber(attributes.tableInsets.right, tableInsetFields[2]);
+ attributes.tableInsets.bottom =
+ getNumber(attributes.tableInsets.bottom, tableInsetFields[3]);
+
+ attributes.tablePosition = getString(tablePositionBox);
+ attributes.tableFill = getString(tableFillBox);
+
+ attributes.insets.top =
+ getNumber(attributes.insets.top, tableCellInsetFields[0]);
+ attributes.insets.left =
+ getNumber(attributes.insets.left, tableCellInsetFields[1]);
+ attributes.insets.right =
+ getNumber(attributes.insets.right, tableCellInsetFields[2]);
+ attributes.insets.bottom =
+ getNumber(attributes.insets.bottom, tableCellInsetFields[3]);
+
+ attributes.position = getString(tableCellPositionBox);
+ attributes.fill = getString(tableCellFillBox);
+ attributes.rWeight = getNumber(attributes.rWeight, tableRowWeightField);
+ attributes.cWeight = getNumber(attributes.cWeight, tableColWeightField);
+
+ return attributes;
+}
+
+void
+setTableAttributes(
+ TableAttributes attributes)
+{
+ ignoreEvents = true;
+
+ columnsField.setText(Integer.toString(attributes.columns));
+ rowGapField.setText(Integer.toString(attributes.rGap));
+ colGapField.setText(Integer.toString(attributes.cGap));
+
+ tableInsetFields[0].setText(
+ Integer.toString(attributes.tableInsets.top));
+ tableInsetFields[1].setText(
+ Integer.toString(attributes.tableInsets.left));
+ tableInsetFields[2].setText(
+ Integer.toString(attributes.tableInsets.right));
+ tableInsetFields[3].setText(
+ Integer.toString(attributes.tableInsets.bottom));
+
+ tablePositionBox.setSelectedItem(attributes.tablePosition);
+ tableFillBox.setSelectedItem(attributes.tableFill);
+
+ tableCellInsetFields[0].setText(
+ Integer.toString(attributes.insets.top));
+ tableCellInsetFields[1].setText(
+ Integer.toString(attributes.insets.left));
+ tableCellInsetFields[2].setText(
+ Integer.toString(attributes.insets.right));
+ tableCellInsetFields[3].setText(
+ Integer.toString(attributes.insets.bottom));
+
+ tableCellPositionBox.setSelectedItem(attributes.position);
+ tableCellFillBox.setSelectedItem(attributes.fill);
+ tableRowWeightField.setText(Integer.toString(attributes.rWeight));
+ tableColWeightField.setText(Integer.toString(attributes.cWeight));
+
+ tableAttributesField.setText(attributes.toString());
+
+ ignoreEvents = false;
+}
+
+Attributes
+getAttributes()
+{
+ Attributes attributes = new Attributes();
+
+ attributes.insets.top =
+ getNumber(attributes.insets.top, insetFields[0]);
+ attributes.insets.left =
+ getNumber(attributes.insets.left, insetFields[1]);
+ attributes.insets.right =
+ getNumber(attributes.insets.right, insetFields[2]);
+ attributes.insets.bottom =
+ getNumber(attributes.insets.bottom, insetFields[3]);
+
+ attributes.position = getString(positionBox);
+ attributes.fill = getString(fillBox);
+ attributes.rWeight = getNumber(attributes.rWeight, rowWeightField);
+ attributes.cWeight = getNumber(attributes.cWeight, colWeightField);
+ attributes.column = getNumber(attributes.column, colPositionField);
+ attributes.skip = getNumber(attributes.skip, skipCellsField);
+ attributes.rSpan = getNumber(attributes.rSpan, rowSpanField);
+ attributes.cSpan = getNumber(attributes.cSpan, colSpanField);
+
+ return attributes;
+}
+
+void
+setAttributes(
+ Attributes attributes)
+{
+ ignoreEvents = true;
+
+ insetFields[0].setText(Integer.toString(attributes.insets.top));
+ insetFields[1].setText(Integer.toString(attributes.insets.left));
+ insetFields[2].setText(Integer.toString(attributes.insets.right));
+ insetFields[3].setText(Integer.toString(attributes.insets.bottom));
+
+ positionBox.setSelectedItem(attributes.position);
+ fillBox.setSelectedItem(attributes.fill);
+ rowWeightField.setText(Integer.toString(attributes.rWeight));
+ colWeightField.setText(Integer.toString(attributes.cWeight));
+ colPositionField.setText(Integer.toString(attributes.column));
+ skipCellsField.setText(Integer.toString(attributes.skip));
+ rowSpanField.setText(Integer.toString(attributes.rSpan));
+ colSpanField.setText(Integer.toString(attributes.cSpan));
+
+ cellAttributesField.setText(attributes.toString());
+
+ ignoreEvents = false;
+}
+
+int
+getNumber(
+ int defaultValue,
+ JTextField field)
+{
+ String text = field.getText().trim();
+ if (text.length() == 0) return defaultValue;
+
+ int value = 0;
+ try {
+ value = Integer.parseInt(text);
+ }
+ catch (NumberFormatException e) {}
+
+ return value;
+}
+
+String
+getString(
+ JComboBox box)
+{
+ return (String)box.getSelectedItem();
+}
+
+void
+enableAttributes(
+ boolean enable)
+{
+ positionBox.setEnabled(enable);
+ fillBox.setEnabled(enable);
+ rowWeightField.setEnabled(enable);
+ colWeightField.setEnabled(enable);
+ colPositionField.setEnabled(enable);
+ skipCellsField.setEnabled(enable);
+ rowSpanField.setEnabled(enable);
+ colSpanField.setEnabled(enable);
+
+ for (int i = 0; i < 4; i++) {
+ insetFields[i].setEnabled(enable);
+ }
+}
+
+void
+generateCode()
+{
+ tableAttributes = getTableAttributes();
+
+ String indent = "";
+ String containerName = "";
+
+ StringBuffer code = new StringBuffer(
+ indent + "// Code generated by Table Explorer V1.0\n" +
+ indent +
+ "// Copyright © 2004, Antonio Freixas\n" +
+ indent + "// All Rights Reserved.\n" +
+ indent + "// tony@freixas.org\n\n" +
+ indent + "// Define the table layout\n\n" +
+ indent + "JPanel panel = new JPanel(new TableLayout(" +
+ "\"" + tableAttributes.toString().trim() + "\"));\n\n");
+
+ for (int i = 0; i < compListModel.size(); i++) {
+ String name = (String)compListModel.elementAt(i);
+ Attributes attr = (Attributes)attrHash.get(name);
+ String sAttr = attr.toString().trim();
+ code.append(
+ indent + "panel.add(new JButton(\"" + name + "\"" +
+ (sAttr.length() > 0 ? ", \"" + sAttr + "\"" : "") + "));\n");
+ }
+
+ codeTextArea.setText(code.toString());
+}
+
+//**********************************************************************
+// Protected
+//**********************************************************************
+
+//**********************************************************************
+// Private
+//**********************************************************************
+
+//**********************************************************************
+// Inner Classes
+//**********************************************************************
+
+class TableAttributes
+{
+
+// Table-only options
+
+int columns = 1;
+int rGap = 0;
+int cGap = 0;
+Insets tableInsets = new Insets(0, 0, 0, 0);
+String tablePosition = "Default";
+String tableFill = "Default";
+
+// Table/cell options
+
+Insets insets = new Insets(0, 0, 0, 0);
+String position = "Default";
+String fill = "Default";
+int rWeight = 0;
+int cWeight = 0;
+
+public String
+toString()
+{
+ StringBuffer b = new StringBuffer();
+
+ if (columns != 1) {
+ b.append("cols=" + columns + " ");
+ }
+
+ if (rGap != 0) {
+ b.append("rgap=" + rGap + " ");
+ }
+ if (cGap != 0) {
+ b.append("cgap=" + cGap + " ");
+ }
+
+ if (tableInsets.top != 0) {
+ b.append("titop=" + tableInsets.top + " ");
+ }
+ if (tableInsets.bottom != 0) {
+ b.append("tibottom=" + tableInsets.bottom + " ");
+ }
+ if (tableInsets.left != 0) {
+ b.append("tileft=" + tableInsets.left + " ");
+ }
+ if (tableInsets.right != 0) {
+ b.append("tiright=" + tableInsets.right + " ");
+ }
+
+ if (!"Default".equals(tablePosition)) {
+ b.append(tablePosition + " ");
+ }
+ if (!"Default".equals(tableFill)) {
+ b.append(tableFill + " ");
+ }
+
+ if (insets.top != 0) {
+ b.append("itop=" + insets.top + " ");
+ }
+ if (insets.bottom != 0) {
+ b.append("ibottom=" + insets.bottom + " ");
+ }
+ if (insets.left != 0) {
+ b.append("ileft=" + insets.left + " ");
+ }
+ if (insets.right != 0) {
+ b.append("iright=" + insets.right + " ");
+ }
+
+ if (!"Default".equals(position)) {
+ b.append(position + " ");
+ }
+ if (!"Default".equals(fill)) {
+ b.append(fill + " ");
+ }
+
+ if (rWeight != 0) {
+ b.append("rweight=" + rWeight + " ");
+ }
+ if (cWeight != 0) {
+ b.append("cweight=" + cWeight + " ");
+ }
+
+ return new String(b);
+}
+
+}
+
+class Attributes
+{
+
+Insets insets = new Insets(0, 0, 0, 0);
+String position = "Default";
+String fill = "Default";
+int rWeight = 0;
+int cWeight = 0;
+int column = -1;
+int skip = 0;
+int rSpan = 1;
+int cSpan = 1;
+
+public String
+toString()
+{
+ StringBuffer b = new StringBuffer();
+
+ if (insets.top != tableAttributes.insets.top) {
+ b.append("itop=" + insets.top + " ");
+ }
+ if (insets.bottom != tableAttributes.insets.bottom) {
+ b.append("ibottom=" + insets.bottom + " ");
+ }
+ if (insets.left != tableAttributes.insets.left) {
+ b.append("ileft=" + insets.left + " ");
+ }
+ if (insets.right != tableAttributes.insets.right) {
+ b.append("iright=" + insets.right + " ");
+ }
+
+ if (!"Default".equals(position)) {
+ b.append(position + " ");
+ }
+ if (!"Default".equals(fill)) {
+ b.append(fill + " ");
+ }
+
+ if (rWeight != tableAttributes.rWeight) {
+ b.append("rweight=" + rWeight + " ");
+ }
+ if (cWeight != tableAttributes.cWeight) {
+ b.append("cweight=" + cWeight + " ");
+ }
+
+ if (column != -1) {
+ b.append("col=" + column + " ");
+ }
+
+ if (skip != 0) {
+ b.append("skip=" + skip + " ");
+ }
+
+ if (rSpan != 1) {
+ b.append("rspan=" + rSpan + " ");
+ }
+ if (cSpan != 1) {
+ b.append("cspan=" + cSpan + " ");
+ }
+
+ return new String(b);
+}
+
+}
+
+//**********************************************************************
+// End Inner Classes
+//**********************************************************************
+
+}
diff --git a/libs/FLib/TableLayout/doc/examples.html b/libs/FLib/TableLayout/doc/examples.html
new file mode 100644
index 0000000..7f8217f
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/examples.html
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/TableLayout.dwt" codeOutsideHTMLIsLocked="false" -->
+<head>
+<!-- InstanceBeginEditable name="doctitle" -->
+<title>TableLayout - Examples</title>
+<!-- InstanceEndEditable -->
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<!-- InstanceBeginEditable name="head" -->
+<!-- InstanceEndEditable -->
+<link href="stylesheet.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+<p><img src="images/Logo.png" width="800" height="150" /></p>
+<table width="800" border="0" cellspacing="0" cellpadding="10">
+ <tr>
+ <td width="150" align="left" valign="top" id="sidebar">
+ <p><a href="index.html">Introduction</a></p>
+ <p><a href="features.html">Features</a></p>
+ <p><a href="screenshots.html">Screen<br />
+ shots</a></p>
+ <p><a href="tutorial.html">Tutorial</a></p>
+ <p><a href="examples.html">Examples</a></p>
+ <p><a href="api/index.html">API<br />
+ documentation</a></p>
+ <p><a href="https://sourceforge.net/project/showfiles.php?group_id=113939">Download</a></p>
+ <p><a href="resources.html">Other<br />
+ resources</a></p>
+ <p><a href="../../index.html">Return to<br />
+ FLib </a></p>
+ <p><a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=113939&amp;type=1" alt="SourceForge.net Logo" width="88" height="31" border="0" align="top" title="" /></a></p>
+ <p><a href="http://www.jars.com/"><img src="http://www.jars.com/images/r750.gif" alt="Rated JARS Top 25%" width="104" height="56" border="0" align="top" title="" /></a></p> </td>
+ <td id="content" width="614" align="left" valign="top"><!-- InstanceBeginEditable name="content" -->
+ <h1>Examples</h1>
+ <p>There are two example programs provided for TableLayout.</p>
+ <p>The <a href="example/Example1.java">Example1</a> program compares TableLayout
+ with GridBagLayout. It uses the code found on the API page for GridBagLayout
+ and then adds code to create
+ the equivalent layout using TableLayout.</p>
+ <p>I hope the TableLayout version is much easier to understand. It's definitely
+ a lot shorter!</p>
+ <p>The second program is called
+ <a href="example/TableExplorer.java">TableExplorer</a>. While you are
+ free to examine the code, it is really a tool you run to learn how to
+ use the TableLayout.</p>
+ <p>If you download the FLib source, you can use Ant to build and run
+ the example programs:</p>
+ <pre>cd TableLayout
+ant runExample1
+ant runTableExplorer</pre>
+ <p>The Example1 class will display two windows, one created using GridBagLayout
+ and the other using TableLayout. You can resize the windows to verify
+ that
+ the behavior
+ is
+ identical.</p>
+ <p>When you run the TableExplorer program, it will display a text field
+ at the bottom with the words &quot;Start Here!&quot; and an Add button
+ next to it. You create JButton components by entering the component name
+ (which
+ also
+ becomes its label) and pressing the Add button. Each component added
+ shows up in the list above the text field.</p>
+ <p>Selecting <em>Window / Show Preview Window</em> from the menu will bring up a
+ window containing the JButtons. You can then set the table attributes
+ and table cell defaults to control the table layout. You can also select
+ a component from the list and set its cell attributes. Your changes should
+ be reflected immediately in the preview window.</p>
+ <p>You can also display a code window which will show you the code necessary
+ to generate the displayed layout.</p>
+ <!-- InstanceEndEditable --></td>
+ </tr>
+</table>
+</body>
+<!-- InstanceEnd --></html>
diff --git a/libs/FLib/TableLayout/doc/features.html b/libs/FLib/TableLayout/doc/features.html
new file mode 100644
index 0000000..47bf332
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/features.html
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/TableLayout.dwt" codeOutsideHTMLIsLocked="false" -->
+<head>
+<!-- InstanceBeginEditable name="doctitle" -->
+<title>TableLayout - Features</title>
+<!-- InstanceEndEditable -->
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<!-- InstanceBeginEditable name="head" -->
+<!-- InstanceEndEditable -->
+<link href="stylesheet.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+<p><img src="images/Logo.png" width="800" height="150" /></p>
+<table width="800" border="0" cellspacing="0" cellpadding="10">
+ <tr>
+ <td width="150" align="left" valign="top" id="sidebar">
+ <p><a href="index.html">Introduction</a></p>
+ <p><a href="features.html">Features</a></p>
+ <p><a href="screenshots.html">Screen<br />
+ shots</a></p>
+ <p><a href="tutorial.html">Tutorial</a></p>
+ <p><a href="examples.html">Examples</a></p>
+ <p><a href="api/index.html">API<br />
+ documentation</a></p>
+ <p><a href="https://sourceforge.net/project/showfiles.php?group_id=113939">Download</a></p>
+ <p><a href="resources.html">Other<br />
+ resources</a></p>
+ <p><a href="../../index.html">Return to<br />
+ FLib </a></p>
+ <p><a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=113939&amp;type=1" alt="SourceForge.net Logo" width="88" height="31" border="0" align="top" title="" /></a></p>
+ <p><a href="http://www.jars.com/"><img src="http://www.jars.com/images/r750.gif" alt="Rated JARS Top 25%" width="104" height="56" border="0" align="top" title="" /></a></p> </td>
+ <td id="content" width="614" align="left" valign="top"><!-- InstanceBeginEditable name="content" -->
+ <h1>Features</h1>
+ <p>The main features of TableLayout are:</p>
+ <ul>
+ <li>Easy to use.</li>
+ <li>Efficient.</li>
+ <li>Inspired by the HTML table element.</li>
+ <li>Text attributes are used to control a component's layout. These are
+ fairly easy to remember, both when creating the layout and when reviewing
+ an existing layout.</li>
+ <li>Attributes can also be set for the table itself.</li>
+ <li>Default component attributes can be set to simplify entry.</li>
+ <li>Can duplicate any layout created with GridBagLayout, but usually
+ with much fewer lines of code.</li>
+ <li>Components are laid out as they are added, with rows added automatically
+ as needed.</li>
+ </ul>
+ <!-- InstanceEndEditable --></td>
+ </tr>
+</table>
+</body>
+<!-- InstanceEnd --></html>
diff --git a/libs/FLib/TableLayout/doc/images/Logo.png b/libs/FLib/TableLayout/doc/images/Logo.png
new file mode 100644
index 0000000..db18dce
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/images/Logo.png
Binary files differ
diff --git a/libs/FLib/TableLayout/doc/images/screenshot1.png b/libs/FLib/TableLayout/doc/images/screenshot1.png
new file mode 100644
index 0000000..ac7a594
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/images/screenshot1.png
Binary files differ
diff --git a/libs/FLib/TableLayout/doc/images/screenshot2.png b/libs/FLib/TableLayout/doc/images/screenshot2.png
new file mode 100644
index 0000000..c669bce
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/images/screenshot2.png
Binary files differ
diff --git a/libs/FLib/TableLayout/doc/images/tutorial1.png b/libs/FLib/TableLayout/doc/images/tutorial1.png
new file mode 100644
index 0000000..c441e32
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/images/tutorial1.png
Binary files differ
diff --git a/libs/FLib/TableLayout/doc/images/tutorial2.png b/libs/FLib/TableLayout/doc/images/tutorial2.png
new file mode 100644
index 0000000..a197850
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/images/tutorial2.png
Binary files differ
diff --git a/libs/FLib/TableLayout/doc/images/tutorial3.png b/libs/FLib/TableLayout/doc/images/tutorial3.png
new file mode 100644
index 0000000..4e2c0f4
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/images/tutorial3.png
Binary files differ
diff --git a/libs/FLib/TableLayout/doc/images/tutorial4.png b/libs/FLib/TableLayout/doc/images/tutorial4.png
new file mode 100644
index 0000000..b01cfbd
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/images/tutorial4.png
Binary files differ
diff --git a/libs/FLib/TableLayout/doc/images/tutorial5.png b/libs/FLib/TableLayout/doc/images/tutorial5.png
new file mode 100644
index 0000000..3871325
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/images/tutorial5.png
Binary files differ
diff --git a/libs/FLib/TableLayout/doc/images/tutorial6.png b/libs/FLib/TableLayout/doc/images/tutorial6.png
new file mode 100644
index 0000000..533c57c
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/images/tutorial6.png
Binary files differ
diff --git a/libs/FLib/TableLayout/doc/images/tutorial7.png b/libs/FLib/TableLayout/doc/images/tutorial7.png
new file mode 100644
index 0000000..8744c42
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/images/tutorial7.png
Binary files differ
diff --git a/libs/FLib/TableLayout/doc/images/tutorial8.png b/libs/FLib/TableLayout/doc/images/tutorial8.png
new file mode 100644
index 0000000..bf92254
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/images/tutorial8.png
Binary files differ
diff --git a/libs/FLib/TableLayout/doc/index.html b/libs/FLib/TableLayout/doc/index.html
new file mode 100644
index 0000000..7a60e27
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/index.html
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/TableLayout.dwt" codeOutsideHTMLIsLocked="false" -->
+<head>
+<!-- InstanceBeginEditable name="doctitle" -->
+<title>TableLayout - Introduction</title>
+<!-- InstanceEndEditable -->
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<!-- InstanceBeginEditable name="head" -->
+<!-- InstanceEndEditable -->
+<link href="stylesheet.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+<p><img src="images/Logo.png" width="800" height="150" /></p>
+<table width="800" border="0" cellspacing="0" cellpadding="10">
+ <tr>
+ <td width="150" align="left" valign="top" id="sidebar">
+ <p><a href="index.html">Introduction</a></p>
+ <p><a href="features.html">Features</a></p>
+ <p><a href="screenshots.html">Screen<br />
+ shots</a></p>
+ <p><a href="tutorial.html">Tutorial</a></p>
+ <p><a href="examples.html">Examples</a></p>
+ <p><a href="api/index.html">API<br />
+ documentation</a></p>
+ <p><a href="https://sourceforge.net/project/showfiles.php?group_id=113939">Download</a></p>
+ <p><a href="resources.html">Other<br />
+ resources</a></p>
+ <p><a href="../../index.html">Return to<br />
+ FLib </a></p>
+ <p><a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=113939&amp;type=1" alt="SourceForge.net Logo" width="88" height="31" border="0" align="top" title="" /></a></p>
+ <p><a href="http://www.jars.com/"><img src="http://www.jars.com/images/r750.gif" alt="Rated JARS Top 25%" width="104" height="56" border="0" align="top" title="" /></a></p> </td>
+ <td id="content" width="614" align="left" valign="top"><!-- InstanceBeginEditable name="content" -->
+ <h1>Introduction</h1>
+ <p>Hi! My name is Tony Freixas and I am currently working on an application
+ that I intend to release as Open Source. In the process of building the
+ application, I am using as many Open Source classes and components as
+ I can find.</p>
+ <p>In some cases, I have been disappointed with what I have found on the
+ web:</p>
+ <ul>
+ <li>Classes that are not free.</li>
+ <li>Classes with restrictive licensing.</li>
+ <li>Classes which ignore internationalization.</li>
+ <li>Classes which are not easy to use.</li>
+ <li>Components which are limited with respect to the Look &amp; Feel that
+ can be used.</li>
+ </ul>
+ <p>When I have not found a suitable Java class, I have implemented my own.
+ I have decided to release these for use by others as part of a library
+ I call FLib.</p>
+ <p>Currently, there are three components available in FLib and I have chosen
+ to make them completely independent of each other. In the future, you
+
+ may have to load some common code in order to use the FLib classes.</p>
+ <p>These web pages are for the TableLayout manager. Use the
+ links on the left to learn more.</p>
+ <p><a href="http://sourceforge.net/donate/index.php?group_id=113939"><img src="http://images.sourceforge.net/images/project-support.jpg" width="88" height="32" border="0" alt="Support This Project" title=""/></a></p>
+ <!-- InstanceEndEditable --></td>
+ </tr>
+</table>
+</body>
+<!-- InstanceEnd --></html>
diff --git a/libs/FLib/TableLayout/doc/resources.html b/libs/FLib/TableLayout/doc/resources.html
new file mode 100644
index 0000000..3300cad
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/resources.html
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/TableLayout.dwt" codeOutsideHTMLIsLocked="false" -->
+<head>
+<!-- InstanceBeginEditable name="doctitle" -->
+<title>TableLayout - Other Resources</title>
+<!-- InstanceEndEditable -->
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<!-- InstanceBeginEditable name="head" -->
+<!-- InstanceEndEditable -->
+<link href="stylesheet.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+<p><img src="images/Logo.png" width="800" height="150" /></p>
+<table width="800" border="0" cellspacing="0" cellpadding="10">
+ <tr>
+ <td width="150" align="left" valign="top" id="sidebar">
+ <p><a href="index.html">Introduction</a></p>
+ <p><a href="features.html">Features</a></p>
+ <p><a href="screenshots.html">Screen<br />
+ shots</a></p>
+ <p><a href="tutorial.html">Tutorial</a></p>
+ <p><a href="examples.html">Examples</a></p>
+ <p><a href="api/index.html">API<br />
+ documentation</a></p>
+ <p><a href="https://sourceforge.net/project/showfiles.php?group_id=113939">Download</a></p>
+ <p><a href="resources.html">Other<br />
+ resources</a></p>
+ <p><a href="../../index.html">Return to<br />
+ FLib </a></p>
+ <p><a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=113939&amp;type=1" alt="SourceForge.net Logo" width="88" height="31" border="0" align="top" title="" /></a></p>
+ <p><a href="http://www.jars.com/"><img src="http://www.jars.com/images/r750.gif" alt="Rated JARS Top 25%" width="104" height="56" border="0" align="top" title="" /></a></p> </td>
+ <td id="content" width="614" align="left" valign="top"><!-- InstanceBeginEditable name="content" -->
+ <h1>Other Resources</h1>
+ <p>Back in 2000, I started thinking about creating a table layout manager
+ that would be as easy-to-use as HTML tables. I looked on the internet
+ for existing solutions and found several. One I particularly liked had
+ a user interface quite similar to the TableLayout I provide. However,
+ it had subtle bugs which were not easy to fix given the existing architecture.
+ This caused me to write my own version from scratch while retaining
+ many of its good UI ideas.</p>
+ <p>Unfortunately, I no longer have a pointer to that TableLayout or the
+ author who wrote it. I found a <a href="http://www.squarebox.co.uk/download/table.html">version</a> that has an interface similar
+ to mine and may have been the original inspiration, although I cannot
+ verify it.</p>
+ <p>My version of TableLayout appears now through the courtesy of <a href="http://www.credence.com/">Credence
+ Systems Corporation</a>, who holds the copyright and has allowed me to release
+ the code under the Artistic License.</p>
+ <p>The most well-known <a href="http://www.clearthought.info/software/TableLayout/">TableLayout</a> is
+ written by Daniel Barbalace. I've used this version, but I dislike its
+ approach of having to define row widths and column heights in advance.
+ As I recall, if you want row or column gaps, these had to be treated
+ as empty rows and columns.</p>
+ <p>My TableLayout is for lazier designers: Other
+ than specifying the number of columns, you can decide on additional
+ settings as you add components. Row and column gaps, which I
+ use often and which I almost always want to be a consistent size, can
+ be set with two simple attributes specified when the layout manager is
+ created.</p>
+ <p>There are many other TableLayout managers. Obviously a lot of people
+ had the same idea! Rather than try to list all others, I suggest you
+ do a Google search.</p>
+ <!-- InstanceEndEditable --></td>
+ </tr>
+</table>
+</body>
+<!-- InstanceEnd --></html>
diff --git a/libs/FLib/TableLayout/doc/screenshots.html b/libs/FLib/TableLayout/doc/screenshots.html
new file mode 100644
index 0000000..ec37ca8
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/screenshots.html
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/TableLayout.dwt" codeOutsideHTMLIsLocked="false" -->
+<head>
+<!-- InstanceBeginEditable name="doctitle" -->
+<title>TableLayout - Screen Shots</title>
+<!-- InstanceEndEditable -->
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<!-- InstanceBeginEditable name="head" -->
+<!-- InstanceEndEditable -->
+<link href="stylesheet.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+<p><img src="images/Logo.png" width="800" height="150" /></p>
+<table width="800" border="0" cellspacing="0" cellpadding="10">
+ <tr>
+ <td width="150" align="left" valign="top" id="sidebar">
+ <p><a href="index.html">Introduction</a></p>
+ <p><a href="features.html">Features</a></p>
+ <p><a href="screenshots.html">Screen<br />
+ shots</a></p>
+ <p><a href="tutorial.html">Tutorial</a></p>
+ <p><a href="examples.html">Examples</a></p>
+ <p><a href="api/index.html">API<br />
+ documentation</a></p>
+ <p><a href="https://sourceforge.net/project/showfiles.php?group_id=113939">Download</a></p>
+ <p><a href="resources.html">Other<br />
+ resources</a></p>
+ <p><a href="../../index.html">Return to<br />
+ FLib </a></p>
+ <p><a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=113939&amp;type=1" alt="SourceForge.net Logo" width="88" height="31" border="0" align="top" title="" /></a></p>
+ <p><a href="http://www.jars.com/"><img src="http://www.jars.com/images/r750.gif" alt="Rated JARS Top 25%" width="104" height="56" border="0" align="top" title="" /></a></p> </td>
+ <td id="content" width="614" align="left" valign="top"><!-- InstanceBeginEditable name="content" -->
+ <h1>Screen Shots</h1>
+ <p>This is a the initial appearance
+ of a set of JButton's in a JPanel as laid out by TableLayout (from the
+ <a href="examples.html">Example1</a> program). </p>
+ <p align="center"><img src="images/screenshot1.png" width="312" height="130" /></p>
+ <p>This is the same JPanel resized larger.</p>
+ <p align="center"><img src="images/screenshot2.png" width="460" height="353" /></p>
+ <p>Additional
+ screen shots available on the <a href="tutorial.html">Tutorial</a> page.</p>
+ <!-- InstanceEndEditable --></td>
+ </tr>
+</table>
+</body>
+<!-- InstanceEnd --></html>
diff --git a/libs/FLib/TableLayout/doc/stylesheet.css b/libs/FLib/TableLayout/doc/stylesheet.css
new file mode 100644
index 0000000..dc693da
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/stylesheet.css
@@ -0,0 +1,48 @@
+body {
+ font-family: Arial, Helvetica, sans-serif;
+ background: white:
+ color: black;
+}
+
+td {
+ font-family: Arial, Helvetica, sans-serif;
+}
+
+th {
+ font-family: Arial, Helvetica, sans-serif;
+}
+
+#sidebar {
+ font-family: "Times New Roman", Times, serif;
+ font-weight: bold;
+ font-style: italic;
+ font-size: 20px;
+}
+
+#content {
+ font-size: 100%;
+}
+
+a:visited {
+ color: #8080FF;
+ text-decoration: none;
+}
+
+a:link {
+ color: #8080FF;
+ text-decoration: none;
+}
+
+a:hover {
+ color: #C00000;
+ text-decoration: none;
+}
+
+a:active {
+ color: #C00000;
+ text-decoration: none;
+}
+
+pre {
+ margin-left: 1em;
+}
diff --git a/libs/FLib/TableLayout/doc/tutorial.html b/libs/FLib/TableLayout/doc/tutorial.html
new file mode 100644
index 0000000..5522d3f
--- /dev/null
+++ b/libs/FLib/TableLayout/doc/tutorial.html
@@ -0,0 +1,338 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/TableLayout.dwt" codeOutsideHTMLIsLocked="false" -->
+<head>
+<!-- InstanceBeginEditable name="doctitle" -->
+<title>TableLayout - Tutorial</title>
+<!-- InstanceEndEditable -->
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<!-- InstanceBeginEditable name="head" -->
+<!-- InstanceEndEditable -->
+<link href="stylesheet.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+<p><img src="images/Logo.png" width="800" height="150" /></p>
+<table width="800" border="0" cellspacing="0" cellpadding="10">
+ <tr>
+ <td width="150" align="left" valign="top" id="sidebar">
+ <p><a href="index.html">Introduction</a></p>
+ <p><a href="features.html">Features</a></p>
+ <p><a href="screenshots.html">Screen<br />
+ shots</a></p>
+ <p><a href="tutorial.html">Tutorial</a></p>
+ <p><a href="examples.html">Examples</a></p>
+ <p><a href="api/index.html">API<br />
+ documentation</a></p>
+ <p><a href="https://sourceforge.net/project/showfiles.php?group_id=113939">Download</a></p>
+ <p><a href="resources.html">Other<br />
+ resources</a></p>
+ <p><a href="../../index.html">Return to<br />
+ FLib </a></p>
+ <p><a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=113939&amp;type=1" alt="SourceForge.net Logo" width="88" height="31" border="0" align="top" title="" /></a></p>
+ <p><a href="http://www.jars.com/"><img src="http://www.jars.com/images/r750.gif" alt="Rated JARS Top 25%" width="104" height="56" border="0" align="top" title="" /></a></p> </td>
+ <td id="content" width="614" align="left" valign="top"><!-- InstanceBeginEditable name="content" -->
+ <h1>Tutorial</h1>
+ <h2>TableLayout</h2>
+ <p>This layout manager was loosely inspired by the HTML table. It has all
+ the power of the GridBagLayout, but is much easier to use.</p>
+ <h3>The Layout Manager Concept</h3>
+ <p>Container is a Component class which contains one or more other components.
+ Every container has a layout manager which arranges the positions and
+ sizes of the components in the container. </p>
+ <p>The container is given a certain
+ amount of screen space for its components. The layout manager then
+ needs to figure out how to size and position the container's components
+ within
+ this space. It can use any algorithm it wants. It does not need to
+ fill all the space nor does it need to prevent components from overlapping.</p>
+ <h3>The TableLayout</h3>
+ <p>The TableLayout lays out components in a table format. The table has
+ rows and columns which are typically not all the same width or height
+ (if you need constant width and height, consider using the GridLayout). </p>
+ <p>You usually need
+ to define the number of columns in the table (the default is 1, which
+ is typically not what you want). As components are added to the container,
+ they are placed in the next available column of the current row. When
+ a row is filled, the next component adds a row and is placed in the first
+ column.</p>
+ <p>Consider this code:</p>
+ <pre>JPanel panel = new JPanel(new TableLayout(&quot;cols=3&quot;));
+panel.add(new JButton(&quot;0&quot;));
+panel.add(new JButton(&quot;1&quot;));
+panel.add(new JButton(&quot;2&quot;));
+panel.add(new JButton(&quot;3&quot;));
+panel.add(new JButton(&quot;4&quot;));
+</pre>
+ <p>This generates the following layout:</p>
+ <p align="center"><img src="images/tutorial1.png" width="213" height="139" /></p>
+ <p align="left">I started numbering with &quot;0&quot; because, for the TableLayout,
+ the first column is column 0. In this example, we see a three-column
+ table, with each JButton component added to the next available column.
+ Since there are only five components, the last &quot;slot&quot; is left empty.</p>
+ <h3>Attributes</h3>
+ <p>The above example is very simple because only one attribute was given
+ to the TableLayout (&quot;cols=5&quot;). Attributes are instructions to the TableLayout
+ which tell it how to lay out each component in the table or the table
+ as a whole. </p>
+ <p>The format of the attributes is similar to HTML attributes. The attributes
+ are case insensitive and can be separated with any white space. Attributes
+ which take a value are followed by an '=' and then an integer. Here's
+ an example: &quot;cols=6 rgap=2 cgap=5 w&quot;.</p>
+ <p>Attributes are evaluated from left to right. If you duplicate an attribute,
+ the right-most one wins.</p>
+ <p>Some attributes apply only to the table as whole. You pass them in a
+ String given either in the TableLayout constructor or in the <code>setTableAttributes()</code>
+ method.</p>
+ <p>The remaining attributes apply to the components in the container. Of
+ these, some can also be specified along with the table attributes. These
+ become the defaults for all components in the table. This is one of the
+ features which makes the TableLayout easy to use.</p>
+ <p>Here is the complete list of attributes:</p>
+ <table border="1" cellpadding="3" cellspacing="0">
+ <tr bgcolor="#CCCCFF">
+ <td><b>Name</b></td>
+ <td><b>Description</b></td>
+ <td><b>Has Value?</b></td>
+ <td><b>Default</b></td>
+ <td><b>Scope</b></td>
+ </tr>
+ <tr bgcolor="white">
+ <td>cols</td>
+ <td>Number of columns</td>
+ <td>Yes</td>
+ <td>1</td>
+ <td>Table</td>
+ </tr>
+ <tr bgcolor="white">
+ <td>col</td>
+ <td>Place Component in this column</td>
+ <td>Yes</td>
+ <td>Next empty column</td>
+ <td>Component</td>
+ </tr>
+ <tr bgcolor="white">
+ <td>skip</td>
+ <td>Skip a number of columns</td>
+ <td>Yes</td>
+ <td>0</td>
+ <td>Component</td>
+ </tr>
+ <tr bgcolor="white">
+ <td>rspan, cspan</td>
+ <td>Row and column spanning</td>
+ <td>Yes</td>
+ <td>1</td>
+ <td>Component</td>
+ </tr>
+ <tr bgcolor="white">
+ <td>titop, tibottom, tileft, tiright</td>
+ <td>Table insets</td>
+ <td>Yes</td>
+ <td>0</td>
+ <td>Table</td>
+ </tr>
+ <tr bgcolor="white">
+ <td>rgap, cgap</td>
+ <td>Row and column gaps</td>
+ <td>Yes</td>
+ <td>0</td>
+ <td>Table</td>
+ </tr>
+ <tr bgcolor="white">
+ <td>itop, ibottom, ileft, iright</td>
+ <td>Component insets</td>
+ <td>Yes</td>
+ <td>0</td>
+ <td>Table/Component</td>
+ </tr>
+ <tr bgcolor="white">
+ <td>tn, tne, te, tse, ts, tsw, tw, tnw, tc, tf, tfh, tfv</td>
+ <td>Table placement and fill</td>
+ <td>No</td>
+ <td>tf</td>
+ <td>Table</td>
+ </tr>
+ <tr bgcolor="white">
+ <td>n, ne, e, se, s, sw, w, nw, c, f, fh, fv</td>
+ <td>Component placement and fill</td>
+ <td>No</td>
+ <td>f</td>
+ <td>Table/Component</td>
+ </tr>
+ <tr bgcolor="white">
+ <td>rweight, cweight</td>
+ <td>Row and column weights</td>
+ <td>Yes</td>
+ <td>0</td>
+ <td>Table/Component</td>
+ </tr>
+ </table>
+ <h3>Rows and Columns</h3>
+ <p>As I stated above, you will almost always specify the number of columns
+ in the table. Components are then placed in the table from left to right,
+ adding new rows as necessary.</p>
+ <p>You can override the default component placement somewhat with &quot;col&quot;
+ and &quot;skip&quot;.
+ With &quot;col&quot;, you specify the column number in which the component
+ should be placed. If you have already passed the given column, the layout
+ adds another row and places the Component in the column on that new row.</p>
+ <p> &quot;skip&quot; allows you to skip a number of cells. If the layout reaches
+ the end of the row, skipping continues on the next row.</p>
+ <p> You can also make a component span multiple rows or columns with rspan
+ and cspan. Components added later will skip over any occupied cells,
+ which is important to note for row spanning.</p>
+ <p>Let's take the example above and make it use these attributes:</p>
+ <pre>JPanel panel = new JPanel(new TableLayout(&quot;cols=3&quot;));
+panel.add(new JButton(&quot;0&quot;));
+panel.add(new JButton(&quot;1&quot;),&quot;skip=1&quot;);
+panel.add(new JButton(&quot;2&quot;), &quot;col=1&quot;);
+panel.add(new JButton(&quot;3&quot;), &quot;rspan=2&quot;);
+panel.add(new JButton(&quot;4&quot;), &quot;cspan=2&quot;);</pre>
+ <p align="center"><img src="images/tutorial2.png" width="232" height="204" /></p>
+ <h3>Spacing</h3>
+ The space the TableLayout works with is inside the container's insets.
+ Some containers have insets of 0 (e.g. JPanel) and most don't allow you
+ to alter the insets. Since you will often want to control the space between
+ the table and the edges of the container,
+an &quot;extra&quot; table inset can be given: titop, tibottom, tileft and tiright
+(in
+the &quot;ti&quot; prefix, the &quot;t&quot; stands for &quot;table&quot; and
+the &quot;i&quot; stands
+for &quot;inset&quot;).
+<p> Within a cell, you can create space between the cells edges and the component
+ in the cell. The attributes are itop, ibottom, ileft and iright.</p>
+<p>You can also add space between cells in the table. This space is <em>only</em> placed
+ between cells; never along the edges of the table. This allows you to nest
+ table layouts and keep consistent cell spacing. The attributes used are rgap
+ and cgap and their default value is 0.</p>
+<p>Here is our example with the addition of table and cell insets plus cell spacing.
+ Note that we specify the cell insets and spacing when we define the table attributes.
+ This means that all components will get the same insets and spacing without
+ having to duplicate this information for each individual component. We override
+ the default insets for one of the components.</p>
+<pre>JPanel panel = new JPanel(
+ new TableLayout(
+ &quot;cols=3 rgap=3 cgap=3 &quot; +
+ &quot;titop=5 tibottom=5 tileft=5 tiright=5 &quot; +
+ &quot;itop=2 ibottom=2 ileft=2 iright=2&quot;));
+panel.add(new JButton(&quot;0&quot;));
+panel.add(new JButton(&quot;1&quot;), &quot;skip=1&quot;);
+panel.add(new JButton(&quot;2&quot;), &quot;itop=0 ibottom=0 ileft=0 iright=0 col=1&quot;);
+panel.add(new JButton(&quot;3&quot;), &quot;rspan=2&quot;);
+panel.add(new JButton(&quot;4&quot;), &quot;cspan=2&quot;);</pre>
+<p>Here's what we get:</p>
+<p align="center"><img src="images/tutorial3.png" width="260" height="226" /></p>
+<h3>Placement and Filling</h3>
+<p> Given that you have something to draw and a space to draw it in, you have
+ some choices as to where to place it and how to fill it, particularly when
+ the available area is bigger than required. So far, except for the insets,
+ we've allowed the table to completely fill the available container space and
+ we've
+ allowed each component to completely fill its table cell.</p>
+<p> Placement attributes allow you to place a component centered or in one of
+ eight compass directions within its cell. It's easier to demonstrate than to
+ describe:</p>
+<pre>JPanel panel = new JPanel(new TableLayout(&quot;cols=3&quot;));
+panel.add(new JButton(&quot;1&quot;), &quot;nw&quot;);
+panel.add(new JButton(&quot;2&quot;), &quot;n&quot;);
+panel.add(new JButton(&quot;3&quot;), &quot;ne&quot;);
+panel.add(new JButton(&quot;4&quot;), &quot;w&quot;);
+panel.add(new JButton(&quot;5&quot;), &quot;c&quot;);
+panel.add(new JButton(&quot;6&quot;), &quot;e&quot;);
+panel.add(new JButton(&quot;7&quot;), &quot;sw&quot;);
+panel.add(new JButton(&quot;8&quot;), &quot;s&quot;);
+panel.add(new JButton(&quot;9&quot;), &quot;se&quot;);</pre>
+<p align="center"><img src="images/tutorial4.png" width="204" height="138" /></p>
+<p>Using the placement attributes, a component is left at its preferred size.
+ Then it is moved to the designated edge or corner (or center) of the cell.</p>
+<p>There are placement attributes for the table itself. These are just like the
+ component placement attributes, but start with a &quot;t&quot;. You can find these in
+ the attribute table above. Like the component, the table is set to its preferred
+ size and moved to the edge, corner or center of the container.</p>
+<p>The entire table can be placed within the container using tn, tne, te, tse,
+ ts, tsw, tw, tnw and tc (the &quot;t&quot; prefix is for &quot;table&quot;).</p>
+<p> Fill attributes allow you to fill the item to cover all available space.
+ Horizontal and vertical filling are handled separately. For tables, the attributes
+ are tfh, tfv and tf. &quot;tf&quot; fills in both directions. For Components, use
+ fh, fv and f. For instance, if we change just the first line of the example
+ to:</p>
+<pre>JPanel panel = new JPanel(new TableLayout(&quot;cols=3 tnw&quot;));
+</pre>
+<p>We get</p>
+<p align="center"><img src="images/tutorial5.png" width="204" height="138" /></p>
+<p>The table is at its preferred size and placed in the northwest
+ corner of the container. Since the preferred sizes of the buttons are all the
+ same, the cells appeared to be filled even though they still have the same
+ placement attributes as before.</p>
+<p>Instead of placing a component within a cell, you can have it stretch to fill
+ the cell, either vertically, horizontally or both. Here's our example:</p>
+<pre>JPanel panel = new JPanel(new TableLayout(&quot;cols=3&quot;));
+panel.add(new JButton(&quot;1&quot;), &quot;c fh&quot;);
+panel.add(new JButton(&quot;2&quot;), &quot;f&quot;);
+panel.add(new JButton(&quot;3&quot;), &quot;c fh&quot;);</pre>
+<p align="center"><img src="images/tutorial6.png" width="261" height="67" /></p>
+<p>Since the default is &quot;f&quot;, we turn off filling by using &quot;c&quot;. Then we can fill
+ horizontally, vertically or in both directions. </p>
+<p>The &quot;f&quot; in the second component
+ is redundant, since this is the default. But keep in mind that you can define
+ the default placement or fill by specifying it in the table attributes.
+ For example,</p>
+<pre>JPanel panel = new JPanel(new TableLayout(&quot;cols=3 nw&quot;));</pre>
+<p>would place all components in the top left corner of each cell, unless a
+ component overrides the default.</p>
+<p>When combining placement and fill attributes, the rules are:</p>
+<ul>
+ <li>Placement attributes turn off all filling.</li>
+ <li>Fill attributes turn off placement, but only in the fill direction.</li>
+ </ul>
+<p>So, for example, &quot;n fh&quot; will stretch a component horizontally, but will attach
+ its top edge at the top of the cell.</p>
+<h3>Weighting</h3>
+<p>By setting the &quot;weight&quot; of each row or column, you can control how the rows
+ and columns are allocated space when there is more space available than is
+ needed (given the preferred sizes of the components).</p>
+<p>The default is to equally distribute the extra space to all cells. This is
+ not always what you want. Sometimes you'd like some rows or columns to stretch
+ while others stay a fixed size. This is easy to do: assign the rows and columns
+ you want to stretch a weight of 1 (&quot;rweight&quot; for row weight and &quot;cweight&quot; for
+ column weight). Here's an example. To keep it simple, we'll stretch components
+ &quot;1&quot; and &quot;3&quot; horizontally, while the rest of the components are fixed.</p>
+<pre>JPanel panel = new JPanel(new TableLayout(&quot;cols=5&quot;));
+panel.add(new JButton(&quot;0&quot;));
+panel.add(new JButton(&quot;1&quot;), &quot;cweight=1&quot;);
+panel.add(new JButton(&quot;2&quot;));
+panel.add(new JButton(&quot;3&quot;), &quot;cweight=1&quot;);
+panel.add(new JButton(&quot;4&quot;));</pre>
+<p align="center"><img src="images/tutorial7.png" width="205" height="26" /></p>
+<p align="center"><img src="images/tutorial8.png" width="314" height="26" /></p>
+<p>There are a few things to keep in mind about weighting. The weight of a row
+ is the largest weight of any component in the row. The advantage is that you
+ only have to set the row weight for one component in a row and the column weight
+ for one component in the column.</p>
+<p>Keep in mind that assigning the same weight to two rows or columns does
+ not make them the same size! Weighting only describes how <em>excess</em> space
+ is distributed to the cells. If the two components have different preferred
+ sizes, the row or column sizes won't be equal.</p>
+<p>Also remember that what we resize is the cell, not the component! If you want
+ the component to stretch, make sure it fills in the appropriate direction.</p>
+<p>There's a subtlety to weighting: weighting is only used when there is excess
+ space available given the components' preferred sizes. When there is not enough
+ space for preferred sizes, space is taken away from cells equally, regardless
+ of the weighting. However, components that shrink to their minimum allowed
+ size will not shrink further.</p>
+<p>There is further detail on all attributes, but particularly on weighting in
+ the <a href="api/org/freixas/tablelayout/TableLayout.html">TableLayout API</a>.</p>
+<h3>Summary</h3>
+<p> The TableLayout is both powerful and easy-to-use. After reading this tutorial,
+ you should examine the <a href="examples.html">example programs</a> provided.
+ One program places TableLayout head-to-head with GridBagLayout. The
+ other example simulates the GridBagExplorer written by Eric Burke. I call it
+ TableExplorer. It allows you to place some JButtons in a container and dynamically
+ change the table and component attributes. I used this program to create the
+ examples on this page.</p>
+<!-- InstanceEndEditable --></td>
+ </tr>
+</table>
+</body>
+<!-- InstanceEnd --></html>
diff --git a/libs/FLib/TableLayout/org/freixas/tablelayout/TableLayout.java b/libs/FLib/TableLayout/org/freixas/tablelayout/TableLayout.java
new file mode 100644
index 0000000..870115d
--- /dev/null
+++ b/libs/FLib/TableLayout/org/freixas/tablelayout/TableLayout.java
@@ -0,0 +1,2049 @@
+//**********************************************************************
+// Package
+//*********************************************************************
+
+package org.freixas.tablelayout;
+
+//**********************************************************************
+// Import list
+//**********************************************************************
+
+import java.awt.*;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+
+/**
+ * This layout was inspired by the HTML table: it lays out components
+ * much like the HTML table lays out table data. It is as capable as
+ * the GridBagLayout, but much easier to use.
+ * <h3>Attributes</h3>
+ * <p>
+ * When you create a TableLayout, you pass in a String which defines a
+ * set of attributes for the table. The TableLayout is then assigned
+ * to a Container. As you add each Component to the Container, you can
+ * also associate the Component with its own set of attributes.
+ * <p>
+ * The format of the attributes is similar to HTML attributes. The
+ * attributes are case insensitive and can be separated with
+ * any whitespace. Attributes which take a value are followed by an
+ * '=' and then an integer. Here's an example: "cols=6 rgap=2 cgap=5
+ * w".
+ * <p>
+ * Attributes are evaluated from left to right. If you duplicate an
+ * attribute, the right-most one wins.
+ * <p>All attributes can be specified for both the table and the
+ * individual Components. Some attributes are only used by the table,
+ * some are only used by the Components and some are used by both: the
+ * table instance is the default which each Component can override.
+ * <h3>Rows and Columns</h3>
+ * <p>
+ * When you create a table, you will almost always specify the number
+ * of columns in it. The default is 1. Columns are filled from left to
+ * right. When all columns are filled, a new row is automatically
+ * created.
+ * <p>
+ * You can override the default Component placement somewhat with "col"
+ * and "skip". col takes as a value, the column number in which the
+ * Component should be placed. Column numbers begin with 0. The
+ * default is to place the Component in the next available table cell.
+ * One caveat when using col is that if you have already passed the
+ * given column, the layout adds another row and places the Component
+ * in the column on that new row.
+ * <p>
+ * "skip" allows you to skip a number of cells. The default is 0. If
+ * the layout reaches the end of the row, skipping continues on the
+ * next row.
+ * <p>
+ * You can make a Component span multiple rows or columns with rspan
+ * and cspan. The default value for these is 1. Later components will
+ * skip over any occupied cells, which is particularly important to
+ * note for row spanning.
+ * <h3>Spacing</h3>
+ * The space the TableLayout works with is inside the Container's
+ * insets. Some Containers have insets of 0 (e.g. JPanel) and most
+ * don't allow you to alter the insets. Since you will often want to
+ * control the space between the table and the edges of the Container,
+ * an "extra" table inset can be given: titop, tibottom, tileft and
+ * tiright. Each of these takes a value, the pixel offset from the top,
+ * bottom, etc. The default value of each is 0.
+ * <p>
+ * You can create some space between cells in the table. This space is
+ * <em>only</em> placed between cells; never along the edges of the
+ * table. This allows you to nest table layouts and keep consistent
+ * cell spacing. The attributes used are rgap and cgap and their
+ * default value is 0.
+ * <p>
+ * Within a cell, you can also create some space between the cells
+ * edges and the Component in the cell. The attributes are itop,
+ * ibottom, ileft and iright. Their default value is 0.
+ * <h3>Placement and Filling</h3>
+ *<p>
+ * Given that you have something to draw and a space to draw it in,
+ * you have some choices as to where to place it and how to fill it,
+ * particularly when the drawing area is bigger than required.
+ * <p>
+ * Placement attributes allow you to place the item in one of eight
+ * compass directions or centered. The entire table can be placed
+ * within the container using tn, tne, te, tse, ts, tsw, tw, tnw and
+ * tc. Components can be placed within their cell using n, ne, e, se,
+ * s, sw, w, nw and c.
+ * <p>
+ * Fill attributes allow you to fill the item to cover all available
+ * space. Horizontal and vertical filling are handled separately. For
+ * tables, the attributes are tfh, tfv and tf. "tf" fills in both
+ * directions. For Components, use fh, fv and f.
+ * <p>
+ * Placement attributes turn off all filling. Fill attributes turn off
+ * placement, but only in the fill direction. So "n fh" will stretch a
+ * Component horizontally, but will place it at the "north" position
+ * (at the top of the cell).
+ * <p>
+ * The default value for both the table and the individual Components
+ * is to fill in both directions. You will almost always want to
+ * specify your own values.
+ * <h3>Weighting</h3>
+ * <p>
+ * When a table is filled, if the available space exceeds the space
+ * required, we stretch the table to fill the space. This implies that
+ * we have to stretch each cell. How much each cell should be filled
+ * is what weighting is all about. The attributes are rweight and
+ * cweight which take an integer weight factor. The default is 0.
+ * <p>
+ * Note that stretching a cell is not the same as stretching the
+ * Component inside the cell unless the component uses filling.
+ * <p>
+ * If you'd like some simple rules of thumbs, use these:
+ * <ul>
+ * <li>Assign a weight of 1 to rows or columns that you want to
+ * stretch (Also set the "f" attribute for the Components in that row
+ * or column!). Other rows and columns won't.
+ * <li>In some cases, you may want the table to fill while the
+ * components inside it don't. For example, you may want a JPanel's
+ * TitledBorder to fill the available space while the components in
+ * the JPanel stay at their preferred sizes. The solution is to fill
+ * the table, but set the component at the highest row and column
+ * position to have row and column weights of 1. Use "nw" position on
+ * all components in the last row or column. There are alternate
+ * solutions using nested layouts.
+ * </ul>
+ * <p>
+ * Ok, here are the dirty details.
+ * <p>
+ * If the available size is greater than the table's preferred size
+ * and table filling is enabled, weighting is used (they are otherwise
+ * ignored).
+ * <p>
+ * Weights are obtained by looking at each row and column and locating
+ * the largest weight; this becomes the row or column weight. If all
+ * weights are 0, we treat them as though they are all 1. We create
+ * a sum for all row weights and one for all column weights. This
+ * number defines the number of units into which the excess space will
+ * be divided.
+ * <p>
+ * For example, with three column weights of 1, 1, and 1, the space is
+ * divided into 3 units. If the excess space is 30 pixels, each unit
+ * is 10 pixels, which is the extra space each column receives. If the
+ * column weights were 0, 2, and 1, the space is still divided into 3
+ * units. But the column weights specify how many units each column
+ * receives. So, column 0 will receive nothing, column 1, 20 pixels
+ * and column 2, 10 pixels.
+ * <p>
+ * Keep in mind that rows and columns are handled separately. One may
+ * need filling and the other not.
+ * <p>
+ * When we don't have enough space for the preferred row or column
+ * sizes, we ignore the user-defined weights and treat each row or
+ * column as having equal weight. The approach then, is as above
+ * except that we are reducing cell sizes. Another difference is that
+ * no cell will be made smaller than its minimum size.
+ * <h3>Special Spanning Issues</h3>
+ * There are some special issues with row and column spanning. When
+ * determining minimum or preferred sizes, we need to know what
+ * portion of the Component's size to assign to each row and column
+ * that it spans. We solve this by doing two passes. In the first, we
+ * ignore spanning cells and determine row and column sizes without
+ * them. In the second pass, we look to see if the spanning Component
+ * will fit within the row and column sizes we determined. If not, we
+ * currently distribute the extra space based on the row or column
+ * weights of the rows or columns spanned. Someday, we may need to add
+ * attributes to provide more control.
+ * <p>
+ * The row and column weights given are applied to the row or column
+ * in which the Component begins.
+ * <p>
+ * <h3>Summary</h3>
+ * <p>
+ * This table summarizes the attribute information:
+ * <p>
+ * <table border="1" cellpadding="3" cellspacing="0">
+ * <tr bgcolor="#CCCCFF" id="TableHeadingColor">
+ * <td><b>Name</b></td>
+ * <td><b>Description</b></td>
+ * <td><b>Has Value?</b></td>
+ * <td><b>Default</b></td>
+ * <td><b>Scope</b></td>
+ * </tr>
+ * <tr bgcolor="white">
+ * <td>cols</td>
+ * <td>Number of columns</td>
+ * <td>Yes</td>
+ * <td>1</td>
+ * <td>Table</td>
+ * </tr>
+ * <tr bgcolor="white">
+ * <td>col</td>
+ * <td>Place Component in this column</td>
+ * <td>Yes</td>
+ * <td>Next empty column</td>
+ * <td>Component</td>
+ * </tr>
+ * <tr bgcolor="white">
+ * <td>skip</td>
+ * <td>Skip a number of columns</td>
+ * <td>Yes</td>
+ * <td>0</td>
+ * <td>Component</td>
+ * </tr>
+ * <tr bgcolor="white">
+ * <td>rspan, cspan</td>
+ * <td>Row and column spanning</td>
+ * <td>Yes</td>
+ * <td>1</td>
+ * <td>Component</td>
+ * </tr>
+ * <tr bgcolor="white">
+ * <td>titop, tibottom, tileft, tiright</td>
+ * <td>Table insets</td>
+ * <td>Yes</td>
+ * <td>0</td>
+ * <td>Table</td>
+ * </tr>
+ * <tr bgcolor="white">
+ * <td>rgap, cgap</td>
+ * <td>Row and column gaps</td>
+ * <td>Yes</td>
+ * <td>0</td>
+ * <td>Table</td>
+ * </tr>
+ * <tr bgcolor="white">
+ * <td>itop, ibottom, ileft, iright</td>
+ * <td>Component insets</td>
+ * <td>Yes</td>
+ * <td>0</td>
+ * <td>Table/Component</td>
+ * </tr>
+ * <tr bgcolor="white">
+ * <td>tn, tne, te, tse, ts, tsw, tw, tnw, tc, tf, tfh, tfv</td>
+ * <td>Table placement and fill</td>
+ * <td>No</td>
+ * <td>tf</td>
+ * <td>Table</td>
+ * </tr>
+ * <tr bgcolor="white">
+ * <td>n, ne, e, se, s, sw, w, nw, c, f, fh, fv</td>
+ * <td>Component placement and fill</td>
+ * <td>No</td>
+ * <td>f</td>
+ * <td>Table/Component</td>
+ * </tr>
+ * <tr bgcolor="white">
+ * <td>rweight, cweight</td>
+ * <td>Row and column weights</td>
+ * <td>Yes</td>
+ * <td>0</td>
+ * <td>Table/Component</td>
+ * </tr>
+ * </table>
+ *
+ * @author Antonio Freixas
+ */
+
+// Copyright © 2000-2004 Credence Systems Corporation.
+// All Rights Reserved.
+
+public class TableLayout
+ implements LayoutManager2
+{
+
+//**********************************************************************
+// Private Members
+//**********************************************************************
+
+// This is the set of attributes applied to the table. Some attributes
+// are used as cell defaults. Cell-only attributes are ignored
+
+private Attributes tableAttributes;
+
+// Attributes for each component can be found in these hash tables
+
+private HashMap compAttributes = new HashMap();
+
+// These variables store information about the row/col arrangement of
+// the components. These are set by placeComponents()
+
+private int nRows = 0;
+private int nCols = 0;
+private Component[][] components = null;
+
+// We cache measureComponents() information so that it is recalculated
+// after invalidateLayout() is called
+
+private boolean useCacheMeasureResults = false;
+
+// These variables store sizing information set by measureComponents()
+
+private int[] minWidth;
+private int[] prefWidth;
+private int[] maxWidth;
+private int[] adjWidth;
+private int[] colWeight;
+
+private int[] minHeight;
+private int[] prefHeight;
+private int[] maxHeight;
+private int[] adjHeight;
+private int[] rowWeight;
+
+// These sizes are the minimum width for the table, not including
+// either the container's insets or the table's insets
+
+private int MinWidth = 0;
+private int MinHeight = 0;
+private int PrefWidth = 0;
+private int PrefHeight = 0;
+private int MaxWidth = 0;
+private int MaxHeight = 0;
+private int ColWeight = 0;
+private int RowWeight = 0;
+
+static private int classCount = 0;
+private int instanceCount = classCount++;
+
+//**********************************************************************
+// Constructors
+//**********************************************************************
+
+/**
+ * Construct a new TableLayout.
+ */
+
+public
+TableLayout()
+{
+ this(null);
+}
+
+/**
+ * Construct a new TableLayout with the given attributes.
+ *
+ * @param attributes A list of attributes for the table. The list is
+ * described in the class documentation above. Cell-only
+ * attributes are ignored.
+ */
+
+public
+TableLayout(
+ String attributes)
+{
+ tableAttributes = new Attributes(attributes);
+}
+
+//**********************************************************************
+// Public
+//**********************************************************************
+
+/**
+ * Reset the table attributes for the layout.
+ *
+ * @param attributes The new table attributes.
+ */
+
+public void
+setTableAttributes(
+ String attributes)
+{
+ // Set the attributes for the table
+
+ tableAttributes = new Attributes(attributes);
+
+ // Since the component attributes "inherit" from the table
+ // attributes, any change to the table attributes causes us to
+ // reprocess all existing component attributes
+
+ Iterator iter = compAttributes.keySet().iterator();
+ while (iter.hasNext()) {
+ Component comp = (Component)iter.next();
+ Attributes a = (Attributes)compAttributes.get(comp);
+ a.parse(); // Re-parse
+ }
+
+ components = null;
+ useCacheMeasureResults = false;
+}
+
+/**
+ * Reset the attributes for a component in the layout. The component
+ * must already have been added to the container or else this call has
+ * no effect.
+ *
+ * @param comp The component to alter.
+ * @param attributes The new attributes for the component.
+ */
+
+public void
+setAttributes(
+ Component comp,
+ String attributes)
+{
+ if (compAttributes.get(comp) != null) {
+ Attributes a = new Attributes(attributes, false);
+ compAttributes.put(comp, a);
+
+ components = null;
+ useCacheMeasureResults = false;
+ }
+}
+
+/**
+ * Adds the component with the specified attributes to the layout.
+ *
+ * @param attributes A list of attributes for the component. The list
+ * is described in the class documentation above. Table-only
+ * attributes are ignored.
+ * @param comp The component to be added.
+ */
+
+public void
+addLayoutComponent(
+ String attributes,
+ Component comp)
+{
+ Attributes a = new Attributes(attributes, false);
+ compAttributes.put(comp, a);
+
+ components = null;
+ useCacheMeasureResults = false;
+
+ // DEBUG
+
+// if ("DEBUG".equals(comp.getName())) {
+// System.out.println(
+// "Adding comp " + comp.getClass().getName() + " " + a);
+// }
+}
+
+/**
+ * Adds the specified component to the layout, using the specified
+ * constraint object (which we expect to be a String of attributes).
+ *
+ * @param comp The component to be added.
+ * @param constraints A list of attributes for the component. The list
+ * is described in the class documentation above. Table-only
+ * attributes are ignored.
+ */
+
+public void
+addLayoutComponent(
+ Component comp,
+ Object constraints)
+{
+ String attributes = "";
+ if (constraints instanceof String) {
+ attributes = (String)constraints;
+ }
+ addLayoutComponent(attributes, comp);
+}
+
+/**
+ * Removes the specified component from the layout.
+
+ * @param comp The component to be removed.
+ */
+
+public void
+removeLayoutComponent(
+ Component comp)
+{
+ compAttributes.remove(comp);
+ components = null;
+}
+
+/**
+ * Calculates the minimum size dimensions for the layout given the
+ * components in the a parent container.
+ *
+ * @param parent The container to be laid out.
+ * @return The minimum layout size.
+ * @see #preferredLayoutSize(Container)
+ * @see #maximumLayoutSize(Container)
+ */
+
+public Dimension
+minimumLayoutSize(
+ Container parent)
+{
+ Insets insets = parent.getInsets();
+ measureComponents(parent);
+ int w =
+ insets.left + insets.right +
+ tableAttributes.tableInsets.left +
+ tableAttributes.tableInsets.right +
+ MinWidth;
+ int h =
+ insets.top + insets.bottom +
+ tableAttributes.tableInsets.top +
+ tableAttributes.tableInsets.bottom +
+ MinHeight;
+ if (w > Short.MAX_VALUE) w = Short.MAX_VALUE;
+ if (h > Short.MAX_VALUE) h = Short.MAX_VALUE;
+
+ return new Dimension(w, h);
+}
+
+/**
+ * Calculates the preferred size dimensions for the layout given the
+ * components in a parent container.
+ *
+ * @param parent The container to be laid out.
+ * @return The preferred layout size.
+ * @see #minimumLayoutSize(Container)
+ * @see #maximumLayoutSize(Container)
+ */
+
+public Dimension
+preferredLayoutSize(
+ Container parent)
+{
+ Insets insets = parent.getInsets();
+ measureComponents(parent);
+ int w =
+ insets.left + insets.right +
+ tableAttributes.tableInsets.left +
+ tableAttributes.tableInsets.right +
+ PrefWidth;
+ int h =
+ insets.top + insets.bottom +
+ tableAttributes.tableInsets.top +
+ tableAttributes.tableInsets.bottom +
+ PrefHeight;
+ if (w > Short.MAX_VALUE) w = Short.MAX_VALUE;
+ if (h > Short.MAX_VALUE) h = Short.MAX_VALUE;
+
+ return new Dimension(w, h);
+}
+
+/**
+ * Calculates the maximum size dimensions for the layout given the
+ * components in a parent container.
+ *
+ * @param parent The container parent.
+ * @return The maximum layout size.
+ * @see #minimumLayoutSize(Container)
+ * @see #preferredLayoutSize(Container)
+ */
+
+public Dimension
+maximumLayoutSize(
+ Container parent)
+{
+ Insets insets = parent.getInsets();
+ measureComponents(parent);
+
+ // Note that the maximum size of the container is not the maximum
+ // size of the table if the fill options are not used
+
+ int w = Short.MAX_VALUE;
+ if (tableAttributes.tableHorizontal != Attributes.FILL) {
+ w = insets.left + insets.right +
+ tableAttributes.tableInsets.left +
+ tableAttributes.tableInsets.right +
+ MaxWidth;
+ if (w > Short.MAX_VALUE) w = Short.MAX_VALUE;
+ }
+
+ int h = Short.MAX_VALUE;
+ if (tableAttributes.tableVertical != Attributes.FILL) {
+ h = insets.top + insets.bottom +
+ tableAttributes.tableInsets.top +
+ tableAttributes.tableInsets.bottom +
+ MaxHeight;
+ if (h > Short.MAX_VALUE) h = Short.MAX_VALUE;
+ }
+
+ return new Dimension(w, h);
+}
+
+/**
+ * Returns the alignment along the x axis. This always returns 0.5.
+ *
+ * @param parent The container whose alignment we want.
+ * @return The alignment along the x axis.
+ */
+
+public float
+getLayoutAlignmentX(
+ Container parent)
+{
+ return 0.5f;
+}
+
+/**
+ * Returns the alignment along the y axis. This always returns 0.5.
+ *
+ * @param parent The container whose alignment we want.
+ * @return The alignment along the y axis.
+ */
+
+public float
+getLayoutAlignmentY(
+ Container parent)
+{
+ return 0.5f;
+}
+
+/**
+ * Invalidates the layout. Cached information will be discarded.
+ *
+ * @param parent The container whose alignment we want.
+ */
+
+public void
+invalidateLayout(
+ Container parent)
+{
+ useCacheMeasureResults = false;
+}
+
+/**
+ * Lays out the components in the given container.
+ *
+ * @param parent The container which needs to be laid out.
+ */
+
+public void
+layoutContainer(
+ Container parent)
+{
+ // Get the row and column measurements
+
+ measureComponents(parent);
+
+ // Get the parent insets and determine the full amount of space we
+ // have available
+
+ Insets insets = parent.getInsets();
+ int fullWidth =
+ parent.getSize().width -
+ (insets.left + insets.right) -
+ (tableAttributes.tableInsets.left +
+ tableAttributes.tableInsets.right);
+ int fullHeight = parent.getSize().height -
+ (insets.top + insets.bottom) -
+ (tableAttributes.tableInsets.top +
+ tableAttributes.tableInsets.bottom);
+
+ // We normally draw each row and column in its preferred size. If
+ // we have more space, we grow the cells. If less, we shrink the
+ // cells
+
+ boolean shrinkWidth = fullWidth < PrefWidth;
+ boolean shrinkHeight = fullHeight < PrefHeight;
+
+ // Get the position and size of the table. There are three
+ // possibilities for the table size:
+ //
+ // * The available space equals or exceeds the preferred size
+ // and the table is filled - use the full space available. We
+ // will expand the cells in a later step.
+ //
+ // * The available space equals or exceeds the preferred size
+ // and the table is not filled - use the preferred size.
+ //
+ // * The available space is less than the preferred size - use
+ // the available space. We will shrink the cells in a later
+ // step.
+
+ int tableX = insets.left + tableAttributes.tableInsets.left;
+ int tableY = insets.top + tableAttributes.tableInsets.top;
+
+ int tableWidth = PrefWidth;
+ if (shrinkWidth ||
+ tableAttributes.tableHorizontal == Attributes.FILL) {
+ tableWidth = fullWidth;
+ }
+ int tableHeight = PrefHeight;
+ if (shrinkHeight ||
+ tableAttributes.tableVertical == Attributes.FILL) {
+ tableHeight = fullHeight;
+ }
+
+ if (tableAttributes.tableHorizontal == Attributes.CENTER ||
+ tableAttributes.tableHorizontal == Attributes.FILL) {
+ tableX += (fullWidth - tableWidth) / 2;
+ }
+ else if (tableAttributes.tableHorizontal == Attributes.RIGHT) {
+ tableX += fullWidth - tableWidth;
+ }
+
+ if (tableAttributes.tableVertical == Attributes.CENTER ||
+ tableAttributes.tableVertical == Attributes.FILL) {
+ tableY += (fullHeight - tableHeight) / 2;
+ }
+ else if (tableAttributes.tableVertical == Attributes.BOTTOM) {
+ tableY += fullHeight - tableHeight;
+ }
+
+ // Now adjust the column and row cell sizes
+
+ adjustCellSizes(
+ nCols,
+ (tableAttributes.tableHorizontal == Attributes.FILL),
+ shrinkWidth,
+ minWidth,
+ PrefWidth, prefWidth,
+ fullWidth,
+ ColWeight, colWeight,
+ adjWidth,
+ parent);
+
+ adjustCellSizes(
+ nRows,
+ (tableAttributes.tableVertical == Attributes.FILL),
+ shrinkHeight,
+ minHeight,
+ PrefHeight, prefHeight,
+ fullHeight,
+ RowWeight, rowWeight,
+ adjHeight,
+ parent);
+
+ // Begin the component layout loop
+
+ for (int r = 0; r < nRows; r++) {
+ for (int c = 0; c < nCols; c++) {
+ Component comp = components[r][c];
+ if (comp == null) continue;
+
+ Attributes attributes = (Attributes)compAttributes.get(comp);
+
+ Dimension compMinSize = comp.getMinimumSize();
+ Dimension compPrefSize = comp.getPreferredSize();
+ Dimension compMaxSize = comp.getMaximumSize();
+
+ // Base position
+
+ int compX =
+ tableX +
+ (tableAttributes.cGap * c) +
+ attributes.cellInsets.left;
+ for (int i = 0; i < c; i++) compX += adjWidth[i];
+
+ int compY =
+ tableY +
+ (tableAttributes.rGap * r) +
+ attributes.cellInsets.top;
+ for (int i = 0; i < r; i++) compY += adjHeight[i];
+
+ // Get the cell size. This has to take into account row
+ // and column spanning
+
+ int cellWidth = adjWidth[c];
+ for (int i = 1; i < attributes.cSpan; i++) {
+ cellWidth += tableAttributes.cGap + adjWidth[c + i];
+ }
+
+ int cellHeight = adjHeight[r];
+ for (int i = 1; i < attributes.rSpan; i++) {
+ cellHeight += tableAttributes.rGap + adjHeight[r + i];
+ }
+
+ int insetCellWidth =
+ cellWidth -
+ attributes.cellInsets.left - attributes.cellInsets.right;
+ int insetCellHeight =
+ cellHeight -
+ attributes.cellInsets.top - attributes.cellInsets.bottom;
+
+ // Get the component size. Use the preferred size, if
+ // possible. If not use the cell size minus insets
+
+ int compWidth = compPrefSize.width;
+ int compHeight = compPrefSize.height;
+ if (compWidth > insetCellWidth) compWidth = insetCellWidth;
+ if (compHeight > insetCellHeight) compHeight = insetCellHeight;
+
+ // Adjust for fill
+
+ if (attributes.horizontal == Attributes.FILL) {
+ compWidth = insetCellWidth;
+ compWidth = Math.max(compWidth, compMinSize.width);
+ // Some components (like JButton) can exceed their max size
+ // compWidth = Math.min(compWidth, compMaxSize.width);
+ }
+ if (attributes.vertical == Attributes.FILL) {
+ compHeight = insetCellHeight;
+ compHeight = Math.max(compHeight, compMinSize.height);
+ // Some components (like JButton) can exceed their max size
+ // compHeight = Math.min(compHeight, compMaxSize.height);
+ }
+
+ // Position properly. We treat FILL like CENTER since
+ // the min/max limits may have prevented us from really
+ // filling
+
+ if (attributes.horizontal == Attributes.CENTER ||
+ attributes.horizontal == Attributes.FILL) {
+ compX += (cellWidth -
+ (attributes.cellInsets.left +
+ attributes.cellInsets.right) - compWidth) / 2;
+ }
+ else if (attributes.horizontal == Attributes.RIGHT) {
+ compX += (cellWidth -
+ (attributes.cellInsets.left +
+ attributes.cellInsets.right) - compWidth);
+ }
+
+ if (attributes.vertical == Attributes.CENTER ||
+ attributes.vertical == Attributes.FILL) {
+ compY += (cellHeight -
+ (attributes.cellInsets.top +
+ attributes.cellInsets.bottom) - compHeight) / 2;
+ }
+ else if (attributes.vertical == Attributes.BOTTOM) {
+ compY += (cellHeight -
+ (attributes.cellInsets.top +
+ attributes.cellInsets.bottom) - compHeight);
+ }
+
+ // Place the component
+
+ comp.setBounds(compX, compY, compWidth, compHeight);
+
+ // DEBUG
+
+// if ("DEBUG".equals(parent.getName())) {
+// System.out.println("Placing component " +
+// comp.getClass().getName() +
+// " (" + compX + ", " + compY + ") " +
+// compWidth + " x " + compHeight);
+// }
+ }
+ }
+}
+
+// The inherited toString() method is acceptable.
+
+//**********************************************************************
+// Private
+//**********************************************************************
+
+/**
+ * The row or column sizes need to be adjusted. We may want to grow
+ * or shrink the sizes, based on whether the available space is larger
+ * or smaller than the preferred size.
+ * <p>
+ * If we grow the table, we pay attention to the user's weighting
+ * factors. If we shrink the table, we assign all cells a weight
+ * factor of 1.
+ *
+ * @param nCells The number of cells in the row or column.
+ * @param fill True if the table rows or columns should fill the
+ * available space.
+ * @param shrink True if the available size is less than the preferred
+ * size.
+ * @param minSize The minimum sizes of each row or column.
+ * @param PrefSize The sum of the preferred sizes of all cells in the
+ * row or column plus any cell gaps.
+ * @param prefSize The preferred sizes of each row or column.
+ * @param CellWeight The sum of all cell weights in the row or column.
+ * @param cellWeight The weight of each row or column.
+ * @param adjSize The adjusted size of each row or column. The
+ * contents of this array are set and returned.
+ */
+
+private void
+adjustCellSizes(
+ int nCells,
+ boolean fill,
+ boolean shrink,
+ int[] minSize,
+ int PrefSize,
+ int[] prefSize,
+ int fullSize,
+ int CellWeight,
+ int[] cellWeight,
+ int[] adjSize,
+ Container parent)
+
+{
+ // The sum of the weights (CellWeight) determines how many units
+ // any excess (or reduced) space should be divided into. The
+ // unitOfSpace variable is the size of each unit.
+ //
+ // We use weighting under two conditions:
+ //
+ // * We are shrinking the table.
+ //
+ // * We have more space than we need and the user asked us to
+ // fill the available space
+ //
+ // When we have more than enough space for the preferred row and
+ // column sizes, we follow the user's weighting. There is a
+ // special case if all weights are 0: the weights are treated as
+ // thought they were all 1.
+ //
+ // When do not have enough space, we weight everything the same.
+
+ double unitOfSpace = 0.0;
+ if (shrink || fill) {
+ unitOfSpace =
+ (double)(fullSize - PrefSize) /
+ (double)((shrink || CellWeight == 0) ? nCells : CellWeight);
+ }
+ else {
+ // No adjustment needed: use the preferred sizes
+
+ for (int i = 0; i < nCells; i++) {
+ adjSize[i] = prefSize[i];
+ }
+ return;
+ }
+
+ double extraSpace; int iExtraSpace;
+ double error = 0.0; int iError = -999999;
+
+ int adjWeight;
+
+ for (int i = 0; i < nCells; i++) {
+
+ // Initialize the adjusted size to the preferred size
+
+ adjSize[i] = prefSize[i];
+
+ // Get the cell weight based on various conditions
+
+ adjWeight = (shrink || CellWeight == 0) ? 1 : cellWeight[i];
+
+ // Determine how much extra space to give each cell. The space
+ // is the weight (number of units) times the unit size. We can
+ // only assign an integer number of pixels, which creates a
+ // fractional error
+
+ extraSpace = unitOfSpace * adjWeight;
+ iExtraSpace = (int)extraSpace;
+ adjSize[i] += iExtraSpace;
+
+ error += extraSpace - iExtraSpace;
+ iError = (int)error;
+
+ // Increment/decrement this cell by the accumulated integer
+ // error, if it's not 0
+
+ if (shrink) {
+ if (iError < 0) {
+ adjSize[i] += iError;
+ }
+ }
+ else {
+ if (iError > 0) {
+ adjSize[i] += iError;
+ }
+ }
+ error -= iError;
+
+ // If we're shrinking, we need to prevent any cell from
+ // shrinking below its minimum size. The error is adjusted to
+ // include the space added to the cell
+
+ if (shrink && (adjSize[i] < minSize[i])) {
+ error -= minSize[i] - adjSize[i];
+ adjSize[i] = minSize[i];
+ }
+
+ iError = (int)error;
+ }
+
+ // If we are growing, the error should be less than 1 pixel. If we
+ // are shrinking, we limit each cell to its minimum size, so we
+ // can accumulate larger errors as cells refuse to shrink. So we
+ // distribute the error to cells that can still shrink. We repeat
+ // this until we've reduced the error to 0 or we're unable to
+ // shrink the error anymore.
+ //
+ // Remember that iError is a negative number
+
+ if (shrink || iError < 0) {
+ int lastIError;
+
+ do {
+ lastIError = iError;
+ for (int i = 0; i < nCells; i++) {
+
+ // If the cell is already at its minimum size, skip it
+
+ if (adjSize[i] > minSize[i]) {
+ adjSize[i]--;
+ iError++;
+ }
+ }
+ }
+ while (iError < 0 && iError > lastIError);
+ }
+
+ // DEBUG
+
+// if ("DEBUG".equals(parent.getName())) {
+// System.out.println(" iError " + iError);
+// for (int i = 0; i < nCells; i++) {
+// System.out.println(" " + i + ") Adjusted size = " + adjSize[i]);
+// }
+// }
+}
+
+/**
+ * For each component, determine its row/col position and place it in
+ * an array for easy access later. Elements spanning multiple rows
+ * and/or columns are placed in the NW row/col slot in the array.
+ * Results are placed in class fields.
+ *
+ * @param parent The parent container.
+ */
+
+private void
+placeComponents(
+ Container parent)
+{
+ // If we haven't added or removed a component since the last time
+ // placeComponents() was called, we assume the current results are
+ // OK
+
+ if (components != null) return;
+
+ int compCount = parent.getComponentCount();
+
+ // Get the number of columns specified by the user
+
+ nCols = tableAttributes.columns;
+
+ // Create the array of components
+
+ CompArray compArray = new CompArray(tableAttributes.columns, compCount);
+
+ // Fill the array with components, taking row/column spanning
+ // into account
+
+ int row = 0;
+ int col = 0;
+
+ for (int i = 0; i < compCount; i++) {
+
+ // Get the next component and its options
+
+ Component comp = parent.getComponent(i);
+ Attributes attributes = (Attributes)compAttributes.get(comp);
+
+ // If the column span is greater than the column size,
+ // truncate it to the column size
+
+ attributes.cSpan = attributes.originalCSpan;
+ if (attributes.cSpan > tableAttributes.columns) {
+ attributes.cSpan = tableAttributes.columns;
+
+ }
+ // Handle options to force us to column 0 or to skip columns
+
+ if (attributes.column != Attributes.NEXT_COLUMN) {
+ if (col > attributes.column) row++;
+ col = attributes.column;
+ }
+ col += attributes.skip;
+ if (col >= nCols) {
+ row++;
+ col = 0;
+ }
+
+ // Skip over any cells that are already occupied
+
+ while (compArray.get(row, col) != null) {
+ col++;
+ if (col >= nCols) {
+ row++;
+ col = 0;
+ }
+ }
+
+ // If spanning multiple columns, will we fit on this row?
+
+ if (col + attributes.cSpan > nCols) {
+ row++;
+ col = 0;
+ }
+
+ // For now, fill all the cells that are occupied by this
+ // component
+
+ for (int c = 0; c < attributes.cSpan; c++) {
+ for (int r = 0; r < attributes.rSpan; r++) {
+ compArray.set(row + r, col + c, comp);
+ }
+ }
+
+ // Advance to the next cell, ready for the next component
+
+ col += attributes.cSpan;
+ if (col >= nCols) {
+ row++;
+ col = 0;
+ }
+ }
+
+ // Now we know how many rows there are. We can use a normal,
+ // properly sized array from now on. The array returned includes
+ // the maximum row into which anything was entered, including any
+ // row spans
+
+ components = compArray.getArray();
+ nRows = components.length;
+
+ // Now we've positioned our components we can thin out the cells so
+ // we only remember the top left corner of each component
+
+ for (row = 0; row < nRows; row++) {
+ for (col = 0; col < nCols; col++) {
+ Component comp = components[row][col];
+ for (int r = row; r < nRows && components[r][col] == comp; r++) {
+ for (int c = col; c < nCols && components[r][c] == comp; c++) {
+ if (r > row || c > col) {
+ components[r][c] = null;
+ }
+ }
+ }
+ }
+ }
+
+ // DEBUG
+
+// if ("DEBUG".equals(parent.getName())) {
+// System.out.println("placeComponents finished: rows = " +
+// nRows + " cols = " + nCols);
+// for (int r = 0; r < nRows; r++) {
+// System.out.println("Row " + r + ":");
+// for (int c = 0; c < nCols; c++) {
+// System.out.println(" Col " + c + " Comp " +
+// ((components[r][c] == null) ?
+// "none" :
+// components[r][c].getClass().getName()));
+// }
+// }
+// }
+}
+
+/**
+ * In this method, we will determine the minimum, preferred and
+ * maximum sizes of the components as layed out by the table layout
+ * manager
+ *
+ * @param parent The parent container.
+ */
+
+private void
+measureComponents(
+ Container parent)
+{
+ if (useCacheMeasureResults) return;
+
+ // Determine the row/col positions for the components
+
+ placeComponents(parent);
+
+ // Allocate new arrays to store row and column preferred and min
+ // sizes, but only if the old arrays aren't big enough
+
+ if (minWidth == null || minWidth.length < nCols) {
+ minWidth = new int[nCols];
+ prefWidth = new int[nCols];
+ maxWidth = new int[nCols];
+ adjWidth = new int[nCols];
+ colWeight = new int[nCols];
+ }
+ if (minHeight == null || minHeight.length < nRows) {
+ minHeight = new int[nRows];
+ prefHeight = new int[nRows];
+ maxHeight = new int[nRows];
+ adjHeight = new int[nRows];
+ rowWeight = new int[nRows];
+ }
+
+ for (int i = 0; i < nCols; i++) {
+ minWidth[i] = 0;
+ prefWidth[i] = 0;
+ maxWidth[i] = 0;
+ colWeight[i] = 0;
+ }
+ for (int i = 0; i < nRows; i++) {
+ minHeight[i] = 0;
+ prefHeight[i] = 0;
+ maxHeight[i] = 0;
+ rowWeight[i] = 0;
+ }
+
+ // Measure the minimum and preferred size of each row and column
+
+ for (int row = 0; row < nRows; row++) {
+ for (int col = 0; col < nCols; col++) {
+ Component comp = components[row][col];
+ if (comp != null) {
+ Attributes attributes = (Attributes)compAttributes.get(comp);
+
+ Dimension minSize = new Dimension(comp.getMinimumSize());
+ Dimension prefSize = new Dimension(comp.getPreferredSize());
+ Dimension maxSize = new Dimension(comp.getMaximumSize());
+
+ // Add the cell insets
+
+ minSize.width +=
+ attributes.cellInsets.left + attributes.cellInsets.right;
+ minSize.height +=
+ attributes.cellInsets.top + attributes.cellInsets.bottom;
+ prefSize.width +=
+ attributes.cellInsets.left + attributes.cellInsets.right;
+ prefSize.height +=
+ attributes.cellInsets.top + attributes.cellInsets.bottom;
+ maxSize.width +=
+ attributes.cellInsets.left + attributes.cellInsets.right;
+ maxSize.height +=
+ attributes.cellInsets.right + attributes.cellInsets.bottom;
+
+ // Make sure that 0 <= minSize <= prefSize <= maxSize
+
+ limitDimension(minSize, new Dimension(0, 0));
+ limitDimension(prefSize, minSize);
+ limitDimension(maxSize, prefSize);
+
+ // First pass, we determine the sizes while ignoring
+ // components which span columns or rows
+
+ if (attributes.cSpan == 1) {
+ minWidth[col] =
+ Math.max(minSize.width, minWidth[col]);
+ prefWidth[col] =
+ Math.max(prefSize.width, prefWidth[col]);
+ maxWidth[col] =
+ Math.max(maxSize.width, maxWidth[col]);
+ }
+
+ if (attributes.rSpan == 1) {
+ minHeight[row] =
+ Math.max(minSize.height, minHeight[row]);
+ prefHeight[row] =
+ Math.max(prefSize.height, prefHeight[row]);
+ maxHeight[row] =
+ Math.max(maxSize.height, maxHeight[row]);
+ }
+
+ // Get the row and column weights. The weight is the
+ // maximum value for the row or column
+
+ if (attributes.cWeight > colWeight[col]) {
+ colWeight[col] = attributes.cWeight;
+ }
+ if (attributes.rWeight > rowWeight[row]) {
+ rowWeight[row] = attributes.rWeight;
+ }
+ }
+ }
+ }
+
+ // Do it again, but just for components which span multiple cells.
+ //
+
+ for (int row = 0; row < nRows; row++) {
+ for (int col = 0; col < nCols; col++) {
+ Component comp = components[row][col];
+ if (comp != null) {
+ Attributes attributes = (Attributes)compAttributes.get(comp);
+
+ if (attributes.rSpan == 1 && attributes.cSpan == 1) continue;
+
+ Dimension minSize = new Dimension(comp.getMinimumSize());
+ Dimension prefSize = new Dimension(comp.getPreferredSize());
+ Dimension maxSize = new Dimension(comp.getMaximumSize());
+
+ // Add the cell insets
+
+ minSize.width +=
+ attributes.cellInsets.top + attributes.cellInsets.bottom;
+ minSize.height +=
+ attributes.cellInsets.left + attributes.cellInsets.right;
+ prefSize.width +=
+ attributes.cellInsets.top + attributes.cellInsets.bottom;
+ prefSize.height +=
+ attributes.cellInsets.left + attributes.cellInsets.right;
+ maxSize.width +=
+ attributes.cellInsets.top + attributes.cellInsets.bottom;
+ maxSize.height +=
+ attributes.cellInsets.left + attributes.cellInsets.right;
+
+ // Make sure that 0 <= minSize <= prefSize <= maxSize
+
+ limitDimension(minSize, new Dimension(0, 0));
+ limitDimension(prefSize, minSize);
+ limitDimension(maxSize, prefSize);
+
+ if (attributes.cSpan > 1) {
+ adjustForSpans(col,
+ minSize.width,
+ minWidth,
+ colWeight,
+ attributes.cSpan,
+ tableAttributes.cGap);
+ adjustForSpans(col,
+ prefSize.width,
+ prefWidth,
+ colWeight,
+ attributes.cSpan,
+ tableAttributes.cGap);
+ adjustForSpans(col,
+ maxSize.width,
+ maxWidth,
+ colWeight,
+ attributes.cSpan,
+ tableAttributes.cGap);
+ }
+
+ if (attributes.rSpan > 1) {
+ adjustForSpans(row,
+ minSize.height,
+ minHeight,
+ rowWeight,
+ attributes.rSpan,
+ tableAttributes.rGap);
+ adjustForSpans(row,
+ prefSize.height,
+ prefHeight,
+ rowWeight,
+ attributes.rSpan,
+ tableAttributes.rGap);
+ adjustForSpans(row,
+ maxSize.height,
+ maxHeight,
+ rowWeight,
+ attributes.rSpan,
+ tableAttributes.rGap);
+ }
+ }
+ }
+ }
+
+ // Add up all the individual values
+
+ MinWidth = 0;
+ MinHeight = 0;
+ PrefWidth = 0;
+ PrefHeight = 0;
+ MaxWidth = 0;
+ MaxHeight = 0;
+ ColWeight = 0;
+ RowWeight = 0;
+
+ // Sum up everything
+
+ for (int i = 0; i < nCols; i++) {
+ MinWidth += minWidth[i];
+ PrefWidth += prefWidth[i];
+ MaxWidth += maxWidth[i];
+ ColWeight += colWeight[i];
+ }
+
+ for (int i = 0; i < nRows; i++) {
+ MinHeight += minHeight[i];
+ PrefHeight += prefHeight[i];
+ MaxHeight += maxHeight[i];
+ RowWeight += rowWeight[i];
+ }
+
+ // Add in the table gaps
+
+ int cExtra = tableAttributes.cGap * (nCols - 1);
+ int rExtra = tableAttributes.rGap * (nRows - 1);
+
+ MinWidth += cExtra;
+ PrefWidth += cExtra;
+ MaxWidth += cExtra;
+
+ MinHeight += rExtra;
+ PrefHeight += rExtra;
+ MaxHeight += rExtra;
+
+ // DEBUG
+
+// if ("DEBUG".equals(parent.getName())) {
+// System.out.println("MeasureComponents:");
+// System.out.println(" Min " + MinWidth + ", " + MinHeight);
+// System.out.println(" Pref " + PrefWidth + ", " + PrefHeight);
+// System.out.println(" Max " + MaxWidth + ", " + MaxHeight);
+// System.out.println(" Weight " + ColWeight + ", " + RowWeight );
+
+// for (int c = 0; c < nCols; c++) {
+// System.out.println(" Col " + c +
+// " min " + minWidth[c] +
+// " pref " + prefWidth[c] +
+// " max " + maxWidth[c] +
+// " wgt " + colWeight[c]);
+// }
+// for (int r = 0; r < nRows; r++) {
+// System.out.println(" Row " + r +
+// " min " + minHeight[r] +
+// " pref " + prefHeight[r] +
+// " max " + maxHeight[r] +
+// " wgt " + rowWeight[r]);
+// }
+// }
+
+ // We keep using these results until the layout is invalidated
+
+ useCacheMeasureResults = true;
+}
+
+/**
+ * Make sure the first dimension is greater than or equal to the
+ * second. Also make sure the first dimension is less than an absolute
+ * maximum.
+ *
+ * @param d1 The first dimension (may be modified).
+ * @param d2 The second dimension (will not be modified).
+ */
+
+private void
+limitDimension(
+ Dimension d1,
+ Dimension d2)
+{
+ if (d1.width < d2.width) d1.width = d2.width;
+ if (d1.height < d2.height) d1.height = d2.height;
+ if (d1.width > Short.MAX_VALUE) d1.width = Short.MAX_VALUE;
+ if (d1.height > Short.MAX_VALUE) d1.height = Short.MAX_VALUE;
+}
+
+/**
+ * If a component spans multiple rows or columns, we need to
+ * distribute portions of its size to the individual rows and columns.
+ *
+ * @param pos Row or column position where the span component starts.
+ * @param compSize The height or width of the component
+ * @param sizes The array of widths or heights to adjust.
+ * @param span The number of cells spanned by the component.
+ * @param gap The row or column gap.
+ */
+
+private void
+adjustForSpans(
+ int pos,
+ int compSize,
+ int[] sizes,
+ int[] weight,
+ int span,
+ int gap)
+{
+ // The total size is the size of the rows or columns plus all the
+ // space in between
+
+ int totalSize = 0;
+ for (int i = 0; i < span; i++) {
+ totalSize += sizes[pos + i];
+ }
+ totalSize += gap * (span - 1);
+
+ // If the spanned component is bigger than the the rows or columns
+ // it spans, we divide the extra space based on the weights of the
+ // spanned rows or columns
+
+ if (compSize > totalSize) {
+ int extra = compSize - totalSize;
+ int totalWeight = 0;
+ for (int i = 0; i < span; i++) {
+ totalWeight += weight[pos + i];
+ }
+ if (totalWeight == 0) totalWeight = span;
+
+ int remainder = extra;
+ for (int i = 0; i < span; i++) {
+ int portion = (extra * weight[pos + i]) / totalWeight;
+ sizes[pos + i] += portion;
+ remainder -= portion;
+ }
+
+ // Because of truncation, we may have a little left over which
+ // we give to the last row or column
+
+ if (remainder > 0) {
+ sizes[pos + span - 1] += remainder;
+ }
+ }
+}
+
+//**********************************************************************
+// Inner Classes
+//**********************************************************************
+
+//**********************************************************************
+//
+// Attributes
+//
+// This class converts a string attribute into a data structure.
+//
+//**********************************************************************
+
+// Attributes not needing assigment
+
+static String[] attr = {
+ "tn", "tne", "tnw",
+ "ts", "tse", "tsw",
+ "te", "tw", "tc",
+ "tfh", "tfv", "tf",
+ "n", "ne", "nw",
+ "s", "se", "sw",
+ "e", "w", "c",
+ "fh", "fv", "f",
+};
+
+// Attributes needing assigment
+
+static String[] assgn = {
+ "cols",
+ "rgap",
+ "cgap",
+ "titop",
+ "tibottom",
+ "tileft",
+ "tiright",
+ "itop",
+ "ibottom",
+ "ileft",
+ "iright",
+ "rweight",
+ "cweight",
+ "rspan",
+ "cspan",
+ "col",
+ "skip"
+};
+
+private class Attributes
+{
+
+// Constants used for fill and placement operations
+
+static final int CENTER = 0;
+static final int LEFT = 1;
+static final int RIGHT = 2;
+static final int TOP = 3;
+static final int BOTTOM = 4;
+static final int FILL = 5;
+
+// Constants for column placement
+
+static final int NEXT_COLUMN = -1;
+
+// The attributes in their original string form
+
+String attrString;
+
+// Table-only options
+
+int columns = 1;
+int tableHorizontal = FILL;
+int tableVertical = FILL;
+int rGap = 0;
+int cGap = 0;
+Insets tableInsets = new Insets(0, 0, 0, 0);
+
+// Table/cell options
+
+int horizontal = FILL;
+int vertical = FILL;
+Insets cellInsets = new Insets(0, 0, 0, 0);
+int rWeight = 0;
+int cWeight = 0;
+
+// Cell-only options
+
+int rSpan = 1;
+int cSpan = 1;
+int originalCSpan = cSpan;
+int column = NEXT_COLUMN;
+int skip = 0;
+
+int tkPos = 0;
+boolean isTableAttributes = false;
+
+Attributes(
+ String attrString)
+{
+ this(attrString, true);
+}
+
+Attributes(
+ String attrString,
+ boolean isTableAttributes)
+{
+ // Save the string for later access
+
+ this.attrString = attrString;
+
+ this.isTableAttributes = isTableAttributes;
+
+ parse();
+}
+
+public String
+toString()
+{
+ String sep = System.getProperty("line.separator");
+ return "TableLayout Attributes:" + sep +
+ "isTableAttributes = " + isTableAttributes + sep +
+ "columns = " + columns + sep +
+ "tableHorizontal = " + tableHorizontal + " " +
+ "tableVertical = " + tableVertical + sep +
+ "rGap = " + rGap + " " +
+ "cGap = " + cGap + sep +
+ "tableInsets = " + tableInsets + sep +
+ "horizontal = " + horizontal + " " +
+ "vertical = " + vertical + sep +
+ "cellInsets = " + cellInsets + sep +
+ "rWeight = " + rWeight + " " +
+ "cWeight = " + cWeight + sep +
+ "rSpan = " + rSpan + " " +
+ "cSpan = " + cSpan + sep +
+ "originalCSpan = " + originalCSpan + sep +
+ "column = " + column + sep +
+ "skip = " + skip;
+}
+
+String
+getStringAttributes()
+{
+ return attrString;
+}
+
+private char
+getTokenChar()
+{
+ if (tkPos >= attrString.length()) return 0;
+ return Character.toLowerCase(attrString.charAt(tkPos++));
+}
+
+
+private String
+getToken()
+{
+ StringBuffer token = new StringBuffer();
+
+ char c = getTokenChar();
+
+ // Skip whitespace
+
+ if (Character.isWhitespace(c)) {
+ do {
+ c = getTokenChar();
+ }
+ while (Character.isWhitespace(c));
+ }
+
+ // Attributes
+
+ if (Character.isLetter(c)) {
+ do {
+ token.append(c);
+ c = getTokenChar();
+ }
+ while (Character.isLetter(c));
+ if (c != 0) tkPos--;
+ }
+
+ // Integers
+
+ else if (Character.isDigit(c)) {
+ do {
+ token.append(c);
+ c = getTokenChar();
+ }
+ while (Character.isDigit(c));
+ if (c != 0) tkPos--;
+ }
+
+ // End of string
+
+ else if (c == 0) {
+ return null;
+ }
+
+ // Everything else is a single-character token
+
+ else {
+ token.append(c);
+ }
+
+ return new String(token);
+}
+
+void
+parse()
+{
+ // Initialize this set of attributes so it starts out as a copy of
+ // the given default, at least for those options where the cell
+ // can override a table default
+
+ if (!isTableAttributes) {
+ horizontal = tableAttributes.horizontal;
+ vertical = tableAttributes.vertical;
+ cellInsets = (Insets)tableAttributes.cellInsets.clone();
+ rWeight = tableAttributes.rWeight;
+ cWeight = tableAttributes.cWeight;
+ }
+
+ if (attrString == null) return;
+ tkPos = 0;
+
+ while (tkPos < attrString.length()) {
+ parseOption();
+ }
+
+ // We have checked the syntax, now check the semantics
+
+ if (isTableAttributes) {
+ if (columns == 0) {
+ reportSemanticError("cols=0");
+ }
+ }
+ else {
+ if (rSpan == 0) {
+ reportSemanticError("rspan=0");
+ }
+ if (cSpan == 0) {
+ reportSemanticError("cspan=0");
+ }
+ if (column >= tableAttributes.columns) {
+ reportSemanticError("col=" + column +
+ " (max is " +
+ (tableAttributes.columns - 1) + ")");
+ }
+ }
+}
+
+private void
+parseOption()
+{
+ // Get the next token
+
+ String token = getToken();
+ if (token == null) return;
+
+ boolean attributeFound = false;
+ for (int i = 0; i < attr.length; i++) {
+ if (token.equals(attr[i])) {
+ parseAttribute(token);
+ return;
+ }
+ }
+
+ for (int i = 0; i < assgn.length; i++) {
+ if (token.equals(assgn[i])) {
+ parseAssignment(token);
+ return;
+ }
+ }
+
+ reportError(token, "Unrecognized attribute");
+}
+
+private void
+parseAttribute(
+ String token)
+{
+ // Table placement and fill
+
+ if ("tnw".equals(token) ||
+ "tw".equals(token) ||
+ "tsw".equals(token)) {
+ tableHorizontal = LEFT;
+ }
+
+ if ("tne".equals(token) ||
+ "te".equals(token) ||
+ "tse".equals(token)) {
+ tableHorizontal = RIGHT;
+ }
+
+ if ("tn".equals(token) ||
+ "tc".equals(token) ||
+ "ts".equals(token)) {
+ tableHorizontal = CENTER;
+ }
+
+ if ("tf".equals(token) ||
+ "tfh".equals(token)) {
+ tableHorizontal = FILL;
+ }
+
+ if ("tn".equals(token) ||
+ "tnw".equals(token) ||
+ "tne".equals(token)) {
+ tableVertical = TOP;
+ }
+
+ if ("ts".equals(token) ||
+ "tsw".equals(token) ||
+ "tse".equals(token)) {
+ tableVertical = BOTTOM;
+ }
+
+ if ("tw".equals(token) ||
+ "tc".equals(token) ||
+ "te".equals(token)) {
+ tableVertical = CENTER;
+ }
+
+ if ("tf".equals(token) ||
+ "tfv".equals(token)) {
+ tableVertical = FILL;
+ }
+
+ // Cell placement and fill
+
+ if ("nw".equals(token) ||
+ "w".equals(token) ||
+ "sw".equals(token)) {
+ horizontal = LEFT;
+ }
+
+ if ("ne".equals(token) ||
+ "e".equals(token) ||
+ "se".equals(token)) {
+ horizontal = RIGHT;
+ }
+
+ if ("n".equals(token) ||
+ "c".equals(token) ||
+ "s".equals(token)) {
+ horizontal = CENTER;
+ }
+
+ if ("f".equals(token) ||
+ "fh".equals(token)) {
+ horizontal = FILL;
+ }
+
+ if ("n".equals(token) ||
+ "nw".equals(token) ||
+ "ne".equals(token)) {
+ vertical = TOP;
+ }
+
+ if ("s".equals(token) ||
+ "sw".equals(token) ||
+ "se".equals(token)) {
+ vertical = BOTTOM;
+ }
+
+ if ("w".equals(token) ||
+ "c".equals(token) ||
+ "e".equals(token)) {
+ vertical = CENTER;
+ }
+
+ if ("f".equals(token) ||
+ "fv".equals(token)) {
+ vertical = FILL;
+ }
+}
+
+private void
+parseAssignment(
+ String token)
+{
+ String attr = token;
+
+ token = getToken();
+ if (token != null) {
+ if ("=".equals(token)) {
+ token = getToken();
+ if (token != null) {
+ int value = 0;
+ try {
+ value = Integer.parseInt(token);
+ }
+ catch (NumberFormatException e) {
+ reportError(token, "Expected an integer");
+ }
+
+ if ("cols".equals(attr))
+ columns = value;
+ else if ("rgap".equals(attr))
+ rGap = value;
+ else if ("cgap".equals(attr))
+ cGap = value;
+ else if ("titop".equals(attr))
+ tableInsets.top = value;
+ else if ("tibottom".equals(attr))
+ tableInsets.bottom = value;
+ else if ("tileft".equals(attr))
+ tableInsets.left = value;
+ else if ("tiright".equals(attr))
+ tableInsets.right = value;
+ else if ("itop".equals(attr))
+ cellInsets.top = value;
+ else if ("ibottom".equals(attr))
+ cellInsets.bottom = value;
+ else if ("ileft".equals(attr))
+ cellInsets.left = value;
+ else if ("iright".equals(attr))
+ cellInsets.right = value;
+ else if ("rweight".equals(attr))
+ rWeight = value;
+ else if ("cweight".equals(attr))
+ cWeight = value;
+ else if ("rspan".equals(attr))
+ rSpan = value;
+ else if ("cspan".equals(attr))
+ originalCSpan = cSpan = value;
+ else if ("col".equals(attr))
+ column = value;
+ else if ("skip".equals(attr))
+ skip = value;
+
+ return;
+ }
+ }
+ reportError(token, "Expected an '='");
+ }
+ reportError(token, "Expected an '='");
+}
+
+private void
+reportError(
+ String token,
+ String message)
+{
+ throw new IllegalArgumentException(
+ "TableLayout: " + message + "; near '" + token +
+ "' at position " + tkPos + " in '" +
+ attrString + "'");
+}
+
+private void
+reportSemanticError(
+ String message)
+{
+ throw new IllegalArgumentException(
+ "TableLayout: Invalid value: " + message);
+}
+
+}
+
+//**********************************************************************
+//
+// CompArray
+//
+// We'd like to use a 2-dimensional array to help us sort out the
+// layout of the various components. But in order to create the array,
+// we need to know the number of rows. In order to get the number of
+// rows, we need to lay out the components. So we have problem.
+//
+// It is not obvious how to determine the number of rows from the
+// component count, due to row and column spans. So we've created the
+// CompArray class to help out. It makes its best guess at the size of
+// the array. If we need additional rows, it expands the array as
+// efficiently as it can. When we're done, we can ask it to create a
+// correctly sized array to hold our data.
+//
+//**********************************************************************
+
+private class CompArray
+{
+
+private int nCols;
+private int nRows;
+private int maxRow = 0;
+Component[][] compArray = null;
+
+CompArray(
+ int nCols,
+ int compCount)
+{
+ this.nRows = (compCount + (nCols - 1)) / nCols;
+ this.nRows = Math.max(this.nRows, 1);
+ this.nCols = nCols;
+
+ compArray = new Component[nRows][];
+ for (int i = 0; i < nRows; i++) {
+ compArray[i] = new Component[nCols];
+ Arrays.fill(compArray[i], null);
+ }
+}
+
+Component
+get(
+ int row,
+ int col)
+{
+ if (row >= nRows) resize(row + 1);
+ return compArray[row][col];
+}
+
+void
+set(
+ int row,
+ int col,
+ Component comp)
+{
+ if (row >= nRows) resize(row + 1);
+ compArray[row][col] = comp;
+ maxRow = Math.max(row, maxRow);
+}
+
+Component[][]
+getArray()
+{
+ int maxRows = maxRow + 1;
+ Component[][] array = new Component[maxRows][];
+ for (int r = 0; r < maxRows; r++) {
+ array[r] = new Component[nCols];
+ System.arraycopy(compArray[r], 0, array[r], 0, nCols);
+ }
+
+ return array;
+}
+
+private void
+resize(
+ int newRows)
+{
+ // When we exceed a threshold, bump up the size by at least 10
+
+ if (newRows - nRows < 10) newRows = nRows + 10;
+
+ // Create the new row array and copy the old one into it
+
+ Component[][] newArray = new Component[newRows][];
+ System.arraycopy(compArray, 0, newArray, 0, nRows);
+
+ // Initialize each new row to nulls
+
+ for (int i = nRows; i < newRows; i++) {
+ newArray[i] = new Component[nCols];
+ Arrays.fill(newArray[i], null);
+ }
+
+ compArray = newArray;
+ nRows = newRows;
+}
+
+}
+
+//**********************************************************************
+// End Inner Classes
+//**********************************************************************
+
+}
diff --git a/libs/FLib/TableLayout/project.dtd b/libs/FLib/TableLayout/project.dtd
new file mode 100644
index 0000000..dee3c51
--- /dev/null
+++ b/libs/FLib/TableLayout/project.dtd
@@ -0,0 +1,5193 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!ENTITY % boolean "(true|false|on|off|yes|no)">
+<!ENTITY % tasks "propertyfile | ccmkdir | importtypelib | vsscheckin | sql | cvspass | p4reopen | csc | dirname | wlrun | p4label | p4revert | replaceregexp | get | jjtree | sleep | jarlib-display | dependset | zip | patch | jspc | style | test | tstamp | unwar | vsshistory | icontract | cvschangelog | p4submit | ccmcheckin | p4change | bzip2 | sync | p4delete | vssadd | javadoc | p4integrate | translate | signjar | cclock | chown | vajload | jarlib-available | rexec | WsdlToDotnet | buildnumber | jpcovmerge | ejbjar | war | stlist | rename | sequential | serverdeploy | property | subant | move | ildasm | copydir | cccheckin | ccunlock | wljspc | fixcrlf | telnet | sosget | pathconvert | record | p4sync | exec | ccmklabel | p4edit | manifest | maudit | antlr | netrexxc | ftp | jpcovreport | execon | ccmcheckout | ant | xmlvalidate | xslt | p4resolve | iplanet-ejbc | ccmcheckintask | gzip | native2ascii | ccrmtype | starteam | ear | input | presetdef | rmic | checksum | mail | loadfile | vsscheckout | stylebook | soscheckin | mimemail | stlabel | gunzip | concat | cab | touch | parallel | splash | antcall | ccmkbl | cccheckout | typedef | p4have | filter | xmlproperty | import | copy | jsharpc | symlink | antstructure | script | ccmcreatetask | rpm | delete | replace | mmetrics | attrib | waitfor | untar | loadproperties | available | echoproperties | stcheckin | chgrp | vajexport | stcheckout | bunzip2 | whichresource | copyfile | p4labelsync | vsscreate | macrodef | ejbc | unjar | vbc | wsdltodotnet | mkdir | condition | cvs | tempfile | junitreport | ccmkattr | taskdef | echo | ccupdate | java | renameext | vsslabel | javadoc2 | basename | vsscp | tar | vajimport | p4fstat | setproxy | wlstop | p4counter | ilasm | soscheckout | apply | jarlib-resolve | ccuncheckout | cvstagdiff | jlink | javacc | jarlib-manifest | pvcs | chmod | ccmklbtype | jar | sound | scriptdef | defaultexcludes | mparse | blgenclient | uptodate | jjdoc | genkey | ccmkelem | javah | ccmreconfigure | fail | unzip | javac | p4add | soslabel | jpcoverage | depend | vssget | deltree | ddcreator">
+<!ENTITY % types "patternset | assertions | propertyset | filterset | libfileset | mergemapper | identitymapper | filterreader | unpackagemapper | scriptfilter | concatfilter | extension | fileset | dirset | globmapper | filelist | filterchain | path | compositemapper | classfileset | regexpmapper | selector | xmlcatalog | flattenmapper | description | chainedmapper | packagemapper | mapper | zipfileset | substitution | extensionSet | redirector | regexp">
+
+<!ELEMENT project (target | %tasks; | %types;)*>
+<!ATTLIST project
+ name CDATA #IMPLIED
+ default CDATA #IMPLIED
+ basedir CDATA #IMPLIED>
+
+<!ELEMENT target (%tasks; | %types;)*>
+
+<!ATTLIST target
+ id ID #IMPLIED
+ name CDATA #REQUIRED
+ if CDATA #IMPLIED
+ unless CDATA #IMPLIED
+ depends CDATA #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT patternset (include | patternset | exclude | excludesfile | includesfile)*>
+<!ATTLIST patternset
+ id ID #IMPLIED
+ includes CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludes CDATA #IMPLIED>
+
+<!ELEMENT include EMPTY>
+<!ATTLIST include
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ unless CDATA #IMPLIED
+ if CDATA #IMPLIED>
+
+<!ELEMENT exclude EMPTY>
+<!ATTLIST exclude
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ unless CDATA #IMPLIED
+ if CDATA #IMPLIED>
+
+<!ELEMENT excludesfile EMPTY>
+<!ATTLIST excludesfile
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ unless CDATA #IMPLIED
+ if CDATA #IMPLIED>
+
+<!ELEMENT includesfile EMPTY>
+<!ATTLIST includesfile
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ unless CDATA #IMPLIED
+ if CDATA #IMPLIED>
+
+<!ELEMENT assertions (disable | enable)*>
+<!ATTLIST assertions
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ enablesystemassertions %boolean; #IMPLIED>
+
+<!ELEMENT disable EMPTY>
+<!ATTLIST disable
+ id ID #IMPLIED
+ package CDATA #IMPLIED
+ class CDATA #IMPLIED>
+
+<!ELEMENT enable EMPTY>
+<!ATTLIST enable
+ id ID #IMPLIED
+ package CDATA #IMPLIED
+ class CDATA #IMPLIED>
+
+<!ELEMENT propertyset (propertyref | propertyset | mapper)*>
+<!ATTLIST propertyset
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ negate %boolean; #IMPLIED
+ dynamic %boolean; #IMPLIED>
+
+<!ELEMENT propertyref EMPTY>
+<!ATTLIST propertyref
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ builtin (all | system | commandline) #IMPLIED
+ regex CDATA #IMPLIED
+ prefix CDATA #IMPLIED>
+
+<!ELEMENT mapper (classpath | mapper)*>
+<!ATTLIST mapper
+ id ID #IMPLIED
+ classpath CDATA #IMPLIED
+ classpathref IDREF #IMPLIED
+ type (identity | flatten | glob | merge | regexp | package | unpackage) #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ classname CDATA #IMPLIED
+ from CDATA #IMPLIED
+ to CDATA #IMPLIED>
+
+<!ELEMENT classpath (fileset | dirset | extdirs | filelist | existing | pathelement | path)*>
+<!ATTLIST classpath
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT fileset (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST fileset
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT custom (classpath | param)*>
+<!ATTLIST custom
+ id ID #IMPLIED
+ classpath CDATA #IMPLIED
+ error CDATA #IMPLIED
+ classpathref IDREF #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ classname CDATA #IMPLIED>
+
+<!ELEMENT param EMPTY>
+<!ATTLIST param
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ type CDATA #IMPLIED
+ value CDATA #IMPLIED>
+
+<!ELEMENT none (custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | date | and | depth)*>
+<!ATTLIST none
+ id ID #IMPLIED
+ error CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT present (mapper)*>
+<!ATTLIST present
+ id ID #IMPLIED
+ error CDATA #IMPLIED
+ targetdir CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ present (srconly | both) #IMPLIED>
+
+<!ELEMENT not (custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | date | and | depth)*>
+<!ATTLIST not
+ id ID #IMPLIED
+ error CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT type EMPTY>
+<!ATTLIST type
+ id ID #IMPLIED
+ error CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ type (file | dir) #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT modified (param)*>
+<!ATTLIST modified
+ id ID #IMPLIED
+ comparator (equal | rule) #IMPLIED
+ seldirs %boolean; #IMPLIED
+ cache (propertyfile) #IMPLIED
+ algorithm (hashvalue | digest) #IMPLIED
+ error CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ update %boolean; #IMPLIED>
+
+<!ELEMENT or (custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | date | and | depth)*>
+<!ATTLIST or
+ id ID #IMPLIED
+ error CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT contains EMPTY>
+<!ATTLIST contains
+ id ID #IMPLIED
+ error CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ text CDATA #IMPLIED
+ ignorewhitespace %boolean; #IMPLIED>
+
+<!ELEMENT depend (mapper)*>
+<!ATTLIST depend
+ id ID #IMPLIED
+ error CDATA #IMPLIED
+ targetdir CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ granularity CDATA #IMPLIED>
+
+<!ELEMENT different (mapper)*>
+<!ATTLIST different
+ id ID #IMPLIED
+ error CDATA #IMPLIED
+ targetdir CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ ignorefiletimes %boolean; #IMPLIED
+ granularity CDATA #IMPLIED>
+
+<!ELEMENT size EMPTY>
+<!ATTLIST size
+ id ID #IMPLIED
+ when (less | more | equal) #IMPLIED
+ units (K | k | kilo | KILO | Ki | KI | ki | kibi | KIBI | M | m | mega | MEGA | Mi | MI | mi | mebi | MEBI | G | g | giga | GIGA | Gi | GI | gi | gibi | GIBI | T | t | tera | TERA | Ti | TI | ti | tebi | TEBI) #IMPLIED
+ error CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ value CDATA #IMPLIED>
+
+<!ELEMENT majority (custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | date | and | depth)*>
+<!ATTLIST majority
+ id ID #IMPLIED
+ error CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ allowtie %boolean; #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT containsregexp EMPTY>
+<!ATTLIST containsregexp
+ id ID #IMPLIED
+ error CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ expression CDATA #IMPLIED>
+
+<!ELEMENT filename EMPTY>
+<!ATTLIST filename
+ id ID #IMPLIED
+ error CDATA #IMPLIED
+ name CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ negate %boolean; #IMPLIED>
+
+<!ELEMENT selector (custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | date | and | depth)*>
+<!ATTLIST selector
+ id ID #IMPLIED
+ error CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ unless CDATA #IMPLIED
+ if CDATA #IMPLIED>
+
+<!ELEMENT date EMPTY>
+<!ATTLIST date
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ millis CDATA #IMPLIED
+ checkdirs %boolean; #IMPLIED
+ datetime CDATA #IMPLIED
+ granularity CDATA #IMPLIED
+ pattern CDATA #IMPLIED
+ when (before | after | equal) #IMPLIED
+ error CDATA #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT and (custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | date | and | depth)*>
+<!ATTLIST and
+ id ID #IMPLIED
+ error CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT depth EMPTY>
+<!ATTLIST depth
+ id ID #IMPLIED
+ max CDATA #IMPLIED
+ error CDATA #IMPLIED
+ min CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT dirset (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST dirset
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT extdirs (fileset | dirset | extdirs | filelist | existing | pathelement | path)*>
+<!ATTLIST extdirs
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT filelist (file)*>
+<!ATTLIST filelist
+ id ID #IMPLIED
+ dir CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ files CDATA #IMPLIED>
+
+<!ELEMENT file EMPTY>
+<!ATTLIST file
+ id ID #IMPLIED
+ name CDATA #IMPLIED>
+
+<!ELEMENT existing (fileset | dirset | extdirs | filelist | existing | pathelement | path)*>
+<!ATTLIST existing
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT pathelement EMPTY>
+<!ATTLIST pathelement
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT path (fileset | dirset | extdirs | filelist | existing | pathelement | path)*>
+<!ATTLIST path
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT filterset (filterset | filter | filtersfile)*>
+<!ATTLIST filterset
+ id ID #IMPLIED
+ begintoken CDATA #IMPLIED
+ endtoken CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ filtersfile CDATA #IMPLIED>
+
+<!ELEMENT filter EMPTY>
+<!ATTLIST filter
+ id ID #IMPLIED
+ token CDATA #IMPLIED
+ value CDATA #IMPLIED>
+
+<!ELEMENT filtersfile EMPTY>
+<!ATTLIST filtersfile
+ id ID #IMPLIED
+ file CDATA #IMPLIED>
+
+<!ELEMENT libfileset (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST libfileset
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ urlbase CDATA #IMPLIED
+ file CDATA #IMPLIED
+ includeimpl %boolean; #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ includeurl %boolean; #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT mergemapper EMPTY>
+<!ATTLIST mergemapper
+ id ID #IMPLIED
+ from CDATA #IMPLIED
+ to CDATA #IMPLIED>
+
+<!ELEMENT identitymapper EMPTY>
+<!ATTLIST identitymapper
+ id ID #IMPLIED
+ from CDATA #IMPLIED
+ to CDATA #IMPLIED>
+
+<!ELEMENT filterreader (classpath | param)*>
+<!ATTLIST filterreader
+ id ID #IMPLIED
+ classpath CDATA #IMPLIED
+ classpathref IDREF #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ classname CDATA #IMPLIED>
+
+<!ELEMENT unpackagemapper EMPTY>
+<!ATTLIST unpackagemapper
+ id ID #IMPLIED
+ from CDATA #IMPLIED
+ to CDATA #IMPLIED>
+
+<!ELEMENT scriptfilter (#PCDATA)>
+<!ATTLIST scriptfilter
+ id ID #IMPLIED
+ byline %boolean; #IMPLIED
+ token CDATA #IMPLIED
+ src CDATA #IMPLIED
+ language CDATA #IMPLIED>
+
+<!ELEMENT concatfilter EMPTY>
+<!ATTLIST concatfilter
+ id ID #IMPLIED
+ append CDATA #IMPLIED
+ prepend CDATA #IMPLIED>
+
+<!ELEMENT extension EMPTY>
+<!ATTLIST extension
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ implementationversion CDATA #IMPLIED
+ specificationversion CDATA #IMPLIED
+ extensionname CDATA #IMPLIED
+ implementationvendorid CDATA #IMPLIED
+ specificationvendor CDATA #IMPLIED
+ implementationurl CDATA #IMPLIED
+ description CDATA #IMPLIED
+ implementationvendor CDATA #IMPLIED>
+
+<!ELEMENT globmapper EMPTY>
+<!ATTLIST globmapper
+ id ID #IMPLIED
+ from CDATA #IMPLIED
+ to CDATA #IMPLIED>
+
+<!ELEMENT filterchain (headfilter | classconstants | linecontains | filterreader | replaceregex | replacetokens | escapeunicode | ignoreblank | tailfilter | tabstospaces | prefixlines | expandproperties | striplinebreaks | trim | striplinecomments | replacestring | tokenfilter | stripjavacomments | containsregex | deletecharacters | linecontainsregexp)*>
+<!ATTLIST filterchain
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT headfilter EMPTY>
+<!ATTLIST headfilter
+ id ID #IMPLIED
+ lines CDATA #IMPLIED
+ skip CDATA #IMPLIED>
+
+<!ELEMENT classconstants EMPTY>
+<!ATTLIST classconstants
+ id ID #IMPLIED>
+
+<!ELEMENT linecontains (contains)*>
+<!ATTLIST linecontains
+ id ID #IMPLIED>
+
+<!ELEMENT replaceregex EMPTY>
+<!ATTLIST replaceregex
+ id ID #IMPLIED
+ flags CDATA #IMPLIED
+ byline %boolean; #IMPLIED
+ replace CDATA #IMPLIED
+ pattern CDATA #IMPLIED>
+
+<!ELEMENT replacetokens (token)*>
+<!ATTLIST replacetokens
+ id ID #IMPLIED
+ begintoken CDATA #IMPLIED
+ endtoken CDATA #IMPLIED>
+
+<!ELEMENT token EMPTY>
+<!ATTLIST token
+ id ID #IMPLIED
+ key CDATA #IMPLIED
+ value CDATA #IMPLIED>
+
+<!ELEMENT escapeunicode EMPTY>
+<!ATTLIST escapeunicode
+ id ID #IMPLIED>
+
+<!ELEMENT ignoreblank EMPTY>
+<!ATTLIST ignoreblank
+ id ID #IMPLIED
+ byline %boolean; #IMPLIED>
+
+<!ELEMENT tailfilter EMPTY>
+<!ATTLIST tailfilter
+ id ID #IMPLIED
+ lines CDATA #IMPLIED
+ skip CDATA #IMPLIED>
+
+<!ELEMENT tabstospaces EMPTY>
+<!ATTLIST tabstospaces
+ id ID #IMPLIED
+ tablength CDATA #IMPLIED>
+
+<!ELEMENT prefixlines EMPTY>
+<!ATTLIST prefixlines
+ id ID #IMPLIED
+ prefix CDATA #IMPLIED>
+
+<!ELEMENT expandproperties EMPTY>
+<!ATTLIST expandproperties
+ id ID #IMPLIED>
+
+<!ELEMENT striplinebreaks EMPTY>
+<!ATTLIST striplinebreaks
+ id ID #IMPLIED
+ linebreaks CDATA #IMPLIED>
+
+<!ELEMENT trim EMPTY>
+<!ATTLIST trim
+ id ID #IMPLIED
+ byline %boolean; #IMPLIED>
+
+<!ELEMENT striplinecomments (comment)*>
+<!ATTLIST striplinecomments
+ id ID #IMPLIED>
+
+<!ELEMENT comment EMPTY>
+<!ATTLIST comment
+ id ID #IMPLIED
+ value CDATA #IMPLIED>
+
+<!ELEMENT replacestring EMPTY>
+<!ATTLIST replacestring
+ id ID #IMPLIED
+ byline %boolean; #IMPLIED
+ from CDATA #IMPLIED
+ to CDATA #IMPLIED>
+
+<!ELEMENT tokenfilter (containsstring | linetokenizer | trim | stringtokenizer | replaceregex | replacestring | ignoreblank | deletecharacters | containsregex | filetokenizer)*>
+<!ATTLIST tokenfilter
+ id ID #IMPLIED
+ delimoutput CDATA #IMPLIED>
+
+<!ELEMENT containsstring EMPTY>
+<!ATTLIST containsstring
+ id ID #IMPLIED
+ contains CDATA #IMPLIED>
+
+<!ELEMENT linetokenizer EMPTY>
+<!ATTLIST linetokenizer
+ id ID #IMPLIED
+ includedelims %boolean; #IMPLIED>
+
+<!ELEMENT stringtokenizer EMPTY>
+<!ATTLIST stringtokenizer
+ id ID #IMPLIED
+ suppressdelims %boolean; #IMPLIED
+ includedelims %boolean; #IMPLIED
+ delimsaretokens %boolean; #IMPLIED
+ delims CDATA #IMPLIED>
+
+<!ELEMENT deletecharacters EMPTY>
+<!ATTLIST deletecharacters
+ id ID #IMPLIED
+ chars CDATA #IMPLIED>
+
+<!ELEMENT containsregex EMPTY>
+<!ATTLIST containsregex
+ id ID #IMPLIED
+ flags CDATA #IMPLIED
+ byline %boolean; #IMPLIED
+ replace CDATA #IMPLIED
+ pattern CDATA #IMPLIED>
+
+<!ELEMENT filetokenizer EMPTY>
+<!ATTLIST filetokenizer
+ id ID #IMPLIED>
+
+<!ELEMENT stripjavacomments EMPTY>
+<!ATTLIST stripjavacomments
+ id ID #IMPLIED>
+
+<!ELEMENT linecontainsregexp (regexp)*>
+<!ATTLIST linecontainsregexp
+ id ID #IMPLIED>
+
+<!ELEMENT regexp EMPTY>
+<!ATTLIST regexp
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ pattern CDATA #IMPLIED>
+
+<!ELEMENT compositemapper (mapper)*>
+<!ATTLIST compositemapper
+ id ID #IMPLIED
+ from CDATA #IMPLIED
+ to CDATA #IMPLIED>
+
+<!ELEMENT classfileset (patternset | exclude | include | custom | rootfileset | present | none | not | type | modified | or | contains | depend | different | size | majority | containsregexp | root | filename | selector | includesfile | date | excludesfile | depth | and)*>
+<!ATTLIST classfileset
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ rootclass CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT rootfileset (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST rootfileset
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT root EMPTY>
+<!ATTLIST root
+ id ID #IMPLIED
+ classname CDATA #IMPLIED>
+
+<!ELEMENT regexpmapper EMPTY>
+<!ATTLIST regexpmapper
+ id ID #IMPLIED
+ from CDATA #IMPLIED
+ to CDATA #IMPLIED>
+
+<!ELEMENT xmlcatalog (entity | classpath | catalogpath | dtd | xmlcatalog)*>
+<!ATTLIST xmlcatalog
+ id ID #IMPLIED
+ catalogpathref IDREF #IMPLIED
+ classpath CDATA #IMPLIED
+ classpathref IDREF #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT entity EMPTY>
+<!ATTLIST entity
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ publicid CDATA #IMPLIED
+ base CDATA #IMPLIED>
+
+<!ELEMENT catalogpath (fileset | dirset | extdirs | filelist | existing | pathelement | path)*>
+<!ATTLIST catalogpath
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT dtd EMPTY>
+<!ATTLIST dtd
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ publicid CDATA #IMPLIED
+ base CDATA #IMPLIED>
+
+<!ELEMENT flattenmapper EMPTY>
+<!ATTLIST flattenmapper
+ id ID #IMPLIED
+ from CDATA #IMPLIED
+ to CDATA #IMPLIED>
+
+<!ELEMENT description (#PCDATA)>
+<!ATTLIST description
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT chainedmapper (mapper)*>
+<!ATTLIST chainedmapper
+ id ID #IMPLIED
+ from CDATA #IMPLIED
+ to CDATA #IMPLIED>
+
+<!ELEMENT packagemapper EMPTY>
+<!ATTLIST packagemapper
+ id ID #IMPLIED
+ from CDATA #IMPLIED
+ to CDATA #IMPLIED>
+
+<!ELEMENT zipfileset (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST zipfileset
+ id ID #IMPLIED
+ src CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ filemode CDATA #IMPLIED
+ prefix CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ fullpath CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includes CDATA #IMPLIED
+ dirmode CDATA #IMPLIED>
+
+<!ELEMENT substitution EMPTY>
+<!ATTLIST substitution
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ expression CDATA #IMPLIED>
+
+<!ELEMENT extensionSet (fileset | libfileset | extension)*>
+<!ATTLIST extensionSet
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT redirector (errorfilterchain | outputfilterchain | errormapper | inputfilterchain | outputmapper | inputmapper)*>
+<!ATTLIST redirector
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ inputencoding CDATA #IMPLIED
+ append %boolean; #IMPLIED
+ output CDATA #IMPLIED
+ createemptyfiles %boolean; #IMPLIED
+ outputproperty CDATA #IMPLIED
+ error CDATA #IMPLIED
+ errorproperty CDATA #IMPLIED
+ outputencoding CDATA #IMPLIED
+ inputstring CDATA #IMPLIED
+ input CDATA #IMPLIED
+ description CDATA #IMPLIED
+ logerror %boolean; #IMPLIED
+ errorencoding CDATA #IMPLIED>
+
+<!ELEMENT errorfilterchain (headfilter | classconstants | linecontains | filterreader | replaceregex | replacetokens | escapeunicode | ignoreblank | tailfilter | tabstospaces | prefixlines | expandproperties | striplinebreaks | trim | striplinecomments | replacestring | tokenfilter | stripjavacomments | containsregex | deletecharacters | linecontainsregexp)*>
+<!ATTLIST errorfilterchain
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT outputfilterchain (headfilter | classconstants | linecontains | filterreader | replaceregex | replacetokens | escapeunicode | ignoreblank | tailfilter | tabstospaces | prefixlines | expandproperties | striplinebreaks | trim | striplinecomments | replacestring | tokenfilter | stripjavacomments | containsregex | deletecharacters | linecontainsregexp)*>
+<!ATTLIST outputfilterchain
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT errormapper (classpath | mapper)*>
+<!ATTLIST errormapper
+ id ID #IMPLIED
+ classpath CDATA #IMPLIED
+ classpathref IDREF #IMPLIED
+ type (identity | flatten | glob | merge | regexp | package | unpackage) #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ classname CDATA #IMPLIED
+ from CDATA #IMPLIED
+ to CDATA #IMPLIED>
+
+<!ELEMENT inputfilterchain (headfilter | classconstants | linecontains | filterreader | replaceregex | replacetokens | escapeunicode | ignoreblank | tailfilter | tabstospaces | prefixlines | expandproperties | striplinebreaks | trim | striplinecomments | replacestring | tokenfilter | stripjavacomments | containsregex | deletecharacters | linecontainsregexp)*>
+<!ATTLIST inputfilterchain
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT outputmapper (classpath | mapper)*>
+<!ATTLIST outputmapper
+ id ID #IMPLIED
+ classpath CDATA #IMPLIED
+ classpathref IDREF #IMPLIED
+ type (identity | flatten | glob | merge | regexp | package | unpackage) #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ classname CDATA #IMPLIED
+ from CDATA #IMPLIED
+ to CDATA #IMPLIED>
+
+<!ELEMENT inputmapper (classpath | mapper)*>
+<!ATTLIST inputmapper
+ id ID #IMPLIED
+ classpath CDATA #IMPLIED
+ classpathref IDREF #IMPLIED
+ type (identity | flatten | glob | merge | regexp | package | unpackage) #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ classname CDATA #IMPLIED
+ from CDATA #IMPLIED
+ to CDATA #IMPLIED>
+
+<!ELEMENT propertyfile (entry)*>
+<!ATTLIST propertyfile
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ file CDATA #IMPLIED
+ description CDATA #IMPLIED
+ comment CDATA #IMPLIED>
+
+<!ELEMENT entry EMPTY>
+<!ATTLIST entry
+ id ID #IMPLIED
+ operation CDATA #IMPLIED
+ default CDATA #IMPLIED
+ key CDATA #IMPLIED
+ type (int | date | string) #IMPLIED
+ unit (millisecond | second | minute | hour | day | week | month | year) #IMPLIED
+ pattern CDATA #IMPLIED
+ value CDATA #IMPLIED>
+
+<!ELEMENT ccmkdir EMPTY>
+<!ATTLIST ccmkdir
+ id ID #IMPLIED
+ viewpath CDATA #IMPLIED
+ comment CDATA #IMPLIED
+ failonerr %boolean; #IMPLIED
+ cleartooldir CDATA #IMPLIED
+ objselect CDATA #IMPLIED
+ nocheckout %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ commentfile CDATA #IMPLIED>
+
+<!ELEMENT importtypelib EMPTY>
+<!ATTLIST importtypelib
+ id ID #IMPLIED
+ unsafe %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ usesysarray %boolean; #IMPLIED
+ namespace CDATA #IMPLIED
+ description CDATA #IMPLIED
+ extraoptions CDATA #IMPLIED
+ srcfile CDATA #IMPLIED
+ destfile CDATA #IMPLIED>
+
+<!ELEMENT vsscheckin EMPTY>
+<!ATTLIST vsscheckin
+ id ID #IMPLIED
+ ssdir CDATA #IMPLIED
+ recursive %boolean; #IMPLIED
+ autoresponse CDATA #IMPLIED
+ vsspath CDATA #IMPLIED
+ comment CDATA #IMPLIED
+ serverpath CDATA #IMPLIED
+ writable %boolean; #IMPLIED
+ login CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ localpath CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED>
+
+<!ELEMENT sql (#PCDATA | fileset | classpath | transaction)*>
+<!ATTLIST sql
+ id ID #IMPLIED
+ onerror (continue | stop | abort) #IMPLIED
+ userid CDATA #IMPLIED
+ password CDATA #IMPLIED
+ autocommit %boolean; #IMPLIED
+ rdbms CDATA #IMPLIED
+ print %boolean; #IMPLIED
+ classpathref IDREF #IMPLIED
+ encoding CDATA #IMPLIED
+ version CDATA #IMPLIED
+ url CDATA #IMPLIED
+ src CDATA #IMPLIED
+ output CDATA #IMPLIED
+ driver CDATA #IMPLIED
+ showheaders %boolean; #IMPLIED
+ classpath CDATA #IMPLIED
+ delimitertype (normal | row) #IMPLIED
+ escapeprocessing %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ append %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ caching %boolean; #IMPLIED
+ keepformat %boolean; #IMPLIED
+ delimiter CDATA #IMPLIED>
+
+<!ELEMENT transaction (#PCDATA)>
+<!ATTLIST transaction
+ id ID #IMPLIED
+ src CDATA #IMPLIED>
+
+<!ELEMENT cvspass EMPTY>
+<!ATTLIST cvspass
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ password CDATA #IMPLIED
+ description CDATA #IMPLIED
+ cvsroot CDATA #IMPLIED
+ passfile CDATA #IMPLIED>
+
+<!ELEMENT p4reopen EMPTY>
+<!ATTLIST p4reopen
+ id ID #IMPLIED
+ tochange CDATA #IMPLIED
+ port CDATA #IMPLIED
+ client CDATA #IMPLIED
+ inerror %boolean; #IMPLIED
+ user CDATA #IMPLIED
+ cmdopts CDATA #IMPLIED
+ globalopts CDATA #IMPLIED
+ view CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ errormessage CDATA #IMPLIED>
+
+<!ELEMENT csc (patternset | exclude | include | custom | present | none | resource | define | not | type | modified | reference | src | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | depth | and)*>
+<!ATTLIST csc
+ id ID #IMPLIED
+ excludes CDATA #IMPLIED
+ executable CDATA #IMPLIED
+ destfile CDATA #IMPLIED
+ win32icon CDATA #IMPLIED
+ definitions CDATA #IMPLIED
+ referencefiles CDATA #IMPLIED
+ fullpaths %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ outputfile CDATA #IMPLIED
+ includes CDATA #IMPLIED
+ mainclass CDATA #IMPLIED
+ utf8output %boolean; #IMPLIED
+ useresponsefile %boolean; #IMPLIED
+ failonerror %boolean; #IMPLIED
+ destdir CDATA #IMPLIED
+ debug %boolean; #IMPLIED
+ includedefaultreferences %boolean; #IMPLIED
+ warnlevel CDATA #IMPLIED
+ win32res CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ extraoptions CDATA #IMPLIED
+ incremental %boolean; #IMPLIED
+ noconfig %boolean; #IMPLIED
+ includesfile CDATA #IMPLIED
+ references CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ srcdir CDATA #IMPLIED
+ optimize %boolean; #IMPLIED
+ additionalmodules CDATA #IMPLIED
+ docfile CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ unsafe %boolean; #IMPLIED
+ filealign CDATA #IMPLIED
+ targettype (exe | library | module | winexe) #IMPLIED>
+
+<!ELEMENT resource EMPTY>
+<!ATTLIST resource
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ file CDATA #IMPLIED
+ public %boolean; #IMPLIED
+ embed %boolean; #IMPLIED>
+
+<!ELEMENT define EMPTY>
+<!ATTLIST define
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ unless CDATA #IMPLIED
+ if CDATA #IMPLIED>
+
+<!ELEMENT reference (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST reference
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT src (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST src
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT dirname EMPTY>
+<!ATTLIST dirname
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ file CDATA #IMPLIED
+ description CDATA #IMPLIED
+ property CDATA #IMPLIED>
+
+<!ELEMENT wlrun (classpath | wlclasspath)*>
+<!ATTLIST wlrun
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ pkpassword CDATA #IMPLIED
+ beahome CDATA #IMPLIED
+ domain CDATA #IMPLIED
+ username CDATA #IMPLIED
+ weblogicmainclass CDATA #IMPLIED
+ wlclasspath CDATA #IMPLIED
+ policy CDATA #IMPLIED
+ properties CDATA #IMPLIED
+ args CDATA #IMPLIED
+ home CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ password CDATA #IMPLIED
+ jvmargs CDATA #IMPLIED>
+
+<!ELEMENT wlclasspath (fileset | dirset | extdirs | filelist | existing | pathelement | path)*>
+<!ATTLIST wlclasspath
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT p4label EMPTY>
+<!ATTLIST p4label
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ port CDATA #IMPLIED
+ client CDATA #IMPLIED
+ inerror %boolean; #IMPLIED
+ user CDATA #IMPLIED
+ cmdopts CDATA #IMPLIED
+ desc CDATA #IMPLIED
+ globalopts CDATA #IMPLIED
+ view CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ errormessage CDATA #IMPLIED
+ lock CDATA #IMPLIED>
+
+<!ELEMENT p4revert EMPTY>
+<!ATTLIST p4revert
+ id ID #IMPLIED
+ port CDATA #IMPLIED
+ client CDATA #IMPLIED
+ inerror %boolean; #IMPLIED
+ revertonlyunchanged %boolean; #IMPLIED
+ user CDATA #IMPLIED
+ cmdopts CDATA #IMPLIED
+ globalopts CDATA #IMPLIED
+ view CDATA #IMPLIED
+ change CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ errormessage CDATA #IMPLIED>
+
+<!ELEMENT replaceregexp (fileset | substitution | regexp)*>
+<!ATTLIST replaceregexp
+ id ID #IMPLIED
+ flags CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ match CDATA #IMPLIED
+ file CDATA #IMPLIED
+ byline %boolean; #IMPLIED
+ replace CDATA #IMPLIED
+ description CDATA #IMPLIED
+ encoding CDATA #IMPLIED>
+
+<!ELEMENT get EMPTY>
+<!ATTLIST get
+ id ID #IMPLIED
+ src CDATA #IMPLIED
+ verbose %boolean; #IMPLIED
+ ignoreerrors %boolean; #IMPLIED
+ username CDATA #IMPLIED
+ usetimestamp %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ dest CDATA #IMPLIED
+ description CDATA #IMPLIED
+ password CDATA #IMPLIED>
+
+<!ELEMENT jjtree EMPTY>
+<!ATTLIST jjtree
+ id ID #IMPLIED
+ nodedefaultvoid %boolean; #IMPLIED
+ buildnodefiles %boolean; #IMPLIED
+ outputdirectory CDATA #IMPLIED
+ outputfile CDATA #IMPLIED
+ static %boolean; #IMPLIED
+ javacchome CDATA #IMPLIED
+ nodeprefix CDATA #IMPLIED
+ nodefactory %boolean; #IMPLIED
+ multi %boolean; #IMPLIED
+ visitor %boolean; #IMPLIED
+ target CDATA #IMPLIED
+ nodeusesparser %boolean; #IMPLIED
+ visitorexception CDATA #IMPLIED
+ nodescopehook %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ nodepackage CDATA #IMPLIED>
+
+<!ELEMENT sleep EMPTY>
+<!ATTLIST sleep
+ id ID #IMPLIED
+ hours CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ milliseconds CDATA #IMPLIED
+ minutes CDATA #IMPLIED
+ description CDATA #IMPLIED
+ seconds CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED>
+
+<!ELEMENT jarlib-display (fileset)*>
+<!ATTLIST jarlib-display
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ file CDATA #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT dependset (patternset | exclude | include | custom | present | none | not | type | targetfileset | srcfileset | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | srcfilelist | date | excludesfile | depth | and | targetfilelist)*>
+<!ATTLIST dependset
+ id ID #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT targetfileset (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST targetfileset
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT srcfileset (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST srcfileset
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT srcfilelist (file)*>
+<!ATTLIST srcfilelist
+ id ID #IMPLIED
+ dir CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ files CDATA #IMPLIED>
+
+<!ELEMENT targetfilelist (file)*>
+<!ATTLIST targetfilelist
+ id ID #IMPLIED
+ dir CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ files CDATA #IMPLIED>
+
+<!ELEMENT zip (patternset | exclude | include | custom | present | none | not | type | modified | or | contains | depend | fileset | different | size | majority | containsregexp | filename | selector | includesfile | zipgroupfileset | zipfileset | date | excludesfile | depth | and)*>
+<!ATTLIST zip
+ id ID #IMPLIED
+ whenempty (fail | skip | create) #IMPLIED
+ keepcompression %boolean; #IMPLIED
+ duplicate (add | preserve | fail) #IMPLIED
+ roundup %boolean; #IMPLIED
+ excludes CDATA #IMPLIED
+ basedir CDATA #IMPLIED
+ encoding CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ update %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ destfile CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ includes CDATA #IMPLIED
+ description CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ compress %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ filesonly %boolean; #IMPLIED
+ file CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ zipfile CDATA #IMPLIED>
+
+<!ELEMENT zipgroupfileset (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST zipgroupfileset
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT patch EMPTY>
+<!ATTLIST patch
+ id ID #IMPLIED
+ strip CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ destfile CDATA #IMPLIED
+ quiet %boolean; #IMPLIED
+ originalfile CDATA #IMPLIED
+ patchfile CDATA #IMPLIED
+ reverse %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ backups %boolean; #IMPLIED
+ ignorewhitespace %boolean; #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT jspc (patternset | exclude | include | custom | present | none | not | type | compilerclasspath | modified | or | contains | depend | classpath | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | webapp | depth | and)*>
+<!ATTLIST jspc
+ id ID #IMPLIED
+ mapped %boolean; #IMPLIED
+ ieplugin CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ classpathref IDREF #IMPLIED
+ package CDATA #IMPLIED
+ destdir CDATA #IMPLIED
+ compilerclasspath CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ uribase CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ verbose CDATA #IMPLIED
+ compiler CDATA #IMPLIED
+ includes CDATA #IMPLIED
+ description CDATA #IMPLIED
+ webxml CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ srcdir CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ uriroot CDATA #IMPLIED
+ webinc CDATA #IMPLIED>
+
+<!ELEMENT compilerclasspath (fileset | dirset | extdirs | filelist | existing | pathelement | path)*>
+<!ATTLIST compilerclasspath
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT webapp EMPTY>
+<!ATTLIST webapp
+ id ID #IMPLIED
+ basedir CDATA #IMPLIED>
+
+<!ELEMENT style (patternset | exclude | include | custom | present | none | not | type | factory | modified | param | or | contains | depend | classpath | different | size | majority | containsregexp | filename | xmlcatalog | selector | includesfile | outputproperty | mapper | date | excludesfile | depth | and)*>
+<!ATTLIST style
+ id ID #IMPLIED
+ force %boolean; #IMPLIED
+ excludes CDATA #IMPLIED
+ processor CDATA #IMPLIED
+ classpathref IDREF #IMPLIED
+ basedir CDATA #IMPLIED
+ destdir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ scanincludeddirectories %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ extension CDATA #IMPLIED
+ in CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ reloadstylesheet %boolean; #IMPLIED
+ includes CDATA #IMPLIED
+ description CDATA #IMPLIED
+ out CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ style CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED>
+
+<!ELEMENT factory (attribute)*>
+<!ATTLIST factory
+ id ID #IMPLIED
+ name CDATA #IMPLIED>
+
+<!ELEMENT attribute EMPTY>
+<!ATTLIST attribute
+ id ID #IMPLIED>
+
+<!ELEMENT outputproperty EMPTY>
+<!ATTLIST outputproperty
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ value CDATA #IMPLIED>
+
+<!ELEMENT test (classpath | sysproperty | redirector | bootclasspath | env | syspropertyset | permissions | jvmarg | arg | assertions | testlet)*>
+<!ATTLIST test
+ id ID #IMPLIED
+ resultproperty CDATA #IMPLIED
+ jvmargs CDATA #IMPLIED
+ args CDATA #IMPLIED
+ fork %boolean; #IMPLIED
+ maxmemory CDATA #IMPLIED
+ classpathref IDREF #IMPLIED
+ jar CDATA #IMPLIED
+ errorproperty CDATA #IMPLIED
+ forceshowtrace %boolean; #IMPLIED
+ output CDATA #IMPLIED
+ timeout CDATA #IMPLIED
+ spawn %boolean; #IMPLIED
+ input CDATA #IMPLIED
+ jvm CDATA #IMPLIED
+ inputstring CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ logerror %boolean; #IMPLIED
+ dir CDATA #IMPLIED
+ error CDATA #IMPLIED
+ description CDATA #IMPLIED
+ showsuccess %boolean; #IMPLIED
+ jvmversion CDATA #IMPLIED
+ outputproperty CDATA #IMPLIED
+ append %boolean; #IMPLIED
+ failonerror %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ showbanner CDATA #IMPLIED
+ newenvironment %boolean; #IMPLIED
+ classname CDATA #IMPLIED
+ showtrace %boolean; #IMPLIED>
+
+<!ELEMENT sysproperty EMPTY>
+<!ATTLIST sysproperty
+ id ID #IMPLIED
+ key CDATA #IMPLIED
+ file CDATA #IMPLIED
+ value CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT bootclasspath (fileset | dirset | extdirs | filelist | existing | pathelement | path)*>
+<!ATTLIST bootclasspath
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT env EMPTY>
+<!ATTLIST env
+ id ID #IMPLIED
+ key CDATA #IMPLIED
+ file CDATA #IMPLIED
+ value CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT syspropertyset (propertyref | propertyset | mapper)*>
+<!ATTLIST syspropertyset
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ negate %boolean; #IMPLIED
+ dynamic %boolean; #IMPLIED>
+
+<!ELEMENT permissions (grant | revoke)*>
+<!ATTLIST permissions
+ id ID #IMPLIED>
+
+<!ELEMENT grant EMPTY>
+<!ATTLIST grant
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ class CDATA #IMPLIED
+ actions CDATA #IMPLIED>
+
+<!ELEMENT revoke EMPTY>
+<!ATTLIST revoke
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ class CDATA #IMPLIED
+ actions CDATA #IMPLIED>
+
+<!ELEMENT jvmarg EMPTY>
+<!ATTLIST jvmarg
+ id ID #IMPLIED
+ line CDATA #IMPLIED
+ file CDATA #IMPLIED
+ pathref IDREF #IMPLIED
+ value CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT arg EMPTY>
+<!ATTLIST arg
+ id ID #IMPLIED
+ line CDATA #IMPLIED
+ file CDATA #IMPLIED
+ pathref IDREF #IMPLIED
+ value CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT testlet (#PCDATA)>
+<!ATTLIST testlet
+ id ID #IMPLIED>
+
+<!ELEMENT tstamp (format)*>
+<!ATTLIST tstamp
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ prefix CDATA #IMPLIED>
+
+<!ELEMENT format EMPTY>
+<!ATTLIST format
+ id ID #IMPLIED
+ locale CDATA #IMPLIED
+ timezone CDATA #IMPLIED
+ unit (millisecond | second | minute | hour | day | week | month | year) #IMPLIED
+ pattern CDATA #IMPLIED
+ property CDATA #IMPLIED
+ offset CDATA #IMPLIED>
+
+<!ELEMENT unwar (fileset | patternset)*>
+<!ATTLIST unwar
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ dest CDATA #IMPLIED
+ overwrite %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ encoding CDATA #IMPLIED
+ src CDATA #IMPLIED>
+
+<!ELEMENT vsshistory EMPTY>
+<!ATTLIST vsshistory
+ id ID #IMPLIED
+ style (brief | codediff | nofile | default) #IMPLIED
+ numdays CDATA #IMPLIED
+ todate CDATA #IMPLIED
+ output CDATA #IMPLIED
+ fromlabel CDATA #IMPLIED
+ ssdir CDATA #IMPLIED
+ recursive %boolean; #IMPLIED
+ vsspath CDATA #IMPLIED
+ fromdate CDATA #IMPLIED
+ user CDATA #IMPLIED
+ serverpath CDATA #IMPLIED
+ login CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ tolabel CDATA #IMPLIED
+ dateformat CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED>
+
+<!ELEMENT icontract (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | classpath | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | depth | and)*>
+<!ATTLIST icontract
+ id ID #IMPLIED
+ classdir CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ quiet %boolean; #IMPLIED
+ classpathref IDREF #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ repositorydir CDATA #IMPLIED
+ instrumentdir CDATA #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ builddir CDATA #IMPLIED
+ updateicontrol %boolean; #IMPLIED
+ classpath CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ pre %boolean; #IMPLIED
+ controlfile CDATA #IMPLIED
+ includes CDATA #IMPLIED
+ description CDATA #IMPLIED
+ invariant %boolean; #IMPLIED
+ post %boolean; #IMPLIED
+ includesfile CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ srcdir CDATA #IMPLIED
+ failthrowable CDATA #IMPLIED
+ verbosity CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ repbuilddir CDATA #IMPLIED
+ targets CDATA #IMPLIED>
+
+<!ELEMENT cvschangelog (fileset | user | commandline)*>
+<!ATTLIST cvschangelog
+ id ID #IMPLIED
+ cvsrsh CDATA #IMPLIED
+ quiet %boolean; #IMPLIED
+ passfile CDATA #IMPLIED
+ command CDATA #IMPLIED
+ end CDATA #IMPLIED
+ package CDATA #IMPLIED
+ start CDATA #IMPLIED
+ cvsroot CDATA #IMPLIED
+ reallyquiet %boolean; #IMPLIED
+ output CDATA #IMPLIED
+ port CDATA #IMPLIED
+ compressionlevel CDATA #IMPLIED
+ dest CDATA #IMPLIED
+ destfile CDATA #IMPLIED
+ usersfile CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ noexec %boolean; #IMPLIED
+ error CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ daysinpast CDATA #IMPLIED
+ append %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ date CDATA #IMPLIED
+ compression %boolean; #IMPLIED
+ tag CDATA #IMPLIED>
+
+<!ELEMENT user EMPTY>
+<!ATTLIST user
+ id ID #IMPLIED
+ userid CDATA #IMPLIED
+ displayname CDATA #IMPLIED>
+
+<!ELEMENT commandline (marker | argument)*>
+<!ATTLIST commandline
+ id ID #IMPLIED
+ executable CDATA #IMPLIED>
+
+<!ELEMENT marker EMPTY>
+<!ATTLIST marker
+ id ID #IMPLIED>
+
+<!ELEMENT argument EMPTY>
+<!ATTLIST argument
+ id ID #IMPLIED
+ line CDATA #IMPLIED
+ file CDATA #IMPLIED
+ pathref IDREF #IMPLIED
+ value CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT p4submit EMPTY>
+<!ATTLIST p4submit
+ id ID #IMPLIED
+ port CDATA #IMPLIED
+ client CDATA #IMPLIED
+ inerror %boolean; #IMPLIED
+ needsresolveproperty CDATA #IMPLIED
+ user CDATA #IMPLIED
+ changeproperty CDATA #IMPLIED
+ cmdopts CDATA #IMPLIED
+ globalopts CDATA #IMPLIED
+ view CDATA #IMPLIED
+ change CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ errormessage CDATA #IMPLIED>
+
+<!ELEMENT ccmcheckin (fileset)*>
+<!ATTLIST ccmcheckin
+ id ID #IMPLIED
+ ccmaction CDATA #IMPLIED
+ task CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ file CDATA #IMPLIED
+ description CDATA #IMPLIED
+ ccmdir CDATA #IMPLIED
+ comment CDATA #IMPLIED>
+
+<!ELEMENT p4change EMPTY>
+<!ATTLIST p4change
+ id ID #IMPLIED
+ port CDATA #IMPLIED
+ client CDATA #IMPLIED
+ inerror %boolean; #IMPLIED
+ user CDATA #IMPLIED
+ cmdopts CDATA #IMPLIED
+ globalopts CDATA #IMPLIED
+ view CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ errormessage CDATA #IMPLIED>
+
+<!ELEMENT bzip2 EMPTY>
+<!ATTLIST bzip2
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ zipfile CDATA #IMPLIED
+ description CDATA #IMPLIED
+ src CDATA #IMPLIED
+ destfile CDATA #IMPLIED>
+
+<!ELEMENT sync (fileset)*>
+<!ATTLIST sync
+ id ID #IMPLIED
+ verbose %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ todir CDATA #IMPLIED
+ overwrite %boolean; #IMPLIED
+ includeemptydirs %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ granularity CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED>
+
+<!ELEMENT p4delete EMPTY>
+<!ATTLIST p4delete
+ id ID #IMPLIED
+ port CDATA #IMPLIED
+ client CDATA #IMPLIED
+ inerror %boolean; #IMPLIED
+ user CDATA #IMPLIED
+ cmdopts CDATA #IMPLIED
+ globalopts CDATA #IMPLIED
+ view CDATA #IMPLIED
+ change CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ errormessage CDATA #IMPLIED>
+
+<!ELEMENT vssadd EMPTY>
+<!ATTLIST vssadd
+ id ID #IMPLIED
+ ssdir CDATA #IMPLIED
+ recursive %boolean; #IMPLIED
+ autoresponse CDATA #IMPLIED
+ vsspath CDATA #IMPLIED
+ comment CDATA #IMPLIED
+ serverpath CDATA #IMPLIED
+ writable %boolean; #IMPLIED
+ login CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ localpath CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED>
+
+<!ELEMENT javadoc (taglet | doclet | package | arg | link | doctitle | bottom | group | packageset | fileset | classpath | sourcepath | footer | source | bootclasspath | header | excludepackage | tag)*>
+<!ATTLIST javadoc
+ id ID #IMPLIED
+ verbose %boolean; #IMPLIED
+ bottom CDATA #IMPLIED
+ bootclasspathref IDREF #IMPLIED
+ header CDATA #IMPLIED
+ link CDATA #IMPLIED
+ noindex %boolean; #IMPLIED
+ access (protected | public | package | private) #IMPLIED
+ doclet CDATA #IMPLIED
+ noqualifier CDATA #IMPLIED
+ public %boolean; #IMPLIED
+ author %boolean; #IMPLIED
+ footer CDATA #IMPLIED
+ docletpath CDATA #IMPLIED
+ package %boolean; #IMPLIED
+ useexternalfile %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ sourcepathref IDREF #IMPLIED
+ protected %boolean; #IMPLIED
+ breakiterator %boolean; #IMPLIED
+ nonavbar %boolean; #IMPLIED
+ maxmemory CDATA #IMPLIED
+ group CDATA #IMPLIED
+ source CDATA #IMPLIED
+ linkoffline CDATA #IMPLIED
+ additionalparam CDATA #IMPLIED
+ locale CDATA #IMPLIED
+ linksource %boolean; #IMPLIED
+ failonerror %boolean; #IMPLIED
+ destdir CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ bootclasspath CDATA #IMPLIED
+ private %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ charset CDATA #IMPLIED
+ nodeprecatedlist %boolean; #IMPLIED
+ classpathref IDREF #IMPLIED
+ stylesheetfile CDATA #IMPLIED
+ docencoding CDATA #IMPLIED
+ excludepackagenames CDATA #IMPLIED
+ docletpathref IDREF #IMPLIED
+ packagenames CDATA #IMPLIED
+ windowtitle CDATA #IMPLIED
+ notree %boolean; #IMPLIED
+ splitindex %boolean; #IMPLIED
+ encoding CDATA #IMPLIED
+ packagelist CDATA #IMPLIED
+ doctitle CDATA #IMPLIED
+ serialwarn %boolean; #IMPLIED
+ old %boolean; #IMPLIED
+ use %boolean; #IMPLIED
+ sourcepath CDATA #IMPLIED
+ helpfile CDATA #IMPLIED
+ version %boolean; #IMPLIED
+ sourcefiles CDATA #IMPLIED
+ extdirs CDATA #IMPLIED
+ nohelp %boolean; #IMPLIED
+ nodeprecated %boolean; #IMPLIED
+ overview CDATA #IMPLIED>
+
+<!ELEMENT taglet (path)*>
+<!ATTLIST taglet
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ pathref IDREF #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT doclet (path | param)*>
+<!ATTLIST doclet
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ pathref IDREF #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT package EMPTY>
+<!ATTLIST package
+ id ID #IMPLIED
+ name CDATA #IMPLIED>
+
+<!ELEMENT link EMPTY>
+<!ATTLIST link
+ id ID #IMPLIED
+ href CDATA #IMPLIED
+ offline %boolean; #IMPLIED
+ packagelistloc CDATA #IMPLIED>
+
+<!ELEMENT doctitle (#PCDATA)>
+<!ATTLIST doctitle
+ id ID #IMPLIED>
+
+<!ELEMENT bottom (#PCDATA)>
+<!ATTLIST bottom
+ id ID #IMPLIED>
+
+<!ELEMENT group (package | title)*>
+<!ATTLIST group
+ id ID #IMPLIED
+ packages CDATA #IMPLIED
+ title CDATA #IMPLIED>
+
+<!ELEMENT title (#PCDATA)>
+<!ATTLIST title
+ id ID #IMPLIED>
+
+<!ELEMENT packageset (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST packageset
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT sourcepath (fileset | dirset | extdirs | filelist | existing | pathelement | path)*>
+<!ATTLIST sourcepath
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT footer (#PCDATA)>
+<!ATTLIST footer
+ id ID #IMPLIED>
+
+<!ELEMENT source EMPTY>
+<!ATTLIST source
+ id ID #IMPLIED
+ file CDATA #IMPLIED>
+
+<!ELEMENT header (#PCDATA)>
+<!ATTLIST header
+ id ID #IMPLIED>
+
+<!ELEMENT excludepackage EMPTY>
+<!ATTLIST excludepackage
+ id ID #IMPLIED
+ name CDATA #IMPLIED>
+
+<!ELEMENT tag (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST tag
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ name CDATA #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ enabled %boolean; #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ scope CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT p4integrate EMPTY>
+<!ATTLIST p4integrate
+ id ID #IMPLIED
+ branch CDATA #IMPLIED
+ leavetargetrevision %boolean; #IMPLIED
+ errormessage CDATA #IMPLIED
+ forceintegrate %boolean; #IMPLIED
+ client CDATA #IMPLIED
+ enablebaselessmerges %boolean; #IMPLIED
+ fromfile CDATA #IMPLIED
+ reversebranchmappings %boolean; #IMPLIED
+ port CDATA #IMPLIED
+ change CDATA #IMPLIED
+ simulationmode %boolean; #IMPLIED
+ propagatesourcefiletype %boolean; #IMPLIED
+ view CDATA #IMPLIED
+ nocopynewtargetfiles %boolean; #IMPLIED
+ tofile CDATA #IMPLIED
+ cmdopts CDATA #IMPLIED
+ globalopts CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ restoredeletedrevisions %boolean; #IMPLIED
+ inerror %boolean; #IMPLIED
+ user CDATA #IMPLIED>
+
+<!ELEMENT translate (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | fileset | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | depth | and)*>
+<!ATTLIST translate
+ id ID #IMPLIED
+ bundlecountry CDATA #IMPLIED
+ bundlelanguage CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ srcencoding CDATA #IMPLIED
+ bundle CDATA #IMPLIED
+ bundleencoding CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ destencoding CDATA #IMPLIED
+ bundlevariant CDATA #IMPLIED
+ includes CDATA #IMPLIED
+ description CDATA #IMPLIED
+ todir CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ endtoken CDATA #IMPLIED
+ forceoverwrite %boolean; #IMPLIED
+ starttoken CDATA #IMPLIED>
+
+<!ELEMENT signjar (fileset)*>
+<!ATTLIST signjar
+ id ID #IMPLIED
+ storepass CDATA #IMPLIED
+ lazy %boolean; #IMPLIED
+ jar CDATA #IMPLIED
+ verbose %boolean; #IMPLIED
+ keypass CDATA #IMPLIED
+ maxmemory CDATA #IMPLIED
+ alias CDATA #IMPLIED
+ sectionsonly %boolean; #IMPLIED
+ keystore CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ sigfile CDATA #IMPLIED
+ description CDATA #IMPLIED
+ internalsf %boolean; #IMPLIED
+ storetype CDATA #IMPLIED
+ signedjar CDATA #IMPLIED>
+
+<!ELEMENT cclock EMPTY>
+<!ATTLIST cclock
+ id ID #IMPLIED
+ objsel CDATA #IMPLIED
+ replace %boolean; #IMPLIED
+ pname CDATA #IMPLIED
+ viewpath CDATA #IMPLIED
+ comment CDATA #IMPLIED
+ failonerr %boolean; #IMPLIED
+ cleartooldir CDATA #IMPLIED
+ objselect CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ nusers CDATA #IMPLIED
+ obsolete %boolean; #IMPLIED>
+
+<!ELEMENT chown (mapper | srcfile | targetfile | redirector | filelist | env | fileset | dirset | arg)*>
+<!ATTLIST chown
+ id ID #IMPLIED
+ resultproperty CDATA #IMPLIED
+ owner CDATA #IMPLIED
+ skipemptyfilesets %boolean; #IMPLIED
+ failifexecutionfails %boolean; #IMPLIED
+ type (file | dir | both) #IMPLIED
+ command CDATA #IMPLIED
+ maxparallel CDATA #IMPLIED
+ executable CDATA #IMPLIED
+ os CDATA #IMPLIED
+ errorproperty CDATA #IMPLIED
+ output CDATA #IMPLIED
+ timeout CDATA #IMPLIED
+ dest CDATA #IMPLIED
+ spawn %boolean; #IMPLIED
+ input CDATA #IMPLIED
+ inputstring CDATA #IMPLIED
+ addsourcefile %boolean; #IMPLIED
+ verbose %boolean; #IMPLIED
+ logerror %boolean; #IMPLIED
+ dir CDATA #IMPLIED
+ forwardslash %boolean; #IMPLIED
+ error CDATA #IMPLIED
+ description CDATA #IMPLIED
+ outputproperty CDATA #IMPLIED
+ resolveexecutable %boolean; #IMPLIED
+ append %boolean; #IMPLIED
+ failonerror %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ ignoremissing %boolean; #IMPLIED
+ vmlauncher %boolean; #IMPLIED
+ newenvironment %boolean; #IMPLIED
+ file CDATA #IMPLIED
+ relative %boolean; #IMPLIED
+ parallel %boolean; #IMPLIED>
+
+<!ELEMENT srcfile EMPTY>
+<!ATTLIST srcfile
+ id ID #IMPLIED>
+
+<!ELEMENT targetfile EMPTY>
+<!ATTLIST targetfile
+ id ID #IMPLIED>
+
+<!ELEMENT vajload (vajproject)*>
+<!ATTLIST vajload
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ remote CDATA #IMPLIED
+ haltonerror %boolean; #IMPLIED>
+
+<!ELEMENT vajproject EMPTY>
+<!ATTLIST vajproject
+ id ID #IMPLIED
+ version CDATA #IMPLIED
+ name CDATA #IMPLIED>
+
+<!ELEMENT jarlib-available (extensionset | extension)*>
+<!ATTLIST jarlib-available
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ file CDATA #IMPLIED
+ description CDATA #IMPLIED
+ property CDATA #IMPLIED>
+
+<!ELEMENT extensionset (fileset | libfileset | extension)*>
+<!ATTLIST extensionset
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT rexec (write | read)*>
+<!ATTLIST rexec
+ id ID #IMPLIED
+ port CDATA #IMPLIED
+ server CDATA #IMPLIED
+ command CDATA #IMPLIED
+ userid CDATA #IMPLIED
+ timeout CDATA #IMPLIED
+ initialcr %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ password CDATA #IMPLIED>
+
+<!ELEMENT WsdlToDotnet EMPTY>
+<!ATTLIST WsdlToDotnet
+ id ID #IMPLIED
+ url CDATA #IMPLIED
+ srcfile CDATA #IMPLIED
+ destfile CDATA #IMPLIED
+ server %boolean; #IMPLIED
+ namespace CDATA #IMPLIED
+ language CDATA #IMPLIED
+ extraoptions CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED>
+
+<!ELEMENT buildnumber EMPTY>
+<!ATTLIST buildnumber
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ file CDATA #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT jpcovmerge (fileset)*>
+<!ATTLIST jpcovmerge
+ id ID #IMPLIED
+ verbose %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ tofile CDATA #IMPLIED
+ home CDATA #IMPLIED>
+
+<!ELEMENT ejbjar (patternset | exclude | include | custom | weblogictoplink | present | none | jboss | not | borland | weblogic | type | modified | iplanet | or | jonas | contains | depend | support | classpath | different | size | majority | websphere | containsregexp | dtd | filename | selector | includesfile | date | excludesfile | depth | and)*>
+<!ATTLIST ejbjar
+ id ID #IMPLIED
+ descriptordir CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ manifest CDATA #IMPLIED
+ destdir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ basenameterminator CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ cmpversion (1.0 | 2.0) #IMPLIED
+ dependency CDATA #IMPLIED
+ basejarname CDATA #IMPLIED
+ flatdestdir %boolean; #IMPLIED
+ includes CDATA #IMPLIED
+ description CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ srcdir CDATA #IMPLIED
+ naming (ejb-name | directory | descriptor | basejarname) #IMPLIED
+ excludesfile CDATA #IMPLIED
+ genericjarsuffix CDATA #IMPLIED>
+
+<!ELEMENT weblogictoplink (classpath | wlclasspath | sysproperty)*>
+<!ATTLIST weblogictoplink
+ id ID #IMPLIED
+ newcmp %boolean; #IMPLIED
+ ejbdtd CDATA #IMPLIED
+ jvmargs CDATA #IMPLIED
+ rebuild %boolean; #IMPLIED
+ suffix CDATA #IMPLIED
+ args CDATA #IMPLIED
+ outputdir CDATA #IMPLIED
+ toplinkdtd CDATA #IMPLIED
+ wldtd CDATA #IMPLIED
+ destdir CDATA #IMPLIED
+ weblogicdtd CDATA #IMPLIED
+ wlclasspath CDATA #IMPLIED
+ jvmdebuglevel CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ keepgenerated CDATA #IMPLIED
+ compiler CDATA #IMPLIED
+ oldcmp %boolean; #IMPLIED
+ keepgeneric %boolean; #IMPLIED
+ ejbcclass CDATA #IMPLIED
+ noejbc %boolean; #IMPLIED
+ toplinkdescriptor CDATA #IMPLIED
+ genericjarsuffix CDATA #IMPLIED>
+
+<!ELEMENT jboss (classpath)*>
+<!ATTLIST jboss
+ id ID #IMPLIED
+ destdir CDATA #IMPLIED
+ genericjarsuffix CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ suffix CDATA #IMPLIED>
+
+<!ELEMENT borland (classpath)*>
+<!ATTLIST borland
+ id ID #IMPLIED
+ verifyargs CDATA #IMPLIED
+ debug %boolean; #IMPLIED
+ destdir CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ genericjarsuffix CDATA #IMPLIED
+ java2iiopparams CDATA #IMPLIED
+ version CDATA #IMPLIED
+ basdtd CDATA #IMPLIED
+ verify %boolean; #IMPLIED
+ suffix CDATA #IMPLIED
+ generateclient %boolean; #IMPLIED>
+
+<!ELEMENT weblogic (classpath | wlclasspath | sysproperty)*>
+<!ATTLIST weblogic
+ id ID #IMPLIED
+ newcmp %boolean; #IMPLIED
+ ejbdtd CDATA #IMPLIED
+ jvmargs CDATA #IMPLIED
+ rebuild %boolean; #IMPLIED
+ suffix CDATA #IMPLIED
+ args CDATA #IMPLIED
+ outputdir CDATA #IMPLIED
+ wldtd CDATA #IMPLIED
+ destdir CDATA #IMPLIED
+ weblogicdtd CDATA #IMPLIED
+ wlclasspath CDATA #IMPLIED
+ jvmdebuglevel CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ keepgenerated CDATA #IMPLIED
+ compiler CDATA #IMPLIED
+ oldcmp %boolean; #IMPLIED
+ keepgeneric %boolean; #IMPLIED
+ ejbcclass CDATA #IMPLIED
+ noejbc %boolean; #IMPLIED
+ genericjarsuffix CDATA #IMPLIED>
+
+<!ELEMENT iplanet (classpath)*>
+<!ATTLIST iplanet
+ id ID #IMPLIED
+ destdir CDATA #IMPLIED
+ genericjarsuffix CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ keepgenerated %boolean; #IMPLIED
+ debug %boolean; #IMPLIED
+ suffix CDATA #IMPLIED
+ iashome CDATA #IMPLIED>
+
+<!ELEMENT jonas (classpath)*>
+<!ATTLIST jonas
+ id ID #IMPLIED
+ jonasroot CDATA #IMPLIED
+ keepgeneric %boolean; #IMPLIED
+ additionalargs CDATA #IMPLIED
+ javac CDATA #IMPLIED
+ destdir CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ orb CDATA #IMPLIED
+ jarsuffix CDATA #IMPLIED
+ verbose %boolean; #IMPLIED
+ genericjarsuffix CDATA #IMPLIED
+ nogenic %boolean; #IMPLIED
+ rmicopts CDATA #IMPLIED
+ javacopts CDATA #IMPLIED
+ novalidation %boolean; #IMPLIED
+ keepgenerated %boolean; #IMPLIED
+ nocompil %boolean; #IMPLIED
+ secpropag %boolean; #IMPLIED>
+
+<!ELEMENT support (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST support
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT websphere (classpath | wasclasspath)*>
+<!ATTLIST websphere
+ id ID #IMPLIED
+ newcmp %boolean; #IMPLIED
+ ejbdtd CDATA #IMPLIED
+ rmicoptions CDATA #IMPLIED
+ noinform %boolean; #IMPLIED
+ rebuild %boolean; #IMPLIED
+ suffix CDATA #IMPLIED
+ quiet %boolean; #IMPLIED
+ dbschema CDATA #IMPLIED
+ destdir CDATA #IMPLIED
+ ejbdeploy %boolean; #IMPLIED
+ use35 %boolean; #IMPLIED
+ tempdir CDATA #IMPLIED
+ novalidate %boolean; #IMPLIED
+ codegen %boolean; #IMPLIED
+ dbvendor (SQL92 | SQL99 | DB2UDBWIN_V71 | DB2UDBOS390_V6 | DB2UDBAS400_V4R5 | ORACLE_V8 | INFORMIX_V92 | SYBASE_V1192 | MSSQLSERVER_V7 | MYSQL_V323) #IMPLIED
+ classpath CDATA #IMPLIED
+ wasclasspath CDATA #IMPLIED
+ oldcmp %boolean; #IMPLIED
+ dbname CDATA #IMPLIED
+ keepgeneric %boolean; #IMPLIED
+ trace %boolean; #IMPLIED
+ nowarn %boolean; #IMPLIED
+ genericjarsuffix CDATA #IMPLIED>
+
+<!ELEMENT wasclasspath (fileset | dirset | extdirs | filelist | existing | pathelement | path)*>
+<!ATTLIST wasclasspath
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT war (patternset | exclude | include | custom | present | none | not | manifest | type | metainf | modified | or | contains | depend | lib | fileset | different | size | majority | containsregexp | indexjars | filename | selector | includesfile | zipgroupfileset | zipfileset | classes | date | excludesfile | webinf | depth | and)*>
+<!ATTLIST war
+ id ID #IMPLIED
+ whenempty (fail | skip | create) #IMPLIED
+ keepcompression %boolean; #IMPLIED
+ duplicate (add | preserve | fail) #IMPLIED
+ roundup %boolean; #IMPLIED
+ excludes CDATA #IMPLIED
+ encoding CDATA #IMPLIED
+ basedir CDATA #IMPLIED
+ manifest CDATA #IMPLIED
+ jarfile CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ index %boolean; #IMPLIED
+ update %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ destfile CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ includes CDATA #IMPLIED
+ description CDATA #IMPLIED
+ webxml CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ compress %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ manifestencoding CDATA #IMPLIED
+ file CDATA #IMPLIED
+ filesonly %boolean; #IMPLIED
+ warfile CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ filesetmanifest (skip | merge | mergewithoutmain) #IMPLIED
+ zipfile CDATA #IMPLIED>
+
+<!ELEMENT manifest (attribute | section)*>
+<!ATTLIST manifest
+ id ID #IMPLIED>
+
+<!ELEMENT section (attribute)*>
+<!ATTLIST section
+ id ID #IMPLIED
+ name CDATA #IMPLIED>
+
+<!ELEMENT metainf (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST metainf
+ id ID #IMPLIED
+ src CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ filemode CDATA #IMPLIED
+ prefix CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ fullpath CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includes CDATA #IMPLIED
+ dirmode CDATA #IMPLIED>
+
+<!ELEMENT lib (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST lib
+ id ID #IMPLIED
+ src CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ filemode CDATA #IMPLIED
+ prefix CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ fullpath CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includes CDATA #IMPLIED
+ dirmode CDATA #IMPLIED>
+
+<!ELEMENT indexjars (fileset | dirset | extdirs | filelist | existing | pathelement | path)*>
+<!ATTLIST indexjars
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT classes (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST classes
+ id ID #IMPLIED
+ src CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ filemode CDATA #IMPLIED
+ prefix CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ fullpath CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includes CDATA #IMPLIED
+ dirmode CDATA #IMPLIED>
+
+<!ELEMENT webinf (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST webinf
+ id ID #IMPLIED
+ src CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ filemode CDATA #IMPLIED
+ prefix CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ fullpath CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includes CDATA #IMPLIED
+ dirmode CDATA #IMPLIED>
+
+<!ELEMENT rename EMPTY>
+<!ATTLIST rename
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ dest CDATA #IMPLIED
+ replace CDATA #IMPLIED
+ description CDATA #IMPLIED
+ src CDATA #IMPLIED>
+
+<!ELEMENT sequential (%tasks;)*>
+<!ATTLIST sequential
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT serverdeploy (weblogic | generic | jonas)*>
+<!ATTLIST serverdeploy
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ action CDATA #IMPLIED
+ source CDATA #IMPLIED>
+
+<!ELEMENT generic (arg | classpath | jvmarg)*>
+<!ATTLIST generic
+ id ID #IMPLIED
+ classpath CDATA #IMPLIED
+ password CDATA #IMPLIED
+ server CDATA #IMPLIED
+ classname CDATA #IMPLIED
+ username CDATA #IMPLIED>
+
+<!ELEMENT property (classpath)*>
+<!ATTLIST property
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ url CDATA #IMPLIED
+ name CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ file CDATA #IMPLIED
+ userproperty %boolean; #IMPLIED
+ resource CDATA #IMPLIED
+ environment CDATA #IMPLIED
+ prefix CDATA #IMPLIED
+ classpathref IDREF #IMPLIED
+ taskname CDATA #IMPLIED
+ location CDATA #IMPLIED
+ value CDATA #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT subant (reference | fileset | buildpathelement | dirset | buildpath | propertyset | filelist | property)*>
+<!ATTLIST subant
+ id ID #IMPLIED
+ genericantfile CDATA #IMPLIED
+ output CDATA #IMPLIED
+ inheritall %boolean; #IMPLIED
+ inheritrefs %boolean; #IMPLIED
+ antfile CDATA #IMPLIED
+ target CDATA #IMPLIED
+ buildpathref IDREF #IMPLIED
+ taskname CDATA #IMPLIED
+ buildpath CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED>
+
+<!ELEMENT buildpathelement EMPTY>
+<!ATTLIST buildpathelement
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT buildpath (fileset | dirset | extdirs | filelist | existing | pathelement | path)*>
+<!ATTLIST buildpath
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT move (filterchain | fileset | filterset | mapper)*>
+<!ATTLIST move
+ id ID #IMPLIED
+ flatten %boolean; #IMPLIED
+ encoding CDATA #IMPLIED
+ tofile CDATA #IMPLIED
+ todir CDATA #IMPLIED
+ file CDATA #IMPLIED
+ verbose %boolean; #IMPLIED
+ includeemptydirs %boolean; #IMPLIED
+ overwrite %boolean; #IMPLIED
+ enablemultiplemappings %boolean; #IMPLIED
+ granularity CDATA #IMPLIED
+ outputencoding CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ preservelastmodified %boolean; #IMPLIED
+ filtering %boolean; #IMPLIED>
+
+<!ELEMENT ildasm EMPTY>
+<!ATTLIST ildasm
+ id ID #IMPLIED
+ assembler %boolean; #IMPLIED
+ encoding (ascii | utf8 | unicode) #IMPLIED
+ executable CDATA #IMPLIED
+ progressbar %boolean; #IMPLIED
+ linenumbers %boolean; #IMPLIED
+ rawexceptionhandling %boolean; #IMPLIED
+ showsource %boolean; #IMPLIED
+ metadata %boolean; #IMPLIED
+ destfile CDATA #IMPLIED
+ srcfile CDATA #IMPLIED
+ bytes %boolean; #IMPLIED
+ resourcedir CDATA #IMPLIED
+ quoteallnames %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ header %boolean; #IMPLIED
+ visibility CDATA #IMPLIED
+ sourcefile CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ item CDATA #IMPLIED>
+
+<!ELEMENT copydir (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST copydir
+ id ID #IMPLIED
+ flatten %boolean; #IMPLIED
+ src CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ dest CDATA #IMPLIED
+ description CDATA #IMPLIED
+ forceoverwrite %boolean; #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ filtering %boolean; #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT cccheckin EMPTY>
+<!ATTLIST cccheckin
+ id ID #IMPLIED
+ preservetime %boolean; #IMPLIED
+ viewpath CDATA #IMPLIED
+ comment CDATA #IMPLIED
+ nowarn %boolean; #IMPLIED
+ failonerr %boolean; #IMPLIED
+ objselect CDATA #IMPLIED
+ identical %boolean; #IMPLIED
+ cleartooldir CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ keepcopy %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ commentfile CDATA #IMPLIED>
+
+<!ELEMENT ccunlock EMPTY>
+<!ATTLIST ccunlock
+ id ID #IMPLIED
+ objsel CDATA #IMPLIED
+ pname CDATA #IMPLIED
+ viewpath CDATA #IMPLIED
+ comment CDATA #IMPLIED
+ failonerr %boolean; #IMPLIED
+ cleartooldir CDATA #IMPLIED
+ objselect CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT wljspc (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | classpath | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | depth | and)*>
+<!ATTLIST wljspc
+ id ID #IMPLIED
+ src CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ dest CDATA #IMPLIED
+ package CDATA #IMPLIED
+ description CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT fixcrlf (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST fixcrlf
+ id ID #IMPLIED
+ tab (add | asis | remove) #IMPLIED
+ excludes CDATA #IMPLIED
+ encoding CDATA #IMPLIED
+ cr (add | asis | remove) #IMPLIED
+ destdir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ eol (asis | cr | lf | crlf | mac | unix | dos) #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ javafiles %boolean; #IMPLIED
+ eof (add | asis | remove) #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ tablength CDATA #IMPLIED
+ includes CDATA #IMPLIED
+ description CDATA #IMPLIED
+ fixlast %boolean; #IMPLIED
+ includesfile CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ srcdir CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED>
+
+<!ELEMENT telnet (write | read)*>
+<!ATTLIST telnet
+ id ID #IMPLIED
+ port CDATA #IMPLIED
+ userid CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ password CDATA #IMPLIED
+ initialcr %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ timeout CDATA #IMPLIED
+ server CDATA #IMPLIED>
+
+<!ELEMENT sosget EMPTY>
+<!ATTLIST sosget
+ id ID #IMPLIED
+ soshome CDATA #IMPLIED
+ file CDATA #IMPLIED
+ recursive %boolean; #IMPLIED
+ verbose %boolean; #IMPLIED
+ vssserverpath CDATA #IMPLIED
+ username CDATA #IMPLIED
+ sosserverpath CDATA #IMPLIED
+ projectpath CDATA #IMPLIED
+ version CDATA #IMPLIED
+ nocompress %boolean; #IMPLIED
+ nocache %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ label CDATA #IMPLIED
+ description CDATA #IMPLIED
+ localpath CDATA #IMPLIED
+ soscmd CDATA #IMPLIED
+ password CDATA #IMPLIED>
+
+<!ELEMENT pathconvert (map | path | mapper)*>
+<!ATTLIST pathconvert
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ pathsep CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ dirsep CDATA #IMPLIED
+ setonempty %boolean; #IMPLIED
+ property CDATA #IMPLIED
+ targetos CDATA #IMPLIED>
+
+<!ELEMENT map EMPTY>
+<!ATTLIST map
+ id ID #IMPLIED
+ from CDATA #IMPLIED
+ to CDATA #IMPLIED>
+
+<!ELEMENT record EMPTY>
+<!ATTLIST record
+ id ID #IMPLIED
+ append %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ name CDATA #IMPLIED
+ loglevel (error | warn | info | verbose | debug) #IMPLIED
+ description CDATA #IMPLIED
+ emacsmode %boolean; #IMPLIED
+ action (start | stop) #IMPLIED>
+
+<!ELEMENT p4sync EMPTY>
+<!ATTLIST p4sync
+ id ID #IMPLIED
+ force CDATA #IMPLIED
+ port CDATA #IMPLIED
+ client CDATA #IMPLIED
+ inerror %boolean; #IMPLIED
+ user CDATA #IMPLIED
+ cmdopts CDATA #IMPLIED
+ globalopts CDATA #IMPLIED
+ view CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ label CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ errormessage CDATA #IMPLIED>
+
+<!ELEMENT exec (arg | redirector | env)*>
+<!ATTLIST exec
+ id ID #IMPLIED
+ resultproperty CDATA #IMPLIED
+ command CDATA #IMPLIED
+ failifexecutionfails %boolean; #IMPLIED
+ executable CDATA #IMPLIED
+ errorproperty CDATA #IMPLIED
+ os CDATA #IMPLIED
+ output CDATA #IMPLIED
+ timeout CDATA #IMPLIED
+ spawn %boolean; #IMPLIED
+ input CDATA #IMPLIED
+ inputstring CDATA #IMPLIED
+ logerror %boolean; #IMPLIED
+ dir CDATA #IMPLIED
+ error CDATA #IMPLIED
+ description CDATA #IMPLIED
+ outputproperty CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ resolveexecutable %boolean; #IMPLIED
+ append %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ newenvironment %boolean; #IMPLIED
+ vmlauncher %boolean; #IMPLIED>
+
+<!ELEMENT ccmklabel EMPTY>
+<!ATTLIST ccmklabel
+ id ID #IMPLIED
+ recurse %boolean; #IMPLIED
+ replace %boolean; #IMPLIED
+ viewpath CDATA #IMPLIED
+ typename CDATA #IMPLIED
+ comment CDATA #IMPLIED
+ version CDATA #IMPLIED
+ failonerr %boolean; #IMPLIED
+ objselect CDATA #IMPLIED
+ cleartooldir CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ vob CDATA #IMPLIED
+ description CDATA #IMPLIED
+ commentfile CDATA #IMPLIED>
+
+<!ELEMENT p4edit EMPTY>
+<!ATTLIST p4edit
+ id ID #IMPLIED
+ port CDATA #IMPLIED
+ client CDATA #IMPLIED
+ inerror %boolean; #IMPLIED
+ user CDATA #IMPLIED
+ cmdopts CDATA #IMPLIED
+ globalopts CDATA #IMPLIED
+ view CDATA #IMPLIED
+ change CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ errormessage CDATA #IMPLIED>
+
+<!ELEMENT maudit (fileset | jvmarg | classpath | rulespath | searchpath | sourcepath)*>
+<!ATTLIST maudit
+ id ID #IMPLIED
+ tofile CDATA #IMPLIED
+ exit %boolean; #IMPLIED
+ offsets %boolean; #IMPLIED
+ quiet %boolean; #IMPLIED
+ unused %boolean; #IMPLIED
+ verbose %boolean; #IMPLIED
+ maxmemory CDATA #IMPLIED
+ fix %boolean; #IMPLIED
+ metamatahome CDATA #IMPLIED
+ list %boolean; #IMPLIED
+ home CDATA #IMPLIED
+ fullsemanticize %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT rulespath (fileset | dirset | extdirs | filelist | existing | pathelement | path)*>
+<!ATTLIST rulespath
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT searchpath (fileset | dirset | extdirs | filelist | existing | pathelement | path)*>
+<!ATTLIST searchpath
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT antlr (jvmarg | classpath)*>
+<!ATTLIST antlr
+ id ID #IMPLIED
+ debug %boolean; #IMPLIED
+ outputdirectory CDATA #IMPLIED
+ fork %boolean; #IMPLIED
+ dir CDATA #IMPLIED
+ trace %boolean; #IMPLIED
+ tracetreewalker %boolean; #IMPLIED
+ html %boolean; #IMPLIED
+ tracelexer %boolean; #IMPLIED
+ diagnostic %boolean; #IMPLIED
+ traceparser %boolean; #IMPLIED
+ target CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ glib CDATA #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT netrexxc (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST netrexxc
+ id ID #IMPLIED
+ excludes CDATA #IMPLIED
+ verbose (verbose | verbose0 | verbose1 | verbose2 | verbose3 | verbose4 | verbose5 | noverbose) #IMPLIED
+ keep %boolean; #IMPLIED
+ comments %boolean; #IMPLIED
+ strictimport %boolean; #IMPLIED
+ sourcedir %boolean; #IMPLIED
+ diag %boolean; #IMPLIED
+ compile %boolean; #IMPLIED
+ binary %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ includes CDATA #IMPLIED
+ suppressmethodargumentnotused %boolean; #IMPLIED
+ suppressvariablenotused %boolean; #IMPLIED
+ strictsignal %boolean; #IMPLIED
+ trace (trace | trace1 | trace2 | notrace) #IMPLIED
+ destdir CDATA #IMPLIED
+ console %boolean; #IMPLIED
+ replace %boolean; #IMPLIED
+ classpath CDATA #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ format %boolean; #IMPLIED
+ explicit %boolean; #IMPLIED
+ includesfile CDATA #IMPLIED
+ suppressprivatepropertynotused %boolean; #IMPLIED
+ strictargs %boolean; #IMPLIED
+ suppressdeprecation %boolean; #IMPLIED
+ strictcase %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ savelog %boolean; #IMPLIED
+ logo %boolean; #IMPLIED
+ utf8 %boolean; #IMPLIED
+ strictprops %boolean; #IMPLIED
+ srcdir CDATA #IMPLIED
+ java %boolean; #IMPLIED
+ suppressexceptionnotsignalled %boolean; #IMPLIED
+ crossref %boolean; #IMPLIED
+ time %boolean; #IMPLIED
+ symbols %boolean; #IMPLIED
+ excludesfile CDATA #IMPLIED
+ strictassign %boolean; #IMPLIED
+ compact %boolean; #IMPLIED
+ decimal %boolean; #IMPLIED>
+
+<!ELEMENT ftp (fileset)*>
+<!ATTLIST ftp
+ id ID #IMPLIED
+ binary %boolean; #IMPLIED
+ password CDATA #IMPLIED
+ userid CDATA #IMPLIED
+ timediffauto %boolean; #IMPLIED
+ remotedir CDATA #IMPLIED
+ separator CDATA #IMPLIED
+ port CDATA #IMPLIED
+ skipfailedtransfers %boolean; #IMPLIED
+ chmod CDATA #IMPLIED
+ timediffmillis CDATA #IMPLIED
+ verbose %boolean; #IMPLIED
+ server CDATA #IMPLIED
+ newer %boolean; #IMPLIED
+ action (send | put | recv | get | del | delete | list | mkdir | chmod | rmdir) #IMPLIED
+ description CDATA #IMPLIED
+ passive %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ preservelastmodified %boolean; #IMPLIED
+ listing CDATA #IMPLIED
+ umask CDATA #IMPLIED
+ ignorenoncriticalerrors %boolean; #IMPLIED
+ depends %boolean; #IMPLIED>
+
+<!ELEMENT jpcovreport (reference | coveragepath | sourcepath)*>
+<!ATTLIST jpcovreport
+ id ID #IMPLIED
+ snapshot CDATA #IMPLIED
+ tofile CDATA #IMPLIED
+ filters CDATA #IMPLIED
+ percent CDATA #IMPLIED
+ home CDATA #IMPLIED
+ type (executive | summary | detailed | verydetailed) #IMPLIED
+ taskname CDATA #IMPLIED
+ format (html | text | xml) #IMPLIED
+ includesource %boolean; #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT coveragepath (fileset | dirset | extdirs | filelist | existing | pathelement | path)*>
+<!ATTLIST coveragepath
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT execon (mapper | srcfile | targetfile | redirector | filelist | env | fileset | dirset | arg)*>
+<!ATTLIST execon
+ id ID #IMPLIED
+ resultproperty CDATA #IMPLIED
+ skipemptyfilesets %boolean; #IMPLIED
+ command CDATA #IMPLIED
+ failifexecutionfails %boolean; #IMPLIED
+ type (file | dir | both) #IMPLIED
+ maxparallel CDATA #IMPLIED
+ executable CDATA #IMPLIED
+ os CDATA #IMPLIED
+ errorproperty CDATA #IMPLIED
+ output CDATA #IMPLIED
+ timeout CDATA #IMPLIED
+ dest CDATA #IMPLIED
+ spawn %boolean; #IMPLIED
+ input CDATA #IMPLIED
+ inputstring CDATA #IMPLIED
+ addsourcefile %boolean; #IMPLIED
+ verbose %boolean; #IMPLIED
+ logerror %boolean; #IMPLIED
+ dir CDATA #IMPLIED
+ forwardslash %boolean; #IMPLIED
+ error CDATA #IMPLIED
+ description CDATA #IMPLIED
+ outputproperty CDATA #IMPLIED
+ resolveexecutable %boolean; #IMPLIED
+ append %boolean; #IMPLIED
+ failonerror %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ ignoremissing %boolean; #IMPLIED
+ vmlauncher %boolean; #IMPLIED
+ newenvironment %boolean; #IMPLIED
+ relative %boolean; #IMPLIED
+ parallel %boolean; #IMPLIED>
+
+<!ELEMENT ccmcheckout (fileset)*>
+<!ATTLIST ccmcheckout
+ id ID #IMPLIED
+ ccmaction CDATA #IMPLIED
+ task CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ file CDATA #IMPLIED
+ description CDATA #IMPLIED
+ ccmdir CDATA #IMPLIED
+ comment CDATA #IMPLIED>
+
+<!ELEMENT ant (reference | propertyset | property)*>
+<!ATTLIST ant
+ id ID #IMPLIED
+ output CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ inheritall %boolean; #IMPLIED
+ dir CDATA #IMPLIED
+ inheritrefs %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ target CDATA #IMPLIED
+ antfile CDATA #IMPLIED>
+
+<!ELEMENT xmlvalidate (fileset | classpath | attribute | dtd | xmlcatalog | property)*>
+<!ATTLIST xmlvalidate
+ id ID #IMPLIED
+ classpath CDATA #IMPLIED
+ file CDATA #IMPLIED
+ classname CDATA #IMPLIED
+ lenient %boolean; #IMPLIED
+ warn %boolean; #IMPLIED
+ classpathref IDREF #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED>
+
+<!ELEMENT xslt (patternset | exclude | include | custom | present | none | not | type | factory | modified | param | or | contains | depend | classpath | different | size | majority | containsregexp | filename | xmlcatalog | selector | includesfile | outputproperty | mapper | date | excludesfile | depth | and)*>
+<!ATTLIST xslt
+ id ID #IMPLIED
+ force %boolean; #IMPLIED
+ excludes CDATA #IMPLIED
+ processor CDATA #IMPLIED
+ classpathref IDREF #IMPLIED
+ basedir CDATA #IMPLIED
+ destdir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ scanincludeddirectories %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ extension CDATA #IMPLIED
+ in CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ reloadstylesheet %boolean; #IMPLIED
+ includes CDATA #IMPLIED
+ description CDATA #IMPLIED
+ out CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ style CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED>
+
+<!ELEMENT p4resolve EMPTY>
+<!ATTLIST p4resolve
+ id ID #IMPLIED
+ forcetextmode %boolean; #IMPLIED
+ port CDATA #IMPLIED
+ client CDATA #IMPLIED
+ inerror %boolean; #IMPLIED
+ user CDATA #IMPLIED
+ cmdopts CDATA #IMPLIED
+ globalopts CDATA #IMPLIED
+ markersforall %boolean; #IMPLIED
+ simulationmode %boolean; #IMPLIED
+ view CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ errormessage CDATA #IMPLIED
+ resolvemode CDATA #IMPLIED
+ redoall %boolean; #IMPLIED>
+
+<!ELEMENT iplanet-ejbc (classpath)*>
+<!ATTLIST iplanet-ejbc
+ id ID #IMPLIED
+ ejbdescriptor CDATA #IMPLIED
+ debug %boolean; #IMPLIED
+ classpath CDATA #IMPLIED
+ iasdescriptor CDATA #IMPLIED
+ iashome CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ dest CDATA #IMPLIED
+ description CDATA #IMPLIED
+ keepgenerated %boolean; #IMPLIED>
+
+<!ELEMENT ccmcheckintask (fileset)*>
+<!ATTLIST ccmcheckintask
+ id ID #IMPLIED
+ ccmaction CDATA #IMPLIED
+ task CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ file CDATA #IMPLIED
+ description CDATA #IMPLIED
+ ccmdir CDATA #IMPLIED
+ comment CDATA #IMPLIED>
+
+<!ELEMENT gzip EMPTY>
+<!ATTLIST gzip
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ zipfile CDATA #IMPLIED
+ description CDATA #IMPLIED
+ src CDATA #IMPLIED
+ destfile CDATA #IMPLIED>
+
+<!ELEMENT native2ascii (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | mapper | date | excludesfile | depth | and)*>
+<!ATTLIST native2ascii
+ id ID #IMPLIED
+ src CDATA #IMPLIED
+ encoding CDATA #IMPLIED
+ ext CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ reverse %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ dest CDATA #IMPLIED
+ description CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT ccrmtype EMPTY>
+<!ATTLIST ccrmtype
+ id ID #IMPLIED
+ viewpath CDATA #IMPLIED
+ typename CDATA #IMPLIED
+ rmall %boolean; #IMPLIED
+ comment CDATA #IMPLIED
+ ignore %boolean; #IMPLIED
+ typekind CDATA #IMPLIED
+ failonerr %boolean; #IMPLIED
+ objselect CDATA #IMPLIED
+ cleartooldir CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ vob CDATA #IMPLIED
+ description CDATA #IMPLIED
+ commentfile CDATA #IMPLIED>
+
+<!ELEMENT starteam EMPTY>
+<!ATTLIST starteam
+ id ID #IMPLIED
+ targetfolderabsolute %boolean; #IMPLIED
+ force %boolean; #IMPLIED
+ recursion %boolean; #IMPLIED
+ verbose %boolean; #IMPLIED
+ username CDATA #IMPLIED
+ targetfolder CDATA #IMPLIED
+ viewname CDATA #IMPLIED
+ projectname CDATA #IMPLIED
+ servername CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ password CDATA #IMPLIED
+ serverport CDATA #IMPLIED
+ foldername CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT ear (patternset | exclude | include | custom | present | none | not | manifest | type | metainf | modified | or | contains | depend | fileset | different | size | majority | containsregexp | archives | indexjars | filename | selector | includesfile | zipgroupfileset | zipfileset | date | excludesfile | depth | and)*>
+<!ATTLIST ear
+ id ID #IMPLIED
+ whenempty (fail | skip | create) #IMPLIED
+ keepcompression %boolean; #IMPLIED
+ duplicate (add | preserve | fail) #IMPLIED
+ roundup %boolean; #IMPLIED
+ excludes CDATA #IMPLIED
+ encoding CDATA #IMPLIED
+ basedir CDATA #IMPLIED
+ manifest CDATA #IMPLIED
+ jarfile CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ index %boolean; #IMPLIED
+ update %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ destfile CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ earfile CDATA #IMPLIED
+ includes CDATA #IMPLIED
+ description CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ appxml CDATA #IMPLIED
+ compress %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ manifestencoding CDATA #IMPLIED
+ file CDATA #IMPLIED
+ filesonly %boolean; #IMPLIED
+ excludesfile CDATA #IMPLIED
+ filesetmanifest (skip | merge | mergewithoutmain) #IMPLIED
+ zipfile CDATA #IMPLIED>
+
+<!ELEMENT archives (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST archives
+ id ID #IMPLIED
+ src CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ filemode CDATA #IMPLIED
+ prefix CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ fullpath CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includes CDATA #IMPLIED
+ dirmode CDATA #IMPLIED>
+
+<!ELEMENT input (#PCDATA)>
+<!ATTLIST input
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ addproperty CDATA #IMPLIED
+ description CDATA #IMPLIED
+ defaultvalue CDATA #IMPLIED
+ validargs CDATA #IMPLIED
+ message CDATA #IMPLIED>
+
+<!ELEMENT presetdef (%tasks;)*>
+<!ATTLIST presetdef
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ name CDATA #IMPLIED
+ description CDATA #IMPLIED
+ uri CDATA #IMPLIED>
+
+<!ELEMENT rmic (patternset | exclude | include | custom | present | none | extdirs | not | type | modified | or | contains | depend | classpath | different | size | majority | containsregexp | filename | selector | includesfile | compilerarg | date | excludesfile | depth | and)*>
+<!ATTLIST rmic
+ id ID #IMPLIED
+ verify %boolean; #IMPLIED
+ excludes CDATA #IMPLIED
+ iiop %boolean; #IMPLIED
+ idlopts CDATA #IMPLIED
+ extdirs CDATA #IMPLIED
+ sourcebase CDATA #IMPLIED
+ classpathref IDREF #IMPLIED
+ base CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ includeantruntime %boolean; #IMPLIED
+ includejavaruntime %boolean; #IMPLIED
+ classpath CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ debug %boolean; #IMPLIED
+ compiler CDATA #IMPLIED
+ includes CDATA #IMPLIED
+ description CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ idl %boolean; #IMPLIED
+ iiopopts CDATA #IMPLIED
+ classname CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ filtering %boolean; #IMPLIED
+ stubversion CDATA #IMPLIED>
+
+<!ELEMENT compilerarg EMPTY>
+<!ATTLIST compilerarg
+ id ID #IMPLIED
+ line CDATA #IMPLIED
+ implementation CDATA #IMPLIED
+ file CDATA #IMPLIED
+ compiler CDATA #IMPLIED
+ pathref IDREF #IMPLIED
+ value CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT checksum (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | fileset | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | depth | and)*>
+<!ATTLIST checksum
+ id ID #IMPLIED
+ excludes CDATA #IMPLIED
+ fileext CDATA #IMPLIED
+ totalproperty CDATA #IMPLIED
+ property CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ readbuffersize CDATA #IMPLIED
+ verifyproperty CDATA #IMPLIED
+ includes CDATA #IMPLIED
+ description CDATA #IMPLIED
+ todir CDATA #IMPLIED
+ algorithm CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ file CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ provider CDATA #IMPLIED
+ forceoverwrite %boolean; #IMPLIED>
+
+<!ELEMENT mail (fileset | bcc | message | replyto | cc | to | from)*>
+<!ATTLIST mail
+ id ID #IMPLIED
+ cclist CDATA #IMPLIED
+ messagefile CDATA #IMPLIED
+ password CDATA #IMPLIED
+ encoding (auto | mime | uu | plain) #IMPLIED
+ charset CDATA #IMPLIED
+ files CDATA #IMPLIED
+ subject CDATA #IMPLIED
+ message CDATA #IMPLIED
+ ssl %boolean; #IMPLIED
+ tolist CDATA #IMPLIED
+ mailport CDATA #IMPLIED
+ messagemimetype CDATA #IMPLIED
+ from CDATA #IMPLIED
+ bcclist CDATA #IMPLIED
+ description CDATA #IMPLIED
+ replyto CDATA #IMPLIED
+ mailhost CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ includefilenames %boolean; #IMPLIED
+ user CDATA #IMPLIED>
+
+<!ELEMENT bcc EMPTY>
+<!ATTLIST bcc
+ id ID #IMPLIED
+ address CDATA #IMPLIED
+ name CDATA #IMPLIED>
+
+<!ELEMENT message (#PCDATA)>
+<!ATTLIST message
+ id ID #IMPLIED
+ mimetype CDATA #IMPLIED
+ src CDATA #IMPLIED
+ charset CDATA #IMPLIED>
+
+<!ELEMENT replyto EMPTY>
+<!ATTLIST replyto
+ id ID #IMPLIED
+ address CDATA #IMPLIED
+ name CDATA #IMPLIED>
+
+<!ELEMENT cc EMPTY>
+<!ATTLIST cc
+ id ID #IMPLIED
+ address CDATA #IMPLIED
+ name CDATA #IMPLIED>
+
+<!ELEMENT to EMPTY>
+<!ATTLIST to
+ id ID #IMPLIED
+ address CDATA #IMPLIED
+ name CDATA #IMPLIED>
+
+<!ELEMENT from EMPTY>
+<!ATTLIST from
+ id ID #IMPLIED
+ address CDATA #IMPLIED
+ name CDATA #IMPLIED>
+
+<!ELEMENT loadfile (filterchain)*>
+<!ATTLIST loadfile
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ encoding CDATA #IMPLIED
+ property CDATA #IMPLIED
+ srcfile CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED>
+
+<!ELEMENT vsscheckout EMPTY>
+<!ATTLIST vsscheckout
+ id ID #IMPLIED
+ ssdir CDATA #IMPLIED
+ recursive %boolean; #IMPLIED
+ date CDATA #IMPLIED
+ autoresponse CDATA #IMPLIED
+ vsspath CDATA #IMPLIED
+ getlocalcopy %boolean; #IMPLIED
+ version CDATA #IMPLIED
+ serverpath CDATA #IMPLIED
+ login CDATA #IMPLIED
+ filetimestamp (current | modified | updated) #IMPLIED
+ taskname CDATA #IMPLIED
+ label CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ localpath CDATA #IMPLIED
+ writablefiles (replace | skip | fail) #IMPLIED>
+
+<!ELEMENT stylebook (classpath | sysproperty | redirector | bootclasspath | syspropertyset | env | permissions | jvmarg | arg | assertions)*>
+<!ATTLIST stylebook
+ id ID #IMPLIED
+ resultproperty CDATA #IMPLIED
+ jvmargs CDATA #IMPLIED
+ loaderconfig CDATA #IMPLIED
+ args CDATA #IMPLIED
+ fork %boolean; #IMPLIED
+ maxmemory CDATA #IMPLIED
+ classpathref IDREF #IMPLIED
+ jar CDATA #IMPLIED
+ errorproperty CDATA #IMPLIED
+ targetdirectory CDATA #IMPLIED
+ output CDATA #IMPLIED
+ timeout CDATA #IMPLIED
+ spawn %boolean; #IMPLIED
+ input CDATA #IMPLIED
+ skindirectory CDATA #IMPLIED
+ jvm CDATA #IMPLIED
+ inputstring CDATA #IMPLIED
+ book CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ logerror %boolean; #IMPLIED
+ dir CDATA #IMPLIED
+ error CDATA #IMPLIED
+ description CDATA #IMPLIED
+ jvmversion CDATA #IMPLIED
+ outputproperty CDATA #IMPLIED
+ append %boolean; #IMPLIED
+ failonerror %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ newenvironment %boolean; #IMPLIED
+ classname CDATA #IMPLIED>
+
+<!ELEMENT soscheckin EMPTY>
+<!ATTLIST soscheckin
+ id ID #IMPLIED
+ soshome CDATA #IMPLIED
+ file CDATA #IMPLIED
+ recursive %boolean; #IMPLIED
+ verbose %boolean; #IMPLIED
+ vssserverpath CDATA #IMPLIED
+ username CDATA #IMPLIED
+ sosserverpath CDATA #IMPLIED
+ comment CDATA #IMPLIED
+ projectpath CDATA #IMPLIED
+ nocache %boolean; #IMPLIED
+ nocompress %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ localpath CDATA #IMPLIED
+ soscmd CDATA #IMPLIED
+ password CDATA #IMPLIED>
+
+<!ELEMENT mimemail (fileset | bcc | message | replyto | cc | to | from)*>
+<!ATTLIST mimemail
+ id ID #IMPLIED
+ cclist CDATA #IMPLIED
+ messagefile CDATA #IMPLIED
+ password CDATA #IMPLIED
+ encoding (auto | mime | uu | plain) #IMPLIED
+ charset CDATA #IMPLIED
+ files CDATA #IMPLIED
+ subject CDATA #IMPLIED
+ message CDATA #IMPLIED
+ ssl %boolean; #IMPLIED
+ tolist CDATA #IMPLIED
+ mailport CDATA #IMPLIED
+ messagemimetype CDATA #IMPLIED
+ from CDATA #IMPLIED
+ bcclist CDATA #IMPLIED
+ description CDATA #IMPLIED
+ replyto CDATA #IMPLIED
+ mailhost CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ includefilenames %boolean; #IMPLIED
+ user CDATA #IMPLIED>
+
+<!ELEMENT stlabel EMPTY>
+<!ATTLIST stlabel
+ id ID #IMPLIED
+ lastbuild CDATA #IMPLIED
+ url CDATA #IMPLIED
+ username CDATA #IMPLIED
+ viewname CDATA #IMPLIED
+ projectname CDATA #IMPLIED
+ revisionlabel %boolean; #IMPLIED
+ servername CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ label CDATA #IMPLIED
+ description CDATA #IMPLIED
+ password CDATA #IMPLIED
+ serverport CDATA #IMPLIED
+ buildlabel %boolean; #IMPLIED>
+
+<!ELEMENT gunzip EMPTY>
+<!ATTLIST gunzip
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ dest CDATA #IMPLIED
+ description CDATA #IMPLIED
+ src CDATA #IMPLIED>
+
+<!ELEMENT concat (#PCDATA | filterchain | fileset | filelist | path | footer | header)*>
+<!ATTLIST concat
+ id ID #IMPLIED
+ force %boolean; #IMPLIED
+ encoding CDATA #IMPLIED
+ append %boolean; #IMPLIED
+ destfile CDATA #IMPLIED
+ binary %boolean; #IMPLIED
+ eol (asis | cr | lf | crlf | mac | unix | dos) #IMPLIED
+ outputencoding CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ fixlastline %boolean; #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT cab (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | fileset | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | depth | and)*>
+<!ATTLIST cab
+ id ID #IMPLIED
+ cabfile CDATA #IMPLIED
+ compress %boolean; #IMPLIED
+ verbose %boolean; #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ basedir CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includes CDATA #IMPLIED
+ options CDATA #IMPLIED>
+
+<!ELEMENT touch (fileset | filelist)*>
+<!ATTLIST touch
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ millis CDATA #IMPLIED
+ file CDATA #IMPLIED
+ description CDATA #IMPLIED
+ datetime CDATA #IMPLIED>
+
+<!ELEMENT parallel (%tasks; | daemons)*>
+<!ATTLIST parallel
+ id ID #IMPLIED
+ pollinterval CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ threadsperprocessor CDATA #IMPLIED
+ timeout CDATA #IMPLIED
+ threadcount CDATA #IMPLIED
+ failonany %boolean; #IMPLIED>
+
+<!ELEMENT daemons (%tasks;)*>
+<!ATTLIST daemons
+ id ID #IMPLIED>
+
+<!ELEMENT splash EMPTY>
+<!ATTLIST splash
+ id ID #IMPLIED
+ port CDATA #IMPLIED
+ user CDATA #IMPLIED
+ proxy CDATA #IMPLIED
+ imageurl CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ password CDATA #IMPLIED
+ showduration CDATA #IMPLIED
+ useproxy %boolean; #IMPLIED>
+
+<!ELEMENT antcall (reference | propertyset | param)*>
+<!ATTLIST antcall
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ inheritall %boolean; #IMPLIED
+ inheritrefs %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ target CDATA #IMPLIED>
+
+<!ELEMENT ccmkbl EMPTY>
+<!ATTLIST ccmkbl
+ id ID #IMPLIED
+ viewpath CDATA #IMPLIED
+ comment CDATA #IMPLIED
+ nlabel %boolean; #IMPLIED
+ full %boolean; #IMPLIED
+ nowarn %boolean; #IMPLIED
+ failonerr %boolean; #IMPLIED
+ objselect CDATA #IMPLIED
+ cleartooldir CDATA #IMPLIED
+ identical %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ baselinerootname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ commentfile CDATA #IMPLIED>
+
+<!ELEMENT cccheckout EMPTY>
+<!ATTLIST cccheckout
+ id ID #IMPLIED
+ reserved %boolean; #IMPLIED
+ viewpath CDATA #IMPLIED
+ out CDATA #IMPLIED
+ notco %boolean; #IMPLIED
+ comment CDATA #IMPLIED
+ nodata %boolean; #IMPLIED
+ version %boolean; #IMPLIED
+ nowarn %boolean; #IMPLIED
+ failonerr %boolean; #IMPLIED
+ objselect CDATA #IMPLIED
+ cleartooldir CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ branch CDATA #IMPLIED
+ description CDATA #IMPLIED
+ commentfile CDATA #IMPLIED>
+
+<!ELEMENT typedef (classpath)*>
+<!ATTLIST typedef
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ uri CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ file CDATA #IMPLIED
+ classname CDATA #IMPLIED
+ resource CDATA #IMPLIED
+ adaptto CDATA #IMPLIED
+ onerror (fail | report | ignore) #IMPLIED
+ loaderref IDREF #IMPLIED
+ classpathref IDREF #IMPLIED
+ taskname CDATA #IMPLIED
+ adapter CDATA #IMPLIED
+ format (properties | xml) #IMPLIED
+ description CDATA #IMPLIED
+ reverseloader %boolean; #IMPLIED>
+
+<!ELEMENT p4have EMPTY>
+<!ATTLIST p4have
+ id ID #IMPLIED
+ port CDATA #IMPLIED
+ client CDATA #IMPLIED
+ inerror %boolean; #IMPLIED
+ user CDATA #IMPLIED
+ cmdopts CDATA #IMPLIED
+ globalopts CDATA #IMPLIED
+ view CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ errormessage CDATA #IMPLIED>
+
+<!ELEMENT xmlproperty EMPTY>
+<!ATTLIST xmlproperty
+ id ID #IMPLIED
+ file CDATA #IMPLIED
+ semanticattributes %boolean; #IMPLIED
+ keeproot %boolean; #IMPLIED
+ prefix CDATA #IMPLIED
+ collapseattributes %boolean; #IMPLIED
+ validate %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ rootdirectory CDATA #IMPLIED
+ includesemanticattribute %boolean; #IMPLIED>
+
+<!ELEMENT import EMPTY>
+<!ATTLIST import
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ optional %boolean; #IMPLIED
+ file CDATA #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT copy (filterchain | fileset | filterset | mapper)*>
+<!ATTLIST copy
+ id ID #IMPLIED
+ flatten %boolean; #IMPLIED
+ encoding CDATA #IMPLIED
+ tofile CDATA #IMPLIED
+ todir CDATA #IMPLIED
+ file CDATA #IMPLIED
+ verbose %boolean; #IMPLIED
+ includeemptydirs %boolean; #IMPLIED
+ overwrite %boolean; #IMPLIED
+ enablemultiplemappings %boolean; #IMPLIED
+ granularity CDATA #IMPLIED
+ outputencoding CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ preservelastmodified %boolean; #IMPLIED
+ filtering %boolean; #IMPLIED>
+
+<!ELEMENT jsharpc (patternset | exclude | include | custom | present | none | resource | define | not | type | modified | reference | src | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | depth | and)*>
+<!ATTLIST jsharpc
+ id ID #IMPLIED
+ references CDATA #IMPLIED
+ useresponsefile %boolean; #IMPLIED
+ excludes CDATA #IMPLIED
+ mainclass CDATA #IMPLIED
+ extraoptions CDATA #IMPLIED
+ additionalmodules CDATA #IMPLIED
+ win32icon CDATA #IMPLIED
+ destdir CDATA #IMPLIED
+ executable CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ utf8output %boolean; #IMPLIED
+ includedefaultreferences %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ optimize %boolean; #IMPLIED
+ targettype (exe | library | module | winexe) #IMPLIED
+ destfile CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ win32res CDATA #IMPLIED
+ baseaddress CDATA #IMPLIED
+ debug %boolean; #IMPLIED
+ securescoping %boolean; #IMPLIED
+ includes CDATA #IMPLIED
+ description CDATA #IMPLIED
+ purejava %boolean; #IMPLIED
+ includesfile CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ warnlevel CDATA #IMPLIED
+ srcdir CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ referencefiles CDATA #IMPLIED>
+
+<!ELEMENT symlink (fileset)*>
+<!ATTLIST symlink
+ id ID #IMPLIED
+ linkfilename CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ overwrite %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ link CDATA #IMPLIED
+ action CDATA #IMPLIED
+ resource CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED>
+
+<!ELEMENT antstructure EMPTY>
+<!ATTLIST antstructure
+ id ID #IMPLIED
+ output CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT script (#PCDATA)>
+<!ATTLIST script
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ src CDATA #IMPLIED
+ language CDATA #IMPLIED>
+
+<!ELEMENT ccmcreatetask EMPTY>
+<!ATTLIST ccmcreatetask
+ id ID #IMPLIED
+ subsystem CDATA #IMPLIED
+ task CDATA #IMPLIED
+ platform CDATA #IMPLIED
+ resolver CDATA #IMPLIED
+ comment CDATA #IMPLIED
+ ccmaction CDATA #IMPLIED
+ ccmdir CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ release CDATA #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT rpm EMPTY>
+<!ATTLIST rpm
+ id ID #IMPLIED
+ removesource %boolean; #IMPLIED
+ output CDATA #IMPLIED
+ command CDATA #IMPLIED
+ cleanbuilddir %boolean; #IMPLIED
+ removespec %boolean; #IMPLIED
+ error CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ specfile CDATA #IMPLIED
+ topdir CDATA #IMPLIED
+ rpmbuildcommand CDATA #IMPLIED>
+
+<!ELEMENT delete (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | fileset | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | depth | and)*>
+<!ATTLIST delete
+ id ID #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ quiet %boolean; #IMPLIED
+ verbose %boolean; #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ includeemptydirs %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ deleteonexit %boolean; #IMPLIED
+ excludes CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT replace (patternset | exclude | include | custom | present | none | not | type | modified | replacefilter | or | contains | depend | replacetoken | different | size | majority | containsregexp | filename | selector | includesfile | replacevalue | date | excludesfile | depth | and)*>
+<!ATTLIST replace
+ id ID #IMPLIED
+ encoding CDATA #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ token CDATA #IMPLIED
+ propertyfile CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ summary %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ value CDATA #IMPLIED
+ description CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ replacefilterfile CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT replacefilter EMPTY>
+<!ATTLIST replacefilter
+ id ID #IMPLIED
+ token CDATA #IMPLIED
+ value CDATA #IMPLIED
+ property CDATA #IMPLIED>
+
+<!ELEMENT replacetoken (#PCDATA)>
+<!ATTLIST replacetoken
+ id ID #IMPLIED>
+
+<!ELEMENT replacevalue (#PCDATA)>
+<!ATTLIST replacevalue
+ id ID #IMPLIED>
+
+<!ELEMENT mmetrics (fileset | jvmarg | classpath | path | sourcepath)*>
+<!ATTLIST mmetrics
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ metamatahome CDATA #IMPLIED
+ description CDATA #IMPLIED
+ tofile CDATA #IMPLIED
+ maxmemory CDATA #IMPLIED
+ home CDATA #IMPLIED
+ granularity (compilation-units | files | methods | types | packages) #IMPLIED>
+
+<!ELEMENT attrib (mapper | srcfile | targetfile | redirector | filelist | env | fileset | dirset | arg)*>
+<!ATTLIST attrib
+ id ID #IMPLIED
+ addsourcefile %boolean; #IMPLIED
+ verbose %boolean; #IMPLIED
+ parallel %boolean; #IMPLIED
+ input CDATA #IMPLIED
+ executable CDATA #IMPLIED
+ inputstring CDATA #IMPLIED
+ readonly %boolean; #IMPLIED
+ relative %boolean; #IMPLIED
+ skipemptyfilesets %boolean; #IMPLIED
+ command CDATA #IMPLIED
+ forwardslash %boolean; #IMPLIED
+ spawn %boolean; #IMPLIED
+ hidden %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ vmlauncher %boolean; #IMPLIED
+ file CDATA #IMPLIED
+ logerror %boolean; #IMPLIED
+ errorproperty CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ output CDATA #IMPLIED
+ error CDATA #IMPLIED
+ os CDATA #IMPLIED
+ dest CDATA #IMPLIED
+ resolveexecutable %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ resultproperty CDATA #IMPLIED
+ ignoremissing %boolean; #IMPLIED
+ failifexecutionfails %boolean; #IMPLIED
+ append %boolean; #IMPLIED
+ timeout CDATA #IMPLIED
+ maxparallel CDATA #IMPLIED
+ system %boolean; #IMPLIED
+ outputproperty CDATA #IMPLIED
+ archive %boolean; #IMPLIED
+ dir CDATA #IMPLIED
+ newenvironment %boolean; #IMPLIED
+ type (file | dir | both) #IMPLIED>
+
+<!ELEMENT waitfor (isfalse | isreference | equals | available | not | contains | os | or | and | filesmatch | checksum | istrue | isset | socket | http | uptodate)*>
+<!ATTLIST waitfor
+ id ID #IMPLIED
+ checkeveryunit (millisecond | second | minute | hour | day | week) #IMPLIED
+ checkevery CDATA #IMPLIED
+ maxwaitunit (millisecond | second | minute | hour | day | week) #IMPLIED
+ maxwait CDATA #IMPLIED
+ timeoutproperty CDATA #IMPLIED>
+
+<!ELEMENT isfalse EMPTY>
+<!ATTLIST isfalse
+ id ID #IMPLIED
+ value %boolean; #IMPLIED>
+
+<!ELEMENT isreference EMPTY>
+<!ATTLIST isreference
+ id ID #IMPLIED
+ type CDATA #IMPLIED
+ refid IDREF #IMPLIED>
+
+<!ELEMENT equals EMPTY>
+<!ATTLIST equals
+ id ID #IMPLIED
+ trim %boolean; #IMPLIED
+ arg2 CDATA #IMPLIED
+ arg1 CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED>
+
+<!ELEMENT available (classpath | filepath)*>
+<!ATTLIST available
+ id ID #IMPLIED
+ classpath CDATA #IMPLIED
+ file CDATA #IMPLIED
+ classname CDATA #IMPLIED
+ resource CDATA #IMPLIED
+ ignoresystemclasses %boolean; #IMPLIED
+ type (file | dir) #IMPLIED
+ classpathref IDREF #IMPLIED
+ taskname CDATA #IMPLIED
+ value CDATA #IMPLIED
+ description CDATA #IMPLIED
+ property CDATA #IMPLIED
+ filepath CDATA #IMPLIED>
+
+<!ELEMENT filepath (fileset | dirset | extdirs | filelist | existing | pathelement | path)*>
+<!ATTLIST filepath
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT os EMPTY>
+<!ATTLIST os
+ id ID #IMPLIED
+ version CDATA #IMPLIED
+ name CDATA #IMPLIED
+ family CDATA #IMPLIED
+ arch CDATA #IMPLIED>
+
+<!ELEMENT filesmatch EMPTY>
+<!ATTLIST filesmatch
+ id ID #IMPLIED
+ file2 CDATA #IMPLIED
+ file1 CDATA #IMPLIED>
+
+<!ELEMENT istrue EMPTY>
+<!ATTLIST istrue
+ id ID #IMPLIED
+ value %boolean; #IMPLIED>
+
+<!ELEMENT isset EMPTY>
+<!ATTLIST isset
+ id ID #IMPLIED
+ property CDATA #IMPLIED>
+
+<!ELEMENT socket EMPTY>
+<!ATTLIST socket
+ id ID #IMPLIED
+ port CDATA #IMPLIED
+ server CDATA #IMPLIED>
+
+<!ELEMENT http EMPTY>
+<!ATTLIST http
+ id ID #IMPLIED
+ url CDATA #IMPLIED
+ errorsbeginat CDATA #IMPLIED>
+
+<!ELEMENT uptodate (srcfiles | mapper)*>
+<!ATTLIST uptodate
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ value CDATA #IMPLIED
+ property CDATA #IMPLIED
+ targetfile CDATA #IMPLIED
+ srcfile CDATA #IMPLIED>
+
+<!ELEMENT srcfiles (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST srcfiles
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ file CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT untar (fileset | patternset)*>
+<!ATTLIST untar
+ id ID #IMPLIED
+ compression (none | gzip | bzip2) #IMPLIED
+ taskname CDATA #IMPLIED
+ dest CDATA #IMPLIED
+ overwrite %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ encoding CDATA #IMPLIED
+ src CDATA #IMPLIED>
+
+<!ELEMENT loadproperties (filterchain | classpath)*>
+<!ATTLIST loadproperties
+ id ID #IMPLIED
+ classpath CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ classpathref IDREF #IMPLIED
+ description CDATA #IMPLIED
+ encoding CDATA #IMPLIED
+ resource CDATA #IMPLIED
+ srcfile CDATA #IMPLIED>
+
+<!ELEMENT echoproperties (propertyset)*>
+<!ATTLIST echoproperties
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ prefix CDATA #IMPLIED
+ format (xml | text) #IMPLIED
+ srcfile CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ destfile CDATA #IMPLIED>
+
+<!ELEMENT chgrp (mapper | srcfile | targetfile | redirector | filelist | env | fileset | dirset | arg)*>
+<!ATTLIST chgrp
+ id ID #IMPLIED
+ resultproperty CDATA #IMPLIED
+ skipemptyfilesets %boolean; #IMPLIED
+ failifexecutionfails %boolean; #IMPLIED
+ type (file | dir | both) #IMPLIED
+ command CDATA #IMPLIED
+ maxparallel CDATA #IMPLIED
+ executable CDATA #IMPLIED
+ os CDATA #IMPLIED
+ errorproperty CDATA #IMPLIED
+ group CDATA #IMPLIED
+ output CDATA #IMPLIED
+ timeout CDATA #IMPLIED
+ dest CDATA #IMPLIED
+ spawn %boolean; #IMPLIED
+ input CDATA #IMPLIED
+ inputstring CDATA #IMPLIED
+ addsourcefile %boolean; #IMPLIED
+ verbose %boolean; #IMPLIED
+ logerror %boolean; #IMPLIED
+ dir CDATA #IMPLIED
+ forwardslash %boolean; #IMPLIED
+ error CDATA #IMPLIED
+ description CDATA #IMPLIED
+ outputproperty CDATA #IMPLIED
+ resolveexecutable %boolean; #IMPLIED
+ append %boolean; #IMPLIED
+ failonerror %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ ignoremissing %boolean; #IMPLIED
+ vmlauncher %boolean; #IMPLIED
+ newenvironment %boolean; #IMPLIED
+ file CDATA #IMPLIED
+ relative %boolean; #IMPLIED
+ parallel %boolean; #IMPLIED>
+
+<!ELEMENT vajexport (include | exclude)*>
+<!ATTLIST vajexport
+ id ID #IMPLIED
+ exportclasses %boolean; #IMPLIED
+ haltonerror %boolean; #IMPLIED
+ remote CDATA #IMPLIED
+ destdir CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ exportresources %boolean; #IMPLIED
+ exportsources %boolean; #IMPLIED
+ overwrite %boolean; #IMPLIED
+ exportdebuginfo %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT bunzip2 EMPTY>
+<!ATTLIST bunzip2
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ dest CDATA #IMPLIED
+ description CDATA #IMPLIED
+ src CDATA #IMPLIED>
+
+<!ELEMENT whichresource (classpath)*>
+<!ATTLIST whichresource
+ id ID #IMPLIED
+ classpath CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ property CDATA #IMPLIED
+ resource CDATA #IMPLIED
+ class CDATA #IMPLIED>
+
+<!ELEMENT copyfile EMPTY>
+<!ATTLIST copyfile
+ id ID #IMPLIED
+ forceoverwrite %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ dest CDATA #IMPLIED
+ description CDATA #IMPLIED
+ filtering CDATA #IMPLIED
+ src CDATA #IMPLIED>
+
+<!ELEMENT p4labelsync EMPTY>
+<!ATTLIST p4labelsync
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ port CDATA #IMPLIED
+ client CDATA #IMPLIED
+ inerror %boolean; #IMPLIED
+ user CDATA #IMPLIED
+ cmdopts CDATA #IMPLIED
+ globalopts CDATA #IMPLIED
+ simulationmode %boolean; #IMPLIED
+ view CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ errormessage CDATA #IMPLIED
+ delete %boolean; #IMPLIED
+ add %boolean; #IMPLIED>
+
+<!ELEMENT vsscreate EMPTY>
+<!ATTLIST vsscreate
+ id ID #IMPLIED
+ ssdir CDATA #IMPLIED
+ autoresponse CDATA #IMPLIED
+ quiet %boolean; #IMPLIED
+ vsspath CDATA #IMPLIED
+ comment CDATA #IMPLIED
+ serverpath CDATA #IMPLIED
+ login CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED>
+
+<!ELEMENT macrodef (sequential | element | attribute | text)*>
+<!ATTLIST macrodef
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ name CDATA #IMPLIED
+ description CDATA #IMPLIED
+ uri CDATA #IMPLIED>
+
+<!ELEMENT element EMPTY>
+<!ATTLIST element
+ id ID #IMPLIED
+ implicit %boolean; #IMPLIED
+ name CDATA #IMPLIED
+ optional %boolean; #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT text EMPTY>
+<!ATTLIST text
+ id ID #IMPLIED
+ trim %boolean; #IMPLIED
+ name CDATA #IMPLIED
+ optional %boolean; #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT ejbc (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST ejbc
+ id ID #IMPLIED
+ src CDATA #IMPLIED
+ manifest CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ dest CDATA #IMPLIED
+ description CDATA #IMPLIED
+ keepgenerated CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ descriptors CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT unjar (fileset | patternset)*>
+<!ATTLIST unjar
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ dest CDATA #IMPLIED
+ overwrite %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ encoding CDATA #IMPLIED
+ src CDATA #IMPLIED>
+
+<!ELEMENT vbc (patternset | exclude | include | custom | present | none | resource | define | not | type | modified | reference | src | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | depth | and)*>
+<!ATTLIST vbc
+ id ID #IMPLIED
+ references CDATA #IMPLIED
+ useresponsefile %boolean; #IMPLIED
+ removeintchecks %boolean; #IMPLIED
+ excludes CDATA #IMPLIED
+ mainclass CDATA #IMPLIED
+ extraoptions CDATA #IMPLIED
+ additionalmodules CDATA #IMPLIED
+ win32icon CDATA #IMPLIED
+ optionstrict %boolean; #IMPLIED
+ destdir CDATA #IMPLIED
+ executable CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ utf8output %boolean; #IMPLIED
+ includedefaultreferences %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ optimize %boolean; #IMPLIED
+ targettype (exe | library | module | winexe) #IMPLIED
+ destfile CDATA #IMPLIED
+ rootnamespace CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ win32res CDATA #IMPLIED
+ debug %boolean; #IMPLIED
+ optionexplicit %boolean; #IMPLIED
+ includes CDATA #IMPLIED
+ description CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ warnlevel CDATA #IMPLIED
+ srcdir CDATA #IMPLIED
+ optioncompare CDATA #IMPLIED
+ imports CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ referencefiles CDATA #IMPLIED>
+
+<!ELEMENT wsdltodotnet EMPTY>
+<!ATTLIST wsdltodotnet
+ id ID #IMPLIED
+ url CDATA #IMPLIED
+ srcfile CDATA #IMPLIED
+ destfile CDATA #IMPLIED
+ server %boolean; #IMPLIED
+ namespace CDATA #IMPLIED
+ language CDATA #IMPLIED
+ extraoptions CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED>
+
+<!ELEMENT mkdir EMPTY>
+<!ATTLIST mkdir
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT condition (isfalse | isreference | equals | available | not | contains | os | or | and | filesmatch | checksum | istrue | isset | socket | http | uptodate)*>
+<!ATTLIST condition
+ id ID #IMPLIED
+ value CDATA #IMPLIED
+ property CDATA #IMPLIED>
+
+<!ELEMENT cvs (commandline)*>
+<!ATTLIST cvs
+ id ID #IMPLIED
+ cvsrsh CDATA #IMPLIED
+ quiet %boolean; #IMPLIED
+ passfile CDATA #IMPLIED
+ command CDATA #IMPLIED
+ package CDATA #IMPLIED
+ cvsroot CDATA #IMPLIED
+ reallyquiet %boolean; #IMPLIED
+ output CDATA #IMPLIED
+ port CDATA #IMPLIED
+ dest CDATA #IMPLIED
+ compressionlevel CDATA #IMPLIED
+ noexec %boolean; #IMPLIED
+ error CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ append %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ date CDATA #IMPLIED
+ compression %boolean; #IMPLIED
+ tag CDATA #IMPLIED>
+
+<!ELEMENT tempfile EMPTY>
+<!ATTLIST tempfile
+ id ID #IMPLIED
+ destdir CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ prefix CDATA #IMPLIED
+ property CDATA #IMPLIED
+ suffix CDATA #IMPLIED>
+
+<!ELEMENT junitreport (report | fileset)*>
+<!ATTLIST junitreport
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ todir CDATA #IMPLIED
+ description CDATA #IMPLIED
+ tofile CDATA #IMPLIED>
+
+<!ELEMENT report EMPTY>
+<!ATTLIST report
+ id ID #IMPLIED
+ todir CDATA #IMPLIED
+ styledir CDATA #IMPLIED
+ format (frames | noframes) #IMPLIED
+ extension CDATA #IMPLIED>
+
+<!ELEMENT ccmkattr EMPTY>
+<!ATTLIST ccmkattr
+ id ID #IMPLIED
+ recurse %boolean; #IMPLIED
+ typevalue CDATA #IMPLIED
+ replace %boolean; #IMPLIED
+ viewpath CDATA #IMPLIED
+ typename CDATA #IMPLIED
+ comment CDATA #IMPLIED
+ version CDATA #IMPLIED
+ failonerr %boolean; #IMPLIED
+ objselect CDATA #IMPLIED
+ cleartooldir CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ commentfile CDATA #IMPLIED>
+
+<!ELEMENT taskdef (classpath)*>
+<!ATTLIST taskdef
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ uri CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ file CDATA #IMPLIED
+ classname CDATA #IMPLIED
+ resource CDATA #IMPLIED
+ adaptto CDATA #IMPLIED
+ onerror (fail | report | ignore) #IMPLIED
+ loaderref IDREF #IMPLIED
+ classpathref IDREF #IMPLIED
+ taskname CDATA #IMPLIED
+ adapter CDATA #IMPLIED
+ format (properties | xml) #IMPLIED
+ description CDATA #IMPLIED
+ reverseloader %boolean; #IMPLIED>
+
+<!ELEMENT echo (#PCDATA)>
+<!ATTLIST echo
+ id ID #IMPLIED
+ append %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ file CDATA #IMPLIED
+ description CDATA #IMPLIED
+ message CDATA #IMPLIED
+ level (error | warning | info | verbose | debug) #IMPLIED>
+
+<!ELEMENT ccupdate EMPTY>
+<!ATTLIST ccupdate
+ id ID #IMPLIED
+ preservetime %boolean; #IMPLIED
+ rename %boolean; #IMPLIED
+ viewpath CDATA #IMPLIED
+ log CDATA #IMPLIED
+ overwrite %boolean; #IMPLIED
+ failonerr %boolean; #IMPLIED
+ objselect CDATA #IMPLIED
+ cleartooldir CDATA #IMPLIED
+ graphical %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ currenttime %boolean; #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT java (classpath | sysproperty | redirector | bootclasspath | syspropertyset | env | permissions | jvmarg | arg | assertions)*>
+<!ATTLIST java
+ id ID #IMPLIED
+ resultproperty CDATA #IMPLIED
+ jvmargs CDATA #IMPLIED
+ args CDATA #IMPLIED
+ fork %boolean; #IMPLIED
+ maxmemory CDATA #IMPLIED
+ classpathref IDREF #IMPLIED
+ jar CDATA #IMPLIED
+ errorproperty CDATA #IMPLIED
+ output CDATA #IMPLIED
+ timeout CDATA #IMPLIED
+ spawn %boolean; #IMPLIED
+ input CDATA #IMPLIED
+ jvm CDATA #IMPLIED
+ inputstring CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ logerror %boolean; #IMPLIED
+ dir CDATA #IMPLIED
+ error CDATA #IMPLIED
+ description CDATA #IMPLIED
+ jvmversion CDATA #IMPLIED
+ outputproperty CDATA #IMPLIED
+ append %boolean; #IMPLIED
+ failonerror %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ newenvironment %boolean; #IMPLIED
+ classname CDATA #IMPLIED>
+
+<!ELEMENT renameext (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST renameext
+ id ID #IMPLIED
+ replace %boolean; #IMPLIED
+ toextension CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ fromextension CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ srcdir CDATA #IMPLIED
+ description CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT vsslabel EMPTY>
+<!ATTLIST vsslabel
+ id ID #IMPLIED
+ ssdir CDATA #IMPLIED
+ autoresponse CDATA #IMPLIED
+ vsspath CDATA #IMPLIED
+ comment CDATA #IMPLIED
+ version CDATA #IMPLIED
+ serverpath CDATA #IMPLIED
+ login CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ label CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED>
+
+<!ELEMENT javadoc2 (taglet | doclet | package | arg | link | doctitle | bottom | group | packageset | fileset | classpath | sourcepath | footer | source | bootclasspath | header | excludepackage | tag)*>
+<!ATTLIST javadoc2
+ id ID #IMPLIED
+ verbose %boolean; #IMPLIED
+ bottom CDATA #IMPLIED
+ bootclasspathref IDREF #IMPLIED
+ header CDATA #IMPLIED
+ link CDATA #IMPLIED
+ noindex %boolean; #IMPLIED
+ access (protected | public | package | private) #IMPLIED
+ doclet CDATA #IMPLIED
+ noqualifier CDATA #IMPLIED
+ public %boolean; #IMPLIED
+ author %boolean; #IMPLIED
+ footer CDATA #IMPLIED
+ docletpath CDATA #IMPLIED
+ package %boolean; #IMPLIED
+ useexternalfile %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ sourcepathref IDREF #IMPLIED
+ protected %boolean; #IMPLIED
+ breakiterator %boolean; #IMPLIED
+ nonavbar %boolean; #IMPLIED
+ maxmemory CDATA #IMPLIED
+ group CDATA #IMPLIED
+ source CDATA #IMPLIED
+ linkoffline CDATA #IMPLIED
+ additionalparam CDATA #IMPLIED
+ locale CDATA #IMPLIED
+ linksource %boolean; #IMPLIED
+ failonerror %boolean; #IMPLIED
+ destdir CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ bootclasspath CDATA #IMPLIED
+ private %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ charset CDATA #IMPLIED
+ nodeprecatedlist %boolean; #IMPLIED
+ classpathref IDREF #IMPLIED
+ stylesheetfile CDATA #IMPLIED
+ docencoding CDATA #IMPLIED
+ excludepackagenames CDATA #IMPLIED
+ docletpathref IDREF #IMPLIED
+ packagenames CDATA #IMPLIED
+ windowtitle CDATA #IMPLIED
+ notree %boolean; #IMPLIED
+ splitindex %boolean; #IMPLIED
+ encoding CDATA #IMPLIED
+ packagelist CDATA #IMPLIED
+ doctitle CDATA #IMPLIED
+ serialwarn %boolean; #IMPLIED
+ old %boolean; #IMPLIED
+ use %boolean; #IMPLIED
+ sourcepath CDATA #IMPLIED
+ helpfile CDATA #IMPLIED
+ version %boolean; #IMPLIED
+ sourcefiles CDATA #IMPLIED
+ extdirs CDATA #IMPLIED
+ nohelp %boolean; #IMPLIED
+ nodeprecated %boolean; #IMPLIED
+ overview CDATA #IMPLIED>
+
+<!ELEMENT basename EMPTY>
+<!ATTLIST basename
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ file CDATA #IMPLIED
+ description CDATA #IMPLIED
+ property CDATA #IMPLIED
+ suffix CDATA #IMPLIED>
+
+<!ELEMENT vsscp EMPTY>
+<!ATTLIST vsscp
+ id ID #IMPLIED
+ login CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ vsspath CDATA #IMPLIED
+ serverpath CDATA #IMPLIED
+ ssdir CDATA #IMPLIED
+ autoresponse CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED>
+
+<!ELEMENT tar (patternset | exclude | include | tarfileset | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | depth | and)*>
+<!ATTLIST tar
+ id ID #IMPLIED
+ tarfile CDATA #IMPLIED
+ destfile CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ basedir CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ compression (none | gzip | bzip2) #IMPLIED
+ longfile (warn | fail | truncate | gnu | omit) #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT tarfileset (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST tarfileset
+ id ID #IMPLIED
+ excludes CDATA #IMPLIED
+ preserveleadingslashes %boolean; #IMPLIED
+ username CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ uid CDATA #IMPLIED
+ fullpath CDATA #IMPLIED
+ group CDATA #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ refid IDREF #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ mode CDATA #IMPLIED
+ gid CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ includes CDATA #IMPLIED
+ description CDATA #IMPLIED
+ prefix CDATA #IMPLIED
+ dirmode CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ file CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED>
+
+<!ELEMENT vajimport (fileset)*>
+<!ATTLIST vajimport
+ id ID #IMPLIED
+ haltonerror %boolean; #IMPLIED
+ remote CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ importsources %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ project CDATA #IMPLIED
+ description CDATA #IMPLIED
+ importresources %boolean; #IMPLIED
+ importclasses %boolean; #IMPLIED>
+
+<!ELEMENT p4fstat (fileset)*>
+<!ATTLIST p4fstat
+ id ID #IMPLIED
+ port CDATA #IMPLIED
+ client CDATA #IMPLIED
+ inerror %boolean; #IMPLIED
+ user CDATA #IMPLIED
+ changelist CDATA #IMPLIED
+ cmdopts CDATA #IMPLIED
+ globalopts CDATA #IMPLIED
+ view CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ errormessage CDATA #IMPLIED
+ showfilter CDATA #IMPLIED>
+
+<!ELEMENT setproxy EMPTY>
+<!ATTLIST setproxy
+ id ID #IMPLIED
+ nonproxyhosts CDATA #IMPLIED
+ proxyhost CDATA #IMPLIED
+ socksproxyhost CDATA #IMPLIED
+ proxyport CDATA #IMPLIED
+ socksproxyport CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ proxyuser CDATA #IMPLIED
+ description CDATA #IMPLIED
+ proxypassword CDATA #IMPLIED>
+
+<!ELEMENT wlstop (classpath)*>
+<!ATTLIST wlstop
+ id ID #IMPLIED
+ user CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ delay CDATA #IMPLIED
+ password CDATA #IMPLIED
+ url CDATA #IMPLIED
+ description CDATA #IMPLIED
+ beahome CDATA #IMPLIED>
+
+<!ELEMENT p4counter EMPTY>
+<!ATTLIST p4counter
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ port CDATA #IMPLIED
+ client CDATA #IMPLIED
+ inerror %boolean; #IMPLIED
+ user CDATA #IMPLIED
+ cmdopts CDATA #IMPLIED
+ globalopts CDATA #IMPLIED
+ view CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ value CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ property CDATA #IMPLIED
+ errormessage CDATA #IMPLIED>
+
+<!ELEMENT ilasm (patternset | exclude | include | custom | present | none | not | type | modified | reference | src | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | depth | and)*>
+<!ATTLIST ilasm
+ id ID #IMPLIED
+ owner CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ extraoptions CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ targettype (exe | library) #IMPLIED
+ destfile CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ verbose %boolean; #IMPLIED
+ debug %boolean; #IMPLIED
+ includes CDATA #IMPLIED
+ outputfile CDATA #IMPLIED
+ description CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ resourcefile CDATA #IMPLIED
+ srcdir CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ listing %boolean; #IMPLIED
+ keyfile CDATA #IMPLIED>
+
+<!ELEMENT soscheckout EMPTY>
+<!ATTLIST soscheckout
+ id ID #IMPLIED
+ soshome CDATA #IMPLIED
+ file CDATA #IMPLIED
+ recursive %boolean; #IMPLIED
+ verbose %boolean; #IMPLIED
+ vssserverpath CDATA #IMPLIED
+ username CDATA #IMPLIED
+ sosserverpath CDATA #IMPLIED
+ projectpath CDATA #IMPLIED
+ nocache %boolean; #IMPLIED
+ nocompress %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ localpath CDATA #IMPLIED
+ soscmd CDATA #IMPLIED
+ password CDATA #IMPLIED>
+
+<!ELEMENT apply (mapper | srcfile | targetfile | redirector | filelist | env | fileset | dirset | arg)*>
+<!ATTLIST apply
+ id ID #IMPLIED
+ resultproperty CDATA #IMPLIED
+ skipemptyfilesets %boolean; #IMPLIED
+ command CDATA #IMPLIED
+ failifexecutionfails %boolean; #IMPLIED
+ type (file | dir | both) #IMPLIED
+ maxparallel CDATA #IMPLIED
+ executable CDATA #IMPLIED
+ os CDATA #IMPLIED
+ errorproperty CDATA #IMPLIED
+ output CDATA #IMPLIED
+ timeout CDATA #IMPLIED
+ dest CDATA #IMPLIED
+ spawn %boolean; #IMPLIED
+ input CDATA #IMPLIED
+ inputstring CDATA #IMPLIED
+ addsourcefile %boolean; #IMPLIED
+ verbose %boolean; #IMPLIED
+ logerror %boolean; #IMPLIED
+ dir CDATA #IMPLIED
+ forwardslash %boolean; #IMPLIED
+ error CDATA #IMPLIED
+ description CDATA #IMPLIED
+ outputproperty CDATA #IMPLIED
+ resolveexecutable %boolean; #IMPLIED
+ append %boolean; #IMPLIED
+ failonerror %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ ignoremissing %boolean; #IMPLIED
+ vmlauncher %boolean; #IMPLIED
+ newenvironment %boolean; #IMPLIED
+ relative %boolean; #IMPLIED
+ parallel %boolean; #IMPLIED>
+
+<!ELEMENT jarlib-resolve (ant | location | url | extension)*>
+<!ATTLIST jarlib-resolve
+ id ID #IMPLIED
+ checkextension %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ property CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED>
+
+<!ELEMENT location EMPTY>
+<!ATTLIST location
+ id ID #IMPLIED
+ location CDATA #IMPLIED>
+
+<!ELEMENT url EMPTY>
+<!ATTLIST url
+ id ID #IMPLIED
+ destdir CDATA #IMPLIED
+ url CDATA #IMPLIED
+ destfile CDATA #IMPLIED>
+
+<!ELEMENT ccuncheckout EMPTY>
+<!ATTLIST ccuncheckout
+ id ID #IMPLIED
+ objselect CDATA #IMPLIED
+ keepcopy %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ cleartooldir CDATA #IMPLIED
+ viewpath CDATA #IMPLIED
+ failonerr %boolean; #IMPLIED>
+
+<!ELEMENT cvstagdiff (commandline)*>
+<!ATTLIST cvstagdiff
+ id ID #IMPLIED
+ cvsrsh CDATA #IMPLIED
+ endtag CDATA #IMPLIED
+ quiet %boolean; #IMPLIED
+ passfile CDATA #IMPLIED
+ command CDATA #IMPLIED
+ package CDATA #IMPLIED
+ cvsroot CDATA #IMPLIED
+ reallyquiet %boolean; #IMPLIED
+ output CDATA #IMPLIED
+ starttag CDATA #IMPLIED
+ port CDATA #IMPLIED
+ dest CDATA #IMPLIED
+ compressionlevel CDATA #IMPLIED
+ destfile CDATA #IMPLIED
+ enddate CDATA #IMPLIED
+ noexec %boolean; #IMPLIED
+ error CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ append %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ date CDATA #IMPLIED
+ startdate CDATA #IMPLIED
+ compression %boolean; #IMPLIED
+ tag CDATA #IMPLIED>
+
+<!ELEMENT jlink (patternset | exclude | include | custom | present | none | not | type | modified | or | contains | depend | mergefiles | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | addfiles | depth | and)*>
+<!ATTLIST jlink
+ id ID #IMPLIED
+ outfile CDATA #IMPLIED
+ compress %boolean; #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ addfiles CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ mergefiles CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+
+<!ELEMENT mergefiles (fileset | dirset | extdirs | filelist | existing | pathelement | path)*>
+<!ATTLIST mergefiles
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT addfiles (fileset | dirset | extdirs | filelist | existing | pathelement | path)*>
+<!ATTLIST addfiles
+ id ID #IMPLIED
+ location CDATA #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED
+ path CDATA #IMPLIED>
+
+<!ELEMENT javacc EMPTY>
+<!ATTLIST javacc
+ id ID #IMPLIED
+ debugparser %boolean; #IMPLIED
+ javacchome CDATA #IMPLIED
+ forcelacheck %boolean; #IMPLIED
+ optimizetokenmanager %boolean; #IMPLIED
+ commontokenaction %boolean; #IMPLIED
+ buildtokenmanager %boolean; #IMPLIED
+ sanitycheck %boolean; #IMPLIED
+ buildparser %boolean; #IMPLIED
+ otherambiguitycheck CDATA #IMPLIED
+ lookahead CDATA #IMPLIED
+ debuglookahead %boolean; #IMPLIED
+ choiceambiguitycheck CDATA #IMPLIED
+ unicodeinput %boolean; #IMPLIED
+ usercharstream %boolean; #IMPLIED
+ debugtokenmanager %boolean; #IMPLIED
+ keeplinecolumn %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ outputdirectory CDATA #IMPLIED
+ cachetokens %boolean; #IMPLIED
+ javaunicodeescape %boolean; #IMPLIED
+ static %boolean; #IMPLIED
+ target CDATA #IMPLIED
+ ignorecase %boolean; #IMPLIED
+ usertokenmanager %boolean; #IMPLIED
+ errorreporting %boolean; #IMPLIED>
+
+<!ELEMENT jarlib-manifest (options | attribute | depends | extension)*>
+<!ATTLIST jarlib-manifest
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ destfile CDATA #IMPLIED>
+
+<!ELEMENT options (fileset | libfileset | extension)*>
+<!ATTLIST options
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT depends (fileset | libfileset | extension)*>
+<!ATTLIST depends
+ id ID #IMPLIED
+ refid IDREF #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT pvcs (pvcsproject)*>
+<!ATTLIST pvcs
+ id ID #IMPLIED
+ updateonly %boolean; #IMPLIED
+ force CDATA #IMPLIED
+ config CDATA #IMPLIED
+ workspace CDATA #IMPLIED
+ pvcsbin CDATA #IMPLIED
+ pvcsproject CDATA #IMPLIED
+ filenameformat CDATA #IMPLIED
+ userid CDATA #IMPLIED
+ repository CDATA #IMPLIED
+ ignorereturncode %boolean; #IMPLIED
+ revision CDATA #IMPLIED
+ linestart CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ label CDATA #IMPLIED
+ promotiongroup CDATA #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT pvcsproject EMPTY>
+<!ATTLIST pvcsproject
+ id ID #IMPLIED
+ name CDATA #IMPLIED>
+
+<!ELEMENT chmod (mapper | include | srcfile | exclude | targetfile | patternset | redirector | env | filelist | fileset | dirset | arg)*>
+<!ATTLIST chmod
+ id ID #IMPLIED
+ addsourcefile %boolean; #IMPLIED
+ excludes CDATA #IMPLIED
+ verbose %boolean; #IMPLIED
+ parallel %boolean; #IMPLIED
+ input CDATA #IMPLIED
+ executable CDATA #IMPLIED
+ inputstring CDATA #IMPLIED
+ relative %boolean; #IMPLIED
+ skipemptyfilesets %boolean; #IMPLIED
+ command CDATA #IMPLIED
+ forwardslash %boolean; #IMPLIED
+ spawn %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ includes CDATA #IMPLIED
+ vmlauncher %boolean; #IMPLIED
+ file CDATA #IMPLIED
+ logerror %boolean; #IMPLIED
+ errorproperty CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ output CDATA #IMPLIED
+ error CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ os CDATA #IMPLIED
+ dest CDATA #IMPLIED
+ resolveexecutable %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ resultproperty CDATA #IMPLIED
+ ignoremissing %boolean; #IMPLIED
+ failifexecutionfails %boolean; #IMPLIED
+ append %boolean; #IMPLIED
+ timeout CDATA #IMPLIED
+ maxparallel CDATA #IMPLIED
+ outputproperty CDATA #IMPLIED
+ perm CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ newenvironment %boolean; #IMPLIED
+ type (file | dir | both) #IMPLIED>
+
+<!ELEMENT ccmklbtype EMPTY>
+<!ATTLIST ccmklbtype
+ id ID #IMPLIED
+ global %boolean; #IMPLIED
+ replace %boolean; #IMPLIED
+ shared %boolean; #IMPLIED
+ viewpath CDATA #IMPLIED
+ typename CDATA #IMPLIED
+ comment CDATA #IMPLIED
+ pbranch %boolean; #IMPLIED
+ failonerr %boolean; #IMPLIED
+ objselect CDATA #IMPLIED
+ cleartooldir CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ vob CDATA #IMPLIED
+ description CDATA #IMPLIED
+ commentfile CDATA #IMPLIED
+ ordinary %boolean; #IMPLIED>
+
+<!ELEMENT jar (patternset | exclude | include | custom | present | none | not | manifest | type | metainf | modified | or | contains | depend | fileset | different | size | majority | containsregexp | indexjars | filename | selector | includesfile | zipgroupfileset | zipfileset | date | excludesfile | depth | and)*>
+<!ATTLIST jar
+ id ID #IMPLIED
+ whenempty (fail | skip | create) #IMPLIED
+ keepcompression %boolean; #IMPLIED
+ duplicate (add | preserve | fail) #IMPLIED
+ roundup %boolean; #IMPLIED
+ excludes CDATA #IMPLIED
+ basedir CDATA #IMPLIED
+ encoding CDATA #IMPLIED
+ manifest CDATA #IMPLIED
+ jarfile CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ index %boolean; #IMPLIED
+ update %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ destfile CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ includes CDATA #IMPLIED
+ description CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ compress %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ manifestencoding CDATA #IMPLIED
+ filesonly %boolean; #IMPLIED
+ file CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ filesetmanifest (skip | merge | mergewithoutmain) #IMPLIED
+ zipfile CDATA #IMPLIED>
+
+<!ELEMENT sound (fail | success)*>
+<!ATTLIST sound
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT fail EMPTY>
+<!ATTLIST fail
+ id ID #IMPLIED
+ loops CDATA #IMPLIED
+ source CDATA #IMPLIED
+ duration CDATA #IMPLIED>
+
+<!ELEMENT success EMPTY>
+<!ATTLIST success
+ id ID #IMPLIED
+ loops CDATA #IMPLIED
+ source CDATA #IMPLIED
+ duration CDATA #IMPLIED>
+
+<!ELEMENT scriptdef (#PCDATA | classpath | element | attribute)*>
+<!ATTLIST scriptdef
+ id ID #IMPLIED
+ src CDATA #IMPLIED
+ name CDATA #IMPLIED
+ uri CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ language CDATA #IMPLIED
+ classpathref IDREF #IMPLIED
+ loaderref IDREF #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ reverseloader %boolean; #IMPLIED>
+
+<!ELEMENT defaultexcludes EMPTY>
+<!ATTLIST defaultexcludes
+ id ID #IMPLIED
+ remove CDATA #IMPLIED
+ echo %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ default %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ add CDATA #IMPLIED>
+
+<!ELEMENT mparse (fileset | jvmarg | classpath | sourcepath)*>
+<!ATTLIST mparse
+ id ID #IMPLIED
+ cleanup %boolean; #IMPLIED
+ verbose %boolean; #IMPLIED
+ maxmemory CDATA #IMPLIED
+ metamatahome CDATA #IMPLIED
+ target CDATA #IMPLIED
+ debugparser %boolean; #IMPLIED
+ home CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ debugscanner %boolean; #IMPLIED>
+
+<!ELEMENT blgenclient (classpath)*>
+<!ATTLIST blgenclient
+ id ID #IMPLIED
+ debug %boolean; #IMPLIED
+ classpath CDATA #IMPLIED
+ mode CDATA #IMPLIED
+ ejbjar CDATA #IMPLIED
+ version CDATA #IMPLIED
+ classpathref IDREF #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ clientjar CDATA #IMPLIED>
+
+<!ELEMENT jjdoc EMPTY>
+<!ATTLIST jjdoc
+ id ID #IMPLIED
+ outputfile CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ javacchome CDATA #IMPLIED
+ target CDATA #IMPLIED
+ text %boolean; #IMPLIED
+ onetable %boolean; #IMPLIED>
+
+<!ELEMENT genkey (dname)*>
+<!ATTLIST genkey
+ id ID #IMPLIED
+ storepass CDATA #IMPLIED
+ sigalg CDATA #IMPLIED
+ verbose %boolean; #IMPLIED
+ keypass CDATA #IMPLIED
+ dname CDATA #IMPLIED
+ keysize CDATA #IMPLIED
+ alias CDATA #IMPLIED
+ keyalg CDATA #IMPLIED
+ validity CDATA #IMPLIED
+ keystore CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ storetype CDATA #IMPLIED>
+
+<!ELEMENT dname (param)*>
+<!ATTLIST dname
+ id ID #IMPLIED>
+
+<!ELEMENT ccmkelem EMPTY>
+<!ATTLIST ccmkelem
+ id ID #IMPLIED
+ preservetime %boolean; #IMPLIED
+ master %boolean; #IMPLIED
+ eltype CDATA #IMPLIED
+ viewpath CDATA #IMPLIED
+ comment CDATA #IMPLIED
+ nowarn %boolean; #IMPLIED
+ failonerr %boolean; #IMPLIED
+ objselect CDATA #IMPLIED
+ cleartooldir CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ nocheckout %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ commentfile CDATA #IMPLIED
+ checkin %boolean; #IMPLIED>
+
+<!ELEMENT javah (classpath | class | bootclasspath)*>
+<!ATTLIST javah
+ id ID #IMPLIED
+ stubs %boolean; #IMPLIED
+ force %boolean; #IMPLIED
+ destdir CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ old %boolean; #IMPLIED
+ outputfile CDATA #IMPLIED
+ class CDATA #IMPLIED
+ verbose %boolean; #IMPLIED
+ bootclasspath CDATA #IMPLIED
+ bootclasspathref IDREF #IMPLIED
+ classpathref IDREF #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT class EMPTY>
+<!ATTLIST class
+ id ID #IMPLIED
+ name CDATA #IMPLIED>
+
+<!ELEMENT ccmreconfigure EMPTY>
+<!ATTLIST ccmreconfigure
+ id ID #IMPLIED
+ ccmaction CDATA #IMPLIED
+ verbose %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ ccmproject CDATA #IMPLIED
+ description CDATA #IMPLIED
+ recurse %boolean; #IMPLIED
+ ccmdir CDATA #IMPLIED>
+
+<!ELEMENT unzip (fileset | patternset)*>
+<!ATTLIST unzip
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ dest CDATA #IMPLIED
+ overwrite %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ encoding CDATA #IMPLIED
+ src CDATA #IMPLIED>
+
+<!ELEMENT javac (patternset | exclude | include | custom | present | none | extdirs | not | type | modified | src | or | contains | depend | classpath | sourcepath | different | size | majority | containsregexp | bootclasspath | filename | selector | includesfile | compilerarg | date | excludesfile | depth | and)*>
+<!ATTLIST javac
+ id ID #IMPLIED
+ target CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ verbose %boolean; #IMPLIED
+ bootclasspathref IDREF #IMPLIED
+ compiler CDATA #IMPLIED
+ executable CDATA #IMPLIED
+ debuglevel CDATA #IMPLIED
+ memoryinitialsize CDATA #IMPLIED
+ deprecation %boolean; #IMPLIED
+ includeantruntime %boolean; #IMPLIED
+ description CDATA #IMPLIED
+ sourcepathref IDREF #IMPLIED
+ depend %boolean; #IMPLIED
+ includes CDATA #IMPLIED
+ source CDATA #IMPLIED
+ includejavaruntime %boolean; #IMPLIED
+ failonerror %boolean; #IMPLIED
+ destdir CDATA #IMPLIED
+ debug %boolean; #IMPLIED
+ tempdir CDATA #IMPLIED
+ classpath CDATA #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ bootclasspath CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ nowarn %boolean; #IMPLIED
+ proceed %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ classpathref IDREF #IMPLIED
+ fork %boolean; #IMPLIED
+ srcdir CDATA #IMPLIED
+ memorymaximumsize CDATA #IMPLIED
+ optimize %boolean; #IMPLIED
+ encoding CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ sourcepath CDATA #IMPLIED
+ listfiles %boolean; #IMPLIED
+ extdirs CDATA #IMPLIED>
+
+<!ELEMENT p4add (fileset)*>
+<!ATTLIST p4add
+ id ID #IMPLIED
+ port CDATA #IMPLIED
+ client CDATA #IMPLIED
+ inerror %boolean; #IMPLIED
+ user CDATA #IMPLIED
+ changelist CDATA #IMPLIED
+ cmdopts CDATA #IMPLIED
+ globalopts CDATA #IMPLIED
+ view CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ errormessage CDATA #IMPLIED
+ commandlength CDATA #IMPLIED>
+
+<!ELEMENT soslabel EMPTY>
+<!ATTLIST soslabel
+ id ID #IMPLIED
+ soshome CDATA #IMPLIED
+ verbose %boolean; #IMPLIED
+ vssserverpath CDATA #IMPLIED
+ username CDATA #IMPLIED
+ sosserverpath CDATA #IMPLIED
+ comment CDATA #IMPLIED
+ projectpath CDATA #IMPLIED
+ version CDATA #IMPLIED
+ nocache %boolean; #IMPLIED
+ nocompress %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ label CDATA #IMPLIED
+ description CDATA #IMPLIED
+ localpath CDATA #IMPLIED
+ soscmd CDATA #IMPLIED
+ password CDATA #IMPLIED>
+
+<!ELEMENT jpcoverage (arg | socket | fileset | jvmarg | classpath | triggers | filters)*>
+<!ATTLIST jpcoverage
+ id ID #IMPLIED
+ applet %boolean; #IMPLIED
+ recordfromstart (coverage | none | all) #IMPLIED
+ vm (java2 | jdk118 | jdk117) #IMPLIED
+ classname CDATA #IMPLIED
+ workingdir CDATA #IMPLIED
+ inputfile CDATA #IMPLIED
+ snapshotdir CDATA #IMPLIED
+ seedname CDATA #IMPLIED
+ javaexe CDATA #IMPLIED
+ home CDATA #IMPLIED
+ exitprompt CDATA #IMPLIED
+ taskname CDATA #IMPLIED
+ warnlevel CDATA #IMPLIED
+ finalsnapshot CDATA #IMPLIED
+ description CDATA #IMPLIED
+ tracknatives %boolean; #IMPLIED>
+
+<!ELEMENT triggers (method)*>
+<!ATTLIST triggers
+ id ID #IMPLIED>
+
+<!ELEMENT method EMPTY>
+<!ATTLIST method
+ id ID #IMPLIED
+ name CDATA #IMPLIED
+ event CDATA #IMPLIED
+ action CDATA #IMPLIED
+ param CDATA #IMPLIED>
+
+<!ELEMENT filters (include | exclude)*>
+<!ATTLIST filters
+ id ID #IMPLIED
+ defaultexclude %boolean; #IMPLIED>
+
+<!ELEMENT vssget EMPTY>
+<!ATTLIST vssget
+ id ID #IMPLIED
+ ssdir CDATA #IMPLIED
+ date CDATA #IMPLIED
+ recursive %boolean; #IMPLIED
+ autoresponse CDATA #IMPLIED
+ quiet %boolean; #IMPLIED
+ vsspath CDATA #IMPLIED
+ version CDATA #IMPLIED
+ serverpath CDATA #IMPLIED
+ login CDATA #IMPLIED
+ writable %boolean; #IMPLIED
+ filetimestamp (current | modified | updated) #IMPLIED
+ taskname CDATA #IMPLIED
+ label CDATA #IMPLIED
+ description CDATA #IMPLIED
+ failonerror %boolean; #IMPLIED
+ localpath CDATA #IMPLIED
+ writablefiles (replace | skip | fail) #IMPLIED>
+
+<!ELEMENT deltree EMPTY>
+<!ATTLIST deltree
+ id ID #IMPLIED
+ taskname CDATA #IMPLIED
+ dir CDATA #IMPLIED
+ description CDATA #IMPLIED>
+
+<!ELEMENT ddcreator (patternset | exclude | include | custom | none | present | not | type | modified | or | contains | depend | different | size | majority | containsregexp | filename | selector | includesfile | date | excludesfile | and | depth)*>
+<!ATTLIST ddcreator
+ id ID #IMPLIED
+ classpath CDATA #IMPLIED
+ defaultexcludes %boolean; #IMPLIED
+ followsymlinks %boolean; #IMPLIED
+ taskname CDATA #IMPLIED
+ casesensitive %boolean; #IMPLIED
+ dest CDATA #IMPLIED
+ description CDATA #IMPLIED
+ excludes CDATA #IMPLIED
+ includesfile CDATA #IMPLIED
+ excludesfile CDATA #IMPLIED
+ descriptors CDATA #IMPLIED
+ includes CDATA #IMPLIED>
+