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

#ifndef __gnu_javax_swing_text_html_parser_models_transformer__
#define __gnu_javax_swing_text_html_parser_models_transformer__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace swing
      {
        namespace text
        {
          namespace html
          {
            namespace parser
            {
              namespace models
              {
                  class node;
                  class transformer;
              }
            }
          }
        }
      }
    }
  }
  namespace javax
  {
    namespace swing
    {
      namespace text
      {
        namespace html
        {
          namespace parser
          {
              class ContentModel;
              class DTD;
          }
        }
      }
    }
  }
}

class gnu::javax::swing::text::html::parser::models::transformer : public ::java::lang::Object
{

public:
  transformer();
  static jint measureChainLength(::javax::swing::text::html::parser::ContentModel *);
  static ::gnu::javax::swing::text::html::parser::models::node * transform(::javax::swing::text::html::parser::ContentModel *);
  static ::gnu::javax::swing::text::html::parser::models::node * transform(::javax::swing::text::html::parser::ContentModel *, ::javax::swing::text::html::parser::DTD *);
private:
  static jboolean isBinary(jint);
  static jboolean isUnary(jint);
  static void addtype(::gnu::javax::swing::text::html::parser::models::node *, jchar);
  static ::gnu::javax::swing::text::html::parser::models::node * optionalTransform(::javax::swing::text::html::parser::ContentModel *, ::javax::swing::text::html::parser::DTD *);
  static const jlong serialVersionUID = 1LL;
public: // actually protected
  static ::java::lang::String * binary;
  static ::java::lang::String * unary;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_swing_text_html_parser_models_transformer__
