
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __gnu_xml_stream_SAXParser__
#define __gnu_xml_stream_SAXParser__

#pragma interface

#include <javax/xml/parsers/SAXParser.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace stream
      {
          class SAXParser;
          class XMLParser;
      }
    }
  }
  namespace javax
  {
    namespace xml
    {
      namespace stream
      {
          class Location;
          class XMLEventReader;
          class XMLStreamReader;
      }
    }
  }
  namespace org
  {
    namespace xml
    {
      namespace sax
      {
          class ContentHandler;
          class DTDHandler;
          class EntityResolver;
          class ErrorHandler;
          class InputSource;
          class Parser;
          class XMLReader;
        namespace ext
        {
            class DeclHandler;
            class LexicalHandler;
        }
      }
    }
  }
}

class gnu::xml::stream::SAXParser : public ::javax::xml::parsers::SAXParser
{

public:
  SAXParser();
public: // actually package-private
  SAXParser(jboolean, jboolean, jboolean);
public:
  virtual ::org::xml::sax::Parser * getParser();
  virtual ::org::xml::sax::XMLReader * getXMLReader();
  virtual jboolean isNamespaceAware();
  virtual jboolean isValidating();
  virtual void setProperty(::java::lang::String *, ::java::lang::Object *);
  virtual ::java::lang::Object * getProperty(::java::lang::String *);
  virtual jboolean isXIncludeAware();
  virtual void reset();
  virtual jboolean getFeature(::java::lang::String *);
  virtual void setFeature(::java::lang::String *, jboolean);
  virtual void setEntityResolver(::org::xml::sax::EntityResolver *);
  virtual ::org::xml::sax::EntityResolver * getEntityResolver();
  virtual void setDTDHandler(::org::xml::sax::DTDHandler *);
  virtual ::org::xml::sax::DTDHandler * getDTDHandler();
  virtual void setContentHandler(::org::xml::sax::ContentHandler *);
  virtual ::org::xml::sax::ContentHandler * getContentHandler();
  virtual void setErrorHandler(::org::xml::sax::ErrorHandler *);
  virtual ::org::xml::sax::ErrorHandler * getErrorHandler();
  virtual void parse(::org::xml::sax::InputSource *);
private:
  jboolean isIgnorableWhitespace(::gnu::xml::stream::XMLParser *, JArray< jchar > *, jboolean);
public:
  virtual void parse(::java::lang::String *);
  virtual jint getIndex(::java::lang::String *);
  virtual jint getIndex(::java::lang::String *, ::java::lang::String *);
  virtual jint getLength();
  virtual ::java::lang::String * getLocalName(jint);
  virtual ::java::lang::String * getQName(jint);
  virtual ::java::lang::String * getType(jint);
  virtual ::java::lang::String * getType(::java::lang::String *);
  virtual ::java::lang::String * getType(::java::lang::String *, ::java::lang::String *);
  virtual ::java::lang::String * getURI(jint);
  virtual ::java::lang::String * getValue(jint);
  virtual ::java::lang::String * getValue(::java::lang::String *);
  virtual ::java::lang::String * getValue(::java::lang::String *, ::java::lang::String *);
  virtual jboolean isDeclared(jint);
  virtual jboolean isDeclared(::java::lang::String *);
  virtual jboolean isDeclared(::java::lang::String *, ::java::lang::String *);
  virtual jboolean isSpecified(jint);
  virtual jboolean isSpecified(::java::lang::String *);
  virtual jboolean isSpecified(::java::lang::String *, ::java::lang::String *);
  virtual jint getColumnNumber();
  virtual jint getLineNumber();
  virtual ::java::lang::String * getPublicId();
  virtual ::java::lang::String * getSystemId();
  virtual ::java::lang::String * getEncoding();
  virtual ::java::lang::String * getXMLVersion();
  virtual ::java::lang::Object * resolveEntity(::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *);
  virtual ::javax::xml::stream::XMLEventReader * resolveAsXMLEventReader(::java::lang::String *);
  virtual ::javax::xml::stream::XMLStreamReader * resolveAsXMLStreamReader(::java::lang::String *);
  virtual void report(::java::lang::String *, ::java::lang::String *, ::java::lang::Object *, ::javax::xml::stream::Location *);
  static void main(JArray< ::java::lang::String * > *);
public: // actually package-private
  ::org::xml::sax::ContentHandler * __attribute__((aligned(__alignof__( ::javax::xml::parsers::SAXParser)))) contentHandler;
  ::org::xml::sax::ext::DeclHandler * declHandler;
  ::org::xml::sax::DTDHandler * dtdHandler;
  ::org::xml::sax::EntityResolver * entityResolver;
  ::org::xml::sax::ErrorHandler * errorHandler;
  ::org::xml::sax::ext::LexicalHandler * lexicalHandler;
  jboolean validating;
  jboolean namespaceAware;
  jboolean xIncludeAware;
  jboolean stringInterning;
  jboolean coalescing;
  jboolean replaceERefs;
  jboolean externalEntities;
  jboolean supportDTD;
  jboolean baseAware;
  ::gnu::xml::stream::XMLParser * parser;
  ::javax::xml::stream::XMLStreamReader * reader;
  ::java::lang::String * encoding;
  ::java::lang::String * xmlVersion;
  jboolean xmlStandalone;
  ::java::lang::String * xmlEncoding;
  ::java::lang::String * baseURI;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_stream_SAXParser__
