summaryrefslogtreecommitdiffstats
path: root/khtml/css/cssparser.h
diff options
context:
space:
mode:
Diffstat (limited to 'khtml/css/cssparser.h')
-rw-r--r--khtml/css/cssparser.h201
1 files changed, 201 insertions, 0 deletions
diff --git a/khtml/css/cssparser.h b/khtml/css/cssparser.h
new file mode 100644
index 000000000..1c055acd0
--- /dev/null
+++ b/khtml/css/cssparser.h
@@ -0,0 +1,201 @@
+/*
+ * 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 <qstring.h>
+#include <qcolor.h>
+#include <qvaluevector.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 QString qString( const ParseString &ps ) {
+ return QString( (QChar *)ps.string, ps.length );
+ }
+ static inline DOMString domString( const ParseString &ps ) {
+ return DOMString( (QChar *)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:
+ QValueVector<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 QString &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