From 997bdbdb908f09b5ddcae9d72952b2c2eea3ad76 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Mon, 21 Apr 2014 16:24:19 -0400 Subject: [PATCH] A3t - Implemented first pass as getFilterExpression. --- src/A3t.cpp | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/A3t.h | 12 ++++----- 2 files changed, 79 insertions(+), 7 deletions(-) diff --git a/src/A3t.cpp b/src/A3t.cpp index eb7255d51..f49dc3cc9 100644 --- a/src/A3t.cpp +++ b/src/A3t.cpp @@ -510,6 +510,80 @@ Tree* A3t::captureFirst (const std::string& arg) return t; } +//////////////////////////////////////////////////////////////////////////////// +const std::string A3t::getFilterExpression () const +{ + // Locate and extract the filter elements. + std::string filter = ""; + std::vector ::iterator i; + for (i = _tree->_branches.begin (); i != _tree->_branches.end (); ++i) + { + // TODO Insert implicit "and", "(" and ")" operators. + + if ((*i)->hasTag ("FILTER")) + { + if ((*i)->hasTag ("ID")) + { + // TODO Construct sequence clause clause. + if (filter != "") + filter += ' '; + + filter += ""; + } + else if ((*i)->hasTag ("UUID")) + { + // TODO Construct sequence clause clause. + if (filter != "") + filter += ' '; + + filter += ""; + } + else if ((*i)->hasTag ("ATTMOD")) + { + // TODO name.mod:value --> name value + if (filter != "") + filter += ' '; + + filter += ""; + } + else if ((*i)->hasTag ("ATTRIBUTE")) + { + // TODO name:value --> name == value + if (filter != "") + filter += ' '; + + filter += ""; + } + else if ((*i)->hasTag ("TAG")) + { + // TODO +tag --> _hastag_ tag + // TODO -tag --> _notag_ tag + if (filter != "") + filter += ' '; + + filter += ""; + } + else if ((*i)->hasTag ("PATTERN")) + { + // TODO /pattern/ --> description ~ pattern + if (filter != "") + filter += ' '; + + filter += ""; + } + else + { + if (filter != "") + filter += ' '; + + filter += (*i)->attribute ("raw"); + } + } + } + + return filter; +} + //////////////////////////////////////////////////////////////////////////////// // /pattern/ void A3t::findPattern () diff --git a/src/A3t.h b/src/A3t.h index 22c05f514..7b6d014c6 100644 --- a/src/A3t.h +++ b/src/A3t.h @@ -56,6 +56,11 @@ public: void injectDefaults (); Tree* captureFirst (const std::string&); + const std::string getFilterExpression () const; + + // TODO Extract words + // TODO Extract modifications + private: void findTerminator (); void findPattern (); @@ -68,13 +73,6 @@ private: void findModifications (); void validate (); - // TODO Extract filter - // TODO Extract words - // TODO Extract modifications - // TODO Prepare infix - // TODO Expand operators - // TODO Expand sequence - private: Tree* _tree; std::multimap _entities;