summaryrefslogtreecommitdiff
path: root/src/core/utils/CSSParser.cpp
diff options
context:
space:
mode:
authorBenjamin Paassen <bpaassen@techfak.uni-bielefeld.de>2014-11-20 10:26:02 +0100
committerBenjamin Paassen <bpaassen@techfak.uni-bielefeld.de>2014-11-20 10:26:02 +0100
commitd2f14ec9b2d54c8addc03fef147be15327dd8623 (patch)
tree8ed8c88405d7fd6a132cfc711589fb37528aa333 /src/core/utils/CSSParser.cpp
parent50e7f4544e806a4196cced68365dd005afa1a982 (diff)
continued specifying the CSS language and setting up a CSS Tokenizer. But setting up StyleNodes is still a complicated thing to get my head around. So I'll do a draft in Java first.
Diffstat (limited to 'src/core/utils/CSSParser.cpp')
-rw-r--r--src/core/utils/CSSParser.cpp45
1 files changed, 35 insertions, 10 deletions
diff --git a/src/core/utils/CSSParser.cpp b/src/core/utils/CSSParser.cpp
index e66eb34..1763cc2 100644
--- a/src/core/utils/CSSParser.cpp
+++ b/src/core/utils/CSSParser.cpp
@@ -17,6 +17,7 @@
*/
#include "BufferedCharReader.hpp"
+#include "CodeTokenizer.hpp"
#include "Tokenizer.hpp"
#include "CSSParser.hpp"
@@ -24,6 +25,7 @@
namespace ousia {
namespace utils {
+// CSS code tokens
static const int CURLY_OPEN = 1;
static const int CURLY_CLOSE = 2;
static const int COLON = 3;
@@ -31,8 +33,19 @@ static const int SEMICOLON = 4;
static const int HASH = 5;
static const int BRACKET_OPEN = 6;
static const int BRACKET_CLOSE = 7;
-static const int COMMENT_OPEN = 8;
-static const int COMMENT_CLOSE = 9;
+static const int PAREN_OPEN = 8;
+static const int PAREN_CLOSE = 9;
+// comments
+static const int COMMENT = 100;
+static const int COMMENT_OPEN = 101;
+static const int COMMENT_CLOSE = 102;
+// strings
+static const int STRING = 200;
+static const int SINGLE_QUOTE = 201;
+static const int DOUBLE_QUOTE = 202;
+static const int ESCAPE = 203;
+// general syntax
+static const int LINEBREAK = 300;
static const TokenTreeNode CSS_ROOT{{{"{", CURLY_OPEN},
{"}", CURLY_CLOSE},
@@ -41,16 +54,28 @@ static const TokenTreeNode CSS_ROOT{{{"{", CURLY_OPEN},
{"#", HASH},
{"[", BRACKET_OPEN},
{"]", BRACKET_CLOSE},
+ {"(", PAREN_OPEN},
+ {")", PAREN_CLOSE},
{"/*", COMMENT_OPEN},
- {"*/", COMMENT_CLOSE}}};
-
-StyleNode CSSParser::parse(BufferedCharReader &input) {
- Tokenizer tokenizer {input, CSS_ROOT};
- //TODO: implement
-
-}
-
+ {"*/", COMMENT_CLOSE},
+ {"\\", ESCAPE},
+ {"\''", SINGLE_QUOTE},
+ {"\"", DOUBLE_QUOTE},
+ {"\n", LINEBREAK}}};
+static const std::map<int, CodeTokenDescriptor> CSS_DESCRIPTORS = {
+ {COMMENT_OPEN, {CodeTokenMode::BLOCK_COMMENT_START, COMMENT}},
+ {COMMENT_CLOSE, {CodeTokenMode::BLOCK_COMMENT_END, COMMENT}},
+ {SINGLE_QUOTE, {CodeTokenMode::STRING_START_END, STRING}},
+ {DOUBLE_QUOTE, {CodeTokenMode::STRING_START_END, STRING}},
+ {ESCAPE, {CodeTokenMode::ESCAPE, ESCAPE}},
+ {LINEBREAK, {CodeTokenMode::LINEBREAK, LINEBREAK}}};
+StyleNode CSSParser::parse(BufferedCharReader &input)
+{
+ CodeTokenizer tokenizer{input, CSS_ROOT, CSS_DESCRIPTORS};
+ tokenizer.ignoreComments = true;
+ // TODO: implement
+}
}
}