From 1cb4d19c3c874b52e923b7869d717b0adf67e53c Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sat, 9 Jul 2011 09:51:19 -0400 Subject: [PATCH] Argument Parsing - On task modification, all attributes are canonicalized. --- src/commands/Command.cpp | 44 ++++++++++++++++++++++------------------ src/en-US.h | 1 + 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/commands/Command.cpp b/src/commands/Command.cpp index 6d4bc3174..a534b84b2 100644 --- a/src/commands/Command.cpp +++ b/src/commands/Command.cpp @@ -299,31 +299,35 @@ void Command::modify_task (Task& task, Arguments& arguments) std::string name; std::string value; Arguments::extract_attr (arg->_first, name, value); - - // TODO All 'value's must be eval'd first. - - // Dependencies must be resolved to UUIDs. - if (name == "depends") + if (Arguments::is_attribute (name, name)) { - // Convert ID to UUID. - std::vector deps; - split (deps, value, ','); + // TODO All 'value's must be eval'd first. - // Apply or remove dendencies in turn. - std::vector ::iterator i; - for (i = deps.begin (); i != deps.end (); i++) + // Dependencies must be resolved to UUIDs. + if (name == "depends") { - int id = strtol (i->c_str (), NULL, 10); - if (id < 0) - task.removeDependency (-id); - else - task.addDependency (id); - } - } + // Convert ID to UUID. + std::vector deps; + split (deps, value, ','); - // By default, just add it. + // Apply or remove dendencies in turn. + std::vector ::iterator i; + for (i = deps.begin (); i != deps.end (); i++) + { + int id = strtol (i->c_str (), NULL, 10); + if (id < 0) + task.removeDependency (-id); + else + task.addDependency (id); + } + } + + // By default, just add it. + else + task.set (name, value); + } else - task.set (name, value); + throw format (STRING_CMD_ADD_BAD_ATTRIBUTE, name); } // Tags need special handling because they are essentially a vector stored diff --git a/src/en-US.h b/src/en-US.h index 20caa9c9d..e30ba629e 100644 --- a/src/en-US.h +++ b/src/en-US.h @@ -173,6 +173,7 @@ #define STRING_CMD_URGENCY_RESULT "task {1} urgency {2}" #define STRING_CMD_ADD_USAGE "Adds a new task." #define STRING_CMD_ADD_FEEDBACK "Created task {1}." +#define STRING_CMD_ADD_BAD_ATTRIBUTE "Unrecognized attribute '{1}'." #define STRING_CMD_MOD_UNEXPECTED "Unexpected argument '{1}' found while modifying a task." #define STRING_CMD_LOG_USAGE "Adds a new task that is already completed." #define STRING_CMD_IDS_USAGE_RANGE "Shows only the IDs of matching tasks, in the form of a range."