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

#ifndef __javax_swing_text_DefaultFormatter$FormatterDocumentFilter__
#define __javax_swing_text_DefaultFormatter$FormatterDocumentFilter__

#pragma interface

#include <javax/swing/text/DocumentFilter.h>
extern "Java"
{
  namespace javax
  {
    namespace swing
    {
      namespace text
      {
          class AttributeSet;
          class DefaultFormatter;
          class DefaultFormatter$FormatterDocumentFilter;
          class DocumentFilter$FilterBypass;
      }
    }
  }
}

class javax::swing::text::DefaultFormatter$FormatterDocumentFilter : public ::javax::swing::text::DocumentFilter
{

  DefaultFormatter$FormatterDocumentFilter(::javax::swing::text::DefaultFormatter *);
public:
  virtual void remove(::javax::swing::text::DocumentFilter$FilterBypass *, jint, jint);
  virtual void insertString(::javax::swing::text::DocumentFilter$FilterBypass *, jint, ::java::lang::String *, ::javax::swing::text::AttributeSet *);
  virtual void replace(::javax::swing::text::DocumentFilter$FilterBypass *, jint, jint, ::java::lang::String *, ::javax::swing::text::AttributeSet *);
private:
  void commitIfAllowed();
  void checkValidInput();
public: // actually package-private
  DefaultFormatter$FormatterDocumentFilter(::javax::swing::text::DefaultFormatter *, ::javax::swing::text::DefaultFormatter$FormatterDocumentFilter *);
  ::javax::swing::text::DefaultFormatter * __attribute__((aligned(__alignof__( ::javax::swing::text::DocumentFilter)))) this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_text_DefaultFormatter$FormatterDocumentFilter__
