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

#ifndef __javax_swing_text_html_HTMLEditorKit$HTMLTextAction__
#define __javax_swing_text_html_HTMLEditorKit$HTMLTextAction__

#pragma interface

#include <javax/swing/text/StyledEditorKit$StyledTextAction.h>
#include <gcj/array.h>

extern "Java"
{
  namespace javax
  {
    namespace swing
    {
        class JEditorPane;
      namespace text
      {
          class Element;
        namespace html
        {
            class HTML$Tag;
            class HTMLDocument;
            class HTMLEditorKit;
            class HTMLEditorKit$HTMLTextAction;
        }
      }
    }
  }
}

class javax::swing::text::html::HTMLEditorKit$HTMLTextAction : public ::javax::swing::text::StyledEditorKit$StyledTextAction
{

public:
  HTMLEditorKit$HTMLTextAction(::java::lang::String *);
public: // actually protected
  virtual ::javax::swing::text::html::HTMLDocument * getHTMLDocument(::javax::swing::JEditorPane *);
  virtual ::javax::swing::text::html::HTMLEditorKit * getHTMLEditorKit(::javax::swing::JEditorPane *);
  virtual JArray< ::javax::swing::text::Element * > * getElementsAt(::javax::swing::text::html::HTMLDocument *, jint);
private:
  JArray< ::javax::swing::text::Element * > * getElementsAt(::javax::swing::text::Element *, jint, jint);
public: // actually protected
  virtual jint elementCountToTag(::javax::swing::text::html::HTMLDocument *, jint, ::javax::swing::text::html::HTML$Tag *);
  virtual ::javax::swing::text::Element * findElementMatchingTag(::javax::swing::text::html::HTMLDocument *, jint, ::javax::swing::text::html::HTML$Tag *);
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_text_html_HTMLEditorKit$HTMLTextAction__
