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

#ifndef __gnu_xml_transform_AbstractNumberNode__
#define __gnu_xml_transform_AbstractNumberNode__

#pragma interface

#include <gnu/xml/transform/TemplateNode.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace lang
      {
          class CPStringBuilder;
      }
    }
    namespace xml
    {
      namespace transform
      {
          class AbstractNumberNode;
          class Stylesheet;
          class TemplateNode;
      }
    }
  }
  namespace javax
  {
    namespace xml
    {
      namespace namespace$
      {
          class QName;
      }
    }
  }
  namespace org
  {
    namespace w3c
    {
      namespace dom
      {
          class Node;
      }
    }
  }
}

class gnu::xml::transform::AbstractNumberNode : public ::gnu::xml::transform::TemplateNode
{

public: // actually package-private
  AbstractNumberNode(::gnu::xml::transform::TemplateNode *, ::java::lang::String *, jint, ::java::lang::String *, jint);
  virtual void doApply(::gnu::xml::transform::Stylesheet *, ::javax::xml::namespace$::QName *, ::org::w3c::dom::Node *, jint, jint, ::org::w3c::dom::Node *, ::org::w3c::dom::Node *);
  virtual ::java::lang::String * format(::java::lang::String *, JArray< jint > *);
  virtual void format(::gnu::java::lang::CPStringBuilder *, jint, ::java::lang::String *);
  static jboolean isAlphanumeric(jchar);
  static ::java::lang::String * alphabetic(jchar, jint);
  static ::java::lang::String * roman(jboolean, jint);
  virtual JArray< jint > * compute(::gnu::xml::transform::Stylesheet *, ::org::w3c::dom::Node *, jint, jint) = 0;
public:
  virtual jboolean references(::javax::xml::namespace$::QName *);
  virtual ::java::lang::String * toString();
public: // actually package-private
  static const jint ALPHABETIC = 0;
  static const jint TRADITIONAL = 1;
  ::gnu::xml::transform::TemplateNode * __attribute__((aligned(__alignof__( ::gnu::xml::transform::TemplateNode)))) format__;
  ::java::lang::String * lang;
  jint letterValue;
  ::java::lang::String * groupingSeparator;
  jint groupingSize;
  static JArray< jint > * roman_numbers;
  static JArray< jchar > * roman_chars;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_transform_AbstractNumberNode__
