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

#ifndef __gnu_xml_util_XCat$Loader__
#define __gnu_xml_util_XCat$Loader__

#pragma interface

#include <org/xml/sax/ext/DefaultHandler2.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace util
      {
          class XCat$Catalog;
          class XCat$Loader;
      }
    }
  }
  namespace org
  {
    namespace xml
    {
      namespace sax
      {
          class Attributes;
          class ErrorHandler;
          class Locator;
      }
    }
  }
}

class gnu::xml::util::XCat$Loader : public ::org::xml::sax::ext::DefaultHandler2
{

public: // actually package-private
  XCat$Loader(jboolean, ::org::xml::sax::ErrorHandler *, jboolean);
private:
  ::java::lang::String * nofrag(::java::lang::String *);
  ::java::lang::String * absolutize(::java::lang::String *);
  void error(::java::lang::String *);
  void fatal(::java::lang::String *);
  void warn(::java::lang::String *);
public:
  virtual void setDocumentLocator(::org::xml::sax::Locator *);
  virtual void startDocument();
  virtual void endDocument();
  virtual void externalEntityDecl(::java::lang::String *, ::java::lang::String *, ::java::lang::String *);
  virtual void startEntity(::java::lang::String *);
  virtual void endEntity(::java::lang::String *);
  virtual void startElement(::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::org::xml::sax::Attributes *);
  virtual void endElement(::java::lang::String *, ::java::lang::String *, ::java::lang::String *);
private:
  jboolean __attribute__((aligned(__alignof__( ::org::xml::sax::ext::DefaultHandler2)))) preInterned;
  ::org::xml::sax::ErrorHandler * handler;
  jboolean unified;
  jint ignoreDepth;
  ::org::xml::sax::Locator * locator;
  jboolean started;
  ::java::util::Hashtable * externals;
  ::java::util::Stack * bases;
public: // actually package-private
  ::gnu::xml::util::XCat$Catalog * cat;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_util_XCat$Loader__
