/*
 * Copyright (c) 2000 World Wide Web Consortium,
 * (Massachusetts Institute of Technology, Institut National de
 * Recherche en Informatique et en Automatique, Keio University). All
 * Rights Reserved. This program is distributed under the W3C's Software
 * Intellectual Property License. This program 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 W3C License http://www.w3.org/Consortium/Legal/ for more details.
 */

// File: http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113/css.idl

#ifndef _CSS_IDL_
#define _CSS_IDL_

#include "dom.idl"
#include "stylesheets.idl"
#include "views.idl"

#pragma prefix "dom.w3c.org"
module css
{

  typedef dom::DOMString DOMString;
  typedef dom::Element Element;
  typedef dom::DOMImplementation DOMImplementation;

  interface CSSRule;
  interface CSSStyleSheet;
  interface CSSStyleDeclaration;
  interface CSSValue;
  interface Counter;
  interface Rect;
  interface RGBColor;

  // Introduced in DOM Level 2:
  interface CSSRuleList {
    readonly attribute unsigned long    length;
    CSSRule            item(in unsigned long index);
  };

  // Introduced in DOM Level 2:
  interface CSSRule {

    // RuleType
    const unsigned short      UNKNOWN_RULE                   = 0;
    const unsigned short      STYLE_RULE                     = 1;
    const unsigned short      CHARSET_RULE                   = 2;
    const unsigned short      IMPORT_RULE                    = 3;
    const unsigned short      MEDIA_RULE                     = 4;
    const unsigned short      FONT_FACE_RULE                 = 5;
    const unsigned short      PAGE_RULE                      = 6;

    readonly attribute unsigned short   type;
             attribute DOMString        cssText;
                                        // raises(dom::DOMException) on setting

    readonly attribute CSSStyleSheet    parentStyleSheet;
    readonly attribute CSSRule          parentRule;
  };

  // Introduced in DOM Level 2:
  interface CSSStyleRule : CSSRule {
             attribute DOMString        selectorText;
                                        // raises(dom::DOMException) on setting

    readonly attribute CSSStyleDeclaration  style;
  };

  // Introduced in DOM Level 2:
  interface CSSMediaRule : CSSRule {
    readonly attribute stylesheets::MediaList  media;
    readonly attribute CSSRuleList      cssRules;
    unsigned long      insertRule(in DOMString rule, 
                                  in unsigned long index)
                                        raises(dom::DOMException);
    void               deleteRule(in unsigned long index)
                                        raises(dom::DOMException);
  };

  // Introduced in DOM Level 2:
  interface CSSFontFaceRule : CSSRule {
    readonly attribute CSSStyleDeclaration  style;
  };

  // Introduced in DOM Level 2:
  interface CSSPageRule : CSSRule {
             attribute DOMString        selectorText;
                                        // raises(dom::DOMException) on setting

    readonly attribute CSSStyleDeclaration  style;
  };

  // Introduced in DOM Level 2:
  interface CSSImportRule : CSSRule {
    readonly attribute DOMString        href;
    readonly attribute stylesheets::MediaList  media;
    readonly attribute CSSStyleSheet    styleSheet;
  };

  // Introduced in DOM Level 2:
  interface CSSCharsetRule : CSSRule {
             attribute DOMString        encoding;
                                        // raises(dom::DOMException) on setting

  };

  // Introduced in DOM Level 2:
  interface CSSUnknownRule : CSSRule {
  };

  // Introduced in DOM Level 2:
  interface CSSStyleDeclaration {
             attribute DOMString        cssText;
                                        // raises(dom::DOMException) on setting

    DOMString          getPropertyValue(in DOMString propertyName);
    CSSValue           getPropertyCSSValue(in DOMString propertyName);
    DOMString          removeProperty(in DOMString propertyName)
                                        raises(dom::DOMException);
    DOMString          getPropertyPriority(in DOMString propertyName);
    void               setProperty(in DOMString propertyName, 
                                   in DOMString value, 
                                   in DOMString priority)
                                        raises(dom::DOMException);
    readonly attribute unsigned long    length;
    DOMString          item(in unsigned long index);
    readonly attribute CSSRule          parentRule;
  };

  // Introduced in DOM Level 2:
  interface 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;

             attribute DOMString        cssText;
                                        // raises(dom::DOMException) on setting

