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

#ifndef __javax_swing_text_html_HTML$Attribute__
#define __javax_swing_text_html_HTML$Attribute__

#pragma interface

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

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

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

  HTML$Attribute(::java::lang::String *);
public:
  ::java::lang::String * toString();
public: // actually package-private
  static JArray< ::javax::swing::text::html::HTML$Attribute * > * getAllAttributes();
public:
  static ::javax::swing::text::html::HTML$Attribute * ACTION;
  static ::javax::swing::text::html::HTML$Attribute * ALIGN;
  static ::javax::swing::text::html::HTML$Attribute * ALINK;
  static ::javax::swing::text::html::HTML$Attribute * ALT;
  static ::javax::swing::text::html::HTML$Attribute * ARCHIVE;
  static ::javax::swing::text::html::HTML$Attribute * BACKGROUND;
  static ::javax::swing::text::html::HTML$Attribute * BGCOLOR;
  static ::javax::swing::text::html::HTML$Attribute * BORDER;
  static ::javax::swing::text::html::HTML$Attribute * CELLPADDING;
  static ::javax::swing::text::html::HTML$Attribute * CELLSPACING;
  static ::javax::swing::text::html::HTML$Attribute * CHECKED;
  static ::javax::swing::text::html::HTML$Attribute * CLASS;
  static ::javax::swing::text::html::HTML$Attribute * CLASSID;
  static ::javax::swing::text::html::HTML$Attribute * CLEAR;
  static ::javax::swing::text::html::HTML$Attribute * CODE;
  static ::javax::swing::text::html::HTML$Attribute * CODEBASE;
  static ::javax::swing::text::html::HTML$Attribute * CODETYPE;
  static ::javax::swing::text::html::HTML$Attribute * COLOR;
  static ::javax::swing::text::html::HTML$Attribute * COLS;
  static ::javax::swing::text::html::HTML$Attribute * COLSPAN;
  static ::javax::swing::text::html::HTML$Attribute * COMMENT;
  static ::javax::swing::text::html::HTML$Attribute * COMPACT;
  static ::javax::swing::text::html::HTML$Attribute * CONTENT;
  static ::javax::swing::text::html::HTML$Attribute * COORDS;
  static ::javax::swing::text::html::HTML$Attribute * DATA;
  static ::javax::swing::text::html::HTML$Attribute * DECLARE;
  static ::javax::swing::text::html::HTML$Attribute * DIR;
  static ::javax::swing::text::html::HTML$Attribute * DUMMY;
  static ::javax::swing::text::html::HTML$Attribute * ENCTYPE;
  static ::javax::swing::text::html::HTML$Attribute * ENDTAG;
  static ::javax::swing::text::html::HTML$Attribute * FACE;
  static ::javax::swing::text::html::HTML$Attribute * FRAMEBORDER;
  static ::javax::swing::text::html::HTML$Attribute * HALIGN;
  static ::javax::swing::text::html::HTML$Attribute * HEIGHT;
  static ::javax::swing::text::html::HTML$Attribute * HREF;
  static ::javax::swing::text::html::HTML$Attribute * HSPACE;
  static ::javax::swing::text::html::HTML$Attribute * HTTPEQUIV;
  static ::javax::swing::text::html::HTML$Attribute * ID;
  static ::javax::swing::text::html::HTML$Attribute * ISMAP;
  static ::javax::swing::text::html::HTML$Attribute * LANG;
  static ::javax::swing::text::html::HTML$Attribute * LANGUAGE;
  static ::javax::swing::text::html::HTML$Attribute * LINK;
  static ::javax::swing::text::html::HTML$Attribute * LOWSRC;
  static ::javax::swing::text::html::HTML$Attribute * MARGINHEIGHT;
  static ::javax::swing::text::html::HTML$Attribute * MARGINWIDTH;
  static ::javax::swing::text::html::HTML$Attribute * MAXLENGTH;
public: // actually package-private
  static ::javax::swing::text::html::HTML$Attribute * MEDIA;
public:
  static ::javax::swing::text::html::HTML$Attribute * METHOD;
  static ::javax::swing::text::html::HTML$Attribute * MULTIPLE;
  static ::javax::swing::text::html::HTML$Attribute * N;
  static ::javax::swing::text::html::HTML$Attribute * NAME;
  static ::javax::swing::text::html::HTML$Attribute * NOHREF;
  static ::javax::swing::text::html::HTML$Attribute * NORESIZE;
  static ::javax::swing::text::html::HTML$Attribute * NOSHADE;
  static ::javax::swing::text::html::HTML$Attribute * NOWRAP;
  static ::javax::swing::text::html::HTML$Attribute * PROMPT;
  static ::javax::swing::text::html::HTML$Attribute * REL;
  static ::javax::swing::text::html::HTML$Attribute * REV;
  static ::javax::swing::text::html::HTML$Attribute * ROWS;
  static ::javax::swing::text::html::HTML$Attribute * ROWSPAN;
  static ::javax::swing::text::html::HTML$Attribute * SCROLLING;
  static ::javax::swing::text::html::HTML$Attribute * SELECTED;
  static ::javax::swing::text::html::HTML$Attribute * SHAPE;
  static ::javax::swing::text::html::HTML$Attribute * SHAPES;
  static ::javax::swing::text::html::HTML$Attribute * SIZE;
  static ::javax::swing::text::html::HTML$Attribute * SRC;
  static ::javax::swing::text::html::HTML$Attribute * STANDBY;
  static ::javax::swing::text::html::HTML$Attribute * START;
  static ::javax::swing::text::html::HTML$Attribute * STYLE;
  static ::javax::swing::text::html::HTML$Attribute * TARGET;
  static ::javax::swing::text::html::HTML$Attribute * TEXT;
  static ::javax::swing::text::html::HTML$Attribute * TITLE;
  static ::javax::swing::text::html::HTML$Attribute * TYPE;
  static ::javax::swing::text::html::HTML$Attribute * USEMAP;
  static ::javax::swing::text::html::HTML$Attribute * VALIGN;
  static ::javax::swing::text::html::HTML$Attribute * VALUE;
  static ::javax::swing::text::html::HTML$Attribute * VALUETYPE;
  static ::javax::swing::text::html::HTML$Attribute * VERSION;
  static ::javax::swing::text::html::HTML$Attribute * VLINK;
  static ::javax::swing::text::html::HTML$Attribute * VSPACE;
  static ::javax::swing::text::html::HTML$Attribute * WIDTH;
public: // actually package-private
  static ::javax::swing::text::html::HTML$Attribute * PSEUDO_CLASS;
  static ::javax::swing::text::html::HTML$Attribute * DYNAMIC_CLASS;
private:
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::lang::Object)))) name;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_text_html_HTML$Attribute__
