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

#ifndef __java_awt_font_NumericShaper__
#define __java_awt_font_NumericShaper__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace font
      {
          class NumericShaper;
      }
    }
  }
}

class java::awt::font::NumericShaper : public ::java::lang::Object
{

  NumericShaper(jint, jint);
public:
  jint getRanges();
  jboolean isContextual();
  void shape(JArray< jchar > *, jint, jint);
private:
  jint classify(::java::lang::Character$UnicodeBlock *);
public:
  void shape(JArray< jchar > *, jint, jint, jint);
  jboolean equals(::java::lang::Object *);
  jint hashCode();
  ::java::lang::String * toString();
  static ::java::awt::font::NumericShaper * getShaper(jint);
  static ::java::awt::font::NumericShaper * getContextualShaper(jint);
  static ::java::awt::font::NumericShaper * getContextualShaper(jint, jint);
private:
  static const jlong serialVersionUID = -8022764705923730308LL;
public:
  static const jint ALL_RANGES = 524287;
  static const jint ARABIC = 2;
  static const jint BENGALI = 16;
  static const jint DEVANAGARI = 8;
  static const jint EASTERN_ARABIC = 4;
  static const jint ETHIOPIC = 65536;
  static const jint EUROPEAN = 1;
  static const jint GUJARATI = 64;
  static const jint GURMUKHI = 32;
  static const jint KANNADA = 1024;
  static const jint KHMER = 131072;
  static const jint LAO = 8192;
  static const jint MALAYALAM = 2048;
  static const jint MONGOLIAN = 262144;
  static const jint MYANMAR = 32768;
  static const jint ORIYA = 128;
  static const jint TAMIL = 256;
  static const jint TELUGU = 512;
  static const jint THAI = 4096;
  static const jint TIBETAN = 16384;
private:
  static JArray< jchar > * zeroDigits;
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) key;
  jint mask;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_font_NumericShaper__
