Bugs
- Added an A3::is_attr type override for 'recur', which needs to be treated as an un-expanded 'string' type, most, but not all of the time. - Documented the above in ColRecur.cpp. - Modified Command.cpp to recognize both type 'duration' and name 'recur'. - Removed Command::next_mod_group argument coalescing for date types, which was not used anyway. - Improved the error message for unrecognized durations, which previously included the word 'date'. - Modified unit tests to accomodate the above error message change. - Added bug.972.t unit tests, which fail, because it isn't fixed yet. - Made A3::dump const so it can be used anywhere.
This commit is contained in:
11
src/A3.cpp
11
src/A3.cpp
@@ -27,7 +27,6 @@
|
||||
|
||||
#define L10N // Localization complete.
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <algorithm>
|
||||
#include <stdlib.h>
|
||||
@@ -1335,7 +1334,13 @@ bool A3::is_attr (Nibbler& n, Arg& arg)
|
||||
// therefore not stored.
|
||||
std::map<std::string, Column*>::iterator i = context.columns.find (canonical);
|
||||
if (i != context.columns.end ())
|
||||
arg._type = Arg::type_id (i->second->type ());
|
||||
{
|
||||
// Special-case: override the type, which is 'string'.
|
||||
if (canonical == "recur")
|
||||
arg._type = Arg::type_duration;
|
||||
else
|
||||
arg._type = Arg::type_id (i->second->type ());
|
||||
}
|
||||
else
|
||||
arg._type = Arg::type_pseudo;
|
||||
|
||||
@@ -2072,7 +2077,7 @@ bool A3::which_operator (
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void A3::dump (const std::string& label)
|
||||
void A3::dump (const std::string& label) const
|
||||
{
|
||||
if (context.config.getBoolean ("debug"))
|
||||
{
|
||||
|
||||
2
src/A3.h
2
src/A3.h
@@ -99,7 +99,7 @@ public:
|
||||
|
||||
static bool which_operator (const std::string&, char&, int&, char&);
|
||||
|
||||
void dump (const std::string&);
|
||||
void dump (const std::string&) const;
|
||||
|
||||
private:
|
||||
bool _read_only_command;
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
#define L10N // Localization complete.
|
||||
|
||||
#include <iostream>
|
||||
//#include <iostream>
|
||||
#include <stdlib.h>
|
||||
#include <Context.h>
|
||||
#include <Date.h>
|
||||
|
||||
@@ -39,7 +39,11 @@ extern Context context;
|
||||
ColumnRecur::ColumnRecur ()
|
||||
{
|
||||
_name = "recur";
|
||||
|
||||
// This is 'string', and not 'duration' to force the value to be stored as a
|
||||
// raw duration, so that it can be reevaluated every time.
|
||||
_type = "string";
|
||||
|
||||
_style = "duration";
|
||||
_label = STRING_COLUMN_LABEL_RECUR;
|
||||
|
||||
|
||||
@@ -559,7 +559,8 @@ void Command::modify_task (
|
||||
}
|
||||
|
||||
// Durations too.
|
||||
else if (column->type () == "duration")
|
||||
else if (name == "recur" ||
|
||||
column->type () == "duration")
|
||||
{
|
||||
// All values must be eval'd first.
|
||||
A3 value_tokens;
|
||||
@@ -737,19 +738,7 @@ bool Command::next_mod_group (const A3& input, Arg& arg, unsigned int& pos)
|
||||
{
|
||||
arg = input[pos++];
|
||||
|
||||
// Date attributes aggregate durations and operators.
|
||||
if (arg._type == Arg::type_date &&
|
||||
arg._category == Arg::cat_attr)
|
||||
{
|
||||
while (pos < input.size () &&
|
||||
(input[pos]._type == Arg::type_duration ||
|
||||
input[pos]._category == Arg::cat_op))
|
||||
{
|
||||
arg._raw += " " + input[pos++]._raw;
|
||||
}
|
||||
}
|
||||
|
||||
else if (arg._raw == "depends")
|
||||
if (arg._raw == "depends")
|
||||
{
|
||||
while (pos < input.size () &&
|
||||
(input[pos]._category == Arg::cat_op ||
|
||||
|
||||
@@ -600,7 +600,7 @@
|
||||
#define STRING_DOM_CANNOT_SET "DOM: Cannot set '{1}'."
|
||||
|
||||
// Duration
|
||||
#define STRING_DURATION_UNRECOGNIZED "The date/duration '{1}' was not recognized."
|
||||
#define STRING_DURATION_UNRECOGNIZED "The duration '{1}' was not recognized as valid, with correct units like '3days'."
|
||||
|
||||
// E9
|
||||
#define STRING_E9_UNSUPPORTED "Unsupported operator '{1}'."
|
||||
|
||||
Reference in New Issue
Block a user