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

#ifndef __javax_swing_text_html_CSS__
#define __javax_swing_text_html_CSS__

#pragma interface

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

extern "Java"
{
  namespace javax
  {
    namespace swing
    {
      namespace text
      {
          class MutableAttributeSet;
        namespace html
        {
            class CSS;
            class CSS$Attribute;
        }
      }
    }
  }
}

class javax::swing::text::html::CSS : public ::java::lang::Object
{

public:
  CSS();
  static JArray< ::javax::swing::text::html::CSS$Attribute * > * getAllAttributeKeys();
  static ::javax::swing::text::html::CSS$Attribute * getAttribute(::java::lang::String *);
public: // actually package-private
  static ::java::lang::Object * getValue(::javax::swing::text::html::CSS$Attribute *, ::java::lang::String *);
  static void addInternal(::javax::swing::text::MutableAttributeSet *, ::javax::swing::text::html::CSS$Attribute *, ::java::lang::String *);
private:
  static void parseBackgroundShorthand(::javax::swing::text::MutableAttributeSet *, ::java::lang::String *);
  static void parsePaddingShorthand(::javax::swing::text::MutableAttributeSet *, ::java::lang::String *);
  static void parseMarginShorthand(::javax::swing::text::MutableAttributeSet *, ::java::lang::String *);
  static void parseBorderShorthand(::javax::swing::text::MutableAttributeSet *, ::java::lang::String *, ::javax::swing::text::html::CSS$Attribute *);
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_text_html_CSS__
