summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/utils/CSSParser.cpp45
-rw-r--r--src/core/utils/CSSParser.hpp3
2 files changed, 38 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
+}
}
}
diff --git a/src/core/utils/CSSParser.hpp b/src/core/utils/CSSParser.hpp
index 0f9cd8f..c8b772d 100644
--- a/src/core/utils/CSSParser.hpp
+++ b/src/core/utils/CSSParser.hpp
@@ -156,6 +156,9 @@ public:
};
class CSSParser {
+
+private:
+
public:
StyleNode parse(BufferedCharReader &input);
};