From 5a29042d3b389a6368aabf9b77d017c4c3f84b1b Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sat, 31 Aug 2013 16:23:57 -0400 Subject: [PATCH] A3t::findTag - Supports single-word tag add/remove, presence/absence, allowing any non-space character in the tag, which is an improvement. --- src/parser/A3t.cpp | 30 ++++++++++++++++++++++++++++++ src/parser/A3t.h | 1 + 2 files changed, 31 insertions(+) diff --git a/src/parser/A3t.cpp b/src/parser/A3t.cpp index c0065a9ae..db3604dcb 100644 --- a/src/parser/A3t.cpp +++ b/src/parser/A3t.cpp @@ -64,6 +64,7 @@ Tree* A3t::parse () findConfigOverride (); findSubstitution (); findPattern (); + findTag (); validate (); @@ -298,6 +299,35 @@ void A3t::findSubstitution () } } +//////////////////////////////////////////////////////////////////////////////// +// +tag +void A3t::findTag () +{ + std::vector ::iterator i; + for (i = _tree->_branches.begin (); i != _tree->_branches.end (); ++i) + { + // Parser override operator. + if ((*i)->attribute ("raw") == "--") + break; + + std::string raw = (*i)->attribute ("raw"); + Nibbler n (raw); + + std::string tag; + std::string sign; + if (n.getN (1, sign) && + (sign == "+" || sign == "-") && + n.getUntilEOS (tag) && + tag.find (' ') == std::string::npos) + { + (*i)->tag ("TAG"); + Tree* b = (*i)->addBranch (new Tree ("metadata")); + b->attribute ("sign", sign); + b->attribute ("tag", tag); + } + } +} + //////////////////////////////////////////////////////////////////////////////// // Validate the parse tree. void A3t::validate () diff --git a/src/parser/A3t.h b/src/parser/A3t.h index 254017476..4208dc9e9 100644 --- a/src/parser/A3t.h +++ b/src/parser/A3t.h @@ -48,6 +48,7 @@ private: void findConfigOverride (); void findPattern (); void findSubstitution (); + void findTag (); void validate (); private: