From dcb13bd2b433914a22955ebab9b1fdf506fa762b Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Mon, 6 Jul 2015 12:13:46 -0400 Subject: [PATCH] CLI2: Integrated Lexer::decomposePair into A2::decompose --- src/CLI2.cpp | 46 ++++++++++++++++++---------------------------- 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/src/CLI2.cpp b/src/CLI2.cpp index cedadac69..8113d0fbd 100644 --- a/src/CLI2.cpp +++ b/src/CLI2.cpp @@ -173,35 +173,25 @@ void A2::decompose () else if (_lextype == Lexer::Type::pair) { std::string raw = _attributes["raw"]; + std::string name; + std::string mod; + std::string sep; + std::string value; + if (Lexer::decomposePair (_attributes["raw"], name, mod, sep, value)) + { + attribute ("name", name); + attribute ("modifier", mod); + attribute ("separator", sep); + attribute ("value", value); - // TODO name:value --> canonical="name" value="value" - // TODO name=value --> canonical="name" value="value" - // TODO name:=value --> canonical="name" value="value" - // TODO name::value --> canonical="name" value="value" - // TODO name.mod:value --> - // TODO name.mod=value --> - // TODO name.mod:=value --> - // TODO name.mod::value --> - auto colon = raw.find (':'); - auto equal = raw.find ('='); - - // Q: Which of ':', '=' is the separator? - // A: Whichever comes first. For example: - // name:a=b - // name=a:b - // Both are valid, and 'name' is the attribute name in each case. - std::string::size_type separator = std::min (colon, equal); - std::string name = raw.substr (0, separator); - std::string value = raw.substr (separator + 1); - - attribute ("name", name); - attribute ("value", value); - - if (raw.substr (0, 3) == "rc:") - tag ("RC"); - - if (raw.substr (0, 3) == "rc.") - tag ("CONFIG"); + if (name == "rc") + { + if (mod != "") + tag ("CONFIG"); + else + tag ("RC"); + } + } } }