diff --git a/src/CLI.cpp b/src/CLI.cpp index 26daeec83..545f6a72e 100644 --- a/src/CLI.cpp +++ b/src/CLI.cpp @@ -129,10 +129,10 @@ void A::attribute (const std::string& name, const double value) //////////////////////////////////////////////////////////////////////////////// // Accessor for attributes. -const std::string A::attribute (const std::string& name) +const std::string A::attribute (const std::string& name) const { // Prevent autovivification. - std::map::iterator i = _attributes.find (name); + std::map::const_iterator i = _attributes.find (name); if (i != _attributes.end ()) return i->second; @@ -289,13 +289,13 @@ const std::string CLI::getFilter () { filter = "("; - std::vector ::const_iterator i; + std::vector ::const_iterator i; for (i = _filter.begin (); i != _filter.end (); ++i) { if (i != _filter.begin ()) filter += ' '; - filter += *i; + filter += i->attribute ("raw"); } filter += ')'; @@ -402,11 +402,15 @@ void CLI::categorize () } else if (foundCommand && ! _readOnly) { - _modifications.push_back (raw); + A a ("argMod", raw); + a.tag ("MODIFICATION"); + _modifications.push_back (a); } else { - _filter.push_back (raw); + A a ("argFilt", raw); + a.tag ("FILTER"); + _filter.push_back (a); } } } @@ -476,12 +480,11 @@ bool CLI::canonicalize ( // -tag --> tags _notag_ tag void CLI::unsweetenTags () { - std::vector reconstructed; - - std::vector ::iterator i; + std::vector reconstructed; + std::vector ::iterator i; for (i = _filter.begin (); i != _filter.end (); ++i) { - Nibbler n (*i); + Nibbler n (i->attribute ("raw")); std::string tag; std::string sign; @@ -490,9 +493,17 @@ void CLI::unsweetenTags () n.getUntilEOS (tag) && tag.find (' ') == std::string::npos) { - reconstructed.push_back ("tags"); - reconstructed.push_back (sign == "+" ? "_hastag_" : "_notag_"); - reconstructed.push_back (tag); + A left ("argTag", "tags"); + left.tag ("ATT"); + reconstructed.push_back (left); + + A op ("argTag", sign == "+" ? "_hastag_" : "_notag_"); + op.tag ("OP"); + reconstructed.push_back (op); + + A right ("argTag", tag); + right.tag ("LITERAL"); + reconstructed.push_back (right); } else reconstructed.push_back (*i); @@ -529,20 +540,21 @@ void CLI::dump (const std::string& label) const for (m = _overrides.begin (); m != _overrides.end (); ++m) std::cout << " _overrides " << m->first << " --> " << m->second << "\n"; - std::cout << " _filter "; - Color colorFilter ("gray20 on gray8"); - for (i = _filter.begin (); i != _filter.end (); ++i) + if (_filter.size ()) { - if (i != _filter.begin ()) - std::cout << ' '; - std::cout << colorFilter.colorize (*i); + std::cout << " _filter\n"; + for (a = _filter.begin (); a != _filter.end (); ++a) + std::cout << " " << a->dump () << "\n"; } - std::cout << "\n"; std::cout << " _command " << _command << " " << (_readOnly ? "(read)" : "(write)") << "\n"; - for (i = _modifications.begin (); i != _modifications.end (); ++i) - std::cout << " _modifications " << *i << "\n"; + if (_modifications.size ()) + { + std::cout << " _modifications\n"; + for (a = _modifications.begin (); a != _modifications.end (); ++a) + std::cout << " " << a->dump () << "\n"; + } } //////////////////////////////////////////////////////////////////////////////// diff --git a/src/CLI.h b/src/CLI.h index b75763f89..3b09b681f 100644 --- a/src/CLI.h +++ b/src/CLI.h @@ -44,7 +44,7 @@ public: void attribute (const std::string&, const std::string&); void attribute (const std::string&, const int); void attribute (const std::string&, const double); - const std::string attribute (const std::string&); + const std::string attribute (const std::string&) const; void removeAttribute (const std::string&); const std::string dump () const; @@ -87,8 +87,8 @@ public: std::map _overrides; std::string _command; bool _readOnly; - std::vector _filter; - std::vector _modifications; + std::vector _filter; + std::vector _modifications; }; #endif