From be88c0452de94c7d3513fa35f0994235ad92a60a Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Tue, 22 Mar 2016 23:55:01 -0400 Subject: [PATCH] Rules: Implemented ::parseRule --- src/Rules.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/Rules.cpp b/src/Rules.cpp index c32bcef9..282bb9ef 100644 --- a/src/Rules.cpp +++ b/src/Rules.cpp @@ -274,6 +274,37 @@ void Rules::parse (const std::string& input, int nest /* = 1 */) //////////////////////////////////////////////////////////////////////////////// void Rules::parseRule (const std::string& input) { + // Break the rule def into lines. + auto lines = split (input, '\n'); + + // Tokenize the first line. + std::vector tokens; + std::string token; + Lexer::Type type; + Lexer lexer (lines[0]); + while (lexer.token (token, type)) + tokens.push_back (token); + + // Based on the tokens of the first line, determine which rule stype needs to + // be parsed. + if (tokens.size () >= 2 && + tokens[0] == "define") + { + // define rule xxx: + if (tokens.size () == 3 && + tokens[1] == "rule" && + tokens[2][tokens[2].length() - 1] == ':') + parseRuleGeneral (lines); + + // define theme: + else if (tokens.size () == 2 && + tokens[1] == "theme:") + parseRuleTheme (lines); + + // Error. + else + throw format ("Unrecognized rule type '{1}'", join (" ", tokens)); + } } ////////////////////////////////////////////////////////////////////////////////