You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdelibs/khtml/dom/css_stylesheet.h

497 lines
14 KiB

/*
* 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_stylesheet_h_
#define _CSS_css_stylesheet_h_
#include <dom/dom_string.h>
#include <dom/dom_node.h>
#include <dom/dom_misc.h>
#include <tdelibs_export.h>
namespace DOM {
class StyleSheetImpl;
class MediaList;
class NodeImpl;
class DocumentImpl;
/**
* The \c StyleSheet interface is the abstract base
* interface for any type of style sheet. It represents a single style
* sheet associated with a structured document. In HTML, the
* StyleSheet interface represents either an external style sheet,
* included via the HTML <a
* href="http://www.w3.org/TR/REC-html40/struct/links.html#h-12.3">
* LINK </a> element, or an inline <a
* href="http://www.w3.org/TR/REC-html40/present/styles.html#h-14.2.3">
* STYLE </a> element. In XML, this interface represents an external
* style sheet, included via a <a
* href="http://www.w3.org/TR/xml-stylesheet"> style sheet processing
* instruction </a> .
*
*/
class KHTML_EXPORT StyleSheet
{
public:
StyleSheet();
StyleSheet(const StyleSheet &other);
StyleSheet(StyleSheetImpl *impl);
public:
StyleSheet & operator = (const StyleSheet &other);
~StyleSheet();
/**
* This specifies the style sheet language for this style sheet.
* The style sheet language is specified as a content type (e.g.
* "text/css"). The content type is often specified in the
* \c ownerNode . A list of registered content types can be
* found at <a
* href="ftp://ftp.isi.edu/in-notes/iana/assignments/media-types/">
* ftp://ftp.isi.edu/in-notes/iana/assignments/media-types/ </a> .
* Also see the <a
* href="http://www.w3.org/TR/REC-html40/struct/links.html#adef-type-A">
* type attribute definition </a> for the \c LINK
* element in HTML 4.0, and the type pseudo-attribute for the XML
* <a href="http://www.w3.org/TR/xml-stylesheet"> style sheet
* processing instruction </a> .
*
*/
DOM::DOMString type() const;
/**
* \c false if the style sheet is applied to the
* document. \c true if it is not. Modifying this
* attribute may cause a reresolution of style for the document.
*
*/
bool disabled() const;
/**
* see disabled
*/
void setDisabled( bool );
/**
* The node that associates this style sheet with the document.
* For HTML, this may be the corresponding \c LINK or
* \c STYLE element. For XML, it may be the linking
* processing instruction. For style sheets that are included by
* other style sheets, this attribute has a value of null.
*
*/
DOM::Node ownerNode() const;
/**
* For style sheet languages that support the concept of style
* sheet inclusion, this attribute represents the including style
* sheet, if one exists. If the style sheet is a top-level style
* sheet, or the style sheet language does not support inclusion,
* the value of the attribute is null.
*
*/
StyleSheet parentStyleSheet() const;
/**
* If the style sheet is a linked style sheet, the value of its
* attribute is its location. For inline style sheets, the value
* of this attribute is null. See the <a
* href="http://www.w3.org/TR/REC-html40/struct/links.html#adef-href">
* href attribute definition </a> for the \c LINK
* element in HTML 4.0, and the href pseudo-attribute for the XML
* <a href="http://www.w3.org/TR/xml-stylesheet"> style sheet
* processing instruction </a> .
*
*/
DOM::DOMString href() const;
/**
* The advisory title. The title is often specified in the
* \c ownerNode . See the <a
* href="http://www.w3.org/TR/REC-html40/struct/global.html#adef-title">
* title attribute definition </a> for the \c LINK
* element in HTML 4.0, and the title pseudo-attribute for the XML
* <a href="http://www.w3.org/TR/xml-stylesheet"> style sheet
* processing instruction </a> .
*
*/
DOM::DOMString title() const;
/**
* The intended destination media for style information. The media
* is often specified in the \c ownerNode . See the <a
* href="http://www.w3.org/TR/REC-html40/present/styles.html#adef-media">
* media attribute definition </a> for the \c LINK
* element in HTML 4.0, and the media pseudo-attribute for the XML
* <a href="http://www.w3.org/TR/WD-xml-stylesheet"> style sheet
* processing instruction </a> .
*
*/
MediaList media() const;
/**
* @internal
*/
bool isCSSStyleSheet() const;
StyleSheetImpl *handle() const { return impl; }
bool isNull() const { return !impl; }
protected:
StyleSheetImpl *impl;
};
/**
* This exception is raised when a specific CSS operation is impossible
* to perform.
*/
class KHTML_EXPORT CSSException
{
public:
CSSException(unsigned short _code) { code = _code; }
CSSException(const CSSException &other) { code = other.code; }
CSSException & operator = (const CSSException &other)
{ code = other.code; return *this; }
virtual ~CSSException() {}
/**
* An integer indicating the type of error generated.
*
*/
unsigned short code;
enum ExceptionCode
{
SYNTAX_ERR = 0,
INVALID_MODIFICATION_ERR = 1,
_EXCEPTION_OFFSET = 1000
};
};
class CSSStyleSheetImpl;
class CSSRule;
class CSSRuleList;
/**
* The \c CSSStyleSheet interface is a concrete interface
* used to represent a CSS style sheet i.e. a style sheet whose
* content type is "text/css".
*
*/
class KHTML_EXPORT CSSStyleSheet : public StyleSheet
{
public:
CSSStyleSheet();
CSSStyleSheet(const CSSStyleSheet &other);
CSSStyleSheet(const StyleSheet &other);
CSSStyleSheet(CSSStyleSheetImpl *impl);
public:
CSSStyleSheet & operator = (const CSSStyleSheet &other);
CSSStyleSheet & operator = (const StyleSheet &other);
~CSSStyleSheet();
/**
* If this style sheet comes from an \c \@import rule,
* the \c ownerRule attribute will contain the
* \c CSSImportRule . In that case, the \c ownerNode
* attribute in the \c StyleSheet interface
* will be \c null . If the style sheet comes from an
* element or a processing instruction, the \c ownerRule
* attribute will be \c null and the
* \c ownerNode attribute will contain the \c Node .
*
*/
CSSRule ownerRule() const;
/**
* The list of all CSS rules contained within the style sheet.
* 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> .
*
*/
CSSRuleList cssRules() const;
/**
* Used to insert a new rule into the style sheet. The new rule
* now becomes part of the cascade.
*
* @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 style sheet's rule list of
* the rule before which to insert the specified rule. If the
* specified index is equal to the length of the style sheet's
* rule collection, the rule will be added to the end of the style
* sheet.
*
* @return The index within the style sheet'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 style sheet 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 style sheet.
*
* @param index The index within the style sheet's rule list of
* the rule to remove.
*
* @return
*
* @exception DOMException
* INDEX_SIZE_ERR: Raised if the specified index does not
* correspond to a rule in the style sheet's rule list.
*
* NO_MODIFICATION_ALLOWED_ERR: Raised if this style sheet is
* readonly.
*
*/
void deleteRule ( unsigned long index );
};
class StyleSheetListImpl;
class StyleSheet;
/**
* The \c StyleSheetList interface provides the
* abstraction of an ordered collection of style sheets.
*
*/
class KHTML_EXPORT StyleSheetList
{
public:
StyleSheetList();
StyleSheetList(const StyleSheetList &other);
StyleSheetList(StyleSheetListImpl *impl);
public:
StyleSheetList & operator = (const StyleSheetList &other);
~StyleSheetList();
/**
* The number of \c StyleSheet in the list. The range
* of valid child stylesheet indices is \c 0 to
* \c length-1 inclusive.
*
*/
unsigned long length() const;
/**
* Used to retrieve a style sheet by ordinal index.
*
* @param index Index into the collection
*
* @return The style sheet at the \c index position in
* the \c StyleSheetList , or \c null if
* that is not a valid index.
*
*/
StyleSheet item ( unsigned long index );
/**
* @internal
*/
StyleSheetListImpl *handle() const;
bool isNull() const;
protected:
StyleSheetListImpl *impl;
};
class MediaListImpl;
class CSSRule;
class CSSStyleSheet;
/**
* The \c MediaList interface provides the abstraction of
* an ordered collection of media, without defining or constraining
* how this collection is implemented. All media are lowercase
* strings.
*
*/
class KHTML_EXPORT MediaList
{
public:
MediaList();
MediaList(const MediaList &other);
MediaList(MediaListImpl *impl);
public:
MediaList & operator = (const MediaList &other);
~MediaList();
/**
* The parsable textual representation of the media list. This is a
* comma-separated list of media.
*
* @exception DOMException
* SYNTAX_ERR: Raised if the specified string value has a syntax error and
* is unparsable.
*
* NO_MODIFICATION_ALLOWED_ERR: Raised if this media list is readonly.
*/
DOM::DOMString mediaText() const;
/**
* see mediaText
*/
void setMediaText(const DOM::DOMString &value);
/**
* The number of media in the list. The range of valid media is 0 to length-1 inclusive.
*/
unsigned long length() const;
/**
* Returns the indexth in the list. If index is greater than or equal to
* the number of media in the list, this returns null.
*
* @param index Index into the collection.
*
* @return The medium at the indexth position in the MediaList, or null if
* that is not a valid index.
*/
DOM::DOMString item(unsigned long index) const;
/**
* Deletes the medium indicated by oldMedium from the list.
*
* @param oldMedium The medium to delete in the media list.
*
* @exception DOMException
* NO_MODIFICATION_ALLOWED_ERR: Raised if this list is readonly.
*
* NOT_FOUND_ERR: Raised if oldMedium is not in the list.
*/
void deleteMedium(const DOM::DOMString &oldMedium);
/**
* Adds the medium newMedium to the end of the list. If the newMedium is
* already used, it is first removed.
*
* @param newMedium The new medium to add.
*
* @exception DOMException
* INVALID_CHARACTER_ERR: If the medium contains characters that are
* invalid in the underlying style language.
*
* NO_MODIFICATION_ALLOWED_ERR: Raised if this list is readonly.
*/
void appendMedium(const DOM::DOMString &newMedium);
/**
* @internal
*/
MediaListImpl *handle() const;
bool isNull() const;
protected:
MediaListImpl *impl;
};
class LinkStyleImpl;
class KHTML_EXPORT LinkStyle
{
public:
LinkStyle();
LinkStyle(const LinkStyle &other);
LinkStyle & operator = (const LinkStyle &other);
LinkStyle & operator = (const Node &other);
~LinkStyle();
StyleSheet sheet();
bool isNull() const;
protected:
DOM::NodeImpl *node;
LinkStyleImpl *impl;
};
class DocumentStyleImpl;
class KHTML_EXPORT DocumentStyle
{
public:
DocumentStyle();
DocumentStyle(const DocumentStyle &other);
DocumentStyle & operator = (const DocumentStyle &other);
DocumentStyle & operator = (const Document &other);
~DocumentStyle();
// KDE 4:: make const
StyleSheetList styleSheets();
DOMString preferredStylesheetSet() const;
DOMString selectedStylesheetSet() const;
void setSelectedStylesheetSet( const DOMString& aString );
bool isNull() const { return !impl; }
protected:
DOM::DocumentImpl *doc;
DocumentStyleImpl *impl;
};
} // namespace
#endif