diff options
Diffstat (limited to 'khtml/css')
35 files changed, 0 insertions, 21800 deletions
diff --git a/khtml/css/CMakeLists.txt b/khtml/css/CMakeLists.txt deleted file mode 100644 index 50ca11815..000000000 --- a/khtml/css/CMakeLists.txt +++ /dev/null @@ -1,47 +0,0 @@ -################################################# -# -# (C) 2010 Serghei Amelian -# serghei (DOT) amelian (AT) gmail.com -# -# Improvements and feedback are welcome -# -# This file is released under GPL >= 2 -# -################################################# - -include_directories( - ${TQT_INCLUDE_DIRS} - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_BINARY_DIR} - ${CMAKE_BINARY_DIR}/tdecore - ${CMAKE_SOURCE_DIR} - ${CMAKE_SOURCE_DIR}/khtml - ${CMAKE_SOURCE_DIR}/dcop - ${CMAKE_SOURCE_DIR}/tdecore - ${CMAKE_SOURCE_DIR}/tdeui - ${CMAKE_SOURCE_DIR}/kio - ${CMAKE_SOURCE_DIR}/kio/kio - ${CMAKE_SOURCE_DIR}/kwallet/client - ${CMAKE_SOURCE_DIR}/kutils -) - - -##### other data ################################ - -install( FILES html4.css quirks.css DESTINATION ${DATA_INSTALL_DIR}/khtml/css ) - - -##### khtmlcss (static) ######################### - -set( target khtmlcss ) - -set( ${target}_SRCS - css_stylesheetimpl.cpp css_ruleimpl.cpp css_valueimpl.cpp - css_base.cpp cssparser.cpp cssstyleselector.cpp - csshelper.cpp parser.cpp css_renderstyledeclarationimpl.cpp -) - -tde_add_library( ${target} STATIC_PIC AUTOMOC - SOURCES ${${target}_SRCS} -) - diff --git a/khtml/css/Makefile.am b/khtml/css/Makefile.am deleted file mode 100644 index 47653ca8f..000000000 --- a/khtml/css/Makefile.am +++ /dev/null @@ -1,60 +0,0 @@ -# This file is part of the KDE libraries -# Copyright (C) 1997 Martin Jones (mjones@kde.org) -# (C) 1997 Torben Weis (weis@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. - -KDE_CXXFLAGS = $(WOVERLOADED_VIRTUAL) - -YACC=bison - -noinst_LTLIBRARIES = libkhtmlcss.la -libkhtmlcss_la_SOURCES = \ - css_stylesheetimpl.cpp css_ruleimpl.cpp css_valueimpl.cpp css_base.cpp \ - cssparser.cpp cssstyleselector.cpp csshelper.cpp parser.cpp \ - css_renderstyledeclarationimpl.cpp - -#libkhtmlcss_la_LDFLAGS = -no-undefined -libkhtmlcss_la_METASOURCES = AUTO - -noinst_HEADERS = \ - css_extensionsimpl.h css_stylesheetimpl.h cssparser.h \ - css_ruleimpl.h css_valueimpl.h css_base.h \ - cssstyleselector.h csshelper.h parser.h \ - css_renderstyledeclarationimpl.h - -INCLUDES = -I$(top_srcdir)/kimgio -I$(top_srcdir)/kio -I$(top_srcdir)/dcop \ - -I$(top_srcdir)/khtml -I$(top_srcdir)/libltdl -I$(top_srcdir) \ - -I$(top_srcdir)/kwallet/client -I$(top_srcdir)/kutils \ - $(all_includes) - -cssdir = $(kde_datadir)/khtml/css -css_DATA = html4.css quirks.css - -SRCDOC_DEST=$(kde_htmldir)/en/tdelibs/khtml - -EXTRA_DIST = parser.y - -parser: $(srcdir)/parser.y - cd $(srcdir); \ - $(YACC) -v -d -p cssyy parser.y && mv parser.tab.c parser.cpp; \ - if test -f parser.tab.h; then \ - if cmp -s parser.tab.h parser.h; then rm -f parser.tab.h; \ - else mv parser.tab.h parser.h; fi \ - else :; fi - -.PHONY: parser - diff --git a/khtml/css/css_base.cpp b/khtml/css/css_base.cpp deleted file mode 100644 index 699ff6554..000000000 --- a/khtml/css/css_base.cpp +++ /dev/null @@ -1,419 +0,0 @@ -/* - * This file is part of the DOM implementation for KDE. - * - * Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org) - * 1999 Waldo Bastian (bastian@kde.org) - * 2001 Andreas Schlapbach (schlpbch@iam.unibe.ch) - * 2001-2003 Dirk Mueller (mueller@kde.org) - * 2002 Apple Computer, Inc. - * 2004 Allan Sandfeld Jensen (kde@carewolf.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., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -//#define CSS_DEBUG - -#include <assert.h> -#include <kdebug.h> - -#include "css_base.h" - -#ifdef CSS_DEBUG -#include "cssproperties.h" -#endif - -#include "css_stylesheetimpl.h" -#include "xml/dom_docimpl.h" -#include "misc/htmlhashes.h" -#include "css_valueimpl.h" -using namespace DOM; - -void StyleBaseImpl::checkLoaded() const -{ - if(m_parent) m_parent->checkLoaded(); -} - -StyleSheetImpl* StyleBaseImpl::stylesheet() -{ - StyleBaseImpl* b = this; - while(b && !b->isStyleSheet()) - b = b->m_parent; - return static_cast<StyleSheetImpl *>(b); -} - -KURL StyleBaseImpl::baseURL() -{ - // try to find the style sheet. If found look for its url. - // If it has none, look for the parentsheet, or the parentNode and - // try to find out about their url - - StyleSheetImpl *sheet = stylesheet(); - - if(!sheet) return KURL(); - - if(!sheet->href().isNull()) - return KURL( sheet->href().string() ); - - // find parent - if(sheet->parent()) return sheet->parent()->baseURL(); - - if(!sheet->ownerNode()) return KURL(); - - return sheet->ownerNode()->getDocument()->baseURL(); -} - -void StyleBaseImpl::setParsedValue(int propId, const CSSValueImpl *parsedValue, - bool important, bool nonCSSHint, TQPtrList<CSSProperty> *propList) -{ - TQPtrListIterator<CSSProperty> propIt(*propList); - propIt.toLast(); // just remove the top one - not sure what should happen if we have multiple instances of the property - while (propIt.current() && - ( propIt.current()->m_id != propId || propIt.current()->nonCSSHint != nonCSSHint || - propIt.current()->m_important != important) ) - --propIt; - if (propIt.current()) - propList->removeRef(propIt.current()); - - CSSProperty *prop = new CSSProperty(); - prop->m_id = propId; - prop->setValue((CSSValueImpl *) parsedValue); - prop->m_important = important; - prop->nonCSSHint = nonCSSHint; - - propList->append(prop); -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "added property: " << getPropertyName(propId).string() - // non implemented yet << ", value: " << parsedValue->cssText().string() - << " important: " << prop->m_important - << " nonCSS: " << prop->nonCSSHint << endl; -#endif -} - -// ------------------------------------------------------------------------------ - -StyleListImpl::~StyleListImpl() -{ - StyleBaseImpl *n; - - if(!m_lstChildren) return; - - for( n = m_lstChildren->first(); n != 0; n = m_lstChildren->next() ) - { - n->setParent(0); - if( !n->refCount() ) delete n; - } - delete m_lstChildren; -} - -// -------------------------------------------------------------------------------- - -void CSSSelector::print(void) -{ - kdDebug( 6080 ) << "[Selector: tag = " << TQString::number(tag,16) << ", attr = \"" << attr << "\", match = \"" << match - << "\" value = \"" << value.string().latin1() << "\" relation = " << (int)relation - << "]" << endl; - if ( tagHistory ) - tagHistory->print(); - kdDebug( 6080 ) << " specificity = " << specificity() << endl; -} - -unsigned int CSSSelector::specificity() const -{ - if ( nonCSSHint ) - return 0; - - int s = ((localNamePart(tag) == anyLocalName) ? 0 : 1); - switch(match) - { - case Id: - s += 0x10000; - break; - case Exact: - case Set: - case List: - case Class: - case Hyphen: - case PseudoClass: - case PseudoElement: - case Contain: - case Begin: - case End: - s += 0x100; - case None: - break; - } - if(tagHistory) - s += tagHistory->specificity(); - // make sure it doesn't overflow - return s & 0xffffff; -} - -void CSSSelector::extractPseudoType() const -{ - if (match != PseudoClass && match != PseudoElement) - return; - _pseudoType = PseudoOther; - bool element = false; - bool compat = false; - if (!value.isEmpty()) { - value = value.lower(); - switch (value[0]) { - case '-': - if (value == "-khtml-replaced") - _pseudoType = PseudoReplaced; - else - if (value == "-khtml-marker") - _pseudoType = PseudoMarker; - element = true; - break; - case 'a': - if (value == "active") - _pseudoType = PseudoActive; - else if (value == "after") { - _pseudoType = PseudoAfter; - element = compat = true; - } - break; - case 'b': - if (value == "before") { - _pseudoType = PseudoBefore; - element = compat = true; - } - break; - case 'c': - if (value == "checked") - _pseudoType = PseudoChecked; - else if (value == "contains(") - _pseudoType = PseudoContains; - break; - case 'd': - if (value == "disabled") - _pseudoType = PseudoDisabled; - break; - case 'e': - if (value == "empty") - _pseudoType = PseudoEmpty; - else if (value == "enabled") - _pseudoType = PseudoEnabled; - break; - case 'f': - if (value == "first-child") - _pseudoType = PseudoFirstChild; - else if (value == "first-letter") { - _pseudoType = PseudoFirstLetter; - element = compat = true; - } - else if (value == "first-line") { - _pseudoType = PseudoFirstLine; - element = compat = true; - } - else if (value == "first-of-type") - _pseudoType = PseudoFirstOfType; - else if (value == "focus") - _pseudoType = PseudoFocus; - break; - case 'h': - if (value == "hover") - _pseudoType = PseudoHover; - break; - case 'i': - if (value == "indeterminate") - _pseudoType = PseudoIndeterminate; - break; - case 'l': - if (value == "link") - _pseudoType = PseudoLink; - else if (value == "lang(") - _pseudoType = PseudoLang; - else if (value == "last-child") - _pseudoType = PseudoLastChild; - else if (value == "last-of-type") - _pseudoType = PseudoLastOfType; - break; - case 'n': - if (value == "not(") - _pseudoType = PseudoNot; - else if (value == "nth-child(") - _pseudoType = PseudoNthChild; - else if (value == "nth-last-child(") - _pseudoType = PseudoNthLastChild; - else if (value == "nth-of-type(") - _pseudoType = PseudoNthOfType; - else if (value == "nth-last-of-type(") - _pseudoType = PseudoNthLastOfType; - break; - case 'o': - if (value == "only-child") - _pseudoType = PseudoOnlyChild; - else if (value == "only-of-type") - _pseudoType = PseudoOnlyOfType; - break; - case 'r': - if (value == "root") - _pseudoType = PseudoRoot; - break; - case 's': - if (value == "selection") { - _pseudoType = PseudoSelection; - element = true; - } - break; - case 't': - if (value == "target") - _pseudoType = PseudoTarget; - break; - case 'v': - if (value == "visited") - _pseudoType = PseudoVisited; - break; - } - } - if (match == PseudoClass && element) - if (!compat) _pseudoType = PseudoOther; - else match = PseudoElement; - else - if (match == PseudoElement && !element) - _pseudoType = PseudoOther; -} - - -bool CSSSelector::operator == ( const CSSSelector &other ) const -{ - const CSSSelector *sel1 = this; - const CSSSelector *sel2 = &other; - - while ( sel1 && sel2 ) { - //assert(sel1->_pseudoType != PseudoNotParsed); - //assert(sel2->_pseudoType != PseudoNotParsed); - if ( sel1->tag != sel2->tag || sel1->attr != sel2->attr || - sel1->relation != sel2->relation || sel1->match != sel2->match || - sel1->nonCSSHint != sel2->nonCSSHint || - sel1->value != sel2->value || - sel1->pseudoType() != sel2->pseudoType() || - sel1->string_arg != sel2->string_arg) - return false; - sel1 = sel1->tagHistory; - sel2 = sel2->tagHistory; - } - if ( sel1 || sel2 ) - return false; - return true; -} - -DOMString CSSSelector::selectorText() const -{ - // FIXME: Support namespaces when dumping the selector text. This requires preserving - // the original namespace prefix used. Ugh. -dwh - DOMString str; - const CSSSelector* cs = this; - TQ_UINT16 tag = localNamePart(cs->tag); - if (tag == anyLocalName && cs->match == CSSSelector::None) - str = "*"; - else if (tag != anyLocalName) - str = getTagName( cs->tag ); - - const CSSSelector* op = 0; - while (true) { - if ( cs->attr == ATTR_ID && cs->match == CSSSelector::Id ) - { - str += "#"; - str += cs->value; - } - else if ( cs->match == CSSSelector::Class ) - { - str += "."; - str += cs->value; - } - else if ( cs->match == CSSSelector::PseudoClass ) - { - str += ":"; - str += cs->value; - if (!cs->string_arg.isEmpty()) { // e.g :nth-child(...) - str += cs->string_arg; - str += ")"; - } else if (cs->simpleSelector && !op) { // :not(...) - op = cs; - cs = cs->simpleSelector; - continue; - } - } - else if ( cs->match == CSSSelector::PseudoElement ) - { - str += "::"; - str += cs->value; - } - // optional attribute - else if ( cs->attr ) { - DOMString attrName = getAttrName( cs->attr ); - str += "["; - str += attrName; - switch (cs->match) { - case CSSSelector::Exact: - str += "="; - break; - case CSSSelector::Set: - break; - case CSSSelector::List: - str += "~="; - break; - case CSSSelector::Hyphen: - str += "|="; - break; - case CSSSelector::Begin: - str += "^="; - break; - case CSSSelector::End: - str += "$="; - break; - case CSSSelector::Contain: - str += "*="; - break; - default: - kdWarning(6080) << "Unhandled case in CSSStyleRuleImpl::selectorText : match=" << cs->match << endl; - } - if (cs->match != CSSSelector::Set) { - str += "\""; - str += cs->value; - str += "\""; - } - str += "]"; - } - if (op && !cs->tagHistory) { - cs=op; - op=0; - str += ")"; - } - - if ((cs->relation != CSSSelector::SubSelector && !op) || !cs->tagHistory) - break; - cs = cs->tagHistory; - } - - if ( cs->tagHistory ) { - DOMString tagHistoryText = cs->tagHistory->selectorText(); - if ( cs->relation == DirectAdjacent ) - str = tagHistoryText + " + " + str; - else if ( cs->relation == IndirectAdjacent ) - str = tagHistoryText + " ~ " + str; - else if ( cs->relation == Child ) - str = tagHistoryText + " > " + str; - else // Descendant - str = tagHistoryText + " " + str; - } - return str; -} - -// ---------------------------------------------------------------------------- diff --git a/khtml/css/css_base.h b/khtml/css/css_base.h deleted file mode 100644 index 9a8774107..000000000 --- a/khtml/css/css_base.h +++ /dev/null @@ -1,271 +0,0 @@ -/* - * This file is part of the CSS implementation for KDE. - * - * Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org) - * 1999 Waldo Bastian (bastian@kde.org) - * 2002 Apple Computer, Inc. - * 2004 Allan Sandfeld Jensen (kde@carewolf.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., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - */ -#ifndef _CSS_BASE_H -#define _CSS_BASE_H - -#include "dom/dom_string.h" -#include "dom/dom_misc.h" -#include "xml/dom_nodeimpl.h" -#include "misc/shared.h" -#include <kdemacros.h> -#include <tqdatetime.h> -#include <tqptrlist.h> - -namespace DOM { - - class StyleSheetImpl; - class MediaList; - - class CSSSelector; - class CSSProperty; - class CSSValueImpl; - class CSSPrimitiveValueImpl; - class CSSStyleDeclarationImpl; - class CSSRuleImpl; - class CSSStyleRuleImpl; - - class DocumentImpl; - - struct CSSNamespace { - DOMString m_prefix; - DOMString m_uri; - CSSNamespace* m_parent; - - CSSNamespace(const DOMString& p, const DOMString& u, CSSNamespace* parent) - :m_prefix(p), m_uri(u), m_parent(parent) {} - ~CSSNamespace() { delete m_parent; } - - const DOMString& uri() { return m_uri; } - const DOMString& prefix() { return m_prefix; } - - CSSNamespace* namespaceForPrefix(const DOMString& prefix) { - if (prefix == m_prefix) - return this; - if (m_parent) - return m_parent->namespaceForPrefix(prefix); - return 0; - } - }; - -// this class represents a selector for a StyleRule - class CSSSelector - { - public: - CSSSelector() - : tagHistory(0), simpleSelector(0), attr(0), tag(anyQName), relation( Descendant ), - match( None ), nonCSSHint( false ), pseudoId( 0 ), _pseudoType(PseudoNotParsed) - {} - - ~CSSSelector() { - delete tagHistory; - delete simpleSelector; - } - - /** - * Print debug output for this selector - */ - void print(); - - /** - * Re-create selector text from selector's data - */ - DOMString selectorText() const; - - // checks if the 2 selectors (including sub selectors) agree. - bool operator == ( const CSSSelector &other ) const; - - // tag == -1 means apply to all elements (Selector = *) - - unsigned int specificity() const; - - /* how the attribute value has to match.... Default is Exact */ - enum Match - { - None = 0, - Id, - Exact, - Set, - Class, - List, - Hyphen, - PseudoClass, - PseudoElement, - Contain, // css3: E[foo*="bar"] - Begin, // css3: E[foo^="bar"] - End // css3: E[foo$="bar"] - }; - - enum Relation - { - Descendant = 0, - Child, - DirectAdjacent, - IndirectAdjacent, - SubSelector - }; - - enum PseudoType - { - PseudoNotParsed = 0, - PseudoOther, - PseudoEmpty, - PseudoFirstChild, - PseudoLastChild, - PseudoNthChild, - PseudoNthLastChild, - PseudoOnlyChild, - PseudoFirstOfType, - PseudoLastOfType, - PseudoNthOfType, - PseudoNthLastOfType, - PseudoOnlyOfType, - PseudoLink, - PseudoVisited, - PseudoHover, - PseudoFocus, - PseudoActive, - PseudoTarget, - PseudoLang, - PseudoNot, - PseudoContains, - PseudoRoot, - PseudoEnabled, - PseudoDisabled, - PseudoChecked, - PseudoIndeterminate, -// pseudo-elements: - // inherited: - PseudoFirstLine, - PseudoFirstLetter, - PseudoSelection, - // generated: - PseudoBefore, - PseudoAfter, - PseudoMarker, - PseudoReplaced - }; - - PseudoType pseudoType() const { - if (_pseudoType == PseudoNotParsed) - extractPseudoType(); - return _pseudoType; - } - - mutable DOM::DOMString value; - CSSSelector *tagHistory; - CSSSelector* simpleSelector; // Used by :not - DOM::DOMString string_arg; // Used by :contains, :lang and :nth-* - DOM::NodeImpl::Id attr; - DOM::NodeImpl::Id tag; - - Relation relation : 3; - mutable Match match : 4; - bool nonCSSHint : 1; - unsigned int pseudoId : 4; - mutable PseudoType _pseudoType : 6; - - private: - void extractPseudoType() const; - }; - - // a style class which has a parent (almost all have) - class StyleBaseImpl : public khtml::TreeShared<StyleBaseImpl> - { - public: - StyleBaseImpl() { m_parent = 0; hasInlinedDecl = false; strictParsing = true; multiLength = false; } - StyleBaseImpl(StyleBaseImpl *p) { - m_parent = p; hasInlinedDecl = false; - strictParsing = (m_parent ? m_parent->useStrictParsing() : true); - multiLength = false; - } - - virtual ~StyleBaseImpl() {} - - // returns the url of the style sheet this object belongs to - // not const - KURL baseURL(); - - virtual bool isStyleSheet() const { return false; } - virtual bool isCSSStyleSheet() const { return false; } - virtual bool isStyleSheetList() const { return false; } - virtual bool isMediaList() const { return false; } - virtual bool isRuleList() const { return false; } - virtual bool isRule() const { return false; } - virtual bool isStyleRule() const { return false; } - virtual bool isCharetRule() const { return false; } - virtual bool isImportRule() const { return false; } - virtual bool isMediaRule() const { return false; } - virtual bool isFontFaceRule() const { return false; } - virtual bool isPageRule() const { return false; } - virtual bool isUnknownRule() const { return false; } - virtual bool isStyleDeclaration() const { return false; } - virtual bool isValue() const { return false; } - virtual bool isPrimitiveValue() const { return false; } - virtual bool isValueList() const { return false; } - virtual bool isValueCustom() const { return false; } - - void setParent(StyleBaseImpl *parent) { m_parent = parent; } - - static void setParsedValue(int propId, const CSSValueImpl *parsedValue, - bool important, bool nonCSSHint, TQPtrList<CSSProperty> *propList); - - virtual bool parseString(const DOMString &/*cssString*/, bool = false) { return false; } - - virtual void checkLoaded() const; - - void setStrictParsing( bool b ) { strictParsing = b; } - bool useStrictParsing() const { return strictParsing; } - - // not const - StyleSheetImpl* stylesheet(); - - protected: - bool hasInlinedDecl : 1; - bool strictParsing : 1; - bool multiLength : 1; - }; - - // a style class which has a list of children (StyleSheets for example) - class StyleListImpl : public StyleBaseImpl - { - public: - StyleListImpl() : StyleBaseImpl() { m_lstChildren = 0; } - StyleListImpl(StyleBaseImpl *parent) : StyleBaseImpl(parent) { m_lstChildren = 0; } - virtual ~StyleListImpl(); - - unsigned long length() const { return m_lstChildren->count(); } - StyleBaseImpl *item(unsigned long num) const { return m_lstChildren->at(num); } - - void append(StyleBaseImpl *item) { m_lstChildren->append(item); } - - protected: - TQPtrList<StyleBaseImpl> *m_lstChildren; - }; - - KDE_NO_EXPORT int getPropertyID(const char *tagStr, int len); - -} - -#endif diff --git a/khtml/css/css_extensionsimpl.cpp b/khtml/css/css_extensionsimpl.cpp deleted file mode 100644 index e0e17e207..000000000 --- a/khtml/css/css_extensionsimpl.cpp +++ /dev/null @@ -1,366 +0,0 @@ -/** - * 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. - * - */ -#include "DOMException.h" -#include "DOMString.h" - -#include "CSS2AzimuthImpl.h" -using namespace DOM; - -CSS2AzimuthImpl::CSS2AzimuthImpl(DocumentImpl *doc) : CSSValueImpl(doc) -{ -} - -CSS2AzimuthImpl::~CSS2AzimuthImpl() -{ -} - -unsigned short CSS2AzimuthImpl::azimuthType() const -{ -} - -DOMString CSS2AzimuthImpl::identifier() const -{ -} - -bool CSS2AzimuthImpl::behind() const -{ -} - -void CSS2AzimuthImpl::setAngleValue( const unsigned short &unitType, const float &floatValue ) -{ -} - -float CSS2AzimuthImpl::getAngleValue( const unsigned short &unitType ) -{ -} - -void CSS2AzimuthImpl::setIdentifier( const DOMString &identifier, const bool &behind ) -{ -} - - - - - -#include "CSS2BackgroundPositionImpl.h" -CSS2BackgroundPositionImpl::CSS2BackgroundPositionImpl(DocumentImpl *doc) : CSSValueImpl(doc) -{ -} - -CSS2BackgroundPositionImpl::~CSS2BackgroundPositionImpl() -{ -} - -unsigned short CSS2BackgroundPositionImpl::horizontalType() const -{ -} - -unsigned short CSS2BackgroundPositionImpl::verticalType() const -{ -} - -DOMString CSS2BackgroundPositionImpl::horizontalIdentifier() const -{ -} - -DOMString CSS2BackgroundPositionImpl::verticalIdentifier() const -{ -} - -float CSS2BackgroundPositionImpl::getHorizontalPosition( const float &horizontalType ) -{ -} - -float CSS2BackgroundPositionImpl::getVerticalPosition( const float &verticalType ) -{ -} - -void CSS2BackgroundPositionImpl::setHorizontalPosition( const unsigned short &horizontalType, const float &value ) -{ -} - -void CSS2BackgroundPositionImpl::setVerticalPosition( const unsigned short &verticalType, const float &value ) -{ -} - -void CSS2BackgroundPositionImpl::setPositionIdentifier( const DOMString &horizontalIdentifier, const DOMString &verticalIdentifier ) -{ -} - - - - - -#include "CSS2BorderSpacingImpl.h" -CSS2BorderSpacingImpl::CSS2BorderSpacingImpl(DocumentImpl *doc) : CSSValueImpl(doc) -{ -} - -CSS2BorderSpacingImpl::~CSS2BorderSpacingImpl() -{ -} - -unsigned short CSS2BorderSpacingImpl::horizontalType() const -{ -} - -unsigned short CSS2BorderSpacingImpl::verticalType() const -{ -} - -float CSS2BorderSpacingImpl::getHorizontalSpacing( const float &horizontalType ) -{ -} - -float CSS2BorderSpacingImpl::getVerticalSpacing( const float &verticalType ) -{ -} - -void CSS2BorderSpacingImpl::setHorizontalSpacing( const unsigned short &horizontalType, const float &value ) -{ -} - -void CSS2BorderSpacingImpl::setVerticalSpacing( const unsigned short &verticalType, const float &value ) -{ -} - -void CSS2BorderSpacingImpl::setInherit() -{ -} - - - - - -#include "CSS2CounterIncrementImpl.h" -CSS2CounterIncrementImpl::CSS2CounterIncrementImpl(DocumentImpl *doc) -{ -} - -CSS2CounterIncrementImpl::~CSS2CounterIncrementImpl() -{ -} - -short CSS2CounterIncrementImpl::increment() const -{ -} - -void CSS2CounterIncrementImpl::setIncrement( const short & ) -{ -} - - - - - -#include "CSS2CounterResetImpl.h" -CSS2CounterResetImpl::CSS2CounterResetImpl(DocumentImpl *doc) -{ -} - -CSS2CounterResetImpl::~CSS2CounterResetImpl() -{ -} - -short CSS2CounterResetImpl::reset() const -{ -} - -void CSS2CounterResetImpl::setReset( const short & ) -{ -} - - - - -#include "CSSValueList.h" -#include "CSS2CursorImpl.h" -CSS2CursorImpl::CSS2CursorImpl(DocumentImpl *doc) : CSSValueImpl(doc) -{ -} - -CSS2CursorImpl::~CSS2CursorImpl() -{ -} - -unsigned short CSS2CursorImpl::cursorType() const -{ -} - -void CSS2CursorImpl::setCursorType( const unsigned short & ) -{ -} - -CSSValueList CSS2CursorImpl::uris() const -{ -} - -#include "CSS2FontFaceSrcImpl.h" -CSS2FontFaceSrcImpl::CSS2FontFaceSrcImpl(DocumentImpl *doc) -{ -} - -CSS2FontFaceSrcImpl::~CSS2FontFaceSrcImpl() -{ -} - -CSSValueList CSS2FontFaceSrcImpl::format() const -{ -} - - - - -#include "CSS2FontFaceWidthsImpl.h" -CSS2FontFaceWidthsImpl::CSS2FontFaceWidthsImpl(DocumentImpl *doc) -{ -} - -CSS2FontFaceWidthsImpl::~CSS2FontFaceWidthsImpl() -{ -} - -CSSValueList CSS2FontFaceWidthsImpl::numbers() const -{ -} - - - - -#include "CSS2PageSizeImpl.h" -CSS2PageSizeImpl::CSS2PageSizeImpl(DocumentImpl *doc) : CSSValueImpl(doc) -{ -} - -CSS2PageSizeImpl::~CSS2PageSizeImpl() -{ -} - -unsigned short CSS2PageSizeImpl::widthType() const -{ -} - -unsigned short CSS2PageSizeImpl::heightType() const -{ -} - -DOMString CSS2PageSizeImpl::identifier() const -{ -} - -float CSS2PageSizeImpl::getWidth( const float &widthType ) -{ -} - -float CSS2PageSizeImpl::getHeightSize( const float &heightType ) -{ -} - -void CSS2PageSizeImpl::setWidthSize( const unsigned short &widthType, const float &value ) -{ -} - -void CSS2PageSizeImpl::setHeightSize( const unsigned short &heightType, const float &value ) -{ -} - -void CSS2PageSizeImpl::setIdentifier( const DOMString &identifier ) -{ -} - - - - -#include "CSS2PlayDuringImpl.h" -CSS2PlayDuringImpl::CSS2PlayDuringImpl(DocumentImpl *doc) : CSSValueImpl(doc) -{ -} - -CSS2PlayDuringImpl::~CSS2PlayDuringImpl() -{ -} - -unsigned short CSS2PlayDuringImpl::playDuringType() const -{ -} - -bool CSS2PlayDuringImpl::mix() const -{ -} - -void CSS2PlayDuringImpl::setMix( const bool & ) -{ -} - -bool CSS2PlayDuringImpl::repeat() const -{ -} - -void CSS2PlayDuringImpl::setRepeat( const bool & ) -{ -} - - - - - -#include "CSS2PropertiesImpl.h" -CSS2PropertiesImpl::CSS2PropertiesImpl(DocumentImpl *doc) -{ -} - -CSS2PropertiesImpl::~CSS2PropertiesImpl() -{ -} - - - - -#include "CSSValue.h" - -#include "CSS2TextShadowImpl.h" -CSS2TextShadowImpl::CSS2TextShadowImpl(DocumentImpl *doc) -{ -} - -CSS2TextShadowImpl::~CSS2TextShadowImpl() -{ -} - -CSSValue CSS2TextShadowImpl::color() const -{ -} - -CSSValue CSS2TextShadowImpl::horizontal() const -{ -} - -CSSValue CSS2TextShadowImpl::vertical() const -{ -} - -CSSValue CSS2TextShadowImpl::blur() const -{ -} - - - diff --git a/khtml/css/css_extensionsimpl.h b/khtml/css/css_extensionsimpl.h deleted file mode 100644 index dba74e217..000000000 --- a/khtml/css/css_extensionsimpl.h +++ /dev/null @@ -1,205 +0,0 @@ -/* - * 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. - * - */ -#ifndef _CSS_css_extensionsimpl_h_ -#define _CSS_css_extensionsimpl_h_ - -#include "css_valueimpl.h" -#include "dom_string.h" - -namespace DOM { - -class CSS2AzimuthImpl : public CSSValueImpl -{ -public: - CSS2AzimuthImpl(DocumentImpl *doc); - - ~CSS2AzimuthImpl(); - - unsigned short azimuthType() const; - DOM::DOMString identifier() const; - bool behind() const; - void setAngleValue ( const unsigned short &unitType, const float &floatValue ); - float getAngleValue ( const unsigned short &unitType ); - void setIdentifier ( const DOM::DOMString &identifier, const bool &behind ); -}; - - -class DOM::DOMString; - -class CSS2BackgroundPositionImpl : public CSSValueImpl -{ -public: - CSS2BackgroundPositionImpl(DocumentImpl *doc); - - ~CSS2BackgroundPositionImpl(); - - unsigned short horizontalType() const; - unsigned short verticalType() const; - DOM::DOMString horizontalIdentifier() const; - DOM::DOMString verticalIdentifier() const; - float getHorizontalPosition ( const float &horizontalType ); - float getVerticalPosition ( const float &verticalType ); - void setHorizontalPosition ( const unsigned short &horizontalType, const float &value ); - void setVerticalPosition ( const unsigned short &verticalType, const float &value ); - void setPositionIdentifier ( const DOM::DOMString &horizontalIdentifier, const DOM::DOMString &verticalIdentifier ); -}; - - - -class CSS2BorderSpacingImpl : public CSSValueImpl -{ -public: - CSS2BorderSpacingImpl(DocumentImpl *doc); - - ~CSS2BorderSpacingImpl(); - - unsigned short horizontalType() const; - unsigned short verticalType() const; - float getHorizontalSpacing ( const float &horizontalType ); - float getVerticalSpacing ( const float &verticalType ); - void setHorizontalSpacing ( const unsigned short &horizontalType, const float &value ); - void setVerticalSpacing ( const unsigned short &verticalType, const float &value ); - void setInherit(); -}; - - -class CSS2CounterIncrementImpl -{ -public: - CSS2CounterIncrementImpl(DocumentImpl *doc); - - ~CSS2CounterIncrementImpl(); - - short increment() const; - void setIncrement( const short & ); -}; - - -class CSS2CounterResetImpl -{ -public: - CSS2CounterResetImpl(DocumentImpl *doc); - - ~CSS2CounterResetImpl(); - - short reset() const; - void setReset( const short & ); -}; - - -class CSS2CursorImpl : public CSSValueImpl -{ -public: - CSS2CursorImpl(DocumentImpl *doc); - - ~CSS2CursorImpl(); - - unsigned short cursorType() const; - void setCursorType( const unsigned short & ); - - CSSValueList uris() const; -}; - - -class CSS2FontFaceSrcImpl -{ -public: - CSS2FontFaceSrcImpl(DocumentImpl *doc); - - ~CSS2FontFaceSrcImpl(); - - CSSValueList format() const; -}; - - -class CSS2FontFaceWidthsImpl -{ -public: - CSS2FontFaceWidthsImpl(DocumentImpl *doc); - - ~CSS2FontFaceWidthsImpl(); - - CSSValueList numbers() const; -}; - - -class CSS2PageSizeImpl : public CSSValueImpl -{ -public: - CSS2PageSizeImpl(DocumentImpl *doc); - - ~CSS2PageSizeImpl(); - - unsigned short widthType() const; - unsigned short heightType() const; - DOM::DOMString identifier() const; - float getWidth ( const float &widthType ); - float getHeightSize ( const float &heightType ); - void setWidthSize ( const unsigned short &widthType, const float &value ); - void setHeightSize ( const unsigned short &heightType, const float &value ); - void setIdentifier ( const DOM::DOMString &identifier ); -}; - - -class CSS2PlayDuringImpl : public CSSValueImpl -{ -public: - CSS2PlayDuringImpl(DocumentImpl *doc); - - ~CSS2PlayDuringImpl(); - - unsigned short playDuringType() const; - bool mix() const; - - void setMix( const bool & ); - bool repeat() const; - - void setRepeat( const bool & ); -}; - - -class CSS2PropertiesImpl -{ -public: - CSS2PropertiesImpl(DocumentImpl *doc); - - ~CSS2PropertiesImpl(); -}; - - -class CSS2TextShadowImpl -{ -public: - CSS2TextShadowImpl(DocumentImpl *doc); - - ~CSS2TextShadowImpl(); - - CSSValue color() const; - CSSValue horizontal() const; - CSSValue vertical() const; - CSSValue blur() const; -}; - - -}; // namespace - -#endif diff --git a/khtml/css/css_renderstyledeclarationimpl.cpp b/khtml/css/css_renderstyledeclarationimpl.cpp deleted file mode 100644 index daf607a9e..000000000 --- a/khtml/css/css_renderstyledeclarationimpl.cpp +++ /dev/null @@ -1,1147 +0,0 @@ -/** - * css_renderstyledeclarationimpl.cpp - * - * Copyright (C) 2004 Zack Rusin <zack@kde.org> - * Copyright (C) 2004,2005 Apple Computer, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301 USA - */ -#include "css_renderstyledeclarationimpl.h" - -#include "rendering/render_style.h" -#include "rendering/render_object.h" - -#include "cssproperties.h" -#include "cssvalues.h" - -using namespace DOM; -using namespace khtml; - -// List of all properties we know how to compute, omitting shorthands. -static const int computedProperties[] = { - CSS_PROP_BACKGROUND_COLOR, - CSS_PROP_BACKGROUND_IMAGE, - CSS_PROP_BACKGROUND_REPEAT, - CSS_PROP_BACKGROUND_ATTACHMENT, - CSS_PROP_BACKGROUND_POSITION, - CSS_PROP_BACKGROUND_POSITION_X, - CSS_PROP_BACKGROUND_POSITION_Y, - CSS_PROP_BORDER_COLLAPSE, - CSS_PROP_BORDER_SPACING, - CSS_PROP__KHTML_BORDER_HORIZONTAL_SPACING, - CSS_PROP__KHTML_BORDER_VERTICAL_SPACING, - CSS_PROP_BORDER_TOP_COLOR, - CSS_PROP_BORDER_RIGHT_COLOR, - CSS_PROP_BORDER_BOTTOM_COLOR, - CSS_PROP_BORDER_LEFT_COLOR, - CSS_PROP_BORDER_TOP_STYLE, - CSS_PROP_BORDER_RIGHT_STYLE, - CSS_PROP_BORDER_BOTTOM_STYLE, - CSS_PROP_BORDER_LEFT_STYLE, - CSS_PROP_BORDER_TOP_WIDTH, - CSS_PROP_BORDER_RIGHT_WIDTH, - CSS_PROP_BORDER_BOTTOM_WIDTH, - CSS_PROP_BORDER_LEFT_WIDTH, - CSS_PROP_BOTTOM, - CSS_PROP_CAPTION_SIDE, - CSS_PROP_CLEAR, - CSS_PROP_COLOR, - CSS_PROP_CURSOR, - CSS_PROP_DIRECTION, - CSS_PROP_DISPLAY, - CSS_PROP_EMPTY_CELLS, - CSS_PROP_FLOAT, - CSS_PROP_FONT_FAMILY, - CSS_PROP_FONT_SIZE, - CSS_PROP_FONT_STYLE, - CSS_PROP_FONT_VARIANT, - CSS_PROP_FONT_WEIGHT, - CSS_PROP_HEIGHT, - CSS_PROP_LEFT, - CSS_PROP_LETTER_SPACING, - CSS_PROP_LINE_HEIGHT, - CSS_PROP_LIST_STYLE_IMAGE, - CSS_PROP_LIST_STYLE_POSITION, - CSS_PROP_LIST_STYLE_TYPE, - CSS_PROP_MARGIN_TOP, - CSS_PROP_MARGIN_RIGHT, - CSS_PROP_MARGIN_BOTTOM, - CSS_PROP_MARGIN_LEFT, - CSS_PROP__KHTML_MARQUEE_DIRECTION, - CSS_PROP__KHTML_MARQUEE_INCREMENT, - CSS_PROP__KHTML_MARQUEE_REPETITION, - CSS_PROP__KHTML_MARQUEE_STYLE, - CSS_PROP_MAX_HEIGHT, - CSS_PROP_MAX_WIDTH, - CSS_PROP_MIN_HEIGHT, - CSS_PROP_MIN_WIDTH, - CSS_PROP_OPACITY, - CSS_PROP_ORPHANS, - CSS_PROP_OUTLINE_STYLE, - CSS_PROP_OVERFLOW, - CSS_PROP_OVERFLOW_X, - CSS_PROP_OVERFLOW_Y, - CSS_PROP_PADDING_TOP, - CSS_PROP_PADDING_RIGHT, - CSS_PROP_PADDING_BOTTOM, - CSS_PROP_PADDING_LEFT, - CSS_PROP_PAGE_BREAK_AFTER, - CSS_PROP_PAGE_BREAK_BEFORE, - CSS_PROP_PAGE_BREAK_INSIDE, - CSS_PROP_POSITION, - CSS_PROP_RIGHT, - CSS_PROP_TABLE_LAYOUT, - CSS_PROP_TEXT_ALIGN, - CSS_PROP_TEXT_DECORATION, - CSS_PROP_TEXT_INDENT, - CSS_PROP_TEXT_SHADOW, - CSS_PROP_TEXT_TRANSFORM, - CSS_PROP_TOP, - CSS_PROP_UNICODE_BIDI, - CSS_PROP_VERTICAL_ALIGN, - CSS_PROP_VISIBILITY, - CSS_PROP_WHITE_SPACE, - CSS_PROP_WIDOWS, - CSS_PROP_WIDTH, - CSS_PROP_WORD_SPACING, - CSS_PROP_Z_INDEX, -}; - -const unsigned numComputedProperties = sizeof(computedProperties) / sizeof(computedProperties[0]); - - -static CSSValueImpl *valueForLength(const Length &length, int max) -{ - if (length.isPercent()) { - return new CSSPrimitiveValueImpl(length.value(), CSSPrimitiveValue::CSS_PERCENTAGE); - } - else { - return new CSSPrimitiveValueImpl(length.minWidth(max), CSSPrimitiveValue::CSS_PX); - } -} - -static CSSValueImpl *valueForBorderStyle(EBorderStyle style) -{ - switch (style) { - case khtml::BNATIVE: - return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_NATIVE); - case khtml::BNONE: - return new CSSPrimitiveValueImpl(CSS_VAL_NONE); - case khtml::BHIDDEN: - return new CSSPrimitiveValueImpl(CSS_VAL_HIDDEN); - case khtml::INSET: - return new CSSPrimitiveValueImpl(CSS_VAL_INSET); - case khtml::GROOVE: - return new CSSPrimitiveValueImpl(CSS_VAL_GROOVE); - case khtml::RIDGE: - return new CSSPrimitiveValueImpl(CSS_VAL_RIDGE); - case khtml::OUTSET: - return new CSSPrimitiveValueImpl(CSS_VAL_OUTSET); - case khtml::DOTTED: - return new CSSPrimitiveValueImpl(CSS_VAL_DOTTED); - case khtml::DASHED: - return new CSSPrimitiveValueImpl(CSS_VAL_DASHED); - case khtml::SOLID: - return new CSSPrimitiveValueImpl(CSS_VAL_SOLID); - case khtml::DOUBLE: - return new CSSPrimitiveValueImpl(CSS_VAL_DOUBLE); - } - Q_ASSERT( 0 ); - return 0; -} - -static CSSValueImpl *valueForTextAlign(ETextAlign align) -{ - switch (align) { - case khtml::TAAUTO: - return new CSSPrimitiveValueImpl(CSS_VAL_AUTO); - case khtml::LEFT: - return new CSSPrimitiveValueImpl(CSS_VAL_LEFT); - case khtml::RIGHT: - return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT); - case khtml::CENTER: - return new CSSPrimitiveValueImpl(CSS_VAL_CENTER); - case khtml::JUSTIFY: - return new CSSPrimitiveValueImpl(CSS_VAL_JUSTIFY); - case khtml::KHTML_LEFT: - return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_LEFT); - case khtml::KHTML_RIGHT: - return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_RIGHT); - case khtml::KHTML_CENTER: - return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_CENTER); - } - Q_ASSERT( 0 ); - return 0; -} - -DOMString khtml::stringForListStyleType(EListStyleType type) -{ - switch (type) { - case khtml::LDISC: - return "disc"; - case khtml::LCIRCLE: - return "circle"; - case khtml::LSQUARE: - return "square"; - case khtml::LBOX: - return "box"; - case khtml::LDIAMOND: - return "-khtml-diamond"; - case khtml::LDECIMAL: - return "decimal"; - case khtml::DECIMAL_LEADING_ZERO: - return "decimal-leading-zero"; - case khtml::ARABIC_INDIC: - return "-khtml-arabic-indic"; - case khtml::LAO: - return "-khtml-lao"; - case khtml::PERSIAN: - return "-khtml-persian"; - case khtml::URDU: - return "-khtml-urdu"; - case khtml::THAI: - return "-khtml-thai"; - case khtml::TIBETAN: - return "-khtml-tibetan"; - case khtml::LOWER_ROMAN: - return "lower-roman"; - case khtml::UPPER_ROMAN: - return "upper-roman"; - case khtml::HEBREW: - return "hebrew"; - case khtml::ARMENIAN: - return "armenian"; - case khtml::GEORGIAN: - return "georgian"; - case khtml::CJK_IDEOGRAPHIC: - return "cjk-ideographic"; - case khtml::JAPANESE_FORMAL: - return "-khtml-japanese-formal"; - case khtml::JAPANESE_INFORMAL: - return "-khtml-japanese-informal"; - case khtml::SIMP_CHINESE_FORMAL: - return "-khtml-simp-chinese-formal"; - case khtml::SIMP_CHINESE_INFORMAL: - return "-khtml-simp-chinese-informal"; - case khtml::TRAD_CHINESE_FORMAL: - return "-khtml-trad-chinese-formal"; - case khtml::TRAD_CHINESE_INFORMAL: - return "-khtml-trad-chinese-informal"; - case khtml::LOWER_GREEK: - return "lower-greek"; - case khtml::UPPER_GREEK: - return "-khtml-upper-greek"; - case khtml::LOWER_ALPHA: - return "lower-alpha"; - case khtml::UPPER_ALPHA: - return "upper-alpha"; - case khtml::LOWER_LATIN: - return "lower-latin"; - case khtml::UPPER_LATIN: - return "upper-latin"; - case khtml::HIRAGANA: - return "hiragana"; - case khtml::KATAKANA: - return "katakana"; - case khtml::HIRAGANA_IROHA: - return "hiragana-iroha"; - case khtml::KATAKANA_IROHA: - return "katakana_iroha"; - case khtml::LNONE: - return "none"; - } - Q_ASSERT( 0 ); - return ""; -} - -static CSSPrimitiveValueImpl* valueForColor(TQColor color) -{ - if (color.isValid()) - return new CSSPrimitiveValueImpl(color.rgb());//### KDE4: use rgba! - else - return new CSSPrimitiveValueImpl(khtml::transparentColor); -} - -static CSSValueImpl* valueForShadow(const ShadowData *shadow) -{ - if (!shadow) - return new CSSPrimitiveValueImpl(CSS_VAL_NONE); - CSSValueListImpl *list = new CSSValueListImpl; - for (const ShadowData *s = shadow; s; s = s->next) { - CSSPrimitiveValueImpl *x = new CSSPrimitiveValueImpl(s->x, CSSPrimitiveValue::CSS_PX); - CSSPrimitiveValueImpl *y = new CSSPrimitiveValueImpl(s->y, CSSPrimitiveValue::CSS_PX); - CSSPrimitiveValueImpl *blur = new CSSPrimitiveValueImpl(s->blur, CSSPrimitiveValue::CSS_PX); - CSSPrimitiveValueImpl *color = valueForColor(s->color); - list->append(new ShadowValueImpl(x, y, blur, color)); - } - return list; -} - -static CSSValueImpl *getPositionOffsetValue(RenderObject *renderer, int propertyID) -{ - if (!renderer) - return 0; - - RenderStyle *style = renderer->style(); - if (!style) - return 0; - - Length l; - switch (propertyID) { - case CSS_PROP_LEFT: - l = style->left(); - break; - case CSS_PROP_RIGHT: - l = style->right(); - break; - case CSS_PROP_TOP: - l = style->top(); - break; - case CSS_PROP_BOTTOM: - l = style->bottom(); - break; - default: - return 0; - } - - if (renderer->isPositioned()) - return valueForLength(l, renderer->contentWidth()); - - if (renderer->isRelPositioned()) - // FIXME: It's not enough to simply return "auto" values for one offset if the other side is defined. - // In other words if left is auto and right is not auto, then left's computed value is negative right. - // So we should get the opposite length unit and see if it is auto. - return valueForLength(l, renderer->contentWidth()); - - return new CSSPrimitiveValueImpl(CSS_VAL_AUTO); - } - -RenderStyleDeclarationImpl::RenderStyleDeclarationImpl( DOM::NodeImpl *node ) - : CSSStyleDeclarationImpl(0), m_node(node) -{ - //kdDebug() << "Render Style Declaration created" << endl; -} - -RenderStyleDeclarationImpl::~RenderStyleDeclarationImpl() -{ - //kdDebug() << "Render Style Declaration destroyed" << endl; -} - -DOM::DOMString RenderStyleDeclarationImpl::cssText() const -{ - DOMString result; - - for (unsigned i = 0; i < numComputedProperties; i++) { - if (i != 0) - result += " "; - result += getPropertyName(computedProperties[i]); - result += ": "; - result += getPropertyValue(computedProperties[i]); - result += ";"; - } - - return result; -} - -void RenderStyleDeclarationImpl::setCssText( DOM::DOMString ) -{ - // ### report that this sucka is read only -} - -CSSValueImpl *RenderStyleDeclarationImpl::getPropertyCSSValue( int propertyID ) const -{ - NodeImpl *node = m_node.get(); - if (!node) - return 0; - - // Make sure our layout is up to date before we allow a query on these attributes. - DocumentImpl* docimpl = node->getDocument(); - if (docimpl) { - docimpl->updateLayout(); - } - - RenderObject *renderer = m_node->renderer(); - if (!renderer) - return 0; - RenderStyle *style = renderer->style(); - if (!style) - return 0; - - switch(propertyID) - { - case CSS_PROP_BACKGROUND_COLOR: - return valueForColor(style->backgroundColor()); - case CSS_PROP_BACKGROUND_IMAGE: - if (style->backgroundImage()) - return new CSSPrimitiveValueImpl(style->backgroundImage()->url(), - CSSPrimitiveValue::CSS_URI); - return new CSSPrimitiveValueImpl(CSS_VAL_NONE); - case CSS_PROP_BACKGROUND_REPEAT: - switch (style->backgroundRepeat()) { - case khtml::REPEAT: - return new CSSPrimitiveValueImpl(CSS_VAL_REPEAT); - case khtml::REPEAT_X: - return new CSSPrimitiveValueImpl(CSS_VAL_REPEAT_X); - case khtml::REPEAT_Y: - return new CSSPrimitiveValueImpl(CSS_VAL_REPEAT_Y); - case khtml::NO_REPEAT: - return new CSSPrimitiveValueImpl(CSS_VAL_NO_REPEAT); - default: - Q_ASSERT( 0 ); - } - case CSS_PROP_BACKGROUND_ATTACHMENT: - if (style->backgroundAttachment()) - return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL); - else - return new CSSPrimitiveValueImpl(CSS_VAL_FIXED); - case CSS_PROP_BACKGROUND_POSITION: - { - DOMString string; - Length length(style->backgroundXPosition()); - if (length.isPercent()) - string = TQString::number(length.value()) + "%"; - else - string = TQString::number(length.minWidth(renderer->contentWidth())); - string += " "; - length = style->backgroundYPosition(); - if (length.isPercent()) - string += TQString::number(length.value()) + "%"; - else - string += TQString::number(length.minWidth(renderer->contentWidth())); - return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING); - } - case CSS_PROP_BACKGROUND_POSITION_X: - return valueForLength(style->backgroundXPosition(), renderer->contentWidth()); - case CSS_PROP_BACKGROUND_POSITION_Y: - return valueForLength(style->backgroundYPosition(), renderer->contentHeight()); - case CSS_PROP_BORDER_COLLAPSE: - if (style->borderCollapse()) - return new CSSPrimitiveValueImpl(CSS_VAL_COLLAPSE); - else - return new CSSPrimitiveValueImpl(CSS_VAL_SEPARATE); - case CSS_PROP_BORDER_SPACING: - { - TQString string(TQString::number(style->borderHorizontalSpacing()) + - "px " + - TQString::number(style->borderVerticalSpacing()) + - "px"); - return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING); - } - case CSS_PROP__KHTML_BORDER_HORIZONTAL_SPACING: - return new CSSPrimitiveValueImpl(style->borderHorizontalSpacing(), - CSSPrimitiveValue::CSS_PX); - case CSS_PROP__KHTML_BORDER_VERTICAL_SPACING: - return new CSSPrimitiveValueImpl(style->borderVerticalSpacing(), - CSSPrimitiveValue::CSS_PX); - case CSS_PROP_BORDER_TOP_COLOR: - return valueForColor(style->borderTopColor()); - case CSS_PROP_BORDER_RIGHT_COLOR: - return valueForColor(style->borderRightColor()); - case CSS_PROP_BORDER_BOTTOM_COLOR: - return valueForColor(style->borderBottomColor()); - case CSS_PROP_BORDER_LEFT_COLOR: - return valueForColor(style->borderLeftColor()); - case CSS_PROP_BORDER_TOP_STYLE: - return valueForBorderStyle(style->borderTopStyle()); - case CSS_PROP_BORDER_RIGHT_STYLE: - return valueForBorderStyle(style->borderRightStyle()); - case CSS_PROP_BORDER_BOTTOM_STYLE: - return valueForBorderStyle(style->borderBottomStyle()); - case CSS_PROP_BORDER_LEFT_STYLE: - return valueForBorderStyle(style->borderLeftStyle()); - case CSS_PROP_BORDER_TOP_WIDTH: - return new CSSPrimitiveValueImpl( style->borderTopWidth(), CSSPrimitiveValue::CSS_PX ); - case CSS_PROP_BORDER_RIGHT_WIDTH: - return new CSSPrimitiveValueImpl( style->borderRightWidth(), CSSPrimitiveValue::CSS_PX ); - case CSS_PROP_BORDER_BOTTOM_WIDTH: - return new CSSPrimitiveValueImpl( style->borderBottomWidth(), CSSPrimitiveValue::CSS_PX ); - case CSS_PROP_BORDER_LEFT_WIDTH: - return new CSSPrimitiveValueImpl( style->borderLeftWidth(), CSSPrimitiveValue::CSS_PX ); - case CSS_PROP_BOTTOM: - return getPositionOffsetValue(renderer, CSS_PROP_BOTTOM); - case CSS_PROP_CAPTION_SIDE: - switch (style->captionSide()) { - case CAPLEFT: - return new CSSPrimitiveValueImpl(CSS_VAL_LEFT); - case CAPRIGHT: - return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT); - case CAPTOP: - return new CSSPrimitiveValueImpl(CSS_VAL_TOP); - case CAPBOTTOM: - return new CSSPrimitiveValueImpl(CSS_VAL_BOTTOM); - } - Q_ASSERT(0); - break; - case CSS_PROP_CLEAR: - switch (style->clear()) { - case CNONE: - return new CSSPrimitiveValueImpl(CSS_VAL_NONE); - case CLEFT: - return new CSSPrimitiveValueImpl(CSS_VAL_LEFT); - case CRIGHT: - return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT); - case CBOTH: - return new CSSPrimitiveValueImpl(CSS_VAL_BOTH); - } - Q_ASSERT(0); - break; - case CSS_PROP_CLIP: - break; - case CSS_PROP_COLOR: - return valueForColor(style->color()); - case CSS_PROP_CONTENT: - break; - case CSS_PROP_COUNTER_INCREMENT: - break; - case CSS_PROP_COUNTER_RESET: - break; - case CSS_PROP_CURSOR: - switch (style->cursor()) { - case CURSOR_AUTO: - return new CSSPrimitiveValueImpl(CSS_VAL_AUTO); - case CURSOR_CROSS: - return new CSSPrimitiveValueImpl(CSS_VAL_CROSSHAIR); - case CURSOR_DEFAULT: - return new CSSPrimitiveValueImpl(CSS_VAL_DEFAULT); - case CURSOR_POINTER: - return new CSSPrimitiveValueImpl(CSS_VAL_POINTER); - case CURSOR_MOVE: - return new CSSPrimitiveValueImpl(CSS_VAL_MOVE); - case CURSOR_PROGRESS: - return new CSSPrimitiveValueImpl(CSS_VAL_PROGRESS); - case CURSOR_E_RESIZE: - return new CSSPrimitiveValueImpl(CSS_VAL_E_RESIZE); - case CURSOR_NE_RESIZE: - return new CSSPrimitiveValueImpl(CSS_VAL_NE_RESIZE); - case CURSOR_NW_RESIZE: - return new CSSPrimitiveValueImpl(CSS_VAL_NW_RESIZE); - case CURSOR_N_RESIZE: - return new CSSPrimitiveValueImpl(CSS_VAL_N_RESIZE); - case CURSOR_SE_RESIZE: - return new CSSPrimitiveValueImpl(CSS_VAL_SE_RESIZE); - case CURSOR_SW_RESIZE: - return new CSSPrimitiveValueImpl(CSS_VAL_SW_RESIZE); - case CURSOR_S_RESIZE: - return new CSSPrimitiveValueImpl(CSS_VAL_S_RESIZE); - case CURSOR_W_RESIZE: - return new CSSPrimitiveValueImpl(CSS_VAL_W_RESIZE); - case CURSOR_TEXT: - return new CSSPrimitiveValueImpl(CSS_VAL_TEXT); - case CURSOR_WAIT: - return new CSSPrimitiveValueImpl(CSS_VAL_WAIT); - case CURSOR_HELP: - return new CSSPrimitiveValueImpl(CSS_VAL_HELP); - } - Q_ASSERT(0); - break; - case CSS_PROP_DIRECTION: - switch (style->direction()) { - case LTR: - return new CSSPrimitiveValueImpl(CSS_VAL_LTR); - case RTL: - return new CSSPrimitiveValueImpl(CSS_VAL_RTL); - } - Q_ASSERT(0); - break; - case CSS_PROP_DISPLAY: - switch (style->display()) { - case INLINE: - return new CSSPrimitiveValueImpl(CSS_VAL_INLINE); - case BLOCK: - return new CSSPrimitiveValueImpl(CSS_VAL_BLOCK); - case LIST_ITEM: - return new CSSPrimitiveValueImpl(CSS_VAL_LIST_ITEM); - case RUN_IN: - return new CSSPrimitiveValueImpl(CSS_VAL_RUN_IN); - case COMPACT: - return new CSSPrimitiveValueImpl(CSS_VAL_COMPACT); - case INLINE_BLOCK: - return new CSSPrimitiveValueImpl(CSS_VAL_INLINE_BLOCK); - case TABLE: - return new CSSPrimitiveValueImpl(CSS_VAL_TABLE); - case INLINE_TABLE: - return new CSSPrimitiveValueImpl(CSS_VAL_INLINE_TABLE); - case TABLE_ROW_GROUP: - return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_ROW_GROUP); - case TABLE_HEADER_GROUP: - return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_HEADER_GROUP); - case TABLE_FOOTER_GROUP: - return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_FOOTER_GROUP); - case TABLE_ROW: - return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_ROW); - case TABLE_COLUMN_GROUP: - return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_COLUMN_GROUP); - case TABLE_COLUMN: - return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_COLUMN); - case TABLE_CELL: - return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_CELL); - case TABLE_CAPTION: - return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_CAPTION); - case NONE: - return new CSSPrimitiveValueImpl(CSS_VAL_NONE); - } - Q_ASSERT( 0 ); - break; - case CSS_PROP_EMPTY_CELLS: - switch (style->emptyCells()) { - case SHOW: - return new CSSPrimitiveValueImpl(CSS_VAL_SHOW); - case HIDE: - return new CSSPrimitiveValueImpl(CSS_VAL_HIDE); - } - Q_ASSERT( 0 ); - break; - case CSS_PROP_FLOAT: - { - switch (style->floating()) { - case FNONE: - return new CSSPrimitiveValueImpl(CSS_VAL_NONE); - case FLEFT: - return new CSSPrimitiveValueImpl(CSS_VAL_LEFT); - case FRIGHT: - return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT); - case FLEFT_ALIGN: - return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_LEFT); - case FRIGHT_ALIGN: - return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_RIGHT); - } - } - case CSS_PROP_FONT_FAMILY: - { - FontDef def = style->htmlFont().getFontDef(); - return new CSSPrimitiveValueImpl(def.family, CSSPrimitiveValue::CSS_STRING); - } - case CSS_PROP_FONT_SIZE: - { - FontDef def = style->htmlFont().getFontDef(); - return new CSSPrimitiveValueImpl(def.size, CSSPrimitiveValue::CSS_PX); - } - case CSS_PROP_FONT_STYLE: - { - // FIXME: handle oblique - FontDef def = style->htmlFont().getFontDef(); - if (def.italic) - return new CSSPrimitiveValueImpl(CSS_VAL_ITALIC); - else - return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL); - } - case CSS_PROP_FONT_VARIANT: - { - FontDef def = style->htmlFont().getFontDef(); - if (def.smallCaps) - return new CSSPrimitiveValueImpl(CSS_VAL_SMALL_CAPS); - else - return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL); - } - case CSS_PROP_FONT_WEIGHT: - { - // FIXME: this does not reflect the full range of weights - // that can be expressed with CSS - FontDef def = style->htmlFont().getFontDef(); - if (def.weight == TQFont::Bold) - return new CSSPrimitiveValueImpl(CSS_VAL_BOLD); - else - return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL); - } - case CSS_PROP_HEIGHT: - return new CSSPrimitiveValueImpl(renderer->contentHeight(), CSSPrimitiveValue::CSS_PX); - case CSS_PROP_LEFT: - return getPositionOffsetValue(renderer, CSS_PROP_LEFT); - case CSS_PROP_LETTER_SPACING: - if (style->letterSpacing() == 0) - return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL); - return new CSSPrimitiveValueImpl(style->letterSpacing(), CSSPrimitiveValue::CSS_PX); - case CSS_PROP_LINE_HEIGHT: - { - // Note: internally a specified <number> value gets encoded as a percentage, - // so the isPercent() case corresponds to the <number> case; - // values < 0 are used to mark "normal"; and specified %% - // get computed down to px by the time they get to RenderStyle - // already - Length length(style->lineHeight()); - if (length.value() < 0) - return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL); - if (length.isPercent()) { - //XXX: merge from webcore the computedStyle/specifiedStyle distinction in rendering/font.h - float computedSize = style->htmlFont().getFontDef().size; - return new CSSPrimitiveValueImpl((int)(length.value() * computedSize) / 100, CSSPrimitiveValue::CSS_PX); - } - else { - return new CSSPrimitiveValueImpl(length.value(), CSSPrimitiveValue::CSS_PX); - } - } - case CSS_PROP_LIST_STYLE_IMAGE: - if (style->listStyleImage()) - return new CSSPrimitiveValueImpl(style->listStyleImage()->url(), CSSPrimitiveValue::CSS_URI); - return new CSSPrimitiveValueImpl(CSS_VAL_NONE); - case CSS_PROP_LIST_STYLE_POSITION: - switch (style->listStylePosition()) { - case OUTSIDE: - return new CSSPrimitiveValueImpl(CSS_VAL_OUTSIDE); - case INSIDE: - return new CSSPrimitiveValueImpl(CSS_VAL_INSIDE); - } - Q_ASSERT( 0 ); - break; - case CSS_PROP_LIST_STYLE_TYPE: - return new CSSPrimitiveValueImpl(stringForListStyleType(style->listStyleType()), CSSPrimitiveValue::CSS_STRING); - case CSS_PROP_MARGIN_TOP: - return valueForLength(style->marginTop(), renderer->contentHeight()); - case CSS_PROP_MARGIN_RIGHT: - return valueForLength(style->marginRight(), renderer->contentWidth()); - case CSS_PROP_MARGIN_BOTTOM: - return valueForLength(style->marginBottom(), renderer->contentHeight()); - case CSS_PROP_MARGIN_LEFT: - return valueForLength(style->marginLeft(), renderer->contentWidth()); - case CSS_PROP__KHTML_MARQUEE: - // FIXME: unimplemented - break; - case CSS_PROP__KHTML_MARQUEE_DIRECTION: - switch (style->marqueeDirection()) { - case MFORWARD: - return new CSSPrimitiveValueImpl(CSS_VAL_FORWARDS); - case MBACKWARD: - return new CSSPrimitiveValueImpl(CSS_VAL_BACKWARDS); - case MAUTO: - return new CSSPrimitiveValueImpl(CSS_VAL_AUTO); - case MUP: - return new CSSPrimitiveValueImpl(CSS_VAL_UP); - case MDOWN: - return new CSSPrimitiveValueImpl(CSS_VAL_DOWN); - case MLEFT: - return new CSSPrimitiveValueImpl(CSS_VAL_LEFT); - case MRIGHT: - return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT); - } - Q_ASSERT(0); - return 0; - case CSS_PROP__KHTML_MARQUEE_INCREMENT: - return valueForLength(style->marqueeIncrement(), renderer->contentWidth()); - case CSS_PROP__KHTML_MARQUEE_REPETITION: - if (style->marqueeLoopCount() < 0) - return new CSSPrimitiveValueImpl(CSS_VAL_INFINITE); - return new CSSPrimitiveValueImpl(style->marqueeLoopCount(), CSSPrimitiveValue::CSS_NUMBER); - case CSS_PROP__KHTML_MARQUEE_SPEED: - // FIXME: unimplemented - break; - case CSS_PROP__KHTML_MARQUEE_STYLE: - switch (style->marqueeBehavior()) { - case MNONE: - return new CSSPrimitiveValueImpl(CSS_VAL_NONE); - case MSCROLL: - return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL); - case MSLIDE: - return new CSSPrimitiveValueImpl(CSS_VAL_SLIDE); - case MALTERNATE: - return new CSSPrimitiveValueImpl(CSS_VAL_ALTERNATE); - case MUNFURL: - return new CSSPrimitiveValueImpl(CSS_VAL_UNFURL); - } - Q_ASSERT(0); - return 0; - case CSS_PROP_MAX_HEIGHT: - return new CSSPrimitiveValueImpl( renderer->availableHeight(), - CSSPrimitiveValue::CSS_PX ); - break; - case CSS_PROP_MAX_WIDTH: - return new CSSPrimitiveValueImpl( renderer->maxWidth(), - CSSPrimitiveValue::CSS_PX ); - break; - case CSS_PROP_MIN_HEIGHT: - return new CSSPrimitiveValueImpl( renderer->contentHeight(), - CSSPrimitiveValue::CSS_PX ); - break; - case CSS_PROP_MIN_WIDTH: - return new CSSPrimitiveValueImpl( renderer->minWidth(), - CSSPrimitiveValue::CSS_PX ); - break; - case CSS_PROP_OPACITY: - return new CSSPrimitiveValueImpl(style->opacity(), CSSPrimitiveValue::CSS_NUMBER); - case CSS_PROP_ORPHANS: - return new CSSPrimitiveValueImpl(style->orphans(), CSSPrimitiveValue::CSS_NUMBER); - case CSS_PROP_OUTLINE_COLOR: - break; - case CSS_PROP_OUTLINE_OFFSET: - break; - case CSS_PROP_OUTLINE_STYLE: - if (style->outlineStyleIsAuto()) - return new CSSPrimitiveValueImpl(CSS_VAL_AUTO); - return valueForBorderStyle(style->outlineStyle()); - case CSS_PROP_OUTLINE_WIDTH: - break; - case CSS_PROP_OVERFLOW: - case CSS_PROP_OVERFLOW_X: - case CSS_PROP_OVERFLOW_Y: { - EOverflow overflow; - switch (propertyID) { - case CSS_PROP_OVERFLOW_X: - overflow = style->overflowX(); - break; - case CSS_PROP_OVERFLOW_Y: - overflow = style->overflowY(); - break; - default: - overflow = kMax(style->overflowX(), style->overflowY()); - } - switch (overflow) { - case OVISIBLE: - return new CSSPrimitiveValueImpl(CSS_VAL_VISIBLE); - case OHIDDEN: - return new CSSPrimitiveValueImpl(CSS_VAL_HIDDEN); - case OSCROLL: - return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL); - case OAUTO: - return new CSSPrimitiveValueImpl(CSS_VAL_AUTO); - case OMARQUEE: - return new CSSPrimitiveValueImpl(CSS_VAL_MARQUEE); - } - Q_ASSERT(0); - return 0; - } - case CSS_PROP_PADDING_TOP: - return valueForLength(style->paddingTop(), renderer->contentHeight()); - case CSS_PROP_PADDING_RIGHT: - return valueForLength(style->paddingRight(), renderer->contentWidth()); - case CSS_PROP_PADDING_BOTTOM: - return valueForLength(style->paddingBottom(), renderer->contentHeight()); - case CSS_PROP_PADDING_LEFT: - return valueForLength(style->paddingLeft(), renderer->contentWidth()); - case CSS_PROP_PAGE_BREAK_AFTER: - switch (style->pageBreakAfter()) { - case PBAUTO: - return new CSSPrimitiveValueImpl(CSS_VAL_AUTO); - case PBALWAYS: - return new CSSPrimitiveValueImpl(CSS_VAL_ALWAYS); - case PBAVOID: - return new CSSPrimitiveValueImpl(CSS_VAL_AVOID); - case PBLEFT: - return new CSSPrimitiveValueImpl(CSS_VAL_LEFT); - case PBRIGHT: - return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT); - } - Q_ASSERT(0); - break; - case CSS_PROP_PAGE_BREAK_BEFORE: - switch (style->pageBreakBefore()) { - case PBAUTO: - return new CSSPrimitiveValueImpl(CSS_VAL_AUTO); - case PBALWAYS: - return new CSSPrimitiveValueImpl(CSS_VAL_ALWAYS); - case PBAVOID: - return new CSSPrimitiveValueImpl(CSS_VAL_AVOID); - case PBLEFT: - return new CSSPrimitiveValueImpl(CSS_VAL_LEFT); - case PBRIGHT: - return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT); - } - Q_ASSERT(0); - break; - case CSS_PROP_PAGE_BREAK_INSIDE: - if (style->pageBreakInside()) - return new CSSPrimitiveValueImpl(CSS_VAL_AUTO); - else - return new CSSPrimitiveValueImpl(CSS_VAL_AVOID); - Q_ASSERT(0); - break; - case CSS_PROP_POSITION: - switch (style->position()) { - case STATIC: - return new CSSPrimitiveValueImpl(CSS_VAL_STATIC); - case RELATIVE: - return new CSSPrimitiveValueImpl(CSS_VAL_RELATIVE); - case ABSOLUTE: - return new CSSPrimitiveValueImpl(CSS_VAL_ABSOLUTE); - case FIXED: - return new CSSPrimitiveValueImpl(CSS_VAL_FIXED); - } - Q_ASSERT(0); - break; - case CSS_PROP_QUOTES: - break; - case CSS_PROP_RIGHT: - return getPositionOffsetValue(renderer, CSS_PROP_RIGHT); - case CSS_PROP_SIZE: - break; - case CSS_PROP_TABLE_LAYOUT: - switch (style->tableLayout()) { - case TAUTO: - return new CSSPrimitiveValueImpl(CSS_VAL_AUTO); - case TFIXED: - return new CSSPrimitiveValueImpl(CSS_VAL_FIXED); - } - Q_ASSERT(0); - break; - case CSS_PROP_TEXT_ALIGN: - return valueForTextAlign(style->textAlign()); - case CSS_PROP_TEXT_DECORATION: - { - TQString string; - if (style->textDecoration() & khtml::UNDERLINE) - string += "underline"; - if (style->textDecoration() & khtml::OVERLINE) { - if (string.length() > 0) - string += " "; - string += "overline"; - } - if (style->textDecoration() & khtml::LINE_THROUGH) { - if (string.length() > 0) - string += " "; - string += "line-through"; - } - if (style->textDecoration() & khtml::BLINK) { - if (string.length() > 0) - string += " "; - string += "blink"; - } - if (string.length() == 0) - string = "none"; - return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING); - } - case CSS_PROP_TEXT_INDENT: - return valueForLength(style->textIndent(), renderer->contentWidth()); - case CSS_PROP_TEXT_SHADOW: - return valueForShadow(style->textShadow()); - case CSS_PROP_TEXT_TRANSFORM: - switch (style->textTransform()) { - case CAPITALIZE: - return new CSSPrimitiveValueImpl(CSS_VAL_CAPITALIZE); - case UPPERCASE: - return new CSSPrimitiveValueImpl(CSS_VAL_UPPERCASE); - case LOWERCASE: - return new CSSPrimitiveValueImpl(CSS_VAL_LOWERCASE); - case TTNONE: - return new CSSPrimitiveValueImpl(CSS_VAL_NONE); - } - Q_ASSERT(0); - break; - case CSS_PROP_TOP: - return getPositionOffsetValue(renderer, CSS_PROP_TOP); - case CSS_PROP_UNICODE_BIDI: - switch (style->unicodeBidi()) { - case UBNormal: - return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL); - case Embed: - return new CSSPrimitiveValueImpl(CSS_VAL_EMBED); - case Override: - return new CSSPrimitiveValueImpl(CSS_VAL_BIDI_OVERRIDE); - } - Q_ASSERT(0); - break; - case CSS_PROP_VERTICAL_ALIGN: - { - switch (style->verticalAlign()) { - case BASELINE: - return new CSSPrimitiveValueImpl(CSS_VAL_BASELINE); - case MIDDLE: - return new CSSPrimitiveValueImpl(CSS_VAL_MIDDLE); - case SUB: - return new CSSPrimitiveValueImpl(CSS_VAL_SUB); - case SUPER: - return new CSSPrimitiveValueImpl(CSS_VAL_SUPER); - case TEXT_TOP: - return new CSSPrimitiveValueImpl(CSS_VAL_TEXT_TOP); - case TEXT_BOTTOM: - return new CSSPrimitiveValueImpl(CSS_VAL_TEXT_BOTTOM); - case TOP: - return new CSSPrimitiveValueImpl(CSS_VAL_TOP); - case BOTTOM: - return new CSSPrimitiveValueImpl(CSS_VAL_BOTTOM); - case BASELINE_MIDDLE: - return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_BASELINE_MIDDLE); - case LENGTH: - return valueForLength(style->verticalAlignLength(), renderer->contentWidth()); - } - Q_ASSERT(0); - break; - } - case CSS_PROP_VISIBILITY: - switch (style->visibility()) { - case khtml::VISIBLE: - return new CSSPrimitiveValueImpl(CSS_VAL_VISIBLE); - case khtml::HIDDEN: - return new CSSPrimitiveValueImpl(CSS_VAL_HIDDEN); - case khtml::COLLAPSE: - return new CSSPrimitiveValueImpl(CSS_VAL_COLLAPSE); - } - Q_ASSERT(0); - break; - case CSS_PROP_WHITE_SPACE: - { - switch (style->whiteSpace()) { - case NORMAL: - return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL); - case PRE: - return new CSSPrimitiveValueImpl(CSS_VAL_PRE); - case PRE_WRAP: - return new CSSPrimitiveValueImpl(CSS_VAL_PRE_WRAP); - case PRE_LINE: - return new CSSPrimitiveValueImpl(CSS_VAL_PRE_LINE); - case NOWRAP: - return new CSSPrimitiveValueImpl(CSS_VAL_NOWRAP); - case KHTML_NOWRAP: - return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_NOWRAP); - } - Q_ASSERT(0); - break; - } - case CSS_PROP_WIDOWS: - return new CSSPrimitiveValueImpl(style->widows(), CSSPrimitiveValue::CSS_NUMBER); - case CSS_PROP_WIDTH: - return new CSSPrimitiveValueImpl( renderer->contentWidth(), - CSSPrimitiveValue::CSS_PX ); - case CSS_PROP_WORD_SPACING: - return new CSSPrimitiveValueImpl(style->wordSpacing(), CSSPrimitiveValue::CSS_PX); - case CSS_PROP_Z_INDEX: - if (style->hasAutoZIndex()) - return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL); - return new CSSPrimitiveValueImpl(style->zIndex(), CSSPrimitiveValue::CSS_NUMBER); - case CSS_PROP_BACKGROUND: - break; - case CSS_PROP_BORDER: - break; - case CSS_PROP_BORDER_COLOR: - break; - case CSS_PROP_BORDER_STYLE: - break; - case CSS_PROP_BORDER_TOP: - return new CSSPrimitiveValueImpl( renderer->borderTop(), - CSSPrimitiveValue::CSS_PX ); - break; - case CSS_PROP_BORDER_RIGHT: - return new CSSPrimitiveValueImpl( renderer->borderRight(), - CSSPrimitiveValue::CSS_PX ); - break; - case CSS_PROP_BORDER_BOTTOM: - return new CSSPrimitiveValueImpl( renderer->borderBottom(), - CSSPrimitiveValue::CSS_PX ); - break; - case CSS_PROP_BORDER_LEFT: - return new CSSPrimitiveValueImpl( renderer->borderLeft(), - CSSPrimitiveValue::CSS_PX ); - break; - case CSS_PROP_BORDER_WIDTH: - break; - case CSS_PROP_FONT: - break; - case CSS_PROP_LIST_STYLE: - break; - case CSS_PROP_MARGIN: - break; - case CSS_PROP_OUTLINE: - break; - case CSS_PROP_PADDING: - break; - case CSS_PROP_SCROLLBAR_BASE_COLOR: - break; - case CSS_PROP_SCROLLBAR_FACE_COLOR: - break; - case CSS_PROP_SCROLLBAR_SHADOW_COLOR: - break; - case CSS_PROP_SCROLLBAR_HIGHLIGHT_COLOR: - break; - case CSS_PROP_SCROLLBAR_3DLIGHT_COLOR: - break; - case CSS_PROP_SCROLLBAR_DARKSHADOW_COLOR: - break; - case CSS_PROP_SCROLLBAR_TRACK_COLOR: - break; - case CSS_PROP_SCROLLBAR_ARROW_COLOR: - break; - case CSS_PROP__KHTML_FLOW_MODE: - break; - case CSS_PROP__KHTML_USER_INPUT: - break; - default: - Q_ASSERT( 0 ); - break; - } - return 0; -} - -DOMString RenderStyleDeclarationImpl::getPropertyValue( int propertyID ) const -{ - CSSValueImpl* value = getPropertyCSSValue(propertyID); - if (value) { - DOMString val = value->cssText(); - delete value; - return val; - } - return ""; -} - -bool RenderStyleDeclarationImpl::getPropertyPriority( int ) const -{ - // All computed styles have a priority of false (not "important"). - return false; -} - -DOM::DOMString RenderStyleDeclarationImpl::removeProperty( int, bool ) -{ - // ### emit error since we're read-only - return DOMString(); -} - -bool RenderStyleDeclarationImpl::setProperty ( int, const DOM::DOMString&, bool, - bool ) -{ - // ### emit error since we're read-only - return false; -} - -void RenderStyleDeclarationImpl::setProperty ( int, int, bool, - bool ) -{ - // ### emit error since we're read-only -} - -void RenderStyleDeclarationImpl::setLengthProperty( int, const DOM::DOMString&, bool, - bool, bool ) -{ - // ### emit error since we're read-only -} - -void RenderStyleDeclarationImpl::setProperty( const DOMString& ) -{ - // ### emit error since we're read-only -} - -unsigned long RenderStyleDeclarationImpl::length() const -{ - return numComputedProperties; -} - -DOM::DOMString RenderStyleDeclarationImpl::item( unsigned long i ) const -{ - if (i >= numComputedProperties) - return DOMString(); - - return getPropertyName(computedProperties[i]); -} - -CSSProperty RenderStyleDeclarationImpl::property( int id ) const -{ - CSSProperty prop; - prop.m_id = id; - prop.m_important = false; - prop.nonCSSHint = false; - - CSSValueImpl* v = getPropertyCSSValue( id ); - if ( !v ) - v = new CSSPrimitiveValueImpl; - prop.setValue( v ); - return prop; -} - diff --git a/khtml/css/css_renderstyledeclarationimpl.h b/khtml/css/css_renderstyledeclarationimpl.h deleted file mode 100644 index d35983993..000000000 --- a/khtml/css/css_renderstyledeclarationimpl.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * css_renderstyleimpl.h - * - * Copyright (C) 2004 Zack Rusin <zack@kde.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301 USA - */ -#ifndef CSS_RENDERSTYLEIMPL_H -#define CSS_RENDERSTYLEIMPL_H - -#include "css/css_valueimpl.h" -#include "dom/dom_string.h" -#include "rendering/render_style.h" - - -namespace DOM { - class NodeImpl; -} - -namespace khtml { - -class RenderObject; - - -// Used by DOM::Counter::listStyle() -DOM::DOMString stringForListStyleType(khtml::EListStyleType type); - -class RenderStyleDeclarationImpl : public DOM::CSSStyleDeclarationImpl -{ -public: - RenderStyleDeclarationImpl( DOM::NodeImpl *node ); - virtual ~RenderStyleDeclarationImpl(); - - DOM::DOMString cssText() const; - void setCssText( DOM::DOMString str ); - - DOM::CSSValueImpl *getPropertyCSSValue( int propertyID ) const; - DOM::DOMString getPropertyValue( int propertyID ) const; - bool getPropertyPriority( int propertyID ) const; - unsigned long length() const; - - DOM::DOMString removeProperty( int propertyID, bool NonCSSHints = false ); - bool setProperty ( int propertyId, const DOM::DOMString &value, bool important = false, - bool nonCSSHint = false); - void setProperty ( int propertyId, int value, bool important = false, bool nonCSSHint = false); - void setLengthProperty(int id, const DOM::DOMString &value, bool important, - bool nonCSSHint = true, bool multiLength = false); - - void setProperty ( const DOM::DOMString &propertyString); - DOM::DOMString item ( unsigned long index ) const; - -protected: - DOM::CSSProperty property( int id ) const; - -protected: - SharedPtr<DOM::NodeImpl> m_node; -}; - - -} - -#endif diff --git a/khtml/css/css_ruleimpl.cpp b/khtml/css/css_ruleimpl.cpp deleted file mode 100644 index 0bf675484..000000000 --- a/khtml/css/css_ruleimpl.cpp +++ /dev/null @@ -1,391 +0,0 @@ -/** - * This file is part of the DOM implementation for KDE. - * - * (C) 1999-2003 Lars Knoll (knoll@kde.org) - * (C) 2002-2003 Dirk Mueller (mueller@kde.org) - * Copyright (C) 2002 Apple Computer, Inc. - * - * 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. - */ -#include "dom/css_rule.h" -#include "dom/css_stylesheet.h" -#include "dom/dom_exception.h" -#include "dom/dom_string.h" - -#include "css/css_stylesheetimpl.h" -#include "css/css_valueimpl.h" -#include "css/cssparser.h" -#include "css/css_ruleimpl.h" - -#include "misc/loader.h" -#include "misc/htmltags.h" -#include "misc/htmlattrs.h" -#include "xml/dom_docimpl.h" - -using namespace DOM; - -#include <kdebug.h> - -CSSStyleSheetImpl *CSSRuleImpl::parentStyleSheet() const -{ - return ( m_parent && m_parent->isCSSStyleSheet() ) ? - static_cast<CSSStyleSheetImpl *>(m_parent) : 0; -} - -CSSRuleImpl *CSSRuleImpl::parentRule() const -{ - return ( m_parent && m_parent->isRule() ) ? - static_cast<CSSRuleImpl *>(m_parent) : 0; -} - -DOM::DOMString CSSRuleImpl::cssText() const -{ - // ### - return DOMString(); -} - -void CSSRuleImpl::setCssText(DOM::DOMString /*str*/) -{ - // ### -} - -// --------------------------------------------------------------------------- - -CSSFontFaceRuleImpl::CSSFontFaceRuleImpl(StyleBaseImpl *parent) - : CSSRuleImpl(parent) -{ - m_type = CSSRule::FONT_FACE_RULE; - m_style = 0; -} - -CSSFontFaceRuleImpl::~CSSFontFaceRuleImpl() -{ - if(m_style) m_style->deref(); -} - -// -------------------------------------------------------------------------- - -CSSImportRuleImpl::CSSImportRuleImpl( StyleBaseImpl *parent, - const DOM::DOMString &href, - MediaListImpl *media ) - : CSSRuleImpl(parent) -{ - m_type = CSSRule::IMPORT_RULE; - - m_lstMedia = media; - if ( !m_lstMedia ) - m_lstMedia = new MediaListImpl( this, DOMString() ); - m_lstMedia->setParent( this ); - m_lstMedia->ref(); - - m_strHref = href; - m_styleSheet = 0; - - m_cachedSheet = 0; - - init(); -} -CSSImportRuleImpl::CSSImportRuleImpl( StyleBaseImpl *parent, - const DOM::DOMString &href, - const DOM::DOMString &media ) - : CSSRuleImpl(parent) -{ - m_type = CSSRule::IMPORT_RULE; - - m_lstMedia = new MediaListImpl( this, media ); - m_lstMedia->ref(); - - m_strHref = href; - m_styleSheet = 0; - - m_cachedSheet = 0; - - init(); -} - -CSSImportRuleImpl::~CSSImportRuleImpl() -{ - if( m_lstMedia ) { - m_lstMedia->setParent( 0 ); - m_lstMedia->deref(); - } - if(m_styleSheet) { - m_styleSheet->setParent(0); - m_styleSheet->deref(); - } - - if(m_cachedSheet) m_cachedSheet->deref(this); -} - -void CSSImportRuleImpl::setStyleSheet(const DOM::DOMString &url, const DOM::DOMString &sheet, const DOM::DOMString &charset) -{ - if ( m_styleSheet ) { - m_styleSheet->setParent(0); - m_styleSheet->deref(); - } - m_styleSheet = new CSSStyleSheetImpl(this, url); - m_styleSheet->setCharset(charset); - m_styleSheet->ref(); - - CSSStyleSheetImpl *parent = parentStyleSheet(); - m_styleSheet->parseString( sheet, parent ? parent->useStrictParsing() : true ); - m_loading = false; - m_done = true; - - checkLoaded(); -} - -void CSSImportRuleImpl::error(int /*err*/, const TQString &/*text*/) -{ - if ( m_styleSheet ) { - m_styleSheet->setParent(0); - m_styleSheet->deref(); - } - m_styleSheet = 0; - - m_loading = false; - m_done = true; - - checkLoaded(); -} - -bool CSSImportRuleImpl::isLoading() -{ - return ( m_loading || (m_styleSheet && m_styleSheet->isLoading()) ); -} - -void CSSImportRuleImpl::init() -{ - m_loading = 0; - m_done = false; - khtml::DocLoader *docLoader = 0; - StyleBaseImpl *root = this; - StyleBaseImpl *parent; - while ( ( parent = root->parent()) ) - root = parent; - if (root->isCSSStyleSheet()) - docLoader = static_cast<CSSStyleSheetImpl*>(root)->docLoader(); - - DOMString absHref = m_strHref; - CSSStyleSheetImpl *parentSheet = parentStyleSheet(); - if (!parentSheet->href().isNull()) { - // use parent styleheet's URL as the base URL - absHref = KURL(KURL( parentSheet->href().string() ),m_strHref.string()).url(); - } -/* - else { - // use documents's URL as the base URL - DocumentImpl *doc = static_cast<CSSStyleSheetImpl*>(root)->doc(); - absHref = KURL(doc->URL(),m_strHref.string()).url(); - } -*/ - // Check for a cycle in our import chain. If we encounter a stylesheet - // in our parent chain with the same URL, then just bail. - for ( parent = static_cast<StyleBaseImpl*>( this )->parent(); - parent; - parent = parent->parent() ) - if ( absHref == parent->baseURL().url() ) - return; - - m_cachedSheet = docLoader->requestStyleSheet(absHref, parentStyleSheet()->charset().string()); - - if (m_cachedSheet) - { - m_cachedSheet->ref(this); - - // If the imported sheet is in the cache, then setStyleSheet gets called, - // and the sheet even gets parsed (via parseString). In this case we have - // loaded (even if our subresources haven't), so if we have stylesheet after - // checking the cache, then we've clearly loaded. -dwh - // This can also happen when error() is called from within ref(). In either case, - // m_done is set to true. - if (!m_done) - m_loading = true; - } -} - -// -------------------------------------------------------------------------- -CSSMediaRuleImpl::CSSMediaRuleImpl( StyleBaseImpl *parent, MediaListImpl *mediaList, CSSRuleListImpl *ruleList ) - : CSSRuleImpl( parent ) -{ - m_type = CSSRule::MEDIA_RULE; - m_lstMedia = mediaList; - m_lstMedia->ref(); - m_lstCSSRules = ruleList; - m_lstCSSRules->ref(); -} - -CSSMediaRuleImpl::CSSMediaRuleImpl(StyleBaseImpl *parent) - : CSSRuleImpl( parent ) -{ - m_type = CSSRule::MEDIA_RULE; - m_lstMedia = 0; - m_lstCSSRules = new CSSRuleListImpl(); - m_lstCSSRules->ref(); -} - -CSSMediaRuleImpl::CSSMediaRuleImpl( StyleBaseImpl *parent, const DOM::DOMString &media ) -: CSSRuleImpl( parent ) -{ - m_type = CSSRule::MEDIA_RULE; - m_lstMedia = new MediaListImpl( this, media ); - m_lstMedia->ref(); - m_lstCSSRules = new CSSRuleListImpl(); - m_lstCSSRules->ref(); -} - -CSSMediaRuleImpl::~CSSMediaRuleImpl() -{ - if( m_lstMedia ) { - m_lstMedia->setParent( 0 ); - m_lstMedia->deref(); - } - for ( unsigned int i = 0; i < m_lstCSSRules->length(); ++i ) - m_lstCSSRules->item( i )->setParent( 0 ); - m_lstCSSRules->deref(); -} - -unsigned long CSSMediaRuleImpl::append( CSSRuleImpl *rule ) -{ - return rule ? m_lstCSSRules->insertRule( rule, m_lstCSSRules->length() ) : 0; -} - -unsigned long CSSMediaRuleImpl::insertRule( const DOMString &rule, - unsigned long index ) -{ - CSSParser p( strictParsing ); - CSSRuleImpl *newRule = p.parseRule( parentStyleSheet(), rule ); - - return newRule ? m_lstCSSRules->insertRule( newRule, index ) : 0; -} - -CSSRuleListImpl::~CSSRuleListImpl() -{ - CSSRuleImpl* rule; - while ( !m_lstCSSRules.isEmpty() && ( rule = m_lstCSSRules.take( 0 ) ) ) - rule->deref(); -} - -// --------------------------------------------------------------------------- - -CSSPageRuleImpl::CSSPageRuleImpl(StyleBaseImpl *parent) - : CSSRuleImpl(parent) -{ - m_type = CSSRule::PAGE_RULE; - m_style = 0; -} - -CSSPageRuleImpl::~CSSPageRuleImpl() -{ - if(m_style) m_style->deref(); -} - -DOM::DOMString CSSPageRuleImpl::selectorText() const -{ - // ### - return DOMString(); -} - -void CSSPageRuleImpl::setSelectorText(DOM::DOMString /*str*/) -{ - // ### -} - -// -------------------------------------------------------------------------- - -CSSStyleRuleImpl::CSSStyleRuleImpl(StyleBaseImpl *parent) - : CSSRuleImpl(parent) -{ - m_type = CSSRule::STYLE_RULE; - m_style = 0; - m_selector = 0; -} - -CSSStyleRuleImpl::~CSSStyleRuleImpl() -{ - if(m_style) { - m_style->setParent( 0 ); - m_style->deref(); - } - delete m_selector; -} - -DOM::DOMString CSSStyleRuleImpl::selectorText() const -{ - if (m_selector) { - DOMString str; - for (CSSSelector *s = m_selector->first(); s; s = m_selector->next()) { - if (s != m_selector->getFirst()) - str += ", "; - str += s->selectorText(); - } - return str; - } - return DOMString(); -} - -void CSSStyleRuleImpl::setSelectorText(DOM::DOMString /*str*/) -{ - // ### -} - -bool CSSStyleRuleImpl::parseString( const DOMString &/*string*/, bool ) -{ - // ### - return false; -} - -void CSSStyleRuleImpl::setDeclaration( CSSStyleDeclarationImpl *style) -{ - if ( m_style != style ) { - if(m_style) m_style->deref(); - m_style = style; - if(m_style) m_style->ref(); - } -} - -void CSSStyleRuleImpl::setNonCSSHints() -{ - CSSSelector *s = m_selector->first(); - while ( s ) { - s->nonCSSHint = true; - s = m_selector->next(); - } -} - -void CSSRuleListImpl::deleteRule ( unsigned long index ) -{ - CSSRuleImpl *rule = m_lstCSSRules.take( index ); - if( rule ) - rule->deref(); - else { - // ### Throw INDEX_SIZE_ERR exception here (TODO) - } -} - -unsigned long CSSRuleListImpl::insertRule( CSSRuleImpl *rule, - unsigned long index ) -{ - if( rule && m_lstCSSRules.insert( index, rule ) ) - { - rule->ref(); - return index; - } - - // ### Should throw INDEX_SIZE_ERR exception instead! (TODO) - return 0; -} - diff --git a/khtml/css/css_ruleimpl.h b/khtml/css/css_ruleimpl.h deleted file mode 100644 index 2753fcf83..000000000 --- a/khtml/css/css_ruleimpl.h +++ /dev/null @@ -1,237 +0,0 @@ -/* - * This file is part of the DOM implementation for KDE. - * - * (C) 1999-2003 Lars Knoll (knoll@kde.org) - * (C) 2002-2003 Dirk Mueller (mueller@kde.org) - * Copyright (C) 2002 Apple Computer, Inc. - * - * 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. - * - */ -#ifndef _CSS_css_ruleimpl_h_ -#define _CSS_css_ruleimpl_h_ - -#include "dom/dom_string.h" -#include "dom/css_rule.h" -#include "css/css_base.h" -#include "misc/loader_client.h" -#include "misc/shared.h" - -namespace khtml { - class CachedCSSStyleSheet; -} - -namespace DOM { - -class CSSRule; -class CSSStyleSheet; -class CSSStyleSheetImpl; -class CSSStyleDeclarationImpl; -class MediaListImpl; - -class CSSRuleImpl : public StyleBaseImpl -{ -public: - CSSRuleImpl(StyleBaseImpl *parent) - : StyleBaseImpl(parent), m_type(CSSRule::UNKNOWN_RULE) {} - - virtual bool isRule() const { return true; } - unsigned short type() const { return m_type; } - - CSSStyleSheetImpl *parentStyleSheet() const; - CSSRuleImpl *parentRule() const; - - DOM::DOMString cssText() const; - void setCssText(DOM::DOMString str); - virtual void init() {} - -protected: - CSSRule::RuleType m_type; -}; - - -class CSSCharsetRuleImpl : public CSSRuleImpl -{ -public: - CSSCharsetRuleImpl(StyleBaseImpl *parent) - : CSSRuleImpl(parent) { m_type = CSSRule::CHARSET_RULE; } - - virtual bool isCharsetRule() const { return true; } - - DOMString encoding() const { return m_encoding; } - void setEncoding(DOMString _encoding) { m_encoding = _encoding; } - -protected: - DOMString m_encoding; -}; - - -class CSSFontFaceRuleImpl : public CSSRuleImpl -{ -public: - CSSFontFaceRuleImpl(StyleBaseImpl *parent); - - virtual ~CSSFontFaceRuleImpl(); - - CSSStyleDeclarationImpl *style() const { return m_style; } - - virtual bool isFontFaceRule() const { return true; } - -protected: - CSSStyleDeclarationImpl *m_style; -}; - - -class CSSImportRuleImpl : public khtml::CachedObjectClient, public CSSRuleImpl -{ -public: - CSSImportRuleImpl( StyleBaseImpl *parent, const DOM::DOMString &href, - const DOM::DOMString &media ); - CSSImportRuleImpl( StyleBaseImpl *parent, const DOM::DOMString &href, - MediaListImpl *media ); - - virtual ~CSSImportRuleImpl(); - - DOM::DOMString href() const { return m_strHref; } - MediaListImpl *media() const { return m_lstMedia; } - CSSStyleSheetImpl *styleSheet() const { return m_styleSheet; } - - virtual bool isImportRule() const { return true; } - - // from CachedObjectClient - virtual void setStyleSheet(const DOM::DOMString &url, const DOM::DOMString &sheet, const DOM::DOMString &charset); - virtual void error(int err, const TQString &text); - - bool isLoading(); - virtual void init(); - -protected: - DOMString m_strHref; - MediaListImpl *m_lstMedia; - CSSStyleSheetImpl *m_styleSheet; - khtml::CachedCSSStyleSheet *m_cachedSheet; - bool m_loading; - bool m_done; -}; - -class MediaList; - -class CSSRuleListImpl : public khtml::Shared<CSSRuleListImpl> -{ -public: - CSSRuleListImpl() {} - - ~CSSRuleListImpl(); - - unsigned long length() const { return m_lstCSSRules.count(); } - CSSRuleImpl *item ( unsigned long index ) { return m_lstCSSRules.at( index ); } - - - /* not part of the DOM */ - unsigned long insertRule ( CSSRuleImpl *rule, unsigned long index ); - void deleteRule ( unsigned long index ); - - void append( CSSRuleImpl *rule ) { m_lstCSSRules.append( rule ); } -protected: - TQPtrList<CSSRuleImpl> m_lstCSSRules; -}; - -class CSSMediaRuleImpl : public CSSRuleImpl -{ -public: - CSSMediaRuleImpl( StyleBaseImpl *parent ); - CSSMediaRuleImpl( StyleBaseImpl *parent, const DOM::DOMString &media ); - CSSMediaRuleImpl( StyleBaseImpl *parent, MediaListImpl *mediaList, CSSRuleListImpl *ruleList ); - - virtual ~CSSMediaRuleImpl(); - - MediaListImpl *media() const { return m_lstMedia; } - CSSRuleListImpl *cssRules() { return m_lstCSSRules; } - - unsigned long insertRule ( const DOM::DOMString &rule, unsigned long index ); - void deleteRule ( unsigned long index ) { m_lstCSSRules->deleteRule( index ); } - - virtual bool isMediaRule() const { return true; } - - /* Not part of the DOM */ - unsigned long append( CSSRuleImpl *rule ); -protected: - MediaListImpl *m_lstMedia; - CSSRuleListImpl *m_lstCSSRules; -}; - - -class CSSPageRuleImpl : public CSSRuleImpl -{ -public: - CSSPageRuleImpl(StyleBaseImpl *parent); - - virtual ~CSSPageRuleImpl(); - - CSSStyleDeclarationImpl *style() const { return m_style; } - - virtual bool isPageRule() const { return true; } - - DOM::DOMString selectorText() const; - void setSelectorText(DOM::DOMString str); - -protected: - CSSStyleDeclarationImpl *m_style; -}; - - -class CSSStyleRuleImpl : public CSSRuleImpl -{ -public: - CSSStyleRuleImpl(StyleBaseImpl *parent); - - virtual ~CSSStyleRuleImpl(); - - CSSStyleDeclarationImpl *style() const { return m_style; } - - virtual bool isStyleRule() const { return true; } - - DOM::DOMString selectorText() const; - void setSelectorText(DOM::DOMString str); - - virtual bool parseString( const DOMString &string, bool = false ); - - void setSelector( TQPtrList<CSSSelector> *selector) { m_selector = selector; } - void setDeclaration( CSSStyleDeclarationImpl *style); - - TQPtrList<CSSSelector> *selector() { return m_selector; } - CSSStyleDeclarationImpl *declaration() { return m_style; } - - void setNonCSSHints(); - -protected: - CSSStyleDeclarationImpl *m_style; - TQPtrList<CSSSelector> *m_selector; -}; - - -class CSSUnknownRuleImpl : public CSSRuleImpl -{ -public: - CSSUnknownRuleImpl(StyleBaseImpl *parent) : CSSRuleImpl(parent) {} - - virtual bool isUnknownRule() const { return true; } -}; - - -} // namespace - -#endif diff --git a/khtml/css/css_stylesheetimpl.cpp b/khtml/css/css_stylesheetimpl.cpp deleted file mode 100644 index 8189a6846..000000000 --- a/khtml/css/css_stylesheetimpl.cpp +++ /dev/null @@ -1,436 +0,0 @@ -/** - * This file is part of the DOM implementation for KDE. - * - * Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org) - * (C) 2004 Apple Computer, Inc. - * - * 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. - * - */ - -//#define CSS_STYLESHEET_DEBUG - -#include "dom/dom_string.h" -#include "dom/dom_exception.h" -#include "dom/css_stylesheet.h" -#include "dom/css_rule.h" - -#include "css/css_ruleimpl.h" -#include "css/css_valueimpl.h" -#include "css/cssparser.h" -#include "css/css_stylesheetimpl.h" - -#include "xml/dom_nodeimpl.h" -#include "html/html_documentimpl.h" -#include "misc/loader.h" - -#include <kdebug.h> - -using namespace DOM; -using namespace khtml; -// -------------------------------------------------------------------------------- - -StyleSheetImpl::StyleSheetImpl(StyleSheetImpl *parentSheet, DOMString href) - : StyleListImpl(parentSheet) -{ - m_disabled = false; - m_media = 0; - m_parentNode = 0; - m_strHref = href; -} - - -StyleSheetImpl::StyleSheetImpl(DOM::NodeImpl *parentNode, DOMString href) - : StyleListImpl() -{ - m_parentNode = parentNode; - m_disabled = false; - m_media = 0; - m_strHref = href; -} - -StyleSheetImpl::StyleSheetImpl(StyleBaseImpl *owner, DOMString href) - : StyleListImpl(owner) -{ - m_disabled = false; - m_media = 0; - m_parentNode = 0; - m_strHref = href; -} - -StyleSheetImpl::~StyleSheetImpl() -{ - if(m_media) { - m_media->setParent( 0 ); - m_media->deref(); - } -} - -StyleSheetImpl *StyleSheetImpl::parentStyleSheet() const -{ - if( !m_parent ) return 0; - if( m_parent->isStyleSheet() ) return static_cast<StyleSheetImpl *>(m_parent); - if( m_parent->isRule() ) return m_parent->stylesheet(); - return 0; -} - -void StyleSheetImpl::setMedia( MediaListImpl *media ) -{ - if( media ) - media->ref(); - if( m_media ) - m_media->deref(); - m_media = media; -} - -void StyleSheetImpl::setDisabled( bool disabled ) -{ - bool updateStyle = isCSSStyleSheet() && m_parentNode && disabled != m_disabled; - m_disabled = disabled; - if (updateStyle) - m_parentNode->getDocument()->updateStyleSelector(); -} - -// ----------------------------------------------------------------------- - - -CSSStyleSheetImpl::CSSStyleSheetImpl(CSSStyleSheetImpl *parentSheet, DOMString href) - : StyleSheetImpl(parentSheet, href) -{ - m_lstChildren = new TQPtrList<StyleBaseImpl>; - m_doc = parentSheet ? parentSheet->doc() : 0; - m_implicit = false; - m_namespaces = 0; - m_defaultNamespace = anyNamespace; -} - -CSSStyleSheetImpl::CSSStyleSheetImpl(DOM::NodeImpl *parentNode, DOMString href, bool _implicit) - : StyleSheetImpl(parentNode, href) -{ - m_lstChildren = new TQPtrList<StyleBaseImpl>; - m_doc = parentNode->getDocument(); - m_implicit = _implicit; - m_namespaces = 0; - m_defaultNamespace = anyNamespace; -} - -CSSStyleSheetImpl::CSSStyleSheetImpl(CSSRuleImpl *ownerRule, DOMString href) - : StyleSheetImpl(ownerRule, href) -{ - m_lstChildren = new TQPtrList<StyleBaseImpl>; - m_doc = static_cast<CSSStyleSheetImpl*>(ownerRule->stylesheet())->doc(); - m_implicit = false; - m_namespaces = 0; - m_defaultNamespace = anyNamespace; -} - -CSSStyleSheetImpl::CSSStyleSheetImpl(DOM::NodeImpl *parentNode, CSSStyleSheetImpl *orig) - : StyleSheetImpl(parentNode, orig->m_strHref) -{ - m_lstChildren = new TQPtrList<StyleBaseImpl>; - StyleBaseImpl *rule; - for ( rule = orig->m_lstChildren->first(); rule != 0; rule = orig->m_lstChildren->next() ) - { - m_lstChildren->append(rule); - rule->setParent(this); - } - m_doc = parentNode->getDocument(); - m_implicit = false; - m_namespaces = 0; - m_defaultNamespace = anyNamespace; -} - -CSSStyleSheetImpl::CSSStyleSheetImpl(CSSRuleImpl *ownerRule, CSSStyleSheetImpl *orig) - : StyleSheetImpl(ownerRule, orig->m_strHref) -{ - // m_lstChildren is deleted in StyleListImpl - m_lstChildren = new TQPtrList<StyleBaseImpl>; - StyleBaseImpl *rule; - for ( rule = orig->m_lstChildren->first(); rule != 0; rule = orig->m_lstChildren->next() ) - { - m_lstChildren->append(rule); - rule->setParent(this); - } - m_doc = static_cast<CSSStyleSheetImpl*>(ownerRule->stylesheet())->doc(); - m_implicit = false; - m_namespaces = 0; - m_defaultNamespace = anyNamespace; -} - -CSSRuleImpl *CSSStyleSheetImpl::ownerRule() const -{ - if( !m_parent ) return 0; - if( m_parent->isRule() ) return static_cast<CSSRuleImpl *>(m_parent); - return 0; -} - -unsigned long CSSStyleSheetImpl::insertRule( const DOMString &rule, unsigned long index, int &exceptioncode ) -{ - exceptioncode = 0; - if(index > m_lstChildren->count()) { - exceptioncode = DOMException::INDEX_SIZE_ERR; - return 0; - } - CSSParser p( strictParsing ); - CSSRuleImpl *r = p.parseRule( this, rule ); - - if(!r) { - exceptioncode = CSSException::SYNTAX_ERR + CSSException::_EXCEPTION_OFFSET; - return 0; - } - // ### - // HIERARCHY_REQUEST_ERR: Raised if the rule cannot be inserted at the specified index e.g. if an - //@import rule is inserted after a standard rule set or other at-rule. - m_lstChildren->insert(index, r); - if (m_doc) - m_doc->updateStyleSelector(true /*shallow*/); - return index; -} - -CSSRuleList CSSStyleSheetImpl::cssRules() -{ - return this; -} - -void CSSStyleSheetImpl::deleteRule( unsigned long index, int &exceptioncode ) -{ - exceptioncode = 0; - StyleBaseImpl *b = m_lstChildren->take(index); - if(!b) { - exceptioncode = DOMException::INDEX_SIZE_ERR; - return; - } - // TreeShared requires delete not deref when removed from tree - b->setParent(0); - if( !b->refCount() ) delete b; - if (m_doc) - m_doc->updateStyleSelector(true /*shallow*/); -} - -void CSSStyleSheetImpl::addNamespace(CSSParser* p, const DOM::DOMString& prefix, const DOM::DOMString& uri) -{ - int exceptioncode = 0; - if (uri.isEmpty()) - return; - - m_namespaces = new CSSNamespace(prefix, uri, m_namespaces); - - if (prefix.isEmpty()) { - Q_ASSERT(m_doc != 0); - - m_defaultNamespace = m_doc->getId(NodeImpl::NamespaceId, uri.implementation(), false, false, &exceptioncode); - } -} - -void CSSStyleSheetImpl::determineNamespace(TQ_UINT32& id, const DOM::DOMString& prefix) -{ - // If the stylesheet has no namespaces we can just return. There won't be any need to ever check - // namespace values in selectors. - if (!m_namespaces) - return; - - if (prefix.isEmpty()) - id = makeId(emptyNamespace, localNamePart(id)); // No namespace. If an element/attribute has a namespace, we won't match it. - else if (prefix == "*") - id = makeId(anyNamespace, localNamePart(id)); // We'll match any namespace. - else { - int exceptioncode = 0; - CSSNamespace* ns = m_namespaces->namespaceForPrefix(prefix); - if (ns) { - Q_ASSERT(m_doc != 0); - - // Look up the id for this namespace URI. - TQ_UINT16 nsid = m_doc->getId(NodeImpl::NamespaceId, 0, 0, ns->uri().implementation(), false, false, &exceptioncode); - id = makeId(nsid, localNamePart(id)); - } - } -} - -bool CSSStyleSheetImpl::parseString(const DOMString &string, bool strict) -{ -#ifdef CSS_STYLESHEET_DEBUG - kdDebug( 6080 ) << "parsing sheet, len=" << string.length() << ", sheet is " << string.string() << endl; -#endif - - strictParsing = strict; - CSSParser p( strict ); - p.parseSheet( this, string ); - return true; -} - -bool CSSStyleSheetImpl::isLoading() const -{ - StyleBaseImpl *rule; - for ( rule = m_lstChildren->first(); rule != 0; rule = m_lstChildren->next() ) - { - if(rule->isImportRule()) - { - CSSImportRuleImpl *import = static_cast<CSSImportRuleImpl *>(rule); -#ifdef CSS_STYLESHEET_DEBUG - kdDebug( 6080 ) << "found import" << endl; -#endif - if(import->isLoading()) - { -#ifdef CSS_STYLESHEET_DEBUG - kdDebug( 6080 ) << "--> not loaded" << endl; -#endif - return true; - } - } - } - return false; -} - -void CSSStyleSheetImpl::checkLoaded() const -{ - if(isLoading()) return; - if(m_parent) m_parent->checkLoaded(); - if(m_parentNode) m_parentNode->sheetLoaded(); -} - -void CSSStyleSheetImpl::setNonCSSHints() -{ - StyleBaseImpl *rule = m_lstChildren->first(); - while(rule) { - if(rule->isStyleRule()) { - static_cast<CSSStyleRuleImpl *>(rule)->setNonCSSHints(); - } - rule = m_lstChildren->next(); - } -} - - -// --------------------------------------------------------------------------- - - -StyleSheetListImpl::~StyleSheetListImpl() -{ - for ( TQPtrListIterator<StyleSheetImpl> it ( styleSheets ); it.current(); ++it ) - it.current()->deref(); -} - -void StyleSheetListImpl::add( StyleSheetImpl* s ) -{ - if ( !styleSheets.containsRef( s ) ) { - s->ref(); - styleSheets.append( s ); - } -} - -void StyleSheetListImpl::remove( StyleSheetImpl* s ) -{ - if ( styleSheets.removeRef( s ) ) - s->deref(); -} - -unsigned long StyleSheetListImpl::length() const -{ - // hack so implicit BODY stylesheets don't get counted here - unsigned long l = 0; - TQPtrListIterator<StyleSheetImpl> it(styleSheets); - for (; it.current(); ++it) { - if (!it.current()->isCSSStyleSheet() || !static_cast<CSSStyleSheetImpl*>(it.current())->implicit()) - ++l; - } - return l; -} - -StyleSheetImpl *StyleSheetListImpl::item ( unsigned long index ) -{ - unsigned long l = 0; - TQPtrListIterator<StyleSheetImpl> it(styleSheets); - for (; it.current(); ++it) { - if (!it.current()->isCSSStyleSheet() || !static_cast<CSSStyleSheetImpl*>(it.current())->implicit()) { - if (l == index) - return it.current(); - ++l; - } - } - return 0; -} - -// -------------------------------------------------------------------------------------------- - -MediaListImpl::MediaListImpl( CSSStyleSheetImpl *parentSheet, - const DOMString &media ) - : StyleBaseImpl( parentSheet ) -{ - setMediaText( media ); -} - -MediaListImpl::MediaListImpl( CSSRuleImpl *parentRule, const DOMString &media ) - : StyleBaseImpl(parentRule) -{ - setMediaText( media ); -} - -bool MediaListImpl::contains( const DOMString &medium ) const -{ - return m_lstMedia.empty() || m_lstMedia.contains( medium ) || - m_lstMedia.contains( "all" ); -} - -CSSStyleSheetImpl *MediaListImpl::parentStyleSheet() const -{ - if( m_parent->isCSSStyleSheet() ) return static_cast<CSSStyleSheetImpl *>(m_parent); - return 0; -} - -CSSRuleImpl *MediaListImpl::parentRule() const -{ - if( m_parent->isRule() ) return static_cast<CSSRuleImpl *>(m_parent); - return 0; -} - -void MediaListImpl::deleteMedium( const DOMString &oldMedium ) -{ - const TQValueList<DOMString>::Iterator itEnd = m_lstMedia.end(); - - for ( TQValueList<DOMString>::Iterator it = m_lstMedia.begin(); it != itEnd; ++it ) { - if( (*it) == oldMedium ) { - m_lstMedia.remove( it ); - return; - } - } -} - -DOM::DOMString MediaListImpl::mediaText() const -{ - DOMString text; - const TQValueList<DOMString>::ConstIterator itEnd = m_lstMedia.end(); - - for ( TQValueList<DOMString>::ConstIterator it = m_lstMedia.begin(); it != itEnd; ++it ) { - text += *it; - text += ", "; - } - return text; -} - -void MediaListImpl::setMediaText(const DOM::DOMString &value) -{ - m_lstMedia.clear(); - const TQString val = value.string(); - const TQStringList list = TQStringList::split( ',', val ); - - const TQStringList::ConstIterator itEnd = list.end(); - - for ( TQStringList::ConstIterator it = list.begin(); it != itEnd; ++it ) - { - const DOMString medium = (*it).stripWhiteSpace(); - if( !medium.isEmpty() ) - m_lstMedia.append( medium ); - } -} diff --git a/khtml/css/css_stylesheetimpl.h b/khtml/css/css_stylesheetimpl.h deleted file mode 100644 index 656b59ca9..000000000 --- a/khtml/css/css_stylesheetimpl.h +++ /dev/null @@ -1,192 +0,0 @@ -/* - * This file is part of the DOM implementation for KDE. - * - * Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org) - * (C) 2004 Apple Computer, Inc. - * - * 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. - * - */ -#ifndef _CSS_css_stylesheetimpl_h_ -#define _CSS_css_stylesheetimpl_h_ - -#include <tqvaluelist.h> -#include <tqptrlist.h> - -#include "dom/dom_string.h" -#include "css/css_base.h" -#include "misc/loader_client.h" -#include "xml/dom_docimpl.h" - -namespace khtml { - class CachedCSSStyleSheet; - class DocLoader; -} - -namespace DOM { - -class StyleSheet; -class CSSStyleSheet; -class CSSParser; -class MediaListImpl; -class CSSRuleImpl; -class CSSRuleList; -class CSSStyleRuleImpl; -class CSSValueImpl; -class NodeImpl; -class DocumentImpl; - -class StyleSheetImpl : public StyleListImpl -{ -public: - StyleSheetImpl(DOM::NodeImpl *ownerNode, DOM::DOMString href = DOMString()); - StyleSheetImpl(StyleSheetImpl *parentSheet, DOM::DOMString href = DOMString()); - StyleSheetImpl(StyleBaseImpl *owner, DOM::DOMString href = DOMString()); - StyleSheetImpl(khtml::CachedCSSStyleSheet *cached, DOM::DOMString href = DOMString()); - virtual ~StyleSheetImpl(); - - virtual bool isStyleSheet() const { return true; } - - virtual DOM::DOMString type() const { return DOMString(); } - - bool disabled() const { return m_disabled; } - void setDisabled( bool disabled ); - DOM::NodeImpl *ownerNode() const { return m_parentNode; } - StyleSheetImpl *parentStyleSheet() const; - DOM::DOMString href() const { return m_strHref; } - DOM::DOMString title() const { return m_strTitle; } - MediaListImpl *media() const { return m_media; } - void setMedia( MediaListImpl *media ); - -protected: - DOM::NodeImpl *m_parentNode; - DOM::DOMString m_strHref; - DOM::DOMString m_strTitle; - MediaListImpl *m_media; - bool m_disabled; -}; - -class CSSStyleSheetImpl : public StyleSheetImpl -{ -public: - CSSStyleSheetImpl(DOM::NodeImpl *parentNode, DOM::DOMString href = DOMString(), bool _implicit = false); - CSSStyleSheetImpl(CSSStyleSheetImpl *parentSheet, DOM::DOMString href = DOMString()); - CSSStyleSheetImpl(CSSRuleImpl *ownerRule, DOM::DOMString href = DOMString()); - // clone from a cached version of the sheet - CSSStyleSheetImpl(DOM::NodeImpl *parentNode, CSSStyleSheetImpl *orig); - CSSStyleSheetImpl(CSSRuleImpl *ownerRule, CSSStyleSheetImpl *orig); - - ~CSSStyleSheetImpl() { delete m_namespaces; } - - virtual bool isCSSStyleSheet() const { return true; } - - virtual DOM::DOMString type() const { return "text/css"; } - - CSSRuleImpl *ownerRule() const; - CSSRuleList cssRules(); - unsigned long insertRule ( const DOM::DOMString &rule, unsigned long index, int &exceptioncode ); - void deleteRule ( unsigned long index, int &exceptioncode ); - - void addNamespace(CSSParser* p, const DOM::DOMString& prefix, const DOM::DOMString& uri); - void determineNamespace(TQ_UINT32& id, const DOM::DOMString& prefix); - TQ_UINT32 defaultNamespace() { return m_defaultNamespace; }; - - void setCharset(const DOMString &charset) { m_charset = charset; } - const DOMString& charset() const { return m_charset; } - - virtual bool parseString( const DOMString &string, bool strict = true ); - - bool isLoading() const; - void setNonCSSHints(); - - virtual void checkLoaded() const; - - // ### remove? (clients should use sheet->doc()->docLoader()) - khtml::DocLoader *docLoader() const - { return m_doc ? m_doc->docLoader() : 0; } - - DocumentImpl *doc() const { return m_doc; } - bool implicit() const { return m_implicit; } -protected: - DocumentImpl *m_doc; - bool m_implicit; - TQ_UINT32 m_defaultNamespace; - CSSNamespace* m_namespaces; - DOMString m_charset; -}; - -// ---------------------------------------------------------------------------- - -class StyleSheetListImpl : public khtml::Shared<StyleSheetListImpl> -{ -public: - StyleSheetListImpl() {} - ~StyleSheetListImpl(); - - // the following two ignore implicit stylesheets - unsigned long length() const; - StyleSheetImpl *item ( unsigned long index ); - - void add(StyleSheetImpl* s); - void remove(StyleSheetImpl* s); - - TQPtrList<StyleSheetImpl> styleSheets; -}; - -// ---------------------------------------------------------------------------- - -class MediaListImpl : public StyleBaseImpl -{ -public: - MediaListImpl() - : StyleBaseImpl( 0 ) {} - MediaListImpl( CSSStyleSheetImpl *parentSheet ) - : StyleBaseImpl(parentSheet) {} - MediaListImpl( CSSStyleSheetImpl *parentSheet, - const DOM::DOMString &media ); - MediaListImpl( CSSRuleImpl *parentRule, const DOM::DOMString &media ); - - virtual bool isMediaList() const { return true; } - - CSSStyleSheetImpl *parentStyleSheet() const; - CSSRuleImpl *parentRule() const; - unsigned long length() const { return m_lstMedia.count(); } - DOM::DOMString item ( unsigned long index ) const { return m_lstMedia[index]; } - void deleteMedium ( const DOM::DOMString &oldMedium ); - void appendMedium ( const DOM::DOMString &newMedium ) { m_lstMedia.append(newMedium); } - - DOM::DOMString mediaText() const; - void setMediaText(const DOM::DOMString &value); - - /** - * Check if the list contains either the requested medium, or the - * catch-all "all" media type. Returns true when found, false otherwise. - * Since not specifying media types should be treated as "all" according - * to DOM specs, an empty list always returns true. - * - * _NOT_ part of the DOM! - */ - bool contains( const DOM::DOMString &medium ) const; - -protected: - TQValueList<DOM::DOMString> m_lstMedia; -}; - - -} // namespace - -#endif - diff --git a/khtml/css/css_valueimpl.cpp b/khtml/css/css_valueimpl.cpp deleted file mode 100644 index a6150c78b..000000000 --- a/khtml/css/css_valueimpl.cpp +++ /dev/null @@ -1,1073 +0,0 @@ -/** - * This file is part of the DOM implementation for KDE. - * - * Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org) - * (C) 2004, 2005, 2006 Apple Computer, Inc. - * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.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., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include "dom/css_value.h" -#include "dom/dom_exception.h" -#include "dom/dom_string.h" - -#include "css/css_valueimpl.h" -#include "css/css_ruleimpl.h" -#include "css/css_stylesheetimpl.h" -#include "css/cssparser.h" -#include "css/cssproperties.h" -#include "css/cssvalues.h" - -#include "xml/dom_stringimpl.h" -#include "xml/dom_docimpl.h" - -#include "misc/loader.h" - -#include "rendering/font.h" -#include "rendering/render_style.h" - -#include <kdebug.h> -#include <tqregexp.h> -#include <tqpaintdevice.h> -#include <tqpaintdevicemetrics.h> - -// Hack for debugging purposes -extern DOM::DOMString getPropertyName(unsigned short id); - -using khtml::FontDef; - -using namespace DOM; - -// Quotes the string if it needs quoting. -static DOMString quoteStringIfNeeded(const DOMString &string) -{ - // FIXME: Also need to transform control characters into \ sequences. - TQString s = string.string(); - s.replace('\\', "\\\\"); - s.replace('\'', "\\'"); - return '\'' + s + '\''; -} - - -CSSStyleDeclarationImpl::CSSStyleDeclarationImpl(CSSRuleImpl *parent) - : StyleBaseImpl(parent) -{ - m_lstValues = 0; - m_node = 0; -} - -CSSStyleDeclarationImpl::CSSStyleDeclarationImpl(CSSRuleImpl *parent, TQPtrList<CSSProperty> *lstValues) - : StyleBaseImpl(parent) -{ - m_lstValues = lstValues; - m_node = 0; -} - -CSSStyleDeclarationImpl& CSSStyleDeclarationImpl::operator= (const CSSStyleDeclarationImpl& o) -{ - // don't attach it to the same node, just leave the current m_node value - delete m_lstValues; - m_lstValues = 0; - if (o.m_lstValues) { - m_lstValues = new TQPtrList<CSSProperty>; - m_lstValues->setAutoDelete( true ); - - TQPtrListIterator<CSSProperty> lstValuesIt(*o.m_lstValues); - for (lstValuesIt.toFirst(); lstValuesIt.current(); ++lstValuesIt) - m_lstValues->append(new CSSProperty(*lstValuesIt.current())); - } - - return *this; -} - -CSSStyleDeclarationImpl::~CSSStyleDeclarationImpl() -{ - delete m_lstValues; - // we don't use refcounting for m_node, to avoid cyclic references (see ElementImpl) -} - -DOMString CSSStyleDeclarationImpl::getPropertyValue( int propertyID ) const -{ - if(!m_lstValues) return DOMString(); - CSSValueImpl* value = getPropertyCSSValue( propertyID ); - if ( value ) - return value->cssText(); - - // Shorthand and 4-values properties - switch ( propertyID ) { - case CSS_PROP_BACKGROUND_POSITION: - { - // ## Is this correct? The code in cssparser.cpp is confusing - const int properties[2] = { CSS_PROP_BACKGROUND_POSITION_X, - CSS_PROP_BACKGROUND_POSITION_Y }; - return getShortHandValue( properties, 2 ); - } - case CSS_PROP_BACKGROUND: - { - const int properties[5] = { CSS_PROP_BACKGROUND_IMAGE, CSS_PROP_BACKGROUND_REPEAT, - CSS_PROP_BACKGROUND_ATTACHMENT, CSS_PROP_BACKGROUND_POSITION, - CSS_PROP_BACKGROUND_COLOR }; - return getShortHandValue( properties, 5 ); - } - case CSS_PROP_BORDER: - { - const int properties[3] = { CSS_PROP_BORDER_WIDTH, CSS_PROP_BORDER_STYLE, - CSS_PROP_BORDER_COLOR }; - return getShortHandValue( properties, 3 ); - } - case CSS_PROP_BORDER_TOP: - { - const int properties[3] = { CSS_PROP_BORDER_TOP_WIDTH, CSS_PROP_BORDER_TOP_STYLE, - CSS_PROP_BORDER_TOP_COLOR}; - return getShortHandValue( properties, 3 ); - } - case CSS_PROP_BORDER_RIGHT: - { - const int properties[3] = { CSS_PROP_BORDER_RIGHT_WIDTH, CSS_PROP_BORDER_RIGHT_STYLE, - CSS_PROP_BORDER_RIGHT_COLOR}; - return getShortHandValue( properties, 3 ); - } - case CSS_PROP_BORDER_BOTTOM: - { - const int properties[3] = { CSS_PROP_BORDER_BOTTOM_WIDTH, CSS_PROP_BORDER_BOTTOM_STYLE, - CSS_PROP_BORDER_BOTTOM_COLOR}; - return getShortHandValue( properties, 3 ); - } - case CSS_PROP_BORDER_LEFT: - { - const int properties[3] = { CSS_PROP_BORDER_LEFT_WIDTH, CSS_PROP_BORDER_LEFT_STYLE, - CSS_PROP_BORDER_LEFT_COLOR}; - return getShortHandValue( properties, 3 ); - } - case CSS_PROP_OUTLINE: - { - const int properties[3] = { CSS_PROP_OUTLINE_WIDTH, CSS_PROP_OUTLINE_STYLE, - CSS_PROP_OUTLINE_COLOR }; - return getShortHandValue( properties, 3 ); - } - case CSS_PROP_BORDER_COLOR: - { - const int properties[4] = { CSS_PROP_BORDER_TOP_COLOR, CSS_PROP_BORDER_RIGHT_COLOR, - CSS_PROP_BORDER_BOTTOM_COLOR, CSS_PROP_BORDER_LEFT_COLOR }; - return get4Values( properties ); - } - case CSS_PROP_BORDER_WIDTH: - { - const int properties[4] = { CSS_PROP_BORDER_TOP_WIDTH, CSS_PROP_BORDER_RIGHT_WIDTH, - CSS_PROP_BORDER_BOTTOM_WIDTH, CSS_PROP_BORDER_LEFT_WIDTH }; - return get4Values( properties ); - } - case CSS_PROP_BORDER_STYLE: - { - const int properties[4] = { CSS_PROP_BORDER_TOP_STYLE, CSS_PROP_BORDER_RIGHT_STYLE, - CSS_PROP_BORDER_BOTTOM_STYLE, CSS_PROP_BORDER_LEFT_STYLE }; - return get4Values( properties ); - } - case CSS_PROP_MARGIN: - { - const int properties[4] = { CSS_PROP_MARGIN_TOP, CSS_PROP_MARGIN_RIGHT, - CSS_PROP_MARGIN_BOTTOM, CSS_PROP_MARGIN_LEFT }; - return get4Values( properties ); - } - case CSS_PROP_PADDING: - { - const int properties[4] = { CSS_PROP_PADDING_TOP, CSS_PROP_PADDING_RIGHT, - CSS_PROP_PADDING_BOTTOM, CSS_PROP_PADDING_LEFT }; - return get4Values( properties ); - } - case CSS_PROP_LIST_STYLE: - { - const int properties[3] = { CSS_PROP_LIST_STYLE_TYPE, CSS_PROP_LIST_STYLE_POSITION, - CSS_PROP_LIST_STYLE_IMAGE }; - return getShortHandValue( properties, 3 ); - } - } - //kdDebug() << k_funcinfo << "property not found:" << propertyID << endl; - return DOMString(); -} - -DOMString CSSStyleDeclarationImpl::get4Values( const int* properties ) const -{ - DOMString res; - for ( int i = 0 ; i < 4 ; ++i ) { - CSSValueImpl* value = getPropertyCSSValue( properties[i] ); - if ( !value ) { // apparently all 4 properties must be specified. - return DOMString(); - } - if ( i > 0 ) - res += " "; - res += value->cssText(); - } - return res; -} - -DOMString CSSStyleDeclarationImpl::getShortHandValue( const int* properties, int number ) const -{ - DOMString res; - for ( int i = 0 ; i < number ; ++i ) { - CSSValueImpl* value = getPropertyCSSValue( properties[i] ); - if ( value ) { // TODO provide default value if !value - if ( !res.isNull() ) - res += " "; - res += value->cssText(); - } - } - return res; -} - - CSSValueImpl *CSSStyleDeclarationImpl::getPropertyCSSValue( int propertyID ) const -{ - if(!m_lstValues) return 0; - - TQPtrListIterator<CSSProperty> lstValuesIt(*m_lstValues); - CSSProperty *current; - for ( lstValuesIt.toLast(); (current = lstValuesIt.current()); --lstValuesIt ) - if (current->m_id == propertyID && !current->nonCSSHint) - return current->value(); - return 0; -} - -DOMString CSSStyleDeclarationImpl::removeProperty( int propertyID, bool NonCSSHint ) -{ - if(!m_lstValues) return DOMString(); - DOMString value; - - TQPtrListIterator<CSSProperty> lstValuesIt(*m_lstValues); - CSSProperty *current; - for ( lstValuesIt.toLast(); (current = lstValuesIt.current()); --lstValuesIt ) { - if (current->m_id == propertyID && NonCSSHint == current->nonCSSHint) { - value = current->value()->cssText(); - m_lstValues->removeRef(current); - setChanged(); - break; - } - } - - return value; -} - -void CSSStyleDeclarationImpl::setChanged() -{ - if (m_node) { - m_node->setChanged(); - return; - } - - // ### quick&dirty hack for KDE 3.0... make this MUCH better! (Dirk) - for (StyleBaseImpl* stylesheet = this; stylesheet; stylesheet = stylesheet->parent()) - if (stylesheet->isCSSStyleSheet()) { - static_cast<CSSStyleSheetImpl*>(stylesheet)->doc()->updateStyleSelector(); - break; - } -} - -void CSSStyleDeclarationImpl::removeCSSHints() -{ - if (!m_lstValues) - return; - - for (int i = (int)m_lstValues->count()-1; i >= 0; i--) { - if (!m_lstValues->at(i)->nonCSSHint) - m_lstValues->remove(i); - } -} - -bool CSSStyleDeclarationImpl::getPropertyPriority( int propertyID ) const -{ - if ( m_lstValues) { - TQPtrListIterator<CSSProperty> lstValuesIt(*m_lstValues); - CSSProperty *current; - for ( lstValuesIt.toFirst(); (current = lstValuesIt.current()); ++lstValuesIt ) { - if( propertyID == current->m_id ) - return current->m_important; - } - } - return false; -} - -bool CSSStyleDeclarationImpl::setProperty(int id, const DOMString &value, bool important, bool nonCSSHint) -{ - if(!m_lstValues) { - m_lstValues = new TQPtrList<CSSProperty>; - m_lstValues->setAutoDelete(true); - } - - CSSParser parser( strictParsing ); - bool success = parser.parseValue( this, id, value, important, nonCSSHint ); - if(!success) - kdDebug( 6080 ) << "CSSStyleDeclarationImpl::setProperty invalid property: [" << getPropertyName(id).string() - << "] value: [" << value.string() << "]"<< endl; - else - setChanged(); - return success; -} - -void CSSStyleDeclarationImpl::setProperty(int id, int value, bool important, bool nonCSSHint) -{ - if(!m_lstValues) { - m_lstValues = new TQPtrList<CSSProperty>; - m_lstValues->setAutoDelete(true); - } - removeProperty(id, nonCSSHint ); - - CSSValueImpl * cssValue = new CSSPrimitiveValueImpl(value); - setParsedValue(id, cssValue, important, nonCSSHint, m_lstValues); - setChanged(); -} - -void CSSStyleDeclarationImpl::setLengthProperty(int id, const DOM::DOMString &value, bool important, bool nonCSSHint, bool _multiLength ) -{ - bool parseMode = strictParsing; - strictParsing = false; - multiLength = _multiLength; - setProperty( id, value, important, nonCSSHint); - strictParsing = parseMode; - multiLength = false; -} - -void CSSStyleDeclarationImpl::setProperty ( const DOMString &propertyString) -{ - if(!m_lstValues) { - m_lstValues = new TQPtrList<CSSProperty>; - m_lstValues->setAutoDelete( true ); - } - - CSSParser parser( strictParsing ); - parser.parseDeclaration( this, propertyString, false ); - setChanged(); -} - -unsigned long CSSStyleDeclarationImpl::length() const -{ - return m_lstValues ? m_lstValues->count() : 0; -} - -DOMString CSSStyleDeclarationImpl::item( unsigned long index ) const -{ - if(m_lstValues && index < m_lstValues->count() && m_lstValues->at(index)) - return getPropertyName(m_lstValues->at(index)->m_id); - return DOMString(); -} - -CSSRuleImpl *CSSStyleDeclarationImpl::parentRule() const -{ - return (m_parent && m_parent->isRule() ) ? - static_cast<CSSRuleImpl *>(m_parent) : 0; -} - -DOM::DOMString CSSStyleDeclarationImpl::cssText() const -{ - DOMString result; - - if ( m_lstValues) { - TQPtrListIterator<CSSProperty> lstValuesIt(*m_lstValues); - CSSProperty *current; - for ( lstValuesIt.toFirst(); (current = lstValuesIt.current()); ++lstValuesIt ) { - result += current->cssText(); - } - } - - return result; -} - -void CSSStyleDeclarationImpl::setCssText(DOM::DOMString text) -{ - if (m_lstValues) { - m_lstValues->clear(); - } else { - m_lstValues = new TQPtrList<CSSProperty>; - m_lstValues->setAutoDelete( true ); - } - - CSSParser parser( strictParsing ); - parser.parseDeclaration( this, text, false ); - setChanged(); -} - -bool CSSStyleDeclarationImpl::parseString( const DOMString &/*string*/, bool ) -{ - kdDebug() << "WARNING: CSSStyleDeclarationImpl::parseString, unimplemented, was called" << endl; - return false; - // ### -} - - -// -------------------------------------------------------------------------------------- - -unsigned short CSSInheritedValueImpl::cssValueType() const -{ - return CSSValue::CSS_INHERIT; -} - -DOM::DOMString CSSInheritedValueImpl::cssText() const -{ - return DOMString("inherit"); -} - -unsigned short CSSInitialValueImpl::cssValueType() const -{ - return CSSValue::CSS_INITIAL; -} - -DOM::DOMString CSSInitialValueImpl::cssText() const -{ - return DOMString("initial"); -} - -// ---------------------------------------------------------------------------------------- - -CSSValueListImpl::~CSSValueListImpl() -{ - CSSValueImpl *val = m_values.first(); - while( val ) { - val->deref(); - val = m_values.next(); - } -} - -unsigned short CSSValueListImpl::cssValueType() const -{ - return CSSValue::CSS_VALUE_LIST; -} - -void CSSValueListImpl::append(CSSValueImpl *val) -{ - m_values.append(val); - val->ref(); -} - -DOM::DOMString CSSValueListImpl::cssText() const -{ - DOMString result = ""; - - for (TQPtrListIterator<CSSValueImpl> iterator(m_values); iterator.current(); ++iterator) { - result += iterator.current()->cssText(); - } - - return result; -} - -// ------------------------------------------------------------------------------------- - -CSSPrimitiveValueImpl::CSSPrimitiveValueImpl() - : CSSValueImpl() -{ - m_type = 0; -} - -CSSPrimitiveValueImpl::CSSPrimitiveValueImpl(int ident) - : CSSValueImpl() -{ - m_value.ident = ident; - m_type = CSSPrimitiveValue::CSS_IDENT; -} - -CSSPrimitiveValueImpl::CSSPrimitiveValueImpl(double num, CSSPrimitiveValue::UnitTypes type) -{ - m_value.num = num; - m_type = type; -} - -CSSPrimitiveValueImpl::CSSPrimitiveValueImpl(const DOMString &str, CSSPrimitiveValue::UnitTypes type) -{ - m_value.string = str.implementation(); - if(m_value.string) m_value.string->ref(); - m_type = type; -} - -CSSPrimitiveValueImpl::CSSPrimitiveValueImpl(CounterImpl *c) -{ - m_value.counter = c; - if (m_value.counter) - m_value.counter->ref(); - m_type = CSSPrimitiveValue::CSS_COUNTER; -} - -CSSPrimitiveValueImpl::CSSPrimitiveValueImpl( RectImpl *r) -{ - m_value.rect = r; - if (m_value.rect) - m_value.rect->ref(); - m_type = CSSPrimitiveValue::CSS_RECT; -} - -CSSPrimitiveValueImpl::CSSPrimitiveValueImpl(QRgb color) -{ - m_value.rgbcolor = color; - m_type = CSSPrimitiveValue::CSS_RGBCOLOR; -} - -CSSPrimitiveValueImpl::CSSPrimitiveValueImpl(PairImpl *p) -{ - m_value.pair = p; - if (m_value.pair) - m_value.pair->ref(); - m_type = CSSPrimitiveValue::CSS_PAIR; -} - - -CSSPrimitiveValueImpl::~CSSPrimitiveValueImpl() -{ - cleanup(); -} - -void CSSPrimitiveValueImpl::cleanup() -{ - switch(m_type) { - case CSSPrimitiveValue::CSS_STRING: - case CSSPrimitiveValue::CSS_URI: - case CSSPrimitiveValue::CSS_ATTR: - if(m_value.string) m_value.string->deref(); - break; - case CSSPrimitiveValue::CSS_COUNTER: - m_value.counter->deref(); - break; - case CSSPrimitiveValue::CSS_RECT: - m_value.rect->deref(); - break; - case CSSPrimitiveValue::CSS_PAIR: - m_value.pair->deref(); - break; - default: - break; - } - - m_type = 0; -} - -int CSSPrimitiveValueImpl::computeLength( khtml::RenderStyle *style, TQPaintDeviceMetrics *devMetrics ) -{ - double result = computeLengthFloat( style, devMetrics ); - // This conversion is imprecise, often resulting in values of, e.g., 44.99998. We - // need to go ahead and round if we're really close to the next integer value. - int intResult = (int)(result + (result < 0 ? -0.01 : +0.01)); - return intResult; -} - -double CSSPrimitiveValueImpl::computeLengthFloat( khtml::RenderStyle *style, TQPaintDeviceMetrics *devMetrics ) -{ - unsigned short type = primitiveType(); - - double dpiY = 72.; // fallback - if ( devMetrics ) - dpiY = devMetrics->logicalDpiY(); - if ( !khtml::printpainter && dpiY < 96 ) - dpiY = 96.; - - double factor = 1.; - switch(type) - { - case CSSPrimitiveValue::CSS_EMS: - factor = style->font().pixelSize(); - break; - case CSSPrimitiveValue::CSS_EXS: - { - TQFontMetrics fm = style->fontMetrics(); -#ifdef APPLE_CHANGES - factor = fm.xHeight(); -#else - TQRect b = fm.boundingRect('x'); - factor = b.height(); -#endif - break; - } - case CSSPrimitiveValue::CSS_PX: - break; - case CSSPrimitiveValue::CSS_CM: - factor = dpiY/2.54; //72dpi/(2.54 cm/in) - break; - case CSSPrimitiveValue::CSS_MM: - factor = dpiY/25.4; - break; - case CSSPrimitiveValue::CSS_IN: - factor = dpiY; - break; - case CSSPrimitiveValue::CSS_PT: - factor = dpiY/72.; - break; - case CSSPrimitiveValue::CSS_PC: - // 1 pc == 12 pt - factor = dpiY*12./72.; - break; - default: - return -1; - } - - return floatValue(type)*factor; -} - -void CSSPrimitiveValueImpl::setFloatValue( unsigned short unitType, double floatValue, int &exceptioncode ) -{ - exceptioncode = 0; - cleanup(); - // ### check if property supports this type - if(m_type > CSSPrimitiveValue::CSS_DIMENSION) { - exceptioncode = CSSException::SYNTAX_ERR + CSSException::_EXCEPTION_OFFSET; - return; - } - //if(m_type > CSSPrimitiveValue::CSS_DIMENSION) throw DOMException(DOMException::INVALID_ACCESS_ERR); - m_value.num = floatValue; - m_type = unitType; -} - -void CSSPrimitiveValueImpl::setStringValue( unsigned short stringType, const DOMString &stringValue, int &exceptioncode ) -{ - exceptioncode = 0; - cleanup(); - //if(m_type < CSSPrimitiveValue::CSS_STRING) throw DOMException(DOMException::INVALID_ACCESS_ERR); - //if(m_type > CSSPrimitiveValue::CSS_ATTR) throw DOMException(DOMException::INVALID_ACCESS_ERR); - if(m_type < CSSPrimitiveValue::CSS_STRING || m_type > CSSPrimitiveValue::CSS_ATTR) { - exceptioncode = CSSException::SYNTAX_ERR + CSSException::_EXCEPTION_OFFSET; - return; - } - if(stringType != CSSPrimitiveValue::CSS_IDENT) - { - m_value.string = stringValue.implementation(); - m_value.string->ref(); - m_type = stringType; - } - // ### parse ident -} - -unsigned short CSSPrimitiveValueImpl::cssValueType() const -{ - return CSSValue::CSS_PRIMITIVE_VALUE; -} - -bool CSSPrimitiveValueImpl::parseString( const DOMString &/*string*/, bool ) -{ - // ### - kdDebug() << "WARNING: CSSPrimitiveValueImpl::parseString, unimplemented, was called" << endl; - return false; -} - -int CSSPrimitiveValueImpl::getIdent() -{ - if(m_type != CSSPrimitiveValue::CSS_IDENT) return 0; - return m_value.ident; -} - -DOM::DOMString CSSPrimitiveValueImpl::cssText() const -{ - // ### return the original value instead of a generated one (e.g. color - // name if it was specified) - check what spec says about this - DOMString text; - switch ( m_type ) { - case CSSPrimitiveValue::CSS_UNKNOWN: - // ### - break; - case CSSPrimitiveValue::CSS_NUMBER: - text = DOMString(TQString::number( (int)m_value.num )); - break; - case CSSPrimitiveValue::CSS_PERCENTAGE: - text = DOMString(TQString::number( m_value.num ) + "%"); - break; - case CSSPrimitiveValue::CSS_EMS: - text = DOMString(TQString::number( m_value.num ) + "em"); - break; - case CSSPrimitiveValue::CSS_EXS: - text = DOMString(TQString::number( m_value.num ) + "ex"); - break; - case CSSPrimitiveValue::CSS_PX: - text = DOMString(TQString::number( m_value.num ) + "px"); - break; - case CSSPrimitiveValue::CSS_CM: - text = DOMString(TQString::number( m_value.num ) + "cm"); - break; - case CSSPrimitiveValue::CSS_MM: - text = DOMString(TQString::number( m_value.num ) + "mm"); - break; - case CSSPrimitiveValue::CSS_IN: - text = DOMString(TQString::number( m_value.num ) + "in"); - break; - case CSSPrimitiveValue::CSS_PT: - text = DOMString(TQString::number( m_value.num ) + "pt"); - break; - case CSSPrimitiveValue::CSS_PC: - text = DOMString(TQString::number( m_value.num ) + "pc"); - break; - case CSSPrimitiveValue::CSS_DEG: - text = DOMString(TQString::number( m_value.num ) + "deg"); - break; - case CSSPrimitiveValue::CSS_RAD: - text = DOMString(TQString::number( m_value.num ) + "rad"); - break; - case CSSPrimitiveValue::CSS_GRAD: - text = DOMString(TQString::number( m_value.num ) + "grad"); - break; - case CSSPrimitiveValue::CSS_MS: - text = DOMString(TQString::number( m_value.num ) + "ms"); - break; - case CSSPrimitiveValue::CSS_S: - text = DOMString(TQString::number( m_value.num ) + "s"); - break; - case CSSPrimitiveValue::CSS_HZ: - text = DOMString(TQString::number( m_value.num ) + "hz"); - break; - case CSSPrimitiveValue::CSS_KHZ: - text = DOMString(TQString::number( m_value.num ) + "khz"); - break; - case CSSPrimitiveValue::CSS_DIMENSION: - // ### - break; - case CSSPrimitiveValue::CSS_STRING: - text = quoteStringIfNeeded(m_value.string); - break; - case CSSPrimitiveValue::CSS_URI: - text = "url("; - text += DOMString( m_value.string ); - text += ")"; - break; - case CSSPrimitiveValue::CSS_IDENT: - text = getValueName(m_value.ident); - break; - case CSSPrimitiveValue::CSS_ATTR: - text = "attr("; - text += DOMString( m_value.string ); - text += ")"; - break; - case CSSPrimitiveValue::CSS_COUNTER: - text = "counter("; - text += m_value.counter->m_identifier; - text += ")"; - // ### add list-style and separator - break; - case CSSPrimitiveValue::CSS_RECT: - { - RectImpl* rectVal = getRectValue(); - text = "rect("; - text += rectVal->top()->cssText() + " "; - text += rectVal->right()->cssText() + " "; - text += rectVal->bottom()->cssText() + " "; - text += rectVal->left()->cssText() + ")"; - break; - } - case CSSPrimitiveValue::CSS_RGBCOLOR: - if (tqAlpha(m_value.rgbcolor) != 0xFF) { - if (m_value.rgbcolor == khtml::transparentColor) - text = "transparent"; - else - text = "rgba(" + TQString::number(tqRed (m_value.rgbcolor)) + "," - + TQString::number(tqBlue (m_value.rgbcolor)) + "," - + TQString::number(tqGreen(m_value.rgbcolor)) + "," - + TQString::number(tqAlpha(m_value.rgbcolor)/255.0) + ")"; - } else { - text = TQString(TQColor(m_value.rgbcolor).name()); - } - break; - case CSSPrimitiveValue::CSS_PAIR: - text = m_value.pair->first()->cssText(); - text += " "; - text += m_value.pair->second()->cssText(); - break; - default: - break; - } - return text; -} - -// ----------------------------------------------------------------- - -RectImpl::RectImpl() -{ - m_top = 0; - m_right = 0; - m_bottom = 0; - m_left = 0; -} - -RectImpl::~RectImpl() -{ - if (m_top) m_top->deref(); - if (m_right) m_right->deref(); - if (m_bottom) m_bottom->deref(); - if (m_left) m_left->deref(); -} - -void RectImpl::setTop( CSSPrimitiveValueImpl *top ) -{ - if( top ) top->ref(); - if ( m_top ) m_top->deref(); - m_top = top; -} - -void RectImpl::setRight( CSSPrimitiveValueImpl *right ) -{ - if( right ) right->ref(); - if ( m_right ) m_right->deref(); - m_right = right; -} - -void RectImpl::setBottom( CSSPrimitiveValueImpl *bottom ) -{ - if( bottom ) bottom->ref(); - if ( m_bottom ) m_bottom->deref(); - m_bottom = bottom; -} - -void RectImpl::setLeft( CSSPrimitiveValueImpl *left ) -{ - if( left ) left->ref(); - if ( m_left ) m_left->deref(); - m_left = left; -} - -// ----------------------------------------------------------------- - -PairImpl::~PairImpl() -{ - if (m_first) m_first->deref(); if (m_second) m_second->deref(); -} - -void PairImpl::setFirst(CSSPrimitiveValueImpl* first) -{ - if (first == m_first) return; - if (m_first) m_first->deref(); - m_first = first; - if (m_first) m_first->ref(); -} - -void PairImpl::setSecond(CSSPrimitiveValueImpl* second) -{ - if (second == m_second) return; - if (m_second) m_second->deref(); - m_second = second; - if (m_second) m_second->ref(); -} - -// ----------------------------------------------------------------- - -CSSImageValueImpl::CSSImageValueImpl(const DOMString &url, const StyleBaseImpl* style) - : CSSPrimitiveValueImpl(url, CSSPrimitiveValue::CSS_URI) -{ - khtml::DocLoader *docLoader = 0; - const StyleBaseImpl *root = style; - while (root->parent()) - root = root->parent(); - if (root->isCSSStyleSheet()) - docLoader = static_cast<const CSSStyleSheetImpl*>(root)->docLoader(); - - m_image = docLoader->requestImage(url); - if(m_image) m_image->ref(this); -} - -CSSImageValueImpl::CSSImageValueImpl() - : CSSPrimitiveValueImpl(CSS_VAL_NONE) -{ - m_image = 0; -} - -CSSImageValueImpl::~CSSImageValueImpl() -{ - if(m_image) m_image->deref(this); -} - -// ------------------------------------------------------------------------ - -FontFamilyValueImpl::FontFamilyValueImpl( const TQString &string) -: CSSPrimitiveValueImpl( DOMString(string), CSSPrimitiveValue::CSS_STRING) -{ - static const TQRegExp parenReg(" \\(.*\\)$"); - static const TQRegExp braceReg(" \\[.*\\]$"); - - parsedFontName = string; - // a language tag is often added in braces at the end. Remove it. - parsedFontName.replace(parenReg, TQString()); - // remove [Xft] qualifiers - parsedFontName.replace(braceReg, TQString()); - -#ifndef APPLE_CHANGES - const TQString &available = KHTMLSettings::availableFamilies(); - - parsedFontName = parsedFontName.lower(); - // kdDebug(0) << "searching for face '" << parsedFontName << "'" << endl; - - int pos = available.find( ',' + parsedFontName + ',', 0, false ); - if ( pos == -1 ) { - // many pages add extra MSs to make sure it's windows only ;( - if ( parsedFontName.startsWith( "ms " ) ) - parsedFontName = parsedFontName.mid( 3 ); - if ( parsedFontName.endsWith( " ms" ) ) - parsedFontName.truncate( parsedFontName.length() - 3 ); - pos = available.find( ",ms " + parsedFontName + ',', 0, false ); - if ( pos == -1 ) - pos = available.find( ',' + parsedFontName + " ms,", 0, false ); - } - - if ( pos != -1 ) { - ++pos; - int p = available.find(',', pos); - assert( p != -1 ); // available is supposed to start and end with , - parsedFontName = available.mid( pos, p - pos); - // kdDebug(0) << "going for '" << parsedFontName << "'" << endl; - } else - parsedFontName = TQString::null; - -#endif // !APPLE_CHANGES -} - -FontValueImpl::FontValueImpl() - : style(0), variant(0), weight(0), size(0), lineHeight(0), family(0) -{ -} - -FontValueImpl::~FontValueImpl() -{ - delete style; - delete variant; - delete weight; - delete size; - delete lineHeight; - delete family; -} - -DOMString FontValueImpl::cssText() const -{ - // font variant weight size / line-height family - - DOMString result(""); - - if (style) { - result += style->cssText(); - } - if (variant) { - if (result.length() > 0) { - result += " "; - } - result += variant->cssText(); - } - if (weight) { - if (result.length() > 0) { - result += " "; - } - result += weight->cssText(); - } - if (size) { - if (result.length() > 0) { - result += " "; - } - result += size->cssText(); - } - if (lineHeight) { - if (!size) { - result += " "; - } - result += "/"; - result += lineHeight->cssText(); - } - if (family) { - if (result.length() > 0) { - result += " "; - } - result += family->cssText(); - } - - return result; -} - -QuotesValueImpl::QuotesValueImpl() - : levels(0) -{ -} - -DOMString QuotesValueImpl::cssText() const -{ - return "\"" + data.join("\" \"") + "\""; -} - -void QuotesValueImpl::addLevel(const TQString& open, const TQString& close) -{ - data.append(open); - data.append(close); - levels++; -} - -TQString QuotesValueImpl::openQuote(int level) const -{ - if (levels == 0) return ""; - level--; // increments are calculated before openQuote is called -// kdDebug( 6080 ) << "Open quote level:" << level << endl; - if (level < 0) level = 0; - else - if (level >= (int) levels) level = (int) (levels-1); - return data[level*2]; -} - -TQString QuotesValueImpl::closeQuote(int level) const -{ - if (levels == 0) return ""; -// kdDebug( 6080 ) << "Close quote level:" << level << endl; - if (level < 0) level = 0; - else - if (level >= (int) levels) level = (int) (levels-1); - return data[level*2+1]; -} - -// Used for text-shadow and box-shadow -ShadowValueImpl::ShadowValueImpl(CSSPrimitiveValueImpl* _x, CSSPrimitiveValueImpl* _y, - CSSPrimitiveValueImpl* _blur, CSSPrimitiveValueImpl* _color) - :x(_x), y(_y), blur(_blur), color(_color) -{} - -ShadowValueImpl::~ShadowValueImpl() -{ - delete x; - delete y; - delete blur; - delete color; -} - -DOMString ShadowValueImpl::cssText() const -{ - DOMString text(""); - if (color) { - text += color->cssText(); - } - if (x) { - if (text.length() > 0) { - text += " "; - } - text += x->cssText(); - } - if (y) { - if (text.length() > 0) { - text += " "; - } - text += y->cssText(); - } - if (blur) { - if (text.length() > 0) { - text += " "; - } - text += blur->cssText(); - } - - return text; -} - -DOMString CounterActImpl::cssText() const -{ - DOMString text(m_counter); - text += DOMString(TQString::number(m_value)); - - return text; -} - -DOMString CSSProperty::cssText() const -{ - return getPropertyName(m_id) + DOMString(": ") + m_value->cssText() + (m_important ? DOMString(" !important") : DOMString()) + DOMString("; "); -} diff --git a/khtml/css/css_valueimpl.h b/khtml/css/css_valueimpl.h deleted file mode 100644 index 3566c00cb..000000000 --- a/khtml/css/css_valueimpl.h +++ /dev/null @@ -1,461 +0,0 @@ -/* - * This file is part of the DOM implementation for KDE. - * - * Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org) - * (C) 2004, 2005, 2006 Apple Computer, Inc. - * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.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., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - */ -#ifndef _CSS_css_valueimpl_h_ -#define _CSS_css_valueimpl_h_ - -#include "dom/css_value.h" -#include "dom/dom_string.h" -#include "css/css_base.h" -#include "misc/loader_client.h" -#include "misc/shared.h" - -#include <tqintdict.h> - -namespace khtml { - class RenderStyle; - class CachedImage; -} - - -namespace DOM { - -class CSSRuleImpl; -class CSSValueImpl; -class NodeImpl; -class CounterImpl; -class PairImpl; - - -class CSSStyleDeclarationImpl : public StyleBaseImpl -{ -public: - CSSStyleDeclarationImpl(CSSRuleImpl *parentRule); - CSSStyleDeclarationImpl(CSSRuleImpl *parentRule, TQPtrList<CSSProperty> *lstValues); - virtual ~CSSStyleDeclarationImpl(); - - CSSStyleDeclarationImpl& operator=( const CSSStyleDeclarationImpl&); - - virtual unsigned long length() const; - CSSRuleImpl *parentRule() const; - virtual DOM::DOMString removeProperty( int propertyID, bool NonCSSHints = false ); - virtual bool setProperty ( int propertyId, const DOM::DOMString &value, bool important = false, bool nonCSSHint = false); - virtual void setProperty ( int propertyId, int value, bool important = false, bool nonCSSHint = false); - // this treats integers as pixels! - // needed for conversion of html attributes - virtual void setLengthProperty(int id, const DOM::DOMString &value, bool important, bool nonCSSHint = true, bool multiLength = false); - - // add a whole, unparsed property - virtual void setProperty ( const DOMString &propertyString); - virtual DOM::DOMString item ( unsigned long index ) const; - - DOM::DOMString cssText() const; - void setCssText(DOM::DOMString str); - - virtual bool isStyleDeclaration() const { return true; } - virtual bool parseString( const DOMString &string, bool = false ); - - virtual CSSValueImpl *getPropertyCSSValue( int propertyID ) const; - virtual DOMString getPropertyValue( int propertyID ) const; - virtual bool getPropertyPriority( int propertyID ) const; - - TQPtrList<CSSProperty> *values() const { return m_lstValues; } - void setNode(NodeImpl *_node) { m_node = _node; } - - void setChanged(); - - void removeCSSHints(); - -protected: - DOMString getShortHandValue( const int* properties, int number ) const; - DOMString get4Values( const int* properties ) const; - - TQPtrList<CSSProperty> *m_lstValues; - NodeImpl *m_node; - -private: - // currently not needed - make sure its not used - CSSStyleDeclarationImpl(const CSSStyleDeclarationImpl& o); -}; - -class CSSValueImpl : public StyleBaseImpl -{ -public: - CSSValueImpl() : StyleBaseImpl() {} - - virtual unsigned short cssValueType() const = 0; - - virtual DOM::DOMString cssText() const = 0; - - virtual bool isValue() const { return true; } - virtual bool isFontValue() const { return false; } -}; - -class CSSInheritedValueImpl : public CSSValueImpl -{ -public: - CSSInheritedValueImpl() : CSSValueImpl() {} - virtual ~CSSInheritedValueImpl() {} - - virtual unsigned short cssValueType() const; - virtual DOM::DOMString cssText() const; -}; - -class CSSInitialValueImpl : public CSSValueImpl -{ -public: - virtual unsigned short cssValueType() const; - virtual DOM::DOMString cssText() const; -}; - -class CSSValueListImpl : public CSSValueImpl -{ -public: - CSSValueListImpl() : CSSValueImpl() {} - - virtual ~CSSValueListImpl(); - - unsigned long length() const { return m_values.count(); } - CSSValueImpl *item ( unsigned long index ) { return m_values.at(index); } - - virtual bool isValueList() const { return true; } - - virtual unsigned short cssValueType() const; - - void append(CSSValueImpl *val); - virtual DOM::DOMString cssText() const; - -protected: - TQPtrList<CSSValueImpl> m_values; -}; - - -class Counter; -class RGBColor; -class Rect; - -class CSSPrimitiveValueImpl : public CSSValueImpl -{ -public: - CSSPrimitiveValueImpl(); - CSSPrimitiveValueImpl(int ident); - CSSPrimitiveValueImpl(double num, CSSPrimitiveValue::UnitTypes type); - CSSPrimitiveValueImpl(const DOMString &str, CSSPrimitiveValue::UnitTypes type); - CSSPrimitiveValueImpl(CounterImpl *c); - CSSPrimitiveValueImpl( RectImpl *r); - CSSPrimitiveValueImpl(QRgb color); - CSSPrimitiveValueImpl(PairImpl *p); - - virtual ~CSSPrimitiveValueImpl(); - - void cleanup(); - - unsigned short primitiveType() const { return m_type; } - - /* - * computes a length in pixels out of the given CSSValue. Need the RenderStyle to get - * the fontinfo in case val is defined in em or ex. - * - * The metrics have to be a bit different for screen and printer output. - * For screen output we assume 1 inch == 72 px, for printer we assume 300 dpi - * - * this is screen/printer dependent, so we probably need a config option for this, - * and some tool to calibrate. - */ - int computeLength( khtml::RenderStyle *style, TQPaintDeviceMetrics *devMetrics ); - - double computeLengthFloat( khtml::RenderStyle *style, TQPaintDeviceMetrics *devMetrics ); - - // use with care!!! - void setPrimitiveType(unsigned short type) { m_type = type; } - void setFloatValue ( unsigned short unitType, double floatValue, int &exceptioncode ); - double floatValue ( unsigned short/* unitType */) const { return m_value.num; } - - void setStringValue ( unsigned short stringType, const DOM::DOMString &stringValue, int &exceptioncode ); - DOM::DOMStringImpl *getStringValue () const { - return ( ( m_type < CSSPrimitiveValue::CSS_STRING || - m_type > CSSPrimitiveValue::CSS_ATTR || - m_type == CSSPrimitiveValue::CSS_IDENT ) ? // fix IDENT - 0 : m_value.string ); - } - CounterImpl *getCounterValue () const { - return ( m_type != CSSPrimitiveValue::CSS_COUNTER ? 0 : m_value.counter ); - } - - RectImpl *getRectValue () const { - return ( m_type != CSSPrimitiveValue::CSS_RECT ? 0 : m_value.rect ); - } - - QRgb getRGBColorValue () const { - return ( m_type != CSSPrimitiveValue::CSS_RGBCOLOR ? 0 : m_value.rgbcolor ); - } - - PairImpl* getPairValue() const { - return (m_type != CSSPrimitiveValue::CSS_PAIR ? 0 : m_value.pair); - } - - virtual bool isPrimitiveValue() const { return true; } - virtual unsigned short cssValueType() const; - - int getIdent(); - - virtual bool parseString( const DOMString &string, bool = false); - virtual DOM::DOMString cssText() const; - - virtual bool isQuirkValue() const { return false; } - -protected: - int m_type; - union { - int ident; - double num; - DOM::DOMStringImpl *string; - CounterImpl *counter; - RectImpl *rect; - QRgb rgbcolor; - PairImpl* pair; - } m_value; -}; - -// This value is used to handle quirky margins in reflow roots (body, td, and th) like WinIE. -// The basic idea is that a stylesheet can use the value __qem (for quirky em) instead of em -// in a stylesheet. When the quirky value is used, if you're in quirks mode, the margin will -// collapse away inside a table cell. -class CSSQuirkPrimitiveValueImpl : public CSSPrimitiveValueImpl -{ -public: - CSSQuirkPrimitiveValueImpl(double num, CSSPrimitiveValue::UnitTypes type) - :CSSPrimitiveValueImpl(num, type) {} - - virtual ~CSSQuirkPrimitiveValueImpl() {} - - virtual bool isQuirkValue() const { return true; } -}; - -class CounterImpl : public khtml::Shared<CounterImpl> { -public: - CounterImpl() : m_listStyle(0) { } - DOMString identifier() const { return m_identifier; } - unsigned int listStyle() const { return m_listStyle; } - DOMString separator() const { return m_separator; } - - DOMString m_identifier; - unsigned int m_listStyle; - DOMString m_separator; -}; - -class RectImpl : public khtml::Shared<RectImpl> { -public: - RectImpl(); - ~RectImpl(); - - CSSPrimitiveValueImpl *top() const { return m_top; } - CSSPrimitiveValueImpl *right() const { return m_right; } - CSSPrimitiveValueImpl *bottom() const { return m_bottom; } - CSSPrimitiveValueImpl *left() const { return m_left; } - - void setTop( CSSPrimitiveValueImpl *top ); - void setRight( CSSPrimitiveValueImpl *right ); - void setBottom( CSSPrimitiveValueImpl *bottom ); - void setLeft( CSSPrimitiveValueImpl *left ); -protected: - CSSPrimitiveValueImpl *m_top; - CSSPrimitiveValueImpl *m_right; - CSSPrimitiveValueImpl *m_bottom; - CSSPrimitiveValueImpl *m_left; -}; - -// A primitive value representing a pair. This is useful for properties like border-radius, background-size/position, -// and border-spacing (all of which are space-separated sets of two values). At the moment we are only using it for -// border-radius and background-size, but (FIXME) border-spacing and background-position could be converted over to use -// it (eliminating some extra -webkit- internal properties). -class PairImpl : public khtml::Shared<PairImpl> { -public: - PairImpl() : m_first(0), m_second(0) { } - PairImpl(CSSPrimitiveValueImpl* first, CSSPrimitiveValueImpl* second) - : m_first(first), m_second(second) { if (first) first->ref(); if (second) second->ref(); } - virtual ~PairImpl(); - - CSSPrimitiveValueImpl* first() const { return m_first; } - CSSPrimitiveValueImpl* second() const { return m_second; } - - void setFirst(CSSPrimitiveValueImpl* first); - void setSecond(CSSPrimitiveValueImpl* second); - -protected: - CSSPrimitiveValueImpl* m_first; - CSSPrimitiveValueImpl* m_second; -}; - - -class CSSImageValueImpl : public CSSPrimitiveValueImpl, public khtml::CachedObjectClient -{ -public: - CSSImageValueImpl(const DOMString &url, const StyleBaseImpl *style); - CSSImageValueImpl(); - virtual ~CSSImageValueImpl(); - - khtml::CachedImage *image() { return m_image; } -protected: - khtml::CachedImage *m_image; -}; - -class FontFamilyValueImpl : public CSSPrimitiveValueImpl -{ -public: - FontFamilyValueImpl( const TQString &string); - const TQString &fontName() const { return parsedFontName; } - int genericFamilyType() const { return _genericFamilyType; } -protected: - TQString parsedFontName; -private: - int _genericFamilyType; -}; - -class FontValueImpl : public CSSValueImpl -{ -public: - FontValueImpl(); - virtual ~FontValueImpl(); - - virtual unsigned short cssValueType() const { return CSSValue::CSS_CUSTOM; } - - virtual DOM::DOMString cssText() const; - - virtual bool isFontValue() const { return true; } - - CSSPrimitiveValueImpl *style; - CSSPrimitiveValueImpl *variant; - CSSPrimitiveValueImpl *weight; - CSSPrimitiveValueImpl *size; - CSSPrimitiveValueImpl *lineHeight; - CSSValueListImpl *family; -}; - -// Used for quotes -class QuotesValueImpl : public CSSValueImpl -{ -public: - QuotesValueImpl(); -// virtual ~QuotesValueImpl(); - - virtual unsigned short cssValueType() const { return CSSValue::CSS_CUSTOM; } - virtual DOM::DOMString cssText() const; - - void addLevel(const TQString& open, const TQString& close); - TQString openQuote(int level) const; - TQString closeQuote(int level) const; - - unsigned int levels; - TQStringList data; -}; - -// Used for text-shadow and box-shadow -class ShadowValueImpl : public CSSValueImpl -{ -public: - ShadowValueImpl(CSSPrimitiveValueImpl* _x, CSSPrimitiveValueImpl* _y, - CSSPrimitiveValueImpl* _blur, CSSPrimitiveValueImpl* _color); - virtual ~ShadowValueImpl(); - - virtual unsigned short cssValueType() const { return CSSValue::CSS_CUSTOM; } - - virtual DOM::DOMString cssText() const; - - CSSPrimitiveValueImpl* x; - CSSPrimitiveValueImpl* y; - CSSPrimitiveValueImpl* blur; - CSSPrimitiveValueImpl* color; -}; - -// Used for counter-reset and counter-increment -class CounterActImpl : public CSSValueImpl { - public: - CounterActImpl(const DOMString &c, short v) : m_counter(c), m_value(v) { } - virtual ~CounterActImpl() {}; - - virtual unsigned short cssValueType() const { return CSSValue::CSS_CUSTOM; } - virtual DOM::DOMString cssText() const; - - const DOMString& counter() const { return m_counter; } - short value() const { return m_value; } - void setValue( const short v ) { m_value = v; } - - DOM::DOMString m_counter; - short m_value; -}; - - -// ------------------------------------------------------------------------------ - -// another helper class -class CSSProperty -{ -public: - CSSProperty() - { - m_id = -1; - m_important = false; - nonCSSHint = false; - m_value = 0; - } - CSSProperty(const CSSProperty& o) - { - m_id = o.m_id; - m_important = o.m_important; - nonCSSHint = o.nonCSSHint; - m_value = o.m_value; - if (m_value) m_value->ref(); - } - ~CSSProperty() { - if(m_value) m_value->deref(); - } - - void setValue(CSSValueImpl *val) { - if ( val != m_value ) { - if(m_value) m_value->deref(); - m_value = val; - if(m_value) m_value->ref(); - } - } - - int id() const { return m_id; } - - bool isImportant() const { return m_important; } - - CSSValueImpl *value() const { return m_value; } - - DOM::DOMString cssText() const; - - // make sure the following fits in 4 bytes. - signed int m_id : 29; - bool m_important : 1; - bool nonCSSHint : 1; -protected: - CSSValueImpl *m_value; -}; - - -} // namespace - -#endif diff --git a/khtml/css/csshelper.cpp b/khtml/css/csshelper.cpp deleted file mode 100644 index b388d2215..000000000 --- a/khtml/css/csshelper.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/* - * This file is part of the CSS implementation for KDE. - * - * Copyright (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. - * - */ -#include "csshelper.h" - -#include <tqfontmetrics.h> -#include <tqfontinfo.h> -#include <tqpaintdevice.h> -#include <tqpaintdevicemetrics.h> -#include <tqfontdatabase.h> - -#include <kcharsets.h> -#include <kglobal.h> -#include <kdebug.h> - -#include "rendering/render_style.h" -#include "css_valueimpl.h" -#include "dom/css_value.h" -#include "misc/helper.h" -#include "xml/dom_stringimpl.h" -#include "khtml_settings.h" - -using namespace DOM; -using namespace khtml; - - -DOMString khtml::parseURL(const DOMString &url) -{ - DOMStringImpl* i = url.implementation(); - if(!i) return DOMString(); - - int o = 0; - int l = i->l; - while(o < l && (i->s[o] <= TQChar(' '))) { o++; l--; } - while(l > 0 && (i->s[o+l-1] <= TQChar(' '))) l--; - - if(l >= 5 && - (i->s[o].lower() == 'u') && - (i->s[o+1].lower() == 'r') && - (i->s[o+2].lower() == 'l') && - i->s[o+3].latin1() == '(' && - i->s[o+l-1].latin1() == ')') { - o += 4; - l -= 5; - } - - while(o < l && (i->s[o] <= TQChar(' '))) { o++; l--; } - while(l > 0 && (i->s[o+l-1] <= TQChar(' '))) l--; - - if(l >= 2 && i->s[o] == i->s[o+l-1] && - (i->s[o].latin1() == '\'' || i->s[o].latin1() == '\"')) { - o++; - l -= 2; - } - - while(o < l && (i->s[o] <= TQChar(' '))) { o++; l--; } - while(l > 0 && (i->s[o+l-1] <= TQChar(' '))) l--; - - DOMStringImpl* j = new DOMStringImpl(i->s+o,l); - - int nl = 0; - for(int k = o; k < o+l; k++) - if(i->s[k].unicode() > '\r') - j->s[nl++] = i->s[k]; - - j->l = nl; - - return j; -} diff --git a/khtml/css/csshelper.h b/khtml/css/csshelper.h deleted file mode 100644 index 1ab8ac3ce..000000000 --- a/khtml/css/csshelper.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * This file is part of the CSS implementation for KDE. - * - * Copyright (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. - * - */ -#ifndef css_helper_h -#define css_helper_h - -#include <tqcolor.h> -#include <tqfont.h> - -#include "dom/dom_string.h" - -class TQPaintDeviceMetrics; -class KHTMLSettings; - -namespace DOM -{ - class CSSPrimitiveValueImpl; -} - -namespace khtml -{ - class RenderStyle; - - /* - * mostly just removes the url("...") brace - */ - DOM::DOMString parseURL(const DOM::DOMString &url); - -} - - - -#endif diff --git a/khtml/css/cssparser.cpp b/khtml/css/cssparser.cpp deleted file mode 100644 index b4480ab7d..000000000 --- a/khtml/css/cssparser.cpp +++ /dev/null @@ -1,2614 +0,0 @@ -/* - * This file is part of the DOM implementation for KDE. - * - * Copyright (C) 2003 Lars Knoll (knoll@kde.org) - * Copyright (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) - * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. - * - * 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. - */ - -// #define CSS_DEBUG -// #define TOKEN_DEBUG -#define YYDEBUG 0 - -#include <kdebug.h> -#include <kglobal.h> -#include <kurl.h> - -#include "cssparser.h" -#include "css_valueimpl.h" -#include "css_ruleimpl.h" -#include "css_stylesheetimpl.h" -#include "cssproperties.h" -#include "cssvalues.h" -#include "misc/helper.h" -#include "csshelper.h" -using namespace DOM; - -#include <stdlib.h> -#include <assert.h> - -// used to promote background: left to left center -#define BACKGROUND_SKIP_CENTER( num ) \ - if ( !pos_ok[ num ] && expected != 1 ) { \ - pos_ok[num] = true; \ - pos[num] = 0; \ - skip_next = false; \ - } - -ValueList::~ValueList() -{ - unsigned numValues = m_values.size(); - for (unsigned i = 0; i < numValues; i++) - if (m_values[i].unit == Value::Function) - delete m_values[i].function; -} - -namespace { - class ShorthandScope { - public: - ShorthandScope(CSSParser* parser, int propId) : m_parser(parser) - { - if (!(m_parser->m_inParseShorthand++)) - m_parser->m_currentShorthand = propId; - } - ~ShorthandScope() - { - if (!(--m_parser->m_inParseShorthand)) - m_parser->m_currentShorthand = 0; - } - - private: - CSSParser* m_parser; - }; -} - -using namespace DOM; - -#if YYDEBUG > 0 -extern int cssyydebug; -#endif - -extern int cssyyparse( void * parser ); - -CSSParser *CSSParser::currentParser = 0; - -CSSParser::CSSParser( bool strictParsing ) -{ -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "CSSParser::CSSParser this=" << this << endl; -#endif - strict = strictParsing; - - parsedProperties = (CSSProperty **) malloc( 32 * sizeof( CSSProperty * ) ); - numParsedProperties = 0; - maxParsedProperties = 32; - - data = 0; - valueList = 0; - rule = 0; - id = 0; - important = false; - nonCSSHint = false; - - m_inParseShorthand = 0; - m_currentShorthand = 0; - m_implicitShorthand = false; - - yy_start = 1; - -#if YYDEBUG > 0 - cssyydebug = 1; -#endif - -} - -CSSParser::~CSSParser() -{ - if ( numParsedProperties ) - clearProperties(); - free( parsedProperties ); - - delete valueList; - -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "CSSParser::~CSSParser this=" << this << endl; -#endif - - free( data ); - -} - -unsigned int CSSParser::defaultNamespace() -{ - if (styleElement && styleElement->isCSSStyleSheet()) - return static_cast<CSSStyleSheetImpl*>(styleElement)->defaultNamespace(); - else - return anyNamespace; -} - -void CSSParser::runParser(int length) -{ - data[length-1] = 0; - data[length-2] = 0; - data[length-3] = ' '; - - yyTok = -1; - block_nesting = 0; - yy_hold_char = 0; - yyleng = 0; - yytext = yy_c_buf_p = data; - yy_hold_char = *yy_c_buf_p; - - CSSParser *old = currentParser; - currentParser = this; - cssyyparse( this ); - currentParser = old; -} - -void CSSParser::parseSheet( CSSStyleSheetImpl *sheet, const DOMString &string ) -{ - styleElement = sheet; - - int length = string.length() + 3; - data = (unsigned short *)malloc( length *sizeof( unsigned short ) ); - memcpy( data, string.unicode(), string.length()*sizeof( unsigned short) ); - -#ifdef CSS_DEBUG - kdDebug( 6080 ) << ">>>>>>> start parsing style sheet" << endl; -#endif - runParser(length); -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "<<<<<<< done parsing style sheet" << endl; -#endif - - delete rule; - rule = 0; -} - -CSSRuleImpl *CSSParser::parseRule( DOM::CSSStyleSheetImpl *sheet, const DOM::DOMString &string ) -{ - styleElement = sheet; - - const char khtml_rule[] = "@-khtml-rule{"; - int length = string.length() + 4 + strlen(khtml_rule); - assert( !data ); - data = (unsigned short *)malloc( length *sizeof( unsigned short ) ); - for ( unsigned int i = 0; i < strlen(khtml_rule); i++ ) - data[i] = khtml_rule[i]; - memcpy( data + strlen( khtml_rule ), string.unicode(), string.length()*sizeof( unsigned short) ); - // tqDebug("parse string = '%s'", TQConstString( (const TQChar *)data, length ).string().latin1() ); - data[length-4] = '}'; - - runParser(length); - - CSSRuleImpl *result = rule; - rule = 0; - - return result; -} - -bool CSSParser::parseValue( DOM::CSSStyleDeclarationImpl *declaration, int _id, const DOM::DOMString &string, - bool _important, bool _nonCSSHint ) -{ -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "CSSParser::parseValue: id=" << _id << " important=" << _important - << " nonCSSHint=" << _nonCSSHint << " value='" << string.string() << "'" << endl; -#endif - - styleElement = declaration->stylesheet(); - - const char khtml_value[] = "@-khtml-value{"; - int length = string.length() + 4 + strlen(khtml_value); - assert( !data ); - data = (unsigned short *)malloc( length *sizeof( unsigned short ) ); - for ( unsigned int i = 0; i < strlen(khtml_value); i++ ) - data[i] = khtml_value[i]; - memcpy( data + strlen( khtml_value ), string.unicode(), string.length()*sizeof( unsigned short) ); - data[length-4] = '}'; - // tqDebug("parse string = '%s'", TQConstString( (const TQChar *)data, length ).string().latin1() ); - - id = _id; - important = _important; - nonCSSHint = _nonCSSHint; - - runParser(length); - - delete rule; - rule = 0; - - bool ok = false; - if ( numParsedProperties ) { - ok = true; - for ( int i = 0; i < numParsedProperties; i++ ) { - declaration->removeProperty(parsedProperties[i]->m_id, nonCSSHint); - declaration->values()->append( parsedProperties[i] ); - } - numParsedProperties = 0; - } - - return ok; -} - -bool CSSParser::parseDeclaration( DOM::CSSStyleDeclarationImpl *declaration, const DOM::DOMString &string, - bool _nonCSSHint ) -{ -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "CSSParser::parseDeclaration: nonCSSHint=" << nonCSSHint - << " value='" << string.string() << "'" << endl; -#endif - - styleElement = declaration->stylesheet(); - - const char khtml_decls[] = "@-khtml-decls{"; - int length = string.length() + 4 + strlen(khtml_decls); - assert( !data ); - data = (unsigned short *)malloc( length *sizeof( unsigned short ) ); - for ( unsigned int i = 0; i < strlen(khtml_decls); i++ ) - data[i] = khtml_decls[i]; - memcpy( data + strlen( khtml_decls ), string.unicode(), string.length()*sizeof( unsigned short) ); - data[length-4] = '}'; - - nonCSSHint = _nonCSSHint; - - runParser(length); - - delete rule; - rule = 0; - - bool ok = false; - if ( numParsedProperties ) { - ok = true; - for ( int i = 0; i < numParsedProperties; i++ ) { - declaration->removeProperty(parsedProperties[i]->m_id, false); - declaration->values()->append( parsedProperties[i] ); - } - numParsedProperties = 0; - } - - return ok; -} - -void CSSParser::addProperty( int propId, CSSValueImpl *value, bool important ) -{ - CSSProperty *prop = new CSSProperty; - prop->m_id = propId; - prop->setValue( value ); - prop->m_important = important; - prop->nonCSSHint = nonCSSHint; - - if ( numParsedProperties >= maxParsedProperties ) { - maxParsedProperties += 32; - parsedProperties = (CSSProperty **) realloc( parsedProperties, - maxParsedProperties*sizeof( CSSProperty * ) ); - } - parsedProperties[numParsedProperties++] = prop; -} - -CSSStyleDeclarationImpl *CSSParser::createStyleDeclaration( CSSStyleRuleImpl *rule ) -{ - TQPtrList<CSSProperty> *propList = new TQPtrList<CSSProperty>; - propList->setAutoDelete( true ); - for ( int i = 0; i < numParsedProperties; i++ ) - propList->append( parsedProperties[i] ); - - numParsedProperties = 0; - return new CSSStyleDeclarationImpl(rule, propList); -} - -void CSSParser::clearProperties() -{ - for ( int i = 0; i < numParsedProperties; i++ ) - delete parsedProperties[i]; - numParsedProperties = 0; -} - -DOM::DocumentImpl *CSSParser::document() const -{ - const StyleBaseImpl* root = styleElement; - DocumentImpl *doc = 0; - while (root->parent()) - root = root->parent(); - if (root->isCSSStyleSheet()) - doc = static_cast<const CSSStyleSheetImpl*>(root)->doc(); - return doc; -} - - -// defines units allowed for a certain property, used in parseUnit -enum Units -{ - FUnknown = 0x0000, - FInteger = 0x0001, - FNumber = 0x0002, // Real Numbers - FPercent = 0x0004, - FLength = 0x0008, - FAngle = 0x0010, - FTime = 0x0020, - FFrequency = 0x0040, - FRelative = 0x0100, - FNonNeg = 0x0200 -}; - -static bool validUnit( Value *value, int unitflags, bool strict ) -{ - if ( unitflags & FNonNeg && value->fValue < 0 ) - return false; - - bool b = false; - switch( value->unit ) { - case CSSPrimitiveValue::CSS_NUMBER: - b = (unitflags & FNumber); - if ( !b && ( (unitflags & FLength) && (value->fValue == 0 || !strict ) ) ) { - value->unit = CSSPrimitiveValue::CSS_PX; - b = true; - } - if (!b && (unitflags & FInteger) && value->isInt) - b = true; - break; - case CSSPrimitiveValue::CSS_PERCENTAGE: - b = (unitflags & FPercent); - break; - case Value::Q_EMS: - case CSSPrimitiveValue::CSS_EMS: - case CSSPrimitiveValue::CSS_EXS: - case CSSPrimitiveValue::CSS_PX: - case CSSPrimitiveValue::CSS_CM: - case CSSPrimitiveValue::CSS_MM: - case CSSPrimitiveValue::CSS_IN: - case CSSPrimitiveValue::CSS_PT: - case CSSPrimitiveValue::CSS_PC: - b = (unitflags & FLength); - break; - case CSSPrimitiveValue::CSS_MS: - case CSSPrimitiveValue::CSS_S: - b = (unitflags & FTime); - break; - case CSSPrimitiveValue::CSS_DEG: - case CSSPrimitiveValue::CSS_RAD: - case CSSPrimitiveValue::CSS_GRAD: - case CSSPrimitiveValue::CSS_HZ: - case CSSPrimitiveValue::CSS_KHZ: - case CSSPrimitiveValue::CSS_DIMENSION: - default: - break; - } - return b; -} - -bool CSSParser::parseValue( int propId, bool important ) -{ - if ( !valueList ) return false; - - Value *value = valueList->current(); - - if ( !value ) - return false; - - int id = value->id; - - int num = inShorthand() ? 1 : valueList->size(); - - if ( id == CSS_VAL_INHERIT ) { - if (num != 1) - return false; - addProperty( propId, new CSSInheritedValueImpl(), important ); - return true; - } else if (id == CSS_VAL_INITIAL ) { - if (num != 1) - return false; - addProperty(propId, new CSSInitialValueImpl(), important); - return true; - } - - bool valid_primitive = false; - CSSValueImpl *parsedValue = 0; - - switch(propId) { - /* The comment to the left defines all valid value of this properties as defined - * in CSS 2, Appendix F. Property index - */ - - /* All the CSS properties are not supported by the renderer at the moment. - * Note that all the CSS2 Aural properties are only checked, if CSS_AURAL is defined - * (see parseAuralValues). As we don't support them at all this seems reasonable. - */ - - case CSS_PROP_SIZE: // <length>{1,2} | auto | portrait | landscape | inherit -// case CSS_PROP_PAGE: // <identifier> | auto // ### CHECK - // ### To be done - if (id) - valid_primitive = true; - break; - case CSS_PROP_UNICODE_BIDI: // normal | embed | bidi-override | inherit - if ( id == CSS_VAL_NORMAL || - id == CSS_VAL_EMBED || - id == CSS_VAL_BIDI_OVERRIDE ) - valid_primitive = true; - break; - - case CSS_PROP_POSITION: // static | relative | absolute | fixed | inherit - if ( id == CSS_VAL_STATIC || - id == CSS_VAL_RELATIVE || - id == CSS_VAL_ABSOLUTE || - id == CSS_VAL_FIXED ) - valid_primitive = true; - break; - - case CSS_PROP_PAGE_BREAK_AFTER: // auto | always | avoid | left | right | inherit - case CSS_PROP_PAGE_BREAK_BEFORE: // auto | always | avoid | left | right | inherit - if ( id == CSS_VAL_AUTO || - id == CSS_VAL_ALWAYS || - id == CSS_VAL_AVOID || - id == CSS_VAL_LEFT || - id == CSS_VAL_RIGHT ) - valid_primitive = true; - break; - - case CSS_PROP_PAGE_BREAK_INSIDE: // avoid | auto | inherit - if ( id == CSS_VAL_AUTO || - id == CSS_VAL_AVOID ) - valid_primitive = true; - break; - - case CSS_PROP_EMPTY_CELLS: // show | hide | inherit - if ( id == CSS_VAL_SHOW || - id == CSS_VAL_HIDE ) - valid_primitive = true; - break; - - case CSS_PROP_QUOTES: // [<string> <string>]+ | none | inherit - if (id == CSS_VAL_NONE) { - valid_primitive = true; - } else { - QuotesValueImpl *quotes = new QuotesValueImpl; - bool is_valid = true; - TQString open, close; - Value *val=valueList->current(); - while (val) { - if (val->unit == CSSPrimitiveValue::CSS_STRING) - open = qString(val->string); - else { - is_valid = false; - break; - } - valueList->next(); - val=valueList->current(); - if (val && val->unit == CSSPrimitiveValue::CSS_STRING) - close = qString(val->string); - else { - is_valid = false; - break; - } - quotes->addLevel(open, close); - valueList->next(); - val=valueList->current(); - } - if (is_valid) - parsedValue = quotes; - else - delete quotes; - } - break; - - case CSS_PROP_CONTENT: // normal | none | inherit | - // [ <string> | <uri> | <counter> | attr(X) | open-quote | close-quote | no-open-quote | no-close-quote ]+ - if ( id == CSS_VAL_NORMAL || id == CSS_VAL_NONE) - valid_primitive = true; - else - return parseContent( propId, important ); - break; - - case CSS_PROP_WHITE_SPACE: // normal | pre | nowrap | pre-wrap | pre-line | inherit - if ( id == CSS_VAL_NORMAL || - id == CSS_VAL_PRE || - id == CSS_VAL_PRE_WRAP || - id == CSS_VAL_PRE_LINE || - id == CSS_VAL_NOWRAP ) - valid_primitive = true; - break; - - case CSS_PROP_CLIP: // <shape> | auto | inherit - if ( id == CSS_VAL_AUTO ) - valid_primitive = true; - else if ( value->unit == Value::Function ) - return parseShape( propId, important ); - break; - - /* Start of supported CSS properties with validation. This is needed for parseShortHand to work - * correctly and allows optimization in khtml::applyRule(..) - */ - case CSS_PROP_CAPTION_SIDE: // top | bottom | left | right | inherit - // Left and right were deprecated in CSS 2.1 and never supported by KHTML - if ( /* id == CSS_VAL_LEFT || id == CSS_VAL_RIGHT || */ - id == CSS_VAL_TOP || id == CSS_VAL_BOTTOM) - valid_primitive = true; - break; - - case CSS_PROP_BORDER_COLLAPSE: // collapse | separate | inherit - if ( id == CSS_VAL_COLLAPSE || id == CSS_VAL_SEPARATE ) - valid_primitive = true; - break; - - case CSS_PROP_VISIBILITY: // visible | hidden | collapse | inherit - if (id == CSS_VAL_VISIBLE || id == CSS_VAL_HIDDEN || id == CSS_VAL_COLLAPSE) - valid_primitive = true; - break; - - case CSS_PROP_OVERFLOW: // visible | hidden | scroll | auto | marquee | inherit - case CSS_PROP_OVERFLOW_X: - case CSS_PROP_OVERFLOW_Y: - if (id == CSS_VAL_VISIBLE || id == CSS_VAL_HIDDEN || id == CSS_VAL_SCROLL || id == CSS_VAL_AUTO || - id == CSS_VAL_MARQUEE) - valid_primitive = true; - break; - - case CSS_PROP_LIST_STYLE_POSITION: // inside | outside | inherit - if ( id == CSS_VAL_INSIDE || id == CSS_VAL_OUTSIDE ) - valid_primitive = true; - break; - - case CSS_PROP_LIST_STYLE_TYPE: - // disc | circle | square | decimal | decimal-leading-zero | lower-roman | - // upper-roman | lower-greek | lower-alpha | lower-latin | upper-alpha | - // upper-latin | hebrew | armenian | georgian | cjk-ideographic | hiragana | - // katakana | hiragana-iroha | katakana-iroha | none | inherit - if ((id >= CSS_VAL_DISC && id <= CSS_VAL__KHTML_CLOSE_QUOTE) || id == CSS_VAL_NONE) - valid_primitive = true; - break; - - case CSS_PROP_DISPLAY: - // inline | block | list-item | run-in | inline-block | -khtml-ruler | table | - // inline-table | table-row-group | table-header-group | table-footer-group | table-row | - // table-column-group | table-column | table-cell | table-caption | none | inherit - if ((id >= CSS_VAL_INLINE && id <= CSS_VAL_TABLE_CAPTION) || id == CSS_VAL_NONE) - valid_primitive = true; - break; - - case CSS_PROP_DIRECTION: // ltr | rtl | inherit - if ( id == CSS_VAL_LTR || id == CSS_VAL_RTL ) - valid_primitive = true; - break; - - case CSS_PROP_TEXT_TRANSFORM: // capitalize | uppercase | lowercase | none | inherit - if ((id >= CSS_VAL_CAPITALIZE && id <= CSS_VAL_LOWERCASE) || id == CSS_VAL_NONE) - valid_primitive = true; - break; - - case CSS_PROP_FLOAT: // left | right | none | khtml_left | khtml_right | inherit + center for buggy CSS - if ( id == CSS_VAL_LEFT || id == CSS_VAL_RIGHT || id == CSS_VAL__KHTML_LEFT || - id == CSS_VAL__KHTML_RIGHT ||id == CSS_VAL_NONE || id == CSS_VAL_CENTER) - valid_primitive = true; - break; - - case CSS_PROP_CLEAR: // none | left | right | both | inherit - if ( id == CSS_VAL_NONE || id == CSS_VAL_LEFT || - id == CSS_VAL_RIGHT|| id == CSS_VAL_BOTH) - valid_primitive = true; - break; - - case CSS_PROP_TEXT_ALIGN: - // left | right | center | justify | khtml_left | khtml_right | khtml_center | <string> | inherit - if ( ( id >= CSS_VAL__KHTML_AUTO && id <= CSS_VAL__KHTML_CENTER ) || - value->unit == CSSPrimitiveValue::CSS_STRING ) - valid_primitive = true; - break; - - case CSS_PROP_OUTLINE_STYLE: // <border-style> | inherit - case CSS_PROP_BORDER_TOP_STYLE: //// <border-style> | inherit - case CSS_PROP_BORDER_RIGHT_STYLE: // Defined as: none | hidden | dotted | dashed | - case CSS_PROP_BORDER_BOTTOM_STYLE: // solid | double | groove | ridge | inset | outset | -khtml-native - case CSS_PROP_BORDER_LEFT_STYLE: //// - if (id >= CSS_VAL__KHTML_NATIVE && id <= CSS_VAL_DOUBLE) - valid_primitive = true; - break; - - case CSS_PROP_FONT_WEIGHT: // normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | - // 500 | 600 | 700 | 800 | 900 | inherit - if (id >= CSS_VAL_NORMAL && id <= CSS_VAL_900) { - // Allready correct id - valid_primitive = true; - } else if ( validUnit( value, FInteger|FNonNeg, false ) ) { - int weight = (int)value->fValue; - if ( (weight % 100) ) - break; - weight /= 100; - if ( weight >= 1 && weight <= 9 ) { - id = CSS_VAL_100 + weight - 1; - valid_primitive = true; - } - } - break; - - case CSS_PROP_BORDER_SPACING: - { - const int properties[2] = { CSS_PROP__KHTML_BORDER_HORIZONTAL_SPACING, - CSS_PROP__KHTML_BORDER_VERTICAL_SPACING }; - if (num == 1) { - ShorthandScope scope(this, CSS_PROP_BORDER_SPACING); - if (!parseValue(properties[0], important)) return false; - CSSValueImpl* value = parsedProperties[numParsedProperties-1]->value(); - addProperty(properties[1], value, important); - return true; - } - else if (num == 2) { - ShorthandScope scope(this, CSS_PROP_BORDER_SPACING); - if (!parseValue(properties[0], important)) return false; - if (!parseValue(properties[1], important)) return false; - return true; - } - return false; - } - case CSS_PROP__KHTML_BORDER_HORIZONTAL_SPACING: - case CSS_PROP__KHTML_BORDER_VERTICAL_SPACING: - valid_primitive = validUnit(value, FLength|FNonNeg, strict&(!nonCSSHint)); - break; - - case CSS_PROP_SCROLLBAR_FACE_COLOR: // IE5.5 - case CSS_PROP_SCROLLBAR_SHADOW_COLOR: // IE5.5 - case CSS_PROP_SCROLLBAR_HIGHLIGHT_COLOR: // IE5.5 - case CSS_PROP_SCROLLBAR_3DLIGHT_COLOR: // IE5.5 - case CSS_PROP_SCROLLBAR_DARKSHADOW_COLOR: // IE5.5 - case CSS_PROP_SCROLLBAR_TRACK_COLOR: // IE5.5 - case CSS_PROP_SCROLLBAR_ARROW_COLOR: // IE5.5 - case CSS_PROP_SCROLLBAR_BASE_COLOR: // IE5.5 - if ( strict ) - break; - /* nobreak */ - case CSS_PROP_OUTLINE_COLOR: // <color> | invert | inherit - // outline has "invert" as additional keyword. - if ( propId == CSS_PROP_OUTLINE_COLOR && id == CSS_VAL_INVERT ) { - valid_primitive = true; - break; - } - /* nobreak */ - case CSS_PROP_BACKGROUND_COLOR: // <color> | inherit - case CSS_PROP_BORDER_TOP_COLOR: // <color> | inherit - case CSS_PROP_BORDER_RIGHT_COLOR: // <color> | inherit - case CSS_PROP_BORDER_BOTTOM_COLOR: // <color> | inherit - case CSS_PROP_BORDER_LEFT_COLOR: // <color> | inherit - case CSS_PROP_COLOR: // <color> | inherit - if ( id == CSS_VAL__KHTML_TEXT || id == CSS_VAL_MENU || - (id >= CSS_VAL_AQUA && id <= CSS_VAL_WINDOWTEXT ) || - id == CSS_VAL_TRANSPARENT || - (id >= CSS_VAL_GREY && id < CSS_VAL__KHTML_TEXT && (nonCSSHint|!strict) ) ) { - valid_primitive = true; - } else { - parsedValue = parseColor(); - if ( parsedValue ) - valueList->next(); - } - break; - - case CSS_PROP_CURSOR: - // [ auto | crosshair | default | pointer | progress | move | e-resize | ne-resize | - // nw-resize | n-resize | se-resize | sw-resize | s-resize | w-resize | text | - // wait | help ] ] | inherit - // MSIE 5 compatibility :/ - if ( !strict && id == CSS_VAL_HAND ) { - id = CSS_VAL_POINTER; - valid_primitive = true; - } else if ( id >= CSS_VAL_AUTO && id <= CSS_VAL_HELP ) - valid_primitive = true; - break; - - case CSS_PROP_BACKGROUND_ATTACHMENT: - case CSS_PROP__KHTML_BACKGROUND_CLIP: - case CSS_PROP_BACKGROUND_IMAGE: - case CSS_PROP__KHTML_BACKGROUND_ORIGIN: - case CSS_PROP_BACKGROUND_POSITION: - case CSS_PROP_BACKGROUND_POSITION_X: - case CSS_PROP_BACKGROUND_POSITION_Y: - case CSS_PROP__KHTML_BACKGROUND_SIZE: - case CSS_PROP_BACKGROUND_REPEAT: { - CSSValueImpl *val1 = 0, *val2 = 0; - int propId1, propId2; - if (parseBackgroundProperty(propId, propId1, propId2, val1, val2)) { - addProperty(propId1, val1, important); - if (val2) - addProperty(propId2, val2, important); - return true; - } - return false; - } - case CSS_PROP_LIST_STYLE_IMAGE: // <uri> | none | inherit - if (id == CSS_VAL_NONE) { - parsedValue = new CSSImageValueImpl(); - valueList->next(); - } - else if (value->unit == CSSPrimitiveValue::CSS_URI ) { - // ### allow string in non strict mode? - DOMString uri = khtml::parseURL( domString( value->string ) ); - if (!uri.isEmpty()) { - parsedValue = new CSSImageValueImpl( - DOMString(KURL( styleElement->baseURL(), uri.string()).url()), - styleElement ); - valueList->next(); - } - } - break; - - case CSS_PROP_OUTLINE_WIDTH: // <border-width> | inherit - case CSS_PROP_BORDER_TOP_WIDTH: //// <border-width> | inherit - case CSS_PROP_BORDER_RIGHT_WIDTH: // Which is defined as - case CSS_PROP_BORDER_BOTTOM_WIDTH: // thin | medium | thick | <length> - case CSS_PROP_BORDER_LEFT_WIDTH: //// - if (id == CSS_VAL_THIN || id == CSS_VAL_MEDIUM || id == CSS_VAL_THICK) - valid_primitive = true; - else - valid_primitive = ( validUnit( value, FLength, strict&(!nonCSSHint) ) ); - break; - - case CSS_PROP_LETTER_SPACING: // normal | <length> | inherit - case CSS_PROP_WORD_SPACING: // normal | <length> | inherit - if ( id == CSS_VAL_NORMAL ) - valid_primitive = true; - else - valid_primitive = validUnit( value, FLength, strict&(!nonCSSHint) ); - break; - - case CSS_PROP_TEXT_INDENT: // <length> | <percentage> | inherit - valid_primitive = ( !id && validUnit( value, FLength|FPercent, strict&(!nonCSSHint) ) ); - break; - - case CSS_PROP_PADDING_TOP: // <length> | <percentage> | inherit - case CSS_PROP_PADDING_RIGHT: // <padding-width> | inherit - case CSS_PROP_PADDING_BOTTOM: // Which is defined as - case CSS_PROP_PADDING_LEFT: // <length> | <percentage> - case CSS_PROP__KHTML_PADDING_START: - valid_primitive = ( !id && validUnit( value, FLength|FPercent|FNonNeg, strict&(!nonCSSHint) ) ); - break; - - case CSS_PROP_MAX_HEIGHT: // <length> | <percentage> | none | inherit - case CSS_PROP_MAX_WIDTH: // <length> | <percentage> | none | inherit - if ( id == CSS_VAL_NONE ) { - valid_primitive = true; - break; - } - /* nobreak */ - case CSS_PROP_MIN_HEIGHT: // <length> | <percentage> | inherit - case CSS_PROP_MIN_WIDTH: // <length> | <percentage> | inherit - valid_primitive = ( !id && validUnit( value, FLength|FPercent|FNonNeg, strict&(!nonCSSHint) ) ); - break; - - case CSS_PROP_FONT_SIZE: - // <absolute-size> | <relative-size> | <length> | <percentage> | inherit - if (id >= CSS_VAL_XX_SMALL && id <= CSS_VAL_LARGER) - valid_primitive = true; - else - valid_primitive = ( validUnit( value, FLength|FPercent, strict&(!nonCSSHint) ) ); - break; - - case CSS_PROP_FONT_STYLE: // normal | italic | oblique | inherit - if ( id == CSS_VAL_NORMAL || id == CSS_VAL_ITALIC || id == CSS_VAL_OBLIQUE) - valid_primitive = true; - break; - - case CSS_PROP_FONT_VARIANT: // normal | small-caps | inherit - if ( id == CSS_VAL_NORMAL || id == CSS_VAL_SMALL_CAPS) - valid_primitive = true; - break; - - case CSS_PROP_VERTICAL_ALIGN: - // baseline | sub | super | top | text-top | middle | bottom | text-bottom | - // <percentage> | <length> | inherit - - if ( id >= CSS_VAL_BASELINE && id <= CSS_VAL__KHTML_BASELINE_MIDDLE ) - valid_primitive = true; - else - valid_primitive = ( !id && validUnit( value, FLength|FPercent, strict&(!nonCSSHint) ) ); - break; - - case CSS_PROP_HEIGHT: // <length> | <percentage> | auto | inherit - case CSS_PROP_WIDTH: // <length> | <percentage> | auto | inherit - if ( id == CSS_VAL_AUTO ) - valid_primitive = true; - else - // ### handle multilength case where we allow relative units - valid_primitive = ( !id && validUnit( value, FLength|FPercent|FNonNeg, strict&(!nonCSSHint) ) ); - break; - - case CSS_PROP_BOTTOM: // <length> | <percentage> | auto | inherit - case CSS_PROP_LEFT: // <length> | <percentage> | auto | inherit - case CSS_PROP_RIGHT: // <length> | <percentage> | auto | inherit - case CSS_PROP_TOP: // <length> | <percentage> | auto | inherit - case CSS_PROP_MARGIN_TOP: //// <margin-width> | inherit - case CSS_PROP_MARGIN_RIGHT: // Which is defined as - case CSS_PROP_MARGIN_BOTTOM: // <length> | <percentage> | auto | inherit - case CSS_PROP_MARGIN_LEFT: //// - case CSS_PROP__KHTML_MARGIN_START: - if ( id == CSS_VAL_AUTO ) - valid_primitive = true; - else - valid_primitive = ( !id && validUnit( value, FLength|FPercent, strict&(!nonCSSHint) ) ); - break; - - case CSS_PROP_Z_INDEX: // auto | <integer> | inherit - // tqDebug("parsing z-index: id=%d, fValue=%f", id, value->fValue ); - if ( id == CSS_VAL_AUTO ) { - valid_primitive = true; - break; - } - /* nobreak */ - case CSS_PROP_ORPHANS: // <integer> | inherit - case CSS_PROP_WIDOWS: // <integer> | inherit - // ### not supported later on - valid_primitive = ( !id && validUnit( value, FInteger, false ) ); - break; - - case CSS_PROP_LINE_HEIGHT: // normal | <number> | <length> | <percentage> | inherit - if ( id == CSS_VAL_NORMAL ) - valid_primitive = true; - else - valid_primitive = ( !id && validUnit( value, FNumber|FLength|FPercent, strict&(!nonCSSHint) ) ); - break; - case CSS_PROP_COUNTER_INCREMENT: // [ <identifier> <integer>? ]+ | none | inherit - if ( id == CSS_VAL_NONE ) - valid_primitive = true; - else - return parseCounter(propId, true, important); - break; - case CSS_PROP_COUNTER_RESET: // [ <identifier> <integer>? ]+ | none | inherit - if ( id == CSS_VAL_NONE ) - valid_primitive = true; - else - return parseCounter(propId, false, important); - break; - - case CSS_PROP_FONT_FAMILY: - // [[ <family-name> | <generic-family> ],]* [<family-name> | <generic-family>] | inherit - { - parsedValue = parseFontFamily(); - break; - } - - case CSS_PROP_TEXT_DECORATION: - // none | [ underline || overline || line-through || blink ] | inherit - if (id == CSS_VAL_NONE) { - valid_primitive = true; - } else { - CSSValueListImpl *list = new CSSValueListImpl; - bool is_valid = true; - while( is_valid && value ) { - switch ( value->id ) { - case CSS_VAL_BLINK: - break; - case CSS_VAL_UNDERLINE: - case CSS_VAL_OVERLINE: - case CSS_VAL_LINE_THROUGH: - list->append( new CSSPrimitiveValueImpl( value->id ) ); - break; - default: - is_valid = false; - } - value = valueList->next(); - } - //kdDebug( 6080 ) << "got " << list->length() << "d decorations" << endl; - if(list->length() && is_valid) { - parsedValue = list; - valueList->next(); - } else { - delete list; - } - } - break; - - case CSS_PROP_TABLE_LAYOUT: // auto | fixed | inherit - if ( id == CSS_VAL_AUTO || id == CSS_VAL_FIXED ) - valid_primitive = true; - break; - - case CSS_PROP__KHTML_FLOW_MODE: - if ( id == CSS_VAL__KHTML_NORMAL || id == CSS_VAL__KHTML_AROUND_FLOATS ) - valid_primitive = true; - break; - - /* CSS3 properties */ - case CSS_PROP_BOX_SIZING: // border-box | content-box | inherit - if ( id == CSS_VAL_BORDER_BOX || id == CSS_VAL_CONTENT_BOX ) - valid_primitive = true; - break; - case CSS_PROP_OUTLINE_OFFSET: - valid_primitive = validUnit(value, FLength, strict); - break; - case CSS_PROP_TEXT_SHADOW: // CSS2 property, dropped in CSS2.1, back in CSS3, so treat as CSS3 - if (id == CSS_VAL_NONE) - valid_primitive = true; - else - return parseShadow(propId, important); - break; - case CSS_PROP_OPACITY: - valid_primitive = validUnit(value, FNumber, strict); - break; - case CSS_PROP__KHTML_USER_INPUT: // none | enabled | disabled | inherit - if ( id == CSS_VAL_NONE || id == CSS_VAL_ENABLED || id == CSS_VAL_DISABLED ) - valid_primitive = true; -// kdDebug(6080) << "CSS_PROP__KHTML_USER_INPUT: " << valid_primitive << endl; - break; - case CSS_PROP__KHTML_MARQUEE: { - const int properties[5] = { CSS_PROP__KHTML_MARQUEE_DIRECTION, CSS_PROP__KHTML_MARQUEE_INCREMENT, - CSS_PROP__KHTML_MARQUEE_REPETITION, - CSS_PROP__KHTML_MARQUEE_STYLE, CSS_PROP__KHTML_MARQUEE_SPEED }; - return parseShortHand(propId, properties, 5, important); - } - case CSS_PROP__KHTML_MARQUEE_DIRECTION: - if (id == CSS_VAL_FORWARDS || id == CSS_VAL_BACKWARDS || id == CSS_VAL_AHEAD || - id == CSS_VAL_REVERSE || id == CSS_VAL_LEFT || id == CSS_VAL_RIGHT || id == CSS_VAL_DOWN || - id == CSS_VAL_UP || id == CSS_VAL_AUTO) - valid_primitive = true; - break; - case CSS_PROP__KHTML_MARQUEE_INCREMENT: - if (id == CSS_VAL_SMALL || id == CSS_VAL_LARGE || id == CSS_VAL_MEDIUM) - valid_primitive = true; - else - valid_primitive = validUnit(value, FLength|FPercent, strict&(!nonCSSHint)); - break; - case CSS_PROP__KHTML_MARQUEE_STYLE: - if (id == CSS_VAL_NONE || id == CSS_VAL_SLIDE || id == CSS_VAL_SCROLL || id == CSS_VAL_ALTERNATE || - id == CSS_VAL_UNFURL) - valid_primitive = true; - break; - case CSS_PROP__KHTML_MARQUEE_REPETITION: - if (id == CSS_VAL_INFINITE) - valid_primitive = true; - else - valid_primitive = validUnit(value, FInteger|FNonNeg, strict&(!nonCSSHint)); - break; - case CSS_PROP__KHTML_MARQUEE_SPEED: - if (id == CSS_VAL_NORMAL || id == CSS_VAL_SLOW || id == CSS_VAL_FAST) - valid_primitive = true; - else - valid_primitive = validUnit(value, FTime|FInteger|FNonNeg, strict&(!nonCSSHint)); - break; - case CSS_PROP_TEXT_OVERFLOW: // clip | ellipsis - if (id == CSS_VAL_CLIP || id == CSS_VAL_ELLIPSIS) - valid_primitive = true; - break; - // End of CSS3 properties - - /* shorthand properties */ - case CSS_PROP_BACKGROUND: - // ['background-color' || 'background-image' ||'background-repeat' || - // 'background-attachment' || 'background-position'] | inherit - return parseBackgroundShorthand(important); - case CSS_PROP_BORDER: - // [ 'border-width' || 'border-style' || <color> ] | inherit - { - const int properties[3] = { CSS_PROP_BORDER_WIDTH, CSS_PROP_BORDER_STYLE, - CSS_PROP_BORDER_COLOR }; - return parseShortHand(propId, properties, 3, important); - } - case CSS_PROP_BORDER_TOP: - // [ 'border-top-width' || 'border-style' || <color> ] | inherit - { - const int properties[3] = { CSS_PROP_BORDER_TOP_WIDTH, CSS_PROP_BORDER_TOP_STYLE, - CSS_PROP_BORDER_TOP_COLOR}; - return parseShortHand(propId, properties, 3, important); - } - case CSS_PROP_BORDER_RIGHT: - // [ 'border-right-width' || 'border-style' || <color> ] | inherit - { - const int properties[3] = { CSS_PROP_BORDER_RIGHT_WIDTH, CSS_PROP_BORDER_RIGHT_STYLE, - CSS_PROP_BORDER_RIGHT_COLOR }; - return parseShortHand(propId, properties, 3, important); - } - case CSS_PROP_BORDER_BOTTOM: - // [ 'border-bottom-width' || 'border-style' || <color> ] | inherit - { - const int properties[3] = { CSS_PROP_BORDER_BOTTOM_WIDTH, CSS_PROP_BORDER_BOTTOM_STYLE, - CSS_PROP_BORDER_BOTTOM_COLOR }; - return parseShortHand(propId, properties, 3, important); - } - case CSS_PROP_BORDER_LEFT: - // [ 'border-left-width' || 'border-style' || <color> ] | inherit - { - const int properties[3] = { CSS_PROP_BORDER_LEFT_WIDTH, CSS_PROP_BORDER_LEFT_STYLE, - CSS_PROP_BORDER_LEFT_COLOR }; - return parseShortHand(propId, properties, 3, important); - } - case CSS_PROP_OUTLINE: - // [ 'outline-color' || 'outline-style' || 'outline-width' ] | inherit - { - const int properties[3] = { CSS_PROP_OUTLINE_WIDTH, CSS_PROP_OUTLINE_STYLE, - CSS_PROP_OUTLINE_COLOR }; - return parseShortHand(propId, properties, 3, important); - } - case CSS_PROP_BORDER_COLOR: - // <color>{1,4} | inherit - { - const int properties[4] = { CSS_PROP_BORDER_TOP_COLOR, CSS_PROP_BORDER_RIGHT_COLOR, - CSS_PROP_BORDER_BOTTOM_COLOR, CSS_PROP_BORDER_LEFT_COLOR }; - return parse4Values(propId, properties, important); - } - case CSS_PROP_BORDER_WIDTH: - // <border-width>{1,4} | inherit - { - const int properties[4] = { CSS_PROP_BORDER_TOP_WIDTH, CSS_PROP_BORDER_RIGHT_WIDTH, - CSS_PROP_BORDER_BOTTOM_WIDTH, CSS_PROP_BORDER_LEFT_WIDTH }; - return parse4Values(propId, properties, important); - } - case CSS_PROP_BORDER_STYLE: - // <border-style>{1,4} | inherit - { - const int properties[4] = { CSS_PROP_BORDER_TOP_STYLE, CSS_PROP_BORDER_RIGHT_STYLE, - CSS_PROP_BORDER_BOTTOM_STYLE, CSS_PROP_BORDER_LEFT_STYLE }; - return parse4Values(propId, properties, important); - } - case CSS_PROP_MARGIN: - // <margin-width>{1,4} | inherit - { - const int properties[4] = { CSS_PROP_MARGIN_TOP, CSS_PROP_MARGIN_RIGHT, - CSS_PROP_MARGIN_BOTTOM, CSS_PROP_MARGIN_LEFT }; - return parse4Values(propId, properties, important); - } - case CSS_PROP_PADDING: - // <padding-width>{1,4} | inherit - { - const int properties[4] = { CSS_PROP_PADDING_TOP, CSS_PROP_PADDING_RIGHT, - CSS_PROP_PADDING_BOTTOM, CSS_PROP_PADDING_LEFT }; - return parse4Values(propId, properties, important); - } - case CSS_PROP_FONT: - // [ [ 'font-style' || 'font-variant' || 'font-weight' ]? 'font-size' [ / 'line-height' ]? - // 'font-family' ] | caption | icon | menu | message-box | small-caption | status-bar | inherit - if ( id >= CSS_VAL_CAPTION && id <= CSS_VAL_STATUS_BAR ) - valid_primitive = true; - else - return parseFont(important); - - case CSS_PROP_LIST_STYLE: - { - const int properties[3] = { CSS_PROP_LIST_STYLE_TYPE, CSS_PROP_LIST_STYLE_POSITION, - CSS_PROP_LIST_STYLE_IMAGE }; - return parseShortHand(propId, properties, 3, important); - } - case CSS_PROP_WORD_WRAP: - { - // normal | break-word - if ( id == CSS_VAL_NORMAL || id == CSS_VAL_BREAK_WORD ) - valid_primitive = true; - break; - } - default: -// #ifdef CSS_DEBUG -// kdDebug( 6080 ) << "illegal or CSS2 Aural property: " << val << endl; -// #endif - break; - } - - if ( valid_primitive ) { - - if ( id != 0 ) { - parsedValue = new CSSPrimitiveValueImpl( id ); - } else if ( value->unit == CSSPrimitiveValue::CSS_STRING ) - parsedValue = new CSSPrimitiveValueImpl( domString( value->string ), - (CSSPrimitiveValue::UnitTypes) value->unit ); - else if ( value->unit >= CSSPrimitiveValue::CSS_NUMBER && - value->unit <= CSSPrimitiveValue::CSS_KHZ ) { - parsedValue = new CSSPrimitiveValueImpl( value->fValue, - (CSSPrimitiveValue::UnitTypes) value->unit ); - } else if ( value->unit >= Value::Q_EMS ) { - parsedValue = new CSSQuirkPrimitiveValueImpl( value->fValue, CSSPrimitiveValue::CSS_EMS ); - } - valueList->next(); - } - if ( parsedValue ) { - if (!valueList->current() || inShorthand()) { - addProperty( propId, parsedValue, important ); - return true; - } - delete parsedValue; - } - return false; -} - -void CSSParser::addBackgroundValue(CSSValueImpl*& lval, CSSValueImpl* rval) -{ - if (lval) { - if (lval->isValueList()) - static_cast<CSSValueListImpl*>(lval)->append(rval); - else { - CSSValueImpl* oldVal = lval; - CSSValueListImpl* list = new CSSValueListImpl(); - lval = list; - list->append(oldVal); - list->append(rval); - } - } - else - lval = rval; -} - -bool CSSParser::parseBackgroundShorthand(bool important) -{ - // Position must come before color in this array because a plain old "0" is a legal color - // in quirks mode but it's usually the X coordinate of a position. - // FIXME: Add CSS_PROP__KHTML_BACKGROUND_SIZE to the shorthand. - const int numProperties = 7; - const int properties[numProperties] = { CSS_PROP_BACKGROUND_IMAGE, CSS_PROP_BACKGROUND_REPEAT, - CSS_PROP_BACKGROUND_ATTACHMENT, CSS_PROP_BACKGROUND_POSITION, CSS_PROP__KHTML_BACKGROUND_CLIP, - CSS_PROP__KHTML_BACKGROUND_ORIGIN, CSS_PROP_BACKGROUND_COLOR }; - - ShorthandScope scope(this, CSS_PROP_BACKGROUND); - - bool parsedProperty[numProperties] = { false }; // compiler will repeat false as necessary - CSSValueImpl* values[numProperties] = { 0 }; // compiler will repeat 0 as necessary - CSSValueImpl* positionYValue = 0; - int i; - - while (valueList->current()) { - Value* val = valueList->current(); - if (val->unit == Value::Operator && val->iValue == ',') { - // We hit the end. Fill in all remaining values with the initial value. - valueList->next(); - for (i = 0; i < numProperties; ++i) { - if (properties[i] == CSS_PROP_BACKGROUND_COLOR && parsedProperty[i]) - // Color is not allowed except as the last item in a list. Reject the entire - // property. - goto fail; - - if (!parsedProperty[i] && properties[i] != CSS_PROP_BACKGROUND_COLOR) { - addBackgroundValue(values[i], new CSSInitialValueImpl()); - if (properties[i] == CSS_PROP_BACKGROUND_POSITION) - addBackgroundValue(positionYValue, new CSSInitialValueImpl()); - } - parsedProperty[i] = false; - } - if (!valueList->current()) - break; - } - - bool found = false; - for (i = 0; !found && i < numProperties; ++i) { - if (!parsedProperty[i]) { - CSSValueImpl *val1 = 0, *val2 = 0; - int propId1, propId2; - if (parseBackgroundProperty(properties[i], propId1, propId2, val1, val2)) { - parsedProperty[i] = found = true; - addBackgroundValue(values[i], val1); - if (properties[i] == CSS_PROP_BACKGROUND_POSITION) - addBackgroundValue(positionYValue, val2); - } - } - } - - // if we didn't find at least one match, this is an - // invalid shorthand and we have to ignore it - if (!found) - goto fail; - } - - // Fill in any remaining properties with the initial value. - for (i = 0; i < numProperties; ++i) { - if (!parsedProperty[i]) { - addBackgroundValue(values[i], new CSSInitialValueImpl()); - if (properties[i] == CSS_PROP_BACKGROUND_POSITION) - addBackgroundValue(positionYValue, new CSSInitialValueImpl()); - } - } - - // Now add all of the properties we found. - for (i = 0; i < numProperties; i++) { - if (properties[i] == CSS_PROP_BACKGROUND_POSITION) { - addProperty(CSS_PROP_BACKGROUND_POSITION_X, values[i], important); - addProperty(CSS_PROP_BACKGROUND_POSITION_Y, positionYValue, important); - } - else - addProperty(properties[i], values[i], important); - } - - return true; - -fail: - for (int k = 0; k < numProperties; k++) - delete values[k]; - delete positionYValue; - return false; -} - -bool CSSParser::parseShortHand(int propId, const int *properties, int numProperties, bool important ) -{ - /* We try to match as many properties as possible - * We setup an array of booleans to mark which property has been found, - * and we try to search for properties until it makes no longer any sense - */ - ShorthandScope scope(this, propId); - - bool found = false; - bool fnd[6]; //Trust me ;) - for( int i = 0; i < numProperties; i++ ) - fnd[i] = false; - - while ( valueList->current() ) { - found = false; - for (int propIndex = 0; !found && propIndex < numProperties; ++propIndex) { - if (!fnd[propIndex]) { - if ( parseValue( properties[propIndex], important ) ) { - fnd[propIndex] = found = true; - } - } - } - - // if we didn't find at least one match, this is an - // invalid shorthand and we have to ignore it - if (!found) - return false; - } - - // Fill in any remaining properties with the initial value. - m_implicitShorthand = true; - for (int i = 0; i < numProperties; ++i) { - if (!fnd[i]) - addProperty(properties[i], new CSSInitialValueImpl(), important); - } - m_implicitShorthand = false; - - return true; -} - -bool CSSParser::parse4Values(int propId, const int *properties, bool important ) -{ - /* From the CSS 2 specs, 8.3 - * If there is only one value, it applies to all sides. If there are two values, the top and - * bottom margins are set to the first value and the right and left margins are set to the second. - * If there are three values, the top is set to the first value, the left and right are set to the - * second, and the bottom is set to the third. If there are four values, they apply to the top, - * right, bottom, and left, respectively. - */ - - int num = inShorthand() ? 1 : valueList->size(); - //tqDebug("parse4Values: num=%d %d", num, valueList->numValues ); - - ShorthandScope scope(this, propId); - - // the order is top, right, bottom, left - switch (num) { - case 1: { - if (!parseValue(properties[0], important)) - return false; - CSSValueImpl *value = parsedProperties[numParsedProperties-1]->value(); - m_implicitShorthand = true; - addProperty(properties[1], value, important); - addProperty(properties[2], value, important); - addProperty(properties[3], value, important); - m_implicitShorthand = false; - break; - } - case 2: { - if (!parseValue(properties[0], important) || !parseValue(properties[1], important)) - return false; - CSSValueImpl *value = parsedProperties[numParsedProperties-2]->value(); - m_implicitShorthand = true; - addProperty(properties[2], value, important); - value = parsedProperties[numParsedProperties-2]->value(); - addProperty(properties[3], value, important); - m_implicitShorthand = false; - break; - } - case 3: { - if (!parseValue(properties[0], important) || !parseValue(properties[1], important) || !parseValue(properties[2], important)) - return false; - CSSValueImpl *value = parsedProperties[numParsedProperties-2]->value(); - m_implicitShorthand = true; - addProperty(properties[3], value, important); - m_implicitShorthand = false; - break; - } - case 4: { - if (!parseValue(properties[0], important) || !parseValue(properties[1], important) || - !parseValue(properties[2], important) || !parseValue(properties[3], important)) - return false; - break; - } - default: { - return false; - } - } - - return true; -} - -// [ <string> | <uri> | <counter> | attr(X) | open-quote | close-quote | no-open-quote | no-close-quote ]+ | inherit -// in CSS 2.1 this got somewhat reduced: -// [ <string> | attr(X) | open-quote | close-quote | no-open-quote | no-close-quote ]+ | inherit -bool CSSParser::parseContent( int propId, bool important ) -{ - CSSValueListImpl* values = new CSSValueListImpl(); - - bool isValid = true; - Value *val; - CSSValueImpl *parsedValue = 0; - while ( (val = valueList->current()) ) { - parsedValue = 0; - if ( val->unit == CSSPrimitiveValue::CSS_URI ) { - // url - DOMString value = khtml::parseURL(domString(val->string)); - parsedValue = new CSSImageValueImpl( - DOMString(KURL( styleElement->baseURL(), value.string()).url() ), styleElement ); -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "content, url=" << value.string() << " base=" << styleElement->baseURL().url( ) << endl; -#endif - } else if ( val->unit == Value::Function ) { - // attr( X ) | counter( X [,Y] ) | counters( X, Y, [,Z] ) - ValueList *args = val->function->args; - TQString fname = qString( val->function->name ).lower(); - if (!args) return false; - if (fname == "attr(") { - if ( args->size() != 1) - return false; - Value *a = args->current(); - if (a->unit != CSSPrimitiveValue::CSS_IDENT) { - isValid=false; - break; - } - if (qString(a->string)[0] == '-') { - isValid=false; - break; - } - parsedValue = new CSSPrimitiveValueImpl(domString(a->string), CSSPrimitiveValue::CSS_ATTR); - } - else - if (fname == "counter(") { - parsedValue = parseCounterContent(args, false); - if (!parsedValue) return false; - } else - if (fname == "counters(") { - parsedValue = parseCounterContent(args, true); - if (!parsedValue) return false; - } - else - return false; - - } else if ( val->unit == CSSPrimitiveValue::CSS_IDENT ) { - // open-quote | close-quote | no-open-quote | no-close-quote - if ( val->id == CSS_VAL_OPEN_QUOTE || - val->id == CSS_VAL_CLOSE_QUOTE || - val->id == CSS_VAL_NO_OPEN_QUOTE || - val->id == CSS_VAL_NO_CLOSE_QUOTE ) { - parsedValue = new CSSPrimitiveValueImpl(val->id); - } - } else if ( val->unit == CSSPrimitiveValue::CSS_STRING ) { - parsedValue = new CSSPrimitiveValueImpl(domString(val->string), CSSPrimitiveValue::CSS_STRING); - } - - if (parsedValue) - values->append(parsedValue); - else { - isValid = false; - break; - } - valueList->next(); - } - if ( isValid && values->length() ) { - addProperty( propId, values, important ); - valueList->next(); - return true; - } - - delete values; // also frees any content by deref - return false; -} - -CSSValueImpl* CSSParser::parseCounterContent(ValueList *args, bool counters) -{ - if (counters || (args->size() != 1 && args->size() != 3)) - if (!counters || (args->size() != 3 && args->size() != 5)) - return 0; - - CounterImpl *counter = new CounterImpl; - Value *i = args->current(); - if (i->unit != CSSPrimitiveValue::CSS_IDENT) goto invalid; - if (qString(i->string)[0] == '-') goto invalid; - counter->m_identifier = domString(i->string); - if (counters) { - i = args->next(); - if (i->unit != Value::Operator || i->iValue != ',') goto invalid; - i = args->next(); - if (i->unit != CSSPrimitiveValue::CSS_STRING) goto invalid; - counter->m_separator = domString(i->string); - } - counter->m_listStyle = CSS_VAL_DECIMAL - CSS_VAL_DISC; - i = args->next(); - if (i) { - if (i->unit != Value::Operator || i->iValue != ',') goto invalid; - i = args->next(); - if (i->unit != CSSPrimitiveValue::CSS_IDENT) goto invalid; - if (i->id < CSS_VAL_DISC || i->id > CSS_VAL__KHTML_CLOSE_QUOTE) goto invalid; - counter->m_listStyle = i->id - CSS_VAL_DISC; - } - return new CSSPrimitiveValueImpl(counter); -invalid: - delete counter; - return 0; -} - -CSSValueImpl* CSSParser::parseBackgroundColor() -{ - int id = valueList->current()->id; - if (id == CSS_VAL__KHTML_TEXT || id == CSS_VAL_TRANSPARENT || - (id >= CSS_VAL_AQUA && id <= CSS_VAL_WINDOWTEXT) || id == CSS_VAL_MENU || - (id >= CSS_VAL_GREY && id < CSS_VAL__KHTML_TEXT && !strict)) - return new CSSPrimitiveValueImpl(id); - return parseColor(); -} - -CSSValueImpl* CSSParser::parseBackgroundImage() -{ - if (valueList->current()->id == CSS_VAL_NONE) - return new CSSImageValueImpl(); - if (valueList->current()->unit == CSSPrimitiveValue::CSS_URI) { - DOMString uri = khtml::parseURL(domString(valueList->current()->string)); - if (!uri.isEmpty()) - return new CSSImageValueImpl(DOMString(KURL(styleElement->baseURL(), uri.string()).url()), - styleElement); - } - return 0; -} - -CSSValueImpl* CSSParser::parseBackgroundPositionXY(bool& xFound, bool& yFound) -{ - int id = valueList->current()->id; - if (id == CSS_VAL_LEFT || id == CSS_VAL_TOP || id == CSS_VAL_RIGHT || id == CSS_VAL_BOTTOM || id == CSS_VAL_CENTER) { - int percent = 0; - if (id == CSS_VAL_LEFT || id == CSS_VAL_RIGHT) { - if (xFound) - return 0; - xFound = true; - if (id == CSS_VAL_RIGHT) - percent = 100; - } - else if (id == CSS_VAL_TOP || id == CSS_VAL_BOTTOM) { - if (yFound) - return 0; - yFound = true; - if (id == CSS_VAL_BOTTOM) - percent = 100; - } - else if (id == CSS_VAL_CENTER) - // Center is ambiguous, so we're not sure which position we've found yet, an x or a y. - percent = 50; - return new CSSPrimitiveValueImpl(percent, CSSPrimitiveValue::CSS_PERCENTAGE); - } - if (validUnit(valueList->current(), FPercent|FLength, strict)) - return new CSSPrimitiveValueImpl(valueList->current()->fValue, - (CSSPrimitiveValue::UnitTypes)valueList->current()->unit); - - return 0; -} - -void CSSParser::parseBackgroundPosition(CSSValueImpl*& value1, CSSValueImpl*& value2) -{ - value1 = value2 = 0; - Value* value = valueList->current(); - - // Parse the first value. We're just making sure that it is one of the valid keywords or a percentage/length. - bool value1IsX = false, value1IsY = false; - value1 = parseBackgroundPositionXY(value1IsX, value1IsY); - if (!value1) - return; - - // It only takes one value for background-position to be correctly parsed if it was specified in a shorthand (since we - // can assume that any other values belong to the rest of the shorthand). If we're not parsing a shorthand, though, the - // value was explicitly specified for our property. - value = valueList->next(); - - // First check for the comma. If so, we are finished parsing this value or value pair. - if (value && value->unit == Value::Operator && value->iValue == ',') - value = 0; - - bool value2IsX = false, value2IsY = false; - if (value) { - value2 = parseBackgroundPositionXY(value2IsX, value2IsY); - if (value2) - valueList->next(); - else { - if (!inShorthand()) { - delete value1; - value1 = 0; - return; - } - } - } - - if (!value2) - // Only one value was specified. If that value was not a keyword, then it sets the x position, and the y position - // is simply 50%. This is our default. - // For keywords, the keyword was either an x-keyword (left/right), a y-keyword (top/bottom), or an ambiguous keyword (center). - // For left/right/center, the default of 50% in the y is still correct. - value2 = new CSSPrimitiveValueImpl(50, CSSPrimitiveValue::CSS_PERCENTAGE); - - if (value1IsY || value2IsX) { - // Swap our two values. - CSSValueImpl* val = value2; - value2 = value1; - value1 = val; - } -} - -CSSValueImpl* CSSParser::parseBackgroundSize() -{ - Value* value = valueList->current(); - CSSPrimitiveValueImpl* parsedValue1; - - if (value->id == CSS_VAL_AUTO) - parsedValue1 = new CSSPrimitiveValueImpl(0, CSSPrimitiveValue::CSS_UNKNOWN); - else { - if (!validUnit(value, FLength|FPercent, strict)) - return 0; - parsedValue1 = new CSSPrimitiveValueImpl(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit); - } - - CSSPrimitiveValueImpl* parsedValue2 = parsedValue1; - if ((value = valueList->next())) { - if (value->id == CSS_VAL_AUTO) - parsedValue2 = new CSSPrimitiveValueImpl(0, CSSPrimitiveValue::CSS_UNKNOWN); - else { - if (!validUnit(value, FLength|FPercent, strict)) { - delete parsedValue1; - return 0; - } - parsedValue2 = new CSSPrimitiveValueImpl(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit); - } - } - - PairImpl* pair = new PairImpl(parsedValue1, parsedValue2); - return new CSSPrimitiveValueImpl(pair); -} - -bool CSSParser::parseBackgroundProperty(int propId, int& propId1, int& propId2, - CSSValueImpl*& retValue1, CSSValueImpl*& retValue2) -{ -#ifdef CSS_DEBUG - kdDebug(6080) << "parseBackgroundProperty()" << endl; - kdDebug(6080) << "LOOKING FOR: " << getPropertyName(propId).string() << endl; -#endif - CSSValueListImpl *values = 0, *values2 = 0; - Value* val; - CSSValueImpl *value = 0, *value2 = 0; - bool allowComma = false; - - retValue1 = retValue2 = 0; - propId1 = propId; - propId2 = propId; - if (propId == CSS_PROP_BACKGROUND_POSITION) { - propId1 = CSS_PROP_BACKGROUND_POSITION_X; - propId2 = CSS_PROP_BACKGROUND_POSITION_Y; - } - - while ((val = valueList->current())) { - CSSValueImpl *currValue = 0, *currValue2 = 0; - if (allowComma) { - if (val->unit != Value::Operator || val->iValue != ',') - goto failed; - valueList->next(); - allowComma = false; - } - else { - switch (propId) { - case CSS_PROP_BACKGROUND_ATTACHMENT: - if (val->id == CSS_VAL_SCROLL || val->id == CSS_VAL_FIXED) { - currValue = new CSSPrimitiveValueImpl(val->id); - valueList->next(); - } - break; - case CSS_PROP_BACKGROUND_COLOR: - currValue = parseBackgroundColor(); - if (currValue) - valueList->next(); - break; - case CSS_PROP_BACKGROUND_IMAGE: - currValue = parseBackgroundImage(); - if (currValue) - valueList->next(); - break; - case CSS_PROP__KHTML_BACKGROUND_CLIP: - case CSS_PROP__KHTML_BACKGROUND_ORIGIN: - if (val->id == CSS_VAL_BORDER || val->id == CSS_VAL_PADDING || val->id == CSS_VAL_CONTENT) { - currValue = new CSSPrimitiveValueImpl(val->id); - valueList->next(); - } - break; - case CSS_PROP_BACKGROUND_POSITION: - parseBackgroundPosition(currValue, currValue2); - // unlike the other functions, parseBackgroundPosition advances the valueList pointer - break; - case CSS_PROP_BACKGROUND_POSITION_X: { - bool xFound = false, yFound = true; - currValue = parseBackgroundPositionXY(xFound, yFound); - if (currValue) - valueList->next(); - break; - } - case CSS_PROP_BACKGROUND_POSITION_Y: { - bool xFound = true, yFound = false; - currValue = parseBackgroundPositionXY(xFound, yFound); - if (currValue) - valueList->next(); - break; - } - case CSS_PROP_BACKGROUND_REPEAT: - if (val->id >= CSS_VAL_REPEAT && val->id <= CSS_VAL_NO_REPEAT) { - currValue = new CSSPrimitiveValueImpl(val->id); - valueList->next(); - } - break; - case CSS_PROP__KHTML_BACKGROUND_SIZE: - currValue = parseBackgroundSize(); - if (currValue) - valueList->next(); - break; - } - - if (!currValue) - goto failed; - - if (value && !values) { - values = new CSSValueListImpl(); - values->append(value); - value = 0; - } - - if (value2 && !values2) { - values2 = new CSSValueListImpl(); - values2->append(value2); - value2 = 0; - } - - if (values) - values->append(currValue); - else - value = currValue; - if (currValue2) { - if (values2) - values2->append(currValue2); - else - value2 = currValue2; - } - allowComma = true; - } - - // When parsing the 'background' shorthand property, we let it handle building up the lists for all - // properties. - if (inShorthand()) - break; - } - - if (values && values->length()) { - retValue1 = values; - if (values2 && values2->length()) - retValue2 = values2; - return true; - } - if (value) { - retValue1 = value; - retValue2 = value2; - return true; - } - -failed: - delete values; delete values2; - delete value; delete value2; - return false; -} - -bool CSSParser::parseShape( int propId, bool important ) -{ - Value *value = valueList->current(); - ValueList *args = value->function->args; - TQString fname = qString( value->function->name ).lower(); - //tqDebug( "parseShape: fname: %d", fname.latin1() ); - if ( fname != "rect(" || !args ) - return false; - - // rect( t, r, b, l ) || rect( t r b l ) - if ( args->size() != 4 && args->size() != 7 ) - return false; - RectImpl *rect = new RectImpl(); - bool valid = true; - int i = 0; - Value *a = args->current(); - while ( a ) { - valid = validUnit( a, FLength, strict ); - if ( !valid ) - break; - CSSPrimitiveValueImpl *length = - new CSSPrimitiveValueImpl( a->fValue, (CSSPrimitiveValue::UnitTypes) a->unit ); - if ( i == 0 ) - rect->setTop( length ); - else if ( i == 1 ) - rect->setRight( length ); - else if ( i == 2 ) - rect->setBottom( length ); - else - rect->setLeft( length ); - a = args->next(); - if ( a && args->size() == 7 ) { - if ( a->unit == Value::Operator && a->iValue == ',' ) { - a = args->next(); - } else { - valid = false; - break; - } - } - i++; - } - if ( valid ) { - addProperty( propId, new CSSPrimitiveValueImpl( rect ), important ); - valueList->next(); - return true; - } - delete rect; - return false; -} - -// [ 'font-style' || 'font-variant' || 'font-weight' ]? 'font-size' [ / 'line-height' ]? 'font-family' -bool CSSParser::parseFont( bool important ) -{ -// kdDebug(6080) << "parsing font property current=" << valueList->currentValue << endl; - bool valid = true; - Value *value = valueList->current(); - CSSValueListImpl* family = 0; - CSSPrimitiveValueImpl *style = 0, *variant = 0, *weight = 0, *size = 0, *lineHeight = 0; - // optional font-style, font-variant and font-weight - while ( value ) { -// kdDebug( 6080 ) << "got value " << value->id << " / " << (value->unit == CSSPrimitiveValue::CSS_STRING || - // value->unit == CSSPrimitiveValue::CSS_IDENT ? qString( value->string ) : TQString::null ) -// << endl; - int id = value->id; - if ( id ) { - if ( id == CSS_VAL_NORMAL ) { - // do nothing, it's the initial value for all three - } - /* - else if ( id == CSS_VAL_INHERIT ) { - // set all non set ones to inherit - // This is not that simple as the inherit could also apply to the following font-size. - // very ahrd to tell without looking ahead. - inherit = true; - } */ - else if ( id == CSS_VAL_ITALIC || id == CSS_VAL_OBLIQUE ) { - if ( style ) - goto invalid; - style = new CSSPrimitiveValueImpl( id ); - } else if ( id == CSS_VAL_SMALL_CAPS ) { - if ( variant ) - goto invalid; - variant = new CSSPrimitiveValueImpl( id ); - } else if ( id >= CSS_VAL_BOLD && id <= CSS_VAL_LIGHTER ) { - if ( weight ) - goto invalid; - weight = new CSSPrimitiveValueImpl( id ); - } else { - valid = false; - } - } else if ( !weight && validUnit( value, FInteger|FNonNeg, true ) ) { - int w = (int)value->fValue; - int val = 0; - if ( w == 100 ) - val = CSS_VAL_100; - else if ( w == 200 ) - val = CSS_VAL_200; - else if ( w == 300 ) - val = CSS_VAL_300; - else if ( w == 400 ) - val = CSS_VAL_400; - else if ( w == 500 ) - val = CSS_VAL_500; - else if ( w == 600 ) - val = CSS_VAL_600; - else if ( w == 700 ) - val = CSS_VAL_700; - else if ( w == 800 ) - val = CSS_VAL_800; - else if ( w == 900 ) - val = CSS_VAL_900; - - if ( val ) - weight = new CSSPrimitiveValueImpl( val ); - else - valid = false; - } else { - valid = false; - } - if ( !valid ) - break; - value = valueList->next(); - } - if ( !value ) - goto invalid; - - // set undefined values to default - if ( !style ) - style = new CSSPrimitiveValueImpl( CSS_VAL_NORMAL ); - if ( !variant ) - variant = new CSSPrimitiveValueImpl( CSS_VAL_NORMAL ); - if ( !weight ) - weight = new CSSPrimitiveValueImpl( CSS_VAL_NORMAL ); - -// kdDebug( 6080 ) << " got style, variant and weight current=" << valueList->currentValue << endl; - - // now a font size _must_ come - // <absolute-size> | <relative-size> | <length> | <percentage> | inherit - if ( value->id >= CSS_VAL_XX_SMALL && value->id <= CSS_VAL_LARGER ) - size = new CSSPrimitiveValueImpl( value->id ); - else if ( validUnit( value, FLength|FPercent, strict ) ) { - size = new CSSPrimitiveValueImpl( value->fValue, (CSSPrimitiveValue::UnitTypes) value->unit ); - } - value = valueList->next(); - if ( !size || !value ) - goto invalid; - - // kdDebug( 6080 ) << " got size" << endl; - - if ( value->unit == Value::Operator && value->iValue == '/' ) { - // line-height - value = valueList->next(); - if ( !value ) - goto invalid; - if ( value->id == CSS_VAL_NORMAL ) { - // default value, nothing to do - } else if ( validUnit( value, FNumber|FLength|FPercent, strict ) ) { - lineHeight = new CSSPrimitiveValueImpl( value->fValue, (CSSPrimitiveValue::UnitTypes) value->unit ); - } else { - goto invalid; - } - value = valueList->next(); - if ( !value ) - goto invalid; - } - if ( !lineHeight ) - lineHeight = new CSSPrimitiveValueImpl( CSS_VAL_NORMAL ); - -// kdDebug( 6080 ) << " got line height current=" << valueList->currentValue << endl; - // font family must come now - family = parseFontFamily(); - - if ( valueList->current() || !family ) - goto invalid; - //kdDebug( 6080 ) << " got family, parsing ok!" << endl; - - addProperty( CSS_PROP_FONT_FAMILY, family, important ); - addProperty( CSS_PROP_FONT_STYLE, style, important ); - addProperty( CSS_PROP_FONT_VARIANT, variant, important ); - addProperty( CSS_PROP_FONT_WEIGHT, weight, important ); - addProperty( CSS_PROP_FONT_SIZE, size, important ); - addProperty( CSS_PROP_LINE_HEIGHT, lineHeight, important ); - return true; - - invalid: - //kdDebug(6080) << " -> invalid" << endl; - delete family; - delete style; - delete variant; - delete weight; - delete size; - delete lineHeight; - - return false; -} - -CSSValueListImpl *CSSParser::parseFontFamily() -{ -// kdDebug( 6080 ) << "CSSParser::parseFontFamily current=" << valueList->currentValue << endl; - CSSValueListImpl *list = new CSSValueListImpl; - Value *value = valueList->current(); - TQString currFace; - - while ( value ) { -// kdDebug( 6080 ) << "got value " << value->id << " / " -// << (value->unit == CSSPrimitiveValue::CSS_STRING || -// value->unit == CSSPrimitiveValue::CSS_IDENT ? qString( value->string ) : TQString::null ) -// << endl; - Value* nextValue = valueList->next(); - bool nextValBreaksFont = !nextValue || - (nextValue->unit == Value::Operator && nextValue->iValue == ','); - bool nextValIsFontName = nextValue && - ((nextValue->id >= CSS_VAL_SERIF && nextValue->id <= CSS_VAL_MONOSPACE) || - (nextValue->unit == CSSPrimitiveValue::CSS_STRING || - nextValue->unit == CSSPrimitiveValue::CSS_IDENT)); - - if (value->id >= CSS_VAL_SERIF && value->id <= CSS_VAL_MONOSPACE) { - if (!currFace.isNull()) { - currFace += ' '; - currFace += qString(value->string); - } - else if (nextValBreaksFont || !nextValIsFontName) { - if ( !currFace.isNull() ) { - list->append( new FontFamilyValueImpl( currFace ) ); - currFace = TQString::null; - } - list->append(new CSSPrimitiveValueImpl(value->id)); - } - else { - currFace = qString( value->string ); - } - } - else if (value->unit == CSSPrimitiveValue::CSS_STRING) { - // Strings never share in a family name. - currFace = TQString::null; - list->append(new FontFamilyValueImpl(qString( value->string) ) ); - } - else if (value->unit == CSSPrimitiveValue::CSS_IDENT) { - if (!currFace.isNull()) { - currFace += ' '; - currFace += qString(value->string); - } - else if (nextValBreaksFont || !nextValIsFontName) { - if ( !currFace.isNull() ) { - list->append( new FontFamilyValueImpl( currFace ) ); - currFace = TQString::null; - } - list->append(new FontFamilyValueImpl( qString( value->string ) ) ); - } - else { - currFace = qString( value->string); - } - } - else { - //kdDebug( 6080 ) << "invalid family part" << endl; - break; - } - - if (!nextValue) - break; - - if (nextValBreaksFont) { - value = valueList->next(); - if ( !currFace.isNull() ) - list->append( new FontFamilyValueImpl( currFace ) ); - currFace = TQString::null; - } - else if (nextValIsFontName) - value = nextValue; - else - break; - } - - if ( !currFace.isNull() ) - list->append( new FontFamilyValueImpl( currFace ) ); - - if ( !list->length() ) { - delete list; - list = 0; - } - return list; -} - - -bool CSSParser::parseColorParameters(Value* value, int* colorArray, bool parseAlpha) -{ - ValueList* args = value->function->args; - Value* v = args->current(); - // Get the first value - if (!validUnit(v, FInteger | FPercent, true)) - return false; - colorArray[0] = static_cast<int>(v->fValue * (v->unit == CSSPrimitiveValue::CSS_PERCENTAGE ? 256.0 / 100.0 : 1.0)); - for (int i = 1; i < 3; i++) { - v = args->next(); - if (v->unit != Value::Operator && v->iValue != ',') - return false; - v = args->next(); - if (!validUnit(v, FInteger | FPercent, true)) - return false; - colorArray[i] = static_cast<int>(v->fValue * (v->unit == CSSPrimitiveValue::CSS_PERCENTAGE ? 256.0 / 100.0 : 1.0)); - } - if (parseAlpha) { - v = args->next(); - if (v->unit != Value::Operator && v->iValue != ',') - return false; - v = args->next(); - if (!validUnit(v, FNumber, true)) - return false; - colorArray[3] = static_cast<int>(kMax(0.0, kMin(1.0, v->fValue)) * 255); - } - return true; -} - -// CSS3 specification defines the format of a HSL color as -// hsl(<number>, <percent>, <percent>) -// and with alpha, the format is -// hsla(<number>, <percent>, <percent>, <number>) -// The first value, HUE, is in an angle with a value between 0 and 360 -bool CSSParser::parseHSLParameters(Value* value, double* colorArray, bool parseAlpha) -{ - ValueList* args = value->function->args; - Value* v = args->current(); - // Get the first value - if (!validUnit(v, FInteger, true)) - return false; - // normalize the Hue value and change it to be between 0 and 1.0 - colorArray[0] = (((static_cast<int>(v->fValue) % 360) + 360) % 360) / 360.0; - for (int i = 1; i < 3; i++) { - v = args->next(); - if (v->unit != Value::Operator && v->iValue != ',') - return false; - v = args->next(); - if (!validUnit(v, FPercent, true)) - return false; - colorArray[i] = kMax(0.0, kMin(100.0, v->fValue)) / 100.0; // needs to be value between 0 and 1.0 - } - if (parseAlpha) { - v = args->next(); - if (v->unit != Value::Operator && v->iValue != ',') - return false; - v = args->next(); - if (!validUnit(v, FNumber, true)) - return false; - colorArray[3] = kMax(0.0, kMin(1.0, v->fValue)); - } - return true; -} - -static bool parseColor(int unit, const TQString &name, QRgb& rgb) -{ - int len = name.length(); - - if ( !len ) - return false; - - - bool ok; - - if ( len == 3 || len == 6 ) { - int val = name.toInt(&ok, 16); - if ( ok ) { - if (len == 6) { - rgb = (0xff << 24) | val; - return true; - } - else if ( len == 3 ) { - // #abc converts to #aabbcc according to the specs - rgb = (0xff << 24) | - (val&0xf00)<<12 | (val&0xf00)<<8 | - (val&0xf0)<<8 | (val&0xf0)<<4 | - (val&0xf)<<4 | (val&0xf); - return true; - } - } - } - - if ( unit == CSSPrimitiveValue::CSS_IDENT ) { - // try a little harder - TQColor tc; - tc.setNamedColor(name.lower()); - if ( tc.isValid() ) { - rgb = tc.rgb(); - return true; - } - } - - return false; -} - -CSSPrimitiveValueImpl *CSSParser::parseColor() -{ - return parseColorFromValue(valueList->current()); -} - -CSSPrimitiveValueImpl *CSSParser::parseColorFromValue(Value* value) -{ - QRgb c = khtml::transparentColor; - if ( !strict && value->unit == CSSPrimitiveValue::CSS_NUMBER && - value->fValue >= 0. && value->fValue < 1000000. ) { - TQString str; - str.sprintf( "%06d", (int)(value->fValue+.5) ); - if ( !::parseColor( value->unit, str, c ) ) - return 0; - } - else if (value->unit == CSSPrimitiveValue::CSS_RGBCOLOR || - value->unit == CSSPrimitiveValue::CSS_IDENT || - (!strict && value->unit == CSSPrimitiveValue::CSS_DIMENSION)) { - if ( !::parseColor( value->unit, qString( value->string ), c) ) - return 0; - } - else if ( value->unit == Value::Function && - value->function->args != 0 && - value->function->args->size() == 5 /* rgb + two commas */ && - qString( value->function->name ).lower() == "rgb(" ) { - int colorValues[3]; - if (!parseColorParameters(value, colorValues, false)) - return 0; - colorValues[0] = kMax( 0, kMin( 255, colorValues[0] ) ); - colorValues[1] = kMax( 0, kMin( 255, colorValues[1] ) ); - colorValues[2] = kMax( 0, kMin( 255, colorValues[2] ) ); - c = tqRgb(colorValues[0], colorValues[1], colorValues[2]); - } else if (value->unit == Value::Function && - value->function->args != 0 && - value->function->args->size() == 7 /* rgba + three commas */ && - domString(value->function->name).lower() == "rgba(") { - int colorValues[4]; - if (!parseColorParameters(value, colorValues, true)) - return 0; - colorValues[0] = kMax( 0, kMin( 255, colorValues[0] ) ); - colorValues[1] = kMax( 0, kMin( 255, colorValues[1] ) ); - colorValues[2] = kMax( 0, kMin( 255, colorValues[2] ) ); - c = tqRgba(colorValues[0], colorValues[1], colorValues[2], colorValues[3]); - } else if (value->unit == Value::Function && - value->function->args != 0 && - value->function->args->size() == 5 /* hsl + two commas */ && - domString(value->function->name).lower() == "hsl(") { - double colorValues[3]; - if (!parseHSLParameters(value, colorValues, false)) - return 0; - c = khtml::tqRgbaFromHsla(colorValues[0], colorValues[1], colorValues[2], 1.0); - } else if (value->unit == Value::Function && - value->function->args != 0 && - value->function->args->size() == 7 /* hsla + three commas */ && - domString(value->function->name).lower() == "hsla(") { - double colorValues[4]; - if (!parseHSLParameters(value, colorValues, true)) - return 0; - c = khtml::tqRgbaFromHsla(colorValues[0], colorValues[1], colorValues[2], colorValues[3]); - } - else - return 0; - - return new CSSPrimitiveValueImpl(c); -} - -// This class tracks parsing state for shadow values. If it goes out of scope (e.g., due to an early return) -// without the allowBreak bit being set, then it will clean up all of the objects and destroy them. -struct ShadowParseContext { - ShadowParseContext() - :values(0), x(0), y(0), blur(0), color(0), - allowX(true), allowY(false), allowBlur(false), allowColor(true), - allowBreak(true) - {} - - ~ShadowParseContext() { - if (!allowBreak) { - delete values; - delete x; - delete y; - delete blur; - delete color; - } - } - - bool allowLength() { return allowX || allowY || allowBlur; } - - bool failed() { return allowBreak = false; } - - void commitValue() { - // Handle the ,, case gracefully by doing nothing. - if (x || y || blur || color) { - if (!values) - values = new CSSValueListImpl(); - - // Construct the current shadow value and add it to the list. - values->append(new ShadowValueImpl(x, y, blur, color)); - } - - // Now reset for the next shadow value. - x = y = blur = color = 0; - allowX = allowColor = allowBreak = true; - allowY = allowBlur = false; - } - - void commitLength(Value* v) { - CSSPrimitiveValueImpl* val = new CSSPrimitiveValueImpl(v->fValue, - (CSSPrimitiveValue::UnitTypes)v->unit); - if (allowX) { - x = val; - allowX = false; allowY = true; allowColor = false; allowBreak = false; - } - else if (allowY) { - y = val; - allowY = false; allowBlur = true; allowColor = true; allowBreak = true; - } - else if (allowBlur) { - blur = val; - allowBlur = false; - } - else - delete val; - } - - void commitColor(CSSPrimitiveValueImpl* val) { - color = val; - allowColor = false; - if (allowX) - allowBreak = false; - else - allowBlur = false; - } - - CSSValueListImpl* values; - CSSPrimitiveValueImpl* x; - CSSPrimitiveValueImpl* y; - CSSPrimitiveValueImpl* blur; - CSSPrimitiveValueImpl* color; - - bool allowX; - bool allowY; - bool allowBlur; - bool allowColor; - bool allowBreak; -}; - -bool CSSParser::parseShadow(int propId, bool important) -{ - ShadowParseContext context; - Value* val; - while ((val = valueList->current())) { - // Check for a comma break first. - if (val->unit == Value::Operator) { - if (val->iValue != ',' || !context.allowBreak) - // Other operators aren't legal or we aren't done with the current shadow - // value. Treat as invalid. - return context.failed(); - - // The value is good. Commit it. - context.commitValue(); - } - // Check to see if we're a length. - else if (validUnit(val, FLength, true)) { - // We required a length and didn't get one. Invalid. - if (!context.allowLength()) - return context.failed(); - - // A length is allowed here. Construct the value and add it. - context.commitLength(val); - } - else { - // The only other type of value that's ok is a color value. - CSSPrimitiveValueImpl* parsedColor = 0; - bool isColor = (val->id >= CSS_VAL_AQUA && val->id <= CSS_VAL_WINDOWTEXT || val->id == CSS_VAL_MENU || - (val->id >= CSS_VAL_GREY && val->id <= CSS_VAL__KHTML_TEXT && !strict)); - if (!context.allowColor) - return context.failed(); - - if (isColor) - parsedColor = new CSSPrimitiveValueImpl(val->id); - - if (!parsedColor) - // It's not built-in. Try to parse it as a color. - parsedColor = parseColorFromValue(val); - - if (!parsedColor) - return context.failed(); - - context.commitColor(parsedColor); - } - - valueList->next(); - } - - if (context.allowBreak) { - context.commitValue(); - if (context.values->length()) { - addProperty(propId, context.values, important); - valueList->next(); - return true; - } - } - - return context.failed(); -} - -bool CSSParser::parseCounter(int propId, bool increment, bool important) -{ - enum { ID, VAL, COMMA } state = ID; - - CSSValueListImpl *list = new CSSValueListImpl; - DOMString c; - Value* val; - while (true) { - val = valueList->current(); - switch (state) { - // Commas are not allowed according to the standard, but Opera allows them and being the only - // other browser with counter support we need to match their behavior to work with current use - case COMMA: - state = ID; - if (val && val->unit == Value::Operator && val->iValue == ',') { - valueList->next(); - continue; - } - // no break - case ID: - if (val && val->unit == CSSPrimitiveValue::CSS_IDENT) { - c = qString(val->string); - state = VAL; - valueList->next(); - continue; - } - break; - case VAL: { - short i = 0; - if (val && val->unit == CSSPrimitiveValue::CSS_NUMBER) { - i = (short)val->fValue; - valueList->next(); - } else - i = (increment) ? 1 : 0; - - CounterActImpl *cv = new CounterActImpl(c,i); - list->append(cv); - state = COMMA; - continue; - } - } - break; - } - if(list->length() > 0) { - addProperty( propId, list, important ); - return true; - } - delete list; - return false; -} - -static inline int yyerror( const char *str ) { -// assert( 0 ); -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "CSS parse error " << str << endl; -#else - Q_UNUSED( str ); -#endif - return 1; -} - -#define END 0 - -#include "parser.h" - -int DOM::CSSParser::lex( void *_yylval ) -{ - YYSTYPE *yylval = (YYSTYPE *)_yylval; - int token = lex(); - int length; - unsigned short *t = text( &length ); - -#ifdef TOKEN_DEBUG - tqDebug("CSSTokenizer: got token %d: '%s'", token, token == END ? "" : TQString( (TQChar *)t, length ).latin1() ); -#endif - switch( token ) { - case '{': - block_nesting++; - break; - case '}': - if ( block_nesting ) - block_nesting--; - break; - case END: - if ( block_nesting ) { - block_nesting--; - return '}'; - } - break; - case S: - case SGML_CD: - case INCLUDES: - case DASHMATCH: - break; - - case URI: - case STRING: - case IDENT: - case NTH: - case HASH: - case DIMEN: - case UNICODERANGE: - case NOTFUNCTION: - case FUNCTION: - yylval->string.string = t; - yylval->string.length = length; - break; - - case IMPORT_SYM: - case PAGE_SYM: - case MEDIA_SYM: - case FONT_FACE_SYM: - case CHARSET_SYM: - case NAMESPACE_SYM: - - case IMPORTANT_SYM: - break; - - case QEMS: - length--; - case GRADS: - length--; - case DEGS: - case RADS: - case KHERZ: - length--; - case MSECS: - case HERZ: - case EMS: - case EXS: - case PXS: - case CMS: - case MMS: - case INS: - case PTS: - case PCS: - length--; - case SECS: - case PERCENTAGE: - length--; - case FLOAT: - case INTEGER: - yylval->val = TQString( (TQChar *)t, length ).toDouble(); - //tqDebug("value = %s, converted=%.2f", TQString( (TQChar *)t, length ).latin1(), yylval->val ); - break; - - default: - break; - } - - return token; -} - -static inline int toHex( char c ) { - if ( '0' <= c && c <= '9' ) - return c - '0'; - if ( 'a' <= c && c <= 'f' ) - return c - 'a' + 10; - if ( 'A' <= c && c<= 'F' ) - return c - 'A' + 10; - return 0; -} - -unsigned short *DOM::CSSParser::text(int *length) -{ - unsigned short *start = yytext; - int l = yyleng; - switch( yyTok ) { - case STRING: - l--; - /* nobreak */ - case HASH: - start++; - l--; - break; - case URI: - // "url("{w}{string}{w}")" - // "url("{w}{url}{w}")" - - // strip "url(" and ")" - start += 4; - l -= 5; - // strip {w} - while ( l && - (*start == ' ' || *start == '\t' || *start == '\r' || - *start == '\n' || *start == '\f' ) ) { - start++; l--; - } - if ( *start == '"' || *start == '\'' ) { - start++; l--; - } - while ( l && - (start[l-1] == ' ' || start[l-1] == '\t' || start[l-1] == '\r' || - start[l-1] == '\n' || start[l-1] == '\f' ) ) { - l--; - } - if ( l && (start[l-1] == '\"' || start[l-1] == '\'' ) ) - l--; - - default: - break; - } - - // process escapes - unsigned short *out = start; - unsigned short *escape = 0; - - for ( int i = 0; i < l; i++ ) { - unsigned short *current = start+i; - if ( escape == current - 1 ) { - if ( ( *current >= '0' && *current <= '9' ) || - ( *current >= 'a' && *current <= 'f' ) || - ( *current >= 'A' && *current <= 'F' ) ) - continue; - if ( yyTok == STRING && - ( *current == '\n' || *current == '\r' || *current == '\f' ) ) { - // ### handle \r\n case - if ( *current != '\r' ) - escape = 0; - continue; - } - // in all other cases copy the char to output - // ### - *out++ = *current; - escape = 0; - continue; - } - if ( escape == current - 2 && yyTok == STRING && - *(current-1) == '\r' && *current == '\n' ) { - escape = 0; - continue; - } - if ( escape > current - 7 && - ( ( *current >= '0' && *current <= '9' ) || - ( *current >= 'a' && *current <= 'f' ) || - ( *current >= 'A' && *current <= 'F' ) ) ) - continue; - if ( escape ) { - // add escaped char - int uc = 0; - escape++; - while ( escape < current ) { -// tqDebug("toHex( %c = %x", (char)*escape, toHex( *escape ) ); - uc *= 16; - uc += toHex( *escape ); - escape++; - } -// tqDebug(" converting escape: string='%s', value=0x%x", TQString( (TQChar *)e, current-e ).latin1(), uc ); - // can't handle chars outside ucs2 - if ( uc > 0xffff ) - uc = 0xfffd; - *(out++) = (unsigned short)uc; - escape = 0; - if ( *current == ' ' || - *current == '\t' || - *current == '\r' || - *current == '\n' || - *current == '\f' ) - continue; - } - if ( !escape && *current == '\\' ) { - escape = current; - continue; - } - *(out++) = *current; - } - if ( escape ) { - // add escaped char - int uc = 0; - escape++; - while ( escape < start+l ) { - // tqDebug("toHex( %c = %x", (char)*escape, toHex( *escape ) ); - uc *= 16; - uc += toHex( *escape ); - escape++; - } - // tqDebug(" converting escape: string='%s', value=0x%x", TQString( (TQChar *)e, current-e ).latin1(), uc ); - // can't handle chars outside ucs2 - if ( uc > 0xffff ) - uc = 0xfffd; - *(out++) = (unsigned short)uc; - } - - *length = out - start; - return start; -} - - -#define YY_DECL int DOM::CSSParser::lex() -#define yyconst const -typedef int yy_state_type; -typedef unsigned int YY_CHAR; -// this line makes sure we treat all Unicode chars correctly. -#define YY_SC_TO_UI(c) (c > 0xff ? 0xff : c) -#define YY_DO_BEFORE_ACTION \ - yytext = yy_bp; \ - yyleng = (int) (yy_cp - yy_bp); \ - yy_hold_char = *yy_cp; \ - *yy_cp = 0; \ - yy_c_buf_p = yy_cp; -#define YY_BREAK break; -#define ECHO tqDebug( "%s", TQString( (TQChar *)yytext, yyleng ).latin1() ) -#define YY_RULE_SETUP -#define INITIAL 0 -#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) -#define YY_START ((yy_start - 1) / 2) -#define yyterminate() yyTok = END; return yyTok -#define YY_FATAL_ERROR(a) tqFatal(a) -#define BEGIN yy_start = 1 + 2 * -#define COMMENT 1 - -#include "tokenizer.cpp" diff --git a/khtml/css/cssparser.h b/khtml/css/cssparser.h deleted file mode 100644 index 0e00ebc16..000000000 --- a/khtml/css/cssparser.h +++ /dev/null @@ -1,201 +0,0 @@ -/* - * This file is part of the DOM implementation for KDE. - * - * Copyright (C) 2003 Lars Knoll (knoll@kde.org) - * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. - * - * 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. - */ -#ifndef _CSS_cssparser_h_ -#define _CSS_cssparser_h_ - -#include <tqstring.h> -#include <tqcolor.h> -#include <tqvaluevector.h> -#include <dom/dom_string.h> - -namespace DOM { - class StyleListImpl; - class CSSStyleSheetImpl; - class CSSRuleImpl; - class CSSStyleRuleImpl; - class DocumentImpl; - class CSSValueImpl; - class CSSValueListImpl; - class CSSPrimitiveValueImpl; - class CSSStyleDeclarationImpl; - class CSSProperty; - class CSSRuleListImpl; - - - struct ParseString { - unsigned short *string; - int length; - }; - - struct Value; - class ValueList; - - struct Function { - ParseString name; - ValueList *args; - }; - - struct Value { - int id; - bool isInt; - union { - double fValue; - int iValue; - ParseString string; - struct Function *function; - }; - enum { - Operator = 0x100000, - Function = 0x100001, - Q_EMS = 0x100002 - }; - - int unit; - }; - - static inline TQString qString( const ParseString &ps ) { - return TQString( (TQChar *)ps.string, ps.length ); - } - static inline DOMString domString( const ParseString &ps ) { - return DOMString( (TQChar *)ps.string, ps.length ); - } - - class ValueList { - public: - ValueList() : m_current(0) { } - ~ValueList(); - void addValue(const Value& v) { m_values.append(v); } - unsigned int size() const { return m_values.size(); } - Value* current() { return m_current < m_values.size() ? &m_values[m_current] : 0; } - Value* next() { ++m_current; return current(); } - private: - TQValueVector<Value> m_values; - unsigned int m_current; - }; - - class CSSParser - { - public: - CSSParser( bool strictParsing = true ); - ~CSSParser(); - - void parseSheet( DOM::CSSStyleSheetImpl *sheet, const DOM::DOMString &string ); - DOM::CSSRuleImpl *parseRule( DOM::CSSStyleSheetImpl *sheet, const DOM::DOMString &string ); - bool parseValue( DOM::CSSStyleDeclarationImpl *decls, int id, const DOM::DOMString &string, - bool _important, bool _nonCSSHint ); - bool parseDeclaration( DOM::CSSStyleDeclarationImpl *decls, const DOM::DOMString &string, - bool _nonCSSHint ); - - static CSSParser *current() { return currentParser; } - - - DOM::DocumentImpl *document() const; - - unsigned int defaultNamespace(); - - void addProperty( int propId, CSSValueImpl *value, bool important ); - bool hasProperties() const { return numParsedProperties > 0; } - CSSStyleDeclarationImpl *createStyleDeclaration( CSSStyleRuleImpl *rule ); - void clearProperties(); - - bool parseValue( int propId, bool important ); - bool parseShortHand( int propId, const int *properties, int numProperties, bool important ); - bool parse4Values( int propId, const int *properties, bool important ); - bool parseContent( int propId, bool important ); - - CSSValueImpl* parseBackgroundColor(); - CSSValueImpl* parseBackgroundImage(); - CSSValueImpl* parseBackgroundPositionXY(bool& xFound, bool& yFound); - void parseBackgroundPosition(CSSValueImpl*& value1, CSSValueImpl*& value2); - CSSValueImpl* parseBackgroundSize(); - - bool parseBackgroundProperty(int propId, int& propId1, int& propId2, CSSValueImpl*& retValue1, CSSValueImpl*& retValue2); - bool parseBackgroundShorthand(bool important); - - void addBackgroundValue(CSSValueImpl*& lval, CSSValueImpl* rval); - - bool parseShape( int propId, bool important ); - bool parseFont(bool important); - bool parseCounter(int propId, bool increment, bool important); - - bool parseColorParameters(Value*, int* colorValues, bool parseAlpha); - bool parseHSLParameters(Value*, double* colorValues, bool parseAlpha); - - // returns the found property - // 0 if nothing found (or ok == false) - // @param forward if true, it parses the next in the list - CSSValueListImpl *parseFontFamily(); - CSSPrimitiveValueImpl *parseColor(); - CSSPrimitiveValueImpl *parseColorFromValue(Value* val); - CSSValueImpl* parseCounterContent(ValueList *args, bool counters); - - static bool parseColor(const TQString &name, QRgb& rgb); - - // CSS3 Parsing Routines (for properties specific to CSS3) - bool parseShadow(int propId, bool important); - - bool parseBorderImage(int propId, bool important); - - public: - bool strict; - bool important; - bool nonCSSHint; - unsigned int id; - DOM::StyleListImpl* styleElement; - DOM::CSSRuleImpl *rule; - ValueList *valueList; - CSSProperty **parsedProperties; - int numParsedProperties; - int maxParsedProperties; - - int m_inParseShorthand; - int m_currentShorthand; - bool m_implicitShorthand; - - static CSSParser *currentParser; - - // tokenizer methods and data - public: - int lex( void *yylval ); - int token() { return yyTok; } - unsigned short *text( int *length); - int lex(); - private: - int yyparse(); - void runParser(int length); - - bool inShorthand() const { return m_inParseShorthand; } - - unsigned short *data; - unsigned short *yytext; - unsigned short *yy_c_buf_p; - unsigned short yy_hold_char; - int yy_last_accepting_state; - unsigned short *yy_last_accepting_cpos; - int block_nesting; - int yyleng; - int yyTok; - int yy_start; - }; - -} // namespace -#endif diff --git a/khtml/css/cssproperties.c b/khtml/css/cssproperties.c deleted file mode 100644 index c86f2d326..000000000 --- a/khtml/css/cssproperties.c +++ /dev/null @@ -1,678 +0,0 @@ -/* ANSI-C code produced by gperf version 3.0.2 */ -/* Command-line: gperf -a -L ANSI-C -E -C -c -o -t -k '*' -NfindProp -Hhash_prop -Wwordlist_prop -D -s 2 cssproperties.gperf */ - -#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ - && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ - && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ - && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ - && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ - && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ - && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ - && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ - && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ - && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ - && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ - && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ - && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ - && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ - && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ - && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ - && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ - && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ - && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ - && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ - && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ - && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ - && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) -/* The character set is not based on ISO-646. */ -#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>." -#endif - -#line 1 "cssproperties.gperf" - -/* This file is automatically generated from cssproperties.in by makeprop, do not edit */ -/* Copyright 1999 W. Bastian */ -#include "cssproperties.h" -#line 6 "cssproperties.gperf" -struct props { - const char *name; - int id; -}; - -static const struct props * findProp (register const char *str, register unsigned int len); -/* maximum key range = 469, duplicates = 0 */ - -#ifdef __GNUC__ -__inline -#else -#ifdef __cplusplus -inline -#endif -#endif -static unsigned int -hash_prop (register const char *str, register unsigned int len) -{ - static const unsigned short asso_values[] = - { - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 0, 472, 472, 472, 472, - 472, 0, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 10, 0, 0, - 5, 5, 120, 0, 0, 0, 472, 15, 5, 0, - 25, 0, 0, 50, 0, 30, 0, 40, 0, 140, - 35, 180, 80, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472 - }; - register int hval = len; - - switch (hval) - { - default: - hval += asso_values[(unsigned char)str[31]]; - /*FALLTHROUGH*/ - case 31: - hval += asso_values[(unsigned char)str[30]]; - /*FALLTHROUGH*/ - case 30: - hval += asso_values[(unsigned char)str[29]]; - /*FALLTHROUGH*/ - case 29: - hval += asso_values[(unsigned char)str[28]]; - /*FALLTHROUGH*/ - case 28: - hval += asso_values[(unsigned char)str[27]]; - /*FALLTHROUGH*/ - case 27: - hval += asso_values[(unsigned char)str[26]]; - /*FALLTHROUGH*/ - case 26: - hval += asso_values[(unsigned char)str[25]]; - /*FALLTHROUGH*/ - case 25: - hval += asso_values[(unsigned char)str[24]]; - /*FALLTHROUGH*/ - case 24: - hval += asso_values[(unsigned char)str[23]]; - /*FALLTHROUGH*/ - case 23: - hval += asso_values[(unsigned char)str[22]]; - /*FALLTHROUGH*/ - case 22: - hval += asso_values[(unsigned char)str[21]]; - /*FALLTHROUGH*/ - case 21: - hval += asso_values[(unsigned char)str[20]]; - /*FALLTHROUGH*/ - case 20: - hval += asso_values[(unsigned char)str[19]]; - /*FALLTHROUGH*/ - case 19: - hval += asso_values[(unsigned char)str[18]]; - /*FALLTHROUGH*/ - case 18: - hval += asso_values[(unsigned char)str[17]]; - /*FALLTHROUGH*/ - case 17: - hval += asso_values[(unsigned char)str[16]]; - /*FALLTHROUGH*/ - case 16: - hval += asso_values[(unsigned char)str[15]]; - /*FALLTHROUGH*/ - case 15: - hval += asso_values[(unsigned char)str[14]]; - /*FALLTHROUGH*/ - case 14: - hval += asso_values[(unsigned char)str[13]]; - /*FALLTHROUGH*/ - case 13: - hval += asso_values[(unsigned char)str[12]]; - /*FALLTHROUGH*/ - case 12: - hval += asso_values[(unsigned char)str[11]]; - /*FALLTHROUGH*/ - case 11: - hval += asso_values[(unsigned char)str[10]]; - /*FALLTHROUGH*/ - case 10: - hval += asso_values[(unsigned char)str[9]]; - /*FALLTHROUGH*/ - case 9: - hval += asso_values[(unsigned char)str[8]]; - /*FALLTHROUGH*/ - case 8: - hval += asso_values[(unsigned char)str[7]]; - /*FALLTHROUGH*/ - case 7: - hval += asso_values[(unsigned char)str[6]]; - /*FALLTHROUGH*/ - case 6: - hval += asso_values[(unsigned char)str[5]]; - /*FALLTHROUGH*/ - case 5: - hval += asso_values[(unsigned char)str[4]]; - /*FALLTHROUGH*/ - case 4: - hval += asso_values[(unsigned char)str[3]]; - /*FALLTHROUGH*/ - case 3: - hval += asso_values[(unsigned char)str[2]]; - /*FALLTHROUGH*/ - case 2: - hval += asso_values[(unsigned char)str[1]]; - /*FALLTHROUGH*/ - case 1: - hval += asso_values[(unsigned char)str[0]]; - break; - } - return hval; -} - -#ifdef __GNUC__ -__inline -#endif -const struct props * -findProp (register const char *str, register unsigned int len) -{ - enum - { - TOTAL_KEYWORDS = 129, - MIN_WORD_LENGTH = 3, - MAX_WORD_LENGTH = 32, - MIN_HASH_VALUE = 3, - MAX_HASH_VALUE = 471 - }; - - static const struct props wordlist_prop[] = - { -#line 108 "cssproperties.gperf" - {"top", CSS_PROP_TOP}, -#line 99 "cssproperties.gperf" - {"right", CSS_PROP_RIGHT}, -#line 40 "cssproperties.gperf" - {"bottom", CSS_PROP_BOTTOM}, -#line 43 "cssproperties.gperf" - {"clip", CSS_PROP_CLIP}, -#line 44 "cssproperties.gperf" - {"color", CSS_PROP_COLOR}, -#line 58 "cssproperties.gperf" - {"height", CSS_PROP_HEIGHT}, -#line 119 "cssproperties.gperf" - {"border", CSS_PROP_BORDER}, -#line 122 "cssproperties.gperf" - {"border-top", CSS_PROP_BORDER_TOP}, -#line 123 "cssproperties.gperf" - {"border-right", CSS_PROP_BORDER_RIGHT}, -#line 124 "cssproperties.gperf" - {"border-bottom", CSS_PROP_BORDER_BOTTOM}, -#line 42 "cssproperties.gperf" - {"clear", CSS_PROP_CLEAR}, -#line 120 "cssproperties.gperf" - {"border-color", CSS_PROP_BORDER_COLOR}, -#line 28 "cssproperties.gperf" - {"border-top-color", CSS_PROP_BORDER_TOP_COLOR}, -#line 29 "cssproperties.gperf" - {"border-right-color", CSS_PROP_BORDER_RIGHT_COLOR}, -#line 30 "cssproperties.gperf" - {"border-bottom-color", CSS_PROP_BORDER_BOTTOM_COLOR}, -#line 78 "cssproperties.gperf" - {"min-height", CSS_PROP_MIN_HEIGHT}, -#line 130 "cssproperties.gperf" - {"margin", CSS_PROP_MARGIN}, -#line 49 "cssproperties.gperf" - {"direction", CSS_PROP_DIRECTION}, -#line 65 "cssproperties.gperf" - {"margin-top", CSS_PROP_MARGIN_TOP}, -#line 66 "cssproperties.gperf" - {"margin-right", CSS_PROP_MARGIN_RIGHT}, -#line 67 "cssproperties.gperf" - {"margin-bottom", CSS_PROP_MARGIN_BOTTOM}, -#line 61 "cssproperties.gperf" - {"line-height", CSS_PROP_LINE_HEIGHT}, -#line 132 "cssproperties.gperf" - {"padding", CSS_PROP_PADDING}, -#line 89 "cssproperties.gperf" - {"padding-top", CSS_PROP_PADDING_TOP}, -#line 90 "cssproperties.gperf" - {"padding-right", CSS_PROP_PADDING_RIGHT}, -#line 91 "cssproperties.gperf" - {"padding-bottom", CSS_PROP_PADDING_BOTTOM}, -#line 76 "cssproperties.gperf" - {"max-height", CSS_PROP_MAX_HEIGHT}, -#line 45 "cssproperties.gperf" - {"content", CSS_PROP_CONTENT}, -#line 97 "cssproperties.gperf" - {"position", CSS_PROP_POSITION}, -#line 80 "cssproperties.gperf" - {"orphans", CSS_PROP_ORPHANS}, -#line 110 "cssproperties.gperf" - {"vertical-align", CSS_PROP_VERTICAL_ALIGN}, -#line 48 "cssproperties.gperf" - {"cursor", CSS_PROP_CURSOR}, -#line 24 "cssproperties.gperf" - {"border-collapse", CSS_PROP_BORDER_COLLAPSE}, -#line 131 "cssproperties.gperf" - {"outline", CSS_PROP_OUTLINE}, -#line 136 "cssproperties.gperf" - {"scrollbar-highlight-color", CSS_PROP_SCROLLBAR_HIGHLIGHT_COLOR}, -#line 41 "cssproperties.gperf" - {"caption-side", CSS_PROP_CAPTION_SIDE}, -#line 137 "cssproperties.gperf" - {"scrollbar-3dlight-color", CSS_PROP_SCROLLBAR_3DLIGHT_COLOR}, -#line 25 "cssproperties.gperf" - {"border-spacing", CSS_PROP_BORDER_SPACING}, -#line 102 "cssproperties.gperf" - {"text-align", CSS_PROP_TEXT_ALIGN}, -#line 109 "cssproperties.gperf" - {"unicode-bidi", CSS_PROP_UNICODE_BIDI}, -#line 82 "cssproperties.gperf" - {"outline-color", CSS_PROP_OUTLINE_COLOR}, -#line 60 "cssproperties.gperf" - {"letter-spacing", CSS_PROP_LETTER_SPACING}, -#line 103 "cssproperties.gperf" - {"text-decoration", CSS_PROP_TEXT_DECORATION}, -#line 139 "cssproperties.gperf" - {"scrollbar-track-color", CSS_PROP_SCROLLBAR_TRACK_COLOR}, -#line 118 "cssproperties.gperf" - {"background", CSS_PROP_BACKGROUND}, -#line 104 "cssproperties.gperf" - {"text-indent", CSS_PROP_TEXT_INDENT}, -#line 69 "cssproperties.gperf" - {"-khtml-margin-start", CSS_PROP__KHTML_MARGIN_START}, -#line 14 "cssproperties.gperf" - {"background-color", CSS_PROP_BACKGROUND_COLOR}, -#line 100 "cssproperties.gperf" - {"size", CSS_PROP_SIZE}, -#line 133 "cssproperties.gperf" - {"scrollbar-base-color", CSS_PROP_SCROLLBAR_BASE_COLOR}, -#line 47 "cssproperties.gperf" - {"counter-reset", CSS_PROP_COUNTER_RESET}, -#line 93 "cssproperties.gperf" - {"-khtml-padding-start", CSS_PROP__KHTML_PADDING_START}, -#line 15 "cssproperties.gperf" - {"background-image", CSS_PROP_BACKGROUND_IMAGE}, -#line 96 "cssproperties.gperf" - {"page-break-inside", CSS_PROP_PAGE_BREAK_INSIDE}, -#line 98 "cssproperties.gperf" - {"quotes", CSS_PROP_QUOTES}, -#line 16 "cssproperties.gperf" - {"background-repeat", CSS_PROP_BACKGROUND_REPEAT}, -#line 59 "cssproperties.gperf" - {"left", CSS_PROP_LEFT}, -#line 52 "cssproperties.gperf" - {"float", CSS_PROP_FLOAT}, -#line 21 "cssproperties.gperf" - {"-khtml-background-clip", CSS_PROP__KHTML_BACKGROUND_CLIP}, -#line 70 "cssproperties.gperf" - {"-khtml-marquee", CSS_PROP__KHTML_MARQUEE}, -#line 27 "cssproperties.gperf" - {"-khtml-border-vertical-spacing", CSS_PROP__KHTML_BORDER_VERTICAL_SPACING}, -#line 46 "cssproperties.gperf" - {"counter-increment", CSS_PROP_COUNTER_INCREMENT}, -#line 128 "cssproperties.gperf" - {"font", CSS_PROP_FONT}, -#line 114 "cssproperties.gperf" - {"width", CSS_PROP_WIDTH}, -#line 125 "cssproperties.gperf" - {"border-left", CSS_PROP_BORDER_LEFT}, -#line 117 "cssproperties.gperf" - {"z-index", CSS_PROP_Z_INDEX}, -#line 31 "cssproperties.gperf" - {"border-left-color", CSS_PROP_BORDER_LEFT_COLOR}, -#line 22 "cssproperties.gperf" - {"-khtml-background-origin", CSS_PROP__KHTML_BACKGROUND_ORIGIN}, -#line 17 "cssproperties.gperf" - {"background-attachment", CSS_PROP_BACKGROUND_ATTACHMENT}, -#line 126 "cssproperties.gperf" - {"border-width", CSS_PROP_BORDER_WIDTH}, -#line 18 "cssproperties.gperf" - {"background-position", CSS_PROP_BACKGROUND_POSITION}, -#line 36 "cssproperties.gperf" - {"border-top-width", CSS_PROP_BORDER_TOP_WIDTH}, -#line 37 "cssproperties.gperf" - {"border-right-width", CSS_PROP_BORDER_RIGHT_WIDTH}, -#line 38 "cssproperties.gperf" - {"border-bottom-width", CSS_PROP_BORDER_BOTTOM_WIDTH}, -#line 68 "cssproperties.gperf" - {"margin-left", CSS_PROP_MARGIN_LEFT}, -#line 142 "cssproperties.gperf" - {"-khtml-user-input", CSS_PROP__KHTML_USER_INPUT}, -#line 79 "cssproperties.gperf" - {"min-width", CSS_PROP_MIN_WIDTH}, -#line 127 "cssproperties.gperf" - {"box-sizing", CSS_PROP_BOX_SIZING}, -#line 92 "cssproperties.gperf" - {"padding-left", CSS_PROP_PADDING_LEFT}, -#line 71 "cssproperties.gperf" - {"-khtml-marquee-direction", CSS_PROP__KHTML_MARQUEE_DIRECTION}, -#line 73 "cssproperties.gperf" - {"-khtml-marquee-repetition", CSS_PROP__KHTML_MARQUEE_REPETITION}, -#line 95 "cssproperties.gperf" - {"page-break-before", CSS_PROP_PAGE_BREAK_BEFORE}, -#line 74 "cssproperties.gperf" - {"-khtml-marquee-speed", CSS_PROP__KHTML_MARQUEE_SPEED}, -#line 94 "cssproperties.gperf" - {"page-break-after", CSS_PROP_PAGE_BREAK_AFTER}, -#line 81 "cssproperties.gperf" - {"opacity", CSS_PROP_OPACITY}, -#line 77 "cssproperties.gperf" - {"max-width", CSS_PROP_MAX_WIDTH}, -#line 112 "cssproperties.gperf" - {"white-space", CSS_PROP_WHITE_SPACE}, -#line 56 "cssproperties.gperf" - {"font-variant", CSS_PROP_FONT_VARIANT}, -#line 19 "cssproperties.gperf" - {"background-position-x", CSS_PROP_BACKGROUND_POSITION_X}, -#line 134 "cssproperties.gperf" - {"scrollbar-face-color", CSS_PROP_SCROLLBAR_FACE_COLOR}, -#line 72 "cssproperties.gperf" - {"-khtml-marquee-increment", CSS_PROP__KHTML_MARQUEE_INCREMENT}, -#line 116 "cssproperties.gperf" - {"word-spacing", CSS_PROP_WORD_SPACING}, -#line 111 "cssproperties.gperf" - {"visibility", CSS_PROP_VISIBILITY}, -#line 140 "cssproperties.gperf" - {"scrollbar-arrow-color", CSS_PROP_SCROLLBAR_ARROW_COLOR}, -#line 85 "cssproperties.gperf" - {"outline-width", CSS_PROP_OUTLINE_WIDTH}, -#line 106 "cssproperties.gperf" - {"text-shadow", CSS_PROP_TEXT_SHADOW}, -#line 50 "cssproperties.gperf" - {"display", CSS_PROP_DISPLAY}, -#line 107 "cssproperties.gperf" - {"text-transform", CSS_PROP_TEXT_TRANSFORM}, -#line 51 "cssproperties.gperf" - {"empty-cells", CSS_PROP_EMPTY_CELLS}, -#line 121 "cssproperties.gperf" - {"border-style", CSS_PROP_BORDER_STYLE}, -#line 32 "cssproperties.gperf" - {"border-top-style", CSS_PROP_BORDER_TOP_STYLE}, -#line 26 "cssproperties.gperf" - {"-khtml-border-horizontal-spacing", CSS_PROP__KHTML_BORDER_HORIZONTAL_SPACING}, -#line 33 "cssproperties.gperf" - {"border-right-style", CSS_PROP_BORDER_RIGHT_STYLE}, -#line 34 "cssproperties.gperf" - {"border-bottom-style", CSS_PROP_BORDER_BOTTOM_STYLE}, -#line 23 "cssproperties.gperf" - {"-khtml-background-size", CSS_PROP__KHTML_BACKGROUND_SIZE}, -#line 135 "cssproperties.gperf" - {"scrollbar-shadow-color", CSS_PROP_SCROLLBAR_SHADOW_COLOR}, -#line 129 "cssproperties.gperf" - {"list-style", CSS_PROP_LIST_STYLE}, -#line 101 "cssproperties.gperf" - {"table-layout", CSS_PROP_TABLE_LAYOUT}, -#line 54 "cssproperties.gperf" - {"font-size", CSS_PROP_FONT_SIZE}, -#line 86 "cssproperties.gperf" - {"overflow", CSS_PROP_OVERFLOW}, -#line 62 "cssproperties.gperf" - {"list-style-image", CSS_PROP_LIST_STYLE_IMAGE}, -#line 138 "cssproperties.gperf" - {"scrollbar-darkshadow-color", CSS_PROP_SCROLLBAR_DARKSHADOW_COLOR}, -#line 57 "cssproperties.gperf" - {"font-weight", CSS_PROP_FONT_WEIGHT}, -#line 39 "cssproperties.gperf" - {"border-left-width", CSS_PROP_BORDER_LEFT_WIDTH}, -#line 115 "cssproperties.gperf" - {"word-wrap", CSS_PROP_WORD_WRAP}, -#line 84 "cssproperties.gperf" - {"outline-style", CSS_PROP_OUTLINE_STYLE}, -#line 141 "cssproperties.gperf" - {"-khtml-flow-mode", CSS_PROP__KHTML_FLOW_MODE}, -#line 87 "cssproperties.gperf" - {"overflow-x", CSS_PROP_OVERFLOW_X}, -#line 113 "cssproperties.gperf" - {"widows", CSS_PROP_WIDOWS}, -#line 105 "cssproperties.gperf" - {"text-overflow", CSS_PROP_TEXT_OVERFLOW}, -#line 63 "cssproperties.gperf" - {"list-style-position", CSS_PROP_LIST_STYLE_POSITION}, -#line 20 "cssproperties.gperf" - {"background-position-y", CSS_PROP_BACKGROUND_POSITION_Y}, -#line 83 "cssproperties.gperf" - {"outline-offset", CSS_PROP_OUTLINE_OFFSET}, -#line 75 "cssproperties.gperf" - {"-khtml-marquee-style", CSS_PROP__KHTML_MARQUEE_STYLE}, -#line 55 "cssproperties.gperf" - {"font-style", CSS_PROP_FONT_STYLE}, -#line 35 "cssproperties.gperf" - {"border-left-style", CSS_PROP_BORDER_LEFT_STYLE}, -#line 64 "cssproperties.gperf" - {"list-style-type", CSS_PROP_LIST_STYLE_TYPE}, -#line 88 "cssproperties.gperf" - {"overflow-y", CSS_PROP_OVERFLOW_Y}, -#line 53 "cssproperties.gperf" - {"font-family", CSS_PROP_FONT_FAMILY} - }; - - static const short lookup[] = - { - -1, -1, -1, 0, -1, 1, 2, -1, -1, 3, - 4, 5, -1, -1, -1, -1, 6, -1, -1, -1, - 7, -1, 8, 9, -1, 10, -1, 11, -1, -1, - -1, 12, -1, 13, 14, -1, -1, -1, -1, -1, - 15, 16, -1, -1, 17, 18, -1, 19, 20, -1, - -1, 21, 22, -1, -1, -1, 23, -1, 24, 25, - 26, -1, 27, 28, -1, -1, -1, -1, -1, -1, - -1, -1, 29, -1, 30, -1, 31, -1, -1, -1, - 32, -1, 33, -1, -1, 34, -1, 35, 36, 37, - 38, -1, 39, 40, 41, -1, -1, -1, -1, -1, - 42, 43, -1, -1, -1, 44, -1, -1, -1, -1, - -1, 45, -1, -1, 46, -1, 47, -1, -1, 48, - 49, -1, -1, 50, -1, 51, 52, 53, -1, -1, - -1, 54, 55, -1, 56, -1, -1, -1, -1, -1, - 57, -1, 58, -1, 59, 60, -1, 61, -1, 62, - 63, 64, -1, -1, -1, -1, -1, 65, -1, -1, - -1, -1, 66, -1, 67, -1, 68, 69, -1, 70, - -1, 71, -1, 72, 73, -1, 74, 75, -1, 76, - 77, -1, -1, -1, -1, -1, -1, 78, -1, 79, - 80, -1, 81, -1, -1, 82, 83, 84, -1, 85, - -1, 86, 87, -1, -1, -1, 88, -1, -1, -1, - 89, -1, -1, -1, 90, -1, -1, -1, -1, -1, - -1, -1, 91, -1, -1, 92, 93, -1, -1, -1, - -1, -1, -1, 94, -1, -1, 95, 96, -1, 97, - -1, 98, 99, -1, -1, -1, 100, 101, 102, 103, - -1, -1, 104, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 105, -1, -1, 106, -1, 107, -1, 108, - -1, -1, -1, -1, -1, -1, -1, -1, 109, -1, - -1, -1, -1, -1, -1, -1, 110, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 111, -1, -1, -1, - -1, 112, 113, -1, 114, -1, -1, -1, 115, -1, - -1, 116, -1, -1, -1, 117, -1, -1, -1, -1, - -1, 118, -1, 119, -1, -1, -1, -1, -1, 120, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 121, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 122, -1, -1, -1, -1, -1, - 123, -1, -1, -1, -1, 124, -1, 125, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 126, -1, -1, -1, -1, - 127, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 128 - }; - - if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) - { - register int key = hash_prop (str, len); - - if (key <= MAX_HASH_VALUE && key >= 0) - { - register int index = lookup[key]; - - if (index >= 0) - { - register const char *s = wordlist_prop[index].name; - - if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0') - return &wordlist_prop[index]; - } - } - } - return 0; -} -#line 143 "cssproperties.gperf" - -static const char * const propertyList[] = { -"", -"background-color", -"background-image", -"background-repeat", -"background-attachment", -"background-position", -"background-position-x", -"background-position-y", -"-khtml-background-clip", -"-khtml-background-origin", -"-khtml-background-size", -"border-collapse", -"border-spacing", -"-khtml-border-horizontal-spacing", -"-khtml-border-vertical-spacing", -"border-top-color", -"border-right-color", -"border-bottom-color", -"border-left-color", -"border-top-style", -"border-right-style", -"border-bottom-style", -"border-left-style", -"border-top-width", -"border-right-width", -"border-bottom-width", -"border-left-width", -"bottom", -"caption-side", -"clear", -"clip", -"color", -"content", -"counter-increment", -"counter-reset", -"cursor", -"direction", -"display", -"empty-cells", -"float", -"font-family", -"font-size", -"font-style", -"font-variant", -"font-weight", -"height", -"left", -"letter-spacing", -"line-height", -"list-style-image", -"list-style-position", -"list-style-type", -"margin-top", -"margin-right", -"margin-bottom", -"margin-left", -"-khtml-margin-start", -"-khtml-marquee", -"-khtml-marquee-direction", -"-khtml-marquee-increment", -"-khtml-marquee-repetition", -"-khtml-marquee-speed", -"-khtml-marquee-style", -"max-height", -"max-width", -"min-height", -"min-width", -"orphans", -"opacity", -"outline-color", -"outline-offset", -"outline-style", -"outline-width", -"overflow", -"overflow-x", -"overflow-y", -"padding-top", -"padding-right", -"padding-bottom", -"padding-left", -"-khtml-padding-start", -"page-break-after", -"page-break-before", -"page-break-inside", -"position", -"quotes", -"right", -"size", -"table-layout", -"text-align", -"text-decoration", -"text-indent", -"text-overflow", -"text-shadow", -"text-transform", -"top", -"unicode-bidi", -"vertical-align", -"visibility", -"white-space", -"widows", -"width", -"word-wrap", -"word-spacing", -"z-index", -"background", -"border", -"border-color", -"border-style", -"border-top", -"border-right", -"border-bottom", -"border-left", -"border-width", -"box-sizing", -"font", -"list-style", -"margin", -"outline", -"padding", -"scrollbar-base-color", -"scrollbar-face-color", -"scrollbar-shadow-color", -"scrollbar-highlight-color", -"scrollbar-3dlight-color", -"scrollbar-darkshadow-color", -"scrollbar-track-color", -"scrollbar-arrow-color", -"-khtml-flow-mode", -"-khtml-user-input", - 0 -}; -DOMString getPropertyName(unsigned short id) -{ - if(id >= CSS_PROP_TOTAL || id == 0) - return DOMString(); - else - return DOMString(propertyList[id]); -} - diff --git a/khtml/css/cssproperties.h b/khtml/css/cssproperties.h deleted file mode 100644 index be92d93d4..000000000 --- a/khtml/css/cssproperties.h +++ /dev/null @@ -1,144 +0,0 @@ -/* This file is automatically generated from cssproperties.in by makeprop, do not edit */ -/* Copyright 1998 W. Bastian */ - -#ifndef CSSPROPERTIES_H -#define CSSPROPERTIES_H - -DOM::DOMString getPropertyName(unsigned short id) KDE_NO_EXPORT; - -#define CSS_PROP_INVALID 0 -#define CSS_PROP_MIN 1 -#define CSS_PROP_BACKGROUND_COLOR 1 -#define CSS_PROP_BACKGROUND_IMAGE 2 -#define CSS_PROP_BACKGROUND_REPEAT 3 -#define CSS_PROP_BACKGROUND_ATTACHMENT 4 -#define CSS_PROP_BACKGROUND_POSITION 5 -#define CSS_PROP_BACKGROUND_POSITION_X 6 -#define CSS_PROP_BACKGROUND_POSITION_Y 7 -#define CSS_PROP__KHTML_BACKGROUND_CLIP 8 -#define CSS_PROP__KHTML_BACKGROUND_ORIGIN 9 -#define CSS_PROP__KHTML_BACKGROUND_SIZE 10 -#define CSS_PROP_BORDER_COLLAPSE 11 -#define CSS_PROP_BORDER_SPACING 12 -#define CSS_PROP__KHTML_BORDER_HORIZONTAL_SPACING 13 -#define CSS_PROP__KHTML_BORDER_VERTICAL_SPACING 14 -#define CSS_PROP_BORDER_TOP_COLOR 15 -#define CSS_PROP_BORDER_RIGHT_COLOR 16 -#define CSS_PROP_BORDER_BOTTOM_COLOR 17 -#define CSS_PROP_BORDER_LEFT_COLOR 18 -#define CSS_PROP_BORDER_TOP_STYLE 19 -#define CSS_PROP_BORDER_RIGHT_STYLE 20 -#define CSS_PROP_BORDER_BOTTOM_STYLE 21 -#define CSS_PROP_BORDER_LEFT_STYLE 22 -#define CSS_PROP_BORDER_TOP_WIDTH 23 -#define CSS_PROP_BORDER_RIGHT_WIDTH 24 -#define CSS_PROP_BORDER_BOTTOM_WIDTH 25 -#define CSS_PROP_BORDER_LEFT_WIDTH 26 -#define CSS_PROP_BOTTOM 27 -#define CSS_PROP_CAPTION_SIDE 28 -#define CSS_PROP_CLEAR 29 -#define CSS_PROP_CLIP 30 -#define CSS_PROP_COLOR 31 -#define CSS_PROP_CONTENT 32 -#define CSS_PROP_COUNTER_INCREMENT 33 -#define CSS_PROP_COUNTER_RESET 34 -#define CSS_PROP_CURSOR 35 -#define CSS_PROP_DIRECTION 36 -#define CSS_PROP_DISPLAY 37 -#define CSS_PROP_EMPTY_CELLS 38 -#define CSS_PROP_FLOAT 39 -#define CSS_PROP_FONT_FAMILY 40 -#define CSS_PROP_FONT_SIZE 41 -#define CSS_PROP_FONT_STYLE 42 -#define CSS_PROP_FONT_VARIANT 43 -#define CSS_PROP_FONT_WEIGHT 44 -#define CSS_PROP_HEIGHT 45 -#define CSS_PROP_LEFT 46 -#define CSS_PROP_LETTER_SPACING 47 -#define CSS_PROP_LINE_HEIGHT 48 -#define CSS_PROP_LIST_STYLE_IMAGE 49 -#define CSS_PROP_LIST_STYLE_POSITION 50 -#define CSS_PROP_LIST_STYLE_TYPE 51 -#define CSS_PROP_MARGIN_TOP 52 -#define CSS_PROP_MARGIN_RIGHT 53 -#define CSS_PROP_MARGIN_BOTTOM 54 -#define CSS_PROP_MARGIN_LEFT 55 -#define CSS_PROP__KHTML_MARGIN_START 56 -#define CSS_PROP__KHTML_MARQUEE 57 -#define CSS_PROP__KHTML_MARQUEE_DIRECTION 58 -#define CSS_PROP__KHTML_MARQUEE_INCREMENT 59 -#define CSS_PROP__KHTML_MARQUEE_REPETITION 60 -#define CSS_PROP__KHTML_MARQUEE_SPEED 61 -#define CSS_PROP__KHTML_MARQUEE_STYLE 62 -#define CSS_PROP_MAX_HEIGHT 63 -#define CSS_PROP_MAX_WIDTH 64 -#define CSS_PROP_MIN_HEIGHT 65 -#define CSS_PROP_MIN_WIDTH 66 -#define CSS_PROP_ORPHANS 67 -#define CSS_PROP_OPACITY 68 -#define CSS_PROP_OUTLINE_COLOR 69 -#define CSS_PROP_OUTLINE_OFFSET 70 -#define CSS_PROP_OUTLINE_STYLE 71 -#define CSS_PROP_OUTLINE_WIDTH 72 -#define CSS_PROP_OVERFLOW 73 -#define CSS_PROP_OVERFLOW_X 74 -#define CSS_PROP_OVERFLOW_Y 75 -#define CSS_PROP_PADDING_TOP 76 -#define CSS_PROP_PADDING_RIGHT 77 -#define CSS_PROP_PADDING_BOTTOM 78 -#define CSS_PROP_PADDING_LEFT 79 -#define CSS_PROP__KHTML_PADDING_START 80 -#define CSS_PROP_PAGE_BREAK_AFTER 81 -#define CSS_PROP_PAGE_BREAK_BEFORE 82 -#define CSS_PROP_PAGE_BREAK_INSIDE 83 -#define CSS_PROP_POSITION 84 -#define CSS_PROP_QUOTES 85 -#define CSS_PROP_RIGHT 86 -#define CSS_PROP_SIZE 87 -#define CSS_PROP_TABLE_LAYOUT 88 -#define CSS_PROP_TEXT_ALIGN 89 -#define CSS_PROP_TEXT_DECORATION 90 -#define CSS_PROP_TEXT_INDENT 91 -#define CSS_PROP_TEXT_OVERFLOW 92 -#define CSS_PROP_TEXT_SHADOW 93 -#define CSS_PROP_TEXT_TRANSFORM 94 -#define CSS_PROP_TOP 95 -#define CSS_PROP_UNICODE_BIDI 96 -#define CSS_PROP_VERTICAL_ALIGN 97 -#define CSS_PROP_VISIBILITY 98 -#define CSS_PROP_WHITE_SPACE 99 -#define CSS_PROP_WIDOWS 100 -#define CSS_PROP_WIDTH 101 -#define CSS_PROP_WORD_WRAP 102 -#define CSS_PROP_WORD_SPACING 103 -#define CSS_PROP_Z_INDEX 104 -#define CSS_PROP_BACKGROUND 105 -#define CSS_PROP_BORDER 106 -#define CSS_PROP_BORDER_COLOR 107 -#define CSS_PROP_BORDER_STYLE 108 -#define CSS_PROP_BORDER_TOP 109 -#define CSS_PROP_BORDER_RIGHT 110 -#define CSS_PROP_BORDER_BOTTOM 111 -#define CSS_PROP_BORDER_LEFT 112 -#define CSS_PROP_BORDER_WIDTH 113 -#define CSS_PROP_BOX_SIZING 114 -#define CSS_PROP_FONT 115 -#define CSS_PROP_LIST_STYLE 116 -#define CSS_PROP_MARGIN 117 -#define CSS_PROP_OUTLINE 118 -#define CSS_PROP_PADDING 119 -#define CSS_PROP_SCROLLBAR_BASE_COLOR 120 -#define CSS_PROP_SCROLLBAR_FACE_COLOR 121 -#define CSS_PROP_SCROLLBAR_SHADOW_COLOR 122 -#define CSS_PROP_SCROLLBAR_HIGHLIGHT_COLOR 123 -#define CSS_PROP_SCROLLBAR_3DLIGHT_COLOR 124 -#define CSS_PROP_SCROLLBAR_DARKSHADOW_COLOR 125 -#define CSS_PROP_SCROLLBAR_TRACK_COLOR 126 -#define CSS_PROP_SCROLLBAR_ARROW_COLOR 127 -#define CSS_PROP__KHTML_FLOW_MODE 128 -#define CSS_PROP__KHTML_USER_INPUT 129 - -#define CSS_PROP_MAX CSS_PROP_Z_INDEX -#define CSS_PROP_TOTAL 130 -#endif - diff --git a/khtml/css/cssproperties.in b/khtml/css/cssproperties.in deleted file mode 100644 index 251eb5e3d..000000000 --- a/khtml/css/cssproperties.in +++ /dev/null @@ -1,148 +0,0 @@ -# -# all valid CSS2 properties. -# -# aural properties are commented out, as we don't support them anyway. -# -# some properties are used in khtml, but are not part of CSS. They are used to get -# HTML4 compatibility in the rendering engine. -# -# Mircosoft extensions are documented here: -# http://msdn.microsoft.com/workshop/author/css/reference/attributes.asp -# -# CSS_PROP_BACKGROUND_COLOR: -# -background-color -background-image -background-repeat -background-attachment -background-position -# IE Extensions -background-position-x -background-position-y -# CSS3 Extensions --khtml-background-clip --khtml-background-origin --khtml-background-size - -border-collapse -border-spacing --khtml-border-horizontal-spacing --khtml-border-vertical-spacing -border-top-color -border-right-color -border-bottom-color -border-left-color -border-top-style -border-right-style -border-bottom-style -border-left-style -border-top-width -border-right-width -border-bottom-width -border-left-width -bottom -caption-side -clear -clip -color -content -counter-increment -counter-reset -cursor -direction -display -empty-cells -float -font-family -font-size -font-style -font-variant -font-weight -height -left -letter-spacing -line-height -list-style-image -list-style-position -list-style-type -margin-top -margin-right -margin-bottom -margin-left --khtml-margin-start --khtml-marquee --khtml-marquee-direction --khtml-marquee-increment --khtml-marquee-repetition --khtml-marquee-speed --khtml-marquee-style -max-height -max-width -min-height -min-width -orphans -opacity -outline-color -outline-offset -outline-style -outline-width -overflow -overflow-x -overflow-y -padding-top -padding-right -padding-bottom -padding-left --khtml-padding-start -#page -page-break-after -page-break-before -page-break-inside -position -quotes -right -size -table-layout -text-align -text-decoration -text-indent -text-overflow -text-shadow -text-transform -top -unicode-bidi -vertical-align -visibility -white-space -widows -width -word-wrap -word-spacing -z-index -background -border -border-color -border-style -border-top -border-right -border-bottom -border-left -border-width -box-sizing -font -list-style -margin -outline -padding -# some more IE extensions -scrollbar-base-color -scrollbar-face-color -scrollbar-shadow-color -scrollbar-highlight-color -scrollbar-3dlight-color -scrollbar-darkshadow-color -scrollbar-track-color -scrollbar-arrow-color -# khtml internals --khtml-flow-mode --khtml-user-input diff --git a/khtml/css/cssstyleselector.cpp b/khtml/css/cssstyleselector.cpp deleted file mode 100644 index 3f4a8cd26..000000000 --- a/khtml/css/cssstyleselector.cpp +++ /dev/null @@ -1,4217 +0,0 @@ -/** - * This file is part of the CSS implementation for KDE. - * - * Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org) - * (C) 2003-2004 Apple Computer, Inc. - * (C) 2004-2006 Allan Sandfeld Jensen (kde@carewolf.com) - * (C) 2004 Germain Garand (germain@ebooksfrance.org) - * (C) 2005, 2006 Apple Computer, Inc. - * - * 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. - */ - -#include "css/cssstyleselector.h" -#include "rendering/render_style.h" -#include "css/css_stylesheetimpl.h" -#include "css/css_ruleimpl.h" -#include "css/css_valueimpl.h" -#include "css/csshelper.h" -#include "rendering/render_object.h" -#include "html/html_documentimpl.h" -#include "html/html_elementimpl.h" -#include "xml/dom_elementimpl.h" -#include "xml/dom_restyler.h" -#include "dom/css_rule.h" -#include "dom/css_value.h" -#include "khtml_factory.h" -#include "khtmlpart_p.h" -using namespace khtml; -using namespace DOM; - -#include "css/cssproperties.h" -#include "css/cssvalues.h" - -#include "misc/khtmllayout.h" -#include "khtml_settings.h" -#include "misc/htmlhashes.h" -#include "misc/helper.h" -#include "misc/loader.h" - -#include "rendering/font.h" - -#include "khtmlview.h" -#include "khtml_part.h" - -#include <kstandarddirs.h> -#include <kcharsets.h> -#include <kglobal.h> -#include <kconfig.h> -#include <tqfile.h> -#include <tqvaluelist.h> -#include <tqstring.h> -#include <tqtooltip.h> -#include <kdebug.h> -#include <kurl.h> -#include <assert.h> -#include <tqpaintdevicemetrics.h> -#include <stdlib.h> - -#define HANDLE_INHERIT(prop, Prop) \ -if (isInherit) \ -{\ - style->set##Prop(parentStyle->prop());\ - return;\ -} - -#define HANDLE_INHERIT_AND_INITIAL(prop, Prop) \ -HANDLE_INHERIT(prop, Prop) \ -else if (isInitial) \ -{\ - style->set##Prop(RenderStyle::initial##Prop());\ - return;\ -} - -#define HANDLE_INHERIT_AND_INITIAL_WITH_VALUE(prop, Prop, Value) \ -HANDLE_INHERIT(prop, Prop) \ -else if (isInitial) \ -{\ - style->set##Prop(RenderStyle::initial##Value());\ - return;\ -} - -#define HANDLE_BACKGROUND_INHERIT_AND_INITIAL(prop, Prop) \ -if (isInherit) { \ - BackgroundLayer* currChild = style->accessBackgroundLayers(); \ - BackgroundLayer* prevChild = 0; \ - const BackgroundLayer* currParent = parentStyle->backgroundLayers(); \ - while (currParent && currParent->is##Prop##Set()) { \ - if (!currChild) { \ - /* Need to make a new layer.*/ \ - currChild = new BackgroundLayer(); \ - prevChild->setNext(currChild); \ - } \ - currChild->set##Prop(currParent->prop()); \ - prevChild = currChild; \ - currChild = prevChild->next(); \ - currParent = currParent->next(); \ - } \ - \ - while (currChild) { \ - /* Reset any remaining layers to not have the property set. */ \ - currChild->clear##Prop(); \ - currChild = currChild->next(); \ - } \ - return; \ -} \ -if (isInitial) { \ - BackgroundLayer* currChild = style->accessBackgroundLayers(); \ - currChild->set##Prop(RenderStyle::initial##Prop()); \ - for (currChild = currChild->next(); currChild; currChild = currChild->next()) \ - currChild->clear##Prop(); \ - return; \ -} - -#define HANDLE_BACKGROUND_VALUE(prop, Prop, value) { \ -HANDLE_BACKGROUND_INHERIT_AND_INITIAL(prop, Prop) \ -if (!value->isPrimitiveValue() && !value->isValueList()) \ - return; \ -BackgroundLayer* currChild = style->accessBackgroundLayers(); \ -BackgroundLayer* prevChild = 0; \ -if (value->isPrimitiveValue()) { \ - map##Prop(currChild, value); \ - currChild = currChild->next(); \ -} \ -else { \ - /* Walk each value and put it into a layer, creating new layers as needed. */ \ - CSSValueListImpl* valueList = static_cast<CSSValueListImpl*>(value); \ - for (unsigned int i = 0; i < valueList->length(); i++) { \ - if (!currChild) { \ - /* Need to make a new layer to hold this value */ \ - currChild = new BackgroundLayer(); \ - prevChild->setNext(currChild); \ - } \ - map##Prop(currChild, valueList->item(i)); \ - prevChild = currChild; \ - currChild = currChild->next(); \ - } \ -} \ -while (currChild) { \ - /* Reset all remaining layers to not have the property set. */ \ - currChild->clear##Prop(); \ - currChild = currChild->next(); \ -} } - -#define HANDLE_INHERIT_COND(propID, prop, Prop) \ -if (id == propID) \ -{\ - style->set##Prop(parentStyle->prop());\ - return;\ -} - -#define HANDLE_INITIAL_COND(propID, Prop) \ -if (id == propID) \ -{\ - style->set##Prop(RenderStyle::initial##Prop());\ - return;\ -} - -#define HANDLE_INITIAL_COND_WITH_VALUE(propID, Prop, Value) \ -if (id == propID) \ -{\ - style->set##Prop(RenderStyle::initial##Value());\ - return;\ -} - -#define HANDLE_INHERIT_ON_INHERITED_PROPERTY(prop, Prop) \ -if (isInherit) \ -{\ - style->set##Prop(parentStyle->prop());\ - return;\ -} - -#define HANDLE_INITIAL(prop, Prop) \ -if (isInitial) \ -{\ - style->set##Prop(RenderStyle::initial##Prop());\ - return;\ -} - -#define HANDLE_INITIAL_AND_INHERIT_ON_INHERITED_PROPERTY(prop, Prop) \ -HANDLE_INITIAL(prop, Prop) \ -else \ -HANDLE_INHERIT_ON_INHERITED_PROPERTY(prop, Prop) - - -namespace khtml { - -CSSStyleSelectorList *CSSStyleSelector::s_defaultStyle; -CSSStyleSelectorList *CSSStyleSelector::s_defaultQuirksStyle; -CSSStyleSelectorList *CSSStyleSelector::s_defaultPrintStyle; -CSSStyleSheetImpl *CSSStyleSelector::s_defaultSheet; -RenderStyle* CSSStyleSelector::styleNotYetAvailable; -CSSStyleSheetImpl *CSSStyleSelector::s_quirksSheet; - -enum PseudoState { PseudoUnknown, PseudoNone, PseudoLink, PseudoVisited}; -static PseudoState pseudoState; - - -CSSStyleSelector::CSSStyleSelector( DocumentImpl* doc, TQString userStyleSheet, StyleSheetListImpl *styleSheets, - const KURL &url, bool _strictParsing ) -{ - KHTMLView* view = doc->view(); - - init(view ? view->part()->settings() : 0, doc); - - strictParsing = _strictParsing; - m_medium = view ? view->mediaType() : TQString("all"); - - selectors = 0; - selectorCache = 0; - properties = 0; - userStyle = 0; - userSheet = 0; - paintDeviceMetrics = doc->paintDeviceMetrics(); - - if(paintDeviceMetrics) // this may be null, not everyone uses khtmlview (Niko) - computeFontSizes(paintDeviceMetrics, view ? view->part()->zoomFactor() : 100); - - if ( !userStyleSheet.isEmpty() ) { - userSheet = new DOM::CSSStyleSheetImpl(doc); - userSheet->parseString( DOMString( userStyleSheet ) ); - - userStyle = new CSSStyleSelectorList(); - userStyle->append( userSheet, m_medium ); - } - - // add stylesheets from document - authorStyle = new CSSStyleSelectorList(); - - - TQPtrListIterator<StyleSheetImpl> it( styleSheets->styleSheets ); - for ( ; it.current(); ++it ) { - if ( it.current()->isCSSStyleSheet() && !it.current()->disabled()) { - authorStyle->append( static_cast<CSSStyleSheetImpl*>( it.current() ), m_medium ); - } - } - - buildLists(); - - //kdDebug( 6080 ) << "number of style sheets in document " << authorStyleSheets.count() << endl; - //kdDebug( 6080 ) << "CSSStyleSelector: author style has " << authorStyle->count() << " elements"<< endl; - - KURL u = url; - - u.setQuery( TQString::null ); - u.setRef( TQString::null ); - encodedurl.file = u.url(); - int pos = encodedurl.file.findRev('/'); - encodedurl.path = encodedurl.file; - if ( pos > 0 ) { - encodedurl.path.truncate( pos ); - encodedurl.path += '/'; - } - u.setPath( TQString::null ); - encodedurl.host = u.url(); - - //kdDebug() << "CSSStyleSelector::CSSStyleSelector encoded url " << encodedurl.path << endl; -} - -CSSStyleSelector::CSSStyleSelector( CSSStyleSheetImpl *sheet ) -{ - init(0L, 0L); - - KHTMLView *view = sheet->doc()->view(); - m_medium = view ? view->mediaType() : "screen"; - - authorStyle = new CSSStyleSelectorList(); - authorStyle->append( sheet, m_medium ); -} - -void CSSStyleSelector::init(const KHTMLSettings* _settings, DocumentImpl* doc) -{ - element = 0; - settings = _settings; - paintDeviceMetrics = 0; - propsToApply = (CSSOrderedProperty **)malloc(128*sizeof(CSSOrderedProperty *)); - pseudoProps = (CSSOrderedProperty **)malloc(128*sizeof(CSSOrderedProperty *)); - propsToApplySize = 128; - pseudoPropsSize = 128; - if(!s_defaultStyle) loadDefaultStyle(settings, doc); - - defaultStyle = s_defaultStyle; - defaultPrintStyle = s_defaultPrintStyle; - defaultQuirksStyle = s_defaultQuirksStyle; -} - -CSSStyleSelector::~CSSStyleSelector() -{ - clearLists(); - delete authorStyle; - delete userStyle; - delete userSheet; - free(propsToApply); - free(pseudoProps); -} - -void CSSStyleSelector::addSheet( CSSStyleSheetImpl *sheet ) -{ - KHTMLView *view = sheet->doc()->view(); - m_medium = view ? view->mediaType() : "screen"; - authorStyle->append( sheet, m_medium ); -} - -void CSSStyleSelector::loadDefaultStyle(const KHTMLSettings *s, DocumentImpl *doc) -{ - if(s_defaultStyle) return; - - { - TQFile f(locate( "data", "khtml/css/html4.css" ) ); - f.open(IO_ReadOnly); - - TQCString file( f.size()+1 ); - int readbytes = f.readBlock( file.data(), f.size() ); - f.close(); - if ( readbytes >= 0 ) - file[readbytes] = '\0'; - - TQString style = TQString::fromLatin1( file.data() ); - if(s) - style += s->settingsToCSS(); - DOMString str(style); - - s_defaultSheet = new DOM::CSSStyleSheetImpl(doc); - s_defaultSheet->parseString( str ); - - // Collect only strict-mode rules. - s_defaultStyle = new CSSStyleSelectorList(); - s_defaultStyle->append( s_defaultSheet, "screen" ); - - s_defaultPrintStyle = new CSSStyleSelectorList(); - s_defaultPrintStyle->append( s_defaultSheet, "print" ); - } - { - TQFile f(locate( "data", "khtml/css/quirks.css" ) ); - f.open(IO_ReadOnly); - - TQCString file( f.size()+1 ); - int readbytes = f.readBlock( file.data(), f.size() ); - f.close(); - if ( readbytes >= 0 ) - file[readbytes] = '\0'; - - TQString style = TQString::fromLatin1( file.data() ); - DOMString str(style); - - s_quirksSheet = new DOM::CSSStyleSheetImpl(doc); - s_quirksSheet->parseString( str ); - - // Collect only quirks-mode rules. - s_defaultQuirksStyle = new CSSStyleSelectorList(); - s_defaultQuirksStyle->append( s_quirksSheet, "screen" ); - } - - //kdDebug() << "CSSStyleSelector: default style has " << defaultStyle->count() << " elements"<< endl; -} - -void CSSStyleSelector::clear() -{ - delete s_defaultStyle; - delete s_defaultQuirksStyle; - delete s_defaultPrintStyle; - delete s_defaultSheet; - delete styleNotYetAvailable; - s_defaultStyle = 0; - s_defaultQuirksStyle = 0; - s_defaultPrintStyle = 0; - s_defaultSheet = 0; - styleNotYetAvailable = 0; -} - -void CSSStyleSelector::reparseConfiguration() -{ - // nice leak, but best we can do right now. hopefully its only rare. - s_defaultStyle = 0; - s_defaultQuirksStyle = 0; - s_defaultPrintStyle = 0; - s_defaultSheet = 0; -} - -#define MAXFONTSIZES 8 - -void CSSStyleSelector::computeFontSizes(TQPaintDeviceMetrics* paintDeviceMetrics, int zoomFactor) -{ - computeFontSizesFor(paintDeviceMetrics, zoomFactor, m_fontSizes, false); - computeFontSizesFor(paintDeviceMetrics, zoomFactor, m_fixedFontSizes, true); -} - -void CSSStyleSelector::computeFontSizesFor(TQPaintDeviceMetrics* paintDeviceMetrics, int zoomFactor, TQValueVector<int>& fontSizes, bool isFixed) -{ -#ifdef APPLE_CHANGES - // We don't want to scale the settings by the dpi. - const float toPix = 1; -#else - Q_UNUSED( isFixed ); - - // ### get rid of float / double - float toPix = paintDeviceMetrics->logicalDpiY()/72.; - if (toPix < 96./72.) toPix = 96./72.; -#endif // ######### fix isFixed code again. - - fontSizes.resize( MAXFONTSIZES ); - float scale = 1.0; - static const float fontFactors[] = {3./5., 3./4., 8./9., 1., 6./5., 3./2., 2., 3.}; - static const float smallFontFactors[] = {3./4., 5./6., 8./9., 1., 6./5., 3./2., 2., 3.}; - float mediumFontSize, minFontSize, factor; - if (!khtml::printpainter) { - scale *= zoomFactor / 100.0; -#ifdef APPLE_CHANGES - if (isFixed) - mediumFontSize = settings->mediumFixedFontSize() * toPix; - else -#endif - mediumFontSize = settings->mediumFontSize() * toPix; - minFontSize = settings->minFontSize() * toPix; - } - else { - // ## depending on something / configurable ? - mediumFontSize = 12; - minFontSize = 6; - } - const float* factors = scale*mediumFontSize >= 12.5 ? fontFactors : smallFontFactors; - for ( int i = 0; i < MAXFONTSIZES; i++ ) { - factor = scale*factors[i]; - fontSizes[i] = int(KMAX( mediumFontSize*factor +.5f, minFontSize)); - //kdDebug( 6080 ) << "index: " << i << " factor: " << factors[i] << " font pix size: " << int(KMAX( mediumFontSize*factor +.5f, minFontSize)) << endl; - } -} - -#undef MAXFONTSIZES - -static inline void bubbleSort( CSSOrderedProperty **b, CSSOrderedProperty **e ) -{ - while( b < e ) { - bool swapped = false; - CSSOrderedProperty **y = e+1; - CSSOrderedProperty **x = e; - CSSOrderedProperty **swappedPos = 0; - do { - if ( !((**(--x)) < (**(--y))) ) { - swapped = true; - swappedPos = x; - CSSOrderedProperty *tmp = *y; - *y = *x; - *x = tmp; - } - } while( x != b ); - if ( !swapped ) break; - b = swappedPos + 1; - } -} - -RenderStyle *CSSStyleSelector::styleForElement(ElementImpl *e) -{ - if (!e->getDocument()->haveStylesheetsLoaded() || !e->getDocument()->view()) { - if (!styleNotYetAvailable) { - styleNotYetAvailable = new RenderStyle(); - styleNotYetAvailable->setDisplay(NONE); - styleNotYetAvailable->ref(); - } - return styleNotYetAvailable; - } - - // set some variables we will need - pseudoState = PseudoUnknown; - - element = e; - parentNode = e->parentNode(); - parentStyle = ( parentNode && parentNode->renderer()) ? parentNode->renderer()->style() : 0; - view = element->getDocument()->view(); - part = view->part(); - settings = part->settings(); - paintDeviceMetrics = element->getDocument()->paintDeviceMetrics(); - - // reset dynamic DOM dependencies - e->getDocument()->dynamicDomRestyler().resetDependencies(e); - - style = new RenderStyle(); - if( parentStyle ) - style->inheritFrom( parentStyle ); - else - parentStyle = style; - - unsigned int numPropsToApply = 0; - unsigned int numPseudoProps = 0; - - // try to sort out most style rules as early as possible. - TQ_UINT16 cssTagId = localNamePart(element->id()); - int smatch = 0; - int schecked = 0; - - for ( unsigned int i = 0; i < selectors_size; i++ ) { - TQ_UINT16 tag = localNamePart(selectors[i]->tag); - if ( cssTagId == tag || tag == anyLocalName ) { - ++schecked; - - checkSelector( i, e ); - - if ( selectorCache[i].state == Applies ) { - ++smatch; - -// tqDebug("adding property" ); - for ( unsigned int p = 0; p < selectorCache[i].props_size; p += 2 ) - for ( unsigned int j = 0; j < (unsigned int )selectorCache[i].props[p+1]; ++j ) { - if (numPropsToApply >= propsToApplySize ) { - propsToApplySize *= 2; - propsToApply = (CSSOrderedProperty **)realloc( propsToApply, propsToApplySize*sizeof( CSSOrderedProperty * ) ); - } - propsToApply[numPropsToApply++] = properties[selectorCache[i].props[p]+j]; - } - } else if ( selectorCache[i].state == AppliesPseudo ) { - for ( unsigned int p = 0; p < selectorCache[i].props_size; p += 2 ) - for ( unsigned int j = 0; j < (unsigned int) selectorCache[i].props[p+1]; ++j ) { - if (numPseudoProps >= pseudoPropsSize ) { - pseudoPropsSize *= 2; - pseudoProps = (CSSOrderedProperty **)realloc( pseudoProps, pseudoPropsSize*sizeof( CSSOrderedProperty * ) ); - } - pseudoProps[numPseudoProps++] = properties[selectorCache[i].props[p]+j]; - properties[selectorCache[i].props[p]+j]->pseudoId = (RenderStyle::PseudoId) selectors[i]->pseudoId; - } - } - } - else - selectorCache[i].state = Invalid; - - } - - // inline style declarations, after all others. non css hints - // count as author rules, and come before all other style sheets, see hack in append() - numPropsToApply = addInlineDeclarations( e, e->m_styleDecls, numPropsToApply ); - -// tqDebug( "styleForElement( %s )", e->tagName().string().latin1() ); -// tqDebug( "%d selectors, %d checked, %d match, %d properties ( of %d )", -// selectors_size, schecked, smatch, numPropsToApply, properties_size ); - - bubbleSort( propsToApply, propsToApply+numPropsToApply-1 ); - bubbleSort( pseudoProps, pseudoProps+numPseudoProps-1 ); - - // we can't apply style rules without a view() and a part. This - // tends to happen on delayed destruction of widget Renderobjects - if ( part ) { - fontDirty = false; - - if (numPropsToApply ) { - CSSStyleSelector::style = style; - for (unsigned int i = 0; i < numPropsToApply; ++i) { - if ( fontDirty && propsToApply[i]->priority >= (1 << 30) ) { - // we are past the font properties, time to update to the - // correct font -#ifdef APPLE_CHANGES - checkForGenericFamilyChange(style, parentStyle); -#endif - CSSStyleSelector::style->htmlFont().update( paintDeviceMetrics ); - fontDirty = false; - } - DOM::CSSProperty *prop = propsToApply[i]->prop; -// if (prop->m_id == CSS_PROP__KONQ_USER_INPUT) kdDebug(6080) << "El: "<<e->nodeName().string() << " user-input: "<<((CSSPrimitiveValueImpl *)prop->value())->getIdent() << endl; -// if (prop->m_id == CSS_PROP_TEXT_TRANSFORM) kdDebug(6080) << "El: "<<e->nodeName().string() << endl; - applyRule( prop->m_id, prop->value() ); - } - if ( fontDirty ) { -#ifdef APPLE_CHANGES - checkForGenericFamilyChange(style, parentStyle); -#endif - CSSStyleSelector::style->htmlFont().update( paintDeviceMetrics ); - } - } - - // Clean up our style object's display and text decorations (among other fixups). - adjustRenderStyle(style, e); - - if ( numPseudoProps ) { - fontDirty = false; - //tqDebug("%d applying %d pseudo props", e->cssTagId(), pseudoProps->count() ); - for (unsigned int i = 0; i < numPseudoProps; ++i) { - if ( fontDirty && pseudoProps[i]->priority >= (1 << 30) ) { - // we are past the font properties, time to update to the - // correct font - //We have to do this for all pseudo styles - RenderStyle *pseudoStyle = style->pseudoStyle; - while ( pseudoStyle ) { - pseudoStyle->htmlFont().update( paintDeviceMetrics ); - pseudoStyle = pseudoStyle->pseudoStyle; - } - fontDirty = false; - } - - RenderStyle *pseudoStyle; - pseudoStyle = style->getPseudoStyle(pseudoProps[i]->pseudoId); - if (!pseudoStyle) - { - pseudoStyle = style->addPseudoStyle(pseudoProps[i]->pseudoId); - if (pseudoStyle) - pseudoStyle->inheritFrom( style ); - } - - RenderStyle* oldStyle = style; - RenderStyle* oldParentStyle = parentStyle; - parentStyle = style; - style = pseudoStyle; - if ( pseudoStyle ) { - DOM::CSSProperty *prop = pseudoProps[i]->prop; - applyRule( prop->m_id, prop->value() ); - } - style = oldStyle; - parentStyle = oldParentStyle; - } - - if ( fontDirty ) { - RenderStyle *pseudoStyle = style->pseudoStyle; - while ( pseudoStyle ) { - pseudoStyle->htmlFont().update( paintDeviceMetrics ); - pseudoStyle = pseudoStyle->pseudoStyle; - } - } - } - } - - // Now adjust all our pseudo-styles. - RenderStyle *pseudoStyle = style->pseudoStyle; - while (pseudoStyle) { - adjustRenderStyle(pseudoStyle, 0); - pseudoStyle = pseudoStyle->pseudoStyle; - } - - // Now return the style. - return style; -} - -void CSSStyleSelector::adjustRenderStyle(RenderStyle* style, DOM::ElementImpl *e) -{ - // Cache our original display. - style->setOriginalDisplay(style->display()); - - if (style->display() != NONE) { - // If we have a <td> that specifies a float property, in quirks mode we just drop the float - // property. - // Sites also commonly use display:inline/block on <td>s and <table>s. In quirks mode we force - // these tags to retain their display types. - if (!strictParsing && e) { - if (e->id() == ID_TD) { - style->setDisplay(TABLE_CELL); - style->setFloating(FNONE); - } - else if (e->id() == ID_TABLE) - style->setDisplay(style->isDisplayInlineType() ? INLINE_TABLE : TABLE); - } - - // Table headers with a text-align of auto will change the text-align to center. - if (e && e->id() == ID_TH && style->textAlign() == TAAUTO) - style->setTextAlign(CENTER); - - // Mutate the display to BLOCK or TABLE for certain cases, e.g., if someone attempts to - // position or float an inline, compact, or run-in. Cache the original display, since it - // may be needed for positioned elements that have to compute their static normal flow - // positions. We also force inline-level roots to be block-level. - if (style->display() != BLOCK && style->display() != TABLE /*&& style->display() != BOX*/ && - (style->position() == ABSOLUTE || style->position() == FIXED || style->floating() != FNONE || - (e && e->getDocument()->documentElement() == e))) { - if (style->display() == INLINE_TABLE) - style->setDisplay(TABLE); -// else if (style->display() == INLINE_BOX) -// style->setDisplay(BOX); - else if (style->display() == LIST_ITEM) { - // It is a WinIE bug that floated list items lose their bullets, so we'll emulate the quirk, - // but only in quirks mode. - if (!strictParsing && style->floating() != FNONE) - style->setDisplay(BLOCK); - } - else - style->setDisplay(BLOCK); - } - - // After performing the display mutation, check our position. We do not honor position:relative on - // table rows and some other table displays. This is undefined behaviour in CSS2.1 (cf. 9.3.1) - if (style->position() == RELATIVE) { - switch (style->display()) { - case TABLE_ROW_GROUP: - case TABLE_HEADER_GROUP: - case TABLE_FOOTER_GROUP: - case TABLE_ROW: - style->setPosition(STATIC); - default: - break; - } - } - } - - // Frames and framesets never honor position:relative or position:absolute. This is necessary to - // fix a crash where a site tries to position these objects. - if ( e ) { - // ignore display: none for <frame> - if ( e->id() == ID_FRAME ) { - style->setPosition( STATIC ); - style->setDisplay( BLOCK ); - } - else if ( e->id() == ID_FRAMESET ) { - style->setPosition( STATIC ); - } - } - - // Finally update our text decorations in effect, but don't allow text-decoration to percolate through - // tables, inline blocks, inline tables, or run-ins. - if (style->display() == TABLE || style->display() == INLINE_TABLE || style->display() == RUN_IN - || style->display() == INLINE_BLOCK /*|| style->display() == INLINE_BOX*/) - style->setTextDecorationsInEffect(style->textDecoration()); - else - style->addToTextDecorationsInEffect(style->textDecoration()); - - // If either overflow value is not visible, change to auto. - if (style->overflowX() == OMARQUEE && style->overflowY() != OMARQUEE) - style->setOverflowY(OMARQUEE); - else if (style->overflowY() == OMARQUEE && style->overflowX() != OMARQUEE) - style->setOverflowX(OMARQUEE); - else if (style->overflowX() == OVISIBLE && style->overflowY() != OVISIBLE) - style->setOverflowX(OAUTO); - else if (style->overflowY() == OVISIBLE && style->overflowX() != OVISIBLE) - style->setOverflowY(OAUTO); - - // Table rows, sections and the table itself will support overflow:hidden and will ignore scroll/auto. - // FIXME: Eventually table sections will support auto and scroll. - if (style->display() == TABLE || style->display() == INLINE_TABLE || - style->display() == TABLE_ROW_GROUP || style->display() == TABLE_ROW) { - if (style->overflowX() != OVISIBLE && style->overflowX() != OHIDDEN) - style->setOverflowX(OVISIBLE); - if (style->overflowY() != OVISIBLE && style->overflowY() != OHIDDEN) - style->setOverflowY(OVISIBLE); - } - - // Cull out any useless layers and also repeat patterns into additional layers. - style->adjustBackgroundLayers(); - - // Only use slow repaints if we actually have a background image. - // FIXME: We only need to invalidate the fixed regions when scrolling. It's total overkill to - // prevent the entire view from blitting on a scroll. - if (style->hasFixedBackgroundImage() && view) - view->useSlowRepaints(); -} - -unsigned int CSSStyleSelector::addInlineDeclarations(DOM::ElementImpl* e, - DOM::CSSStyleDeclarationImpl *decl, - unsigned int numProps) -{ - CSSStyleDeclarationImpl* addDecls = 0; -#ifdef APPLE_CHANGES - if (e->id() == ID_TD || e->id() == ID_TH) // For now only TableCellElement implements the - addDecls = e->getAdditionalStyleDecls(); // virtual function for shared cell rules. -#else - Q_UNUSED( e ); -#endif - - if (!decl && !addDecls) - return numProps; - - TQPtrList<CSSProperty>* values = decl ? decl->values() : 0; - TQPtrList<CSSProperty>* addValues = addDecls ? addDecls->values() : 0; - if (!values && !addValues) - return numProps; - - int firstLen = values ? values->count() : 0; - int secondLen = addValues ? addValues->count() : 0; - int totalLen = firstLen + secondLen; - - if (inlineProps.size() < (uint)totalLen) - inlineProps.resize(totalLen + 1); - - if (numProps + totalLen >= propsToApplySize ) { - propsToApplySize += propsToApplySize; - propsToApply = (CSSOrderedProperty **)realloc( propsToApply, propsToApplySize*sizeof( CSSOrderedProperty * ) ); - } - - CSSOrderedProperty *array = (CSSOrderedProperty *)inlineProps.data(); - for(int i = 0; i < totalLen; i++) - { - if (i == firstLen) - values = addValues; - - CSSProperty *prop = values->at(i >= firstLen ? i - firstLen : i); - Source source = Inline; - - if( prop->m_important ) source = InlineImportant; - if( prop->nonCSSHint ) source = NonCSSHint; - - bool first; - // give special priority to font-xxx, color properties - switch(prop->m_id) - { - case CSS_PROP_FONT_STYLE: - case CSS_PROP_FONT_SIZE: - case CSS_PROP_FONT_WEIGHT: - case CSS_PROP_FONT_FAMILY: - case CSS_PROP_FONT_VARIANT: - case CSS_PROP_FONT: - case CSS_PROP_COLOR: - case CSS_PROP_DIRECTION: - case CSS_PROP_DISPLAY: - // these have to be applied first, because other properties use the computed - // values of these properties. - first = true; - break; - default: - first = false; - break; - } - - array->prop = prop; - array->pseudoId = RenderStyle::NOPSEUDO; - array->selector = 0; - array->position = i; - array->priority = (!first << 30) | (source << 24); - propsToApply[numProps++] = array++; - } - return numProps; -} - -// modified version of the one in kurl.cpp -static void cleanpath(TQString &path) -{ - int pos; - while ( (pos = path.find( "/../" )) != -1 ) { - int prev = 0; - if ( pos > 0 ) - prev = path.findRev( "/", pos -1 ); - // don't remove the host, i.e. http://foo.org/../foo.html - if (prev < 0 || (prev > 3 && path.findRev("://", prev-1) == prev-2)) - path.remove( pos, 3); - else - // matching directory found ? - path.remove( prev, pos- prev + 3 ); - } - pos = 0; - - // Don't remove "//" from an anchor identifier. -rjw - // Set refPos to -2 to mean "I haven't looked for the anchor yet". - // We don't want to waste a function call on the search for the anchor - // in the vast majority of cases where there is no "//" in the path. - int refPos = -2; - while ( (pos = path.find( "//", pos )) != -1) { - if (refPos == -2) - refPos = path.find("#", 0); - if (refPos > 0 && pos >= refPos) - break; - - if ( pos == 0 || path[pos-1] != ':' ) - path.remove( pos, 1 ); - else - pos += 2; - } - while ( (pos = path.find( "/./" )) != -1) - path.remove( pos, 2 ); - //kdDebug() << "checkPseudoState " << path << endl; -} - -static PseudoState checkPseudoState( const CSSStyleSelector::Encodedurl& encodedurl, DOM::ElementImpl *e ) -{ - if( e->id() != ID_A ) { - return PseudoNone; - } - DOMString attr = e->getAttribute(ATTR_HREF); - if( attr.isNull() ) { - return PseudoNone; - } - TQConstString cu(attr.unicode(), attr.length()); - TQString u = cu.string(); - if ( !u.contains("://") ) { - if ( u[0] == '/' ) - u = encodedurl.host + u; - else if ( u[0] == '#' ) - u = encodedurl.file + u; - else - u = encodedurl.path + u; - cleanpath( u ); - } - //completeURL( attr.string() ); - bool contains = KHTMLFactory::vLinks()->contains( u ); - if ( !contains && u.contains('/')==2 ) - contains = KHTMLFactory::vLinks()->contains( u+'/' ); - return contains ? PseudoVisited : PseudoLink; -} - -// a helper function for parsing nth-arguments -static bool matchNth(int count, const TQString& nth) -{ - if (nth.isEmpty()) return false; - int a = 0; - int b = 0; - if (nth == "odd") { - a = 2; - b = 1; - } - else if (nth == "even") { - a = 2; - b = 0; - } - else { - int n = nth.find('n'); - if (n != -1) { - if (nth[0] == '-') - if (n==1) - a = -1; - else - a = nth.mid(1,n-1).toInt(); - else - if (n==0) - a = 1; - else - a = nth.left(n).toInt(); - - int p = nth.find('+'); - if (p != -1) - b = nth.mid(p+1).toInt(); - else { - p = nth.find('-'); - b = -nth.mid(p+1).toInt(); - } - } - else { - b = nth.toInt(); - } - } - if (a == 0) - return count == b; - else if (a > 0) - if (count < b) - return false; - else - return (count - b) % a == 0; - else if (a < 0) { - if (count > b) - return false; - else - return (b - count) % (-a) == 0; - } - return false; -} - - -// Recursively work the combinator to compute static attribute dependency, similar to -//structure of checkSubSelectors -static void precomputeAttributeDependenciesAux(DOM::DocumentImpl* doc, DOM::CSSSelector* sel, bool isAncestor, bool isSubject) -{ - if(sel->attr) - { - // Sets up global dependencies of attributes - if (isSubject) - doc->dynamicDomRestyler().addDependency(sel->attr, PersonalDependency); - else if (isAncestor) - doc->dynamicDomRestyler().addDependency(sel->attr, AncestorDependency); - else - doc->dynamicDomRestyler().addDependency(sel->attr, PredecessorDependency); - } - if(sel->match == CSSSelector::PseudoClass) - { - switch (sel->pseudoType()) { - case CSSSelector::PseudoNot: - precomputeAttributeDependenciesAux(doc, sel->simpleSelector, isAncestor, true); - break; - default: - break; - } - } - CSSSelector::Relation relation = sel->relation; - sel = sel->tagHistory; - if (!sel) return; - - switch(relation) - { - case CSSSelector::Descendant: - case CSSSelector::Child: - precomputeAttributeDependenciesAux(doc, sel, true, false); - break; - case CSSSelector::IndirectAdjacent: - case CSSSelector::DirectAdjacent: - precomputeAttributeDependenciesAux(doc, sel, false, false); - break; - case CSSSelector::SubSelector: - precomputeAttributeDependenciesAux(doc, sel, isAncestor, isSubject); - break; - } -} - -void CSSStyleSelector::precomputeAttributeDependencies(DOM::DocumentImpl* doc, DOM::CSSSelector* sel) -{ - precomputeAttributeDependenciesAux(doc, sel, false, true); -} - -// Recursive check of selectors and combinators -// It can return 3 different values: -// * SelectorMatches - the selector is match for the node e -// * SelectorFailsLocal - the selector fails for the node e -// * SelectorFails - the selector fails for e and any sibling or ancestor of e -CSSStyleSelector::SelectorMatch CSSStyleSelector::checkSelector(DOM::CSSSelector *sel, DOM::ElementImpl *e, bool isAncestor, bool isSubSelector) -{ - // The simple selector has to match - if(!checkSimpleSelector(sel, e, isAncestor, isSubSelector)) return SelectorFailsLocal; - - // The rest of the selectors has to match - CSSSelector::Relation relation = sel->relation; - - // Prepare next sel - sel = sel->tagHistory; - if (!sel) return SelectorMatches; - - switch(relation) { - case CSSSelector::Descendant: - { - while(true) - { - DOM::NodeImpl* n = e->parentNode(); - if(!n || !n->isElementNode()) return SelectorFails; - e = static_cast<ElementImpl *>(n); - SelectorMatch match = checkSelector(sel, e, true); - if (match != SelectorFailsLocal) - return match; - } - break; - } - case CSSSelector::Child: - { - DOM::NodeImpl* n = e->parentNode(); - if (!strictParsing) - while (n && n->implicitNode()) n = n->parentNode(); - if(!n || !n->isElementNode()) return SelectorFails; - e = static_cast<ElementImpl *>(n); - return checkSelector(sel, e, true); - } - case CSSSelector::IndirectAdjacent: - { - // Sibling selectors always generate structural dependencies - // because newly inserted element might fullfill them. - if (e->parentNode()->isElementNode()) - addDependency(StructuralDependency, static_cast<ElementImpl*>(e->parentNode())); - while(true) - { - DOM::NodeImpl* n = e->previousSibling(); - while( n && !n->isElementNode() ) - n = n->previousSibling(); - if( !n ) return SelectorFailsLocal; - e = static_cast<ElementImpl *>(n); - SelectorMatch match = checkSelector(sel, e, false); - if (match != SelectorFailsLocal) - return match; - }; - break; - } - case CSSSelector::DirectAdjacent: - { - if (e->parentNode()->isElementNode()) - addDependency(StructuralDependency, static_cast<ElementImpl*>(e->parentNode())); - DOM::NodeImpl* n = e->previousSibling(); - while( n && !n->isElementNode() ) - n = n->previousSibling(); - if( !n ) return SelectorFailsLocal; - e = static_cast<ElementImpl *>(n); - return checkSelector(sel, e, false); - } - case CSSSelector::SubSelector: - return checkSelector(sel, e, isAncestor, true); - } - assert(false); // never reached - return SelectorFails; -} - -void CSSStyleSelector::checkSelector(int selIndex, DOM::ElementImpl * e) -{ - assert(e == element); // yes, actually - - dynamicPseudo = RenderStyle::NOPSEUDO; - - selectorCache[ selIndex ].state = Invalid; - CSSSelector *sel = selectors[ selIndex ]; - - // Check the selector - SelectorMatch match = checkSelector(sel, e, true); - if(match != SelectorMatches) return; - - if ( dynamicPseudo != RenderStyle::NOPSEUDO ) { - selectorCache[selIndex].state = AppliesPseudo; - selectors[ selIndex ]->pseudoId = dynamicPseudo; - } else - selectorCache[ selIndex ].state = Applies; - //tqDebug( "selector %d applies", selIndex ); - //selectors[ selIndex ]->print(); - return; -} - -void CSSStyleSelector::addDependency(StructuralDependencyType dependencyType, ElementImpl* dependency) -{ - element->getDocument()->dynamicDomRestyler().addDependency(element, dependency, dependencyType); -} - -bool CSSStyleSelector::checkSimpleSelector(DOM::CSSSelector *sel, DOM::ElementImpl *e, bool isAncestor, bool isSubSelector) -{ - if(!e) - return false; - - if (sel->tag != anyQName) { - int eltID = e->id(); - TQ_UINT16 localName = localNamePart(eltID); - TQ_UINT16 ns = namespacePart(eltID); - TQ_UINT16 selLocalName = localNamePart(sel->tag); - TQ_UINT16 selNS = namespacePart(sel->tag); - - if (localName <= ID_LAST_TAG && ns == defaultNamespace) { - assert(e->isHTMLElement()); - ns = xhtmlNamespace; - } - - // match on local - if (selLocalName != anyLocalName && localName != selLocalName) return false; - // match on namespace - if (selNS != anyNamespace && ns != selNS) return false; - } - - if(sel->attr) - { - DOMStringImpl* value = e->getAttributeImpl(sel->attr); - if(!value) return false; // attribute is not set - - // attributes are always case-sensitive in XHTML - // attributes are sometimes case-sensitive in HTML - // we only treat id and class selectors as case-sensitive in HTML strict - // for compatibility reasons - bool caseSensitive = e->getDocument()->htmlMode() == DocumentImpl::XHtml; - bool caseSensitive_alt = strictParsing || caseSensitive; - caseSensitive |= (sel->attr > ATTR_LAST_CI_ATTR); - - switch(sel->match) - { - case CSSSelector::Set: - // True if we make it this far - break; - case CSSSelector::Id: - caseSensitive = caseSensitive_alt; - // no break - case CSSSelector::Exact: - return (caseSensitive && !strcmp(sel->value, value)) || - (!caseSensitive && !strcasecmp(sel->value, value)); - break; - case CSSSelector::Class: - caseSensitive = caseSensitive_alt; - // no break - case CSSSelector::List: - { - int sel_len = sel->value.length(); - int val_len = value->length(); - // Be smart compare on length first - if (sel_len > val_len) return false; - // Selector string may not contain spaces - if ((sel->attr != ATTR_CLASS || e->hasClassList()) && sel->value.find(' ') != -1) return false; - if (sel_len == val_len) - return (caseSensitive && !strcmp(sel->value, value)) || - (!caseSensitive && !strcasecmp(sel->value, value)); - // else the value is longer and can be a list - if ( sel->match == CSSSelector::Class && !e->hasClassList() ) return false; - - TQChar* sel_uc = sel->value.unicode(); - TQChar* val_uc = value->unicode(); - - TQConstString sel_str(sel_uc, sel_len); - TQConstString val_str(val_uc, val_len); - - int pos = 0; - for ( ;; ) { - pos = val_str.string().find(sel_str.string(), pos, caseSensitive); - if ( pos == -1 ) return false; - if ( pos == 0 || val_uc[pos-1].isSpace() ) { - int endpos = pos + sel_len; - if ( endpos >= val_len || val_uc[endpos].isSpace() ) - break; // We have a match. - } - ++pos; - } - break; - } - case CSSSelector::Contain: - { - //kdDebug( 6080 ) << "checking for contains match" << endl; - TQConstString val_str(value->unicode(), value->length()); - TQConstString sel_str(sel->value.unicode(), sel->value.length()); - return val_str.string().contains(sel_str.string(), caseSensitive); - } - case CSSSelector::Begin: - { - //kdDebug( 6080 ) << "checking for beginswith match" << endl; - TQConstString val_str(value->unicode(), value->length()); - TQConstString sel_str(sel->value.unicode(), sel->value.length()); - return val_str.string().startsWith(sel_str.string(), caseSensitive); - } - case CSSSelector::End: - { - //kdDebug( 6080 ) << "checking for endswith match" << endl; - TQConstString val_str(value->unicode(), value->length()); - TQConstString sel_str(sel->value.unicode(), sel->value.length()); - return val_str.string().endsWith(sel_str.string(), caseSensitive); - } - case CSSSelector::Hyphen: - { - //kdDebug( 6080 ) << "checking for hyphen match" << endl; - TQConstString val_str(value->unicode(), value->length()); - TQConstString sel_str(sel->value.unicode(), sel->value.length()); - const TQString& str = val_str.string(); - const TQString& selStr = sel_str.string(); - if(str.length() < selStr.length()) return false; - // Check if str begins with selStr: - if(str.find(selStr, 0, caseSensitive) != 0) return false; - // It does. Check for exact match or following '-': - if(str.length() != selStr.length() - && str[selStr.length()] != '-') return false; - break; - } - case CSSSelector::PseudoClass: - case CSSSelector::PseudoElement: - case CSSSelector::None: - break; - } - } - - if(sel->match == CSSSelector::PseudoClass || sel->match == CSSSelector::PseudoElement) - { - switch (sel->pseudoType()) { - // Pseudo classes: - case CSSSelector::PseudoEmpty: - addDependency(BackwardsStructuralDependency, e); - // If e is not closed yet we don't know the number of children - if (!e->closed()) { - return false; - } - if (!e->firstChild()) - return true; - else { - // check for empty text nodes - NodeImpl *t = e->firstChild(); - - while (t && t->isTextNode() && static_cast<TextImpl*>(t)->length() == 0) t = t->nextSibling(); - - if (t == 0) - return true; - else - return false; - } - break; - case CSSSelector::PseudoFirstChild: { - // first-child matches the first child that is an element! - if (e->parentNode() && e->parentNode()->isElementNode()) { - // Handle dynamic DOM changes - addDependency(StructuralDependency, static_cast<ElementImpl*>(e->parentNode())); - DOM::NodeImpl* n = e->previousSibling(); - while ( n && !n->isElementNode() ) - n = n->previousSibling(); - if ( !n ) - return true; - } - break; - } - case CSSSelector::PseudoLastChild: { - // last-child matches the last child that is an element! - if (e->parentNode() && e->parentNode()->isElementNode()) { - // Handle unfinished parsing and dynamic DOM changes - addDependency(BackwardsStructuralDependency, static_cast<ElementImpl*>(e->parentNode())); - if (!e->parentNode()->closed()) { -// kdDebug(6080) << e->nodeName().string() << "::last-child: Parent unclosed" << endl; - return false; - } - DOM::NodeImpl* n = e->nextSibling(); - while ( n && !n->isElementNode() ) - n = n->nextSibling(); - if ( !n ) - return true; - } - break; - } - case CSSSelector::PseudoOnlyChild: { - // If both first-child and last-child apply, then only-child applies. - if (e->parentNode() && e->parentNode()->isElementNode()) { - addDependency(BackwardsStructuralDependency, static_cast<ElementImpl*>(e->parentNode())); - if (!e->parentNode()->closed()) { - return false; - } - DOM::NodeImpl* n = e->previousSibling(); - while ( n && !n->isElementNode() ) - n = n->previousSibling(); - if ( !n ) { - n = e->nextSibling(); - while ( n && !n->isElementNode() ) - n = n->nextSibling(); - if ( !n ) - return true; - } - } - break; - } - case CSSSelector::PseudoNthChild: { - // nth-child matches every (a*n+b)th element! - if (e->parentNode() && e->parentNode()->isElementNode()) { - addDependency(StructuralDependency, static_cast<ElementImpl*>(e->parentNode())); - int count = 1; - DOM::NodeImpl* n = e->previousSibling(); - while ( n ) { - if (n->isElementNode()) count++; - n = n->previousSibling(); - } -// kdDebug(6080) << "NthChild " << count << "=" << sel->string_arg << endl; - if (matchNth(count,sel->string_arg.string())) - return true; - } - break; - } - case CSSSelector::PseudoNthLastChild: { - if (e->parentNode() && e->parentNode()->isElementNode()) { - addDependency(BackwardsStructuralDependency, static_cast<ElementImpl*>(e->parentNode())); - if (!e->parentNode()->closed()) { - return false; - } - int count = 1; - DOM::NodeImpl* n = e->nextSibling(); - while ( n ) { - if (n->isElementNode()) count++; - n = n->nextSibling(); - } -// kdDebug(6080) << "NthLastChild " << count << "=" << sel->string_arg << endl; - if (matchNth(count,sel->string_arg.string())) - return true; - } - break; - } - case CSSSelector::PseudoFirstOfType: { - // first-of-type matches the first element of its type! - if (e->parentNode() && e->parentNode()->isElementNode()) { - addDependency(StructuralDependency, static_cast<ElementImpl*>(e->parentNode())); - const DOMString& type = e->tagName(); - DOM::NodeImpl* n = e->previousSibling(); - while ( n ) { - if (n->isElementNode()) - if (static_cast<ElementImpl*>(n)->tagName() == type) break; - n = n->previousSibling(); - } - if ( !n ) - return true; - } - break; - } - case CSSSelector::PseudoLastOfType: { - // last-child matches the last child that is an element! - if (e->parentNode() && e->parentNode()->isElementNode()) { - addDependency(BackwardsStructuralDependency, static_cast<ElementImpl*>(e->parentNode())); - if (!e->parentNode()->closed()) { - return false; - } - const DOMString& type = e->tagName(); - DOM::NodeImpl* n = e->nextSibling(); - while ( n ) { - if (n->isElementNode()) - if (static_cast<ElementImpl*>(n)->tagName() == type) break; - n = n->nextSibling(); - } - if ( !n ) - return true; - } - break; - } - case CSSSelector::PseudoOnlyOfType: { - // If both first-of-type and last-of-type apply, then only-of-type applies. - if (e->parentNode() && e->parentNode()->isElementNode()) { - addDependency(BackwardsStructuralDependency, static_cast<ElementImpl*>(e->parentNode())); - if (!e->parentNode()->closed()) { - return false; - } - const DOMString& type = e->tagName(); - DOM::NodeImpl* n = e->previousSibling(); - while ( n && !(n->isElementNode() && static_cast<ElementImpl*>(n)->tagName() == type)) - n = n->previousSibling(); - if ( !n ) { - n = e->nextSibling(); - while ( n && !(n->isElementNode() && static_cast<ElementImpl*>(n)->tagName() == type)) - n = n->nextSibling(); - if ( !n ) - return true; - } - } - break; - } - case CSSSelector::PseudoNthOfType: { - // nth-of-type matches every (a*n+b)th element of this type! - if (e->parentNode() && e->parentNode()->isElementNode()) { - addDependency(StructuralDependency, static_cast<ElementImpl*>(e->parentNode())); - int count = 1; - const DOMString& type = e->tagName(); - DOM::NodeImpl* n = e->previousSibling(); - while ( n ) { - if (n->isElementNode() && static_cast<ElementImpl*>(n)->tagName() == type) count++; - n = n->previousSibling(); - } -// kdDebug(6080) << "NthOfType " << count << "=" << sel->string_arg << endl; - if (matchNth(count,sel->string_arg.string())) - return true; - } - break; - } - case CSSSelector::PseudoNthLastOfType: { - if (e->parentNode() && e->parentNode()->isElementNode()) { - addDependency(BackwardsStructuralDependency, static_cast<ElementImpl*>(e->parentNode())); - if (!e->parentNode()->closed()) { - return false; - } - int count = 1; - const DOMString& type = e->tagName(); - DOM::NodeImpl* n = e->nextSibling(); - while ( n ) { - if (n->isElementNode() && static_cast<ElementImpl*>(n)->tagName() == type) count++; - n = n->nextSibling(); - } -// kdDebug(6080) << "NthLastOfType " << count << "=" << sel->string_arg << endl; - if (matchNth(count,sel->string_arg.string())) - return true; - } - break; - } - case CSSSelector::PseudoTarget: - if (e == e->getDocument()->getCSSTarget()) - return true; - break; - case CSSSelector::PseudoRoot: - if (e == e->getDocument()->documentElement()) - return true; - break; - case CSSSelector::PseudoLink: - if (e == element) { - // cache pseudoState - if ( pseudoState == PseudoUnknown ) - pseudoState = checkPseudoState( encodedurl, e ); - if ( pseudoState == PseudoLink ) - return true; - } else - return checkPseudoState( encodedurl, e ) == PseudoLink; - break; - case CSSSelector::PseudoVisited: - if (e == element) { - // cache pseudoState - if ( pseudoState == PseudoUnknown ) - pseudoState = checkPseudoState( encodedurl, e ); - if ( pseudoState == PseudoVisited ) - return true; - } else - return checkPseudoState( encodedurl, e ) == PseudoVisited; - break; - case CSSSelector::PseudoHover: { - // If we're in quirks mode, then *:hover should only match focusable elements. - if (strictParsing || (sel->tag != anyQName) || isSubSelector || e->isFocusable() ) { - addDependency(HoverDependency, e); - - if (e->hovered()) - return true; - } - break; - } - case CSSSelector::PseudoActive: - // If we're in quirks mode, then *:active should only match focusable elements - if (strictParsing || (sel->tag != anyQName) || isSubSelector || e->isFocusable()) { - addDependency(ActiveDependency, e); - - if (e->active()) - return true; - } - break; - case CSSSelector::PseudoFocus: - if (e != element && e->isFocusable()) { - // *:focus is a default style, no need to track it. - addDependency(OtherStateDependency, e); - } - if (e->focused()) return true; - break; - case CSSSelector::PseudoLang: { - // Set dynamic attribute dependency - if (e == element) { - e->getDocument()->dynamicDomRestyler().addDependency(ATTR_LANG, PersonalDependency); - e->getDocument()->dynamicDomRestyler().addDependency(ATTR_LANG, AncestorDependency); - } - else if (isAncestor) - e->getDocument()->dynamicDomRestyler().addDependency(ATTR_LANG, AncestorDependency); - else - e->getDocument()->dynamicDomRestyler().addDependency(ATTR_LANG, PredecessorDependency); - // ### check xml:lang attribute in XML and XHTML documents - DOMString value = e->getAttribute(ATTR_LANG); - // The LANG attribute is inherited like a property - NodeImpl *n = e->parent();; - while (n && value.isEmpty()) { - if (n->isElementNode()) { - value = static_cast<ElementImpl*>(n)->getAttribute(ATTR_LANG); - } else - if (n->isDocumentNode()) { - value = static_cast<DocumentImpl*>(n)->contentLanguage(); - } - n = n->parent(); - } - if (value.isEmpty()) return false; - - TQString langAttr = value.string(); - TQString langSel = sel->string_arg.string(); - - if(langAttr.length() < langSel.length()) return false; - - langAttr = langAttr.lower(); - langSel = langSel.lower(); -// kdDebug(6080) << ":lang " << langAttr << "=" << langSel << "?" << endl; - return (langAttr == langSel || langAttr.startsWith(langSel+"-")); - } - case CSSSelector::PseudoNot: { - // check the simple selector - for (CSSSelector* subSel = sel->simpleSelector; subSel; - subSel = subSel->tagHistory) { - // :not cannot nest. I don't really know why this is a restriction in CSS3, - // but it is, so let's honor it. - if (subSel->simpleSelector) - break; - if (!checkSimpleSelector(subSel, e, isAncestor, true)) - return true; - } - break; - } - case CSSSelector::PseudoEnabled: { - if (e->isGenericFormElement()) { - addDependency(OtherStateDependency, e); - HTMLGenericFormElementImpl *form; - form = static_cast<HTMLGenericFormElementImpl*>(e); - return !form->disabled(); - } - break; - } - case CSSSelector::PseudoDisabled: { - if (e->isGenericFormElement()) { - addDependency(OtherStateDependency, e); - HTMLGenericFormElementImpl *form; - form = static_cast<HTMLGenericFormElementImpl*>(e); - return form->disabled(); - } - break; - } - case CSSSelector::PseudoContains: { - if (e->isHTMLElement()) { - addDependency(BackwardsStructuralDependency, e); - if (!e->closed()) { - return false; - } - HTMLElementImpl *elem; - elem = static_cast<HTMLElementImpl*>(e); - DOMString s = elem->innerText(); - TQString selStr = sel->string_arg.string(); -// kdDebug(6080) << ":contains(\"" << selStr << "\")" << " on \"" << s << "\"" << endl; - return s.string().contains(selStr); - } - break; - } - case CSSSelector::PseudoChecked: { - if (e->isHTMLElement() && e->id() == ID_INPUT) { - addDependency(OtherStateDependency, e); - return (static_cast<HTMLInputElementImpl*>(e)->checked()); - } - return false; - } - case CSSSelector::PseudoIndeterminate: { -#if 0 - if (e->isHTMLElement() && e->id() == ID_INPUT) { - return (static_cast<HTMLInputElementImpl*>(e)->indeterminate() && - !static_cast<HTMLInputElementImpl*>(e)->checked()); - } - return false; -#endif - } - case CSSSelector::PseudoOther: - break; - - // Pseudo-elements: - case CSSSelector::PseudoFirstLine: - case CSSSelector::PseudoFirstLetter: - case CSSSelector::PseudoSelection: - case CSSSelector::PseudoBefore: - case CSSSelector::PseudoAfter: - case CSSSelector::PseudoMarker: - case CSSSelector::PseudoReplaced: - // Pseudo-elements can only apply to subject - if ( e == element ) { - // Pseudo-elements has to be the last sub-selector on subject - if (sel->tagHistory && sel->relation == CSSSelector::SubSelector) return false; - - assert(dynamicPseudo == RenderStyle::NOPSEUDO); - - switch (sel->pseudoType()) { - case CSSSelector::PseudoFirstLine: - dynamicPseudo = RenderStyle::FIRST_LINE; - break; - case CSSSelector::PseudoFirstLetter: - dynamicPseudo = RenderStyle::FIRST_LETTER; - break; - case CSSSelector::PseudoSelection: - dynamicPseudo = RenderStyle::SELECTION; - break; - case CSSSelector::PseudoBefore: - dynamicPseudo = RenderStyle::BEFORE; - break; - case CSSSelector::PseudoAfter: - dynamicPseudo = RenderStyle::AFTER; - break; - case CSSSelector::PseudoMarker: - dynamicPseudo = RenderStyle::MARKER; - break; - case CSSSelector::PseudoReplaced: - dynamicPseudo = RenderStyle::REPLACED; - break; - default: - assert(false); - } - return true; - } - break; - case CSSSelector::PseudoNotParsed: - assert(false); - break; - } - return false; - } - // ### add the rest of the checks... - return true; -} - -void CSSStyleSelector::clearLists() -{ - delete [] selectors; - if ( selectorCache ) { - for ( unsigned int i = 0; i < selectors_size; i++ ) - delete [] selectorCache[i].props; - - delete [] selectorCache; - } - if ( properties ) { - CSSOrderedProperty **prop = properties; - while ( *prop ) { - delete (*prop); - prop++; - } - delete [] properties; - } - selectors = 0; - properties = 0; - selectorCache = 0; -} - - -void CSSStyleSelector::buildLists() -{ - clearLists(); - // collect all selectors and Properties in lists. Then transfer them to the array for faster lookup. - - TQPtrList<CSSSelector> selectorList; - CSSOrderedPropertyList propertyList; - - if(m_medium == "print" && defaultPrintStyle) - defaultPrintStyle->collect( &selectorList, &propertyList, Default, - Default ); - else if(defaultStyle) defaultStyle->collect( &selectorList, &propertyList, - Default, Default ); - - if (!strictParsing && defaultQuirksStyle) - defaultQuirksStyle->collect( &selectorList, &propertyList, Default, Default ); - - if(userStyle) userStyle->collect(&selectorList, &propertyList, User, UserImportant ); - if(authorStyle) authorStyle->collect(&selectorList, &propertyList, Author, AuthorImportant ); - - selectors_size = selectorList.count(); - selectors = new CSSSelector *[selectors_size]; - CSSSelector *s = selectorList.first(); - CSSSelector **sel = selectors; - while ( s ) { - *sel = s; - s = selectorList.next(); - ++sel; - } - - selectorCache = new SelectorCache[selectors_size]; - for ( unsigned int i = 0; i < selectors_size; i++ ) { - selectorCache[i].state = Unknown; - selectorCache[i].props_size = 0; - selectorCache[i].props = 0; - } - - // presort properties. Should make the sort() calls in styleForElement faster. - propertyList.sort(); - properties_size = propertyList.count() + 1; - properties = new CSSOrderedProperty *[ properties_size ]; - CSSOrderedProperty *p = propertyList.first(); - CSSOrderedProperty **prop = properties; - while ( p ) { - *prop = p; - p = propertyList.next(); - ++prop; - } - *prop = 0; - - unsigned int* offsets = new unsigned int[selectors_size]; - if(properties[0]) - offsets[properties[0]->selector] = 0; - for(unsigned int p = 1; p < properties_size; ++p) { - - if(!properties[p] || (properties[p]->selector != properties[p - 1]->selector)) { - unsigned int sel = properties[p - 1]->selector; - int* newprops = new int[selectorCache[sel].props_size+2]; - for ( unsigned int i=0; i < selectorCache[sel].props_size; i++ ) - newprops[i] = selectorCache[sel].props[i]; - - newprops[selectorCache[sel].props_size] = offsets[sel]; - newprops[selectorCache[sel].props_size+1] = p - offsets[sel]; - delete [] selectorCache[sel].props; - selectorCache[sel].props = newprops; - selectorCache[sel].props_size += 2; - - if(properties[p]) { - sel = properties[p]->selector; - offsets[sel] = p; - } - } - } - delete [] offsets; -} - - -// ---------------------------------------------------------------------- - - -CSSOrderedRule::CSSOrderedRule(DOM::CSSStyleRuleImpl *r, DOM::CSSSelector *s, int _index) -{ - rule = r; - if(rule) r->ref(); - index = _index; - selector = s; -} - -CSSOrderedRule::~CSSOrderedRule() -{ - if(rule) rule->deref(); -} - -// ----------------------------------------------------------------- - -CSSStyleSelectorList::CSSStyleSelectorList() - : TQPtrList<CSSOrderedRule>() -{ - setAutoDelete(true); -} -CSSStyleSelectorList::~CSSStyleSelectorList() -{ -} - -void CSSStyleSelectorList::append( CSSStyleSheetImpl *sheet, - const DOMString &medium ) -{ - if(!sheet || !sheet->isCSSStyleSheet()) return; - - // No media implies "all", but if a medialist exists it must - // contain our current medium - if( sheet->media() && !sheet->media()->contains( medium ) ) - return; // style sheet not applicable for this medium - - int len = sheet->length(); - - for(int i = 0; i< len; i++) - { - StyleBaseImpl *item = sheet->item(i); - if(item->isStyleRule()) - { - CSSStyleRuleImpl *r = static_cast<CSSStyleRuleImpl *>(item); - TQPtrList<CSSSelector> *s = r->selector(); - for(int j = 0; j < (int)s->count(); j++) - { - CSSOrderedRule *rule = new CSSOrderedRule(r, s->at(j), count()); - TQPtrList<CSSOrderedRule>::append(rule); - //kdDebug( 6080 ) << "appending StyleRule!" << endl; - } - } - else if(item->isImportRule()) - { - CSSImportRuleImpl *import = static_cast<CSSImportRuleImpl *>(item); - - //kdDebug( 6080 ) << "@import: Media: " - // << import->media()->mediaText().string() << endl; - - if( !import->media() || import->media()->contains( medium ) ) - { - CSSStyleSheetImpl *importedSheet = import->styleSheet(); - append( importedSheet, medium ); - } - } - else if( item->isMediaRule() ) - { - CSSMediaRuleImpl *r = static_cast<CSSMediaRuleImpl *>( item ); - CSSRuleListImpl *rules = r->cssRules(); - - //DOMString mediaText = media->mediaText(); - //kdDebug( 6080 ) << "@media: Media: " - // << r->media()->mediaText().string() << endl; - - if( ( !r->media() || r->media()->contains( medium ) ) && rules) - { - // Traverse child elements of the @import rule. Since - // many elements are not allowed as child we do not use - // a recursive call to append() here - for( unsigned j = 0; j < rules->length(); j++ ) - { - //kdDebug( 6080 ) << "*** Rule #" << j << endl; - - CSSRuleImpl *childItem = rules->item( j ); - if( childItem->isStyleRule() ) - { - // It is a StyleRule, so append it to our list - CSSStyleRuleImpl *styleRule = - static_cast<CSSStyleRuleImpl *>( childItem ); - - TQPtrList<CSSSelector> *s = styleRule->selector(); - for( int j = 0; j < ( int ) s->count(); j++ ) - { - CSSOrderedRule *orderedRule = new CSSOrderedRule( - styleRule, s->at( j ), count() ); - TQPtrList<CSSOrderedRule>::append( orderedRule ); - } - } - else - { - //kdDebug( 6080 ) << "Ignoring child rule of " - // "ImportRule: rule is not a StyleRule!" << endl; - } - } // for rules - } // if rules - else - { - //kdDebug( 6080 ) << "CSSMediaRule not rendered: " - // << "rule empty or wrong medium!" << endl; - } - } - // ### include other rules - } -} - - -void CSSStyleSelectorList::collect( TQPtrList<CSSSelector> *selectorList, CSSOrderedPropertyList *propList, - Source regular, Source important ) -{ - CSSOrderedRule *r = first(); - while( r ) { - CSSSelector *sel = selectorList->first(); - int selectorNum = 0; - while( sel ) { - if ( *sel == *(r->selector) ) - break; - sel = selectorList->next(); - selectorNum++; - } - if ( !sel ) - selectorList->append( r->selector ); -// else -// tqDebug("merged one selector"); - propList->append(r->rule->declaration(), selectorNum, r->selector->specificity(), regular, important ); - r = next(); - } -} - -// ------------------------------------------------------------------------- - -int CSSOrderedPropertyList::compareItems(TQPtrCollection::Item i1, TQPtrCollection::Item i2) -{ - int diff = static_cast<CSSOrderedProperty *>(i1)->priority - - static_cast<CSSOrderedProperty *>(i2)->priority; - return diff ? diff : static_cast<CSSOrderedProperty *>(i1)->position - - static_cast<CSSOrderedProperty *>(i2)->position; -} - -void CSSOrderedPropertyList::append(DOM::CSSStyleDeclarationImpl *decl, uint selector, uint specificity, - Source regular, Source important ) -{ - TQPtrList<CSSProperty> *values = decl->values(); - if(!values) return; - int len = values->count(); - for(int i = 0; i < len; i++) - { - CSSProperty *prop = values->at(i); - Source source = regular; - - if( prop->m_important ) source = important; - if( prop->nonCSSHint ) source = NonCSSHint; - - bool first = false; - // give special priority to font-xxx, color properties - switch(prop->m_id) - { - case CSS_PROP_FONT_STYLE: - case CSS_PROP_FONT_SIZE: - case CSS_PROP_FONT_WEIGHT: - case CSS_PROP_FONT_FAMILY: - case CSS_PROP_FONT_VARIANT: - case CSS_PROP_FONT: - case CSS_PROP_COLOR: - case CSS_PROP_DIRECTION: - case CSS_PROP_DISPLAY: - // these have to be applied first, because other properties use the computed - // values of these porperties. - first = true; - break; - default: - break; - } - - TQPtrList<CSSOrderedProperty>::append(new CSSOrderedProperty(prop, selector, - first, source, specificity, - count() )); - } -} - -// ------------------------------------------------------------------------------------- -// this is mostly boring stuff on how to apply a certain rule to the renderstyle... - -static Length convertToLength( CSSPrimitiveValueImpl *primitiveValue, RenderStyle *style, TQPaintDeviceMetrics *paintDeviceMetrics, bool *ok = 0 ) -{ - Length l; - if ( !primitiveValue ) { - if ( ok ) - *ok = false; - } else { - int type = primitiveValue->primitiveType(); - if(type > CSSPrimitiveValue::CSS_PERCENTAGE && type < CSSPrimitiveValue::CSS_DEG) - l = Length(primitiveValue->computeLength(style, paintDeviceMetrics), Fixed); - else if(type == CSSPrimitiveValue::CSS_PERCENTAGE) - l = Length(int(primitiveValue->floatValue(CSSPrimitiveValue::CSS_PERCENTAGE)), Percent); - else if(type == CSSPrimitiveValue::CSS_NUMBER) - l = Length(int(primitiveValue->floatValue(CSSPrimitiveValue::CSS_NUMBER)*100), Percent); - else if (type == CSSPrimitiveValue::CSS_HTML_RELATIVE) - l = Length(int(primitiveValue->floatValue(CSSPrimitiveValue::CSS_HTML_RELATIVE)), Relative); - else if ( ok ) - *ok = false; - } - return l; -} - - -// color mapping code -struct colorMap { - int css_value; - QRgb color; -}; - -static const colorMap cmap[] = { - { CSS_VAL_AQUA, 0xFF00FFFF }, - { CSS_VAL_BLACK, 0xFF000000 }, - { CSS_VAL_BLUE, 0xFF0000FF }, - { CSS_VAL_CRIMSON, 0xFFDC143C }, - { CSS_VAL_FUCHSIA, 0xFFFF00FF }, - { CSS_VAL_GRAY, 0xFF808080 }, - { CSS_VAL_GREEN, 0xFF008000 }, - { CSS_VAL_INDIGO, 0xFF4B0082 }, - { CSS_VAL_LIME, 0xFF00FF00 }, - { CSS_VAL_MAROON, 0xFF800000 }, - { CSS_VAL_NAVY, 0xFF000080 }, - { CSS_VAL_OLIVE, 0xFF808000 }, - { CSS_VAL_ORANGE, 0xFFFFA500 }, - { CSS_VAL_PURPLE, 0xFF800080 }, - { CSS_VAL_RED, 0xFFFF0000 }, - { CSS_VAL_SILVER, 0xFFC0C0C0 }, - { CSS_VAL_TEAL, 0xFF008080 }, - { CSS_VAL_WHITE, 0xFFFFFFFF }, - { CSS_VAL_YELLOW, 0xFFFFFF00 }, - { CSS_VAL_INVERT, invertedColor }, - { CSS_VAL_TRANSPARENT, transparentColor }, - { CSS_VAL_GREY, 0xff808080 }, - { 0, 0 } -}; - -struct uiColors { - int css_value; - const char * configGroup; - const char * configEntry; -TQPalette::ColorGroup group; -TQColorGroup::ColorRole role; -}; - -const char * const wmgroup = "WM"; -const char * const generalgroup = "General"; - -/* Mapping system settings to CSS 2 -* Tried hard to get an appropriate mapping - schlpbch -*/ -static const uiColors uimap[] = { - // Active window border. - { CSS_VAL_ACTIVEBORDER, wmgroup, "background", TQPalette::Active, TQColorGroup::Light }, - // Active window caption. - { CSS_VAL_ACTIVECAPTION, wmgroup, "background", TQPalette::Active, TQColorGroup::Text }, - // Text in caption, size box, and scrollbar arrow box. - { CSS_VAL_CAPTIONTEXT, wmgroup, "activeForeground", TQPalette::Active, TQColorGroup::Text }, - // Face color for three-dimensional display elements. - { CSS_VAL_BUTTONFACE, wmgroup, 0, TQPalette::Inactive, TQColorGroup::Button }, - // Dark shadow for three-dimensional display elements (for edges facing away from the light source). - { CSS_VAL_BUTTONHIGHLIGHT, wmgroup, 0, TQPalette::Inactive, TQColorGroup::Light }, - // Shadow color for three-dimensional display elements. - { CSS_VAL_BUTTONSHADOW, wmgroup, 0, TQPalette::Inactive, TQColorGroup::Shadow }, - // Text on push buttons. - { CSS_VAL_BUTTONTEXT, wmgroup, "buttonForeground", TQPalette::Inactive, TQColorGroup::ButtonText }, - // Dark shadow for three-dimensional display elements. - { CSS_VAL_THREEDDARKSHADOW, wmgroup, 0, TQPalette::Inactive, TQColorGroup::Dark }, - // Face color for three-dimensional display elements. - { CSS_VAL_THREEDFACE, wmgroup, 0, TQPalette::Inactive, TQColorGroup::Button }, - // Highlight color for three-dimensional display elements. - { CSS_VAL_THREEDHIGHLIGHT, wmgroup, 0, TQPalette::Inactive, TQColorGroup::Light }, - // Light color for three-dimensional display elements (for edges facing the light source). - { CSS_VAL_THREEDLIGHTSHADOW, wmgroup, 0, TQPalette::Inactive, TQColorGroup::Midlight }, - // Dark shadow for three-dimensional display elements. - { CSS_VAL_THREEDSHADOW, wmgroup, 0, TQPalette::Inactive, TQColorGroup::Shadow }, - - // Inactive window border. - { CSS_VAL_INACTIVEBORDER, wmgroup, "background", TQPalette::Disabled, TQColorGroup::Background }, - // Inactive window caption. - { CSS_VAL_INACTIVECAPTION, wmgroup, "inactiveBackground", TQPalette::Disabled, TQColorGroup::Background }, - // Color of text in an inactive caption. - { CSS_VAL_INACTIVECAPTIONTEXT, wmgroup, "inactiveForeground", TQPalette::Disabled, TQColorGroup::Text }, - { CSS_VAL_GRAYTEXT, wmgroup, 0, TQPalette::Disabled, TQColorGroup::Text }, - - // Menu background - { CSS_VAL_MENU, generalgroup, "background", TQPalette::Inactive, TQColorGroup::Background }, - // Text in menus - { CSS_VAL_MENUTEXT, generalgroup, "foreground", TQPalette::Inactive, TQColorGroup::Background }, - - // Text of item(s) selected in a control. - { CSS_VAL_HIGHLIGHT, generalgroup, "selectBackground", TQPalette::Inactive, TQColorGroup::Background }, - - // Text of item(s) selected in a control. - { CSS_VAL_HIGHLIGHTTEXT, generalgroup, "selectForeground", TQPalette::Inactive, TQColorGroup::Background }, - - // Background color of multiple document interface. - { CSS_VAL_APPWORKSPACE, generalgroup, "background", TQPalette::Inactive, TQColorGroup::Text }, - - // Scroll bar gray area. - { CSS_VAL_SCROLLBAR, generalgroup, "background", TQPalette::Inactive, TQColorGroup::Background }, - - // Window background. - { CSS_VAL_WINDOW, generalgroup, "windowBackground", TQPalette::Inactive, TQColorGroup::Background }, - // Window frame. - { CSS_VAL_WINDOWFRAME, generalgroup, "windowBackground", TQPalette::Inactive, TQColorGroup::Background }, - // WindowText - { CSS_VAL_WINDOWTEXT, generalgroup, "windowForeground", TQPalette::Inactive, TQColorGroup::Text }, - { CSS_VAL_TEXT, generalgroup, 0, TQPalette::Inactive, TQColorGroup::Text }, - { 0, 0, 0, TQPalette::NColorGroups, TQColorGroup::NColorRoles } -}; - -static TQColor colorForCSSValue( int css_value ) -{ - // try the regular ones first - const colorMap *col = cmap; - while ( col->css_value && col->css_value != css_value ) - ++col; - if ( col->css_value ) - return col->color; - - const uiColors *uicol = uimap; - while ( uicol->css_value && uicol->css_value != css_value ) - ++uicol; -#ifndef APPLE_CHANGES - if ( !uicol->css_value ) { - if ( css_value == CSS_VAL_INFOBACKGROUND ) - return TQToolTip::palette().inactive().background(); - else if ( css_value == CSS_VAL_INFOTEXT ) - return TQToolTip::palette().inactive().foreground(); - else if ( css_value == CSS_VAL_BACKGROUND ) { - TDEConfig bckgrConfig("kdesktoprc", true, false); // No multi-screen support - bckgrConfig.setGroup("Desktop0"); - // Desktop background. - return bckgrConfig.readColorEntry("Color1", &tqApp->palette().disabled().background()); - } - return TQColor(); - } -#endif - - const TQPalette &pal = tqApp->palette(); - TQColor c = pal.color( uicol->group, uicol->role ); -#ifndef APPLE_CHANGES - if ( uicol->configEntry ) { - TDEConfig *globalConfig = TDEGlobal::config(); - globalConfig->setGroup( uicol->configGroup ); - c = globalConfig->readColorEntry( uicol->configEntry, &c ); - } -#endif - - return c; -} - -static inline int nextFontSize(const TQValueVector<int>& a, int v, bool smaller) -{ - // return the nearest bigger/smaller value in scale a, when v is in range. - // otherwise increase/decrease value using a 1.2 fixed ratio - int m, l = 0, r = a.count()-1; - while (l <= r) { - m = (l+r)/2; - if (a[m] == v) - return smaller ? ( m ? a[m-1] : (v*5)/6 ) : - ( m+1<int(a.count()) ? a[m+1] : (v*6)/5 ); - else if (v < a[m]) - r = m-1; - else - l = m+1; - } - if (!l) - return smaller ? (v*5)/6 : kMin((v*6)/5, a[0]); - if (l == int(a.count())) - return smaller ? kMax((v*5)/6, a[r]) : (v*6)/5; - - return smaller ? a[r] : a[l]; -} - -void CSSStyleSelector::applyRule( int id, DOM::CSSValueImpl *value ) -{ -// kdDebug( 6080 ) << "applying property " << getPropertyName(id) << endl; - - CSSPrimitiveValueImpl *primitiveValue = 0; - if(value->isPrimitiveValue()) primitiveValue = static_cast<CSSPrimitiveValueImpl *>(value); - - Length l; - bool apply = false; - - bool isInherit = (parentNode && value->cssValueType() == CSSValue::CSS_INHERIT); - bool isInitial = (value->cssValueType() == CSSValue::CSS_INITIAL) || - (!parentNode && value->cssValueType() == CSSValue::CSS_INHERIT); - - // These properties are used to set the correct margins/padding on RTL lists. - if (id == CSS_PROP__KHTML_MARGIN_START) - id = style->direction() == LTR ? CSS_PROP_MARGIN_LEFT : CSS_PROP_MARGIN_RIGHT; - else if (id == CSS_PROP__KHTML_PADDING_START) - id = style->direction() == LTR ? CSS_PROP_PADDING_LEFT : CSS_PROP_PADDING_RIGHT; - - // What follows is a list that maps the CSS properties into their corresponding front-end - // RenderStyle values. Shorthands (e.g. border, background) occur in this list as well and - // are only hit when mapping "inherit" or "initial" into front-end values. - switch(id) - { -// ident only properties - case CSS_PROP_BACKGROUND_ATTACHMENT: - HANDLE_BACKGROUND_VALUE(backgroundAttachment, BackgroundAttachment, value) - break; - case CSS_PROP__KHTML_BACKGROUND_CLIP: - HANDLE_BACKGROUND_VALUE(backgroundClip, BackgroundClip, value) - break; - case CSS_PROP__KHTML_BACKGROUND_ORIGIN: - HANDLE_BACKGROUND_VALUE(backgroundOrigin, BackgroundOrigin, value) - break; - case CSS_PROP_BACKGROUND_REPEAT: - HANDLE_BACKGROUND_VALUE(backgroundRepeat, BackgroundRepeat, value) - break; - case CSS_PROP__KHTML_BACKGROUND_SIZE: - HANDLE_BACKGROUND_VALUE(backgroundSize, BackgroundSize, value) - break; - case CSS_PROP_BORDER_COLLAPSE: - HANDLE_INHERIT_AND_INITIAL(borderCollapse, BorderCollapse) - if(!primitiveValue) break; - switch(primitiveValue->getIdent()) - { - case CSS_VAL_COLLAPSE: - style->setBorderCollapse(true); - break; - case CSS_VAL_SEPARATE: - style->setBorderCollapse(false); - break; - default: - return; - } - break; - - case CSS_PROP_BORDER_TOP_STYLE: - HANDLE_INHERIT_AND_INITIAL_WITH_VALUE(borderTopStyle, BorderTopStyle, BorderStyle) - if (!primitiveValue) return; - style->setBorderTopStyle((EBorderStyle)(primitiveValue->getIdent() - CSS_VAL__KHTML_NATIVE)); - break; - case CSS_PROP_BORDER_RIGHT_STYLE: - HANDLE_INHERIT_AND_INITIAL_WITH_VALUE(borderRightStyle, BorderRightStyle, BorderStyle) - if (!primitiveValue) return; - style->setBorderRightStyle((EBorderStyle)(primitiveValue->getIdent() - CSS_VAL__KHTML_NATIVE)); - break; - case CSS_PROP_BORDER_BOTTOM_STYLE: - HANDLE_INHERIT_AND_INITIAL_WITH_VALUE(borderBottomStyle, BorderBottomStyle, BorderStyle) - if (!primitiveValue) return; - style->setBorderBottomStyle((EBorderStyle)(primitiveValue->getIdent() - CSS_VAL__KHTML_NATIVE)); - break; - case CSS_PROP_BORDER_LEFT_STYLE: - HANDLE_INHERIT_AND_INITIAL_WITH_VALUE(borderLeftStyle, BorderLeftStyle, BorderStyle) - if (!primitiveValue) return; - style->setBorderLeftStyle((EBorderStyle)(primitiveValue->getIdent() - CSS_VAL__KHTML_NATIVE)); - break; - case CSS_PROP_OUTLINE_STYLE: - HANDLE_INHERIT_AND_INITIAL_WITH_VALUE(outlineStyle, OutlineStyle, BorderStyle) - if (!primitiveValue) return; - style->setOutlineStyle((EBorderStyle)(primitiveValue->getIdent() - CSS_VAL__KHTML_NATIVE)); - break; - case CSS_PROP_CAPTION_SIDE: - { - HANDLE_INHERIT_AND_INITIAL(captionSide, CaptionSide) - if(!primitiveValue) break; - ECaptionSide c = RenderStyle::initialCaptionSide(); - switch(primitiveValue->getIdent()) - { - case CSS_VAL_LEFT: - c = CAPLEFT; break; - case CSS_VAL_RIGHT: - c = CAPRIGHT; break; - case CSS_VAL_TOP: - c = CAPTOP; break; - case CSS_VAL_BOTTOM: - c = CAPBOTTOM; break; - default: - return; - } - style->setCaptionSide(c); - return; - } - case CSS_PROP_CLEAR: - { - HANDLE_INHERIT_AND_INITIAL(clear, Clear) - if(!primitiveValue) break; - EClear c = CNONE; - switch(primitiveValue->getIdent()) - { - case CSS_VAL_LEFT: - c = CLEFT; break; - case CSS_VAL_RIGHT: - c = CRIGHT; break; - case CSS_VAL_BOTH: - c = CBOTH; break; - case CSS_VAL_NONE: - c = CNONE; break; - default: - return; - } - style->setClear(c); - return; - } - case CSS_PROP_DIRECTION: - { - HANDLE_INHERIT_AND_INITIAL(direction, Direction) - if(!primitiveValue) break; - style->setDirection( (EDirection) (primitiveValue->getIdent() - CSS_VAL_LTR) ); - return; - } - case CSS_PROP_DISPLAY: - { - HANDLE_INHERIT_AND_INITIAL(display, Display) - if(!primitiveValue) break; - int id = primitiveValue->getIdent(); - style->setDisplay( id == CSS_VAL_NONE ? NONE : EDisplay(id - CSS_VAL_INLINE) ); - break; - } - - case CSS_PROP_EMPTY_CELLS: - { - HANDLE_INHERIT(emptyCells, EmptyCells); - if (!primitiveValue) break; - int id = primitiveValue->getIdent(); - if (id == CSS_VAL_SHOW) - style->setEmptyCells(SHOW); - else if (id == CSS_VAL_HIDE) - style->setEmptyCells(HIDE); - break; - } - case CSS_PROP_FLOAT: - { - HANDLE_INHERIT_AND_INITIAL(floating, Floating) - if(!primitiveValue) return; - EFloat f; - switch(primitiveValue->getIdent()) - { - case CSS_VAL__KHTML_LEFT: - f = FLEFT_ALIGN; break; - case CSS_VAL_LEFT: - f = FLEFT; break; - case CSS_VAL__KHTML_RIGHT: - f = FRIGHT_ALIGN; break; - case CSS_VAL_RIGHT: - f = FRIGHT; break; - case CSS_VAL_NONE: - case CSS_VAL_CENTER: //Non standart CSS-Value - f = FNONE; break; - default: - return; - } - if (f!=FNONE && style->display()==LIST_ITEM) - style->setDisplay(BLOCK); - - style->setFloating(f); - break; - } - - case CSS_PROP_FONT_STYLE: - { - FontDef fontDef = style->htmlFont().fontDef; - if (isInherit) - fontDef.italic = parentStyle->htmlFont().fontDef.italic; - else if (isInitial) - fontDef.italic = false; - else { - if(!primitiveValue) return; - switch(primitiveValue->getIdent()) { - case CSS_VAL_OBLIQUE: - // ### oblique is the same as italic for the moment... - case CSS_VAL_ITALIC: - fontDef.italic = true; - break; - case CSS_VAL_NORMAL: - fontDef.italic = false; - break; - default: - return; - } - } - fontDirty |= style->setFontDef( fontDef ); - break; - } - - - case CSS_PROP_FONT_VARIANT: - { - FontDef fontDef = style->htmlFont().fontDef; - if (isInherit) - fontDef.smallCaps = parentStyle->htmlFont().fontDef.smallCaps; - else if (isInitial) - fontDef.smallCaps = false; - else { - if(!primitiveValue) return; - int id = primitiveValue->getIdent(); - if ( id == CSS_VAL_NORMAL ) - fontDef.smallCaps = false; - else if ( id == CSS_VAL_SMALL_CAPS ) - fontDef.smallCaps = true; - else - return; - } - fontDirty |= style->setFontDef( fontDef ); - break; - } - - case CSS_PROP_FONT_WEIGHT: - { - FontDef fontDef = style->htmlFont().fontDef; - if (isInherit) - fontDef.weight = parentStyle->htmlFont().fontDef.weight; - else if (isInitial) - fontDef.weight = TQFont::Normal; - else { - if(!primitiveValue) return; - if(primitiveValue->getIdent()) - { - switch(primitiveValue->getIdent()) { - // ### we just support normal and bold fonts at the moment... - // setWeight can actually accept values between 0 and 99... - case CSS_VAL_BOLD: - case CSS_VAL_BOLDER: - case CSS_VAL_600: - case CSS_VAL_700: - case CSS_VAL_800: - case CSS_VAL_900: - fontDef.weight = TQFont::Bold; - break; - case CSS_VAL_NORMAL: - case CSS_VAL_LIGHTER: - case CSS_VAL_100: - case CSS_VAL_200: - case CSS_VAL_300: - case CSS_VAL_400: - case CSS_VAL_500: - fontDef.weight = TQFont::Normal; - break; - default: - return; - } - } - else - { - // ### fix parsing of 100-900 values in parser, apply them here - } - } - fontDirty |= style->setFontDef( fontDef ); - break; - } - - case CSS_PROP_LIST_STYLE_POSITION: - { - HANDLE_INHERIT_AND_INITIAL(listStylePosition, ListStylePosition) - if (!primitiveValue) return; - if (primitiveValue->getIdent()) - style->setListStylePosition( (EListStylePosition) (primitiveValue->getIdent() - CSS_VAL_OUTSIDE) ); - return; - } - - case CSS_PROP_LIST_STYLE_TYPE: - { - HANDLE_INHERIT_AND_INITIAL(listStyleType, ListStyleType) - if (!primitiveValue) return; - if (primitiveValue->getIdent()) - { - EListStyleType t; - int id = primitiveValue->getIdent(); - if ( id == CSS_VAL_NONE) { // important!! - t = LNONE; - } else { - t = EListStyleType(id - CSS_VAL_DISC); - } - style->setListStyleType(t); - } - return; - } - - case CSS_PROP_OVERFLOW: - { - if (isInherit) { - style->setOverflowX(parentStyle->overflowX()); - style->setOverflowY(parentStyle->overflowY()); - return; - } - - if (isInitial) { - style->setOverflowX(RenderStyle::initialOverflowX()); - style->setOverflowY(RenderStyle::initialOverflowY()); - return; - } - - if (!primitiveValue) return; - EOverflow o; - switch(primitiveValue->getIdent()) - { - case CSS_VAL_VISIBLE: - o = OVISIBLE; break; - case CSS_VAL_HIDDEN: - o = OHIDDEN; break; - case CSS_VAL_SCROLL: - o = OSCROLL; break; - case CSS_VAL_AUTO: - o = OAUTO; break; - case CSS_VAL_MARQUEE: - o = OMARQUEE; break; - default: - return; - } - style->setOverflowX(o); - style->setOverflowY(o); - return; - } - case CSS_PROP_OVERFLOW_X: - { - HANDLE_INHERIT_AND_INITIAL(overflowX, OverflowX) - if (!primitiveValue) return; - EOverflow o; - switch(primitiveValue->getIdent()) - { - case CSS_VAL_VISIBLE: - o = OVISIBLE; break; - case CSS_VAL_HIDDEN: - o = OHIDDEN; break; - case CSS_VAL_SCROLL: - o = OSCROLL; break; - case CSS_VAL_AUTO: - o = OAUTO; break; - default: - return; - } - style->setOverflowX(o); - return; - } - case CSS_PROP_OVERFLOW_Y: - { - HANDLE_INHERIT_AND_INITIAL(overflowY, OverflowY) - if (!primitiveValue) return; - EOverflow o; - switch(primitiveValue->getIdent()) - { - case CSS_VAL_VISIBLE: - o = OVISIBLE; break; - case CSS_VAL_HIDDEN: - o = OHIDDEN; break; - case CSS_VAL_SCROLL: - o = OSCROLL; break; - case CSS_VAL_AUTO: - o = OAUTO; break; - default: - return; - } - style->setOverflowY(o); - return; - } - case CSS_PROP_PAGE_BREAK_BEFORE: - { - HANDLE_INHERIT_AND_INITIAL_WITH_VALUE(pageBreakBefore, PageBreakBefore, PageBreak) - if (!primitiveValue) return; - switch (primitiveValue->getIdent()) { - case CSS_VAL_AUTO: - style->setPageBreakBefore(PBAUTO); - break; - case CSS_VAL_LEFT: - case CSS_VAL_RIGHT: - // CSS2.1: "Conforming user agents may map left/right to always." - case CSS_VAL_ALWAYS: - style->setPageBreakBefore(PBALWAYS); - break; - case CSS_VAL_AVOID: - style->setPageBreakBefore(PBAVOID); - break; - } - break; - } - - case CSS_PROP_PAGE_BREAK_AFTER: - { - HANDLE_INHERIT_AND_INITIAL_WITH_VALUE(pageBreakAfter, PageBreakAfter, PageBreak) - if (!primitiveValue) return; - switch (primitiveValue->getIdent()) { - case CSS_VAL_AUTO: - style->setPageBreakAfter(PBAUTO); - break; - case CSS_VAL_LEFT: - case CSS_VAL_RIGHT: - // CSS2.1: "Conforming user agents may map left/right to always." - case CSS_VAL_ALWAYS: - style->setPageBreakAfter(PBALWAYS); - break; - case CSS_VAL_AVOID: - style->setPageBreakAfter(PBAVOID); - break; - } - break; - } - - case CSS_PROP_PAGE_BREAK_INSIDE: { - HANDLE_INHERIT_AND_INITIAL(pageBreakInside, PageBreakInside) - if (!primitiveValue) return; - if (primitiveValue->getIdent() == CSS_VAL_AUTO) - style->setPageBreakInside(true); - else if (primitiveValue->getIdent() == CSS_VAL_AVOID) - style->setPageBreakInside(false); - return; - } -// case CSS_PROP_PAUSE_AFTER: -// case CSS_PROP_PAUSE_BEFORE: - break; - - case CSS_PROP_POSITION: - { - HANDLE_INHERIT_AND_INITIAL(position, Position) - if (!primitiveValue) return; - EPosition p; - switch(primitiveValue->getIdent()) - { - case CSS_VAL_STATIC: - p = STATIC; break; - case CSS_VAL_RELATIVE: - p = RELATIVE; break; - case CSS_VAL_ABSOLUTE: - p = ABSOLUTE; break; - case CSS_VAL_FIXED: - { - view->useSlowRepaints(); - p = FIXED; - break; - } - default: - return; - } - style->setPosition(p); - return; - } - - case CSS_PROP_TABLE_LAYOUT: { - HANDLE_INHERIT_AND_INITIAL(tableLayout, TableLayout) - - if ( !primitiveValue ) - return; - - ETableLayout l = RenderStyle::initialTableLayout(); - switch( primitiveValue->getIdent() ) { - case CSS_VAL_FIXED: - l = TFIXED; - // fall through - case CSS_VAL_AUTO: - style->setTableLayout( l ); - default: - break; - } - break; - } - - case CSS_PROP_UNICODE_BIDI: { - HANDLE_INHERIT_AND_INITIAL(unicodeBidi, UnicodeBidi) - if(!primitiveValue) break; - switch (primitiveValue->getIdent()) { - case CSS_VAL_NORMAL: - style->setUnicodeBidi(UBNormal); - break; - case CSS_VAL_EMBED: - style->setUnicodeBidi(Embed); - break; - case CSS_VAL_BIDI_OVERRIDE: - style->setUnicodeBidi(Override); - break; - default: - return; - } - break; - } - case CSS_PROP_TEXT_TRANSFORM: { - HANDLE_INHERIT_AND_INITIAL(textTransform, TextTransform) - - if(!primitiveValue) break; - if(!primitiveValue->getIdent()) return; - - ETextTransform tt; - switch(primitiveValue->getIdent()) { - case CSS_VAL_CAPITALIZE: tt = CAPITALIZE; break; - case CSS_VAL_UPPERCASE: tt = UPPERCASE; break; - case CSS_VAL_LOWERCASE: tt = LOWERCASE; break; - case CSS_VAL_NONE: - default: tt = TTNONE; break; - } - style->setTextTransform(tt); - break; - } - - case CSS_PROP_VISIBILITY: - { - HANDLE_INHERIT_AND_INITIAL(visibility, Visibility) - - if(!primitiveValue) break; - switch( primitiveValue->getIdent() ) { - case CSS_VAL_HIDDEN: - style->setVisibility( HIDDEN ); - break; - case CSS_VAL_VISIBLE: - style->setVisibility( VISIBLE ); - break; - case CSS_VAL_COLLAPSE: - style->setVisibility( COLLAPSE ); - default: - break; - } - break; - } - case CSS_PROP_WHITE_SPACE: - HANDLE_INHERIT_AND_INITIAL(whiteSpace, WhiteSpace) - - if(!primitiveValue) break; - if(!primitiveValue->getIdent()) return; - - EWhiteSpace s; - switch(primitiveValue->getIdent()) { - case CSS_VAL__KHTML_NOWRAP: - s = KHTML_NOWRAP; - break; - case CSS_VAL_NOWRAP: - s = NOWRAP; - break; - case CSS_VAL_PRE: - s = PRE; - break; - case CSS_VAL_PRE_WRAP: - s = PRE_WRAP; - break; - case CSS_VAL_PRE_LINE: - s = PRE_LINE; - break; - case CSS_VAL_NORMAL: - default: - s = NORMAL; - break; - } - style->setWhiteSpace(s); - break; - - case CSS_PROP_BACKGROUND_POSITION: - HANDLE_BACKGROUND_INHERIT_AND_INITIAL(backgroundXPosition, BackgroundXPosition); - HANDLE_BACKGROUND_INHERIT_AND_INITIAL(backgroundYPosition, BackgroundYPosition); - break; - case CSS_PROP_BACKGROUND_POSITION_X: { - HANDLE_BACKGROUND_VALUE(backgroundXPosition, BackgroundXPosition, value) - break; - } - case CSS_PROP_BACKGROUND_POSITION_Y: { - HANDLE_BACKGROUND_VALUE(backgroundYPosition, BackgroundYPosition, value) - break; - } - case CSS_PROP_BORDER_SPACING: { - if(value->cssValueType() != CSSValue::CSS_INHERIT || !parentNode) return; - style->setBorderHorizontalSpacing(parentStyle->borderHorizontalSpacing()); - style->setBorderVerticalSpacing(parentStyle->borderVerticalSpacing()); - break; - } - case CSS_PROP__KHTML_BORDER_HORIZONTAL_SPACING: { - HANDLE_INHERIT_AND_INITIAL(borderHorizontalSpacing, BorderHorizontalSpacing) - if (!primitiveValue) break; - short spacing = primitiveValue->computeLength(style, paintDeviceMetrics); - style->setBorderHorizontalSpacing(spacing); - break; - } - case CSS_PROP__KHTML_BORDER_VERTICAL_SPACING: { - HANDLE_INHERIT_AND_INITIAL(borderVerticalSpacing, BorderVerticalSpacing) - if (!primitiveValue) break; - short spacing = primitiveValue->computeLength(style, paintDeviceMetrics); - style->setBorderVerticalSpacing(spacing); - break; - } - - case CSS_PROP_CURSOR: - HANDLE_INHERIT_AND_INITIAL(cursor, Cursor) - if(primitiveValue) - style->setCursor( (ECursor) (primitiveValue->getIdent() - CSS_VAL_AUTO) ); - break; -// colors || inherit - case CSS_PROP_BACKGROUND_COLOR: - case CSS_PROP_BORDER_TOP_COLOR: - case CSS_PROP_BORDER_RIGHT_COLOR: - case CSS_PROP_BORDER_BOTTOM_COLOR: - case CSS_PROP_BORDER_LEFT_COLOR: - case CSS_PROP_COLOR: - case CSS_PROP_OUTLINE_COLOR: - // this property is an extension used to get HTML4 <font> right. - case CSS_PROP_SCROLLBAR_BASE_COLOR: - case CSS_PROP_SCROLLBAR_FACE_COLOR: - case CSS_PROP_SCROLLBAR_SHADOW_COLOR: - case CSS_PROP_SCROLLBAR_HIGHLIGHT_COLOR: - case CSS_PROP_SCROLLBAR_3DLIGHT_COLOR: - case CSS_PROP_SCROLLBAR_DARKSHADOW_COLOR: - case CSS_PROP_SCROLLBAR_TRACK_COLOR: - case CSS_PROP_SCROLLBAR_ARROW_COLOR: - { - TQColor col; - if (isInherit) { - HANDLE_INHERIT_COND(CSS_PROP_BACKGROUND_COLOR, backgroundColor, BackgroundColor) - HANDLE_INHERIT_COND(CSS_PROP_BORDER_TOP_COLOR, borderTopColor, BorderTopColor) - HANDLE_INHERIT_COND(CSS_PROP_BORDER_BOTTOM_COLOR, borderBottomColor, BorderBottomColor) - HANDLE_INHERIT_COND(CSS_PROP_BORDER_RIGHT_COLOR, borderRightColor, BorderRightColor) - HANDLE_INHERIT_COND(CSS_PROP_BORDER_LEFT_COLOR, borderLeftColor, BorderLeftColor) - HANDLE_INHERIT_COND(CSS_PROP_COLOR, color, Color) - HANDLE_INHERIT_COND(CSS_PROP_OUTLINE_COLOR, outlineColor, OutlineColor) - return; - } else if (isInitial) { - // The border/outline colors will just map to the invalid color |col| above. This will have the - // effect of forcing the use of the currentColor when it comes time to draw the borders (and of - // not painting the background since the color won't be valid). - if (id == CSS_PROP_COLOR) - col = RenderStyle::initialColor(); - } else { - if(!primitiveValue ) - return; - int ident = primitiveValue->getIdent(); - if ( ident ) { - if ( ident == CSS_VAL__KHTML_TEXT ) - col = element->getDocument()->textColor(); - // ### should be eliminated - else if ( ident == CSS_VAL_TRANSPARENT - && id != CSS_PROP_BORDER_TOP_COLOR - && id != CSS_PROP_BORDER_RIGHT_COLOR - && id != CSS_PROP_BORDER_BOTTOM_COLOR - && id != CSS_PROP_BORDER_LEFT_COLOR ) - col = TQColor(); - else - col = colorForCSSValue( ident ); - } else if ( primitiveValue->primitiveType() == CSSPrimitiveValue::CSS_RGBCOLOR ) { -#ifndef APPLE_CHANGES - if(tqAlpha(primitiveValue->getRGBColorValue())) -#endif - col.setRgb(primitiveValue->getRGBColorValue()); - } else { - return; - } - } - //kdDebug( 6080 ) << "applying color " << col.isValid() << endl; - switch(id) - { - case CSS_PROP_BACKGROUND_COLOR: - style->setBackgroundColor(col); break; - case CSS_PROP_BORDER_TOP_COLOR: - style->setBorderTopColor(col); break; - case CSS_PROP_BORDER_RIGHT_COLOR: - style->setBorderRightColor(col); break; - case CSS_PROP_BORDER_BOTTOM_COLOR: - style->setBorderBottomColor(col); break; - case CSS_PROP_BORDER_LEFT_COLOR: - style->setBorderLeftColor(col); break; - case CSS_PROP_COLOR: - style->setColor(col); break; - case CSS_PROP_OUTLINE_COLOR: - style->setOutlineColor(col); break; -#ifndef APPLE_CHANGES - case CSS_PROP_SCROLLBAR_FACE_COLOR: - style->setPaletteColor(TQPalette::Active, TQColorGroup::Button, col); - style->setPaletteColor(TQPalette::Inactive, TQColorGroup::Button, col); - break; - case CSS_PROP_SCROLLBAR_SHADOW_COLOR: - style->setPaletteColor(TQPalette::Active, TQColorGroup::Shadow, col); - style->setPaletteColor(TQPalette::Inactive, TQColorGroup::Shadow, col); - break; - case CSS_PROP_SCROLLBAR_HIGHLIGHT_COLOR: - style->setPaletteColor(TQPalette::Active, TQColorGroup::Light, col); - style->setPaletteColor(TQPalette::Inactive, TQColorGroup::Light, col); - break; - case CSS_PROP_SCROLLBAR_3DLIGHT_COLOR: - break; - case CSS_PROP_SCROLLBAR_DARKSHADOW_COLOR: - style->setPaletteColor(TQPalette::Active, TQColorGroup::Dark, col); - style->setPaletteColor(TQPalette::Inactive, TQColorGroup::Dark, col); - break; - case CSS_PROP_SCROLLBAR_TRACK_COLOR: - style->setPaletteColor(TQPalette::Active, TQColorGroup::Mid, col); - style->setPaletteColor(TQPalette::Inactive, TQColorGroup::Mid, col); - style->setPaletteColor(TQPalette::Active, TQColorGroup::Background, col); - style->setPaletteColor(TQPalette::Inactive, TQColorGroup::Background, col); - // fall through - case CSS_PROP_SCROLLBAR_BASE_COLOR: - style->setPaletteColor(TQPalette::Active, TQColorGroup::Base, col); - style->setPaletteColor(TQPalette::Inactive, TQColorGroup::Base, col); - break; - case CSS_PROP_SCROLLBAR_ARROW_COLOR: - style->setPaletteColor(TQPalette::Active, TQColorGroup::ButtonText, col); - style->setPaletteColor(TQPalette::Inactive, TQColorGroup::ButtonText, col); - break; -#endif - default: - return; - } - return; - } - break; -// uri || inherit - case CSS_PROP_BACKGROUND_IMAGE: - HANDLE_BACKGROUND_VALUE(backgroundImage, BackgroundImage, value) - break; - case CSS_PROP_LIST_STYLE_IMAGE: - { - HANDLE_INHERIT_AND_INITIAL(listStyleImage, ListStyleImage) - if (!primitiveValue) return; - style->setListStyleImage(static_cast<CSSImageValueImpl *>(primitiveValue)->image()); - //kdDebug( 6080 ) << "setting image in list to " << image->image() << endl; - break; - } - -// length - case CSS_PROP_BORDER_TOP_WIDTH: - case CSS_PROP_BORDER_RIGHT_WIDTH: - case CSS_PROP_BORDER_BOTTOM_WIDTH: - case CSS_PROP_BORDER_LEFT_WIDTH: - case CSS_PROP_OUTLINE_WIDTH: - { - if (isInherit) { - HANDLE_INHERIT_COND(CSS_PROP_BORDER_TOP_WIDTH, borderTopWidth, BorderTopWidth) - HANDLE_INHERIT_COND(CSS_PROP_BORDER_RIGHT_WIDTH, borderRightWidth, BorderRightWidth) - HANDLE_INHERIT_COND(CSS_PROP_BORDER_BOTTOM_WIDTH, borderBottomWidth, BorderBottomWidth) - HANDLE_INHERIT_COND(CSS_PROP_BORDER_LEFT_WIDTH, borderLeftWidth, BorderLeftWidth) - HANDLE_INHERIT_COND(CSS_PROP_OUTLINE_WIDTH, outlineWidth, OutlineWidth) - return; - } - else if (isInitial) { - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_BORDER_TOP_WIDTH, BorderTopWidth, BorderWidth) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_BORDER_RIGHT_WIDTH, BorderRightWidth, BorderWidth) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_BORDER_BOTTOM_WIDTH, BorderBottomWidth, BorderWidth) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_BORDER_LEFT_WIDTH, BorderLeftWidth, BorderWidth) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_OUTLINE_WIDTH, OutlineWidth, BorderWidth) - return; - } - - if(!primitiveValue) break; - short width = 3; - switch(primitiveValue->getIdent()) - { - case CSS_VAL_THIN: - width = 1; - break; - case CSS_VAL_MEDIUM: - width = 3; - break; - case CSS_VAL_THICK: - width = 5; - break; - case CSS_VAL_INVALID: - { - double widthd = primitiveValue->computeLengthFloat(style, paintDeviceMetrics); - width = (int)widthd; - // somewhat resemble Mozilla's granularity - // this makes border-width: 0.5pt borders visible - if (width == 0 && widthd >= 0.025) width++; - break; - } - default: - return; - } - - if(width < 0) return; - switch(id) - { - case CSS_PROP_BORDER_TOP_WIDTH: - style->setBorderTopWidth(width); - break; - case CSS_PROP_BORDER_RIGHT_WIDTH: - style->setBorderRightWidth(width); - break; - case CSS_PROP_BORDER_BOTTOM_WIDTH: - style->setBorderBottomWidth(width); - break; - case CSS_PROP_BORDER_LEFT_WIDTH: - style->setBorderLeftWidth(width); - break; - case CSS_PROP_OUTLINE_WIDTH: - style->setOutlineWidth(width); - break; - default: - return; - } - return; - } - - case CSS_PROP_LETTER_SPACING: - case CSS_PROP_WORD_SPACING: - { - if (isInherit) { - HANDLE_INHERIT_COND(CSS_PROP_LETTER_SPACING, letterSpacing, LetterSpacing) - HANDLE_INHERIT_COND(CSS_PROP_WORD_SPACING, wordSpacing, WordSpacing) - return; - } else if (isInitial) { - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_LETTER_SPACING, LetterSpacing, LetterWordSpacing) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_WORD_SPACING, WordSpacing, LetterWordSpacing) - return; - } - if(!primitiveValue) return; - - int width = 0; - if (primitiveValue->getIdent() != CSS_VAL_NORMAL) - width = primitiveValue->computeLength(style, paintDeviceMetrics); - - switch(id) - { - case CSS_PROP_LETTER_SPACING: - style->setLetterSpacing(width); - break; - case CSS_PROP_WORD_SPACING: - style->setWordSpacing(width); - break; - // ### needs the definitions in renderstyle - default: break; - } - return; - } - - // length, percent - case CSS_PROP_MAX_WIDTH: - // +none +inherit - if(primitiveValue && primitiveValue->getIdent() == CSS_VAL_NONE) { - apply = true; - l = Length(UNDEFINED, Fixed); - } - case CSS_PROP_TOP: - case CSS_PROP_LEFT: - case CSS_PROP_RIGHT: - case CSS_PROP_BOTTOM: - case CSS_PROP_WIDTH: - case CSS_PROP_MIN_WIDTH: - case CSS_PROP_MARGIN_TOP: - case CSS_PROP_MARGIN_RIGHT: - case CSS_PROP_MARGIN_BOTTOM: - case CSS_PROP_MARGIN_LEFT: - // +inherit +auto - if(id != CSS_PROP_MAX_WIDTH && primitiveValue && - primitiveValue->getIdent() == CSS_VAL_AUTO) - { - //kdDebug( 6080 ) << "found value=auto" << endl; - apply = true; - } - case CSS_PROP_PADDING_TOP: - case CSS_PROP_PADDING_RIGHT: - case CSS_PROP_PADDING_BOTTOM: - case CSS_PROP_PADDING_LEFT: - case CSS_PROP_TEXT_INDENT: - // +inherit - { - if (isInherit) { - HANDLE_INHERIT_COND(CSS_PROP_MAX_WIDTH, maxWidth, MaxWidth) - HANDLE_INHERIT_COND(CSS_PROP_BOTTOM, bottom, Bottom) - HANDLE_INHERIT_COND(CSS_PROP_TOP, top, Top) - HANDLE_INHERIT_COND(CSS_PROP_LEFT, left, Left) - HANDLE_INHERIT_COND(CSS_PROP_RIGHT, right, Right) - HANDLE_INHERIT_COND(CSS_PROP_WIDTH, width, Width) - HANDLE_INHERIT_COND(CSS_PROP_MIN_WIDTH, minWidth, MinWidth) - HANDLE_INHERIT_COND(CSS_PROP_PADDING_TOP, paddingTop, PaddingTop) - HANDLE_INHERIT_COND(CSS_PROP_PADDING_RIGHT, paddingRight, PaddingRight) - HANDLE_INHERIT_COND(CSS_PROP_PADDING_BOTTOM, paddingBottom, PaddingBottom) - HANDLE_INHERIT_COND(CSS_PROP_PADDING_LEFT, paddingLeft, PaddingLeft) - HANDLE_INHERIT_COND(CSS_PROP_MARGIN_TOP, marginTop, MarginTop) - HANDLE_INHERIT_COND(CSS_PROP_MARGIN_RIGHT, marginRight, MarginRight) - HANDLE_INHERIT_COND(CSS_PROP_MARGIN_BOTTOM, marginBottom, MarginBottom) - HANDLE_INHERIT_COND(CSS_PROP_MARGIN_LEFT, marginLeft, MarginLeft) - HANDLE_INHERIT_COND(CSS_PROP_TEXT_INDENT, textIndent, TextIndent) - return; - } else if (isInitial) { - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_MAX_WIDTH, MaxWidth, MaxSize) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_BOTTOM, Bottom, Offset) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_TOP, Top, Offset) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_LEFT, Left, Offset) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_RIGHT, Right, Offset) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_WIDTH, Width, Size) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_MIN_WIDTH, MinWidth, MinSize) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_PADDING_TOP, PaddingTop, Padding) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_PADDING_RIGHT, PaddingRight, Padding) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_PADDING_BOTTOM, PaddingBottom, Padding) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_PADDING_LEFT, PaddingLeft, Padding) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_MARGIN_TOP, MarginTop, Margin) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_MARGIN_RIGHT, MarginRight, Margin) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_MARGIN_BOTTOM, MarginBottom, Margin) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_MARGIN_LEFT, MarginLeft, Margin) - HANDLE_INITIAL_COND(CSS_PROP_TEXT_INDENT, TextIndent) - return; - } - - if (primitiveValue && !apply) { - int type = primitiveValue->primitiveType(); - if(type > CSSPrimitiveValue::CSS_PERCENTAGE && type < CSSPrimitiveValue::CSS_DEG) - // Handle our quirky margin units if we have them. - l = Length(primitiveValue->computeLength(style, paintDeviceMetrics), Fixed, - primitiveValue->isQuirkValue()); - else if(type == CSSPrimitiveValue::CSS_PERCENTAGE) - l = Length((int)primitiveValue->floatValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent); - else if (type == CSSPrimitiveValue::CSS_HTML_RELATIVE) - l = Length(int(primitiveValue->floatValue(CSSPrimitiveValue::CSS_HTML_RELATIVE)), Relative); - else - return; - apply = true; - } - if(!apply) return; - switch(id) - { - case CSS_PROP_MAX_WIDTH: - style->setMaxWidth(l); break; - case CSS_PROP_BOTTOM: - style->setBottom(l); break; - case CSS_PROP_TOP: - style->setTop(l); break; - case CSS_PROP_LEFT: - style->setLeft(l); break; - case CSS_PROP_RIGHT: - style->setRight(l); break; - case CSS_PROP_WIDTH: - style->setWidth(l); break; - case CSS_PROP_MIN_WIDTH: - style->setMinWidth(l); break; - case CSS_PROP_PADDING_TOP: - style->setPaddingTop(l); break; - case CSS_PROP_PADDING_RIGHT: - style->setPaddingRight(l); break; - case CSS_PROP_PADDING_BOTTOM: - style->setPaddingBottom(l); break; - case CSS_PROP_PADDING_LEFT: - style->setPaddingLeft(l); break; - case CSS_PROP_MARGIN_TOP: - style->setMarginTop(l); break; - case CSS_PROP_MARGIN_RIGHT: - style->setMarginRight(l); break; - case CSS_PROP_MARGIN_BOTTOM: - style->setMarginBottom(l); break; - case CSS_PROP_MARGIN_LEFT: - style->setMarginLeft(l); break; - case CSS_PROP_TEXT_INDENT: - style->setTextIndent(l); break; - default: break; - } - return; - } - - case CSS_PROP_MAX_HEIGHT: - if(primitiveValue && primitiveValue->getIdent() == CSS_VAL_NONE) { - apply = true; - l = Length(UNDEFINED, Fixed); - } - case CSS_PROP_HEIGHT: - case CSS_PROP_MIN_HEIGHT: - if(id != CSS_PROP_MAX_HEIGHT && primitiveValue && - primitiveValue->getIdent() == CSS_VAL_AUTO) - apply = true; - if (isInherit) { - HANDLE_INHERIT_COND(CSS_PROP_MAX_HEIGHT, maxHeight, MaxHeight) - HANDLE_INHERIT_COND(CSS_PROP_HEIGHT, height, Height) - HANDLE_INHERIT_COND(CSS_PROP_MIN_HEIGHT, minHeight, MinHeight) - return; - } - else if (isInitial) { - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_MAX_HEIGHT, MaxHeight, MaxSize) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_HEIGHT, Height, Size) - HANDLE_INITIAL_COND_WITH_VALUE(CSS_PROP_MIN_HEIGHT, MinHeight, MinSize) - return; - } - - if (primitiveValue && !apply) - { - int type = primitiveValue->primitiveType(); - if(type > CSSPrimitiveValue::CSS_PERCENTAGE && type < CSSPrimitiveValue::CSS_DEG) - l = Length(primitiveValue->computeLength(style, paintDeviceMetrics), Fixed); - else if(type == CSSPrimitiveValue::CSS_PERCENTAGE) - l = Length((int)primitiveValue->floatValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent); - else - return; - apply = true; - } - if(!apply) return; - switch(id) - { - case CSS_PROP_MAX_HEIGHT: - style->setMaxHeight(l); break; - case CSS_PROP_HEIGHT: - style->setHeight(l); break; - case CSS_PROP_MIN_HEIGHT: - style->setMinHeight(l); break; - default: - return; - } - return; - - break; - - case CSS_PROP_VERTICAL_ALIGN: - HANDLE_INHERIT_AND_INITIAL(verticalAlign, VerticalAlign) - if (!primitiveValue) return; - if (primitiveValue->getIdent()) { - khtml::EVerticalAlign align; - - switch(primitiveValue->getIdent()) - { - case CSS_VAL_TOP: - align = TOP; break; - case CSS_VAL_BOTTOM: - align = BOTTOM; break; - case CSS_VAL_MIDDLE: - align = MIDDLE; break; - case CSS_VAL_BASELINE: - align = BASELINE; break; - case CSS_VAL_TEXT_BOTTOM: - align = TEXT_BOTTOM; break; - case CSS_VAL_TEXT_TOP: - align = TEXT_TOP; break; - case CSS_VAL_SUB: - align = SUB; break; - case CSS_VAL_SUPER: - align = SUPER; break; - case CSS_VAL__KHTML_BASELINE_MIDDLE: - align = BASELINE_MIDDLE; break; - default: - return; - } - style->setVerticalAlign(align); - return; - } else { - int type = primitiveValue->primitiveType(); - Length l; - if(type > CSSPrimitiveValue::CSS_PERCENTAGE && type < CSSPrimitiveValue::CSS_DEG) - l = Length(primitiveValue->computeLength(style, paintDeviceMetrics), Fixed ); - else if(type == CSSPrimitiveValue::CSS_PERCENTAGE) - l = Length( int( primitiveValue->floatValue(CSSPrimitiveValue::CSS_PERCENTAGE) ), Percent ); - - style->setVerticalAlign( LENGTH ); - style->setVerticalAlignLength( l ); - } - break; - - case CSS_PROP_FONT_SIZE: - { - FontDef fontDef = style->htmlFont().fontDef; - int oldSize; - int size = 0; - - float toPix = paintDeviceMetrics->logicalDpiY()/72.; - if (toPix < 96./72.) toPix = 96./72.; - - int minFontSize = int(settings->minFontSize() * toPix); - - if(parentNode) { - oldSize = parentStyle->font().pixelSize(); - } else - oldSize = m_fontSizes[3]; - - if (isInherit ) - size = oldSize; - else if (isInitial) - size = m_fontSizes[3]; - else if(primitiveValue->getIdent()) { - // keywords are being used. Pick the correct default - // based off the font family. -#ifdef APPLE_CHANGES - const TQValueVector<int>& fontSizes = (fontDef.genericFamily == FontDef::eMonospace) ? - m_fixedFontSizes : m_fontSizes; -#else - const TQValueVector<int>& fontSizes = m_fontSizes; -#endif - switch(primitiveValue->getIdent()) - { - case CSS_VAL_XX_SMALL: size = int( fontSizes[0] ); break; - case CSS_VAL_X_SMALL: size = int( fontSizes[1] ); break; - case CSS_VAL_SMALL: size = int( fontSizes[2] ); break; - case CSS_VAL_MEDIUM: size = int( fontSizes[3] ); break; - case CSS_VAL_LARGE: size = int( fontSizes[4] ); break; - case CSS_VAL_X_LARGE: size = int( fontSizes[5] ); break; - case CSS_VAL_XX_LARGE: size = int( fontSizes[6] ); break; - case CSS_VAL__KHTML_XXX_LARGE: size = int( fontSizes[7] ); break; - case CSS_VAL_LARGER: - size = nextFontSize(fontSizes, oldSize, false); - break; - case CSS_VAL_SMALLER: - size = nextFontSize(fontSizes, oldSize, true); - break; - default: - return; - } - - } else { - int type = primitiveValue->primitiveType(); - if(type > CSSPrimitiveValue::CSS_PERCENTAGE && type < CSSPrimitiveValue::CSS_DEG) { - if ( !khtml::printpainter && type != CSSPrimitiveValue::CSS_EMS && type != CSSPrimitiveValue::CSS_EXS && - view && view->part()) - size = int( primitiveValue->computeLengthFloat(parentStyle, paintDeviceMetrics) * - view->part()->zoomFactor() ) / 100; - else - size = int( primitiveValue->computeLengthFloat(parentStyle, paintDeviceMetrics) ); - } - else if(type == CSSPrimitiveValue::CSS_PERCENTAGE) - size = int(primitiveValue->floatValue(CSSPrimitiveValue::CSS_PERCENTAGE) - * parentStyle->font().pixelSize()) / 100; - else - return; - } - - if (size < 0) return; - - // we never want to get smaller than the minimum font size to keep fonts readable - // do not however maximize zero as that is commonly used for fancy layouting purposes - if (size && size < minFontSize) size = minFontSize; - - //kdDebug( 6080 ) << "computed raw font size: " << size << endl; - - fontDef.size = size; - fontDirty |= style->setFontDef( fontDef ); - return; - } - - case CSS_PROP_Z_INDEX: - { - HANDLE_INHERIT(zIndex, ZIndex) - else if (isInitial) { - style->setHasAutoZIndex(); - return; - } - - if (!primitiveValue) - return; - - if (primitiveValue->getIdent() == CSS_VAL_AUTO) { - style->setHasAutoZIndex(); - return; - } - - if (primitiveValue->primitiveType() != CSSPrimitiveValue::CSS_NUMBER) - return; // Error case. - - style->setZIndex((int)primitiveValue->floatValue(CSSPrimitiveValue::CSS_NUMBER)); - return; - } - - case CSS_PROP_WIDOWS: - { - HANDLE_INHERIT_AND_INITIAL(widows, Widows) - if (!primitiveValue || primitiveValue->primitiveType() != CSSPrimitiveValue::CSS_NUMBER) - return; - style->setWidows((int)primitiveValue->floatValue(CSSPrimitiveValue::CSS_NUMBER)); - break; - } - - case CSS_PROP_ORPHANS: - { - HANDLE_INHERIT_AND_INITIAL(orphans, Orphans) - if (!primitiveValue || primitiveValue->primitiveType() != CSSPrimitiveValue::CSS_NUMBER) - return; - style->setOrphans((int)primitiveValue->floatValue(CSSPrimitiveValue::CSS_NUMBER)); - break; - } - -// length, percent, number - case CSS_PROP_LINE_HEIGHT: - { - HANDLE_INHERIT_AND_INITIAL(lineHeight, LineHeight) - if(!primitiveValue) return; - Length lineHeight; - int type = primitiveValue->primitiveType(); - if (primitiveValue->getIdent() == CSS_VAL_NORMAL) - lineHeight = Length( -100, Percent ); - else if (type > CSSPrimitiveValue::CSS_PERCENTAGE && type < CSSPrimitiveValue::CSS_DEG) { - // Scale for the font zoom factor only for types other than "em" and "ex", since those are - // already based on the font size. - if ( !khtml::printpainter && type != CSSPrimitiveValue::CSS_EMS && type != CSSPrimitiveValue::CSS_EXS && - view && view->part()) - lineHeight = Length(primitiveValue->computeLength(style, paintDeviceMetrics) * - view->part()->zoomFactor()/100, Fixed ); - else - lineHeight = Length(primitiveValue->computeLength(style, paintDeviceMetrics), Fixed ); - } else if (type == CSSPrimitiveValue::CSS_PERCENTAGE) - lineHeight = Length( ( style->font().pixelSize() * int(primitiveValue->floatValue(CSSPrimitiveValue::CSS_PERCENTAGE)) ) / 100, Fixed ); - else if (type == CSSPrimitiveValue::CSS_NUMBER) - lineHeight = Length(int(primitiveValue->floatValue(CSSPrimitiveValue::CSS_NUMBER)*100), Percent); - else - return; - style->setLineHeight(lineHeight); - return; - } - -// string - case CSS_PROP_TEXT_ALIGN: - { - HANDLE_INHERIT_AND_INITIAL(textAlign, TextAlign) - if (!primitiveValue) return; - if (primitiveValue->getIdent()) - style->setTextAlign( (ETextAlign) (primitiveValue->getIdent() - CSS_VAL__KHTML_AUTO) ); - return; - } - -// rect - case CSS_PROP_CLIP: - { - Length top = Length(); - Length right = Length(); - Length bottom = Length(); - Length left = Length(); - - bool hasClip = false; - - if (isInherit && parentStyle->hasClip()) { - hasClip = true; - top = parentStyle->clipTop(); - right = parentStyle->clipRight(); - bottom = parentStyle->clipBottom(); - left = parentStyle->clipLeft(); - } else if (primitiveValue && primitiveValue->primitiveType() == CSSPrimitiveValue::CSS_RECT) { - RectImpl *rect = primitiveValue->getRectValue(); - if (rect) { - hasClip = true; - top = convertToLength( rect->top(), style, paintDeviceMetrics ); - right = convertToLength( rect->right(), style, paintDeviceMetrics ); - bottom = convertToLength( rect->bottom(), style, paintDeviceMetrics ); - left = convertToLength( rect->left(), style, paintDeviceMetrics ); - } - } - - style->setClip(top, right, bottom, left); - style->setHasClip(hasClip); - - // rect, ident - break; - } - -// lists - case CSS_PROP_CONTENT: - // list of string, uri, counter, attr, i - { - // FIXME: In CSS3, it will be possible to inherit content. In CSS2 it is not. This - // note is a reminder that eventually "inherit" needs to be supported. - - // not allowed on non-generated pseudo-elements: - if ( style->styleType()==RenderStyle::FIRST_LETTER || - style->styleType()==RenderStyle::FIRST_LINE || - style->styleType()==RenderStyle::SELECTION ) - break; - - if (isInitial) { - style->setContentNormal(); - return; - } - - if (primitiveValue && primitiveValue->primitiveType() == CSSPrimitiveValue::CSS_IDENT) { - // normal | none - if (primitiveValue->getIdent() == CSS_VAL_NORMAL) - style->setContentNormal(); - else - if (primitiveValue->getIdent() == CSS_VAL_NONE) - style->setContentNone(); - else - assert(false); - return; - } - - if(!value->isValueList()) return; - CSSValueListImpl *list = static_cast<CSSValueListImpl *>(value); - int len = list->length(); - - style->setContentNormal(); // clear the content - - for(int i = 0; i < len; i++) { - CSSValueImpl *item = list->item(i); - if(!item->isPrimitiveValue()) continue; - CSSPrimitiveValueImpl *val = static_cast<CSSPrimitiveValueImpl *>(item); - if(val->primitiveType()==CSSPrimitiveValue::CSS_STRING) - { - style->addContent(val->getStringValue()); - } - else if (val->primitiveType()==CSSPrimitiveValue::CSS_ATTR) - { - // TODO: setup dynamic attribute dependencies - int attrID = element->getDocument()->getId(NodeImpl::AttributeId, val->getStringValue(), false, true); - if (attrID) - style->addContent(element->getAttribute(attrID).implementation()); - else - kdDebug(6080) << "Attribute \"" << val->getStringValue() << "\" not found" << endl; - } - else if (val->primitiveType()==CSSPrimitiveValue::CSS_URI) - { - CSSImageValueImpl *image = static_cast<CSSImageValueImpl *>(val); - style->addContent(image->image()); - } - else if (val->primitiveType()==CSSPrimitiveValue::CSS_COUNTER) - { - style->addContent(val->getCounterValue()); - } - else if (val->primitiveType()==CSSPrimitiveValue::CSS_IDENT) - { - EQuoteContent quote; - switch (val->getIdent()) { - case CSS_VAL_OPEN_QUOTE: - quote = OPEN_QUOTE; - break; - case CSS_VAL_NO_OPEN_QUOTE: - quote = NO_OPEN_QUOTE; - break; - case CSS_VAL_CLOSE_QUOTE: - quote = CLOSE_QUOTE; - break; - case CSS_VAL_NO_CLOSE_QUOTE: - quote = NO_CLOSE_QUOTE; - break; - default: - assert(false); - } - style->addContent(quote); - } else - kdDebug(6080) << "Unrecognized CSS content" << endl; - - } - break; - } - - case CSS_PROP_COUNTER_INCREMENT: { - if(!value->isValueList()) return; - - CSSValueListImpl *list = static_cast<CSSValueListImpl *>(value); - style->setCounterIncrement(list); - break; - } - case CSS_PROP_COUNTER_RESET: { - if(!value->isValueList()) return; - - CSSValueListImpl *list = static_cast<CSSValueListImpl *>(value); - style->setCounterReset(list); - break; - } - case CSS_PROP_FONT_FAMILY: - // list of strings and ids - { - if (isInherit) { - FontDef parentFontDef = parentStyle->htmlFont().fontDef; - FontDef fontDef = style->htmlFont().fontDef; - fontDef.family = parentFontDef.family; - if (style->setFontDef(fontDef)) - fontDirty = true; - return; - } - else if (isInitial) { - FontDef fontDef = style->htmlFont().fontDef; - FontDef initialDef = FontDef(); -#ifdef APPLE_CHANGES - fontDef.family = initialDef.firstFamily(); -#else - fontDef.family = TQString::null; -#endif - if (style->setFontDef(fontDef)) - fontDirty = true; - return; - } - if(!value->isValueList()) return; - FontDef fontDef = style->htmlFont().fontDef; - CSSValueListImpl *list = static_cast<CSSValueListImpl *>(value); - int len = list->length(); - for(int i = 0; i < len; i++) { - CSSValueImpl *item = list->item(i); - if(!item->isPrimitiveValue()) continue; - CSSPrimitiveValueImpl *val = static_cast<CSSPrimitiveValueImpl *>(item); - TQString face; - if( val->primitiveType() == CSSPrimitiveValue::CSS_STRING ) - face = static_cast<FontFamilyValueImpl *>(val)->fontName(); - else if ( val->primitiveType() == CSSPrimitiveValue::CSS_IDENT ) { - switch( val->getIdent() ) { - case CSS_VAL_SERIF: - face = settings->serifFontName(); - break; - case CSS_VAL_SANS_SERIF: - face = settings->sansSerifFontName(); - break; - case CSS_VAL_CURSIVE: - face = settings->cursiveFontName(); - break; - case CSS_VAL_FANTASY: - face = settings->fantasyFontName(); - break; - case CSS_VAL_MONOSPACE: - face = settings->fixedFontName(); - break; - default: - return; - } - } else { - return; - } - if ( !face.isEmpty() ) { - fontDef.family = face; - fontDirty |= style->setFontDef( fontDef ); - return; - } - } - break; - } - case CSS_PROP_QUOTES: - HANDLE_INHERIT_AND_INITIAL(quotes, Quotes) - if(primitiveValue && primitiveValue->getIdent() == CSS_VAL_NONE) { - // set a set of empty quotes - QuotesValueImpl* quotes = new QuotesValueImpl(); - style->setQuotes(quotes); - } else { - QuotesValueImpl* quotes = static_cast<QuotesValueImpl *>(value); - style->setQuotes(quotes); - } - break; - case CSS_PROP_SIZE: - // ### look up - break; - case CSS_PROP_TEXT_DECORATION: { - // list of ident - HANDLE_INHERIT_AND_INITIAL(textDecoration, TextDecoration) - int t = RenderStyle::initialTextDecoration(); - if(primitiveValue && primitiveValue->getIdent() == CSS_VAL_NONE) { - // do nothing - } else { - if(!value->isValueList()) return; - CSSValueListImpl *list = static_cast<CSSValueListImpl *>(value); - int len = list->length(); - for(int i = 0; i < len; i++) - { - CSSValueImpl *item = list->item(i); - if(!item->isPrimitiveValue()) continue; - primitiveValue = static_cast<CSSPrimitiveValueImpl *>(item); - switch(primitiveValue->getIdent()) - { - case CSS_VAL_NONE: - t = TDNONE; break; - case CSS_VAL_UNDERLINE: - t |= UNDERLINE; break; - case CSS_VAL_OVERLINE: - t |= OVERLINE; break; - case CSS_VAL_LINE_THROUGH: - t |= LINE_THROUGH; break; - case CSS_VAL_BLINK: - t |= BLINK; break; - default: - return; - } - } - } - style->setTextDecoration(t); - break; - } - case CSS_PROP__KHTML_FLOW_MODE: - HANDLE_INHERIT_AND_INITIAL(flowAroundFloats, FlowAroundFloats) - if (!primitiveValue) return; - if (primitiveValue->getIdent()) { - style->setFlowAroundFloats( primitiveValue->getIdent() == CSS_VAL__KHTML_AROUND_FLOATS ); - return; - } - break; - case CSS_PROP__KHTML_USER_INPUT: { - if(value->cssValueType() == CSSValue::CSS_INHERIT) - { - if(!parentNode) return; - style->setUserInput(parentStyle->userInput()); -// kdDebug() << "UI erm" << endl; - return; - } - if(!primitiveValue) return; - int id = primitiveValue->getIdent(); - if (id == CSS_VAL_NONE) - style->setUserInput(UI_NONE); - else - style->setUserInput(EUserInput(id - CSS_VAL_ENABLED)); -// kdDebug(6080) << "userInput: " << style->userEdit() << endl; - return; - } - -// shorthand properties - case CSS_PROP_BACKGROUND: - if (isInitial) { - style->clearBackgroundLayers(); - return; - } - else if (isInherit) { - if (parentStyle) - style->inheritBackgroundLayers(*parentStyle->backgroundLayers()); - else - style->clearBackgroundLayers(); - return; - } - break; - case CSS_PROP_BORDER: - case CSS_PROP_BORDER_STYLE: - case CSS_PROP_BORDER_WIDTH: - case CSS_PROP_BORDER_COLOR: - if(id == CSS_PROP_BORDER || id == CSS_PROP_BORDER_COLOR) - { - if (isInherit) { - style->setBorderTopColor(parentStyle->borderTopColor()); - style->setBorderBottomColor(parentStyle->borderBottomColor()); - style->setBorderLeftColor(parentStyle->borderLeftColor()); - style->setBorderRightColor(parentStyle->borderRightColor()); - } - else if (isInitial) { - style->setBorderTopColor(TQColor()); // Reset to invalid color so currentColor is used instead. - style->setBorderBottomColor(TQColor()); - style->setBorderLeftColor(TQColor()); - style->setBorderRightColor(TQColor()); - } - } - if (id == CSS_PROP_BORDER || id == CSS_PROP_BORDER_STYLE) - { - if (isInherit) { - style->setBorderTopStyle(parentStyle->borderTopStyle()); - style->setBorderBottomStyle(parentStyle->borderBottomStyle()); - style->setBorderLeftStyle(parentStyle->borderLeftStyle()); - style->setBorderRightStyle(parentStyle->borderRightStyle()); - } - else if (isInitial) { - style->setBorderTopStyle(RenderStyle::initialBorderStyle()); - style->setBorderBottomStyle(RenderStyle::initialBorderStyle()); - style->setBorderLeftStyle(RenderStyle::initialBorderStyle()); - style->setBorderRightStyle(RenderStyle::initialBorderStyle()); - } - } - if (id == CSS_PROP_BORDER || id == CSS_PROP_BORDER_WIDTH) - { - if (isInherit) { - style->setBorderTopWidth(parentStyle->borderTopWidth()); - style->setBorderBottomWidth(parentStyle->borderBottomWidth()); - style->setBorderLeftWidth(parentStyle->borderLeftWidth()); - style->setBorderRightWidth(parentStyle->borderRightWidth()); - } - else if (isInitial) { - style->setBorderTopWidth(RenderStyle::initialBorderWidth()); - style->setBorderBottomWidth(RenderStyle::initialBorderWidth()); - style->setBorderLeftWidth(RenderStyle::initialBorderWidth()); - style->setBorderRightWidth(RenderStyle::initialBorderWidth()); - } - } - return; - case CSS_PROP_BORDER_TOP: - if ( isInherit ) { - style->setBorderTopColor(parentStyle->borderTopColor()); - style->setBorderTopStyle(parentStyle->borderTopStyle()); - style->setBorderTopWidth(parentStyle->borderTopWidth()); - } else if (isInitial) - style->resetBorderTop(); - return; - case CSS_PROP_BORDER_RIGHT: - if (isInherit) { - style->setBorderRightColor(parentStyle->borderRightColor()); - style->setBorderRightStyle(parentStyle->borderRightStyle()); - style->setBorderRightWidth(parentStyle->borderRightWidth()); - } - else if (isInitial) - style->resetBorderRight(); - return; - case CSS_PROP_BORDER_BOTTOM: - if (isInherit) { - style->setBorderBottomColor(parentStyle->borderBottomColor()); - style->setBorderBottomStyle(parentStyle->borderBottomStyle()); - style->setBorderBottomWidth(parentStyle->borderBottomWidth()); - } - else if (isInitial) - style->resetBorderBottom(); - return; - case CSS_PROP_BORDER_LEFT: - if (isInherit) { - style->setBorderLeftColor(parentStyle->borderLeftColor()); - style->setBorderLeftStyle(parentStyle->borderLeftStyle()); - style->setBorderLeftWidth(parentStyle->borderLeftWidth()); - } - else if (isInitial) - style->resetBorderLeft(); - return; - case CSS_PROP_MARGIN: - if (isInherit) { - style->setMarginTop(parentStyle->marginTop()); - style->setMarginBottom(parentStyle->marginBottom()); - style->setMarginLeft(parentStyle->marginLeft()); - style->setMarginRight(parentStyle->marginRight()); - } - else if (isInitial) - style->resetMargin(); - return; - case CSS_PROP_PADDING: - if (isInherit) { - style->setPaddingTop(parentStyle->paddingTop()); - style->setPaddingBottom(parentStyle->paddingBottom()); - style->setPaddingLeft(parentStyle->paddingLeft()); - style->setPaddingRight(parentStyle->paddingRight()); - } - else if (isInitial) - style->resetPadding(); - return; - case CSS_PROP_FONT: - if ( isInherit ) { - FontDef fontDef = parentStyle->htmlFont().fontDef; - style->setLineHeight( parentStyle->lineHeight() ); - fontDirty |= style->setFontDef( fontDef ); - } else if (isInitial) { - FontDef fontDef; - style->setLineHeight(RenderStyle::initialLineHeight()); - if (style->setFontDef( fontDef )) - fontDirty = true; - } else if ( value->isFontValue() ) { - FontValueImpl *font = static_cast<FontValueImpl *>(value); - if ( !font->style || !font->variant || !font->weight || - !font->size || !font->lineHeight || !font->family ) - return; - applyRule( CSS_PROP_FONT_STYLE, font->style ); - applyRule( CSS_PROP_FONT_VARIANT, font->variant ); - applyRule( CSS_PROP_FONT_WEIGHT, font->weight ); - applyRule( CSS_PROP_FONT_SIZE, font->size ); - - // Line-height can depend on font().pixelSize(), so we have to update the font - // before we evaluate line-height, e.g., font: 1em/1em. FIXME: Still not - // good enough: style="font:1em/1em; font-size:36px" should have a line-height of 36px. - if (fontDirty) - CSSStyleSelector::style->htmlFont().update( paintDeviceMetrics ); - - applyRule( CSS_PROP_LINE_HEIGHT, font->lineHeight ); - applyRule( CSS_PROP_FONT_FAMILY, font->family ); - } - return; - - case CSS_PROP_LIST_STYLE: - if (isInherit) { - style->setListStyleType(parentStyle->listStyleType()); - style->setListStyleImage(parentStyle->listStyleImage()); - style->setListStylePosition(parentStyle->listStylePosition()); - } - else if (isInitial) { - style->setListStyleType(RenderStyle::initialListStyleType()); - style->setListStyleImage(RenderStyle::initialListStyleImage()); - style->setListStylePosition(RenderStyle::initialListStylePosition()); - } - break; - case CSS_PROP_OUTLINE: - if (isInherit) { - style->setOutlineWidth(parentStyle->outlineWidth()); - style->setOutlineColor(parentStyle->outlineColor()); - style->setOutlineStyle(parentStyle->outlineStyle()); - } - else if (isInitial) - style->resetOutline(); - break; - /* CSS3 properties */ - case CSS_PROP_BOX_SIZING: - HANDLE_INHERIT(boxSizing, BoxSizing) - if (!primitiveValue) return; - if (primitiveValue->getIdent() == CSS_VAL_CONTENT_BOX) - style->setBoxSizing(CONTENT_BOX); - else - if (primitiveValue->getIdent() == CSS_VAL_BORDER_BOX) - style->setBoxSizing(BORDER_BOX); - break; - case CSS_PROP_OUTLINE_OFFSET: { - HANDLE_INHERIT_AND_INITIAL(outlineOffset, OutlineOffset) - - int offset = primitiveValue->computeLength(style, paintDeviceMetrics); - if (offset < 0) return; - - style->setOutlineOffset(offset); - break; - } - case CSS_PROP_TEXT_SHADOW: { - if (isInherit) { - style->setTextShadow(parentStyle->textShadow() ? new ShadowData(*parentStyle->textShadow()) : 0); - return; - } - else if (isInitial) { - style->setTextShadow(0); - return; - } - - if (primitiveValue) { // none - style->setTextShadow(0); - return; - } - - if (!value->isValueList()) return; - CSSValueListImpl *list = static_cast<CSSValueListImpl *>(value); - int len = list->length(); - for (int i = 0; i < len; i++) { - ShadowValueImpl *item = static_cast<ShadowValueImpl*>(list->item(i)); - - int x = item->x->computeLength(style, paintDeviceMetrics); - int y = item->y->computeLength(style, paintDeviceMetrics); - int blur = item->blur ? item->blur->computeLength(style, paintDeviceMetrics) : 0; - TQColor col = khtml::transparentColor; - if (item->color) { - int ident = item->color->getIdent(); - if (ident) - col = colorForCSSValue( ident ); - else if (item->color->primitiveType() == CSSPrimitiveValue::CSS_RGBCOLOR) - col.setRgb(item->color->getRGBColorValue()); - } - ShadowData* shadowData = new ShadowData(x, y, blur, col); - style->setTextShadow(shadowData, i != 0); - } - - break; - } - case CSS_PROP_OPACITY: - HANDLE_INHERIT_AND_INITIAL(opacity, Opacity) - if (!primitiveValue || primitiveValue->primitiveType() != CSSPrimitiveValue::CSS_NUMBER) - return; // Error case. - - // Clamp opacity to the range 0-1 - style->setOpacity(kMin(1.0f, kMax(0.0f, (float)primitiveValue->floatValue(CSSPrimitiveValue::CSS_NUMBER)))); - break; - case CSS_PROP__KHTML_MARQUEE: - if (value->cssValueType() != CSSValue::CSS_INHERIT || !parentNode) return; - style->setMarqueeDirection(parentStyle->marqueeDirection()); - style->setMarqueeIncrement(parentStyle->marqueeIncrement()); - style->setMarqueeSpeed(parentStyle->marqueeSpeed()); - style->setMarqueeLoopCount(parentStyle->marqueeLoopCount()); - style->setMarqueeBehavior(parentStyle->marqueeBehavior()); - break; - case CSS_PROP__KHTML_MARQUEE_REPETITION: { - HANDLE_INHERIT_AND_INITIAL(marqueeLoopCount, MarqueeLoopCount) - if (!primitiveValue) return; - if (primitiveValue->getIdent() == CSS_VAL_INFINITE) - style->setMarqueeLoopCount(-1); // -1 means repeat forever. - else if (primitiveValue->primitiveType() == CSSPrimitiveValue::CSS_NUMBER) - style->setMarqueeLoopCount((int)(primitiveValue->floatValue(CSSPrimitiveValue::CSS_NUMBER))); - break; - } - case CSS_PROP__KHTML_MARQUEE_SPEED: { - HANDLE_INHERIT_AND_INITIAL(marqueeSpeed, MarqueeSpeed) - if (!primitiveValue) return; - if (primitiveValue->getIdent()) { - switch (primitiveValue->getIdent()) - { - case CSS_VAL_SLOW: - style->setMarqueeSpeed(500); // 500 msec. - break; - case CSS_VAL_NORMAL: - style->setMarqueeSpeed(85); // 85msec. The WinIE default. - break; - case CSS_VAL_FAST: - style->setMarqueeSpeed(10); // 10msec. Super fast. - break; - } - } - else if (primitiveValue->primitiveType() == CSSPrimitiveValue::CSS_S) - style->setMarqueeSpeed(int(1000*primitiveValue->floatValue(CSSPrimitiveValue::CSS_S))); - else if (primitiveValue->primitiveType() == CSSPrimitiveValue::CSS_MS) - style->setMarqueeSpeed(int(primitiveValue->floatValue(CSSPrimitiveValue::CSS_MS))); - else if (primitiveValue->primitiveType() == CSSPrimitiveValue::CSS_NUMBER) // For scrollamount support. - style->setMarqueeSpeed(int(primitiveValue->floatValue(CSSPrimitiveValue::CSS_NUMBER))); - break; - } - case CSS_PROP__KHTML_MARQUEE_INCREMENT: { - HANDLE_INHERIT_AND_INITIAL(marqueeIncrement, MarqueeIncrement) - if (!primitiveValue) return; - if (primitiveValue->getIdent()) { - switch (primitiveValue->getIdent()) - { - case CSS_VAL_SMALL: - style->setMarqueeIncrement(Length(1, Fixed)); // 1px. - break; - case CSS_VAL_NORMAL: - style->setMarqueeIncrement(Length(6, Fixed)); // 6px. The WinIE default. - break; - case CSS_VAL_LARGE: - style->setMarqueeIncrement(Length(36, Fixed)); // 36px. - break; - } - } - else { - bool ok = true; - Length l = convertToLength(primitiveValue, style, paintDeviceMetrics, &ok); - if (ok) - style->setMarqueeIncrement(l); - } - break; - } - case CSS_PROP__KHTML_MARQUEE_STYLE: { - HANDLE_INHERIT_AND_INITIAL(marqueeBehavior, MarqueeBehavior) - if (!primitiveValue || !primitiveValue->getIdent()) return; - switch (primitiveValue->getIdent()) - { - case CSS_VAL_NONE: - style->setMarqueeBehavior(MNONE); - break; - case CSS_VAL_SCROLL: - style->setMarqueeBehavior(MSCROLL); - break; - case CSS_VAL_SLIDE: - style->setMarqueeBehavior(MSLIDE); - break; - case CSS_VAL_ALTERNATE: - style->setMarqueeBehavior(MALTERNATE); - break; - case CSS_VAL_UNFURL: - style->setMarqueeBehavior(MUNFURL); - break; - } - break; - } - case CSS_PROP__KHTML_MARQUEE_DIRECTION: { - HANDLE_INHERIT_AND_INITIAL(marqueeDirection, MarqueeDirection) - if (!primitiveValue || !primitiveValue->getIdent()) return; - switch (primitiveValue->getIdent()) - { - case CSS_VAL_FORWARDS: - style->setMarqueeDirection(MFORWARD); - break; - case CSS_VAL_BACKWARDS: - style->setMarqueeDirection(MBACKWARD); - break; - case CSS_VAL_AUTO: - style->setMarqueeDirection(MAUTO); - break; - case CSS_VAL_AHEAD: - case CSS_VAL_UP: // We don't support vertical languages, so AHEAD just maps to UP. - style->setMarqueeDirection(MUP); - break; - case CSS_VAL_REVERSE: - case CSS_VAL_DOWN: // REVERSE just maps to DOWN, since we don't do vertical text. - style->setMarqueeDirection(MDOWN); - break; - case CSS_VAL_LEFT: - style->setMarqueeDirection(MLEFT); - break; - case CSS_VAL_RIGHT: - style->setMarqueeDirection(MRIGHT); - break; - } - break; - case CSS_PROP_TEXT_OVERFLOW: { - // This property is supported by WinIE, and so we leave off the "-khtml-" in order to - // work with WinIE-specific pages that use the property. - HANDLE_INHERIT_AND_INITIAL(textOverflow, TextOverflow) - if (!primitiveValue || !primitiveValue->getIdent()) - return; - style->setTextOverflow(primitiveValue->getIdent() == CSS_VAL_ELLIPSIS); - break; - } - } - case CSS_PROP_WORD_WRAP: { - HANDLE_INITIAL_AND_INHERIT_ON_INHERITED_PROPERTY(wordWrap, WordWrap) - if (!primitiveValue) - return; - style->setWordWrap(primitiveValue->getIdent() == CSS_VAL_NORMAL ? WWNORMAL : WWBREAKWORD); - break; - } - default: - return; - } -} - -void CSSStyleSelector::mapBackgroundAttachment(BackgroundLayer* layer, DOM::CSSValueImpl* value) -{ - if (value->cssValueType() == CSSValue::CSS_INITIAL) { - layer->setBackgroundAttachment(RenderStyle::initialBackgroundAttachment()); - return; - } - - if (!value->isPrimitiveValue()) return; - CSSPrimitiveValueImpl* primitiveValue = static_cast<CSSPrimitiveValueImpl*>(value); - switch (primitiveValue->getIdent()) { - case CSS_VAL_FIXED: - layer->setBackgroundAttachment(false); - break; - case CSS_VAL_SCROLL: - layer->setBackgroundAttachment(true); - break; - default: - return; - } -} - -void CSSStyleSelector::mapBackgroundClip(BackgroundLayer* layer, CSSValueImpl* value) -{ - if (value->cssValueType() == CSSValue::CSS_INITIAL) { - layer->setBackgroundClip(RenderStyle::initialBackgroundClip()); - return; - } - - if (!value->isPrimitiveValue()) return; - CSSPrimitiveValueImpl* primitiveValue = static_cast<CSSPrimitiveValueImpl*>(value); - switch (primitiveValue->getIdent()) { - case CSS_VAL_BORDER: - layer->setBackgroundClip(BGBORDER); - break; - case CSS_VAL_PADDING: - layer->setBackgroundClip(BGPADDING); - break; - default: // CSS_VAL_CONTENT - layer->setBackgroundClip(BGCONTENT); - break; - } -} - -void CSSStyleSelector::mapBackgroundOrigin(BackgroundLayer* layer, CSSValueImpl* value) -{ - if (value->cssValueType() == CSSValue::CSS_INITIAL) { - layer->setBackgroundOrigin(RenderStyle::initialBackgroundOrigin()); - return; - } - - if (!value->isPrimitiveValue()) return; - CSSPrimitiveValueImpl* primitiveValue = static_cast<CSSPrimitiveValueImpl*>(value); - switch (primitiveValue->getIdent()) { - case CSS_VAL_BORDER: - layer->setBackgroundOrigin(BGBORDER); - break; - case CSS_VAL_PADDING: - layer->setBackgroundOrigin(BGPADDING); - break; - default: // CSS_VAL_CONTENT - layer->setBackgroundOrigin(BGCONTENT); - break; - } -} - -void CSSStyleSelector::mapBackgroundImage(BackgroundLayer* layer, DOM::CSSValueImpl* value) -{ - if (value->cssValueType() == CSSValue::CSS_INITIAL) { - layer->setBackgroundImage(RenderStyle::initialBackgroundImage()); - return; - } - - if (!value->isPrimitiveValue()) return; - CSSPrimitiveValueImpl* primitiveValue = static_cast<CSSPrimitiveValueImpl*>(value); - layer->setBackgroundImage(static_cast<CSSImageValueImpl *>(primitiveValue)->image()); -} - -void CSSStyleSelector::mapBackgroundRepeat(BackgroundLayer* layer, DOM::CSSValueImpl* value) -{ - if (value->cssValueType() == CSSValue::CSS_INITIAL) { - layer->setBackgroundRepeat(RenderStyle::initialBackgroundRepeat()); - return; - } - - if (!value->isPrimitiveValue()) return; - CSSPrimitiveValueImpl* primitiveValue = static_cast<CSSPrimitiveValueImpl*>(value); - switch(primitiveValue->getIdent()) { - case CSS_VAL_REPEAT: - layer->setBackgroundRepeat(REPEAT); - break; - case CSS_VAL_REPEAT_X: - layer->setBackgroundRepeat(REPEAT_X); - break; - case CSS_VAL_REPEAT_Y: - layer->setBackgroundRepeat(REPEAT_Y); - break; - case CSS_VAL_NO_REPEAT: - layer->setBackgroundRepeat(NO_REPEAT); - break; - default: - return; - } -} - - -void CSSStyleSelector::mapBackgroundSize(BackgroundLayer* layer, CSSValueImpl* value) -{ - LengthSize b = RenderStyle::initialBackgroundSize(); - - if (value->cssValueType() == CSSValue::CSS_INITIAL) { - layer->setBackgroundSize(b); - return; - } - - if (!value->isPrimitiveValue()) - return; - - CSSPrimitiveValueImpl* primitiveValue = static_cast<CSSPrimitiveValueImpl*>(value); - PairImpl* pair = primitiveValue->getPairValue(); - if (!pair) - return; - - CSSPrimitiveValueImpl* first = static_cast<CSSPrimitiveValueImpl*>(pair->first()); - CSSPrimitiveValueImpl* second = static_cast<CSSPrimitiveValueImpl*>(pair->second()); - - if (!first || !second) - return; - - Length firstLength, secondLength; - int firstType = first->primitiveType(); - int secondType = second->primitiveType(); - - if (firstType == CSSPrimitiveValue::CSS_UNKNOWN) - firstLength = Length(Variable); - else if (firstType > CSSPrimitiveValue::CSS_PERCENTAGE && firstType < CSSPrimitiveValue::CSS_DEG) - firstLength = Length(first->computeLength(style, paintDeviceMetrics), Fixed); - else if (firstType == CSSPrimitiveValue::CSS_PERCENTAGE) - firstLength = Length((int)first->floatValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent); - else - return; - - if (secondType == CSSPrimitiveValue::CSS_UNKNOWN) - secondLength = Length(Variable); - else if (secondType > CSSPrimitiveValue::CSS_PERCENTAGE && secondType < CSSPrimitiveValue::CSS_DEG) - secondLength = Length(second->computeLength(style, paintDeviceMetrics), Fixed); - else if (secondType == CSSPrimitiveValue::CSS_PERCENTAGE) - secondLength = Length((int)second->floatValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent); - else - return; - - b.width = firstLength; - b.height = secondLength; - layer->setBackgroundSize(b); -} - -void CSSStyleSelector::mapBackgroundXPosition(BackgroundLayer* layer, DOM::CSSValueImpl* value) -{ - if (value->cssValueType() == CSSValue::CSS_INITIAL) { - layer->setBackgroundXPosition(RenderStyle::initialBackgroundXPosition()); - return; - } - - if (!value->isPrimitiveValue()) return; - CSSPrimitiveValueImpl* primitiveValue = static_cast<CSSPrimitiveValueImpl*>(value); - Length l; - int type = primitiveValue->primitiveType(); - if(type > CSSPrimitiveValue::CSS_PERCENTAGE && type < CSSPrimitiveValue::CSS_DEG) - l = Length(primitiveValue->computeLength(style, paintDeviceMetrics), Fixed); - else if(type == CSSPrimitiveValue::CSS_PERCENTAGE) - l = Length((int)primitiveValue->floatValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent); - else - return; - layer->setBackgroundXPosition(l); -} - -void CSSStyleSelector::mapBackgroundYPosition(BackgroundLayer* layer, DOM::CSSValueImpl* value) -{ - if (value->cssValueType() == CSSValue::CSS_INITIAL) { - layer->setBackgroundYPosition(RenderStyle::initialBackgroundYPosition()); - return; - } - - if (!value->isPrimitiveValue()) return; - CSSPrimitiveValueImpl* primitiveValue = static_cast<CSSPrimitiveValueImpl*>(value); - Length l; - int type = primitiveValue->primitiveType(); - if(type > CSSPrimitiveValue::CSS_PERCENTAGE && type < CSSPrimitiveValue::CSS_DEG) - l = Length(primitiveValue->computeLength(style, paintDeviceMetrics), Fixed); - else if(type == CSSPrimitiveValue::CSS_PERCENTAGE) - l = Length((int)primitiveValue->floatValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent); - else - return; - layer->setBackgroundYPosition(l); -} - -#ifdef APPLE_CHANGES -void CSSStyleSelector::checkForGenericFamilyChange(RenderStyle* aStyle, RenderStyle* aParentStyle) -{ - const FontDef& childFont = aStyle->htmlFont().fontDef; - - if (childFont.sizeSpecified || !aParentStyle) - return; - - const FontDef& parentFont = aParentStyle->htmlFont().fontDef; - - if (childFont.genericFamily == parentFont.genericFamily) - return; - - // For now, lump all families but monospace together. - if (childFont.genericFamily != FontDef::eMonospace && - parentFont.genericFamily != FontDef::eMonospace) - return; - - // We know the parent is monospace or the child is monospace, and that font - // size was unspecified. We want to alter our font size to use the correct - // "medium" font for our family. - float size = 0; - int minFontSize = settings->minFontSize(); - size = (childFont.genericFamily == FontDef::eMonospace) ? m_fixedFontSizes[3] : m_fontSizes[3]; - int isize = (int)size; - if (isize < minFontSize) - isize = minFontSize; - - FontDef newFontDef(childFont); - newFontDef.size = isize; - aStyle->setFontDef(newFontDef); -} -#endif - -} // namespace khtml diff --git a/khtml/css/cssstyleselector.h b/khtml/css/cssstyleselector.h deleted file mode 100644 index 1b076337e..000000000 --- a/khtml/css/cssstyleselector.h +++ /dev/null @@ -1,333 +0,0 @@ -/* - * This file is part of the CSS implementation for KDE. - * - * Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org) - * Copyright (C) 2003, 2005, 2006 Apple Computer, Inc. - * - * 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. - * - */ -#ifndef _CSS_cssstyleselector_h_ -#define _CSS_cssstyleselector_h_ - -#include <tqptrlist.h> -#include <tqvaluevector.h> - -#include "rendering/render_style.h" -#include "dom/dom_string.h" -#include "xml/dom_restyler.h" - -class KHTMLSettings; -class KHTMLView; -class KHTMLPart; -class KHTMLFactory; -class KURL; - -namespace DOM { - class DocumentImpl; - class NodeImpl; - class ElementImpl; - class StyleSheetImpl; - class CSSStyleRuleImpl; - class CSSStyleSheetImpl; - class CSSSelector; - class CSSStyleDeclarationImpl; - class CSSProperty; - class StyleSheetListImpl; - class CSSValueImpl; -} - -namespace khtml -{ - class CSSStyleSelectorList; - class CSSOrderedRule; - class CSSOrderedProperty; - class CSSOrderedPropertyList; - class RenderStyle; - - /* - * to remember the source where a rule came from. Differentiates between - * important and not important rules. This is ordered in the order they have to be applied - * to the RenderStyle. - */ - enum Source { - Default = 0, - NonCSSHint = 1, - User = 2, - Author = 3, - Inline = 4, - AuthorImportant = 5, - InlineImportant = 6, - UserImportant =7 - }; - - /** - * this class selects a RenderStyle for a given Element based on the - * collection of stylesheets it contains. This is just a virtual base class - * for specific implementations of the Selector. At the moment only CSSStyleSelector - * exists, but someone may wish to implement XSL... - */ - class StyleSelector - { - public: - StyleSelector() {} - - /* as nobody has implemented a second style selector up to now comment out - the virtual methods until then, so the class has no vptr. - */ -// virtual ~StyleSelector() {} -// virtual RenderStyle *styleForElement(DOM::ElementImpl *e) = 0; - - enum State { - None = 0x00, - Hover = 0x01, - Focus = 0x02, - Active = 0x04 - }; - }; - - - /** - * the StyleSelector implementation for CSS. - */ - class CSSStyleSelector : public StyleSelector - { - public: - /** - * creates a new StyleSelector for a Document. - * goes through all StyleSheets defined in the document and - * creates a list of rules it needs to apply to objects - * - * Also takes into account special cases for HTML documents, - * including the defaultStyle (which is html only) - */ - CSSStyleSelector( DOM::DocumentImpl* doc, TQString userStyleSheet, DOM::StyleSheetListImpl *styleSheets, const KURL &url, - bool _strictParsing ); - /** - * same as above but for a single stylesheet. - */ - CSSStyleSelector( DOM::CSSStyleSheetImpl *sheet ); - - ~CSSStyleSelector(); - - void addSheet( DOM::CSSStyleSheetImpl *sheet ); - KDE_EXPORT static void clear(); - static void reparseConfiguration(); - - static void loadDefaultStyle(const KHTMLSettings *s, DOM::DocumentImpl *doc); - - RenderStyle *styleForElement(DOM::ElementImpl *e); - - TQValueVector<int> fontSizes() const { return m_fontSizes; } - TQValueVector<int> fixedFontSizes() const { return m_fixedFontSizes; } - - bool strictParsing; - struct Encodedurl { - TQString host; //also contains protocol - TQString path; - TQString file; - } encodedurl; - - void computeFontSizes(TQPaintDeviceMetrics* paintDeviceMetrics, int zoomFactor); - void computeFontSizesFor(TQPaintDeviceMetrics* paintDeviceMetrics, int zoomFactor, TQValueVector<int>& fontSizes, bool isFixed); - - static void precomputeAttributeDependencies(DOM::DocumentImpl* doc, DOM::CSSSelector* sel); - protected: - /* checks if the complete selector (which can be build up from a few CSSSelector's - with given relationships matches the given Element */ - void checkSelector(int selector, DOM::ElementImpl *e); - /* checks if the selector matches the given Element */ - bool checkSimpleSelector(DOM::CSSSelector *selector, DOM::ElementImpl *e, bool isAncestor, bool isSubSelector = false); - - enum SelectorMatch {SelectorMatches = 0, SelectorFailsLocal, SelectorFails}; - SelectorMatch checkSelector(DOM::CSSSelector *sel, DOM::ElementImpl *e, bool isAncestor, bool isSubSelector = false); - - void addDependency(StructuralDependencyType dependencyType, DOM::ElementImpl* dependency); -#ifdef APPLE_CHANGES - /* This function fixes up the default font size if it detects that the - current generic font family has changed. -dwh */ - void checkForGenericFamilyChange(RenderStyle* aStyle, RenderStyle* aParentStyle); -#endif - - /* builds up the selectors and properties lists from the CSSStyleSelectorList's */ - void buildLists(); - void clearLists(); - - void adjustRenderStyle(RenderStyle* style, DOM::ElementImpl *e); - - unsigned int addInlineDeclarations(DOM::ElementImpl* e, DOM::CSSStyleDeclarationImpl *decl, - unsigned int numProps); - - static DOM::CSSStyleSheetImpl *s_defaultSheet; - static DOM::CSSStyleSheetImpl *s_quirksSheet; - static CSSStyleSelectorList *s_defaultStyle; - static CSSStyleSelectorList *s_defaultQuirksStyle; - static CSSStyleSelectorList *s_defaultPrintStyle; - static RenderStyle* styleNotYetAvailable; - - CSSStyleSelectorList *defaultStyle; - CSSStyleSelectorList *defaultQuirksStyle; - CSSStyleSelectorList *defaultPrintStyle; - - CSSStyleSelectorList *authorStyle; - CSSStyleSelectorList *userStyle; - DOM::CSSStyleSheetImpl *userSheet; - -public: - - private: - void init(const KHTMLSettings* settings, DOM::DocumentImpl* doc); - - void mapBackgroundAttachment(BackgroundLayer* layer, DOM::CSSValueImpl* value); - void mapBackgroundClip(BackgroundLayer* layer, DOM::CSSValueImpl* value); - void mapBackgroundOrigin(BackgroundLayer* layer, DOM::CSSValueImpl* value); - void mapBackgroundImage(BackgroundLayer* layer, DOM::CSSValueImpl* value); - void mapBackgroundRepeat(BackgroundLayer* layer, DOM::CSSValueImpl* value); - void mapBackgroundSize(BackgroundLayer* layer, DOM::CSSValueImpl* value); - void mapBackgroundXPosition(BackgroundLayer* layer, DOM::CSSValueImpl* value); - void mapBackgroundYPosition(BackgroundLayer* layer, DOM::CSSValueImpl* value); - - public: // we need to make the enum public for SelectorCache - enum SelectorState { - Unknown = 0, - Applies, - AppliesPseudo, - Invalid - }; - - enum SelectorMedia { - MediaAural = 1, - MediaBraille, - MediaEmboss, - MediaHandheld, - MediaPrint, - MediaProjection, - MediaScreen, - MediaTTY, - MediaTV - }; - protected: - - struct SelectorCache { - SelectorState state; - unsigned int props_size; - int *props; - }; - - unsigned int selectors_size; - DOM::CSSSelector **selectors; - SelectorCache *selectorCache; - unsigned int properties_size; - CSSOrderedProperty **properties; - TQMemArray<CSSOrderedProperty> inlineProps; - TQString m_medium; - CSSOrderedProperty **propsToApply; - CSSOrderedProperty **pseudoProps; - unsigned int propsToApplySize; - unsigned int pseudoPropsSize; - - - RenderStyle::PseudoId dynamicPseudo; - - RenderStyle *style; - RenderStyle *parentStyle; - DOM::ElementImpl *element; - DOM::NodeImpl *parentNode; - KHTMLView *view; - KHTMLPart *part; - const KHTMLSettings *settings; - TQPaintDeviceMetrics *paintDeviceMetrics; - TQValueVector<int> m_fontSizes; - TQValueVector<int> m_fixedFontSizes; - - bool fontDirty; - - void applyRule(int id, DOM::CSSValueImpl *value); - }; - - /* - * List of properties that get applied to the Element. We need to collect them first - * and then apply them one by one, because we have to change the apply order. - * Some properties depend on other one already being applied (for example all properties specifying - * some length need to have already the correct font size. Same applies to color - * - * While sorting them, we have to take care not to mix up the original order. - */ - class CSSOrderedProperty - { - public: - CSSOrderedProperty(DOM::CSSProperty *_prop, uint _selector, - bool first, Source source, unsigned int specificity, - unsigned int _position ) - : prop ( _prop ), pseudoId( RenderStyle::NOPSEUDO ), selector( _selector ), - position( _position ) - { - priority = (!first << 30) | (source << 24) | specificity; - } - - bool operator < ( const CSSOrderedProperty &other ) const { - if (priority < other.priority) return true; - if (priority > other.priority) return false; - if (position < other.position) return true; - return false; - } - - DOM::CSSProperty *prop; - RenderStyle::PseudoId pseudoId; - unsigned int selector; - unsigned int position; - - TQ_UINT32 priority; - }; - - /* - * This is the list we will collect all properties we need to apply in. - * It will get sorted once before applying. - */ - class CSSOrderedPropertyList : public TQPtrList<CSSOrderedProperty> - { - public: - virtual int compareItems(TQPtrCollection::Item i1, TQPtrCollection::Item i2); - void append(DOM::CSSStyleDeclarationImpl *decl, uint selector, uint specificity, - Source regular, Source important ); - }; - - class CSSOrderedRule - { - public: - CSSOrderedRule(DOM::CSSStyleRuleImpl *r, DOM::CSSSelector *s, int _index); - ~CSSOrderedRule(); - - DOM::CSSSelector *selector; - DOM::CSSStyleRuleImpl *rule; - int index; - }; - - class CSSStyleSelectorList : public TQPtrList<CSSOrderedRule> - { - public: - CSSStyleSelectorList(); - virtual ~CSSStyleSelectorList(); - - void append( DOM::CSSStyleSheetImpl *sheet, - const DOM::DOMString &medium = "screen" ); - - void collect( TQPtrList<DOM::CSSSelector> *selectorList, CSSOrderedPropertyList *propList, - Source regular, Source important ); - }; - -} -#endif diff --git a/khtml/css/cssvalues.c b/khtml/css/cssvalues.c deleted file mode 100644 index 7368d1869..000000000 --- a/khtml/css/cssvalues.c +++ /dev/null @@ -1,1344 +0,0 @@ -/* ANSI-C code produced by gperf version 3.0.2 */ -/* Command-line: gperf -L ANSI-C -E -c -C -n -o -t -k '*' -NfindValue -Hhash_val -Wwordlist_value -D cssvalues.gperf */ - -#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ - && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ - && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ - && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ - && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ - && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ - && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ - && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ - && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ - && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ - && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ - && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ - && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ - && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ - && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ - && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ - && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ - && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ - && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ - && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ - && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ - && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ - && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) -/* The character set is not based on ISO-646. */ -#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>." -#endif - -#line 1 "cssvalues.gperf" - -/* This file is automatically generated from cssvalues.in by makevalues, do not edit */ -/* Copyright 1999 W. Bastian */ -#include "cssvalues.h" -#line 6 "cssvalues.gperf" -struct css_value { - const char *name; - int id; -}; - -static const css_value* findValue (register const char *str, register unsigned int len); -/* maximum key range = 2876, duplicates = 0 */ - -#ifdef __GNUC__ -__inline -#else -#ifdef __cplusplus -inline -#endif -#endif -static unsigned int -hash_val (register const char *str, register unsigned int len) -{ - static const unsigned short asso_values[] = - { - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 420, 23, 2876, 0, 0, - 105, 100, 40, 35, 20, 15, 10, 5, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 175, 60, 0, - 20, 45, 18, 380, 270, 5, 3, 65, 0, 35, - 0, 5, 265, 465, 100, 20, 5, 195, 18, 13, - 3, 133, 10, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, 2876, - 2876, 2876, 2876, 2876, 2876, 2876, 2876 - }; - register int hval = 0; - - switch (len) - { - default: - hval += asso_values[(unsigned char)str[27]]; - /*FALLTHROUGH*/ - case 27: - hval += asso_values[(unsigned char)str[26]]; - /*FALLTHROUGH*/ - case 26: - hval += asso_values[(unsigned char)str[25]]; - /*FALLTHROUGH*/ - case 25: - hval += asso_values[(unsigned char)str[24]]; - /*FALLTHROUGH*/ - case 24: - hval += asso_values[(unsigned char)str[23]]; - /*FALLTHROUGH*/ - case 23: - hval += asso_values[(unsigned char)str[22]]; - /*FALLTHROUGH*/ - case 22: - hval += asso_values[(unsigned char)str[21]]; - /*FALLTHROUGH*/ - case 21: - hval += asso_values[(unsigned char)str[20]]; - /*FALLTHROUGH*/ - case 20: - hval += asso_values[(unsigned char)str[19]]; - /*FALLTHROUGH*/ - case 19: - hval += asso_values[(unsigned char)str[18]]; - /*FALLTHROUGH*/ - case 18: - hval += asso_values[(unsigned char)str[17]]; - /*FALLTHROUGH*/ - case 17: - hval += asso_values[(unsigned char)str[16]]; - /*FALLTHROUGH*/ - case 16: - hval += asso_values[(unsigned char)str[15]]; - /*FALLTHROUGH*/ - case 15: - hval += asso_values[(unsigned char)str[14]]; - /*FALLTHROUGH*/ - case 14: - hval += asso_values[(unsigned char)str[13]]; - /*FALLTHROUGH*/ - case 13: - hval += asso_values[(unsigned char)str[12]]; - /*FALLTHROUGH*/ - case 12: - hval += asso_values[(unsigned char)str[11]]; - /*FALLTHROUGH*/ - case 11: - hval += asso_values[(unsigned char)str[10]]; - /*FALLTHROUGH*/ - case 10: - hval += asso_values[(unsigned char)str[9]]; - /*FALLTHROUGH*/ - case 9: - hval += asso_values[(unsigned char)str[8]]; - /*FALLTHROUGH*/ - case 8: - hval += asso_values[(unsigned char)str[7]]; - /*FALLTHROUGH*/ - case 7: - hval += asso_values[(unsigned char)str[6]]; - /*FALLTHROUGH*/ - case 6: - hval += asso_values[(unsigned char)str[5]]; - /*FALLTHROUGH*/ - case 5: - hval += asso_values[(unsigned char)str[4]]; - /*FALLTHROUGH*/ - case 4: - hval += asso_values[(unsigned char)str[3]]; - /*FALLTHROUGH*/ - case 3: - hval += asso_values[(unsigned char)str[2]+1]; - /*FALLTHROUGH*/ - case 2: - hval += asso_values[(unsigned char)str[1]]; - /*FALLTHROUGH*/ - case 1: - hval += asso_values[(unsigned char)str[0]]; - break; - } - return hval; -} - -#ifdef __GNUC__ -__inline -#endif -const struct css_value * -findValue (register const char *str, register unsigned int len) -{ - enum - { - TOTAL_KEYWORDS = 275, - MIN_WORD_LENGTH = 2, - MAX_WORD_LENGTH = 28, - MIN_HASH_VALUE = 0, - MAX_HASH_VALUE = 2875 - }; - - static const struct css_value wordlist_value[] = - { -#line 40 "cssvalues.gperf" - {"100", CSS_VAL_100}, -#line 48 "cssvalues.gperf" - {"900", CSS_VAL_900}, -#line 47 "cssvalues.gperf" - {"800", CSS_VAL_800}, -#line 46 "cssvalues.gperf" - {"700", CSS_VAL_700}, -#line 45 "cssvalues.gperf" - {"600", CSS_VAL_600}, -#line 216 "cssvalues.gperf" - {"ltr", CSS_VAL_LTR}, -#line 277 "cssvalues.gperf" - {"down", CSS_VAL_DOWN}, -#line 146 "cssvalues.gperf" - {"disc", CSS_VAL_DISC}, -#line 44 "cssvalues.gperf" - {"500", CSS_VAL_500}, -#line 43 "cssvalues.gperf" - {"400", CSS_VAL_400}, -#line 252 "cssvalues.gperf" - {"loud", CSS_VAL_LOUD}, -#line 259 "cssvalues.gperf" - {"scroll", CSS_VAL_SCROLL}, -#line 83 "cssvalues.gperf" - {"lime", CSS_VAL_LIME}, -#line 17 "cssvalues.gperf" - {"none", CSS_VAL_NONE}, -#line 19 "cssvalues.gperf" - {"inset", CSS_VAL_INSET}, -#line 118 "cssvalues.gperf" - {"window", CSS_VAL_WINDOW}, -#line 287 "cssvalues.gperf" - {"content", CSS_VAL_CONTENT}, -#line 147 "cssvalues.gperf" - {"circle", CSS_VAL_CIRCLE}, -#line 86 "cssvalues.gperf" - {"olive", CSS_VAL_OLIVE}, -#line 33 "cssvalues.gperf" - {"italic", CSS_VAL_ITALIC}, -#line 145 "cssvalues.gperf" - {"inside", CSS_VAL_INSIDE}, -#line 25 "cssvalues.gperf" - {"solid", CSS_VAL_SOLID}, -#line 281 "cssvalues.gperf" - {"slide", CSS_VAL_SLIDE}, -#line 183 "cssvalues.gperf" - {"inline", CSS_VAL_INLINE}, -#line 262 "cssvalues.gperf" - {"static", CSS_VAL_STATIC}, -#line 204 "cssvalues.gperf" - {"move", CSS_VAL_MOVE}, -#line 42 "cssvalues.gperf" - {"300", CSS_VAL_300}, -#line 250 "cssvalues.gperf" - {"level", CSS_VAL_LEVEL}, -#line 41 "cssvalues.gperf" - {"200", CSS_VAL_200}, -#line 69 "cssvalues.gperf" - {"serif", CSS_VAL_SERIF}, -#line 91 "cssvalues.gperf" - {"teal", CSS_VAL_TEAL}, -#line 51 "cssvalues.gperf" - {"small", CSS_VAL_SMALL}, -#line 120 "cssvalues.gperf" - {"windowtext", CSS_VAL_WINDOWTEXT}, -#line 37 "cssvalues.gperf" - {"bold", CSS_VAL_BOLD}, -#line 77 "cssvalues.gperf" - {"blue", CSS_VAL_BLUE}, -#line 239 "cssvalues.gperf" - {"blink", CSS_VAL_BLINK}, -#line 221 "cssvalues.gperf" - {"visible", CSS_VAL_VISIBLE}, -#line 217 "cssvalues.gperf" - {"rtl", CSS_VAL_RTL}, -#line 243 "cssvalues.gperf" - {"embed", CSS_VAL_EMBED}, -#line 26 "cssvalues.gperf" - {"double", CSS_VAL_DOUBLE}, -#line 128 "cssvalues.gperf" - {"middle", CSS_VAL_MIDDLE}, -#line 253 "cssvalues.gperf" - {"lower", CSS_VAL_LOWER}, -#line 237 "cssvalues.gperf" - {"below", CSS_VAL_BELOW}, -#line 63 "cssvalues.gperf" - {"condensed", CSS_VAL_CONDENSED}, -#line 78 "cssvalues.gperf" - {"crimson", CSS_VAL_CRIMSON}, -#line 14 "cssvalues.gperf" - {"inherit", CSS_VAL_INHERIT}, -#line 248 "cssvalues.gperf" - {"invert", CSS_VAL_INVERT}, -#line 255 "cssvalues.gperf" - {"mix", CSS_VAL_MIX}, -#line 76 "cssvalues.gperf" - {"black", CSS_VAL_BLACK}, -#line 213 "cssvalues.gperf" - {"text", CSS_VAL_TEXT}, -#line 89 "cssvalues.gperf" - {"red", CSS_VAL_RED}, -#line 256 "cssvalues.gperf" - {"overline", CSS_VAL_OVERLINE}, -#line 15 "cssvalues.gperf" - {"initial", CSS_VAL_INITIAL}, -#line 214 "cssvalues.gperf" - {"wait", CSS_VAL_WAIT}, -#line 149 "cssvalues.gperf" - {"box", CSS_VAL_BOX}, -#line 139 "cssvalues.gperf" - {"center", CSS_VAL_CENTER}, -#line 279 "cssvalues.gperf" - {"fast", CSS_VAL_FAST}, -#line 59 "cssvalues.gperf" - {"wider", CSS_VAL_WIDER}, -#line 129 "cssvalues.gperf" - {"sub", CSS_VAL_SUB}, -#line 244 "cssvalues.gperf" - {"fixed", CSS_VAL_FIXED}, -#line 90 "cssvalues.gperf" - {"silver", CSS_VAL_SILVER}, -#line 189 "cssvalues.gperf" - {"table", CSS_VAL_TABLE}, -#line 270 "cssvalues.gperf" - {"enabled", CSS_VAL_ENABLED}, -#line 93 "cssvalues.gperf" - {"yellow", CSS_VAL_YELLOW}, -#line 36 "cssvalues.gperf" - {"normal", CSS_VAL_NORMAL}, -#line 84 "cssvalues.gperf" - {"maroon", CSS_VAL_MAROON}, -#line 286 "cssvalues.gperf" - {"border", CSS_VAL_BORDER}, -#line 49 "cssvalues.gperf" - {"xx-small", CSS_VAL_XX_SMALL}, -#line 57 "cssvalues.gperf" - {"smaller", CSS_VAL_SMALLER}, -#line 207 "cssvalues.gperf" - {"nw-resize", CSS_VAL_NW_RESIZE}, -#line 38 "cssvalues.gperf" - {"bolder", CSS_VAL_BOLDER}, -#line 284 "cssvalues.gperf" - {"clip", CSS_VAL_CLIP}, -#line 28 "cssvalues.gperf" - {"icon", CSS_VAL_ICON}, -#line 264 "cssvalues.gperf" - {"thin", CSS_VAL_THIN}, -#line 29 "cssvalues.gperf" - {"menu", CSS_VAL_MENU}, -#line 210 "cssvalues.gperf" - {"sw-resize", CSS_VAL_SW_RESIZE}, -#line 23 "cssvalues.gperf" - {"dotted", CSS_VAL_DOTTED}, -#line 206 "cssvalues.gperf" - {"ne-resize", CSS_VAL_NE_RESIZE}, -#line 278 "cssvalues.gperf" - {"slow", CSS_VAL_SLOW}, -#line 151 "cssvalues.gperf" - {"decimal", CSS_VAL_DECIMAL}, -#line 71 "cssvalues.gperf" - {"cursive", CSS_VAL_CURSIVE}, -#line 134 "cssvalues.gperf" - {"bottom", CSS_VAL_BOTTOM}, -#line 209 "cssvalues.gperf" - {"se-resize", CSS_VAL_SE_RESIZE}, -#line 85 "cssvalues.gperf" - {"navy", CSS_VAL_NAVY}, -#line 271 "cssvalues.gperf" - {"disabled", CSS_VAL_DISABLED}, -#line 127 "cssvalues.gperf" - {"baseline", CSS_VAL_BASELINE}, -#line 92 "cssvalues.gperf" - {"white", CSS_VAL_WHITE}, -#line 111 "cssvalues.gperf" - {"menutext", CSS_VAL_MENUTEXT}, -#line 263 "cssvalues.gperf" - {"thick", CSS_VAL_THICK}, -#line 52 "cssvalues.gperf" - {"medium", CSS_VAL_MEDIUM}, -#line 140 "cssvalues.gperf" - {"justify", CSS_VAL_JUSTIFY}, -#line 246 "cssvalues.gperf" - {"hide", CSS_VAL_HIDE}, -#line 275 "cssvalues.gperf" - {"reverse", CSS_VAL_REVERSE}, -#line 272 "cssvalues.gperf" - {"forwards", CSS_VAL_FORWARDS}, -#line 112 "cssvalues.gperf" - {"scrollbar", CSS_VAL_SCROLLBAR}, -#line 228 "cssvalues.gperf" - {"pre", CSS_VAL_PRE}, -#line 18 "cssvalues.gperf" - {"hidden", CSS_VAL_HIDDEN}, -#line 184 "cssvalues.gperf" - {"block", CSS_VAL_BLOCK}, -#line 220 "cssvalues.gperf" - {"lowercase", CSS_VAL_LOWERCASE}, -#line 285 "cssvalues.gperf" - {"ellipsis", CSS_VAL_ELLIPSIS}, -#line 242 "cssvalues.gperf" - {"cross", CSS_VAL_CROSS}, -#line 202 "cssvalues.gperf" - {"pointer", CSS_VAL_POINTER}, -#line 258 "cssvalues.gperf" - {"relative", CSS_VAL_RELATIVE}, -#line 137 "cssvalues.gperf" - {"left", CSS_VAL_LEFT}, -#line 119 "cssvalues.gperf" - {"windowframe", CSS_VAL_WINDOWFRAME}, -#line 265 "cssvalues.gperf" - {"underline", CSS_VAL_UNDERLINE}, -#line 82 "cssvalues.gperf" - {"indigo", CSS_VAL_INDIGO}, -#line 280 "cssvalues.gperf" - {"infinite", CSS_VAL_INFINITE}, -#line 110 "cssvalues.gperf" - {"infotext", CSS_VAL_INFOTEXT}, -#line 187 "cssvalues.gperf" - {"compact", CSS_VAL_COMPACT}, -#line 60 "cssvalues.gperf" - {"narrower", CSS_VAL_NARROWER}, -#line 276 "cssvalues.gperf" - {"up", CSS_VAL_UP}, -#line 22 "cssvalues.gperf" - {"outset", CSS_VAL_OUTSET}, -#line 106 "cssvalues.gperf" - {"inactiveborder", CSS_VAL_INACTIVEBORDER}, -#line 245 "cssvalues.gperf" - {"hand", CSS_VAL_HAND}, -#line 161 "cssvalues.gperf" - {"hebrew", CSS_VAL_HEBREW}, -#line 133 "cssvalues.gperf" - {"top", CSS_VAL_TOP}, -#line 236 "cssvalues.gperf" - {"avoid", CSS_VAL_AVOID}, -#line 144 "cssvalues.gperf" - {"outside", CSS_VAL_OUTSIDE}, -#line 234 "cssvalues.gperf" - {"absolute", CSS_VAL_ABSOLUTE}, -#line 162 "cssvalues.gperf" - {"armenian", CSS_VAL_ARMENIAN}, -#line 235 "cssvalues.gperf" - {"always", CSS_VAL_ALWAYS}, -#line 101 "cssvalues.gperf" - {"buttontext", CSS_VAL_BUTTONTEXT}, -#line 185 "cssvalues.gperf" - {"list-item", CSS_VAL_LIST_ITEM}, -#line 240 "cssvalues.gperf" - {"both", CSS_VAL_BOTH}, -#line 72 "cssvalues.gperf" - {"fantasy", CSS_VAL_FANTASY}, -#line 24 "cssvalues.gperf" - {"dashed", CSS_VAL_DASHED}, -#line 81 "cssvalues.gperf" - {"green", CSS_VAL_GREEN}, -#line 222 "cssvalues.gperf" - {"collapse", CSS_VAL_COLLAPSE}, -#line 227 "cssvalues.gperf" - {"nowrap", CSS_VAL_NOWRAP}, -#line 269 "cssvalues.gperf" - {"content-box", CSS_VAL_CONTENT_BOX}, -#line 73 "cssvalues.gperf" - {"monospace", CSS_VAL_MONOSPACE}, -#line 233 "cssvalues.gperf" - {"above", CSS_VAL_ABOVE}, -#line 208 "cssvalues.gperf" - {"n-resize", CSS_VAL_N_RESIZE}, -#line 261 "cssvalues.gperf" - {"show", CSS_VAL_SHOW}, -#line 199 "cssvalues.gperf" - {"auto", CSS_VAL_AUTO}, -#line 21 "cssvalues.gperf" - {"ridge", CSS_VAL_RIDGE}, -#line 212 "cssvalues.gperf" - {"w-resize", CSS_VAL_W_RESIZE}, -#line 257 "cssvalues.gperf" - {"portrait", CSS_VAL_PORTRAIT}, -#line 211 "cssvalues.gperf" - {"s-resize", CSS_VAL_S_RESIZE}, -#line 87 "cssvalues.gperf" - {"orange", CSS_VAL_ORANGE}, -#line 107 "cssvalues.gperf" - {"inactivecaption", CSS_VAL_INACTIVECAPTION}, -#line 205 "cssvalues.gperf" - {"e-resize", CSS_VAL_E_RESIZE}, -#line 215 "cssvalues.gperf" - {"help", CSS_VAL_HELP}, -#line 53 "cssvalues.gperf" - {"large", CSS_VAL_LARGE}, -#line 241 "cssvalues.gperf" - {"crop", CSS_VAL_CROP}, -#line 121 "cssvalues.gperf" - {"grey", CSS_VAL_GREY}, -#line 50 "cssvalues.gperf" - {"x-small", CSS_VAL_X_SMALL}, -#line 188 "cssvalues.gperf" - {"inline-block", CSS_VAL_INLINE_BLOCK}, -#line 114 "cssvalues.gperf" - {"threedface", CSS_VAL_THREEDFACE}, -#line 64 "cssvalues.gperf" - {"semi-condensed", CSS_VAL_SEMI_CONDENSED}, -#line 273 "cssvalues.gperf" - {"backwards", CSS_VAL_BACKWARDS}, -#line 138 "cssvalues.gperf" - {"right", CSS_VAL_RIGHT}, -#line 108 "cssvalues.gperf" - {"inactivecaptiontext", CSS_VAL_INACTIVECAPTIONTEXT}, -#line 27 "cssvalues.gperf" - {"caption", CSS_VAL_CAPTION}, -#line 274 "cssvalues.gperf" - {"ahead", CSS_VAL_AHEAD}, -#line 126 "cssvalues.gperf" - {"no-repeat", CSS_VAL_NO_REPEAT}, -#line 80 "cssvalues.gperf" - {"gray", CSS_VAL_GRAY}, -#line 197 "cssvalues.gperf" - {"table-cell", CSS_VAL_TABLE_CELL}, -#line 39 "cssvalues.gperf" - {"lighter", CSS_VAL_LIGHTER}, -#line 98 "cssvalues.gperf" - {"buttonface", CSS_VAL_BUTTONFACE}, -#line 79 "cssvalues.gperf" - {"fuchsia", CSS_VAL_FUCHSIA}, -#line 249 "cssvalues.gperf" - {"landscape", CSS_VAL_LANDSCAPE}, -#line 102 "cssvalues.gperf" - {"captiontext", CSS_VAL_CAPTIONTEXT}, -#line 58 "cssvalues.gperf" - {"larger", CSS_VAL_LARGER}, -#line 132 "cssvalues.gperf" - {"text-bottom", CSS_VAL_TEXT_BOTTOM}, -#line 186 "cssvalues.gperf" - {"run-in", CSS_VAL_RUN_IN}, -#line 55 "cssvalues.gperf" - {"xx-large", CSS_VAL_XX_LARGE}, -#line 103 "cssvalues.gperf" - {"graytext", CSS_VAL_GRAYTEXT}, -#line 268 "cssvalues.gperf" - {"border-box", CSS_VAL_BORDER_BOX}, -#line 282 "cssvalues.gperf" - {"alternate", CSS_VAL_ALTERNATE}, -#line 174 "cssvalues.gperf" - {"lower-latin", CSS_VAL_LOWER_LATIN}, -#line 194 "cssvalues.gperf" - {"table-row", CSS_VAL_TABLE_ROW}, -#line 94 "cssvalues.gperf" - {"activeborder", CSS_VAL_ACTIVEBORDER}, -#line 66 "cssvalues.gperf" - {"expanded", CSS_VAL_EXPANDED}, -#line 74 "cssvalues.gperf" - {"transparent", CSS_VAL_TRANSPARENT}, -#line 88 "cssvalues.gperf" - {"purple", CSS_VAL_PURPLE}, -#line 190 "cssvalues.gperf" - {"inline-table", CSS_VAL_INLINE_TABLE}, -#line 34 "cssvalues.gperf" - {"oblique", CSS_VAL_OBLIQUE}, -#line 20 "cssvalues.gperf" - {"groove", CSS_VAL_GROOVE}, -#line 201 "cssvalues.gperf" - {"default", CSS_VAL_DEFAULT}, -#line 148 "cssvalues.gperf" - {"square", CSS_VAL_SQUARE}, -#line 130 "cssvalues.gperf" - {"super", CSS_VAL_SUPER}, -#line 70 "cssvalues.gperf" - {"sans-serif", CSS_VAL_SANS_SERIF}, -#line 75 "cssvalues.gperf" - {"aqua", CSS_VAL_AQUA}, -#line 123 "cssvalues.gperf" - {"repeat", CSS_VAL_REPEAT}, -#line 230 "cssvalues.gperf" - {"pre-line", CSS_VAL_PRE_LINE}, -#line 283 "cssvalues.gperf" - {"unfurl", CSS_VAL_UNFURL}, -#line 238 "cssvalues.gperf" - {"bidi-override", CSS_VAL_BIDI_OVERRIDE}, -#line 196 "cssvalues.gperf" - {"table-column", CSS_VAL_TABLE_COLUMN}, -#line 131 "cssvalues.gperf" - {"text-top", CSS_VAL_TEXT_TOP}, -#line 218 "cssvalues.gperf" - {"capitalize", CSS_VAL_CAPITALIZE}, -#line 159 "cssvalues.gperf" - {"lower-roman", CSS_VAL_LOWER_ROMAN}, -#line 288 "cssvalues.gperf" - {"padding", CSS_VAL_PADDING}, -#line 95 "cssvalues.gperf" - {"activecaption", CSS_VAL_ACTIVECAPTION}, -#line 117 "cssvalues.gperf" - {"threedshadow", CSS_VAL_THREEDSHADOW}, -#line 200 "cssvalues.gperf" - {"crosshair", CSS_VAL_CROSSHAIR}, -#line 247 "cssvalues.gperf" - {"higher", CSS_VAL_HIGHER}, -#line 100 "cssvalues.gperf" - {"buttonshadow", CSS_VAL_BUTTONSHADOW}, -#line 232 "cssvalues.gperf" - {"break-word", CSS_VAL_BREAK_WORD}, -#line 254 "cssvalues.gperf" - {"marquee", CSS_VAL_MARQUEE}, -#line 31 "cssvalues.gperf" - {"small-caption", CSS_VAL_SMALL_CAPTION}, -#line 35 "cssvalues.gperf" - {"small-caps", CSS_VAL_SMALL_CAPS}, -#line 122 "cssvalues.gperf" - {"-khtml-text", CSS_VAL__KHTML_TEXT}, -#line 141 "cssvalues.gperf" - {"-khtml-left", CSS_VAL__KHTML_LEFT}, -#line 97 "cssvalues.gperf" - {"background", CSS_VAL_BACKGROUND}, -#line 178 "cssvalues.gperf" - {"katakana", CSS_VAL_KATAKANA}, -#line 260 "cssvalues.gperf" - {"separate", CSS_VAL_SEPARATE}, -#line 32 "cssvalues.gperf" - {"status-bar", CSS_VAL_STATUS_BAR}, -#line 65 "cssvalues.gperf" - {"semi-expanded", CSS_VAL_SEMI_EXPANDED}, -#line 62 "cssvalues.gperf" - {"extra-condensed", CSS_VAL_EXTRA_CONDENSED}, -#line 198 "cssvalues.gperf" - {"table-caption", CSS_VAL_TABLE_CAPTION}, -#line 154 "cssvalues.gperf" - {"-khtml-lao", CSS_VAL__KHTML_LAO}, -#line 143 "cssvalues.gperf" - {"-khtml-center", CSS_VAL__KHTML_CENTER}, -#line 54 "cssvalues.gperf" - {"x-large", CSS_VAL_X_LARGE}, -#line 30 "cssvalues.gperf" - {"message-box", CSS_VAL_MESSAGE_BOX}, -#line 203 "cssvalues.gperf" - {"progress", CSS_VAL_PROGRESS}, -#line 16 "cssvalues.gperf" - {"-khtml-native", CSS_VAL__KHTML_NATIVE}, -#line 177 "cssvalues.gperf" - {"hiragana", CSS_VAL_HIRAGANA}, -#line 171 "cssvalues.gperf" - {"lower-greek", CSS_VAL_LOWER_GREEK}, -#line 150 "cssvalues.gperf" - {"-khtml-diamond", CSS_VAL__KHTML_DIAMOND}, -#line 224 "cssvalues.gperf" - {"no-close-quote", CSS_VAL_NO_CLOSE_QUOTE}, -#line 61 "cssvalues.gperf" - {"ultra-condensed", CSS_VAL_ULTRA_CONDENSED}, -#line 158 "cssvalues.gperf" - {"-khtml-tibetan", CSS_VAL__KHTML_TIBETAN}, -#line 124 "cssvalues.gperf" - {"repeat-x", CSS_VAL_REPEAT_X}, -#line 266 "cssvalues.gperf" - {"-khtml-normal", CSS_VAL__KHTML_NORMAL}, -#line 113 "cssvalues.gperf" - {"threeddarkshadow", CSS_VAL_THREEDDARKSHADOW}, -#line 219 "cssvalues.gperf" - {"uppercase", CSS_VAL_UPPERCASE}, -#line 136 "cssvalues.gperf" - {"-khtml-auto", CSS_VAL__KHTML_AUTO}, -#line 163 "cssvalues.gperf" - {"georgian", CSS_VAL_GEORGIAN}, -#line 229 "cssvalues.gperf" - {"pre-wrap", CSS_VAL_PRE_WRAP}, -#line 125 "cssvalues.gperf" - {"repeat-y", CSS_VAL_REPEAT_Y}, -#line 109 "cssvalues.gperf" - {"infobackground", CSS_VAL_INFOBACKGROUND}, -#line 157 "cssvalues.gperf" - {"-khtml-thai", CSS_VAL__KHTML_THAI}, -#line 226 "cssvalues.gperf" - {"open-quote", CSS_VAL_OPEN_QUOTE}, -#line 173 "cssvalues.gperf" - {"lower-alpha", CSS_VAL_LOWER_ALPHA}, -#line 156 "cssvalues.gperf" - {"-khtml-urdu", CSS_VAL__KHTML_URDU}, -#line 223 "cssvalues.gperf" - {"close-quote", CSS_VAL_CLOSE_QUOTE}, -#line 104 "cssvalues.gperf" - {"highlight", CSS_VAL_HIGHLIGHT}, -#line 225 "cssvalues.gperf" - {"no-open-quote", CSS_VAL_NO_OPEN_QUOTE}, -#line 231 "cssvalues.gperf" - {"-khtml-nowrap", CSS_VAL__KHTML_NOWRAP}, -#line 67 "cssvalues.gperf" - {"extra-expanded", CSS_VAL_EXTRA_EXPANDED}, -#line 105 "cssvalues.gperf" - {"highlighttext", CSS_VAL_HIGHLIGHTTEXT}, -#line 155 "cssvalues.gperf" - {"-khtml-persian", CSS_VAL__KHTML_PERSIAN}, -#line 116 "cssvalues.gperf" - {"threedlightshadow", CSS_VAL_THREEDLIGHTSHADOW}, -#line 96 "cssvalues.gperf" - {"appworkspace", CSS_VAL_APPWORKSPACE}, -#line 68 "cssvalues.gperf" - {"ultra-expanded", CSS_VAL_ULTRA_EXPANDED}, -#line 176 "cssvalues.gperf" - {"upper-latin", CSS_VAL_UPPER_LATIN}, -#line 164 "cssvalues.gperf" - {"cjk-ideographic", CSS_VAL_CJK_IDEOGRAPHIC}, -#line 251 "cssvalues.gperf" - {"line-through", CSS_VAL_LINE_THROUGH}, -#line 142 "cssvalues.gperf" - {"-khtml-right", CSS_VAL__KHTML_RIGHT}, -#line 160 "cssvalues.gperf" - {"upper-roman", CSS_VAL_UPPER_ROMAN}, -#line 135 "cssvalues.gperf" - {"-khtml-baseline-middle", CSS_VAL__KHTML_BASELINE_MIDDLE}, -#line 153 "cssvalues.gperf" - {"-khtml-arabic-indic", CSS_VAL__KHTML_ARABIC_INDIC}, -#line 152 "cssvalues.gperf" - {"decimal-leading-zero", CSS_VAL_DECIMAL_LEADING_ZERO}, -#line 115 "cssvalues.gperf" - {"threedhighlight", CSS_VAL_THREEDHIGHLIGHT}, -#line 180 "cssvalues.gperf" - {"katakana-iroha", CSS_VAL_KATAKANA_IROHA}, -#line 99 "cssvalues.gperf" - {"buttonhighlight", CSS_VAL_BUTTONHIGHLIGHT}, -#line 56 "cssvalues.gperf" - {"-khtml-xxx-large", CSS_VAL__KHTML_XXX_LARGE}, -#line 267 "cssvalues.gperf" - {"-khtml-around-floats", CSS_VAL__KHTML_AROUND_FLOATS}, -#line 191 "cssvalues.gperf" - {"table-row-group", CSS_VAL_TABLE_ROW_GROUP}, -#line 182 "cssvalues.gperf" - {"-khtml-close-quote", CSS_VAL__KHTML_CLOSE_QUOTE}, -#line 179 "cssvalues.gperf" - {"hiragana-iroha", CSS_VAL_HIRAGANA_IROHA}, -#line 193 "cssvalues.gperf" - {"table-footer-group", CSS_VAL_TABLE_FOOTER_GROUP}, -#line 195 "cssvalues.gperf" - {"table-column-group", CSS_VAL_TABLE_COLUMN_GROUP}, -#line 175 "cssvalues.gperf" - {"upper-alpha", CSS_VAL_UPPER_ALPHA}, -#line 181 "cssvalues.gperf" - {"-khtml-open-quote", CSS_VAL__KHTML_OPEN_QUOTE}, -#line 165 "cssvalues.gperf" - {"-khtml-japanese-formal", CSS_VAL__KHTML_JAPANESE_FORMAL}, -#line 166 "cssvalues.gperf" - {"-khtml-japanese-informal", CSS_VAL__KHTML_JAPANESE_INFORMAL}, -#line 192 "cssvalues.gperf" - {"table-header-group", CSS_VAL_TABLE_HEADER_GROUP}, -#line 169 "cssvalues.gperf" - {"-khtml-trad-chinese-formal", CSS_VAL__KHTML_TRAD_CHINESE_FORMAL}, -#line 170 "cssvalues.gperf" - {"-khtml-trad-chinese-informal", CSS_VAL__KHTML_TRAD_CHINESE_INFORMAL}, -#line 167 "cssvalues.gperf" - {"-khtml-simp-chinese-formal", CSS_VAL__KHTML_SIMP_CHINESE_FORMAL}, -#line 168 "cssvalues.gperf" - {"-khtml-simp-chinese-informal", CSS_VAL__KHTML_SIMP_CHINESE_INFORMAL}, -#line 172 "cssvalues.gperf" - {"-khtml-upper-greek", CSS_VAL__KHTML_UPPER_GREEK} - }; - - static const short lookup[] = - { - 0, -1, -1, -1, -1, 1, -1, -1, -1, -1, - 2, -1, -1, -1, -1, 3, -1, -1, -1, -1, - 4, -1, -1, -1, -1, 5, -1, -1, 6, -1, - 7, -1, -1, -1, -1, 8, -1, -1, -1, -1, - 9, -1, -1, 10, -1, 11, -1, -1, -1, -1, - 12, -1, -1, -1, -1, 13, -1, -1, -1, -1, - 14, 15, -1, -1, -1, 16, -1, -1, -1, -1, - 17, 18, -1, -1, -1, 19, -1, -1, -1, -1, - 20, -1, -1, -1, -1, 21, -1, -1, 22, -1, - 23, -1, -1, -1, -1, 24, -1, -1, 25, -1, - 26, -1, -1, 27, -1, 28, -1, -1, 29, -1, - 30, -1, -1, -1, -1, 31, -1, -1, -1, 32, - 33, -1, -1, 34, -1, -1, -1, -1, 35, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 36, -1, - 37, -1, -1, -1, -1, 38, -1, -1, 39, -1, - 40, -1, -1, 41, -1, -1, -1, -1, 42, -1, - 43, -1, -1, 44, -1, 45, -1, -1, 46, -1, - -1, -1, -1, 47, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 48, -1, -1, 49, -1, - 50, 51, -1, 52, -1, -1, 53, -1, 54, -1, - 55, -1, -1, 56, -1, -1, -1, -1, 57, -1, - -1, -1, -1, -1, -1, 58, -1, -1, -1, -1, - -1, 59, -1, 60, -1, 61, -1, -1, -1, -1, - 62, 63, -1, -1, -1, 64, -1, -1, -1, -1, - 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 66, -1, -1, -1, -1, -1, -1, -1, -1, 67, - 68, 69, -1, -1, -1, 70, -1, -1, 71, -1, - 72, -1, -1, -1, -1, -1, -1, -1, 73, -1, - 74, 75, -1, -1, -1, -1, -1, -1, -1, -1, - 76, -1, -1, 77, -1, -1, -1, -1, 78, -1, - 79, -1, -1, 80, -1, 81, -1, -1, -1, -1, - -1, -1, -1, 82, -1, -1, -1, -1, -1, -1, - -1, 83, -1, -1, -1, -1, -1, -1, -1, -1, - 84, -1, -1, -1, -1, 85, 86, -1, 87, -1, - -1, -1, -1, 88, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 89, -1, -1, -1, 90, 91, -1, -1, 92, -1, - -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, - 94, -1, -1, 95, -1, 96, -1, -1, -1, -1, - 97, -1, -1, 98, -1, 99, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 100, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 101, -1, -1, -1, -1, 102, -1, - 103, -1, -1, -1, 104, 105, -1, -1, -1, -1, - 106, -1, -1, -1, -1, 107, -1, -1, 108, -1, - 109, -1, -1, -1, -1, -1, -1, -1, 110, -1, - 111, -1, -1, -1, -1, 112, -1, -1, 113, -1, - 114, -1, -1, 115, -1, 116, -1, -1, -1, -1, - -1, -1, -1, 117, -1, 118, -1, -1, -1, -1, - 119, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 120, -1, -1, -1, -1, -1, 121, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 122, -1, - -1, -1, -1, -1, -1, 123, -1, -1, -1, -1, - 124, 125, -1, -1, -1, 126, -1, -1, -1, -1, - -1, -1, -1, 127, -1, 128, -1, -1, 129, -1, - -1, -1, -1, 130, -1, 131, -1, -1, -1, -1, - -1, -1, -1, 132, -1, 133, -1, -1, 134, -1, - 135, -1, -1, -1, -1, 136, -1, -1, 137, -1, - 138, -1, -1, -1, -1, 139, -1, -1, -1, -1, - 140, -1, -1, 141, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 142, -1, -1, -1, -1, 143, -1, -1, -1, -1, - 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 145, 146, -1, -1, -1, -1, -1, -1, 147, -1, - 148, -1, -1, 149, -1, 150, -1, -1, 151, -1, - 152, 153, -1, -1, -1, 154, -1, -1, 155, -1, - -1, -1, -1, 156, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 157, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 158, -1, -1, -1, -1, 159, -1, -1, 160, -1, - -1, -1, -1, 161, -1, 162, -1, -1, -1, -1, - -1, -1, -1, 163, -1, -1, -1, -1, -1, -1, - 164, -1, -1, 165, -1, 166, -1, -1, -1, 167, - -1, 168, -1, -1, -1, -1, -1, -1, 169, -1, - 170, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 171, -1, - -1, -1, -1, 172, -1, -1, -1, -1, 173, -1, - -1, -1, -1, 174, -1, 175, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 176, -1, -1, -1, -1, 177, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 178, -1, -1, 179, -1, -1, -1, -1, -1, -1, - 180, -1, -1, 181, -1, 182, -1, -1, 183, -1, - -1, -1, -1, 184, -1, 185, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 186, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 187, -1, -1, 188, -1, -1, -1, -1, -1, -1, - 189, -1, -1, 190, -1, 191, -1, -1, 192, -1, - 193, -1, -1, 194, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 195, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 196, -1, -1, -1, -1, - 197, -1, -1, 198, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 199, -1, -1, -1, - 200, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 201, -1, -1, -1, -1, 202, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 203, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 204, -1, - 205, -1, -1, -1, -1, 206, -1, -1, -1, -1, - 207, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 208, -1, -1, 209, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 210, -1, -1, -1, -1, -1, -1, - 211, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 212, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 213, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 214, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 215, -1, 216, -1, -1, 217, -1, - 218, -1, -1, -1, -1, -1, -1, -1, 219, -1, - 220, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 221, -1, -1, -1, -1, -1, -1, - 222, -1, -1, -1, -1, 223, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 224, -1, - -1, -1, -1, -1, -1, 225, -1, -1, 226, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 227, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 228, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 229, -1, -1, -1, -1, -1, 230, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 231, -1, - 232, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 233, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 234, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 235, -1, - 236, -1, -1, -1, -1, 237, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 238, -1, -1, 239, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 240, -1, - -1, 241, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 242, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 243, -1, -1, -1, -1, -1, -1, -1, 244, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 245, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 246, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 247, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 248, -1, -1, -1, -1, -1, -1, - 249, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 250, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 251, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 252, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 253, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 254, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 255, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 257, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 258, - -1, -1, -1, -1, -1, -1, -1, -1, 259, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 261, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 262, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 263, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 264, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 265, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 266, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 267, -1, -1, -1, -1, 268, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 269, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 270, -1, - -1, -1, -1, 271, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 272, -1, -1, -1, -1, 273, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 274 - }; - - if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) - { - register int key = hash_val (str, len); - - if (key <= MAX_HASH_VALUE && key >= 0) - { - register int index = lookup[key]; - - if (index >= 0) - { - register const char *s = wordlist_value[index].name; - - if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0') - return &wordlist_value[index]; - } - } - } - return 0; -} -#line 289 "cssvalues.gperf" - -static const char * const valueList[] = { -"", -"inherit", -"initial", -"-khtml-native", -"none", -"hidden", -"inset", -"groove", -"ridge", -"outset", -"dotted", -"dashed", -"solid", -"double", -"caption", -"icon", -"menu", -"message-box", -"small-caption", -"status-bar", -"italic", -"oblique", -"small-caps", -"normal", -"bold", -"bolder", -"lighter", -"100", -"200", -"300", -"400", -"500", -"600", -"700", -"800", -"900", -"xx-small", -"x-small", -"small", -"medium", -"large", -"x-large", -"xx-large", -"-khtml-xxx-large", -"smaller", -"larger", -"wider", -"narrower", -"ultra-condensed", -"extra-condensed", -"condensed", -"semi-condensed", -"semi-expanded", -"expanded", -"extra-expanded", -"ultra-expanded", -"serif", -"sans-serif", -"cursive", -"fantasy", -"monospace", -"transparent", -"aqua", -"black", -"blue", -"crimson", -"fuchsia", -"gray", -"green", -"indigo", -"lime", -"maroon", -"navy", -"olive", -"orange", -"purple", -"red", -"silver", -"teal", -"white", -"yellow", -"activeborder", -"activecaption", -"appworkspace", -"background", -"buttonface", -"buttonhighlight", -"buttonshadow", -"buttontext", -"captiontext", -"graytext", -"highlight", -"highlighttext", -"inactiveborder", -"inactivecaption", -"inactivecaptiontext", -"infobackground", -"infotext", -"menutext", -"scrollbar", -"threeddarkshadow", -"threedface", -"threedhighlight", -"threedlightshadow", -"threedshadow", -"window", -"windowframe", -"windowtext", -"grey", -"-khtml-text", -"repeat", -"repeat-x", -"repeat-y", -"no-repeat", -"baseline", -"middle", -"sub", -"super", -"text-top", -"text-bottom", -"top", -"bottom", -"-khtml-baseline-middle", -"-khtml-auto", -"left", -"right", -"center", -"justify", -"-khtml-left", -"-khtml-right", -"-khtml-center", -"outside", -"inside", -"disc", -"circle", -"square", -"box", -"-khtml-diamond", -"decimal", -"decimal-leading-zero", -"-khtml-arabic-indic", -"-khtml-lao", -"-khtml-persian", -"-khtml-urdu", -"-khtml-thai", -"-khtml-tibetan", -"lower-roman", -"upper-roman", -"hebrew", -"armenian", -"georgian", -"cjk-ideographic", -"-khtml-japanese-formal", -"-khtml-japanese-informal", -"-khtml-simp-chinese-formal", -"-khtml-simp-chinese-informal", -"-khtml-trad-chinese-formal", -"-khtml-trad-chinese-informal", -"lower-greek", -"-khtml-upper-greek", -"lower-alpha", -"lower-latin", -"upper-alpha", -"upper-latin", -"hiragana", -"katakana", -"hiragana-iroha", -"katakana-iroha", -"-khtml-open-quote", -"-khtml-close-quote", -"inline", -"block", -"list-item", -"run-in", -"compact", -"inline-block", -"table", -"inline-table", -"table-row-group", -"table-header-group", -"table-footer-group", -"table-row", -"table-column-group", -"table-column", -"table-cell", -"table-caption", -"auto", -"crosshair", -"default", -"pointer", -"progress", -"move", -"e-resize", -"ne-resize", -"nw-resize", -"n-resize", -"se-resize", -"sw-resize", -"s-resize", -"w-resize", -"text", -"wait", -"help", -"ltr", -"rtl", -"capitalize", -"uppercase", -"lowercase", -"visible", -"collapse", -"close-quote", -"no-close-quote", -"no-open-quote", -"open-quote", -"nowrap", -"pre", -"pre-wrap", -"pre-line", -"-khtml-nowrap", -"break-word", -"above", -"absolute", -"always", -"avoid", -"below", -"bidi-override", -"blink", -"both", -"crop", -"cross", -"embed", -"fixed", -"hand", -"hide", -"higher", -"invert", -"landscape", -"level", -"line-through", -"loud", -"lower", -"marquee", -"mix", -"overline", -"portrait", -"relative", -"scroll", -"separate", -"show", -"static", -"thick", -"thin", -"underline", -"-khtml-normal", -"-khtml-around-floats", -"border-box", -"content-box", -"enabled", -"disabled", -"forwards", -"backwards", -"ahead", -"reverse", -"up", -"down", -"slow", -"fast", -"infinite", -"slide", -"alternate", -"unfurl", -"clip", -"ellipsis", -"border", -"content", -"padding", - 0 -}; -DOMString getValueName(unsigned short id) -{ - if(id >= CSS_VAL_TOTAL || id == 0) - return DOMString(); - else - return DOMString(valueList[id]); -} - diff --git a/khtml/css/cssvalues.h b/khtml/css/cssvalues.h deleted file mode 100644 index 36a365754..000000000 --- a/khtml/css/cssvalues.h +++ /dev/null @@ -1,290 +0,0 @@ -/* This file is automatically generated from cssvalues.in by -#makevalues, do not edit */ -/* Copyright 1998 W. Bastian */ - -#ifndef CSSVALUES_H -#define CSSVALUES_H - -DOM::DOMString getValueName(unsigned short id) KDE_NO_EXPORT; - -#define CSS_VAL_INVALID 0 -#define CSS_VAL_MIN 1 -#define CSS_VAL_INHERIT 1 -#define CSS_VAL_INITIAL 2 -#define CSS_VAL__KHTML_NATIVE 3 -#define CSS_VAL_NONE 4 -#define CSS_VAL_HIDDEN 5 -#define CSS_VAL_INSET 6 -#define CSS_VAL_GROOVE 7 -#define CSS_VAL_RIDGE 8 -#define CSS_VAL_OUTSET 9 -#define CSS_VAL_DOTTED 10 -#define CSS_VAL_DASHED 11 -#define CSS_VAL_SOLID 12 -#define CSS_VAL_DOUBLE 13 -#define CSS_VAL_CAPTION 14 -#define CSS_VAL_ICON 15 -#define CSS_VAL_MENU 16 -#define CSS_VAL_MESSAGE_BOX 17 -#define CSS_VAL_SMALL_CAPTION 18 -#define CSS_VAL_STATUS_BAR 19 -#define CSS_VAL_ITALIC 20 -#define CSS_VAL_OBLIQUE 21 -#define CSS_VAL_SMALL_CAPS 22 -#define CSS_VAL_NORMAL 23 -#define CSS_VAL_BOLD 24 -#define CSS_VAL_BOLDER 25 -#define CSS_VAL_LIGHTER 26 -#define CSS_VAL_100 27 -#define CSS_VAL_200 28 -#define CSS_VAL_300 29 -#define CSS_VAL_400 30 -#define CSS_VAL_500 31 -#define CSS_VAL_600 32 -#define CSS_VAL_700 33 -#define CSS_VAL_800 34 -#define CSS_VAL_900 35 -#define CSS_VAL_XX_SMALL 36 -#define CSS_VAL_X_SMALL 37 -#define CSS_VAL_SMALL 38 -#define CSS_VAL_MEDIUM 39 -#define CSS_VAL_LARGE 40 -#define CSS_VAL_X_LARGE 41 -#define CSS_VAL_XX_LARGE 42 -#define CSS_VAL__KHTML_XXX_LARGE 43 -#define CSS_VAL_SMALLER 44 -#define CSS_VAL_LARGER 45 -#define CSS_VAL_WIDER 46 -#define CSS_VAL_NARROWER 47 -#define CSS_VAL_ULTRA_CONDENSED 48 -#define CSS_VAL_EXTRA_CONDENSED 49 -#define CSS_VAL_CONDENSED 50 -#define CSS_VAL_SEMI_CONDENSED 51 -#define CSS_VAL_SEMI_EXPANDED 52 -#define CSS_VAL_EXPANDED 53 -#define CSS_VAL_EXTRA_EXPANDED 54 -#define CSS_VAL_ULTRA_EXPANDED 55 -#define CSS_VAL_SERIF 56 -#define CSS_VAL_SANS_SERIF 57 -#define CSS_VAL_CURSIVE 58 -#define CSS_VAL_FANTASY 59 -#define CSS_VAL_MONOSPACE 60 -#define CSS_VAL_TRANSPARENT 61 -#define CSS_VAL_AQUA 62 -#define CSS_VAL_BLACK 63 -#define CSS_VAL_BLUE 64 -#define CSS_VAL_CRIMSON 65 -#define CSS_VAL_FUCHSIA 66 -#define CSS_VAL_GRAY 67 -#define CSS_VAL_GREEN 68 -#define CSS_VAL_INDIGO 69 -#define CSS_VAL_LIME 70 -#define CSS_VAL_MAROON 71 -#define CSS_VAL_NAVY 72 -#define CSS_VAL_OLIVE 73 -#define CSS_VAL_ORANGE 74 -#define CSS_VAL_PURPLE 75 -#define CSS_VAL_RED 76 -#define CSS_VAL_SILVER 77 -#define CSS_VAL_TEAL 78 -#define CSS_VAL_WHITE 79 -#define CSS_VAL_YELLOW 80 -#define CSS_VAL_ACTIVEBORDER 81 -#define CSS_VAL_ACTIVECAPTION 82 -#define CSS_VAL_APPWORKSPACE 83 -#define CSS_VAL_BACKGROUND 84 -#define CSS_VAL_BUTTONFACE 85 -#define CSS_VAL_BUTTONHIGHLIGHT 86 -#define CSS_VAL_BUTTONSHADOW 87 -#define CSS_VAL_BUTTONTEXT 88 -#define CSS_VAL_CAPTIONTEXT 89 -#define CSS_VAL_GRAYTEXT 90 -#define CSS_VAL_HIGHLIGHT 91 -#define CSS_VAL_HIGHLIGHTTEXT 92 -#define CSS_VAL_INACTIVEBORDER 93 -#define CSS_VAL_INACTIVECAPTION 94 -#define CSS_VAL_INACTIVECAPTIONTEXT 95 -#define CSS_VAL_INFOBACKGROUND 96 -#define CSS_VAL_INFOTEXT 97 -#define CSS_VAL_MENUTEXT 98 -#define CSS_VAL_SCROLLBAR 99 -#define CSS_VAL_THREEDDARKSHADOW 100 -#define CSS_VAL_THREEDFACE 101 -#define CSS_VAL_THREEDHIGHLIGHT 102 -#define CSS_VAL_THREEDLIGHTSHADOW 103 -#define CSS_VAL_THREEDSHADOW 104 -#define CSS_VAL_WINDOW 105 -#define CSS_VAL_WINDOWFRAME 106 -#define CSS_VAL_WINDOWTEXT 107 -#define CSS_VAL_GREY 108 -#define CSS_VAL__KHTML_TEXT 109 -#define CSS_VAL_REPEAT 110 -#define CSS_VAL_REPEAT_X 111 -#define CSS_VAL_REPEAT_Y 112 -#define CSS_VAL_NO_REPEAT 113 -#define CSS_VAL_BASELINE 114 -#define CSS_VAL_MIDDLE 115 -#define CSS_VAL_SUB 116 -#define CSS_VAL_SUPER 117 -#define CSS_VAL_TEXT_TOP 118 -#define CSS_VAL_TEXT_BOTTOM 119 -#define CSS_VAL_TOP 120 -#define CSS_VAL_BOTTOM 121 -#define CSS_VAL__KHTML_BASELINE_MIDDLE 122 -#define CSS_VAL__KHTML_AUTO 123 -#define CSS_VAL_LEFT 124 -#define CSS_VAL_RIGHT 125 -#define CSS_VAL_CENTER 126 -#define CSS_VAL_JUSTIFY 127 -#define CSS_VAL__KHTML_LEFT 128 -#define CSS_VAL__KHTML_RIGHT 129 -#define CSS_VAL__KHTML_CENTER 130 -#define CSS_VAL_OUTSIDE 131 -#define CSS_VAL_INSIDE 132 -#define CSS_VAL_DISC 133 -#define CSS_VAL_CIRCLE 134 -#define CSS_VAL_SQUARE 135 -#define CSS_VAL_BOX 136 -#define CSS_VAL__KHTML_DIAMOND 137 -#define CSS_VAL_DECIMAL 138 -#define CSS_VAL_DECIMAL_LEADING_ZERO 139 -#define CSS_VAL__KHTML_ARABIC_INDIC 140 -#define CSS_VAL__KHTML_LAO 141 -#define CSS_VAL__KHTML_PERSIAN 142 -#define CSS_VAL__KHTML_URDU 143 -#define CSS_VAL__KHTML_THAI 144 -#define CSS_VAL__KHTML_TIBETAN 145 -#define CSS_VAL_LOWER_ROMAN 146 -#define CSS_VAL_UPPER_ROMAN 147 -#define CSS_VAL_HEBREW 148 -#define CSS_VAL_ARMENIAN 149 -#define CSS_VAL_GEORGIAN 150 -#define CSS_VAL_CJK_IDEOGRAPHIC 151 -#define CSS_VAL__KHTML_JAPANESE_FORMAL 152 -#define CSS_VAL__KHTML_JAPANESE_INFORMAL 153 -#define CSS_VAL__KHTML_SIMP_CHINESE_FORMAL 154 -#define CSS_VAL__KHTML_SIMP_CHINESE_INFORMAL 155 -#define CSS_VAL__KHTML_TRAD_CHINESE_FORMAL 156 -#define CSS_VAL__KHTML_TRAD_CHINESE_INFORMAL 157 -#define CSS_VAL_LOWER_GREEK 158 -#define CSS_VAL__KHTML_UPPER_GREEK 159 -#define CSS_VAL_LOWER_ALPHA 160 -#define CSS_VAL_LOWER_LATIN 161 -#define CSS_VAL_UPPER_ALPHA 162 -#define CSS_VAL_UPPER_LATIN 163 -#define CSS_VAL_HIRAGANA 164 -#define CSS_VAL_KATAKANA 165 -#define CSS_VAL_HIRAGANA_IROHA 166 -#define CSS_VAL_KATAKANA_IROHA 167 -#define CSS_VAL__KHTML_OPEN_QUOTE 168 -#define CSS_VAL__KHTML_CLOSE_QUOTE 169 -#define CSS_VAL_INLINE 170 -#define CSS_VAL_BLOCK 171 -#define CSS_VAL_LIST_ITEM 172 -#define CSS_VAL_RUN_IN 173 -#define CSS_VAL_COMPACT 174 -#define CSS_VAL_INLINE_BLOCK 175 -#define CSS_VAL_TABLE 176 -#define CSS_VAL_INLINE_TABLE 177 -#define CSS_VAL_TABLE_ROW_GROUP 178 -#define CSS_VAL_TABLE_HEADER_GROUP 179 -#define CSS_VAL_TABLE_FOOTER_GROUP 180 -#define CSS_VAL_TABLE_ROW 181 -#define CSS_VAL_TABLE_COLUMN_GROUP 182 -#define CSS_VAL_TABLE_COLUMN 183 -#define CSS_VAL_TABLE_CELL 184 -#define CSS_VAL_TABLE_CAPTION 185 -#define CSS_VAL_AUTO 186 -#define CSS_VAL_CROSSHAIR 187 -#define CSS_VAL_DEFAULT 188 -#define CSS_VAL_POINTER 189 -#define CSS_VAL_PROGRESS 190 -#define CSS_VAL_MOVE 191 -#define CSS_VAL_E_RESIZE 192 -#define CSS_VAL_NE_RESIZE 193 -#define CSS_VAL_NW_RESIZE 194 -#define CSS_VAL_N_RESIZE 195 -#define CSS_VAL_SE_RESIZE 196 -#define CSS_VAL_SW_RESIZE 197 -#define CSS_VAL_S_RESIZE 198 -#define CSS_VAL_W_RESIZE 199 -#define CSS_VAL_TEXT 200 -#define CSS_VAL_WAIT 201 -#define CSS_VAL_HELP 202 -#define CSS_VAL_LTR 203 -#define CSS_VAL_RTL 204 -#define CSS_VAL_CAPITALIZE 205 -#define CSS_VAL_UPPERCASE 206 -#define CSS_VAL_LOWERCASE 207 -#define CSS_VAL_VISIBLE 208 -#define CSS_VAL_COLLAPSE 209 -#define CSS_VAL_CLOSE_QUOTE 210 -#define CSS_VAL_NO_CLOSE_QUOTE 211 -#define CSS_VAL_NO_OPEN_QUOTE 212 -#define CSS_VAL_OPEN_QUOTE 213 -#define CSS_VAL_NOWRAP 214 -#define CSS_VAL_PRE 215 -#define CSS_VAL_PRE_WRAP 216 -#define CSS_VAL_PRE_LINE 217 -#define CSS_VAL__KHTML_NOWRAP 218 -#define CSS_VAL_BREAK_WORD 219 -#define CSS_VAL_ABOVE 220 -#define CSS_VAL_ABSOLUTE 221 -#define CSS_VAL_ALWAYS 222 -#define CSS_VAL_AVOID 223 -#define CSS_VAL_BELOW 224 -#define CSS_VAL_BIDI_OVERRIDE 225 -#define CSS_VAL_BLINK 226 -#define CSS_VAL_BOTH 227 -#define CSS_VAL_CROP 228 -#define CSS_VAL_CROSS 229 -#define CSS_VAL_EMBED 230 -#define CSS_VAL_FIXED 231 -#define CSS_VAL_HAND 232 -#define CSS_VAL_HIDE 233 -#define CSS_VAL_HIGHER 234 -#define CSS_VAL_INVERT 235 -#define CSS_VAL_LANDSCAPE 236 -#define CSS_VAL_LEVEL 237 -#define CSS_VAL_LINE_THROUGH 238 -#define CSS_VAL_LOUD 239 -#define CSS_VAL_LOWER 240 -#define CSS_VAL_MARQUEE 241 -#define CSS_VAL_MIX 242 -#define CSS_VAL_OVERLINE 243 -#define CSS_VAL_PORTRAIT 244 -#define CSS_VAL_RELATIVE 245 -#define CSS_VAL_SCROLL 246 -#define CSS_VAL_SEPARATE 247 -#define CSS_VAL_SHOW 248 -#define CSS_VAL_STATIC 249 -#define CSS_VAL_THICK 250 -#define CSS_VAL_THIN 251 -#define CSS_VAL_UNDERLINE 252 -#define CSS_VAL__KHTML_NORMAL 253 -#define CSS_VAL__KHTML_AROUND_FLOATS 254 -#define CSS_VAL_BORDER_BOX 255 -#define CSS_VAL_CONTENT_BOX 256 -#define CSS_VAL_ENABLED 257 -#define CSS_VAL_DISABLED 258 -#define CSS_VAL_FORWARDS 259 -#define CSS_VAL_BACKWARDS 260 -#define CSS_VAL_AHEAD 261 -#define CSS_VAL_REVERSE 262 -#define CSS_VAL_UP 263 -#define CSS_VAL_DOWN 264 -#define CSS_VAL_SLOW 265 -#define CSS_VAL_FAST 266 -#define CSS_VAL_INFINITE 267 -#define CSS_VAL_SLIDE 268 -#define CSS_VAL_ALTERNATE 269 -#define CSS_VAL_UNFURL 270 -#define CSS_VAL_CLIP 271 -#define CSS_VAL_ELLIPSIS 272 -#define CSS_VAL_BORDER 273 -#define CSS_VAL_CONTENT 274 -#define CSS_VAL_PADDING 275 - -#define CSS_VAL_TOTAL 276 -#endif - diff --git a/khtml/css/cssvalues.in b/khtml/css/cssvalues.in deleted file mode 100644 index 1ad99c38d..000000000 --- a/khtml/css/cssvalues.in +++ /dev/null @@ -1,478 +0,0 @@ -# These are all values accepted for CSS2. -# -# WARNING: -# -------- -# -# The Values are sorted according to the properties they belong to, -# and have to be in the same order as the enums in render_style.h. -# -# If not, the optimizations in the cssparser and style selector will fail, -# and produce incorrect results. -# -inherit -initial -# -# CSS_PROP_OUTLINE_STYLE -# CSS_PROP_BORDER_TOP_STYLE -# CSS_PROP_BORDER_BOTTOM_STYLE -# CSS_PROP_BORDER_LEFT_STYLE --khtml-native -none -hidden -inset -groove -ridge -outset -dotted -dashed -solid -double -# -# CSS_PROP_FONT: -# -caption -icon -menu -message-box -small-caption -status-bar -# -# CSS_PROP_FONT_STYLE: -# -#normal -italic -oblique -# -# CSS_PROP_FONT_VARIANT: -# -#normal -small-caps -# -# CSS_PROP_FONT_WEIGHT: -# -normal -bold -bolder -lighter -100 -200 -300 -400 -500 -600 -700 -800 -900 -# -# CSS_PROP_FONT_SIZE: -# -xx-small -x-small -small -medium -large -x-large -xx-large --khtml-xxx-large -smaller -larger -# -# CSS_PROP_FONT_STRETCH: -# -#normal -wider -narrower -ultra-condensed -extra-condensed -condensed -semi-condensed -semi-expanded -expanded -extra-expanded -ultra-expanded -# -# CSS_PROP_GENERIC_FONT_FAMILY: -# -serif -sans-serif -cursive -fantasy -monospace -# -# -# CSS_PROP_BACKGROUND_COLOR: -# -transparent -# -# -# CSS_PROP_*_COLOR -# -aqua -black -blue -crimson -fuchsia -gray -green -indigo -lime -maroon -navy -olive -orange -purple -red -silver -teal -white -yellow -activeborder -activecaption -appworkspace -background -buttonface -buttonhighlight -buttonshadow -buttontext -captiontext -graytext -highlight -highlighttext -inactiveborder -inactivecaption -inactivecaptiontext -infobackground -infotext -menutext -scrollbar -threeddarkshadow -threedface -threedhighlight -threedlightshadow -threedshadow -window -windowframe -windowtext -# -# colors in non strict mode -grey --khtml-text -# -# CSS_PROP_BACKGROUND_REPEAT: -# -repeat -repeat-x -repeat-y -no-repeat -# -# CSS_PROP_VERTICAL_ALIGN: -# -baseline -middle -sub -super -text-top -text-bottom -top -bottom -# HTML alignment MIDDLE has no corresponding CSS alignment --khtml-baseline-middle -# -# CSS_PROP_TEXT_ALIGN: -# --khtml-auto -left -right -center -justify --khtml-left --khtml-right --khtml-center -# -# CSS_PROP_LIST_STYLE_POSITION: -# -outside -inside -# -# CSS_PROP_LIST_STYLE_TYPE: -# -disc -circle -square -box --khtml-diamond -decimal -decimal-leading-zero --khtml-arabic-indic --khtml-lao --khtml-persian --khtml-urdu --khtml-thai --khtml-tibetan -lower-roman -upper-roman -hebrew -armenian -georgian -cjk-ideographic --khtml-japanese-formal --khtml-japanese-informal --khtml-simp-chinese-formal --khtml-simp-chinese-informal --khtml-trad-chinese-formal --khtml-trad-chinese-informal -lower-greek --khtml-upper-greek -lower-alpha -lower-latin -upper-alpha -upper-latin -hiragana -katakana -hiragana-iroha -katakana-iroha --khtml-open-quote --khtml-close-quote -#none -# -# CSS_PROP_DISPLAY: -# -inline -block -list-item -run-in -compact -inline-block -table -inline-table -table-row-group -table-header-group -table-footer-group -table-row -table-column-group -table-column -table-cell -table-caption -#none -# -# CSS_PROP_CURSOR: -# -auto -crosshair -default -pointer -progress -move -e-resize -ne-resize -nw-resize -n-resize -se-resize -sw-resize -s-resize -w-resize -text -wait -help -# -# CSS_PROP_DIRECTION: -# -ltr -rtl -# -# CSS_PROP_TEXT_TRANSFORM: -# -capitalize -uppercase -lowercase -#none -# -# CSS_PROP_VISIBILITY: -# -visible -#hidden -collapse -# -# CSS_PROP_CONTENT: -# -close-quote -no-close-quote -no-open-quote -open-quote -# -# CSS_PROP_WHITE_SPACE: -# -#normal -nowrap -pre -pre-wrap -pre-line --khtml-nowrap -# -# CSS_PROP_WORD_WRAP -# -#normal -break-word -# -# Unordered rest -# -above -absolute -always -avoid -below -bidi-override -blink -both -crop -cross -embed -fixed -hand -hide -higher -invert -landscape -level -line-through -loud -lower -marquee -mix -overline -portrait -relative -scroll -separate -show -static -thick -thin -underline -# -# CSS_PROP__KHTML_FLOW_MODE --khtml-normal --khtml-around-floats - -# CSS3 Values -# CSS_PROP__KHTML_BOX_SIZING -border-box -content-box - -# CSS_PROP__KHTML_USER_INPUT -enabled -disabled -#none - -# CSS_PROP_MARQUEE_DIRECTION -forwards -backwards -ahead -reverse -# left -# right -up -down -# auto - -# CSS_PROP_MARQUEE_SPEED -slow -# normal -fast - -# CSS_PROP_MARQUEE_REPETITION -infinite - -# CSS_PROP_MARQUEE_STYLE -# none -slide -# scroll -alternate -unfurl - -# -# CSS_PROP_TEXT_OVERFLOW -# -clip -ellipsis - -# -# CSS_PROP_BACKGROUND_CLIP/ORIGIN -# -border -content -padding - -# -# Not supported: -# -# CSS_PROP_BORDER_IMAGE -# -# stretch -# repeat -# round -# -# CSS_PROP_AZIMUTH: -# -#A left-side -#A far-left -#A #left -#A center-left -#A #center -#A center-right -#A right -#A far-right -#A right-side -#A behind -#A leftwards -#A rightwards -# -# CSS_PROP_SPEECH_RATE: -# -#A x-slow -#A slow -#A #medium -#A x-fast -#A fast -#A faster -#A slower -# -# CSS_PROP_VOLUME: -# -#A silent -#A x-soft -#A soft -#A #medium -#A high -#A x-high -#A x-loud -# -# CSS_PROP_PITCH: -# -#A x-low -#A low -#A #medium -#A #high -#A #x-high -# -# CSS_PROP_SPEAK: -# -#A #normal -#A #none -#A spell-out -# -# CSS_PROP_SPEAK_HEADER: -# -#A #once -#A always -# -# CSS_PROP_SPEAK_NUMERAL: -# -#A digits -#A continuous -# -# CSS_PROP_SPEAK_PUNCTUATION: -# -#A code -#A #none - diff --git a/khtml/css/html4.css b/khtml/css/html4.css deleted file mode 100644 index c3fd1a347..000000000 --- a/khtml/css/html4.css +++ /dev/null @@ -1,549 +0,0 @@ -/* - * The default style sheet used by khtml to render HTML pages - * (C) 2000-2003 Lars Knoll (knoll@kde.org) - * - * Konqueror/khtml relies on the existence of this style sheet for - * rendering. Do not remove or modify this file unless you know - * what you are doing. - */ - -@namespace "http://www.w3.org/1999/xhtml"; - -html { - display: block; - color: -khtml-text; -} - -/* - * head and it's children all have display=none - */ - -head { - display: none; -} - -meta { - display: none; -} - -title { - display: none; -} - -link { - display: none; -} - -style { - display: none; -} - -script { - display: none; -} - -/* - * generic block level elements - */ - -@media print { - body { - display: block; - margin: 0px; - } -} - -@media screen { - body { - display: block; - margin: 10px; - } -} - -p { - display: block; - margin: 1.0__qem 0px; -} - -div { - display: block; -} - -/* to force a block level context for some cases (broken HTML) */ - -layer { - display: block; -} - -address { - display: block; -} - -blockquote { - display: block; - margin: 1__qem 40px 1em 40px; -} - -q { - display: inline; -} - -q:before { - content: open-quote; -} - -q:after { - content: close-quote; -} - -center { - display: block; - /* special centering to be able to emulate the html4/netscape behavior */ - text-align: -khtml-center; -} - -hr { - display: block; - margin: 12px auto; - border-style: inset; - border-width: 1px; - -khtml-flow-mode: -khtml-around-floats -} - -map { - display: inline; -} - -/* - * heading elements - * margin values rely on font-sizes ratio defined in css-2.1 15.7 - * (cf. cssstyleselector for absolute font-sizes computation) - * we have an 1.1/font-ratio margin - */ - -h1 { - display: block; - font-size: xx-large; - margin: .55__qem 0 .55em 0; - font-weight: bolder; -} - -h2 { - display: block; - font-size: x-large; - margin: .73__qem 0 .73em 0; - font-weight: bolder; -} - -h3 { - display: block; - font-size: large; - margin: 0.92__qem 0 0.92em 0; - font-weight: bolder; -} - -h4 { - display: block; - font-size: medium; - margin: 1.1__qem 0 1.1em 0; - font-weight: bolder; -} - -h5 { - display: block; - font-size: small; - margin: 1.24__qem 0 1.24em 0; - font-weight: bolder; -} - -h6 { - display: block; - font-size: xx-small; - margin: 1.83__qem 0 1.83em 0; - font-weight: bolder; -} - -/* - * tables - */ - -table { - display: table; - border-collapse: separate; - border-spacing: 2px; - -khtml-flow-mode: -khtml-around-floats; - box-sizing: border-box; -} - -table[align="center"] { - margin-left: auto; - margin-right: auto; -} - -table[align="left"] { - float: -khtml-left; -} - -table[align="right"] { - float: -khtml-right; -} - -thead { - display: table-header-group; - border-color: inherit; - vertical-align: middle; -} - -tbody { - display: table-row-group; - border-color: inherit; - vertical-align: middle; -} - -tfoot { - display: table-footer-group; - border-color: inherit; - vertical-align: middle; -} - -col { - display: table-column; -} - -colgroup { - display: table-column-group; -} - -tr { - display: table-row; - vertical-align: inherit; - border-color: inherit; -} - - -td, th { - display: table-cell; - vertical-align: inherit; -} - -th { - font-weight: bolder; -} - -caption { - display: table-caption; - text-align: -khtml-center; -} - -/* - * lists - */ - -ul, menu, dir { - display: block; - list-style-type: disc; - margin: 1__qem 0 1em 0; - -khtml-padding-start: 40px -} - -ol { - display: block; - list-style-type: decimal; - margin: 1__qem 0 1em 0; - -khtml-padding-start: 40px -} - -li { - display: list-item; - -khtml-flow-mode: -khtml-around-floats; -} - - -ul ul, ol ul { - list-style-type: circle; -} - -ol ol ul, ol ul ul, ul ol ul, ul ul ul { - list-style-type: square; -} - - -dd { - display: block; -} - -dl > dd { - -khtml-margin-start: 40px; -} - -dl { - display: block; - margin: 1__qem 0 1em 0; -} - -dt { - display: block; -} - -dl[compact] > dt { - display: compact; -} - -ol ul, -ul ol, -ul ul, -ol ol { - margin-top: auto; - margin-bottom: auto; -} - -li > p { - margin-top: auto; -/* margin-bottom: auto;*/ -} - -li > div { - margin-top: auto; -/* margin-bottom: auto;*/ -} - -/* - * form elements - */ - -form { - display: block; - margin: 0__qem 0 1em 0; -} - -legend { - display: block; - padding-left: 2px; - padding-right: 2px; - border: none; - margin: 0; -} - -fieldset { - display: block; - padding: 0.75em 0.625em; - margin: 1.0em 0; - border: 2px groove threedface; - -khtml-flow-mode: -khtml-around-floats -} - -button { - display: inline-block; - border: 2px outset buttonface; - background-color: buttonface; - color: buttontext; - padding: 2px 2px 2px 2px; - cursor: default; -} - -button:active { - border-style: inset; -} - -input, textarea { - text-align: -khtml-auto; -} - -input, textarea, select, button { - font-weight: normal; - margin: 0__qem; -} - -input { color: windowtext; - font-family: sans-serif; - font-size: small; - border: 2px -khtml-native; -} - -input[type="hidden"] { - display: none; -} - -input[type="radio"], input[type="checkbox"] { - margin: 0 0.5ex; - color: buttontext; -} - -input[type="text"], input[type="password"] { - cursor: text; -} - -input[type="submit"], input[type="reset"], input[type="button"] { - color: buttontext; -} - -isindex { color: windowtext; font-size: small; } - - -option, -optgroup, -area, -param { - display: none; -} - -select { - font-family: sans-serif; - font-size: small; - color: windowtext; -} - -textarea { - color: windowtext; - font-family: monospace; - border: 2px -khtml-native; -} - -/* - * inline elements - */ - -u, -ins { - text-decoration: underline; -} - -strong, -b { - font-weight: bolder; -} - -i, -cite, -em, -var, -address { - font-style: italic; -} - -tt, -code, -kbd, -samp { - font-family: monospace; -} - -pre, -xmp, -plaintext { - display: block; - font-family: monospace; - white-space: pre; - margin: 1__qem 0; -} - -big { - font-size: larger; -} - -small { - font-size: smaller; -} - -s, -strike, -del { - text-decoration: line-through; -} - -sub { - vertical-align: sub; - font-size: smaller; -} -sup { - vertical-align: super; - font-size: smaller; -} - -abbr, acronym { - font-variant: small-caps; - letter-spacing: 0.1em -} - -pre[wrap] { - white-space: pre-wrap -} - -*|:focus { outline: 1px dotted invert } -a:link:active { color: red; outline: 1px dotted invert; } -a:visited:active { color: red; outline: 1px dotted invert; } - -/* with the current design it is too expensive to set this default via css -:before,:after { white-space: pre-line } -*/ - -/* ### use this to replace renderbr - br:before { content: "\n" } -*/ - - -/* bidirectionality settings (do not change) */ - -bdo[dir="ltr"] { - direction: ltr; - unicode-bidi: bidi-override; -} - -bdo[dir="rtl"] { - direction: rtl; - unicode-bidi: bidi-override; -} - -/* ### this selector seems to be still broken ... - *[dir="ltr"] { direction: ltr; unicode-bidi: embed } - *[dir="rtl"] { direction: rtl; unicode-bidi: embed } -*/ - -/* elements that are block-level in html4 */ -/* ### don't support unicode-bidi at the moment - address, blockquote, body, dd, div, dl, dt, fieldset, - form, frame, frameset, h1, h2, h3, h4, h5, h6, iframe, - noscript, noframes, object, ol, p, ul, applet, center, - dir, hr, menu, pre, li, table, tr, thead, tbody, tfoot, - col, colgroup, td, th, caption - { unicode-bidi: embed } -*/ - -/* end bidi settings */ - -/* - * other elements - */ - -noframes { - display: none; -} - -frameset { - display: block; -} - -frame { - display: block; -} - -nobr { - white-space: nowrap; -} - -wbr { - white-space: normal; -} - -marquee { - display: inline-block; - overflow: marquee; -} - -/* noscript is handled internally, as it depends on the html settings */ - -@media print { - h1, h2, h3, - h4, h5, h6 { page-break-after: avoid } - ul, ol, dl { page-break-before: avoid } -} diff --git a/khtml/css/makeprop b/khtml/css/makeprop deleted file mode 100644 index a1a30ac97..000000000 --- a/khtml/css/makeprop +++ /dev/null @@ -1,57 +0,0 @@ -# This file is part of the KDE libraries -# -# Copyright (C) 1999 Waldo Bastian (bastian@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. -# -#---------------------------------------------------------------------------- -# -# KDE HTML Widget -- Script to generate cssproperties.c and cssproperties.h -# -grep "^[^\#]" cssproperties.in > cssproperties.strip - -echo -e '%{\n/* This file is automatically generated from cssproperties.in by makeprop, do not edit */\n/* Copyright 1999 W. Bastian */\n#include "cssproperties.h"\n%}\nstruct props {\n const char *name;\n int id;\n};\n\nstatic const struct props * findProp (register const char *str, register unsigned int len);\n\n%%' > cssproperties.gperf -cat cssproperties.strip | awk '{ do { prop = $0; gsub("-", "_"); print prop ", CSS_PROP_" toupper($0) } while (getline) }' >> cssproperties.gperf -echo '%%' >> cssproperties.gperf -echo -e '/* This file is automatically generated from cssproperties.in by makeprop, do not edit */\n/* Copyright 1998 W. Bastian */\n\n#ifndef CSSPROPERTIES_H\n#define CSSPROPERTIES_H\n\nDOM::DOMString getPropertyName(unsigned short id) KDE_NO_EXPORT;\n' > cssproperties.h -cat cssproperties.strip | awk '{ \ -i=1; \ -print "#define CSS_PROP_INVALID 0"; \ -print "#define CSS_PROP_MIN 1"; \ -do { gsub("-", "_"); print "#define CSS_PROP_" toupper($0) " " i; i = i + 1 } while (getline); \ -print ""; \ -print "#define CSS_PROP_MAX CSS_PROP_Z_INDEX"; \ -print "#define CSS_PROP_TOTAL " i \ -}' >> cssproperties.h -gperf -a -L 'ANSI-C' -E -C -c -o -t -k '*' -NfindProp -Hhash_prop -Wwordlist_prop -D -s 2 cssproperties.gperf > cssproperties.c || exit 1 -echo -e '#endif\n' >> cssproperties.h - -cat cssproperties.strip | awk '{ \ -i=1; \ -print "static const char * const propertyList[] = {"; \ -print "\"\","; \ -do { print "\"" $0 "\", "; i = i + 1 } while (getline); \ -print " 0"; \ -print "};"; \ -print "DOMString getPropertyName(unsigned short id)"; \ -print "{"; \ -print " if(id >= CSS_PROP_TOTAL || id == 0)"; \ -print " return DOMString();";\ -print " else";\ -print " return DOMString(propertyList[id]);"; \ -print "}"; \ -print ""; \ -}' >> cssproperties.c diff --git a/khtml/css/makevalues b/khtml/css/makevalues deleted file mode 100755 index 0f81f1612..000000000 --- a/khtml/css/makevalues +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/sh -# This file is part of the KDE libraries -# -# Copyright (C) 1999 Waldo Bastian (bastian@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. -# -#---------------------------------------------------------------------------- -# -# KDE HTML Widget -- Script to generate cssvalues.c and cssvalues.h -# -grep "^[^\#]" cssvalues.in > cssvalues.strip - -echo -e '%{\n/* This file is automatically generated from cssvalues.in by makevalues, do not edit */\n/* Copyright 1999 W. Bastian */\n#include "cssvalues.h"\n%}\nstruct css_value {\n const char *name;\n int id;\n};\n\nstatic const css_value* findValue (register const char *str, register unsigned int len);\n\n%%' > cssvalues.gperf -cat cssvalues.strip | awk '{ do { prop = $0; gsub("-", "_"); print prop ", CSS_VAL_" toupper($0) } while (getline) }' >> cssvalues.gperf -echo '%%' >> cssvalues.gperf -echo -e '/* This file is automatically generated from cssvalues.in by -#makevalues, do not edit */\n/* Copyright 1998 W. Bastian */\n\n#ifndef CSSVALUES_H\n#define CSSVALUES_H\n\nDOM::DOMString getValueName(unsigned short id) KDE_NO_EXPORT;\n' > cssvalues.h -cat cssvalues.strip | awk '{ \ -i=1; \ -print "#define CSS_VAL_INVALID 0"; \ -print "#define CSS_VAL_MIN 1"; \ -do { gsub("-", "_"); print "#define CSS_VAL_" toupper($0) " " i; i = i + 1 } while (getline); \ -print ""; \ -print "#define CSS_VAL_TOTAL " i \ -}' >> cssvalues.h -gperf -L 'ANSI-C' -E -c -C -n -o -t -k '*' -NfindValue -Hhash_val -Wwordlist_value -D cssvalues.gperf > cssvalues.c || exit 1 -echo -e '#endif\n' >> cssvalues.h - -cat cssvalues.strip | awk '{ \ -i=1; \ -print "static const char * const valueList[] = {"; \ -print "\"\","; \ -do { print "\"" $0 "\", "; i = i + 1 } while (getline); \ -print " 0"; \ -print "};"; \ -print "DOMString getValueName(unsigned short id)"; \ -print "{"; \ -print " if(id >= CSS_VAL_TOTAL || id == 0)"; \ -print " return DOMString();";\ -print " else";\ -print " return DOMString(valueList[id]);"; \ -print "}"; \ -print ""; \ -}' >> cssvalues.c - - - - - diff --git a/khtml/css/parser.cpp b/khtml/css/parser.cpp deleted file mode 100644 index 8b2e008d8..000000000 --- a/khtml/css/parser.cpp +++ /dev/null @@ -1,2875 +0,0 @@ -/* A Bison parser, made by GNU Bison 1.875d. */ - -/* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - 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 the - GNU 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. -*/ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* Written by Richard Stallman by simplifying the original so called - ``semantic'' parser. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output. */ -#define YYBISON 1 - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 1 - -/* Using locations. */ -#define YYLSP_NEEDED 0 - -/* If NAME_PREFIX is specified substitute the variables and functions - names. */ -#define yyparse cssyyparse -#define yylex cssyylex -#define yyerror cssyyerror -#define yylval cssyylval -#define yychar cssyychar -#define yydebug cssyydebug -#define yynerrs cssyynerrs - - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - UNIMPORTANT_TOK = 258, - S = 259, - SGML_CD = 260, - INCLUDES = 261, - DASHMATCH = 262, - BEGINSWITH = 263, - ENDSWITH = 264, - CONTAINS = 265, - STRING = 266, - IDENT = 267, - NTH = 268, - HASH = 269, - IMPORT_SYM = 270, - PAGE_SYM = 271, - MEDIA_SYM = 272, - FONT_FACE_SYM = 273, - CHARSET_SYM = 274, - NAMESPACE_SYM = 275, - KHTML_RULE_SYM = 276, - KHTML_DECLS_SYM = 277, - KHTML_VALUE_SYM = 278, - IMPORTANT_SYM = 279, - QEMS = 280, - EMS = 281, - EXS = 282, - PXS = 283, - CMS = 284, - MMS = 285, - INS = 286, - PTS = 287, - PCS = 288, - DEGS = 289, - RADS = 290, - GRADS = 291, - MSECS = 292, - SECS = 293, - HERZ = 294, - KHERZ = 295, - DIMEN = 296, - PERCENTAGE = 297, - FLOAT = 298, - INTEGER = 299, - URI = 300, - FUNCTION = 301, - NOTFUNCTION = 302, - UNICODERANGE = 303 - }; -#endif -#define UNIMPORTANT_TOK 258 -#define S 259 -#define SGML_CD 260 -#define INCLUDES 261 -#define DASHMATCH 262 -#define BEGINSWITH 263 -#define ENDSWITH 264 -#define CONTAINS 265 -#define STRING 266 -#define IDENT 267 -#define NTH 268 -#define HASH 269 -#define IMPORT_SYM 270 -#define PAGE_SYM 271 -#define MEDIA_SYM 272 -#define FONT_FACE_SYM 273 -#define CHARSET_SYM 274 -#define NAMESPACE_SYM 275 -#define KHTML_RULE_SYM 276 -#define KHTML_DECLS_SYM 277 -#define KHTML_VALUE_SYM 278 -#define IMPORTANT_SYM 279 -#define QEMS 280 -#define EMS 281 -#define EXS 282 -#define PXS 283 -#define CMS 284 -#define MMS 285 -#define INS 286 -#define PTS 287 -#define PCS 288 -#define DEGS 289 -#define RADS 290 -#define GRADS 291 -#define MSECS 292 -#define SECS 293 -#define HERZ 294 -#define KHERZ 295 -#define DIMEN 296 -#define PERCENTAGE 297 -#define FLOAT 298 -#define INTEGER 299 -#define URI 300 -#define FUNCTION 301 -#define NOTFUNCTION 302 -#define UNICODERANGE 303 - - - - -/* Copy the first part of user declarations. */ - - - -/* - * This file is part of the KDE libraries - * Copyright (C) 2002-2003 Lars Knoll (knoll@kde.org) - * Copyright (c) 2003 Apple Computer - * Copyright (C) 2003 Dirk Mueller (mueller@kde.org) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <string.h> -#include <stdlib.h> - -#include <dom/dom_string.h> -#include <xml/dom_docimpl.h> -#include <css/cssstyleselector.h> -#include <css/css_ruleimpl.h> -#include <css/css_stylesheetimpl.h> -#include <css/css_valueimpl.h> -#include <misc/htmlhashes.h> -#include "cssparser.h" - -#include <assert.h> -#include <kdebug.h> -//#define CSS_DEBUG - -using namespace DOM; - -// -// The following file defines the function -// const struct props *findProp(const char *word, int len) -// -// with 'props->id' a CSS property in the range from CSS_PROP_MIN to -// (and including) CSS_PROP_TOTAL-1 - -// turn off inlining to void warning with newer gcc -#undef __inline -#define __inline -#include "cssproperties.c" -#include "cssvalues.c" -#undef __inline - -int DOM::getPropertyID(const char *tagStr, int len) -{ - const struct props *propsPtr = findProp(tagStr, len); - if (!propsPtr) - return 0; - - return propsPtr->id; -} - -static inline int getValueID(const char *tagStr, int len) -{ - const struct css_value *val = findValue(tagStr, len); - if (!val) - return 0; - - return val->id; -} - - -#define YYDEBUG 0 -#undef YYMAXDEPTH -#define YYPARSE_PARAM parser - - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 -#endif - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) - -typedef union YYSTYPE { - CSSRuleImpl *rule; - CSSSelector *selector; - TQPtrList<CSSSelector> *selectorList; - bool ok; - MediaListImpl *mediaList; - CSSMediaRuleImpl *mediaRule; - CSSRuleListImpl *ruleList; - ParseString string; - float val; - int prop_id; - unsigned int attribute; - unsigned int element; - unsigned int ns; - CSSSelector::Relation relation; - CSSSelector::Match match; - bool b; - char tok; - Value value; - ValueList *valueList; -} YYSTYPE; -/* Line 191 of yacc.c. */ - -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - - - -/* Copy the second part of user declarations. */ - - - -static inline int cssyyerror(const char *x ) -{ -#ifdef CSS_DEBUG - tqDebug( "%s", x ); -#else - Q_UNUSED( x ); -#endif - return 1; -} - -static int cssyylex( YYSTYPE *yylval ) { - return CSSParser::current()->lex( yylval ); -} - -#define null 1 - - - -/* Line 214 of yacc.c. */ - - -#if ! defined (yyoverflow) || YYERROR_VERBOSE - -# ifndef YYFREE -# define YYFREE free -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# endif - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# define YYSTACK_ALLOC alloca -# endif -# else -# if defined (alloca) || defined (_ALLOCA_H) -# define YYSTACK_ALLOC alloca -# else -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# else -# if defined (__STDC__) || defined (__cplusplus) -# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# endif -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# endif -#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ - - -#if (! defined (yyoverflow) \ - && (! defined (__cplusplus) \ - || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - short int yyss; - YYSTYPE yyvs; - }; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) - -/* Copy COUNT objects from FROM to TO. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined (__GNUC__) && 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) -# else -# define YYCOPY(To, From, Count) \ - do \ - { \ - register YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (0) -# endif -# endif - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (0) - -#endif - -#if defined (__STDC__) || defined (__cplusplus) - typedef signed char yysigned_char; -#else - typedef short int yysigned_char; -#endif - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 16 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 479 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 67 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 54 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 162 -/* YYNRULES -- Number of states. */ -#define YYNSTATES 305 - -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 303 - -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ -static const unsigned char yytranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 64, 18, 58, 57, 61, 16, 65, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 15, 56, - 2, 63, 60, 2, 66, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 17, 2, 62, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 54, 19, 55, 59, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53 -}; - -#if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const unsigned short int yyprhs[] = -{ - 0, 0, 3, 9, 12, 15, 18, 25, 28, 34, - 35, 38, 39, 42, 45, 46, 52, 56, 60, 61, - 65, 72, 76, 80, 81, 85, 92, 96, 100, 101, - 104, 105, 109, 111, 113, 115, 117, 119, 121, 124, - 126, 128, 129, 131, 133, 138, 141, 149, 150, 154, - 157, 161, 165, 169, 173, 176, 179, 182, 183, 185, - 187, 190, 192, 197, 200, 202, 206, 209, 211, 214, - 217, 220, 224, 227, 231, 236, 240, 242, 244, 246, - 249, 252, 254, 256, 258, 260, 263, 266, 271, 280, - 286, 296, 298, 300, 302, 304, 306, 308, 310, 312, - 315, 319, 324, 329, 334, 339, 345, 350, 355, 360, - 366, 372, 376, 380, 385, 390, 396, 399, 402, 405, - 406, 408, 412, 415, 418, 419, 421, 424, 427, 430, - 433, 436, 439, 441, 443, 446, 449, 452, 455, 458, - 461, 464, 467, 470, 473, 476, 479, 482, 485, 488, - 491, 494, 497, 500, 506, 510, 513, 517, 521, 524, - 530, 534, 536 -}; - -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const yysigned_char yyrhs[] = -{ - 68, 0, -1, 74, 73, 75, 77, 80, -1, 69, - 72, -1, 70, 72, -1, 71, 72, -1, 26, 54, - 72, 92, 72, 55, -1, 27, 106, -1, 28, 54, - 72, 111, 55, -1, -1, 72, 4, -1, -1, 73, - 5, -1, 73, 4, -1, -1, 24, 72, 11, 72, - 56, -1, 24, 1, 119, -1, 24, 1, 56, -1, - -1, 75, 76, 73, -1, 20, 72, 82, 72, 83, - 56, -1, 20, 1, 119, -1, 20, 1, 56, -1, - -1, 77, 78, 73, -1, 25, 72, 79, 82, 72, - 56, -1, 25, 1, 119, -1, 25, 1, 56, -1, - -1, 12, 4, -1, -1, 80, 81, 73, -1, 92, - -1, 85, -1, 88, -1, 89, -1, 118, -1, 117, - -1, 76, 1, -1, 11, -1, 50, -1, -1, 84, - -1, 87, -1, 84, 57, 72, 87, -1, 84, 1, - -1, 22, 72, 84, 54, 72, 86, 55, -1, -1, - 86, 92, 72, -1, 12, 72, -1, 21, 1, 119, - -1, 21, 1, 56, -1, 23, 1, 119, -1, 23, - 1, 56, -1, 58, 72, -1, 59, 72, -1, 60, - 72, -1, -1, 61, -1, 58, -1, 93, 106, -1, - 94, -1, 93, 57, 72, 94, -1, 93, 1, -1, - 96, -1, 94, 90, 96, -1, 94, 1, -1, 19, - -1, 18, 19, -1, 12, 19, -1, 97, 72, -1, - 97, 98, 72, -1, 98, 72, -1, 95, 97, 72, - -1, 95, 97, 98, 72, -1, 95, 98, 72, -1, - 12, -1, 18, -1, 99, -1, 98, 99, -1, 98, - 1, -1, 14, -1, 100, -1, 102, -1, 105, -1, - 16, 12, -1, 12, 72, -1, 17, 72, 101, 62, - -1, 17, 72, 101, 103, 72, 104, 72, 62, -1, - 17, 72, 95, 101, 62, -1, 17, 72, 95, 101, - 103, 72, 104, 72, 62, -1, 63, -1, 6, -1, - 7, -1, 8, -1, 9, -1, 10, -1, 12, -1, - 11, -1, 15, 12, -1, 15, 15, 12, -1, 15, - 51, 13, 64, -1, 15, 51, 49, 64, -1, 15, - 51, 12, 64, -1, 15, 51, 11, 64, -1, 15, - 52, 72, 96, 64, -1, 54, 72, 108, 55, -1, - 54, 72, 1, 55, -1, 54, 72, 107, 55, -1, - 54, 72, 107, 108, 55, -1, 54, 72, 107, 1, - 55, -1, 108, 56, 72, -1, 1, 56, 72, -1, - 107, 108, 56, 72, -1, 107, 1, 56, 72, -1, - 109, 15, 72, 111, 110, -1, 1, 119, -1, 12, - 72, -1, 29, 72, -1, -1, 113, -1, 111, 112, - 113, -1, 65, 72, -1, 57, 72, -1, -1, 114, - -1, 91, 114, -1, 46, 72, -1, 11, 72, -1, - 12, 72, -1, 50, 72, -1, 53, 72, -1, 116, - -1, 115, -1, 49, 72, -1, 48, 72, -1, 47, - 72, -1, 33, 72, -1, 34, 72, -1, 35, 72, - -1, 36, 72, -1, 37, 72, -1, 38, 72, -1, - 39, 72, -1, 40, 72, -1, 41, 72, -1, 42, - 72, -1, 43, 72, -1, 44, 72, -1, 45, 72, - -1, 31, 72, -1, 30, 72, -1, 32, 72, -1, - 51, 72, 111, 64, 72, -1, 51, 72, 1, -1, - 14, 72, -1, 66, 1, 119, -1, 66, 1, 56, - -1, 1, 119, -1, 54, 1, 120, 1, 55, -1, - 54, 1, 55, -1, 119, -1, 120, 1, 119, -1 -}; - -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const unsigned short int yyrline[] = -{ - 0, 257, 257, 258, 259, 260, 264, 271, 277, 302, - 303, 306, 308, 309, 312, 314, 319, 320, 323, 325, - 336, 346, 349, 355, 356, 360, 368, 369, 373, 374, - 377, 379, 390, 391, 392, 393, 394, 395, 396, 400, - 401, 405, 408, 413, 417, 422, 429, 443, 444, 454, - 476, 479, 485, 488, 494, 495, 496, 497, 501, 502, - 506, 526, 540, 555, 562, 565, 579, 586, 587, 588, - 592, 596, 601, 606, 613, 622, 634, 650, 656, 660, - 670, 677, 683, 684, 685, 689, 698, 722, 727, 733, - 741, 753, 756, 759, 762, 765, 768, 774, 775, 779, - 785, 791, 798, 805, 812, 819, 828, 831, 834, 837, - 842, 848, 852, 855, 860, 866, 888, 894, 901, 902, - 906, 910, 926, 929, 932, 938, 939, 941, 942, 943, - 949, 950, 951, 953, 959, 960, 961, 962, 963, 964, - 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, - 975, 976, 977, 982, 990, 1006, 1013, 1019, 1028, 1054, - 1055, 1059, 1060 -}; -#endif - -#if YYDEBUG || YYERROR_VERBOSE -/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "$end", "error", "$undefined", "UNIMPORTANT_TOK", "S", "SGML_CD", - "INCLUDES", "DASHMATCH", "BEGINSWITH", "ENDSWITH", "CONTAINS", "STRING", - "IDENT", "NTH", "HASH", "':'", "'.'", "'['", "'*'", "'|'", "IMPORT_SYM", - "PAGE_SYM", "MEDIA_SYM", "FONT_FACE_SYM", "CHARSET_SYM", "NAMESPACE_SYM", - "KHTML_RULE_SYM", "KHTML_DECLS_SYM", "KHTML_VALUE_SYM", "IMPORTANT_SYM", - "QEMS", "EMS", "EXS", "PXS", "CMS", "MMS", "INS", "PTS", "PCS", "DEGS", - "RADS", "GRADS", "MSECS", "SECS", "HERZ", "KHERZ", "DIMEN", "PERCENTAGE", - "FLOAT", "INTEGER", "URI", "FUNCTION", "NOTFUNCTION", "UNICODERANGE", - "'{'", "'}'", "';'", "','", "'+'", "'~'", "'>'", "'-'", "']'", "'='", - "')'", "'/'", "'@'", "$accept", "stylesheet", "khtml_rule", - "khtml_decls", "khtml_value", "maybe_space", "maybe_sgml", - "maybe_charset", "import_list", "import", "namespace_list", "namespace", - "maybe_ns_prefix", "rule_list", "rule", "string_or_uri", - "maybe_media_list", "media_list", "media", "ruleset_list", "medium", - "page", "font_face", "combinator", "unary_operator", "ruleset", - "selector_list", "selector", "namespace_selector", "simple_selector", - "element_name", "specifier_list", "specifier", "class", "attrib_id", - "attrib", "match", "ident_or_string", "pseudo", "declaration_block", - "declaration_list", "declaration", "property", "prio", "expr", - "operator", "term", "unary_term", "function", "hexcolor", "invalid_at", - "invalid_rule", "invalid_block", "invalid_block_list", 0 -}; -#endif - -# ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ -static const unsigned short int yytoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 58, 46, 91, 42, 124, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 123, 125, 59, 44, 43, 126, - 62, 45, 93, 61, 41, 47, 64 -}; -# endif - -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const unsigned char yyr1[] = -{ - 0, 67, 68, 68, 68, 68, 69, 70, 71, 72, - 72, 73, 73, 73, 74, 74, 74, 74, 75, 75, - 76, 76, 76, 77, 77, 78, 78, 78, 79, 79, - 80, 80, 81, 81, 81, 81, 81, 81, 81, 82, - 82, 83, 83, 84, 84, 84, 85, 86, 86, 87, - 88, 88, 89, 89, 90, 90, 90, 90, 91, 91, - 92, 93, 93, 93, 94, 94, 94, 95, 95, 95, - 96, 96, 96, 96, 96, 96, 97, 97, 98, 98, - 98, 99, 99, 99, 99, 100, 101, 102, 102, 102, - 102, 103, 103, 103, 103, 103, 103, 104, 104, 105, - 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, - 106, 107, 107, 107, 107, 108, 108, 109, 110, 110, - 111, 111, 112, 112, 112, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 115, 115, 116, 117, 117, 118, 119, - 119, 120, 120 -}; - -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const unsigned char yyr2[] = -{ - 0, 2, 5, 2, 2, 2, 6, 2, 5, 0, - 2, 0, 2, 2, 0, 5, 3, 3, 0, 3, - 6, 3, 3, 0, 3, 6, 3, 3, 0, 2, - 0, 3, 1, 1, 1, 1, 1, 1, 2, 1, - 1, 0, 1, 1, 4, 2, 7, 0, 3, 2, - 3, 3, 3, 3, 2, 2, 2, 0, 1, 1, - 2, 1, 4, 2, 1, 3, 2, 1, 2, 2, - 2, 3, 2, 3, 4, 3, 1, 1, 1, 2, - 2, 1, 1, 1, 1, 2, 2, 4, 8, 5, - 9, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 3, 4, 4, 4, 4, 5, 4, 4, 4, 5, - 5, 3, 3, 4, 4, 5, 2, 2, 2, 0, - 1, 3, 2, 2, 0, 1, 2, 2, 2, 2, - 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 5, 3, 2, 3, 3, 2, 5, - 3, 1, 3 -}; - -/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state - STATE-NUM when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const unsigned char yydefact[] = -{ - 14, 0, 0, 0, 0, 0, 9, 9, 9, 11, - 0, 0, 9, 9, 7, 9, 1, 3, 4, 5, - 18, 0, 17, 16, 10, 9, 0, 0, 0, 13, - 12, 23, 0, 0, 76, 81, 0, 0, 9, 77, - 67, 9, 0, 0, 0, 64, 9, 0, 78, 82, - 83, 84, 0, 9, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 59, 58, 0, 124, 120, 125, 133, - 132, 0, 11, 30, 160, 161, 0, 15, 69, 99, - 0, 0, 9, 85, 0, 68, 0, 63, 9, 60, - 66, 9, 9, 9, 0, 76, 77, 9, 0, 70, - 0, 80, 72, 79, 107, 9, 116, 117, 0, 108, - 0, 106, 9, 9, 128, 129, 155, 151, 150, 152, - 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 127, 136, 135, 134, 130, 0, 131, - 126, 8, 9, 9, 0, 0, 0, 19, 0, 11, - 0, 0, 100, 0, 0, 0, 0, 0, 9, 0, - 0, 0, 6, 0, 54, 55, 56, 65, 73, 0, - 75, 71, 112, 110, 9, 109, 9, 111, 0, 154, - 124, 123, 122, 121, 22, 21, 39, 40, 9, 0, - 28, 24, 0, 0, 9, 0, 0, 0, 11, 33, - 34, 35, 32, 37, 36, 159, 162, 104, 103, 101, - 102, 0, 86, 9, 0, 92, 93, 94, 95, 96, - 87, 91, 9, 0, 74, 114, 113, 124, 9, 41, - 27, 26, 0, 0, 158, 0, 0, 0, 0, 38, - 31, 105, 89, 9, 0, 9, 115, 153, 9, 0, - 0, 43, 29, 9, 51, 50, 0, 53, 52, 157, - 156, 0, 98, 97, 9, 118, 49, 20, 45, 9, - 0, 9, 9, 0, 0, 25, 47, 0, 88, 44, - 0, 90, 46, 9, 48 -}; - -/* YYDEFGOTO[NTERM-NUM]. */ -static const short int yydefgoto[] = -{ - -1, 5, 6, 7, 8, 232, 20, 9, 31, 92, - 93, 169, 253, 170, 218, 208, 269, 270, 219, 300, - 271, 220, 221, 114, 85, 41, 42, 43, 44, 45, - 46, 47, 48, 49, 181, 50, 242, 284, 51, 14, - 54, 55, 56, 266, 86, 164, 87, 88, 89, 90, - 223, 224, 126, 96 -}; - -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -167 -static const short int yypact[] = -{ - 252, 19, -46, -32, -20, 44, -167, -167, -167, -167, - 147, 183, -167, -167, -167, -167, -167, 96, 96, 96, - 34, 114, -167, -167, -167, -167, 333, 156, 355, -167, - -167, 85, 98, -2, 99, -167, 158, 109, -167, 152, - -167, -167, 52, 241, 222, -167, 229, 162, -167, -167, - -167, -167, 215, -167, 101, 168, 118, -167, -167, -167, - -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, - -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, - -167, -167, -167, -167, -167, 430, 127, -167, -167, -167, - -167, 119, -167, 160, -167, -167, 189, -167, -167, -167, - 202, 116, -167, -167, 14, -167, 104, -167, -167, -167, - -167, -167, -167, -167, 346, -167, -167, 229, 162, 96, - 162, -167, 96, -167, -167, -167, -167, 96, 238, -167, - 210, -167, -167, -167, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 273, 96, - -167, -167, -167, -167, 398, 150, 5, 34, 185, -167, - 125, 157, -167, 154, 169, 217, 218, 333, 99, 152, - 237, 41, -167, 333, 96, 96, 96, -167, 96, 162, - 96, 96, 96, -167, -167, -167, -167, 96, 355, -167, - -36, 96, 96, -167, -167, -167, -167, -167, -167, 161, - 110, 34, 232, 288, -167, 295, 296, 326, -167, -167, - -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, - -167, 264, 96, -167, 87, -167, -167, -167, -167, -167, - -167, -167, -167, 324, 96, 96, 96, 143, -167, 171, - -167, -167, 325, 88, -167, 198, 171, 207, 219, -167, - 34, -167, -167, -167, 31, -167, -167, 96, -167, 274, - 35, -167, -167, -167, -167, -167, 97, -167, -167, -167, - -167, 31, -167, -167, -167, 96, 96, -167, -167, -167, - 79, -167, -167, 23, 171, -167, 96, 27, -167, -167, - 213, -167, -167, -167, 96 -}; - -/* YYPGOTO[NTERM-NUM]. */ -static const short int yypgoto[] = -{ - -167, -167, -167, -167, -167, -1, -82, -167, -167, 163, - -167, -167, -167, -167, -167, 82, -167, 76, -167, -167, - 50, -167, -167, -167, -167, -166, -167, 170, 242, -95, - 310, -29, -34, -167, 175, -167, 122, 89, -167, 315, - -167, 314, -167, -167, -157, -167, 208, 286, -167, -167, - -167, -167, -7, -167 -}; - -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If zero, do what YYDEFACT says. - If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -120 -static const short int yytable[] = -{ - 11, 200, 24, 23, 222, 17, 18, 19, 12, 24, - 167, 26, 27, 123, 28, 118, 206, 120, 24, 187, - 10, 162, 13, -9, 33, 95, 178, 24, 248, 163, - -9, 24, 179, 40, 15, 24, 288, 104, 29, 30, - 106, 247, 282, 283, 16, 119, 122, 235, 236, 237, - 238, 239, 127, 107, 97, 207, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 231, 24, 123, 298, 123, 211, 189, 301, - 166, -42, 289, 235, 236, 237, 238, 239, 288, 206, - 24, 177, 128, 240, 241, 91, 13, 183, 24, 108, - 184, 185, 186, 53, 24, 32, 188, 190, 98, 191, - 165, 103, 252, -9, 192, -2, 212, 173, 174, 175, - -9, 197, 198, 133, 303, 295, 260, 34, 207, 35, - 36, 37, 38, 39, 40, 91, 213, 214, 215, 262, - 241, 291, 21, 94, 289, 123, 129, 52, 205, 182, - 24, 201, 202, 121, 226, 176, -9, 210, 53, -9, - 99, 105, 265, 100, -9, 24, 35, 36, 37, 38, - -9, -9, 161, 268, 162, 168, 209, 24, 244, -9, - 171, 216, 163, 245, 25, 246, -9, -9, -119, -119, - 162, 21, 251, 22, 21, 254, 204, 249, 163, 101, - 102, 21, 225, 256, 172, 21, -9, 250, 227, -9, - -9, -9, -9, 131, 132, 34, -9, 35, 36, 37, - 38, 39, 40, 228, 115, -9, 35, 36, 37, 38, - 116, 264, 110, 35, 36, 37, 38, 267, 275, 233, - 278, 280, 21, -57, 274, -57, -57, -57, -57, -57, - -57, 21, 281, 277, 285, 195, 196, 286, 302, 21, - 124, 125, 290, 21, 199, 279, 1, 24, 2, 3, - 4, 229, 230, 293, 57, 58, 21, 59, 294, 255, - 296, 297, 21, 193, 194, -61, 257, 258, -61, 111, - 112, 113, 304, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 110, 82, 259, 261, 272, - 287, 83, 276, 217, 84, 273, -57, 24, -57, -57, - -57, -57, -57, -57, 299, 34, 180, 35, 36, 37, - 38, 39, 40, 243, 117, 234, 263, 109, 34, 24, - 35, 36, 37, 38, 39, 40, 57, 58, 130, 59, - 292, 160, 203, 0, 0, 0, 0, 0, -62, 0, - 0, -62, 111, 112, 113, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 0, 82, 57, - 58, 0, 59, 83, 0, 0, 84, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 0, 82, 0, 0, 0, 0, 83, 0, 0, 84, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 0, 77, 78, 79 -}; - -static const short int yycheck[] = -{ - 1, 158, 4, 10, 170, 6, 7, 8, 54, 4, - 92, 12, 13, 47, 15, 44, 11, 46, 4, 114, - 1, 57, 54, 4, 25, 32, 12, 4, 64, 65, - 11, 4, 18, 19, 54, 4, 1, 38, 4, 5, - 41, 198, 11, 12, 0, 46, 47, 6, 7, 8, - 9, 10, 53, 1, 56, 50, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 177, 4, 118, 62, 120, 169, 117, 62, - 91, 56, 57, 6, 7, 8, 9, 10, 1, 11, - 4, 102, 1, 62, 63, 20, 54, 108, 4, 57, - 111, 112, 113, 12, 4, 1, 117, 118, 19, 120, - 1, 12, 12, 4, 125, 0, 1, 11, 12, 13, - 11, 132, 133, 15, 300, 56, 218, 12, 50, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 62, - 63, 54, 54, 55, 57, 189, 55, 1, 165, 55, - 4, 162, 163, 1, 171, 49, 4, 168, 12, 50, - 12, 19, 29, 15, 12, 4, 14, 15, 16, 17, - 18, 19, 55, 12, 57, 25, 1, 4, 189, 4, - 1, 66, 65, 194, 11, 196, 11, 12, 55, 56, - 57, 54, 209, 56, 54, 212, 56, 208, 65, 51, - 52, 54, 55, 214, 12, 54, 54, 56, 64, 57, - 58, 59, 60, 55, 56, 12, 64, 14, 15, 16, - 17, 18, 19, 64, 12, 50, 14, 15, 16, 17, - 18, 242, 1, 14, 15, 16, 17, 248, 255, 12, - 257, 258, 54, 12, 56, 14, 15, 16, 17, 18, - 19, 54, 263, 56, 265, 55, 56, 268, 55, 54, - 55, 56, 273, 54, 1, 56, 24, 4, 26, 27, - 28, 64, 64, 284, 11, 12, 54, 14, 289, 1, - 291, 292, 54, 55, 56, 54, 1, 1, 57, 58, - 59, 60, 303, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 1, 53, 1, 64, 4, - 56, 58, 256, 170, 61, 253, 12, 4, 14, 15, - 16, 17, 18, 19, 294, 12, 104, 14, 15, 16, - 17, 18, 19, 183, 44, 180, 234, 42, 12, 4, - 14, 15, 16, 17, 18, 19, 11, 12, 54, 14, - 281, 85, 164, -1, -1, -1, -1, -1, 54, -1, - -1, 57, 58, 59, 60, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, -1, 53, 11, - 12, -1, 14, 58, -1, -1, 61, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - -1, 53, -1, -1, -1, -1, 58, -1, -1, 61, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, -1, 47, 48, 49 -}; - -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const unsigned char yystos[] = -{ - 0, 24, 26, 27, 28, 68, 69, 70, 71, 74, - 1, 72, 54, 54, 106, 54, 0, 72, 72, 72, - 73, 54, 56, 119, 4, 11, 72, 72, 72, 4, - 5, 75, 1, 72, 12, 14, 15, 16, 17, 18, - 19, 92, 93, 94, 95, 96, 97, 98, 99, 100, - 102, 105, 1, 12, 107, 108, 109, 11, 12, 14, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 53, 58, 61, 91, 111, 113, 114, 115, - 116, 20, 76, 77, 55, 119, 120, 56, 19, 12, - 15, 51, 52, 12, 72, 19, 72, 1, 57, 106, - 1, 58, 59, 60, 90, 12, 18, 97, 98, 72, - 98, 1, 72, 99, 55, 56, 119, 72, 1, 55, - 108, 55, 56, 15, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 114, 55, 57, 65, 112, 1, 72, 73, 25, 78, - 80, 1, 12, 11, 12, 13, 49, 72, 12, 18, - 95, 101, 55, 72, 72, 72, 72, 96, 72, 98, - 72, 72, 72, 55, 56, 55, 56, 72, 72, 1, - 111, 72, 72, 113, 56, 119, 11, 50, 82, 1, - 72, 73, 1, 21, 22, 23, 66, 76, 81, 85, - 88, 89, 92, 117, 118, 55, 119, 64, 64, 64, - 64, 96, 72, 12, 101, 6, 7, 8, 9, 10, - 62, 63, 103, 94, 72, 72, 72, 111, 64, 72, - 56, 119, 12, 79, 119, 1, 72, 1, 1, 1, - 73, 64, 62, 103, 72, 29, 110, 72, 12, 83, - 84, 87, 4, 82, 56, 119, 84, 56, 119, 56, - 119, 72, 11, 12, 104, 72, 72, 56, 1, 57, - 72, 54, 104, 72, 72, 56, 72, 72, 62, 87, - 86, 62, 55, 92, 72 -}; - -#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) -# define YYSIZE_T __SIZE_TYPE__ -#endif -#if ! defined (YYSIZE_T) && defined (size_t) -# define YYSIZE_T size_t -#endif -#if ! defined (YYSIZE_T) -# if defined (__STDC__) || defined (__cplusplus) -# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# endif -#endif -#if ! defined (YYSIZE_T) -# define YYSIZE_T unsigned int -#endif - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - - -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ - -#define YYFAIL goto yyerrlab - -#define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - yytoken = YYTRANSLATE (yychar); \ - YYPOPSTACK; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror ("syntax error: cannot back up");\ - YYERROR; \ - } \ -while (0) - -#define YYTERROR 1 -#define YYERRCODE 256 - -/* YYLLOC_DEFAULT -- Compute the default location (before the actions - are run). */ - -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - ((Current).first_line = (Rhs)[1].first_line, \ - (Current).first_column = (Rhs)[1].first_column, \ - (Current).last_line = (Rhs)[N].last_line, \ - (Current).last_column = (Rhs)[N].last_column) -#endif - -/* YYLEX -- calling `yylex' with the right arguments. */ - -#ifdef YYLEX_PARAM -# define YYLEX yylex (&yylval, YYLEX_PARAM) -#else -# define YYLEX yylex (&yylval) -#endif - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include <stdio.h> /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) - -# define YYDSYMPRINT(Args) \ -do { \ - if (yydebug) \ - yysymprint Args; \ -} while (0) - -# define YYDSYMPRINTF(Title, Token, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yysymprint (stderr, \ - Token, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_stack_print (short int *bottom, short int *top) -#else -static void -yy_stack_print (bottom, top) - short int *bottom; - short int *top; -#endif -{ - YYFPRINTF (stderr, "Stack now"); - for (/* Nothing. */; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); - YYFPRINTF (stderr, "\n"); -} - -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (0) - - -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_reduce_print (int yyrule) -#else -static void -yy_reduce_print (yyrule) - int yyrule; -#endif -{ - int yyi; - unsigned int yylno = yyrline[yyrule]; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", - yyrule - 1, yylno); - /* Print the symbols being reduced, and their result. */ - for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) - YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); - YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (Rule); \ -} while (0) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YYDSYMPRINT(Args) -# define YYDSYMPRINTF(Title, Token, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#if defined (YYMAXDEPTH) && YYMAXDEPTH == 0 -# undef YYMAXDEPTH -#endif - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - - - -#if YYERROR_VERBOSE - -# ifndef yystrlen -# if defined (__GLIBC__) && defined (_STRING_H) -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -static YYSIZE_T -# if defined (__STDC__) || defined (__cplusplus) -yystrlen (const char *yystr) -# else -yystrlen (yystr) - const char *yystr; -# endif -{ - register const char *yys = yystr; - - while (*yys++ != '\0') - continue; - - return yys - yystr - 1; -} -# endif -# endif - -# ifndef yystpcpy -# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -static char * -# if defined (__STDC__) || defined (__cplusplus) -yystpcpy (char *yydest, const char *yysrc) -# else -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -# endif -{ - register char *yyd = yydest; - register const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -# endif - -#endif /* !YYERROR_VERBOSE */ - - - -#if YYDEBUG -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) -#else -static void -yysymprint (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE *yyvaluep; -#endif -{ - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - - if (yytype < YYNTOKENS) - { - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); -# ifdef YYPRINT - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# endif - } - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - - switch (yytype) - { - default: - break; - } - YYFPRINTF (yyoutput, ")"); -} - -#endif /* ! YYDEBUG */ -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yydestruct (int yytype, YYSTYPE *yyvaluep) -#else -static void -yydestruct (yytype, yyvaluep) - int yytype; - YYSTYPE *yyvaluep; -#endif -{ - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - - switch (yytype) - { - case 83: /* maybe_media_list */ - - { delete yyvaluep->mediaList; yyvaluep->mediaList = 0; }; - - break; - case 84: /* media_list */ - - { delete yyvaluep->mediaList; yyvaluep->mediaList = 0; }; - - break; - case 86: /* ruleset_list */ - - { delete yyvaluep->ruleList; yyvaluep->ruleList = 0; }; - - break; - case 93: /* selector_list */ - - { delete yyvaluep->selectorList; yyvaluep->selectorList = 0; }; - - break; - case 94: /* selector */ - - { delete yyvaluep->selector; yyvaluep->selector = 0; }; - - break; - case 96: /* simple_selector */ - - { delete yyvaluep->selector; yyvaluep->selector = 0; }; - - break; - case 98: /* specifier_list */ - - { delete yyvaluep->selector; yyvaluep->selector = 0; }; - - break; - case 99: /* specifier */ - - { delete yyvaluep->selector; yyvaluep->selector = 0; }; - - break; - case 100: /* class */ - - { delete yyvaluep->selector; yyvaluep->selector = 0; }; - - break; - case 102: /* attrib */ - - { delete yyvaluep->selector; yyvaluep->selector = 0; }; - - break; - case 105: /* pseudo */ - - { delete yyvaluep->selector; yyvaluep->selector = 0; }; - - break; - case 111: /* expr */ - - { delete yyvaluep->valueList; yyvaluep->valueList = 0; }; - - break; - - default: - break; - } -} - - -/* Prevent warnings from -Wmissing-prototypes. */ - -#ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM); -# else -int yyparse (); -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - - - - - - -/*----------. -| yyparse. | -`----------*/ - -#ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM) -# else -int yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int -yyparse (void) -#else -int -yyparse () - -#endif -#endif -{ - /* The lookahead symbol. */ -int yychar; - -/* The semantic value of the lookahead symbol. */ -YYSTYPE yylval; - -/* Number of syntax errors so far. */ -int yynerrs; - - register int yystate; - register int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; - - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - short int yyssa[YYINITDEPTH]; - short int *yyss = yyssa; - register short int *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - register YYSTYPE *yyvsp; - - - -#define YYPOPSTACK (yyvsp--, yyssp--) - - YYSIZE_T yystacksize = YYINITDEPTH; - - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - - - /* When reducing, the number of symbols on the RHS of the reduced - rule. */ - int yylen; - - YYDPRINTF ((stderr, "Starting parse\n")); - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - - yyssp = yyss; - yyvsp = yyvs; - - - goto yysetstate; - -/*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | -`------------------------------------------------------------*/ - yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. so pushing a state here evens the stacks. - */ - yyssp++; - - yysetstate: - *yyssp = yystate; - - if (yyss + yystacksize - 1 <= yyssp) - { - /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; - -#ifdef yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - short int *yyss1 = yyss; - - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow ("parser stack overflow", - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - - &yystacksize); - - yyss = yyss1; - yyvs = yyvs1; - } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyoverflowlab; -# else - /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - goto yyoverflowlab; - yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; - - { - short int *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyoverflowlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif -#endif /* no yyoverflow */ - - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - - - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); - - if (yyss + yystacksize - 1 <= yyssp) - YYABORT; - } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - - goto yybackup; - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: - -/* Do appropriate processing given the current state. */ -/* Read a lookahead token if we need one and don't already have one. */ -/* yyresume: */ - - /* First try to decide what to do without reference to lookahead token. */ - - yyn = yypact[yystate]; - if (yyn == YYPACT_NINF) - goto yydefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ - if (yychar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token: ")); - yychar = YYLEX; - } - - if (yychar <= YYEOF) - { - yychar = yytoken = YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else - { - yytoken = YYTRANSLATE (yychar); - YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); - } - - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) - goto yydefault; - yyn = yytable[yyn]; - if (yyn <= 0) - { - if (yyn == 0 || yyn == YYTABLE_NINF) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - - if (yyn == YYFINAL) - YYACCEPT; - - /* Shift the lookahead token. */ - YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); - - /* Discard the token being shifted unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; - - *++yyvsp = yylval; - - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - yystate = yyn; - goto yynewstate; - - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -yydefault: - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - -/*-----------------------------. -| yyreduce -- Do a reduction. | -`-----------------------------*/ -yyreduce: - /* yyn is the number of a rule to reduce with. */ - yylen = yyr2[yyn]; - - /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - - - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 6: - - { - CSSParser *p = static_cast<CSSParser *>(parser); - p->rule = yyvsp[-2].rule; - ;} - break; - - case 7: - - { - /* can be empty */ - ;} - break; - - case 8: - - { - CSSParser *p = static_cast<CSSParser *>(parser); - if ( yyvsp[-1].valueList ) { - p->valueList = yyvsp[-1].valueList; -#ifdef CSS_DEBUG - kdDebug( 6080 ) << " got property for " << p->id << - (p->important?" important":"")<< endl; - bool ok = -#endif - p->parseValue( p->id, p->important ); -#ifdef CSS_DEBUG - if ( !ok ) - kdDebug( 6080 ) << " couldn't parse value!" << endl; -#endif - } -#ifdef CSS_DEBUG - else - kdDebug( 6080 ) << " no value found!" << endl; -#endif - delete p->valueList; - p->valueList = 0; - ;} - break; - - case 15: - - { -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "charset rule: " << qString(yyvsp[-2].string) << endl; -#endif - ;} - break; - - case 19: - - { - CSSParser *p = static_cast<CSSParser *>(parser); - if ( yyvsp[-1].rule && p->styleElement && p->styleElement->isCSSStyleSheet() ) { - p->styleElement->append( yyvsp[-1].rule ); - } else { - delete yyvsp[-1].rule; - } - ;} - break; - - case 20: - - { -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "@import: " << qString(yyvsp[-3].string) << endl; -#endif - CSSParser *p = static_cast<CSSParser *>(parser); - if ( yyvsp[-1].mediaList && p->styleElement && p->styleElement->isCSSStyleSheet() ) - yyval.rule = new CSSImportRuleImpl( p->styleElement, domString(yyvsp[-3].string), yyvsp[-1].mediaList ); - else - yyval.rule = 0; - ;} - break; - - case 21: - - { - yyval.rule = 0; - ;} - break; - - case 22: - - { - yyval.rule = 0; - ;} - break; - - case 25: - - { -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "@namespace: " << qString(yyvsp[-2].string) << endl; -#endif - CSSParser *p = static_cast<CSSParser *>(parser); - if (p->styleElement && p->styleElement->isCSSStyleSheet()) - static_cast<CSSStyleSheetImpl*>(p->styleElement)->addNamespace(p, domString(yyvsp[-3].string), domString(yyvsp[-2].string)); - ;} - break; - - case 28: - - { yyval.string.string = 0; ;} - break; - - case 29: - - { yyval.string = yyvsp[-1].string; ;} - break; - - case 31: - - { - CSSParser *p = static_cast<CSSParser *>(parser); - if ( yyvsp[-1].rule && p->styleElement && p->styleElement->isCSSStyleSheet() ) { - p->styleElement->append( yyvsp[-1].rule ); - } else { - delete yyvsp[-1].rule; - } - ;} - break; - - case 38: - - { delete yyvsp[-1].rule; yyval.rule = 0; ;} - break; - - case 41: - - { - yyval.mediaList = new MediaListImpl(); - ;} - break; - - case 43: - - { - yyval.mediaList = new MediaListImpl(); - yyval.mediaList->appendMedium( domString(yyvsp[0].string).lower() ); - ;} - break; - - case 44: - - { - yyval.mediaList = yyvsp[-3].mediaList; - if (yyval.mediaList) - yyval.mediaList->appendMedium( domString(yyvsp[0].string).lower() ); - ;} - break; - - case 45: - - { - delete yyvsp[-1].mediaList; - yyval.mediaList = 0; - ;} - break; - - case 46: - - { - CSSParser *p = static_cast<CSSParser *>(parser); - if ( yyvsp[-4].mediaList && yyvsp[-1].ruleList && - p->styleElement && p->styleElement->isCSSStyleSheet() ) { - yyval.rule = new CSSMediaRuleImpl( static_cast<CSSStyleSheetImpl*>(p->styleElement), yyvsp[-4].mediaList, yyvsp[-1].ruleList ); - } else { - yyval.rule = 0; - delete yyvsp[-4].mediaList; - delete yyvsp[-1].ruleList; - } - ;} - break; - - case 47: - - { yyval.ruleList = 0; ;} - break; - - case 48: - - { - yyval.ruleList = yyvsp[-2].ruleList; - if ( yyvsp[-1].rule ) { - if ( !yyval.ruleList ) yyval.ruleList = new CSSRuleListImpl(); - yyval.ruleList->append( yyvsp[-1].rule ); - } - ;} - break; - - case 49: - - { - yyval.string = yyvsp[-1].string; - ;} - break; - - case 50: - - { - yyval.rule = 0; - ;} - break; - - case 51: - - { - yyval.rule = 0; - ;} - break; - - case 52: - - { - yyval.rule = 0; - ;} - break; - - case 53: - - { - yyval.rule = 0; - ;} - break; - - case 54: - - { yyval.relation = CSSSelector::DirectAdjacent; ;} - break; - - case 55: - - { yyval.relation = CSSSelector::IndirectAdjacent; ;} - break; - - case 56: - - { yyval.relation = CSSSelector::Child; ;} - break; - - case 57: - - { yyval.relation = CSSSelector::Descendant; ;} - break; - - case 58: - - { yyval.val = -1; ;} - break; - - case 59: - - { yyval.val = 1; ;} - break; - - case 60: - - { -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "got ruleset" << endl << " selector:" << endl; -#endif - CSSParser *p = static_cast<CSSParser *>(parser); - if ( yyvsp[-1].selectorList && yyvsp[0].ok && p->numParsedProperties ) { - CSSStyleRuleImpl *rule = new CSSStyleRuleImpl( p->styleElement ); - CSSStyleDeclarationImpl *decl = p->createStyleDeclaration( rule ); - rule->setSelector( yyvsp[-1].selectorList ); - rule->setDeclaration(decl); - yyval.rule = rule; - } else { - yyval.rule = 0; - delete yyvsp[-1].selectorList; - p->clearProperties(); - } - ;} - break; - - case 61: - - { - if ( yyvsp[0].selector ) { - yyval.selectorList = new TQPtrList<CSSSelector>; - yyval.selectorList->setAutoDelete( true ); -#ifdef CSS_DEBUG - kdDebug( 6080 ) << " got simple selector:" << endl; - yyvsp[0].selector->print(); -#endif - yyval.selectorList->append( yyvsp[0].selector ); - khtml::CSSStyleSelector::precomputeAttributeDependencies(static_cast<CSSParser *>(parser)->document(), yyvsp[0].selector); - } else { - yyval.selectorList = 0; - } - ;} - break; - - case 62: - - { - if ( yyvsp[-3].selectorList && yyvsp[0].selector ) { - yyval.selectorList = yyvsp[-3].selectorList; - yyval.selectorList->append( yyvsp[0].selector ); - khtml::CSSStyleSelector::precomputeAttributeDependencies(static_cast<CSSParser *>(parser)->document(), yyvsp[0].selector); -#ifdef CSS_DEBUG - kdDebug( 6080 ) << " got simple selector:" << endl; - yyvsp[0].selector->print(); -#endif - } else { - delete yyvsp[-3].selectorList; - delete yyvsp[0].selector; - yyval.selectorList = 0; - } - ;} - break; - - case 63: - - { - delete yyvsp[-1].selectorList; - yyval.selectorList = 0; - ;} - break; - - case 64: - - { - yyval.selector = yyvsp[0].selector; - ;} - break; - - case 65: - - { - if ( !yyvsp[-2].selector || !yyvsp[0].selector ) { - delete yyvsp[-2].selector; - delete yyvsp[0].selector; - yyval.selector = 0; - } else { - yyval.selector = yyvsp[0].selector; - CSSSelector *end = yyvsp[0].selector; - while( end->tagHistory ) - end = end->tagHistory; - end->relation = yyvsp[-1].relation; - end->tagHistory = yyvsp[-2].selector; - } - ;} - break; - - case 66: - - { - delete yyvsp[-1].selector; - yyval.selector = 0; - ;} - break; - - case 67: - - { yyval.string.string = 0; yyval.string.length = 0; ;} - break; - - case 68: - - { static unsigned short star = '*'; yyval.string.string = ☆ yyval.string.length = 1; ;} - break; - - case 69: - - { yyval.string = yyvsp[-1].string; ;} - break; - - case 70: - - { - yyval.selector = new CSSSelector(); - yyval.selector->tag = yyvsp[-1].element; - ;} - break; - - case 71: - - { - yyval.selector = yyvsp[-1].selector; - if ( yyval.selector ) - yyval.selector->tag = yyvsp[-2].element; - ;} - break; - - case 72: - - { - yyval.selector = yyvsp[-1].selector; - if ( yyval.selector ) - yyval.selector->tag = makeId(static_cast<CSSParser*>(parser)->defaultNamespace(), anyLocalName); - ;} - break; - - case 73: - - { - yyval.selector = new CSSSelector(); - yyval.selector->tag = yyvsp[-1].element; - CSSParser *p = static_cast<CSSParser *>(parser); - if (p->styleElement && p->styleElement->isCSSStyleSheet()) - static_cast<CSSStyleSheetImpl*>(p->styleElement)->determineNamespace(yyval.selector->tag, domString(yyvsp[-2].string)); - ;} - break; - - case 74: - - { - yyval.selector = yyvsp[-1].selector; - if (yyval.selector) { - yyval.selector->tag = yyvsp[-2].element; - CSSParser *p = static_cast<CSSParser *>(parser); - if (p->styleElement && p->styleElement->isCSSStyleSheet()) - static_cast<CSSStyleSheetImpl*>(p->styleElement)->determineNamespace(yyval.selector->tag, domString(yyvsp[-3].string)); - } - ;} - break; - - case 75: - - { - yyval.selector = yyvsp[-1].selector; - if (yyval.selector) { - yyval.selector->tag = makeId(anyNamespace, anyLocalName); - CSSParser *p = static_cast<CSSParser *>(parser); - if (p->styleElement && p->styleElement->isCSSStyleSheet()) - static_cast<CSSStyleSheetImpl*>(p->styleElement)->determineNamespace(yyval.selector->tag, domString(yyvsp[-2].string)); - } - ;} - break; - - case 76: - - { - CSSParser *p = static_cast<CSSParser *>(parser); - DOM::DocumentImpl *doc = p->document(); - TQString tag = qString(yyvsp[0].string); - if ( doc ) { - if (doc->isHTMLDocument()) - tag = tag.lower(); - const DOMString dtag(tag); - yyval.element = makeId(p->defaultNamespace(), doc->getId(NodeImpl::ElementId, dtag.implementation(), false, true)); - } else { - yyval.element = makeId(p->defaultNamespace(), khtml::getTagID(tag.lower().ascii(), tag.length())); - // this case should never happen - only when loading - // the default stylesheet - which must not contain unknown tags -// assert($$ != 0); - } - ;} - break; - - case 77: - - { - yyval.element = makeId(static_cast<CSSParser*>(parser)->defaultNamespace(), anyLocalName); - ;} - break; - - case 78: - - { - yyval.selector = yyvsp[0].selector; - yyval.selector->nonCSSHint = static_cast<CSSParser *>(parser)->nonCSSHint; - ;} - break; - - case 79: - - { - yyval.selector = yyvsp[-1].selector; - if ( yyval.selector ) { - CSSSelector *end = yyvsp[-1].selector; - while( end->tagHistory ) - end = end->tagHistory; - end->relation = CSSSelector::SubSelector; - end->tagHistory = yyvsp[0].selector; - } - ;} - break; - - case 80: - - { - delete yyvsp[-1].selector; - yyval.selector = 0; - ;} - break; - - case 81: - - { - yyval.selector = new CSSSelector(); - yyval.selector->match = CSSSelector::Id; - yyval.selector->attr = ATTR_ID; - yyval.selector->value = domString(yyvsp[0].string); - ;} - break; - - case 85: - - { - yyval.selector = new CSSSelector(); - yyval.selector->match = CSSSelector::Class; - yyval.selector->attr = ATTR_CLASS; - yyval.selector->value = domString(yyvsp[0].string); - ;} - break; - - case 86: - - { - CSSParser *p = static_cast<CSSParser *>(parser); - DOM::DocumentImpl *doc = p->document(); - - TQString attr = qString(yyvsp[-1].string); - if ( doc ) { - if (doc->isHTMLDocument()) - attr = attr.lower(); - const DOMString dattr(attr); -#ifdef APPLE_CHANGES - yyval.attribute = doc->attrId(0, dattr.implementation(), false); -#else - yyval.attribute = doc->getId(NodeImpl::AttributeId, dattr.implementation(), false, true); -#endif - } else { - yyval.attribute = khtml::getAttrID(attr.lower().ascii(), attr.length()); - // this case should never happen - only when loading - // the default stylesheet - which must not contain unknown attributes - assert(yyval.attribute != 0); - } - ;} - break; - - case 87: - - { - yyval.selector = new CSSSelector(); - yyval.selector->attr = yyvsp[-1].attribute; - yyval.selector->match = CSSSelector::Set; - ;} - break; - - case 88: - - { - yyval.selector = new CSSSelector(); - yyval.selector->attr = yyvsp[-5].attribute; - yyval.selector->match = yyvsp[-4].match; - yyval.selector->value = domString(yyvsp[-2].string); - ;} - break; - - case 89: - - { - yyval.selector = new CSSSelector(); - yyval.selector->attr = yyvsp[-1].attribute; - yyval.selector->match = CSSSelector::Set; - CSSParser *p = static_cast<CSSParser *>(parser); - if (p->styleElement && p->styleElement->isCSSStyleSheet()) - static_cast<CSSStyleSheetImpl*>(p->styleElement)->determineNamespace(yyval.selector->attr, domString(yyvsp[-2].string)); - ;} - break; - - case 90: - - { - yyval.selector = new CSSSelector(); - yyval.selector->attr = yyvsp[-5].attribute; - yyval.selector->match = (CSSSelector::Match)yyvsp[-4].match; - yyval.selector->value = domString(yyvsp[-2].string); - CSSParser *p = static_cast<CSSParser *>(parser); - if (p->styleElement && p->styleElement->isCSSStyleSheet()) - static_cast<CSSStyleSheetImpl*>(p->styleElement)->determineNamespace(yyval.selector->attr, domString(yyvsp[-6].string)); - ;} - break; - - case 91: - - { - yyval.match = CSSSelector::Exact; - ;} - break; - - case 92: - - { - yyval.match = CSSSelector::List; - ;} - break; - - case 93: - - { - yyval.match = CSSSelector::Hyphen; - ;} - break; - - case 94: - - { - yyval.match = CSSSelector::Begin; - ;} - break; - - case 95: - - { - yyval.match = CSSSelector::End; - ;} - break; - - case 96: - - { - yyval.match = CSSSelector::Contain; - ;} - break; - - case 99: - - { - yyval.selector = new CSSSelector(); - yyval.selector->match = CSSSelector::PseudoClass; - yyval.selector->value = domString(yyvsp[0].string); - ;} - break; - - case 100: - - { - yyval.selector = new CSSSelector(); - yyval.selector->match = CSSSelector::PseudoElement; - yyval.selector->value = domString(yyvsp[0].string); - ;} - break; - - case 101: - - { - yyval.selector = new CSSSelector(); - yyval.selector->match = CSSSelector::PseudoClass; - yyval.selector->string_arg = domString(yyvsp[-1].string); - yyval.selector->value = domString(yyvsp[-2].string); - ;} - break; - - case 102: - - { - yyval.selector = new CSSSelector(); - yyval.selector->match = CSSSelector::PseudoClass; - yyval.selector->string_arg = TQString::number(yyvsp[-1].val); - yyval.selector->value = domString(yyvsp[-2].string); - ;} - break; - - case 103: - - { - yyval.selector = new CSSSelector(); - yyval.selector->match = CSSSelector::PseudoClass; - yyval.selector->string_arg = domString(yyvsp[-1].string); - yyval.selector->value = domString(yyvsp[-2].string); - ;} - break; - - case 104: - - { - yyval.selector = new CSSSelector(); - yyval.selector->match = CSSSelector::PseudoClass; - yyval.selector->string_arg = domString(yyvsp[-1].string); - yyval.selector->value = domString(yyvsp[-2].string); - ;} - break; - - case 105: - - { - yyval.selector = new CSSSelector(); - yyval.selector->match = CSSSelector::PseudoClass; - yyval.selector->simpleSelector = yyvsp[-1].selector; - yyval.selector->value = domString(yyvsp[-3].string); - ;} - break; - - case 106: - - { - yyval.ok = yyvsp[-1].ok; - ;} - break; - - case 107: - - { - yyval.ok = false; - ;} - break; - - case 108: - - { - yyval.ok = yyvsp[-1].ok; - ;} - break; - - case 109: - - { - yyval.ok = yyvsp[-2].ok; - if ( yyvsp[-1].ok ) - yyval.ok = yyvsp[-1].ok; - ;} - break; - - case 110: - - { - yyval.ok = yyvsp[-2].ok; - ;} - break; - - case 111: - - { - yyval.ok = yyvsp[-2].ok; - ;} - break; - - case 112: - - { - yyval.ok = false; - ;} - break; - - case 113: - - { - yyval.ok = yyvsp[-3].ok; - if ( yyvsp[-2].ok ) - yyval.ok = yyvsp[-2].ok; - ;} - break; - - case 114: - - { - yyval.ok = yyvsp[-3].ok; - ;} - break; - - case 115: - - { - yyval.ok = false; - CSSParser *p = static_cast<CSSParser *>(parser); - if ( yyvsp[-4].prop_id && yyvsp[-1].valueList ) { - p->valueList = yyvsp[-1].valueList; -#ifdef CSS_DEBUG - kdDebug( 6080 ) << " got property: " << yyvsp[-4].prop_id << - (yyvsp[0].b?" important":"")<< endl; -#endif - bool ok = p->parseValue( yyvsp[-4].prop_id, yyvsp[0].b ); - if ( ok ) - yyval.ok = ok; -#ifdef CSS_DEBUG - else - kdDebug( 6080 ) << " couldn't parse value!" << endl; -#endif - } else { - delete yyvsp[-1].valueList; - } - delete p->valueList; - p->valueList = 0; - ;} - break; - - case 116: - - { - yyval.ok = false; - ;} - break; - - case 117: - - { - TQString str = qString(yyvsp[-1].string); - yyval.prop_id = getPropertyID( str.lower().latin1(), str.length() ); - ;} - break; - - case 118: - - { yyval.b = true; ;} - break; - - case 119: - - { yyval.b = false; ;} - break; - - case 120: - - { - yyval.valueList = new ValueList; - yyval.valueList->addValue( yyvsp[0].value ); - ;} - break; - - case 121: - - { - yyval.valueList = yyvsp[-2].valueList; - if ( yyval.valueList ) { - if ( yyvsp[-1].tok ) { - Value v; - v.id = 0; - v.unit = Value::Operator; - v.iValue = yyvsp[-1].tok; - yyval.valueList->addValue( v ); - } - yyval.valueList->addValue( yyvsp[0].value ); - } - ;} - break; - - case 122: - - { - yyval.tok = '/'; - ;} - break; - - case 123: - - { - yyval.tok = ','; - ;} - break; - - case 124: - - { - yyval.tok = 0; - ;} - break; - - case 125: - - { yyval.value = yyvsp[0].value; ;} - break; - - case 126: - - { yyval.value = yyvsp[0].value; yyval.value.fValue *= yyvsp[-1].val; ;} - break; - - case 127: - - { yyval.value.id = 0; yyval.value.string = yyvsp[-1].string; yyval.value.unit = CSSPrimitiveValue::CSS_DIMENSION; ;} - break; - - case 128: - - { yyval.value.id = 0; yyval.value.string = yyvsp[-1].string; yyval.value.unit = CSSPrimitiveValue::CSS_STRING; ;} - break; - - case 129: - - { - TQString str = qString( yyvsp[-1].string ); - yyval.value.id = getValueID( str.lower().latin1(), str.length() ); - yyval.value.unit = CSSPrimitiveValue::CSS_IDENT; - yyval.value.string = yyvsp[-1].string; - ;} - break; - - case 130: - - { yyval.value.id = 0; yyval.value.string = yyvsp[-1].string; yyval.value.unit = CSSPrimitiveValue::CSS_URI; ;} - break; - - case 131: - - { yyval.value.id = 0; yyval.value.iValue = 0; yyval.value.unit = CSSPrimitiveValue::CSS_UNKNOWN;/* ### */ ;} - break; - - case 132: - - { yyval.value.id = 0; yyval.value.string = yyvsp[0].string; yyval.value.unit = CSSPrimitiveValue::CSS_RGBCOLOR; ;} - break; - - case 133: - - { - yyval.value = yyvsp[0].value; - ;} - break; - - case 134: - - { yyval.value.id = 0; yyval.value.isInt = true; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_NUMBER; ;} - break; - - case 135: - - { yyval.value.id = 0; yyval.value.isInt = false; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_NUMBER; ;} - break; - - case 136: - - { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_PERCENTAGE; ;} - break; - - case 137: - - { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_PX; ;} - break; - - case 138: - - { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_CM; ;} - break; - - case 139: - - { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_MM; ;} - break; - - case 140: - - { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_IN; ;} - break; - - case 141: - - { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_PT; ;} - break; - - case 142: - - { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_PC; ;} - break; - - case 143: - - { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_DEG; ;} - break; - - case 144: - - { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_RAD; ;} - break; - - case 145: - - { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_GRAD; ;} - break; - - case 146: - - { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_MS; ;} - break; - - case 147: - - { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_S; ;} - break; - - case 148: - - { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_HZ; ;} - break; - - case 149: - - { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_KHZ; ;} - break; - - case 150: - - { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_EMS; ;} - break; - - case 151: - - { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = Value::Q_EMS; ;} - break; - - case 152: - - { yyval.value.id = 0; yyval.value.fValue = yyvsp[-1].val; yyval.value.unit = CSSPrimitiveValue::CSS_EXS; ;} - break; - - case 153: - - { - Function *f = new Function; - f->name = yyvsp[-4].string; - f->args = yyvsp[-2].valueList; - yyval.value.id = 0; - yyval.value.unit = Value::Function; - yyval.value.function = f; - ;} - break; - - case 154: - - { - Function *f = new Function; - f->name = yyvsp[-2].string; - f->args = 0; - yyval.value.id = 0; - yyval.value.unit = Value::Function; - yyval.value.function = f; - ;} - break; - - case 155: - - { yyval.string = yyvsp[-1].string; ;} - break; - - case 156: - - { - yyval.rule = 0; -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "skipped invalid @-rule" << endl; -#endif - ;} - break; - - case 157: - - { - yyval.rule = 0; -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "skipped invalid @-rule" << endl; -#endif - ;} - break; - - case 158: - - { - yyval.rule = 0; -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "skipped invalid rule" << endl; -#endif - ;} - break; - - - } - -/* Line 1010 of yacc.c. */ - - - yyvsp -= yylen; - yyssp -= yylen; - - - YY_STACK_PRINT (yyss, yyssp); - - *++yyvsp = yyval; - - - /* Now `shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; - - goto yynewstate; - - -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ -yyerrlab: - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) - { - ++yynerrs; -#if YYERROR_VERBOSE - yyn = yypact[yystate]; - - if (YYPACT_NINF < yyn && yyn < YYLAST) - { - YYSIZE_T yysize = 0; - int yytype = YYTRANSLATE (yychar); - const char* yyprefix; - char *yymsg; - int yyx; - - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yycount = 0; - - yyprefix = ", expecting "; - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - { - yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]); - yycount += 1; - if (yycount == 5) - { - yysize = 0; - break; - } - } - yysize += (sizeof ("syntax error, unexpected ") - + yystrlen (yytname[yytype])); - yymsg = (char *) YYSTACK_ALLOC (yysize); - if (yymsg != 0) - { - char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); - yyp = yystpcpy (yyp, yytname[yytype]); - - if (yycount < 5) - { - yyprefix = ", expecting "; - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - { - yyp = yystpcpy (yyp, yyprefix); - yyp = yystpcpy (yyp, yytname[yyx]); - yyprefix = " or "; - } - } - yyerror (yymsg); - YYSTACK_FREE (yymsg); - } - else - yyerror ("syntax error; also virtual memory exhausted"); - } - else -#endif /* YYERROR_VERBOSE */ - yyerror ("syntax error"); - } - - - - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ - - if (yychar <= YYEOF) - { - /* If at end of input, pop the error token, - then the rest of the stack, then return failure. */ - if (yychar == YYEOF) - for (;;) - { - YYPOPSTACK; - if (yyssp == yyss) - YYABORT; - YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); - yydestruct (yystos[*yyssp], yyvsp); - } - } - else - { - YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); - yydestruct (yytoken, &yylval); - yychar = YYEMPTY; - - } - } - - /* Else will try to reuse lookahead token after shifting the error - token. */ - goto yyerrlab1; - - -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: - -#ifdef __GNUC__ - /* Pacify GCC when the user code never invokes YYERROR and the label - yyerrorlab therefore never appears in user code. */ - if (0) - goto yyerrorlab; -#endif - - yyvsp -= yylen; - yyssp -= yylen; - yystate = *yyssp; - goto yyerrlab1; - - -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ - - for (;;) - { - yyn = yypact[yystate]; - if (yyn != YYPACT_NINF) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; - - YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); - yydestruct (yystos[yystate], yyvsp); - YYPOPSTACK; - yystate = *yyssp; - YY_STACK_PRINT (yyss, yyssp); - } - - if (yyn == YYFINAL) - YYACCEPT; - - YYDPRINTF ((stderr, "Shifting error token, ")); - - *++yyvsp = yylval; - - - yystate = yyn; - goto yynewstate; - - -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturn; - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturn; - -#ifndef yyoverflow -/*----------------------------------------------. -| yyoverflowlab -- parser overflow comes here. | -`----------------------------------------------*/ -yyoverflowlab: - yyerror ("parser stack overflow"); - yyresult = 2; - /* Fall through. */ -#endif - -yyreturn: -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif - return yyresult; -} - - - - - - diff --git a/khtml/css/parser.h b/khtml/css/parser.h deleted file mode 100644 index e3375db66..000000000 --- a/khtml/css/parser.h +++ /dev/null @@ -1,164 +0,0 @@ -/* A Bison parser, made by GNU Bison 1.875d. */ - -/* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - 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 the - GNU 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. -*/ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - UNIMPORTANT_TOK = 258, - S = 259, - SGML_CD = 260, - INCLUDES = 261, - DASHMATCH = 262, - BEGINSWITH = 263, - ENDSWITH = 264, - CONTAINS = 265, - STRING = 266, - IDENT = 267, - NTH = 268, - HASH = 269, - IMPORT_SYM = 270, - PAGE_SYM = 271, - MEDIA_SYM = 272, - FONT_FACE_SYM = 273, - CHARSET_SYM = 274, - NAMESPACE_SYM = 275, - KHTML_RULE_SYM = 276, - KHTML_DECLS_SYM = 277, - KHTML_VALUE_SYM = 278, - IMPORTANT_SYM = 279, - QEMS = 280, - EMS = 281, - EXS = 282, - PXS = 283, - CMS = 284, - MMS = 285, - INS = 286, - PTS = 287, - PCS = 288, - DEGS = 289, - RADS = 290, - GRADS = 291, - MSECS = 292, - SECS = 293, - HERZ = 294, - KHERZ = 295, - DIMEN = 296, - PERCENTAGE = 297, - FLOAT = 298, - INTEGER = 299, - URI = 300, - FUNCTION = 301, - NOTFUNCTION = 302, - UNICODERANGE = 303 - }; -#endif -#define UNIMPORTANT_TOK 258 -#define S 259 -#define SGML_CD 260 -#define INCLUDES 261 -#define DASHMATCH 262 -#define BEGINSWITH 263 -#define ENDSWITH 264 -#define CONTAINS 265 -#define STRING 266 -#define IDENT 267 -#define NTH 268 -#define HASH 269 -#define IMPORT_SYM 270 -#define PAGE_SYM 271 -#define MEDIA_SYM 272 -#define FONT_FACE_SYM 273 -#define CHARSET_SYM 274 -#define NAMESPACE_SYM 275 -#define KHTML_RULE_SYM 276 -#define KHTML_DECLS_SYM 277 -#define KHTML_VALUE_SYM 278 -#define IMPORTANT_SYM 279 -#define QEMS 280 -#define EMS 281 -#define EXS 282 -#define PXS 283 -#define CMS 284 -#define MMS 285 -#define INS 286 -#define PTS 287 -#define PCS 288 -#define DEGS 289 -#define RADS 290 -#define GRADS 291 -#define MSECS 292 -#define SECS 293 -#define HERZ 294 -#define KHERZ 295 -#define DIMEN 296 -#define PERCENTAGE 297 -#define FLOAT 298 -#define INTEGER 299 -#define URI 300 -#define FUNCTION 301 -#define NOTFUNCTION 302 -#define UNICODERANGE 303 - - - - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) - -typedef union YYSTYPE { - CSSRuleImpl *rule; - CSSSelector *selector; - TQPtrList<CSSSelector> *selectorList; - bool ok; - MediaListImpl *mediaList; - CSSMediaRuleImpl *mediaRule; - CSSRuleListImpl *ruleList; - ParseString string; - float val; - int prop_id; - unsigned int attribute; - unsigned int element; - unsigned int ns; - CSSSelector::Relation relation; - CSSSelector::Match match; - bool b; - char tok; - Value value; - ValueList *valueList; -} YYSTYPE; -/* Line 1285 of yacc.c. */ - -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - - - - - diff --git a/khtml/css/parser.y b/khtml/css/parser.y deleted file mode 100644 index 33e6fd730..000000000 --- a/khtml/css/parser.y +++ /dev/null @@ -1,1064 +0,0 @@ -%{ - -/* - * This file is part of the KDE libraries - * Copyright (C) 2002-2003 Lars Knoll (knoll@kde.org) - * Copyright (c) 2003 Apple Computer - * Copyright (C) 2003 Dirk Mueller (mueller@kde.org) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <string.h> -#include <stdlib.h> - -#include <dom/dom_string.h> -#include <xml/dom_docimpl.h> -#include <css/cssstyleselector.h> -#include <css/css_ruleimpl.h> -#include <css/css_stylesheetimpl.h> -#include <css/css_valueimpl.h> -#include <misc/htmlhashes.h> -#include "cssparser.h" - -#include <assert.h> -#include <kdebug.h> -//#define CSS_DEBUG - -using namespace DOM; - -// -// The following file defines the function -// const struct props *findProp(const char *word, int len) -// -// with 'props->id' a CSS property in the range from CSS_PROP_MIN to -// (and including) CSS_PROP_TOTAL-1 - -// turn off inlining to void warning with newer gcc -#undef __inline -#define __inline -#include "cssproperties.c" -#include "cssvalues.c" -#undef __inline - -int DOM::getPropertyID(const char *tagStr, int len) -{ - const struct props *propsPtr = findProp(tagStr, len); - if (!propsPtr) - return 0; - - return propsPtr->id; -} - -static inline int getValueID(const char *tagStr, int len) -{ - const struct css_value *val = findValue(tagStr, len); - if (!val) - return 0; - - return val->id; -} - - -#define YYDEBUG 0 -#undef YYMAXDEPTH -#define YYPARSE_PARAM parser -%} - -%pure_parser - -%union { - CSSRuleImpl *rule; - CSSSelector *selector; - QPtrList<CSSSelector> *selectorList; - bool ok; - MediaListImpl *mediaList; - CSSMediaRuleImpl *mediaRule; - CSSRuleListImpl *ruleList; - ParseString string; - float val; - int prop_id; - unsigned int attribute; - unsigned int element; - unsigned int ns; - CSSSelector::Relation relation; - CSSSelector::Match match; - bool b; - char tok; - Value value; - ValueList *valueList; -} - -%{ - -static inline int cssyyerror(const char *x ) -{ -#ifdef CSS_DEBUG - tqDebug( "%s", x ); -#else - Q_UNUSED( x ); -#endif - return 1; -} - -static int cssyylex( YYSTYPE *yylval ) { - return CSSParser::current()->lex( yylval ); -} - -#define null 1 - -%} - -%destructor { delete $$; $$ = 0; } expr; -%destructor { delete $$; $$ = 0; } maybe_media_list media_list; -%destructor { delete $$; $$ = 0; } selector_list; -%destructor { delete $$; $$ = 0; } ruleset_list; -%destructor { delete $$; $$ = 0; } specifier specifier_list simple_selector selector class attrib pseudo; - -%no-lines -%verbose - -%left UNIMPORTANT_TOK - -%token S SGML_CD - -%token INCLUDES -%token DASHMATCH -%token BEGINSWITH -%token ENDSWITH -%token CONTAINS - -%token <string> STRING - -%right <string> IDENT - -%token <string> NTH - -%nonassoc <string> HASH -%nonassoc ':' -%nonassoc '.' -%nonassoc '[' -%nonassoc '*' -%nonassoc error -%left '|' - -%left IMPORT_SYM -%token PAGE_SYM -%token MEDIA_SYM -%token FONT_FACE_SYM -%token CHARSET_SYM -%token NAMESPACE_SYM -%token KHTML_RULE_SYM -%token KHTML_DECLS_SYM -%token KHTML_VALUE_SYM - -%token IMPORTANT_SYM - -%token <val> QEMS -%token <val> EMS -%token <val> EXS -%token <val> PXS -%token <val> CMS -%token <val> MMS -%token <val> INS -%token <val> PTS -%token <val> PCS -%token <val> DEGS -%token <val> RADS -%token <val> GRADS -%token <val> MSECS -%token <val> SECS -%token <val> HERZ -%token <val> KHERZ -%token <string> DIMEN -%token <val> PERCENTAGE -%token <val> FLOAT -%token <val> INTEGER - -%token <string> URI -%token <string> FUNCTION -%token <string> NOTFUNCTION - -%token <string> UNICODERANGE - -%type <relation> combinator - -%type <rule> ruleset -%type <rule> media -%type <rule> import -%type <rule> page -%type <rule> font_face -%type <rule> invalid_rule -%type <rule> invalid_at -%type <rule> rule - -%type <string> namespace_selector - -%type <string> string_or_uri -%type <string> ident_or_string -%type <string> medium -%type <string> hexcolor -%type <string> maybe_ns_prefix - -%type <mediaList> media_list -%type <mediaList> maybe_media_list - -%type <ruleList> ruleset_list - -%type <prop_id> property - -%type <selector> specifier -%type <selector> specifier_list -%type <selector> simple_selector -%type <selector> selector -%type <selectorList> selector_list -%type <selector> class -%type <selector> attrib -%type <selector> pseudo - -%type <ok> declaration_block -%type <ok> declaration_list -%type <ok> declaration - -%type <b> prio - -%type <match> match -%type <val> unary_operator -%type <tok> operator - -%type <valueList> expr -%type <value> term -%type <value> unary_term -%type <value> function - -%type <element> element_name - -%type <attribute> attrib_id - -%% - -stylesheet: - maybe_charset maybe_sgml import_list namespace_list rule_list - | khtml_rule maybe_space - | khtml_decls maybe_space - | khtml_value maybe_space - ; - -khtml_rule: - KHTML_RULE_SYM '{' maybe_space ruleset maybe_space '}' { - CSSParser *p = static_cast<CSSParser *>(parser); - p->rule = $4; - } -; - -khtml_decls: - KHTML_DECLS_SYM declaration_block { - /* can be empty */ - } -; - -khtml_value: - KHTML_VALUE_SYM '{' maybe_space expr '}' { - CSSParser *p = static_cast<CSSParser *>(parser); - if ( $4 ) { - p->valueList = $4; -#ifdef CSS_DEBUG - kdDebug( 6080 ) << " got property for " << p->id << - (p->important?" important":"")<< endl; - bool ok = -#endif - p->parseValue( p->id, p->important ); -#ifdef CSS_DEBUG - if ( !ok ) - kdDebug( 6080 ) << " couldn't parse value!" << endl; -#endif - } -#ifdef CSS_DEBUG - else - kdDebug( 6080 ) << " no value found!" << endl; -#endif - delete p->valueList; - p->valueList = 0; - } -; - -maybe_space: - /* empty */ %prec UNIMPORTANT_TOK - | maybe_space S - ; - -maybe_sgml: - /* empty */ - | maybe_sgml SGML_CD - | maybe_sgml S - ; - -maybe_charset: - /* empty */ - | CHARSET_SYM maybe_space STRING maybe_space ';' { -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "charset rule: " << qString($3) << endl; -#endif - } - | CHARSET_SYM error invalid_block - | CHARSET_SYM error ';' - ; - -import_list: - /* empty */ - | import_list import maybe_sgml { - CSSParser *p = static_cast<CSSParser *>(parser); - if ( $2 && p->styleElement && p->styleElement->isCSSStyleSheet() ) { - p->styleElement->append( $2 ); - } else { - delete $2; - } - } - ; - -import: - IMPORT_SYM maybe_space string_or_uri maybe_space maybe_media_list ';' { -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "@import: " << qString($3) << endl; -#endif - CSSParser *p = static_cast<CSSParser *>(parser); - if ( $5 && p->styleElement && p->styleElement->isCSSStyleSheet() ) - $$ = new CSSImportRuleImpl( p->styleElement, domString($3), $5 ); - else - $$ = 0; - } - | IMPORT_SYM error invalid_block { - $$ = 0; - } - | IMPORT_SYM error ';' { - $$ = 0; - } - ; - -namespace_list: - /* empty */ %prec UNIMPORTANT_TOK - | namespace_list namespace maybe_sgml -; - -namespace: -NAMESPACE_SYM maybe_space maybe_ns_prefix string_or_uri maybe_space ';' { -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "@namespace: " << qString($4) << endl; -#endif - CSSParser *p = static_cast<CSSParser *>(parser); - if (p->styleElement && p->styleElement->isCSSStyleSheet()) - static_cast<CSSStyleSheetImpl*>(p->styleElement)->addNamespace(p, domString($3), domString($4)); - } -| NAMESPACE_SYM error invalid_block -| NAMESPACE_SYM error ';' - ; - -maybe_ns_prefix: -/* empty */ { $$.string = 0; } -| IDENT S { $$ = $1; } - ; - -rule_list: - /* empty */ - | rule_list rule maybe_sgml { - CSSParser *p = static_cast<CSSParser *>(parser); - if ( $2 && p->styleElement && p->styleElement->isCSSStyleSheet() ) { - p->styleElement->append( $2 ); - } else { - delete $2; - } - } - ; - -rule: - ruleset - | media - | page - | font_face - | invalid_rule - | invalid_at - | import error { delete $1; $$ = 0; } - ; - -string_or_uri: - STRING - | URI - ; - -maybe_media_list: - /* empty */ { - $$ = new MediaListImpl(); - } - | media_list -; - - -media_list: - medium { - $$ = new MediaListImpl(); - $$->appendMedium( domString($1).lower() ); - } - | media_list ',' maybe_space medium { - $$ = $1; - if ($$) - $$->appendMedium( domString($4).lower() ); - } - | media_list error { - delete $1; - $$ = 0; - } - ; - -media: - MEDIA_SYM maybe_space media_list '{' maybe_space ruleset_list '}' { - CSSParser *p = static_cast<CSSParser *>(parser); - if ( $3 && $6 && - p->styleElement && p->styleElement->isCSSStyleSheet() ) { - $$ = new CSSMediaRuleImpl( static_cast<CSSStyleSheetImpl*>(p->styleElement), $3, $6 ); - } else { - $$ = 0; - delete $3; - delete $6; - } - } - ; - -ruleset_list: - /* empty */ { $$ = 0; } - | ruleset_list ruleset maybe_space { - $$ = $1; - if ( $2 ) { - if ( !$$ ) $$ = new CSSRuleListImpl(); - $$->append( $2 ); - } - } - ; - -medium: - IDENT maybe_space { - $$ = $1; - } - ; - -/* -page: - PAGE_SYM maybe_space IDENT? pseudo_page? maybe_space - '{' maybe_space declaration [ ';' maybe_space declaration ]* '}' maybe_space - ; - -pseudo_page - : ':' IDENT - ; - -font_face - : FONT_FACE_SYM maybe_space - '{' maybe_space declaration [ ';' maybe_space declaration ]* '}' maybe_space - ; -*/ - -page: - PAGE_SYM error invalid_block { - $$ = 0; - } - | PAGE_SYM error ';' { - $$ = 0; - } - ; - -font_face: - FONT_FACE_SYM error invalid_block { - $$ = 0; - } - | FONT_FACE_SYM error ';' { - $$ = 0; - } -; - -combinator: - '+' maybe_space { $$ = CSSSelector::DirectAdjacent; } - | '~' maybe_space { $$ = CSSSelector::IndirectAdjacent; } - | '>' maybe_space { $$ = CSSSelector::Child; } - | /* empty */ { $$ = CSSSelector::Descendant; } - ; - -unary_operator: - '-' { $$ = -1; } - | '+' { $$ = 1; } - ; - -ruleset: - selector_list declaration_block { -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "got ruleset" << endl << " selector:" << endl; -#endif - CSSParser *p = static_cast<CSSParser *>(parser); - if ( $1 && $2 && p->numParsedProperties ) { - CSSStyleRuleImpl *rule = new CSSStyleRuleImpl( p->styleElement ); - CSSStyleDeclarationImpl *decl = p->createStyleDeclaration( rule ); - rule->setSelector( $1 ); - rule->setDeclaration(decl); - $$ = rule; - } else { - $$ = 0; - delete $1; - p->clearProperties(); - } - } - ; - -selector_list: - selector %prec UNIMPORTANT_TOK { - if ( $1 ) { - $$ = new QPtrList<CSSSelector>; - $$->setAutoDelete( true ); -#ifdef CSS_DEBUG - kdDebug( 6080 ) << " got simple selector:" << endl; - $1->print(); -#endif - $$->append( $1 ); - khtml::CSSStyleSelector::precomputeAttributeDependencies(static_cast<CSSParser *>(parser)->document(), $1); - } else { - $$ = 0; - } - } - | selector_list ',' maybe_space selector %prec UNIMPORTANT_TOK { - if ( $1 && $4 ) { - $$ = $1; - $$->append( $4 ); - khtml::CSSStyleSelector::precomputeAttributeDependencies(static_cast<CSSParser *>(parser)->document(), $4); -#ifdef CSS_DEBUG - kdDebug( 6080 ) << " got simple selector:" << endl; - $4->print(); -#endif - } else { - delete $1; - delete $4; - $$ = 0; - } - } - | selector_list error { - delete $1; - $$ = 0; - } - ; - -selector: - simple_selector { - $$ = $1; - } - | selector combinator simple_selector { - if ( !$1 || !$3 ) { - delete $1; - delete $3; - $$ = 0; - } else { - $$ = $3; - CSSSelector *end = $3; - while( end->tagHistory ) - end = end->tagHistory; - end->relation = $2; - end->tagHistory = $1; - } - } - | selector error { - delete $1; - $$ = 0; - } - ; - -namespace_selector: - /* empty */ '|' { $$.string = 0; $$.length = 0; } - | '*' '|' { static unsigned short star = '*'; $$.string = ☆ $$.length = 1; } - | IDENT '|' { $$ = $1; } -; - -simple_selector: - element_name maybe_space { - $$ = new CSSSelector(); - $$->tag = $1; - } - | element_name specifier_list maybe_space { - $$ = $2; - if ( $$ ) - $$->tag = $1; - } - | specifier_list maybe_space { - $$ = $1; - if ( $$ ) - $$->tag = makeId(static_cast<CSSParser*>(parser)->defaultNamespace(), anyLocalName); - } - | namespace_selector element_name maybe_space { - $$ = new CSSSelector(); - $$->tag = $2; - CSSParser *p = static_cast<CSSParser *>(parser); - if (p->styleElement && p->styleElement->isCSSStyleSheet()) - static_cast<CSSStyleSheetImpl*>(p->styleElement)->determineNamespace($$->tag, domString($1)); - } - | namespace_selector element_name specifier_list maybe_space { - $$ = $3; - if ($$) { - $$->tag = $2; - CSSParser *p = static_cast<CSSParser *>(parser); - if (p->styleElement && p->styleElement->isCSSStyleSheet()) - static_cast<CSSStyleSheetImpl*>(p->styleElement)->determineNamespace($$->tag, domString($1)); - } - } - | namespace_selector specifier_list maybe_space { - $$ = $2; - if ($$) { - $$->tag = makeId(anyNamespace, anyLocalName); - CSSParser *p = static_cast<CSSParser *>(parser); - if (p->styleElement && p->styleElement->isCSSStyleSheet()) - static_cast<CSSStyleSheetImpl*>(p->styleElement)->determineNamespace($$->tag, domString($1)); - } - } - ; - -element_name: - IDENT { - CSSParser *p = static_cast<CSSParser *>(parser); - DOM::DocumentImpl *doc = p->document(); - QString tag = qString($1); - if ( doc ) { - if (doc->isHTMLDocument()) - tag = tag.lower(); - const DOMString dtag(tag); - $$ = makeId(p->defaultNamespace(), doc->getId(NodeImpl::ElementId, dtag.implementation(), false, true)); - } else { - $$ = makeId(p->defaultNamespace(), khtml::getTagID(tag.lower().ascii(), tag.length())); - // this case should never happen - only when loading - // the default stylesheet - which must not contain unknown tags -// assert($$ != 0); - } - } - | '*' { - $$ = makeId(static_cast<CSSParser*>(parser)->defaultNamespace(), anyLocalName); - } - ; - -specifier_list: - specifier { - $$ = $1; - $$->nonCSSHint = static_cast<CSSParser *>(parser)->nonCSSHint; - } - | specifier_list specifier { - $$ = $1; - if ( $$ ) { - CSSSelector *end = $1; - while( end->tagHistory ) - end = end->tagHistory; - end->relation = CSSSelector::SubSelector; - end->tagHistory = $2; - } - } - | specifier_list error { - delete $1; - $$ = 0; - } -; - -specifier: - HASH { - $$ = new CSSSelector(); - $$->match = CSSSelector::Id; - $$->attr = ATTR_ID; - $$->value = domString($1); - } - | class - | attrib - | pseudo - ; - -class: - '.' IDENT { - $$ = new CSSSelector(); - $$->match = CSSSelector::Class; - $$->attr = ATTR_CLASS; - $$->value = domString($2); - } - ; - -attrib_id: - IDENT maybe_space { - CSSParser *p = static_cast<CSSParser *>(parser); - DOM::DocumentImpl *doc = p->document(); - - QString attr = qString($1); - if ( doc ) { - if (doc->isHTMLDocument()) - attr = attr.lower(); - const DOMString dattr(attr); -#ifdef APPLE_CHANGES - $$ = doc->attrId(0, dattr.implementation(), false); -#else - $$ = doc->getId(NodeImpl::AttributeId, dattr.implementation(), false, true); -#endif - } else { - $$ = khtml::getAttrID(attr.lower().ascii(), attr.length()); - // this case should never happen - only when loading - // the default stylesheet - which must not contain unknown attributes - assert($$ != 0); - } - } - ; - -attrib: - '[' maybe_space attrib_id ']' { - $$ = new CSSSelector(); - $$->attr = $3; - $$->match = CSSSelector::Set; - } - | '[' maybe_space attrib_id match maybe_space ident_or_string maybe_space ']' { - $$ = new CSSSelector(); - $$->attr = $3; - $$->match = $4; - $$->value = domString($6); - } - | '[' maybe_space namespace_selector attrib_id ']' { - $$ = new CSSSelector(); - $$->attr = $4; - $$->match = CSSSelector::Set; - CSSParser *p = static_cast<CSSParser *>(parser); - if (p->styleElement && p->styleElement->isCSSStyleSheet()) - static_cast<CSSStyleSheetImpl*>(p->styleElement)->determineNamespace($$->attr, domString($3)); - } - | '[' maybe_space namespace_selector attrib_id match maybe_space ident_or_string maybe_space ']' { - $$ = new CSSSelector(); - $$->attr = $4; - $$->match = (CSSSelector::Match)$5; - $$->value = domString($7); - CSSParser *p = static_cast<CSSParser *>(parser); - if (p->styleElement && p->styleElement->isCSSStyleSheet()) - static_cast<CSSStyleSheetImpl*>(p->styleElement)->determineNamespace($$->attr, domString($3)); - } - ; - -match: - '=' { - $$ = CSSSelector::Exact; - } - | INCLUDES { - $$ = CSSSelector::List; - } - | DASHMATCH { - $$ = CSSSelector::Hyphen; - } - | BEGINSWITH { - $$ = CSSSelector::Begin; - } - | ENDSWITH { - $$ = CSSSelector::End; - } - | CONTAINS { - $$ = CSSSelector::Contain; - } - ; - -ident_or_string: - IDENT - | STRING - ; - -pseudo: - ':' IDENT { - $$ = new CSSSelector(); - $$->match = CSSSelector::PseudoClass; - $$->value = domString($2); - } - | - ':' ':' IDENT { - $$ = new CSSSelector(); - $$->match = CSSSelector::PseudoElement; - $$->value = domString($3); - } - // used by :nth-* - | ':' FUNCTION NTH ')' { - $$ = new CSSSelector(); - $$->match = CSSSelector::PseudoClass; - $$->string_arg = domString($3); - $$->value = domString($2); - } - // used by :nth-* - | ':' FUNCTION INTEGER ')' { - $$ = new CSSSelector(); - $$->match = CSSSelector::PseudoClass; - $$->string_arg = QString::number($3); - $$->value = domString($2); - } - // used by :nth-* and :lang - | ':' FUNCTION IDENT ')' { - $$ = new CSSSelector(); - $$->match = CSSSelector::PseudoClass; - $$->string_arg = domString($3); - $$->value = domString($2); - } - // used by :contains - | ':' FUNCTION STRING ')' { - $$ = new CSSSelector(); - $$->match = CSSSelector::PseudoClass; - $$->string_arg = domString($3); - $$->value = domString($2); - } - // used only by :not - | ':' NOTFUNCTION maybe_space simple_selector ')' { - $$ = new CSSSelector(); - $$->match = CSSSelector::PseudoClass; - $$->simpleSelector = $4; - $$->value = domString($2); - } - ; - -declaration_block: - '{' maybe_space declaration '}' { - $$ = $3; - } - | '{' maybe_space error '}' { - $$ = false; - } - | '{' maybe_space declaration_list '}' { - $$ = $3; - } - | '{' maybe_space declaration_list declaration '}' { - $$ = $3; - if ( $4 ) - $$ = $4; - } - | '{' maybe_space declaration_list error '}' { - $$ = $3; - } - ; - -declaration_list: - declaration ';' maybe_space { - $$ = $1; - } - | - error ';' maybe_space { - $$ = false; - } - | declaration_list declaration ';' maybe_space { - $$ = $1; - if ( $2 ) - $$ = $2; - } - | declaration_list error ';' maybe_space { - $$ = $1; - } - ; - -declaration: - property ':' maybe_space expr prio { - $$ = false; - CSSParser *p = static_cast<CSSParser *>(parser); - if ( $1 && $4 ) { - p->valueList = $4; -#ifdef CSS_DEBUG - kdDebug( 6080 ) << " got property: " << $1 << - ($5?" important":"")<< endl; -#endif - bool ok = p->parseValue( $1, $5 ); - if ( ok ) - $$ = ok; -#ifdef CSS_DEBUG - else - kdDebug( 6080 ) << " couldn't parse value!" << endl; -#endif - } else { - delete $4; - } - delete p->valueList; - p->valueList = 0; - } - | error invalid_block { - $$ = false; - } - ; - -property: - IDENT maybe_space { - QString str = qString($1); - $$ = getPropertyID( str.lower().latin1(), str.length() ); - } - ; - -prio: - IMPORTANT_SYM maybe_space { $$ = true; } - | /* empty */ { $$ = false; } - ; - -expr: - term { - $$ = new ValueList; - $$->addValue( $1 ); - } - | expr operator term { - $$ = $1; - if ( $$ ) { - if ( $2 ) { - Value v; - v.id = 0; - v.unit = Value::Operator; - v.iValue = $2; - $$->addValue( v ); - } - $$->addValue( $3 ); - } - } - ; - -operator: - '/' maybe_space { - $$ = '/'; - } - | ',' maybe_space { - $$ = ','; - } - | /* empty */ { - $$ = 0; - } - ; - -term: - unary_term { $$ = $1; } - | unary_operator unary_term { $$ = $2; $$.fValue *= $1; } - /* DIMEN is an unary_term, but since we store the string we must not modify fValue */ - | DIMEN maybe_space { $$.id = 0; $$.string = $1; $$.unit = CSSPrimitiveValue::CSS_DIMENSION; } - | STRING maybe_space { $$.id = 0; $$.string = $1; $$.unit = CSSPrimitiveValue::CSS_STRING; } - | IDENT maybe_space { - QString str = qString( $1 ); - $$.id = getValueID( str.lower().latin1(), str.length() ); - $$.unit = CSSPrimitiveValue::CSS_IDENT; - $$.string = $1; - } - | URI maybe_space { $$.id = 0; $$.string = $1; $$.unit = CSSPrimitiveValue::CSS_URI; } - | UNICODERANGE maybe_space { $$.id = 0; $$.iValue = 0; $$.unit = CSSPrimitiveValue::CSS_UNKNOWN;/* ### */ } - | hexcolor { $$.id = 0; $$.string = $1; $$.unit = CSSPrimitiveValue::CSS_RGBCOLOR; } -/* ### according to the specs a function can have a unary_operator in front. I know no case where this makes sense */ - | function { - $$ = $1; - } - ; - -unary_term: - INTEGER maybe_space { $$.id = 0; $$.isInt = true; $$.fValue = $1; $$.unit = CSSPrimitiveValue::CSS_NUMBER; } - | FLOAT maybe_space { $$.id = 0; $$.isInt = false; $$.fValue = $1; $$.unit = CSSPrimitiveValue::CSS_NUMBER; } - | PERCENTAGE maybe_space { $$.id = 0; $$.fValue = $1; $$.unit = CSSPrimitiveValue::CSS_PERCENTAGE; } - | PXS maybe_space { $$.id = 0; $$.fValue = $1; $$.unit = CSSPrimitiveValue::CSS_PX; } - | CMS maybe_space { $$.id = 0; $$.fValue = $1; $$.unit = CSSPrimitiveValue::CSS_CM; } - | MMS maybe_space { $$.id = 0; $$.fValue = $1; $$.unit = CSSPrimitiveValue::CSS_MM; } - | INS maybe_space { $$.id = 0; $$.fValue = $1; $$.unit = CSSPrimitiveValue::CSS_IN; } - | PTS maybe_space { $$.id = 0; $$.fValue = $1; $$.unit = CSSPrimitiveValue::CSS_PT; } - | PCS maybe_space { $$.id = 0; $$.fValue = $1; $$.unit = CSSPrimitiveValue::CSS_PC; } - | DEGS maybe_space { $$.id = 0; $$.fValue = $1; $$.unit = CSSPrimitiveValue::CSS_DEG; } - | RADS maybe_space { $$.id = 0; $$.fValue = $1; $$.unit = CSSPrimitiveValue::CSS_RAD; } - | GRADS maybe_space { $$.id = 0; $$.fValue = $1; $$.unit = CSSPrimitiveValue::CSS_GRAD; } - | MSECS maybe_space { $$.id = 0; $$.fValue = $1; $$.unit = CSSPrimitiveValue::CSS_MS; } - | SECS maybe_space { $$.id = 0; $$.fValue = $1; $$.unit = CSSPrimitiveValue::CSS_S; } - | HERZ maybe_space { $$.id = 0; $$.fValue = $1; $$.unit = CSSPrimitiveValue::CSS_HZ; } - | KHERZ maybe_space { $$.id = 0; $$.fValue = $1; $$.unit = CSSPrimitiveValue::CSS_KHZ; } - | EMS maybe_space { $$.id = 0; $$.fValue = $1; $$.unit = CSSPrimitiveValue::CSS_EMS; } - | QEMS maybe_space { $$.id = 0; $$.fValue = $1; $$.unit = Value::Q_EMS; } - | EXS maybe_space { $$.id = 0; $$.fValue = $1; $$.unit = CSSPrimitiveValue::CSS_EXS; } - ; - - -function: - FUNCTION maybe_space expr ')' maybe_space { - Function *f = new Function; - f->name = $1; - f->args = $3; - $$.id = 0; - $$.unit = Value::Function; - $$.function = f; - } - | FUNCTION maybe_space error { - Function *f = new Function; - f->name = $1; - f->args = 0; - $$.id = 0; - $$.unit = Value::Function; - $$.function = f; - } - - ; -/* - * There is a constraint on the color that it must - * have either 3 or 6 hex-digits (i.e., [0-9a-fA-F]) - * after the "#"; e.g., "#000" is OK, but "#abcd" is not. - */ -hexcolor: - HASH maybe_space { $$ = $1; } - ; - - -/* error handling rules */ - -invalid_at: - '@' error invalid_block { - $$ = 0; -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "skipped invalid @-rule" << endl; -#endif - } - | '@' error ';' { - $$ = 0; -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "skipped invalid @-rule" << endl; -#endif - } - ; - -invalid_rule: - error invalid_block { - $$ = 0; -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "skipped invalid rule" << endl; -#endif - } -/* - Seems like the two rules below are trying too much and violating - http://www.hixie.ch/tests/evil/mixed/csserrorhandling.html - - | error ';' { - $$ = 0; -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "skipped invalid rule" << endl; -#endif - } - | error '}' { - $$ = 0; -#ifdef CSS_DEBUG - kdDebug( 6080 ) << "skipped invalid rule" << endl; -#endif - } -*/ - ; - -invalid_block: - '{' error invalid_block_list error '}' - | '{' error '}' - ; - -invalid_block_list: - invalid_block - | invalid_block_list error invalid_block -; - -%% - diff --git a/khtml/css/quirks.css b/khtml/css/quirks.css deleted file mode 100644 index 6a02ee0bd..000000000 --- a/khtml/css/quirks.css +++ /dev/null @@ -1,41 +0,0 @@ -/* - * This style sheet is used by khtml to render HTML pages in quirks mode - * (C) 2000-2003 Lars Knoll (knoll@kde.org) - * - * Konqueror/khtml relies on the existence of this style sheet for - * rendering. Do not remove or modify this file unless you know - * what you are doing. - */ - -/* Give floated images margins of 3px */ -img[align="left"] { - margin-right: 3px; -} - -img[align="right"] { - margin-left: 3px; -} - -/* Tables reset both line-height and white-space in quirks mode. - Compatible with WinIE. For some reason they don't reset font-family */ -table { - white-space: normal; - line-height: normal; - color: -khtml-text; - font-size: medium; - empty-cells: hide; - text-align: -khtml-auto; - font-weight: initial; -} - -LAYER { - position: absolute; -} - -DIV > LAYER { - position: static; -} - -ILAYER > LAYER { - position: relative; -}
\ No newline at end of file diff --git a/khtml/css/tokenizer.cpp b/khtml/css/tokenizer.cpp deleted file mode 100644 index 493a98032..000000000 --- a/khtml/css/tokenizer.cpp +++ /dev/null @@ -1,930 +0,0 @@ -/* - * This file is part of the DOM implementation for KDE. - * - * Copyright (C) 2003 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 is mostly data generated by flex. Unfortunately flex - can't handle 16bit strings directly, so we just copy the part of - the code we need and modify it to our needs. - - Most of the defines below are to make sure we can easily use the - flex generated code, using as little editing as possible. - - The flex syntax to generate the lexer are more or less directly - copied from the CSS2.1 specs, with some fixes for comments and - the important symbol. - - To regenerate, run flex on tokenizer.flex. After this, copy the - data tables and the YY_DECL method over to this file. Remove the - init code from YY_DECL and change the YY_END_OF_BUFFER to only call - yyterminate(). - -*/ - -// --------- begin generated code ------------------- -#define YY_NUM_RULES 51 -#define YY_END_OF_BUFFER 52 -static yyconst short int yy_accept[331] = - { 0, - 0, 0, 52, 50, 2, 2, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 42, 50, 50, 50, 50, - 11, 11, 11, 50, 50, 2, 0, 0, 0, 10, - 0, 13, 0, 8, 0, 0, 9, 0, 0, 0, - 11, 11, 43, 0, 41, 0, 0, 42, 0, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 12, - 40, 40, 37, 0, 0, 0, 0, 0, 0, 0, - 0, 11, 11, 7, 47, 11, 0, 0, 11, 11, - 0, 11, 6, 5, 0, 0, 0, 10, 0, 0, - 13, 13, 0, 0, 10, 0, 0, 4, 12, 0, - - 0, 40, 40, 40, 0, 40, 28, 40, 24, 26, - 40, 38, 30, 40, 29, 36, 40, 32, 31, 27, - 40, 0, 0, 0, 0, 0, 0, 0, 0, 11, - 11, 11, 12, 11, 11, 48, 48, 11, 0, 0, - 0, 13, 0, 0, 0, 1, 40, 40, 40, 40, - 33, 40, 39, 12, 34, 3, 0, 0, 0, 0, - 0, 0, 0, 11, 11, 44, 0, 48, 48, 48, - 47, 0, 0, 13, 0, 0, 0, 40, 40, 40, - 35, 0, 0, 0, 0, 0, 0, 15, 11, 11, - 49, 48, 48, 48, 48, 0, 0, 0, 0, 46, - - 0, 0, 0, 13, 0, 40, 40, 25, 0, 0, - 0, 0, 16, 0, 11, 11, 49, 48, 48, 48, - 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 46, 0, 0, 0, 0, 13, 0, 40, 40, - 0, 0, 0, 14, 0, 11, 11, 49, 48, 48, - 48, 48, 48, 48, 0, 45, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, - 0, 40, 40, 0, 18, 0, 0, 11, 49, 48, - 48, 48, 48, 48, 48, 48, 0, 45, 0, 0, - 0, 45, 0, 0, 0, 0, 40, 0, 0, 0, - - 0, 0, 49, 0, 0, 0, 23, 0, 0, 0, - 17, 19, 49, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 20, 0, 0, 0, 21, 22, 0 - } ; - -static yyconst int yy_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 1, 4, 5, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 12, 18, 19, 20, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 12, 12, 22, - 23, 24, 25, 26, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 47, 48, 49, 50, 51, 39, 52, 39, 53, - 12, 27, 12, 28, 29, 12, 30, 31, 32, 33, - - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 39, 52, - 39, 53, 12, 54, 12, 55, 1, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56 - } ; - -static yyconst int yy_meta[57] = - { 0, - 1, 2, 3, 3, 3, 4, 4, 4, 4, 4, - 4, 4, 4, 5, 4, 4, 4, 6, 4, 4, - 6, 4, 4, 4, 7, 4, 8, 4, 8, 9, - 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 4, 4, 8 - } ; - -static yyconst short int yy_base[359] = - { 0, - 0, 0, 807, 1638, 55, 60, 65, 64, 779, 781, - 60, 780, 56, 781, 785, 93, 793, 63, 126, 773, - 61, 75, 136, 772, 771, 162, 167, 751, 70, 1638, - 204, 764, 154, 1638, 63, 238, 1638, 760, 64, 160, - 82, 183, 133, 767, 1638, 755, 760, 0, 183, 53, - 753, 52, 83, 169, 135, 121, 57, 192, 205, 206, - 225, 86, 745, 752, 729, 731, 723, 716, 723, 726, - 725, 231, 276, 1638, 1638, 234, 254, 733, 235, 249, - 291, 277, 1638, 1638, 701, 195, 172, 219, 325, 359, - 717, 393, 217, 237, 286, 427, 461, 1638, 160, 727, - - 135, 715, 495, 714, 344, 256, 700, 265, 699, 698, - 88, 697, 696, 175, 695, 694, 233, 693, 679, 678, - 267, 684, 664, 670, 656, 640, 651, 622, 627, 446, - 305, 529, 639, 320, 321, 318, 634, 323, 614, 287, - 521, 536, 326, 544, 641, 1638, 551, 621, 585, 311, - 619, 339, 618, 360, 617, 1638, 594, 582, 556, 559, - 564, 567, 566, 577, 592, 1638, 600, 324, 574, 572, - 634, 549, 620, 635, 641, 579, 324, 656, 662, 278, - 567, 551, 544, 562, 526, 528, 501, 1638, 677, 683, - 698, 382, 523, 522, 521, 732, 758, 288, 341, 1638, - - 784, 496, 718, 744, 791, 799, 806, 517, 502, 489, - 486, 471, 1638, 474, 814, 821, 829, 383, 493, 485, - 484, 481, 400, 343, 407, 863, 356, 897, 931, 957, - 983, 1009, 1035, 1069, 475, 848, 882, 917, 943, 969, - 486, 453, 460, 1638, 445, 995, 1076, 1084, 416, 448, - 447, 444, 443, 426, 440, 1638, 444, 408, 509, 1118, - 1152, 601, 358, 1131, 1186, 1220, 1205, 407, 1227, 1235, - 1242, 481, 1250, 456, 1638, 417, 406, 535, 1257, 403, - 1638, 1638, 1638, 1638, 1638, 1638, 1049, 409, 410, 1265, - 1299, 426, 443, 1285, 1300, 370, 676, 354, 334, 352, - - 339, 283, 1306, 1321, 1327, 1342, 1638, 261, 226, 225, - 1638, 1638, 1638, 1348, 1363, 1369, 214, 192, 129, 1384, - 1390, 1405, 73, 1638, 52, 1411, 1426, 1638, 1638, 1638, - 1460, 1464, 1472, 1476, 1482, 1487, 1495, 1501, 1509, 1518, - 1520, 1526, 1530, 1536, 1545, 1551, 1555, 1564, 1568, 1576, - 1580, 1588, 1596, 1604, 1608, 1616, 1624, 1628 - } ; - -static yyconst short int yy_def[359] = - { 0, - 330, 1, 330, 330, 330, 330, 330, 331, 332, 330, - 333, 330, 334, 330, 330, 330, 330, 330, 335, 330, - 336, 336, 336, 330, 330, 330, 330, 330, 331, 330, - 337, 332, 338, 330, 333, 339, 330, 330, 330, 335, - 336, 336, 16, 340, 330, 341, 330, 16, 342, 343, - 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 343, 343, 343, 330, 330, 330, 330, 330, 330, 330, - 330, 336, 336, 330, 330, 336, 344, 330, 336, 336, - 330, 336, 330, 330, 330, 331, 331, 331, 331, 337, - 332, 332, 333, 333, 333, 333, 339, 330, 330, 340, - - 345, 343, 343, 343, 346, 343, 343, 343, 343, 343, - 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, - 343, 330, 330, 330, 330, 330, 330, 330, 330, 73, - 336, 73, 330, 336, 336, 347, 330, 336, 330, 331, - 89, 92, 333, 96, 348, 330, 103, 343, 103, 343, - 343, 343, 343, 343, 343, 330, 330, 330, 330, 330, - 330, 330, 330, 73, 132, 330, 330, 349, 330, 330, - 350, 330, 89, 92, 96, 348, 345, 103, 149, 343, - 343, 330, 330, 330, 330, 330, 330, 330, 73, 132, - 330, 351, 330, 330, 330, 350, 350, 352, 353, 330, - - 354, 330, 89, 92, 96, 103, 149, 343, 330, 330, - 330, 330, 330, 330, 73, 132, 330, 355, 330, 330, - 330, 330, 330, 352, 330, 356, 353, 357, 350, 350, - 350, 350, 350, 354, 330, 89, 92, 96, 103, 149, - 330, 330, 330, 330, 330, 73, 132, 330, 358, 330, - 330, 330, 330, 330, 330, 330, 352, 352, 352, 352, - 356, 353, 353, 353, 353, 357, 233, 330, 89, 92, - 96, 343, 149, 330, 330, 330, 330, 246, 330, 330, - 330, 330, 330, 330, 330, 330, 352, 352, 352, 260, - 353, 353, 353, 265, 233, 330, 343, 330, 330, 330, - - 330, 330, 330, 260, 265, 233, 330, 330, 330, 330, - 330, 330, 330, 260, 265, 233, 330, 330, 330, 260, - 265, 233, 330, 330, 330, 260, 265, 330, 330, 0, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330 - } ; - -static yyconst short int yy_nxt[1695] = - { 0, - 4, 5, 6, 5, 5, 5, 7, 8, 9, 10, - 4, 4, 11, 4, 4, 12, 4, 13, 14, 15, - 16, 17, 4, 4, 4, 18, 19, 20, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 22, 21, 21, 21, 21, 21, 21, 23, - 21, 21, 21, 24, 25, 21, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, - 27, 30, 30, 38, 75, 30, 39, 30, 105, 105, - 65, 106, 40, 105, 39, 329, 36, 77, 75, 36, - 31, 78, 79, 107, 66, 75, 31, 67, 42, 113, - - 68, 77, 28, 45, 69, 70, 99, 71, 77, 105, - 46, 47, 105, 48, 105, 121, 108, 152, 80, 49, - 328, 50, 51, 51, 52, 53, 54, 51, 55, 56, - 57, 51, 58, 51, 59, 60, 51, 61, 51, 62, - 63, 51, 51, 51, 51, 51, 73, 105, 51, 75, - 101, 330, 81, 43, 146, 73, 73, 73, 73, 73, - 73, 105, 77, 26, 26, 26, 26, 26, 27, 27, - 27, 27, 27, 112, 92, 51, 78, 78, 325, 30, - 73, 111, 82, 92, 92, 92, 92, 92, 92, 73, - 73, 73, 73, 73, 73, 105, 75, 29, 31, 78, - - 79, 105, 30, 103, 28, 29, 29, 29, 86, 77, - 109, 88, 103, 103, 103, 103, 103, 103, 105, 35, - 110, 31, 78, 117, 89, 324, 30, 153, 114, 30, - 90, 105, 105, 89, 89, 89, 89, 89, 89, 35, - 35, 35, 93, 36, 75, 31, 115, 75, 75, 30, - 95, 105, 116, 154, 323, 134, 118, 77, 96, 105, - 77, 77, 75, 36, 97, 319, 318, 96, 96, 96, - 96, 96, 96, 119, 132, 77, 120, 72, 72, 72, - 72, 72, 105, 132, 132, 132, 132, 132, 132, 75, - 75, 105, 317, 105, 30, 225, 130, 135, 30, 155, - - 151, 150, 77, 77, 105, 130, 130, 130, 130, 130, - 130, 136, 36, 31, 226, 137, 312, 138, 75, 208, - 136, 136, 136, 136, 136, 136, 87, 140, 140, 140, - 87, 77, 30, 75, 166, 167, 171, 105, 30, 177, - 134, 167, 169, 146, 180, 141, 77, 77, 193, 77, - 225, 31, 36, 225, 141, 141, 141, 141, 141, 141, - 29, 29, 29, 86, 149, 105, 88, 228, 225, 226, - 225, 181, 311, 149, 149, 149, 149, 149, 149, 89, - 154, 310, 228, 309, 228, 90, 105, 308, 89, 89, - 89, 89, 89, 89, 91, 91, 91, 91, 91, 167, - - 167, 223, 223, 223, 223, 223, 219, 250, 255, 255, - 255, 255, 255, 142, 200, 225, 225, 225, 307, 33, - 167, 256, 142, 142, 142, 142, 142, 142, 94, 143, - 143, 143, 94, 167, 226, 226, 226, 302, 225, 30, - 281, 255, 255, 255, 255, 255, 224, 144, 301, 296, - 286, 225, 228, 36, 256, 225, 144, 144, 144, 144, - 144, 144, 35, 35, 35, 93, 164, 285, 284, 228, - 226, 283, 282, 95, 277, 164, 164, 164, 164, 164, - 164, 96, 102, 102, 102, 102, 102, 97, 298, 276, - 96, 96, 96, 96, 96, 96, 102, 102, 102, 102, - - 102, 275, 299, 274, 268, 254, 300, 105, 253, 252, - 287, 255, 255, 255, 287, 147, 225, 251, 245, 244, - 243, 105, 242, 288, 147, 147, 147, 147, 147, 147, - 131, 131, 131, 131, 131, 226, 131, 131, 131, 131, - 131, 173, 241, 105, 235, 222, 221, 220, 214, 165, - 173, 173, 173, 173, 173, 173, 174, 213, 165, 165, - 165, 165, 165, 165, 175, 174, 174, 174, 174, 174, - 174, 178, 212, 175, 175, 175, 175, 175, 175, 211, - 178, 178, 178, 178, 178, 178, 148, 148, 148, 148, - 148, 210, 209, 105, 177, 202, 195, 189, 194, 188, - - 187, 186, 185, 227, 184, 179, 189, 189, 189, 189, - 189, 189, 190, 225, 179, 179, 179, 179, 179, 179, - 191, 190, 190, 190, 190, 190, 190, 228, 183, 191, - 191, 191, 191, 191, 191, 196, 196, 196, 196, 196, - 203, 198, 182, 105, 105, 105, 199, 105, 200, 203, - 203, 203, 203, 203, 203, 204, 177, 172, 170, 133, - 201, 205, 163, 162, 204, 204, 204, 204, 204, 204, - 205, 205, 205, 205, 205, 205, 206, 148, 148, 148, - 148, 148, 207, 161, 160, 206, 206, 206, 206, 206, - 206, 207, 207, 207, 207, 207, 207, 215, 159, 158, - - 157, 156, 105, 216, 105, 105, 215, 215, 215, 215, - 215, 215, 216, 216, 216, 216, 216, 216, 217, 105, - 105, 105, 105, 105, 105, 105, 105, 217, 217, 217, - 217, 217, 217, 196, 196, 196, 196, 196, 236, 198, - 105, 105, 101, 33, 199, 139, 200, 236, 236, 236, - 236, 236, 236, 133, 129, 128, 127, 126, 201, 223, - 223, 223, 223, 223, 237, 330, 125, 124, 123, 122, - 330, 105, 200, 237, 237, 237, 237, 237, 237, 105, - 43, 49, 101, 98, 201, 223, 223, 223, 223, 229, - 33, 231, 85, 84, 83, 74, 231, 231, 232, 64, - - 44, 43, 37, 34, 233, 33, 330, 330, 330, 330, - 234, 238, 330, 233, 233, 233, 233, 233, 233, 239, - 238, 238, 238, 238, 238, 238, 240, 330, 239, 239, - 239, 239, 239, 239, 246, 240, 240, 240, 240, 240, - 240, 247, 330, 246, 246, 246, 246, 246, 246, 248, - 247, 247, 247, 247, 247, 247, 330, 330, 248, 248, - 248, 248, 248, 248, 224, 224, 224, 257, 269, 330, - 259, 330, 330, 330, 330, 330, 330, 269, 269, 269, - 269, 269, 269, 260, 330, 330, 330, 330, 330, 261, - 330, 330, 260, 260, 260, 260, 260, 260, 227, 227, - - 227, 262, 270, 330, 330, 330, 330, 330, 330, 264, - 330, 270, 270, 270, 270, 270, 270, 265, 330, 330, - 330, 330, 330, 266, 330, 330, 265, 265, 265, 265, - 265, 265, 223, 223, 223, 223, 223, 271, 330, 330, - 330, 330, 330, 330, 330, 200, 271, 271, 271, 271, - 271, 271, 330, 330, 330, 330, 330, 201, 223, 223, - 223, 223, 223, 272, 330, 330, 330, 330, 330, 330, - 330, 200, 272, 272, 272, 272, 272, 272, 330, 330, - 330, 330, 330, 201, 223, 223, 223, 223, 223, 273, - 330, 330, 330, 330, 330, 330, 330, 200, 273, 273, - - 273, 273, 273, 273, 330, 330, 330, 330, 330, 201, - 223, 223, 223, 223, 223, 76, 330, 330, 330, 330, - 330, 330, 330, 200, 76, 76, 76, 76, 76, 76, - 330, 330, 330, 330, 330, 201, 229, 229, 229, 229, - 229, 330, 330, 330, 330, 330, 330, 330, 330, 200, - 287, 255, 255, 255, 287, 267, 225, 330, 330, 330, - 330, 201, 330, 288, 267, 267, 267, 267, 267, 267, - 223, 223, 223, 223, 229, 226, 231, 330, 330, 330, - 330, 231, 231, 232, 330, 330, 330, 330, 330, 233, - 330, 330, 330, 330, 330, 234, 278, 330, 233, 233, - - 233, 233, 233, 233, 279, 278, 278, 278, 278, 278, - 278, 330, 330, 279, 279, 279, 279, 279, 279, 258, - 289, 289, 289, 258, 330, 225, 330, 330, 330, 330, - 330, 330, 291, 255, 255, 255, 291, 330, 290, 330, - 330, 330, 330, 225, 226, 292, 330, 290, 290, 290, - 290, 290, 290, 224, 224, 224, 257, 228, 330, 259, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 260, 330, 330, 330, 330, 330, 261, 330, - 330, 260, 260, 260, 260, 260, 260, 263, 293, 293, - 293, 263, 330, 330, 330, 330, 330, 330, 225, 330, - - 330, 330, 330, 330, 330, 330, 294, 330, 330, 330, - 330, 330, 228, 330, 330, 294, 294, 294, 294, 294, - 294, 227, 227, 227, 262, 295, 330, 330, 330, 330, - 330, 330, 264, 330, 295, 295, 295, 295, 295, 295, - 265, 330, 330, 330, 330, 330, 266, 29, 330, 265, - 265, 265, 265, 265, 265, 32, 29, 29, 29, 29, - 29, 29, 35, 330, 32, 32, 32, 32, 32, 32, - 297, 35, 35, 35, 35, 35, 35, 303, 330, 297, - 297, 297, 297, 297, 297, 304, 303, 303, 303, 303, - 303, 303, 330, 330, 304, 304, 304, 304, 304, 304, - - 291, 255, 255, 255, 291, 305, 330, 330, 330, 330, - 330, 225, 330, 292, 305, 305, 305, 305, 305, 305, - 306, 330, 330, 330, 330, 228, 313, 330, 330, 306, - 306, 306, 306, 306, 306, 313, 313, 313, 313, 313, - 313, 314, 330, 330, 330, 330, 330, 315, 330, 330, - 314, 314, 314, 314, 314, 314, 315, 315, 315, 315, - 315, 315, 316, 330, 330, 330, 330, 330, 320, 330, - 330, 316, 316, 316, 316, 316, 316, 320, 320, 320, - 320, 320, 320, 321, 330, 330, 330, 330, 330, 322, - 330, 330, 321, 321, 321, 321, 321, 321, 322, 322, - - 322, 322, 322, 322, 326, 330, 330, 330, 330, 330, - 327, 330, 330, 326, 326, 326, 326, 326, 326, 327, - 327, 327, 327, 327, 327, 197, 330, 330, 330, 330, - 330, 224, 330, 330, 197, 197, 197, 197, 197, 197, - 224, 224, 224, 224, 224, 224, 227, 330, 330, 330, - 330, 330, 330, 330, 330, 227, 227, 227, 227, 227, - 227, 29, 330, 29, 29, 29, 29, 29, 29, 32, - 330, 32, 32, 35, 330, 35, 35, 35, 35, 35, - 35, 41, 330, 41, 41, 72, 72, 72, 72, 72, - 72, 76, 76, 330, 76, 76, 87, 87, 87, 87, - - 87, 87, 87, 87, 91, 91, 91, 91, 91, 91, - 94, 94, 94, 94, 94, 94, 94, 94, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 51, 51, 102, - 102, 102, 102, 102, 102, 104, 330, 104, 104, 131, - 131, 131, 131, 131, 131, 145, 145, 145, 145, 145, - 145, 145, 145, 145, 148, 148, 148, 148, 148, 148, - 168, 168, 330, 168, 176, 176, 176, 176, 176, 176, - 176, 176, 176, 192, 192, 330, 192, 197, 197, 197, - 330, 197, 197, 197, 197, 218, 218, 330, 218, 224, - 330, 224, 224, 224, 224, 224, 224, 227, 330, 227, - - 227, 227, 227, 227, 227, 230, 230, 230, 230, 230, - 230, 230, 230, 249, 249, 330, 249, 258, 258, 258, - 258, 258, 258, 258, 258, 263, 263, 263, 263, 263, - 263, 263, 263, 280, 280, 330, 280, 3, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330 - - } ; - -static yyconst short int yy_chk[1695] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, - 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, - 7, 8, 11, 13, 21, 35, 13, 29, 52, 50, - 18, 50, 13, 57, 39, 325, 11, 21, 22, 35, - 8, 22, 22, 52, 18, 41, 29, 18, 13, 57, - - 18, 22, 7, 16, 18, 18, 39, 18, 41, 53, - 16, 16, 62, 16, 111, 62, 53, 111, 22, 16, - 323, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 19, 56, 16, 23, - 101, 43, 23, 43, 101, 19, 19, 19, 19, 19, - 19, 55, 23, 26, 26, 26, 26, 26, 27, 27, - 27, 27, 27, 56, 33, 43, 99, 99, 319, 87, - 40, 55, 23, 33, 33, 33, 33, 33, 33, 40, - 40, 40, 40, 40, 40, 54, 42, 86, 87, 42, - - 42, 114, 86, 49, 27, 31, 31, 31, 31, 42, - 54, 31, 49, 49, 49, 49, 49, 49, 58, 93, - 54, 86, 60, 60, 31, 318, 88, 114, 58, 93, - 31, 59, 60, 31, 31, 31, 31, 31, 31, 36, - 36, 36, 36, 93, 72, 88, 59, 76, 79, 94, - 36, 61, 59, 117, 317, 79, 61, 72, 36, 117, - 76, 79, 80, 94, 36, 310, 309, 36, 36, 36, - 36, 36, 36, 61, 77, 80, 61, 73, 73, 73, - 73, 73, 106, 77, 77, 77, 77, 77, 77, 73, - 82, 108, 308, 121, 140, 198, 73, 80, 95, 121, - - 108, 106, 73, 82, 180, 73, 73, 73, 73, 73, - 73, 81, 95, 140, 198, 81, 302, 82, 131, 180, - 81, 81, 81, 81, 81, 81, 89, 89, 89, 89, - 89, 131, 89, 134, 135, 136, 138, 150, 143, 177, - 134, 168, 136, 177, 150, 89, 134, 135, 168, 138, - 224, 89, 143, 199, 89, 89, 89, 89, 89, 89, - 90, 90, 90, 90, 105, 152, 90, 199, 227, 224, - 263, 152, 301, 105, 105, 105, 105, 105, 105, 90, - 154, 300, 227, 299, 263, 90, 154, 298, 90, 90, - 90, 90, 90, 90, 92, 92, 92, 92, 92, 192, - - 218, 223, 223, 223, 223, 223, 192, 218, 225, 225, - 225, 225, 225, 92, 223, 258, 288, 289, 296, 92, - 280, 225, 92, 92, 92, 92, 92, 92, 96, 96, - 96, 96, 96, 249, 258, 288, 289, 277, 292, 96, - 249, 255, 255, 255, 255, 255, 257, 96, 276, 268, - 254, 257, 292, 96, 255, 293, 96, 96, 96, 96, - 96, 96, 97, 97, 97, 97, 130, 253, 252, 293, - 257, 251, 250, 97, 245, 130, 130, 130, 130, 130, - 130, 97, 272, 272, 272, 272, 272, 97, 274, 243, - 97, 97, 97, 97, 97, 97, 103, 103, 103, 103, - - 103, 242, 274, 241, 235, 222, 274, 272, 221, 220, - 259, 259, 259, 259, 259, 103, 259, 219, 214, 212, - 211, 103, 210, 259, 103, 103, 103, 103, 103, 103, - 132, 132, 132, 132, 132, 259, 278, 278, 278, 278, - 278, 141, 209, 208, 202, 195, 194, 193, 187, 132, - 141, 141, 141, 141, 141, 141, 142, 186, 132, 132, - 132, 132, 132, 132, 144, 142, 142, 142, 142, 142, - 142, 147, 185, 144, 144, 144, 144, 144, 144, 184, - 147, 147, 147, 147, 147, 147, 149, 149, 149, 149, - 149, 183, 182, 181, 176, 172, 170, 164, 169, 163, - - 162, 161, 160, 262, 159, 149, 164, 164, 164, 164, - 164, 164, 165, 262, 149, 149, 149, 149, 149, 149, - 167, 165, 165, 165, 165, 165, 165, 262, 158, 167, - 167, 167, 167, 167, 167, 171, 171, 171, 171, 171, - 173, 171, 157, 155, 153, 151, 171, 148, 171, 173, - 173, 173, 173, 173, 173, 174, 145, 139, 137, 133, - 171, 175, 129, 128, 174, 174, 174, 174, 174, 174, - 175, 175, 175, 175, 175, 175, 178, 297, 297, 297, - 297, 297, 179, 127, 126, 178, 178, 178, 178, 178, - 178, 179, 179, 179, 179, 179, 179, 189, 125, 124, - - 123, 122, 297, 190, 120, 119, 189, 189, 189, 189, - 189, 189, 190, 190, 190, 190, 190, 190, 191, 118, - 116, 115, 113, 112, 110, 109, 107, 191, 191, 191, - 191, 191, 191, 196, 196, 196, 196, 196, 203, 196, - 104, 102, 100, 91, 196, 85, 196, 203, 203, 203, - 203, 203, 203, 78, 71, 70, 69, 68, 196, 197, - 197, 197, 197, 197, 204, 197, 67, 66, 65, 64, - 197, 63, 197, 204, 204, 204, 204, 204, 204, 51, - 47, 46, 44, 38, 197, 201, 201, 201, 201, 201, - 32, 201, 28, 25, 24, 20, 201, 201, 201, 17, - - 15, 14, 12, 10, 201, 9, 3, 0, 0, 0, - 201, 205, 0, 201, 201, 201, 201, 201, 201, 206, - 205, 205, 205, 205, 205, 205, 207, 0, 206, 206, - 206, 206, 206, 206, 215, 207, 207, 207, 207, 207, - 207, 216, 0, 215, 215, 215, 215, 215, 215, 217, - 216, 216, 216, 216, 216, 216, 0, 0, 217, 217, - 217, 217, 217, 217, 226, 226, 226, 226, 236, 0, - 226, 0, 0, 0, 0, 0, 0, 236, 236, 236, - 236, 236, 236, 226, 0, 0, 0, 0, 0, 226, - 0, 0, 226, 226, 226, 226, 226, 226, 228, 228, - - 228, 228, 237, 0, 0, 0, 0, 0, 0, 228, - 0, 237, 237, 237, 237, 237, 237, 228, 0, 0, - 0, 0, 0, 228, 0, 0, 228, 228, 228, 228, - 228, 228, 229, 229, 229, 229, 229, 238, 229, 0, - 0, 0, 0, 229, 0, 229, 238, 238, 238, 238, - 238, 238, 0, 0, 0, 0, 0, 229, 230, 230, - 230, 230, 230, 239, 230, 0, 0, 0, 0, 230, - 0, 230, 239, 239, 239, 239, 239, 239, 0, 0, - 0, 0, 0, 230, 231, 231, 231, 231, 231, 240, - 231, 0, 0, 0, 0, 231, 0, 231, 240, 240, - - 240, 240, 240, 240, 0, 0, 0, 0, 0, 231, - 232, 232, 232, 232, 232, 246, 232, 0, 0, 0, - 0, 232, 0, 232, 246, 246, 246, 246, 246, 246, - 0, 0, 0, 0, 0, 232, 233, 233, 233, 233, - 233, 0, 233, 0, 0, 0, 0, 233, 0, 233, - 287, 287, 287, 287, 287, 233, 287, 0, 0, 0, - 0, 233, 0, 287, 233, 233, 233, 233, 233, 233, - 234, 234, 234, 234, 234, 287, 234, 0, 0, 0, - 0, 234, 234, 234, 0, 0, 0, 0, 0, 234, - 0, 0, 0, 0, 0, 234, 247, 0, 234, 234, - - 234, 234, 234, 234, 248, 247, 247, 247, 247, 247, - 247, 0, 0, 248, 248, 248, 248, 248, 248, 260, - 260, 260, 260, 260, 0, 260, 0, 0, 0, 0, - 0, 0, 264, 264, 264, 264, 264, 0, 260, 0, - 0, 0, 0, 264, 260, 264, 0, 260, 260, 260, - 260, 260, 260, 261, 261, 261, 261, 264, 0, 261, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 261, 0, 0, 0, 0, 0, 261, 0, - 0, 261, 261, 261, 261, 261, 261, 265, 265, 265, - 265, 265, 0, 0, 0, 0, 0, 0, 265, 0, - - 0, 0, 0, 0, 0, 0, 265, 0, 0, 0, - 0, 0, 265, 0, 0, 265, 265, 265, 265, 265, - 265, 266, 266, 266, 266, 267, 0, 0, 0, 0, - 0, 0, 266, 0, 267, 267, 267, 267, 267, 267, - 266, 0, 0, 0, 0, 0, 266, 269, 0, 266, - 266, 266, 266, 266, 266, 270, 269, 269, 269, 269, - 269, 269, 271, 0, 270, 270, 270, 270, 270, 270, - 273, 271, 271, 271, 271, 271, 271, 279, 0, 273, - 273, 273, 273, 273, 273, 290, 279, 279, 279, 279, - 279, 279, 0, 0, 290, 290, 290, 290, 290, 290, - - 291, 291, 291, 291, 291, 294, 0, 0, 0, 0, - 0, 291, 0, 291, 294, 294, 294, 294, 294, 294, - 295, 0, 0, 0, 0, 291, 303, 0, 0, 295, - 295, 295, 295, 295, 295, 303, 303, 303, 303, 303, - 303, 304, 0, 0, 0, 0, 0, 305, 0, 0, - 304, 304, 304, 304, 304, 304, 305, 305, 305, 305, - 305, 305, 306, 0, 0, 0, 0, 0, 314, 0, - 0, 306, 306, 306, 306, 306, 306, 314, 314, 314, - 314, 314, 314, 315, 0, 0, 0, 0, 0, 316, - 0, 0, 315, 315, 315, 315, 315, 315, 316, 316, - - 316, 316, 316, 316, 320, 0, 0, 0, 0, 0, - 321, 0, 0, 320, 320, 320, 320, 320, 320, 321, - 321, 321, 321, 321, 321, 322, 0, 0, 0, 0, - 0, 326, 0, 0, 322, 322, 322, 322, 322, 322, - 326, 326, 326, 326, 326, 326, 327, 0, 0, 0, - 0, 0, 0, 0, 0, 327, 327, 327, 327, 327, - 327, 331, 0, 331, 331, 331, 331, 331, 331, 332, - 0, 332, 332, 333, 0, 333, 333, 333, 333, 333, - 333, 334, 0, 334, 334, 335, 335, 335, 335, 335, - 335, 336, 336, 0, 336, 336, 337, 337, 337, 337, - - 337, 337, 337, 337, 338, 338, 338, 338, 338, 338, - 339, 339, 339, 339, 339, 339, 339, 339, 340, 340, - 340, 340, 340, 340, 340, 340, 340, 341, 341, 342, - 342, 342, 342, 342, 342, 343, 0, 343, 343, 344, - 344, 344, 344, 344, 344, 345, 345, 345, 345, 345, - 345, 345, 345, 345, 346, 346, 346, 346, 346, 346, - 347, 347, 0, 347, 348, 348, 348, 348, 348, 348, - 348, 348, 348, 349, 349, 0, 349, 350, 350, 350, - 0, 350, 350, 350, 350, 351, 351, 0, 351, 352, - 0, 352, 352, 352, 352, 352, 352, 353, 0, 353, - - 353, 353, 353, 353, 353, 354, 354, 354, 354, 354, - 354, 354, 354, 355, 355, 0, 355, 356, 356, 356, - 356, 356, 356, 356, 356, 357, 357, 357, 357, 357, - 357, 357, 357, 358, 358, 0, 358, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330 - - } ; - -YY_DECL - { - register yy_state_type yy_current_state; - register unsigned short *yy_cp, *yy_bp; - register int yy_act; - -#line 25 "tokenizer.flex" - - -#line 1009 "tok" - - while ( 1 ) /* loops until end-of-file is reached */ - { - yy_cp = yy_c_buf_p; - - /* Support of yytext. */ - *yy_cp = yy_hold_char; - - /* yy_bp points to the position in yy_ch_buf of the start of - * the current run. - */ - yy_bp = yy_cp; - - yy_current_state = yy_start; -yy_match: - do - { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; - if ( yy_accept[yy_current_state] ) - { - yy_last_accepting_state = yy_current_state; - yy_last_accepting_cpos = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 331 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - ++yy_cp; - } - while ( yy_base[yy_current_state] != 1638 ); - -yy_find_action: - yy_act = yy_accept[yy_current_state]; - if ( yy_act == 0 ) - { /* have to back up */ - yy_cp = yy_last_accepting_cpos; - yy_current_state = yy_last_accepting_state; - yy_act = yy_accept[yy_current_state]; - } - - YY_DO_BEFORE_ACTION; - - -do_action: /* This label is used only to access EOF actions. */ - - - switch ( yy_act ) - { /* beginning of action switch */ - case 0: /* must back up */ - /* undo the effects of YY_DO_BEFORE_ACTION */ - *yy_cp = yy_hold_char; - yy_cp = yy_last_accepting_cpos; - yy_current_state = yy_last_accepting_state; - goto yy_find_action; - -case 1: -YY_RULE_SETUP -#line 27 "tokenizer.flex" -/* ignore comments */ - YY_BREAK -case 2: -YY_RULE_SETUP -#line 29 "tokenizer.flex" -{yyTok = S; return yyTok;} - YY_BREAK -case 3: -YY_RULE_SETUP -#line 31 "tokenizer.flex" -{yyTok = SGML_CD; return yyTok;} - YY_BREAK -case 4: -YY_RULE_SETUP -#line 32 "tokenizer.flex" -{yyTok = SGML_CD; return yyTok;} - YY_BREAK -case 5: -YY_RULE_SETUP -#line 33 "tokenizer.flex" -{yyTok = INCLUDES; return yyTok;} - YY_BREAK -case 6: -YY_RULE_SETUP -#line 34 "tokenizer.flex" -{yyTok = DASHMATCH; return yyTok;} - YY_BREAK -case 7: -YY_RULE_SETUP -#line 35 "tokenizer.flex" -{yyTok = BEGINSWITH; return yyTok;} - YY_BREAK -case 8: -YY_RULE_SETUP -#line 36 "tokenizer.flex" -{yyTok = ENDSWITH; return yyTok;} - YY_BREAK -case 9: -YY_RULE_SETUP -#line 37 "tokenizer.flex" -{yyTok = CONTAINS; return yyTok;} - YY_BREAK -case 10: -YY_RULE_SETUP -#line 39 "tokenizer.flex" -{yyTok = STRING; return yyTok;} - YY_BREAK -case 11: -YY_RULE_SETUP -#line 41 "tokenizer.flex" -{yyTok = IDENT; return yyTok;} - YY_BREAK -case 12: -YY_RULE_SETUP -#line 43 "tokenizer.flex" -{yyTok = NTH; return yyTok;} - YY_BREAK -case 13: -YY_RULE_SETUP -#line 45 "tokenizer.flex" -{yyTok = HASH; return yyTok;} - YY_BREAK -case 14: -YY_RULE_SETUP -#line 47 "tokenizer.flex" -{yyTok = IMPORT_SYM; return yyTok;} - YY_BREAK -case 15: -YY_RULE_SETUP -#line 48 "tokenizer.flex" -{yyTok = PAGE_SYM; return yyTok;} - YY_BREAK -case 16: -YY_RULE_SETUP -#line 49 "tokenizer.flex" -{yyTok = MEDIA_SYM; return yyTok;} - YY_BREAK -case 17: -YY_RULE_SETUP -#line 50 "tokenizer.flex" -{yyTok = FONT_FACE_SYM; return yyTok;} - YY_BREAK -case 18: -YY_RULE_SETUP -#line 51 "tokenizer.flex" -{yyTok = CHARSET_SYM; return yyTok;} - YY_BREAK -case 19: -YY_RULE_SETUP -#line 52 "tokenizer.flex" -{yyTok = NAMESPACE_SYM; return yyTok; } - YY_BREAK -case 20: -YY_RULE_SETUP -#line 53 "tokenizer.flex" -{yyTok = KHTML_RULE_SYM; return yyTok; } - YY_BREAK -case 21: -YY_RULE_SETUP -#line 54 "tokenizer.flex" -{yyTok = KHTML_DECLS_SYM; return yyTok; } - YY_BREAK -case 22: -YY_RULE_SETUP -#line 55 "tokenizer.flex" -{yyTok = KHTML_VALUE_SYM; return yyTok; } - YY_BREAK -case 23: -YY_RULE_SETUP -#line 57 "tokenizer.flex" -{yyTok = IMPORTANT_SYM; return yyTok;} - YY_BREAK -case 24: -YY_RULE_SETUP -#line 59 "tokenizer.flex" -{yyTok = EMS; return yyTok;} - YY_BREAK -case 25: -YY_RULE_SETUP -#line 60 "tokenizer.flex" -{yyTok = QEMS; return yyTok;} /* quirky ems */ - YY_BREAK -case 26: -YY_RULE_SETUP -#line 61 "tokenizer.flex" -{yyTok = EXS; return yyTok;} - YY_BREAK -case 27: -YY_RULE_SETUP -#line 62 "tokenizer.flex" -{yyTok = PXS; return yyTok;} - YY_BREAK -case 28: -YY_RULE_SETUP -#line 63 "tokenizer.flex" -{yyTok = CMS; return yyTok;} - YY_BREAK -case 29: -YY_RULE_SETUP -#line 64 "tokenizer.flex" -{yyTok = MMS; return yyTok;} - YY_BREAK -case 30: -YY_RULE_SETUP -#line 65 "tokenizer.flex" -{yyTok = INS; return yyTok;} - YY_BREAK -case 31: -YY_RULE_SETUP -#line 66 "tokenizer.flex" -{yyTok = PTS; return yyTok;} - YY_BREAK -case 32: -YY_RULE_SETUP -#line 67 "tokenizer.flex" -{yyTok = PCS; return yyTok;} - YY_BREAK -case 33: -YY_RULE_SETUP -#line 68 "tokenizer.flex" -{yyTok = DEGS; return yyTok;} - YY_BREAK -case 34: -YY_RULE_SETUP -#line 69 "tokenizer.flex" -{yyTok = RADS; return yyTok;} - YY_BREAK -case 35: -YY_RULE_SETUP -#line 70 "tokenizer.flex" -{yyTok = GRADS; return yyTok;} - YY_BREAK -case 36: -YY_RULE_SETUP -#line 71 "tokenizer.flex" -{yyTok = MSECS; return yyTok;} - YY_BREAK -case 37: -YY_RULE_SETUP -#line 72 "tokenizer.flex" -{yyTok = SECS; return yyTok;} - YY_BREAK -case 38: -YY_RULE_SETUP -#line 73 "tokenizer.flex" -{yyTok = HERZ; return yyTok;} - YY_BREAK -case 39: -YY_RULE_SETUP -#line 74 "tokenizer.flex" -{yyTok = KHERZ; return yyTok;} - YY_BREAK -case 40: -YY_RULE_SETUP -#line 75 "tokenizer.flex" -{yyTok = DIMEN; return yyTok;} - YY_BREAK -case 41: -YY_RULE_SETUP -#line 76 "tokenizer.flex" -{yyTok = PERCENTAGE; return yyTok;} - YY_BREAK -case 42: -YY_RULE_SETUP -#line 77 "tokenizer.flex" -{yyTok = INTEGER; return yyTok;} - YY_BREAK -case 43: -YY_RULE_SETUP -#line 78 "tokenizer.flex" -{yyTok = FLOAT; return yyTok;} - YY_BREAK -case 44: -YY_RULE_SETUP -#line 81 "tokenizer.flex" -{yyTok = NOTFUNCTION; return yyTok;} - YY_BREAK -case 45: -YY_RULE_SETUP -#line 82 "tokenizer.flex" -{yyTok = URI; return yyTok;} - YY_BREAK -case 46: -YY_RULE_SETUP -#line 83 "tokenizer.flex" -{yyTok = URI; return yyTok;} - YY_BREAK -case 47: -YY_RULE_SETUP -#line 84 "tokenizer.flex" -{yyTok = FUNCTION; return yyTok;} - YY_BREAK -case 48: -YY_RULE_SETUP -#line 86 "tokenizer.flex" -{yyTok = UNICODERANGE; return yyTok;} - YY_BREAK -case 49: -YY_RULE_SETUP -#line 87 "tokenizer.flex" -{yyTok = UNICODERANGE; return yyTok;} - YY_BREAK -case 50: -YY_RULE_SETUP -#line 89 "tokenizer.flex" -{yyTok = *yytext; return yyTok;} - YY_BREAK -case 51: -YY_RULE_SETUP -#line 91 "tokenizer.flex" -ECHO; - YY_BREAK -#line 1347 "tok" -case YY_STATE_EOF(INITIAL): - yyterminate(); - - case YY_END_OF_BUFFER: - yy_c_buf_p = yytext; - yy_act = YY_STATE_EOF(YY_START); - goto do_action; - - default: - YY_FATAL_ERROR( - "fatal flex scanner internal error--no action found" ); - } /* end of action switch */ - } /* end of scanning one token */ -} /* end of yylex */ diff --git a/khtml/css/tokenizer.flex b/khtml/css/tokenizer.flex deleted file mode 100644 index 3c24d8e07..000000000 --- a/khtml/css/tokenizer.flex +++ /dev/null @@ -1,92 +0,0 @@ -%option case-insensitive -%option noyywrap -%option 8bit - -h [0-9a-fA-F] -nonascii [\200-\377] -unicode \\{h}{1,6}[ \t\r\n\f]? -escape {unicode}|\\[ -~\200-\377] -nmstart [_a-zA-Z]|{nonascii}|{escape} -nmchar [_a-zA-Z0-9-]|{nonascii}|{escape} -string1 \"([\t !#$%&(-~]|\\{nl}|\'|{nonascii}|{escape})*\" -string2 \'([\t !#$%&(-~]|\\{nl}|\"|{nonascii}|{escape})*\' - -ident -?{nmstart}{nmchar}* -name {nmchar}+ -num [0-9]+|[0-9]*"."[0-9]+ -intnum [0-9]+ -string {string1}|{string2} -url ([!#$%&*-~]|{nonascii}|{escape})* -w [ \t\r\n\f]* -nl \n|\r\n|\r|\f -range \?{1,6}|{h}(\?{0,5}|{h}(\?{0,4}|{h}(\?{0,3}|{h}(\?{0,2}|{h}(\??|{h}))))) -nth (-?[0-9]*n[\+-][0-9]+)|(-?[0-9]*n) - -%% - -\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */ - -[ \t\r\n\f]+ {yyTok = S; return yyTok;} - -"<!--" {yyTok = SGML_CD; return yyTok;} -"-->" {yyTok = SGML_CD; return yyTok;} -"~=" {yyTok = INCLUDES; return yyTok;} -"|=" {yyTok = DASHMATCH; return yyTok;} -"^=" {yyTok = BEGINSWITH; return yyTok;} -"$=" {yyTok = ENDSWITH; return yyTok;} -"*=" {yyTok = CONTAINS; return yyTok;} - -{string} {yyTok = STRING; return yyTok;} - -{ident} {yyTok = IDENT; return yyTok;} - -{nth} {yyTok = NTH; return yyTok;} - -"#"{name} {yyTok = HASH; return yyTok;} - -"@import" {yyTok = IMPORT_SYM; return yyTok;} -"@page" {yyTok = PAGE_SYM; return yyTok;} -"@media" {yyTok = MEDIA_SYM; return yyTok;} -"@font-face" {yyTok = FONT_FACE_SYM; return yyTok;} -"@charset" {yyTok = CHARSET_SYM; return yyTok;} -"@namespace" {yyTok = NAMESPACE_SYM; return yyTok; } -"@-khtml-rule" {yyTok = KHTML_RULE_SYM; return yyTok; } -"@-khtml-decls" {yyTok = KHTML_DECLS_SYM; return yyTok; } -"@-khtml-value" {yyTok = KHTML_VALUE_SYM; return yyTok; } - -"!"{w}"important" {yyTok = IMPORTANT_SYM; return yyTok;} - -{num}em {yyTok = EMS; return yyTok;} -{num}__qem {yyTok = QEMS; return yyTok;} /* quirky ems */ -{num}ex {yyTok = EXS; return yyTok;} -{num}px {yyTok = PXS; return yyTok;} -{num}cm {yyTok = CMS; return yyTok;} -{num}mm {yyTok = MMS; return yyTok;} -{num}in {yyTok = INS; return yyTok;} -{num}pt {yyTok = PTS; return yyTok;} -{num}pc {yyTok = PCS; return yyTok;} -{num}deg {yyTok = DEGS; return yyTok;} -{num}rad {yyTok = RADS; return yyTok;} -{num}grad {yyTok = GRADS; return yyTok;} -{num}ms {yyTok = MSECS; return yyTok;} -{num}s {yyTok = SECS; return yyTok;} -{num}Hz {yyTok = HERZ; return yyTok;} -{num}kHz {yyTok = KHERZ; return yyTok;} -{num}{ident} {yyTok = DIMEN; return yyTok;} -{num}% {yyTok = PERCENTAGE; return yyTok;} -{intnum} {yyTok = INTEGER; return yyTok;} -{num} {yyTok = FLOAT; return yyTok;} - - -"not(" {yyTok = NOTFUNCTION; return yyTok;} -"url("{w}{string}{w}")" {yyTok = URI; return yyTok;} -"url("{w}{url}{w}")" {yyTok = URI; return yyTok;} -{ident}"(" {yyTok = FUNCTION; return yyTok;} - -U\+{range} {yyTok = UNICODERANGE; return yyTok;} -U\+{h}{1,6}-{h}{1,6} {yyTok = UNICODERANGE; return yyTok;} - -. {yyTok = *yytext; return yyTok;} - -%% - |