diff --git a/src/CLI.cpp b/src/CLI.cpp
index 87fe60ad3..c02999320 100644
--- a/src/CLI.cpp
+++ b/src/CLI.cpp
@@ -265,7 +265,6 @@ void CLI::initialize (int argc, const char** argv)
// Capture a single argument, and recalc everything.
void CLI::add (const std::string& arg)
{
- // Clean what needs to be cleaned. Most in this case.
_original_args.push_back (arg);
analyze ();
@@ -1290,12 +1289,16 @@ void CLI::desugarPlainArgs ()
{
std::vector reconstructed;
std::vector ::iterator a;
+ std::vector ::iterator prev = _args.begin ();
for (a = _args.begin (); a != _args.end (); ++a)
{
- if (a->hasTag ("FILTER") &&
+ if (a != prev && // Not the first arg.
+ ! prev->hasTag ("OP") && // An OP before protects the arg.
+ a->hasTag ("FILTER") &&
! a->hasTag ("ATTRIBUTE") &&
! a->hasTag ("ATTMOD") &&
! a->hasTag ("OP") &&
+ ! a->hasTag ("REGEX") &&
! a->hasTag ("LITERAL"))
{
A lhs ("argPattern", "description");
@@ -1315,6 +1318,8 @@ void CLI::desugarPlainArgs ()
}
else
reconstructed.push_back (*a);
+
+ prev = a;
}
_args = reconstructed;