From 23908388949859b11b8c8bcea581ffddea00d659 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 20 Apr 2014 10:09:30 -0400 Subject: [PATCH] A3t - Implemented ::findFilter to identify nodes that comprise a filter. --- src/A3t.cpp | 37 +++++++++++++++++++++++++++++++++++++ src/A3t.h | 1 + 2 files changed, 38 insertions(+) diff --git a/src/A3t.cpp b/src/A3t.cpp index 7331a3825..646ee0ed3 100644 --- a/src/A3t.cpp +++ b/src/A3t.cpp @@ -134,6 +134,7 @@ Tree* A3t::parse () findAttribute (); findAttributeModifier (); findOperator (); + findFilter (); validate (); @@ -912,6 +913,42 @@ void A3t::findOperator () } } +//////////////////////////////////////////////////////////////////////////////// +// Anything before CMD, but not BINARY, RC or CONFIG --> FILTER +// Anything after READCMD, but not BINARY, RC or CONFIG --> FILTER +void A3t::findFilter () +{ + bool before_cmd = true; + bool after_readcmd = false; + std::vector ::iterator i; + for (i = _tree->_branches.begin (); i != _tree->_branches.end (); ++i) + { + // Parser override operator. + if ((*i)->attribute ("raw") == "--") + break; + + if ((*i)->hasTag ("CMD")) + before_cmd = false; + + if ((*i)->hasTag ("READCMD")) + after_readcmd = true; + + if (before_cmd && + ! (*i)->hasTag ("CMD") && + ! (*i)->hasTag ("BINARY") && + ! (*i)->hasTag ("RC") && + ! (*i)->hasTag ("CONFIG")) + (*i)->tag ("FILTER"); + + if (after_readcmd && + ! (*i)->hasTag ("CMD") && + ! (*i)->hasTag ("BINARY") && + ! (*i)->hasTag ("RC") && + ! (*i)->hasTag ("CONFIG")) + (*i)->tag ("FILTER"); + } +} + //////////////////////////////////////////////////////////////////////////////// // Validate the parse tree. void A3t::validate () diff --git a/src/A3t.h b/src/A3t.h index d542e4441..d9266c57f 100644 --- a/src/A3t.h +++ b/src/A3t.h @@ -64,6 +64,7 @@ private: void findAttribute (); void findAttributeModifier (); void findOperator (); + void findFilter (); void validate (); // TODO Resolve aliases