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

#ifndef __javax_swing_text_html_HTMLDocument$HTMLReader$FormAction__
#define __javax_swing_text_html_HTMLDocument$HTMLReader$FormAction__

#pragma interface

#include <javax/swing/text/html/HTMLDocument$HTMLReader$SpecialAction.h>
extern "Java"
{
  namespace javax
  {
    namespace swing
    {
      namespace text
      {
          class MutableAttributeSet;
        namespace html
        {
            class HTML$Tag;
            class HTMLDocument$HTMLReader;
            class HTMLDocument$HTMLReader$FormAction;
        }
      }
    }
  }
}

class javax::swing::text::html::HTMLDocument$HTMLReader$FormAction : public ::javax::swing::text::html::HTMLDocument$HTMLReader$SpecialAction
{

public:
  HTMLDocument$HTMLReader$FormAction(::javax::swing::text::html::HTMLDocument$HTMLReader *);
  virtual void start(::javax::swing::text::html::HTML$Tag *, ::javax::swing::text::MutableAttributeSet *);
  virtual void end(::javax::swing::text::html::HTML$Tag *);
private:
  void setModel(::java::lang::String *, ::javax::swing::text::MutableAttributeSet *);
public: // actually package-private
  ::javax::swing::text::html::HTMLDocument$HTMLReader * __attribute__((aligned(__alignof__( ::javax::swing::text::html::HTMLDocument$HTMLReader$SpecialAction)))) this$1;
  static jboolean $assertionsDisabled;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_text_html_HTMLDocument$HTMLReader$FormAction__