    readonly attribute unsigned short   cssValueType;
  };

  // Introduced in DOM Level 2:
  interface CSSPrimitiveValue : CSSValue {

    // UnitTypes
    const unsigned short      CSS_UNKNOWN                    = 0;
    const unsigned short      CSS_NUMBER                     = 1;
    const unsigned short      CSS_PERCENTAGE                 = 2;
    const unsigned short      CSS_EMS                        = 3;
    const unsigned short      CSS_EXS                        = 4;
    const unsigned short      CSS_PX                         = 5;
    const unsigned short      CSS_CM                         = 6;
    const unsigned short      CSS_MM                         = 7;
    const unsigned short      CSS_IN                         = 8;
    const unsigned short      CSS_PT                         = 9;
    const unsigned short      CSS_PC                         = 10;
    const unsigned short      CSS_DEG                        = 11;
    const unsigned short      CSS_RAD                        = 12;
    const unsigned short      CSS_GRAD                       = 13;
    const unsigned short      CSS_MS                         = 14;
    const unsigned short      CSS_S                          = 15;
    const unsigned short      CSS_HZ                         = 16;
    const unsigned short      CSS_KHZ                        = 17;
    const unsigned short      CSS_DIMENSION                  = 18;
    const unsigned short      CSS_STRING                     = 19;
    const unsigned short      CSS_URI                        = 20;
    const unsigned short      CSS_IDENT                      = 21;
    const unsigned short      CSS_ATTR                       = 22;
    const unsigned short      CSS_COUNTER                    = 23;
    const unsigned short      CSS_RECT                       = 24;
    const unsigned short      CSS_RGBCOLOR                   = 25;

    readonly attribute unsigned short   primitiveType;
    void               setFloatValue(in unsigned short unitType, 
                                     in float floatValue)
                                        raises(dom::DOMException);
    float              getFloatValue(in unsigned short unitType)
                                        raises(dom::DOMException);
    void               setStringValue(in unsigned short stringType, 
                                      in DOMString stringValue)
                                        raises(dom::DOMException);
    DOMString          getStringValue()
                                        raises(dom::DOMException);
    Counter            getCounterValue()
                                        raises(dom::DOMException);
    Rect               getRectValue()
                                        raises(dom::DOMException);
    RGBColor           getRGBColorValue()
                                        raises(dom::DOMException);
  };

  // Introduced in DOM Level 2:
  interface CSSValueList : CSSValue {
    readonly attribute unsigned long    length;
    CSSValue           item(in unsigned long index);
  };

  // Introduced in DOM Level 2:
  interface RGBColor {
    readonly attribute CSSPrimitiveValue  red;
    readonly attribute CSSPrimitiveValue  green;
    readonly attribute CSSPrimitiveValue  blue;
  };

  // Introduced in DOM Level 2:
  interface Rect {
    readonly attribute CSSPrimitiveValue  top;
    readonly attribute CSSPrimitiveValue  right;
    readonly attribute CSSPrimitiveValue  bottom;
    readonly attribute CSSPrimitiveValue  left;
  };

  // Introduced in DOM Level 2:
  interface Counter {
    readonly attribute DOMString        identifier;
    readonly attribute DOMString        listStyle;
    readonly attribute DOMString        separator;
  };

  // Introduced in DOM Level 2:
  interface ElementCSSInlineStyle {
    readonly attribute CSSStyleDeclaration  style;
  };

  // Introduced in DOM Level 2:
  interface CSS2Properties {
             attribute DOMString        azimuth;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        background;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        backgroundAttachment;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        backgroundColor;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        backgroundImage;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        backgroundPosition;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        backgroundRepeat;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        border;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderCollapse;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderColor;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderSpacing;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderStyle;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderTop;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderRight;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderBottom;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderLeft;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderTopColor;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderRightColor;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderBottomColor;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderLeftColor;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderTopStyle;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderRightStyle;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderBottomStyle;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderLeftStyle;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderTopWidth;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderRightWidth;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderBottomWidth;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderLeftWidth;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        borderWidth;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        bottom;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        captionSide;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        clear;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        clip;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        color;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        content;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        counterIncrement;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        counterReset;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        cue;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        cueAfter;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        cueBefore;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        cursor;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        direction;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        display;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        elevation;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        emptyCells;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        cssFloat;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        font;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        fontFamily;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        fontSize;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        fontSizeAdjust;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        fontStretch;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        fontStyle;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        fontVariant;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        fontWeight;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        height;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        left;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        letterSpacing;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        lineHeight;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        listStyle;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        listStyleImage;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        listStylePosition;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        listStyleType;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        margin;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        marginTop;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        marginRight;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        marginBottom;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        marginLeft;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        markerOffset;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        marks;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        maxHeight;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        maxWidth;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        minHeight;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        minWidth;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        orphans;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        outline;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        outlineColor;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        outlineStyle;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        outlineWidth;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        overflow;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        padding;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        paddingTop;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        paddingRight;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        paddingBottom;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        paddingLeft;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        page;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        pageBreakAfter;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        pageBreakBefore;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        pageBreakInside;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        pause;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        pauseAfter;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        pauseBefore;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        pitch;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        pitchRange;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        playDuring;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        position;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        quotes;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        richness;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        right;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        size;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        speak;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        speakHeader;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        speakNumeral;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        speakPunctuation;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        speechRate;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        stress;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        tableLayout;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        textAlign;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        textDecoration;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        textIndent;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        textShadow;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        textTransform;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        top;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        unicodeBidi;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        verticalAlign;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        visibility;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        voiceFamily;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        volume;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        whiteSpace;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        widows;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        width;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        wordSpacing;
                                        // raises(dom::DOMException) on setting

             attribute DOMString        zIndex;
                                        // raises(dom::DOMException) on setting

  };

  // Introduced in DOM Level 2:
  interface CSSStyleSheet : stylesheets::StyleSheet {
    readonly attribute CSSRule          ownerRule;
    readonly attribute CSSRuleList      cssRules;
    unsigned long      insertRule(in DOMString rule, 
                                  in unsigned long index)
                                        raises(dom::DOMException);
    void               deleteRule(in unsigned long index)
                                        raises(dom::DOMException);
  };

  // Introduced in DOM Level 2:
  interface ViewCSS : views::AbstractView {
    CSSStyleDeclaration getComputedStyle(in Element elt, 
                                         in DOMString pseudoElt);
  };

  // Introduced in DOM Level 2:
  interface DocumentCSS : stylesheets::DocumentStyle {
    CSSStyleDeclaration getOverrideStyle(in Element elt, 
                                         in DOMString pseudoElt);
  };

  // Introduced in DOM   Level 2:
  interface DOMImplementationCSS : DOMImplementation {
    CSSStyleSheet      createCSSStyleSheet(in DOMString title, 
                                           in DOMString media)
                                        raises(dom::DOMException);
  };
};

#endif // _CSS_IDL_

