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

#ifndef __javax_swing_text_html_HTML__
#define __javax_swing_text_html_HTML__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace javax
  {
    namespace swing
    {
      namespace text
      {
          class AttributeSet;
        namespace html
        {
            class HTML;
            class HTML$Attribute;
            class HTML$Tag;
        }
      }
    }
  }
}

class javax::swing::text::html::HTML : public ::java::lang::Object
{

public:
  HTML();
  static JArray< ::javax::swing::text::html::HTML$Attribute * > * getAllAttributeKeys();
  static JArray< ::javax::swing::text::html::HTML$Tag * > * getAllTags();
  static ::javax::swing::text::html::HTML$Attribute * getAttributeKey(::java::lang::String *);
  static jint getIntegerAttributeValue(::javax::swing::text::AttributeSet *, ::javax::swing::text::html::HTML$Attribute *, jint);
  static ::javax::swing::text::html::HTML$Tag * getTag(::java::lang::String *);
  static ::java::lang::String * NULL_ATTRIBUTE_VALUE;
public: // actually package-private
  static const jint BREAKS = 1;
  static const jint BLOCK = 2;
  static const jint PREFORMATTED = 4;
  static const jint SYNTHETIC = 8;
private:
  static ::java::util::Map * tagMap;
  static ::java::util::Map * attrMap;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_text_html_HTML__
