From e61e08c2cae6f7135abb71c0b7a7452912c87950 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 31 Jul 2011 12:11:36 -0400 Subject: [PATCH] Annotation Bug - Fixed DOM lookup of special-case attributes: id and urgency are not stored in the usual manner, and must be handled differently. - Removed the responsibility of DOM to evaluate literals, because they are handled more effectively in A3::tokenize. - Fixed old code that assumed ".id" instead of "id". - Removed unnecessary diag call from annotate.t. --- src/DOM.cpp | 77 +++++++------------------------------------------ src/DOM.h | 3 -- test/annotate.t | 1 - 3 files changed, 11 insertions(+), 70 deletions(-) diff --git a/src/DOM.cpp b/src/DOM.cpp index a8877ca5b..d6c3d4260 100644 --- a/src/DOM.cpp +++ b/src/DOM.cpp @@ -97,14 +97,9 @@ const std::string DOM::get (const std::string& name) int len = name.length (); Nibbler n (name); - std::string copy_name (name); - - // Primitives - if (is_literal (copy_name)) - return /*_cache[name] =*/ copy_name; // rc. --> context.config - else if (len > 3 && + if (len > 3 && name.substr (0, 3) == "rc.") { return /*_cache[name] =*/ context.config.get (name.substr (3)); @@ -232,14 +227,10 @@ const std::string DOM::get (const std::string& name, const Task& task) std::string uuid; std::string canonical; - // Primitives - std::string copy_name (name); - if (is_literal (copy_name)) - return /*_cache[name] =*/ copy_name; - // - else if (A3::is_attribute (name, canonical)) - return task.get (canonical); + if (name == "id") return format (task.id); + else if (name == "urgency") return format (task.urgency_c (), 4, 3); + else if (A3::is_attribute (name, canonical)) return task.get (canonical); // . else if (n.getInt (id)) @@ -250,9 +241,9 @@ const std::string DOM::get (const std::string& name, const Task& task) std::string attr; n.getUntilEOS (attr); - if (attr == "id") return format (task.id); - else if (attr == "urgency") return format (task.urgency_c (), 4, 3); - else return task.get (attr); + if (attr == "id") return format (task.id); + else if (attr == "urgency") return format (task.urgency_c (), 4, 3); + else if (A3::is_attribute (name, canonical)) return task.get (canonical); } } @@ -265,22 +256,17 @@ const std::string DOM::get (const std::string& name, const Task& task) std::string attr; n.getUntilEOS (attr); - if (attr == "id") return format (task.id); - else if (attr == "urgency") return format (task.urgency_c (), 4, 3); - else return task.get (attr); + if (name == "id") return format (task.id); + else if (name == "urgency") return format (task.urgency_c (), 4, 3); + else if (A3::is_attribute (name, canonical)) return task.get (canonical); } } - // [.] - if (name == "id") return format (task.id); - else if (name == "urgency") return format (task.urgency_c (), 4, 3); - else if (task.has (name.substr (1))) return task.get (name.substr (1)); - // Delegate to the context-free version of DOM::get. return this->get (name); } -// TODO Need a context-specific DOM::set. +// TODO Need a context-specific DOM::set. For Lua. //////////////////////////////////////////////////////////////////////////////// void DOM::set (const std::string& name, const std::string& value) @@ -300,44 +286,3 @@ void DOM::set (const std::string& name, const std::string& value) } //////////////////////////////////////////////////////////////////////////////// -bool DOM::is_literal (std::string& input) -{ - std::string s; - double d; - int i; - - // Date? - if (Date::valid (input, context.config.get ("dateformat"))) - { - input = Date (input).toEpochString (); - return true; - } - - // Duration? - if (Duration::valid (input)) - return true; - - // TODO Quoted Date? - // TODO Quoted Duration? - - // String? - Nibbler n (input); - if ((n.getQuoted ('"', s) || - n.getQuoted ('\'', s)) && - n.depleted ()) - return true; - - // Number? - n = Nibbler (input); - if (n.getNumber (d) && n.depleted ()) - return true; - - // Integer? - n = Nibbler (input); - if (n.getInt (i) && n.depleted ()) - return true; - - return false; -} - -//////////////////////////////////////////////////////////////////////////////// diff --git a/src/DOM.h b/src/DOM.h index 1d9a760c5..6eb5ccb9c 100644 --- a/src/DOM.h +++ b/src/DOM.h @@ -43,9 +43,6 @@ public: const std::string get (const std::string&, const Task&); void set (const std::string&, const std::string&); -private: - bool is_literal (std::string&); - private: std::map _cache; }; diff --git a/test/annotate.t b/test/annotate.t index 1f228c255..982f85014 100755 --- a/test/annotate.t +++ b/test/annotate.t @@ -64,7 +64,6 @@ sleep 1; qx{../src/task rc:annotate.rc 3 annotate baz1}; my $output = qx{../src/task rc:annotate.rc rrr}; -diag ($output); # ID Description # -- -------------------------------