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

#ifndef __gnu_xml_dom_html2_DomHTMLDocument__
#define __gnu_xml_dom_html2_DomHTMLDocument__

#pragma interface

#include <gnu/xml/dom/DomDocument.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace dom
      {
        namespace html2
        {
            class DomHTMLDocument;
            class DomHTMLImpl;
        }
      }
    }
  }
  namespace org
  {
    namespace w3c
    {
      namespace dom
      {
          class Element;
          class Node;
          class NodeList;
        namespace html2
        {
            class HTMLCollection;
            class HTMLElement;
        }
      }
    }
  }
}

class gnu::xml::dom::html2::DomHTMLDocument : public ::gnu::xml::dom::DomDocument
{

public:
  DomHTMLDocument();
  DomHTMLDocument(::gnu::xml::dom::html2::DomHTMLImpl *);
private:
  ::org::w3c::dom::Node * getChildNodeByName(::org::w3c::dom::Node *, ::java::lang::String *);
public:
  virtual ::java::lang::String * getTitle();
  virtual void setTitle(::java::lang::String *);
  virtual ::java::lang::String * getReferrer();
  virtual ::java::lang::String * getDomain();
  virtual ::java::lang::String * getURL();
  virtual ::org::w3c::dom::html2::HTMLElement * getBody();
  virtual void setBody(::org::w3c::dom::html2::HTMLElement *);
  virtual ::org::w3c::dom::html2::HTMLCollection * getImages();
  virtual ::org::w3c::dom::html2::HTMLCollection * getApplets();
  virtual ::org::w3c::dom::html2::HTMLCollection * getLinks();
  virtual ::org::w3c::dom::html2::HTMLCollection * getForms();
  virtual ::org::w3c::dom::html2::HTMLCollection * getAnchors();
  virtual ::java::lang::String * getCookie();
  virtual void setCookie(::java::lang::String *);
  virtual void open();
  virtual void close();
  virtual void write(::java::lang::String *);
  virtual void writeln(::java::lang::String *);
  virtual ::org::w3c::dom::NodeList * getElementsByName(::java::lang::String *);
  virtual ::org::w3c::dom::Element * createElement(::java::lang::String *);
  virtual ::org::w3c::dom::Element * createElementNS(::java::lang::String *, ::java::lang::String *);
private:
  static JArray< ::java::lang::Class * > * ELEMENT_PT;
  static ::java::util::Map * ELEMENT_CLASSES;
  static ::java::util::Set * HTML_NS_URIS;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_dom_html2_DomHTMLDocument__
