diff options
| author | Paul Buetow <paul@buetow.org> | 2009-03-04 17:31:40 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2009-03-04 17:31:40 +0000 |
| commit | 9129838d208c0df7293e5b757661125545cd6df8 (patch) | |
| tree | cde0b095a7ad120b68450f705d8fc16d278bfff8 /libs/FLib/TableLayout | |
| parent | e2c501ba5aaffd9d5ace6bc1706353d9f83329b7 (diff) | |
flib added
Diffstat (limited to 'libs/FLib/TableLayout')
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="<small>Copyright © 2000-2005 Credence Systems Corporation<br>Licensed under the <a href='{@docRoot}/License.html' target='_top'>Artistic License</a></small>"> + <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&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 "Start Here!" 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&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 Binary files differnew file mode 100644 index 0000000..db18dce --- /dev/null +++ b/libs/FLib/TableLayout/doc/images/Logo.png diff --git a/libs/FLib/TableLayout/doc/images/screenshot1.png b/libs/FLib/TableLayout/doc/images/screenshot1.png Binary files differnew file mode 100644 index 0000000..ac7a594 --- /dev/null +++ b/libs/FLib/TableLayout/doc/images/screenshot1.png diff --git a/libs/FLib/TableLayout/doc/images/screenshot2.png b/libs/FLib/TableLayout/doc/images/screenshot2.png Binary files differnew file mode 100644 index 0000000..c669bce --- /dev/null +++ b/libs/FLib/TableLayout/doc/images/screenshot2.png diff --git a/libs/FLib/TableLayout/doc/images/tutorial1.png b/libs/FLib/TableLayout/doc/images/tutorial1.png Binary files differnew file mode 100644 index 0000000..c441e32 --- /dev/null +++ b/libs/FLib/TableLayout/doc/images/tutorial1.png diff --git a/libs/FLib/TableLayout/doc/images/tutorial2.png b/libs/FLib/TableLayout/doc/images/tutorial2.png Binary files differnew file mode 100644 index 0000000..a197850 --- /dev/null +++ b/libs/FLib/TableLayout/doc/images/tutorial2.png diff --git a/libs/FLib/TableLayout/doc/images/tutorial3.png b/libs/FLib/TableLayout/doc/images/tutorial3.png Binary files differnew file mode 100644 index 0000000..4e2c0f4 --- /dev/null +++ b/libs/FLib/TableLayout/doc/images/tutorial3.png diff --git a/libs/FLib/TableLayout/doc/images/tutorial4.png b/libs/FLib/TableLayout/doc/images/tutorial4.png Binary files differnew file mode 100644 index 0000000..b01cfbd --- /dev/null +++ b/libs/FLib/TableLayout/doc/images/tutorial4.png diff --git a/libs/FLib/TableLayout/doc/images/tutorial5.png b/libs/FLib/TableLayout/doc/images/tutorial5.png Binary files differnew file mode 100644 index 0000000..3871325 --- /dev/null +++ b/libs/FLib/TableLayout/doc/images/tutorial5.png diff --git a/libs/FLib/TableLayout/doc/images/tutorial6.png b/libs/FLib/TableLayout/doc/images/tutorial6.png Binary files differnew file mode 100644 index 0000000..533c57c --- /dev/null +++ b/libs/FLib/TableLayout/doc/images/tutorial6.png diff --git a/libs/FLib/TableLayout/doc/images/tutorial7.png b/libs/FLib/TableLayout/doc/images/tutorial7.png Binary files differnew file mode 100644 index 0000000..8744c42 --- /dev/null +++ b/libs/FLib/TableLayout/doc/images/tutorial7.png diff --git a/libs/FLib/TableLayout/doc/images/tutorial8.png b/libs/FLib/TableLayout/doc/images/tutorial8.png Binary files differnew file mode 100644 index 0000000..bf92254 --- /dev/null +++ b/libs/FLib/TableLayout/doc/images/tutorial8.png 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&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 & 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&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&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&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("cols=3"));
+panel.add(new JButton("0"));
+panel.add(new JButton("1"));
+panel.add(new JButton("2"));
+panel.add(new JButton("3"));
+panel.add(new JButton("4"));
+</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 "0" 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 "slot" is left empty.</p>
+ <h3>Attributes</h3>
+ <p>The above example is very simple because only one attribute was given
+ to the TableLayout ("cols=5"). 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: "cols=6 rgap=2 cgap=5 w".</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 "col"
+ and "skip".
+ With "col", 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> "skip" 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("cols=3"));
+panel.add(new JButton("0"));
+panel.add(new JButton("1"),"skip=1");
+panel.add(new JButton("2"), "col=1");
+panel.add(new JButton("3"), "rspan=2");
+panel.add(new JButton("4"), "cspan=2");</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 "extra" table inset can be given: titop, tibottom, tileft and tiright
+(in
+the "ti" prefix, the "t" stands for "table" and
+the "i" stands
+for "inset").
+<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(
+ "cols=3 rgap=3 cgap=3 " +
+ "titop=5 tibottom=5 tileft=5 tiright=5 " +
+ "itop=2 ibottom=2 ileft=2 iright=2"));
+panel.add(new JButton("0"));
+panel.add(new JButton("1"), "skip=1");
+panel.add(new JButton("2"), "itop=0 ibottom=0 ileft=0 iright=0 col=1");
+panel.add(new JButton("3"), "rspan=2");
+panel.add(new JButton("4"), "cspan=2");</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("cols=3"));
+panel.add(new JButton("1"), "nw");
+panel.add(new JButton("2"), "n");
+panel.add(new JButton("3"), "ne");
+panel.add(new JButton("4"), "w");
+panel.add(new JButton("5"), "c");
+panel.add(new JButton("6"), "e");
+panel.add(new JButton("7"), "sw");
+panel.add(new JButton("8"), "s");
+panel.add(new JButton("9"), "se");</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 "t". 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 "t" prefix is for "table").</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. "tf" 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("cols=3 tnw"));
+</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("cols=3"));
+panel.add(new JButton("1"), "c fh");
+panel.add(new JButton("2"), "f");
+panel.add(new JButton("3"), "c fh");</pre>
+<p align="center"><img src="images/tutorial6.png" width="261" height="67" /></p>
+<p>Since the default is "f", we turn off filling by using "c". Then we can fill
+ horizontally, vertically or in both directions. </p>
+<p>The "f" 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("cols=3 nw"));</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, "n fh" 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 "weight" 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 ("rweight" for row weight and "cweight" for
+ column weight). Here's an example. To keep it simple, we'll stretch components
+ "1" and "3" horizontally, while the rest of the components are fixed.</p>
+<pre>JPanel panel = new JPanel(new TableLayout("cols=5"));
+panel.add(new JButton("0"));
+panel.add(new JButton("1"), "cweight=1");
+panel.add(new JButton("2"));
+panel.add(new JButton("3"), "cweight=1");
+panel.add(new JButton("4"));</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>
+
|
