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

#ifndef __gnu_xml_dom_html2_DomHTMLParser__
#define __gnu_xml_dom_html2_DomHTMLParser__

#pragma interface

#include <gnu/javax/swing/text/html/parser/support/Parser.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace dom
      {
        namespace html2
        {
            class DomHTMLDocument;
            class DomHTMLParser;
        }
      }
    }
  }
  namespace javax
  {
    namespace swing
    {
      namespace text
      {
        namespace html
        {
          namespace parser
          {
              class DTD;
              class TagElement;
          }
        }
      }
    }
  }
  namespace org
  {
    namespace w3c
    {
      namespace dom
      {
          class Node;
        namespace html2
        {
            class HTMLDocument;
        }
      }
    }
  }
}

class gnu::xml::dom::html2::DomHTMLParser : public ::gnu::javax::swing::text::html::parser::support::Parser
{

public:
  DomHTMLParser(::javax::swing::text::html::parser::DTD *);
  virtual jboolean parseMarkupDeclarations(::java::lang::StringBuffer *);
  virtual ::org::w3c::dom::html2::HTMLDocument * parseDocument(::java::io::Reader *);
public: // actually protected
  virtual ::org::w3c::dom::Node * createNode(::java::lang::String *);
  virtual void handleComment(JArray< jchar > *);
  virtual void handleEmptyTag(::javax::swing::text::html::parser::TagElement *);
  virtual void handleEndTag(::javax::swing::text::html::parser::TagElement *);
  virtual void handleStartTag(::javax::swing::text::html::parser::TagElement *);
  virtual void handleText(JArray< jchar > *);
  ::gnu::xml::dom::html2::DomHTMLDocument * __attribute__((aligned(__alignof__( ::gnu::javax::swing::text::html::parser::support::Parser)))) document;
  ::org::w3c::dom::Node * cursor;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_dom_html2_DomHTMLParser__
