/*
 * Copyright (C) 2006 Apple Computer, Inc.
 * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public License
 * along with this library; see the file COPYING.LIB.  If not, write to
 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */

module css {

    interface [LegacyParent=KJS::DOMCSSValue, GenerateConstructor, ObjCCustomInternalImpl] CSSValue {

        // UnitTypes
        const unsigned short CSS_INHERIT         = 0;
        const unsigned short CSS_PRIMITIVE_VALUE = 1;
        const unsigned short CSS_VALUE_LIST      = 2;
        const unsigned short CSS_CUSTOM          = 3;

#if !defined(LANGUAGE_JAVASCRIPT)
                 // FIXME: DOM spec says that this can raise an
                 // exception on setting.
                 attribute DOMString        cssText
                     /*setter raises(DOMException)*/;

        readonly attribute unsigned short   cssValueType;
#endif

    };

}
