summaryrefslogtreecommitdiffstats
path: root/src/dom/cssparser.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/dom/cssparser.h')
-rwxr-xr-xsrc/dom/cssparser.h286
1 files changed, 286 insertions, 0 deletions
diff --git a/src/dom/cssparser.h b/src/dom/cssparser.h
new file mode 100755
index 000000000..0b399f7d5
--- /dev/null
+++ b/src/dom/cssparser.h
@@ -0,0 +1,286 @@
+#ifndef __CSSPARSER_H__
+#define __CSSPARSER_H__
+/**
+ * Phoebe DOM Implementation.
+ *
+ * This is a C++ approximation of the W3C DOM model, which follows
+ * fairly closely the specifications in the various .idl files, copies of
+ * which are provided for reference. Most important is this one:
+ *
+ * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html
+ *
+ * Authors:
+ * Bob Jamison
+ *
+ * Copyright (C) 2005 Bob Jamison
+ *
+ * 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.1 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 St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+
+#include "dom.h"
+
+#include "css.h"
+
+namespace org
+{
+namespace w3c
+{
+namespace dom
+{
+namespace css
+{
+
+class CssParser
+{
+
+public:
+
+ /**
+ *
+ */
+ CssParser()
+ {}
+
+ /**
+ *
+ */
+ virtual ~CssParser()
+ {}
+
+ /**
+ *
+ */
+ virtual bool parse(const DOMString &str);
+
+ /**
+ *
+ */
+ virtual bool parseFile(const DOMString &str);
+
+
+protected:
+
+ DOMString parsebuf;
+ long parselen;
+ CSSStyleSheet stylesheet;
+
+
+ /**
+ *
+ */
+ void error(char *fmt, ...);
+
+ /**
+ * Get the character at the given location in the buffer.
+ * Return 0 if out-of-bounds
+ */
+ XMLCh get(int index);
+
+
+ /**
+ * Test if the given substring exists at the given position
+ * in parsebuf. Use get() in case of out-of-bounds
+ */
+ bool match(int pos, char *str);
+
+ /**
+ * Skip over whitespace
+ * Return new position
+ */
+ int skipwhite(int index);
+
+ /**
+ * Get the word at the current position. Return the new
+ * position if successful, the current position if no word,
+ * -1 if error.
+ */
+ int getWord(int index, DOMString &str);
+
+
+ /**
+ * Get a number at the current position
+ * Return the new position if a proper number, else the original pos
+ */
+ int getNumber(int index, double &result);
+
+ /**
+ * Assume that we are starting on a quote. Ends on the char
+ * after the final '"'
+ */
+ int getQuoted(int p0, DOMString &result);
+
+/**
+ * Not in api. replaces URI return by lexer
+ */
+int getUri(int p0, DOMString &str);
+
+
+/**
+ * Skip to the next rule
+ */
+int skipBlock(int p0);
+
+//#########################################################################
+//# P R O D U C T I O N S
+//#########################################################################
+
+/**
+ * stylesheet
+ * : [ CHARSET_SYM S* STRING S* ';' ]?
+ * [S|CDO|CDC]* [ import [S|CDO|CDC]* ]*
+ * [ [ ruleset | media | page ] [S|CDO|CDC]* ]*
+ * ;
+ */
+int getStyleSheet(int p0);
+
+/**
+ * import
+ * : IMPORT_SYM S*
+ * [STRING|URI] S* [ medium [ COMMA S* medium]* ]? ';' S*
+ * ;
+ */
+int getImport(int p0);
+
+/**
+ * media
+ * : MEDIA_SYM S* medium [ COMMA S* medium ]* LBRACE S* ruleset* '}' S*
+ * ;
+ */
+int getMedia(int p0);
+
+/**
+ * medium
+ * : IDENT S*
+ * ;
+ */
+int getMedium(int p0);
+
+/**
+ * page
+ * : PAGE_SYM S* pseudo_page? S*
+ * LBRACE S* declaration [ ';' S* declaration ]* '}' S*
+ * ;
+ */
+int getPage(int p0);
+
+/**
+ * pseudo_page
+ * : ':' IDENT
+ * ;
+ */
+int getPseudoPage(int p0);
+
+/**
+ * ruleset
+ * : selector [ COMMA S* selector ]*
+ * LBRACE S* declaration [ ';' S* declaration ]* '}' S*
+ * ;
+ */
+int getRuleSet(int p0);
+
+/**
+ * selector
+ * : simple_selector [ combinator simple_selector ]*
+ * ;
+ */
+int getSelector(int p0);
+
+/**
+ * simple_selector
+ * : element_name [ HASH | class | attrib | pseudo ]*
+ * | [ HASH | class | attrib | pseudo ]+
+ * ;
+ */
+int getSimpleSelector(int p0);
+
+/**
+ * declaration
+ * : property ':' S* expr prio?
+ * | {empty}
+ * ;
+ */
+int getDeclaration(int p0, CSSStyleDeclaration &declarationList);
+
+/**
+ * prio
+ * : IMPORTANT_SYM S*
+ * ;
+ */
+int getPrio(int p0, DOMString &val);
+
+/**
+ * expr
+ * : term [ operator term ]*
+ * ;
+ */
+int getExpr(int p0);
+
+/**
+ * term
+ * : unary_operator?
+ * [ NUMBER S* | PERCENTAGE S* | LENGTH S* | EMS S* | EXS S* | ANGLE S* |
+ * TIME S* | FREQ S* | function ]
+ * | STRING S* | IDENT S* | URI S* | hexcolor
+ * ;
+ */
+int getTerm(int p0);
+
+/**
+ * function
+ * : FUNCTION S* expr ')' S*
+ * ;
+ */
+int getFunction(int p0);
+
+/**
+ * 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 S*
+ * ;
+ */
+int getHexColor(int p0);
+
+
+int lastPosition;
+
+/**
+ * Get the column and row number of the given character position.
+ * Also gets the last-occuring newline before the position
+ */
+void getColumnAndRow(int p, int &col, int &row, int &lastNL);
+
+};
+
+
+} // namespace css
+} // namespace dom
+} // namespace w3c
+} // namespace org
+
+
+
+
+
+
+
+#endif /* __CSSPARSER_H__ */
+//#########################################################################
+//# E N D O F F I L E
+//#########################################################################
+