diff options
Diffstat (limited to 'khtml/dom/css_rule.h')
-rw-r--r-- | khtml/dom/css_rule.h | 534 |
1 files changed, 534 insertions, 0 deletions
diff --git a/khtml/dom/css_rule.h b/khtml/dom/css_rule.h new file mode 100644 index 000000000..5f27e8f8a --- /dev/null +++ b/khtml/dom/css_rule.h @@ -0,0 +1,534 @@ +/* + * This file is part of the DOM implementation for KDE. + * + * (C) 1999 Lars Knoll (knoll@kde.org) + * + * 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., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + * This file includes excerpts from the Document Object Model (DOM) + * Level 2 Specification (Candidate Recommendation) + * http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/ + * Copyright © 2000 W3C® (MIT, INRIA, Keio), All Rights Reserved. + * + */ +#ifndef _CSS_css_rule_h_ +#define _CSS_css_rule_h_ + +#include <dom/dom_string.h> +#include <dom/css_stylesheet.h> +#include <dom/css_value.h> + +namespace DOM { + +class CSSRuleImpl; + +/** + * The \c CSSRule interface is the abstract base interface + * for any type of CSS <a + * href="http://www.w3.org/TR/REC-CSS2/syndata.html#q5"> statement + * </a> . This includes both <a + * href="http://www.w3.org/TR/REC-CSS2/syndata.html#q8"> rule sets + * </a> and <a + * href="http://www.w3.org/TR/REC-CSS2/syndata.html#at-rules"> + * at-rules </a> . An implementation is expected to preserve all rules + * specified in a CSS style sheet, even if it is not recognized. + * Unrecognized rules are represented using the \c CSSUnknownRule + * interface. + * + */ +class KHTML_EXPORT CSSRule +{ +public: + CSSRule(); + CSSRule(const CSSRule &other); + CSSRule(CSSRuleImpl *impl); +public: + + CSSRule & operator = (const CSSRule &other); + + ~CSSRule(); + /** + * An integer indicating which type of rule this is. + * + */ + enum RuleType { + UNKNOWN_RULE = 0, + STYLE_RULE = 1, + CHARSET_RULE = 2, + IMPORT_RULE = 3, + MEDIA_RULE = 4, + FONT_FACE_RULE = 5, + PAGE_RULE = 6, + QUIRKS_RULE = 100 // KHTML CSS Extension + }; + + /** + * The type of the rule, as defined above. The expectation is that + * binding-specific casting methods can be used to cast down from + * an instance of the \c CSSRule interface to the + * specific derived interface implied by the \c type . + * + */ + unsigned short type() const; + + /** + * The parsable textual representation of the rule. This reflects + * the current state of the rule and not its initial value. + * + */ + DOM::DOMString cssText() const; + + /** + * see cssText + * @exception DOMException + * + * HIERARCHY_REQUEST_ERR: Raised if the rule cannot be inserted + * at this point in the style sheet. + * + * NO_MODIFICATION_ALLOWED_ERR: Raised if this style sheet is + * readonly. + * + * @exception CSSException + * SYNTAX_ERR: Raised if the specified CSS string value has a + * syntax error and is unparsable. + * + * INVALID_MODIFICATION_ERR: Raised if the specified CSS string value + * represents a different type of rule than the current one. + */ + void setCssText( const DOM::DOMString & ); + + /** + * The style sheet that contains this rule. + * + */ + CSSStyleSheet parentStyleSheet() const; + + /** + * If this rule is contained inside another rule (e.g. a style + * rule inside an \@media block), this is the containing rule. If + * this rule is not nested inside any other rules, this returns + * \c null . + * + */ + CSSRule parentRule() const; + + /** + * @internal + * not part of the DOM + */ + CSSRuleImpl *handle() const; + bool isNull() const; + +protected: + CSSRuleImpl *impl; + + void assignOther( const CSSRule &other, RuleType thisType ); +}; + +class CSSCharsetRuleImpl; + +/** + * The \c CSSCharsetRule interface a <a href=""> \@charset + * rule </a> in a CSS style sheet. A \c \@charset rule can + * be used to define the encoding of the style sheet. + * + */ +class KHTML_EXPORT CSSCharsetRule : public CSSRule +{ +public: + CSSCharsetRule(); + CSSCharsetRule(const CSSCharsetRule &other); + CSSCharsetRule(const CSSRule &other); + CSSCharsetRule(CSSCharsetRuleImpl *impl); +public: + + CSSCharsetRule & operator = (const CSSCharsetRule &other); + CSSCharsetRule & operator = (const CSSRule &other); + + ~CSSCharsetRule(); + + /** + * The encoding information used in this \c \@charset + * rule. + * + */ + DOM::DOMString encoding() const; + + /** + * see encoding + * @exception CSSException + * SYNTAX_ERR: Raised if the specified encoding value has a syntax + * error and is unparsable. + * + * @exception DOMException + * NO_MODIFICATION_ALLOWED_ERR: Raised if this encoding rule is + * readonly. + * + */ + void setEncoding( const DOM::DOMString & ); +}; + + +class CSSFontFaceRuleImpl; +/** + * The \c CSSFontFaceRule interface represents a <a + * href="http://www.w3.org/TR/REC-CSS2/fonts.html#font-descriptions"> + * \c \@font-face rule </a> in a CSS style sheet. The \c \@font-face + * rule is used to hold a set of font descriptions. + * + */ +class KHTML_EXPORT CSSFontFaceRule : public CSSRule +{ +public: + CSSFontFaceRule(); + CSSFontFaceRule(const CSSFontFaceRule &other); + CSSFontFaceRule(const CSSRule &other); + CSSFontFaceRule(CSSFontFaceRuleImpl *impl); +public: + + CSSFontFaceRule & operator = (const CSSFontFaceRule &other); + CSSFontFaceRule & operator = (const CSSRule &other); + + ~CSSFontFaceRule(); + + /** + * The <a href="http://www.w3.org/TR/REC-CSS2/syndata.html#q8"> + * declaration-block </a> of this rule. + * + */ + CSSStyleDeclaration style() const; +}; + +class CSSImportRuleImpl; +/** + * The \c CSSImportRule interface represents a <a + * href="http://www.w3.org/TR/REC-CSS2/cascade.html#at-import"> + * \c \@import rule </a> within a CSS style sheet. The \c \@import + * rule is used to import style rules from other style sheets. + * + */ +class KHTML_EXPORT CSSImportRule : public CSSRule +{ +public: + CSSImportRule(); + CSSImportRule(const CSSImportRule &other); + CSSImportRule(const CSSRule &other); + CSSImportRule(CSSImportRuleImpl *impl); +public: + + CSSImportRule & operator = (const CSSImportRule &other); + CSSImportRule & operator = (const CSSRule &other); + + ~CSSImportRule(); + + /** + * The location of the style sheet to be imported. The attribute + * will not contain the \c "url(...)" specifier around + * the URI. + * + */ + DOM::DOMString href() const; + + /** + * A list of media types for which this style sheet may be used. + * + */ + MediaList media() const; + + /** + * The style sheet referred to by this rule, if it has been + * loaded. The value of this attribute is null if the style sheet + * has not yet been loaded or if it will not be loaded (e.g. if + * the style sheet is for a media type not supported by the user + * agent). + * + */ + CSSStyleSheet styleSheet() const; +}; + +class CSSMediaRuleImpl; +/** + * The \c CSSMediaRule interface represents a <a + * href="http://www.w3.org/TR/REC-CSS2/media.html#at-media-rule"> + * \@media rule </a> in a CSS style sheet. A \c \@media rule + * can be used to delimit style rules for specific media types. + * + */ +class KHTML_EXPORT CSSMediaRule : public CSSRule +{ +public: + CSSMediaRule(); + CSSMediaRule(const CSSMediaRule &other); + CSSMediaRule(const CSSRule &other); + CSSMediaRule(CSSMediaRuleImpl *impl); +public: + + CSSMediaRule & operator = (const CSSMediaRule &other); + CSSMediaRule & operator = (const CSSRule &other); + + ~CSSMediaRule(); + + /** + * A list of <a + * href="http://www.w3.org/TR/REC-CSS2/media.html#media-types"> + * media types </a> for this rule. + * + */ + MediaList media() const; + + /** + * A list of all CSS rules contained within the media block. + * + */ + CSSRuleList cssRules() const; + + /** + * Used to insert a new rule into the media block. + * + * @param rule The parsable text representing the rule. For rule + * sets this contains both the selector and the style declaration. + * For at-rules, this specifies both the at-identifier and the + * rule content. + * + * @param index The index within the media block's rule collection + * of the rule before which to insert the specified rule. If the + * specified index is equal to the length of the media blocks's + * rule collection, the rule will be added to the end of the media + * block. + * + * @return The index within the media block's rule collection of + * the newly inserted rule. + * + * \exception DOMException + * HIERARCHY_REQUEST_ERR: Raised if the rule cannot be inserted at + * the specified index. e.g. if an \c \@import rule is + * inserted after a standard rule set or other at-rule. + * + * INDEX_SIZE_ERR: Raised if the specified index is not a valid + * insertion point. + * + * NO_MODIFICATION_ALLOWED_ERR: Raised if this media rule is + * readonly. + * + * \exception CSSException + * SYNTAX_ERR: Raised if the specified rule has a syntax error + * and is unparsable. + * + */ + unsigned long insertRule ( const DOM::DOMString &rule, unsigned long index ); + + /** + * Used to delete a rule from the media block. + * + * @param index The index within the media block's rule collection + * of the rule to remove. + * + * @return + * + * \exception DOMException + * INDEX_SIZE_ERR: Raised if the specified index does not + * correspond to a rule in the media rule list. + * + * NO_MODIFICATION_ALLOWED_ERR: Raised if this media rule is + * readonly. + * + */ + void deleteRule ( unsigned long index ); +}; + + +class CSSPageRuleImpl; +/** + * The \c CSSPageRule interface represents a <a + * href="http://www.w3.org/TR/REC-CSS2/page.html#page-box"> page rule + * </a> within a CSS style sheet. The \c @page rule is + * used to specify the dimensions, orientation, margins, etc. of a + * page box for paged media. + * + */ +class KHTML_EXPORT CSSPageRule : public CSSRule +{ +public: + CSSPageRule(); + CSSPageRule(const CSSPageRule &other); + CSSPageRule(const CSSRule &other); + CSSPageRule(CSSPageRuleImpl *impl); +public: + + CSSPageRule & operator = (const CSSPageRule &other); + CSSPageRule & operator = (const CSSRule &other); + + ~CSSPageRule(); + + /** + * The parsable textual representation of the page selector for + * the rule. + * + */ + DOM::DOMString selectorText() const; + + /** + * see selectorText + * @exception CSSException + * SYNTAX_ERR: Raised if the specified CSS string value has a + * syntax error and is unparsable. + * + * @exception DOMException + * NO_MODIFICATION_ALLOWED_ERR: Raised if this style sheet is + * readonly. + * + */ + void setSelectorText( const DOM::DOMString & ); + + /** + * The <a href="http://www.w3.org/TR/REC-CSS2/syndata.html#q8"> + * declaration-block </a> of this rule. + * + */ + CSSStyleDeclaration style() const; +}; + +class CSSStyleRuleImpl; +/** + * The \c CSSStyleRule interface represents a single <a + * href="http://www.w3.org/TR/REC-CSS2/syndata.html#q8"> rule set </a> + * in a CSS style sheet. + * + */ +class KHTML_EXPORT CSSStyleRule : public CSSRule +{ +public: + CSSStyleRule(); + CSSStyleRule(const CSSStyleRule &other); + CSSStyleRule(const CSSRule &other); + CSSStyleRule(CSSStyleRuleImpl *impl); +public: + + CSSStyleRule & operator = (const CSSStyleRule &other); + CSSStyleRule & operator = (const CSSRule &other); + + ~CSSStyleRule(); + + /** + * The textual representation of the <a + * href="http://www.w3.org/TR/REC-CSS2/selector.html"> selector + * </a> for the rule set. The implementation may have stripped out + * insignificant whitespace while parsing the selector. + * + */ + DOM::DOMString selectorText() const; + + /** + * see selectorText + * @exception CSSException + * SYNTAX_ERR: Raised if the specified CSS string value has a + * syntax error and is unparsable. + * + * @exception DOMException + * NO_MODIFICATION_ALLOWED_ERR: Raised if this style sheet is + * readonly. + * + */ + void setSelectorText( const DOM::DOMString & ); + + /** + * The <a href="http://www.w3.org/TR/REC-CSS2/syndata.html#q8"> + * declaration-block </a> of this rule set. + * + */ + CSSStyleDeclaration style() const; +}; + +class CSSUnknownRuleImpl; +/** + * The \c CSSUnkownRule interface represents an at-rule + * not supported by this user agent. + * + */ +class KHTML_EXPORT CSSUnknownRule : public CSSRule +{ +public: + CSSUnknownRule(); + CSSUnknownRule(const CSSUnknownRule &other); + CSSUnknownRule(const CSSRule &other); + CSSUnknownRule(CSSUnknownRuleImpl *impl); +public: + + CSSUnknownRule & operator = (const CSSUnknownRule &other); + CSSUnknownRule & operator = (const CSSRule &other); + + ~CSSUnknownRule(); +}; + + +class CSSRuleListImpl; +class StyleListImpl; +/** + * The \c CSSRuleList interface provides the abstraction + * of an ordered collection of CSS rules. + * + */ +class KHTML_EXPORT CSSRuleList +{ +public: + CSSRuleList(); + CSSRuleList(const CSSRuleList &other); + CSSRuleList(CSSRuleListImpl *i); + CSSRuleList(StyleListImpl *i); +public: + + CSSRuleList & operator = (const CSSRuleList &other); + + ~CSSRuleList(); + + /** + * The number of \c CSSRule s in the list. The range + * of valid child rule indices is \c 0 to + * \c length-1 inclusive. + * + */ + unsigned long length() const; + + /** + * Used to retrieve a CSS rule by ordinal index. The order in this + * collection represents the order of the rules in the CSS style + * sheet. + * + * @param index Index into the collection + * + * @return The style rule at the \c index position in + * the \c CSSRuleList , or \c null if that + * is not a valid index. + * + */ + CSSRule item ( unsigned long index ); + + /** + * @internal + * not part of the DOM + */ + CSSRuleListImpl *handle() const; + bool isNull() const; + +protected: + // we just need a pointer to an implementation here. + CSSRuleListImpl *impl; +}; + + +} // namespace + +#endif |