/**
  * Handles the start of a project element. A project handler is created and initialised with the
  * element name and attributes.
  *
  * @param uri The namespace uri for this element.
  * @param tag The name of the element being started. Will not be <code>null</code>.
  * @param qname The qualified name for this element.
  * @param attrs Attributes of the element being started. Will not be <code>null</code>.
  * @exception org.xml.sax.SAXParseException if the tag given is not <code>"project"</code>
  */
 public void startElement(String uri, String tag, String qname, Attributes attrs)
     throws SAXParseException {
   AntHandler next = currentHandler.onStartChild(uri, tag, qname, attrs, context);
   antHandlers.push(currentHandler);
   currentHandler = next;
   currentHandler.onStartElement(uri, tag, qname, attrs, context);
 }
 /**
  * Handles the end of an element. Any required clean-up is performed by the onEndElement()
  * method and then the original handler is restored to the parser.
  *
  * @param uri The namespace URI for this element.
  * @param name The name of the element which is ending. Will not be <code>null</code>.
  * @param qName The qualified name for this element.
  * @exception SAXException in case of error (not thrown in this implementation)
  */
 public void endElement(String uri, String name, String qName) throws SAXException {
   currentHandler.onEndElement(uri, name, context);
   AntHandler prev = (AntHandler) antHandlers.pop();
   currentHandler = prev;
   if (currentHandler != null) {
     currentHandler.onEndChild(uri, name, qName, context);
   }
 }
 /**
  * Handle text within an element, calls currentHandler.characters.
  *
  * @param buf A character array of the test.
  * @param start The start offset in the array.
  * @param count The number of characters to read.
  * @exception SAXParseException if an error occurs
  */
 public void characters(char[] buf, int start, int count) throws SAXParseException {
   currentHandler.characters(buf, start, count, context);
 }