From 8c6e5277ecec28010921094d2ad5823d917f520f Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Mon, 27 Jun 2011 00:40:56 -0400 Subject: [PATCH] Expressions - Project and Recur attributes now match leftmost by default. --- src/Expression.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Expression.cpp b/src/Expression.cpp index f381cc392..527736fcc 100644 --- a/src/Expression.cpp +++ b/src/Expression.cpp @@ -77,6 +77,9 @@ bool Expression::eval (Task& task) // against each task. std::vector value_stack; + // Case sensitivity is configurable. + bool case_sensitive = context.config.getBoolean ("search.case.sensitive"); + // TODO Build an on-demand regex cache. std::vector >::const_iterator arg; @@ -234,7 +237,19 @@ bool Expression::eval (Task& task) else if (arg->first == "=") { // std::cout << "# " << left.dump () << " = " << right.dump () << "\n"; - bool result = (left == right); + bool result = false; + if (left._raw == "project" || left._raw == "recur") + { + left.cast (Variant::v_string); + right.cast (Variant::v_string); + if (right._string.length () <= left._string.length ()) + result = compare (right._string, + left._string.substr (0, right._string.length ()), + (bool) case_sensitive); + } + else + result = (left == right); + left = Variant (result); left._raw_type = "bool";