From de9dbbbb3d8d8f995d6538636ae3acad9228015f Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 21 Aug 2011 14:24:26 -0400 Subject: [PATCH] A3, Arg - Some attribute values (ie wait:tomorrow) when parsed, need to take the data type of the attribute (date) and use that as an implied type of the value (date literal). - Arg renders type-less and category-less values as "", instead of "none". Cleaner output. --- src/A3.cpp | 17 ++++++++++------- src/Arg.cpp | 8 ++++---- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/A3.cpp b/src/A3.cpp index cb6dd0db1..e63268839 100644 --- a/src/A3.cpp +++ b/src/A3.cpp @@ -901,6 +901,9 @@ const A3 A3::expand (const A3& input) const std::vector ::const_iterator previous = input.begin (); for (arg = input.begin (); arg != input.end (); ++arg) { + // When expanded, the value retains the original type. + Arg::type implied = arg->_type; + // name:value --> name = value if (arg->_category == Arg::cat_attr) { @@ -910,7 +913,7 @@ const A3 A3::expand (const A3& input) const expanded.push_back (Arg (name, Arg::type_string, Arg::cat_dom)); expanded.push_back (Arg ("=", Arg::cat_op)); - expanded.push_back (Arg (value, Arg::type_string, Arg::cat_literal)); + expanded.push_back (Arg (value, implied, Arg::cat_literal)); } // name.mod:value --> name value @@ -927,7 +930,7 @@ const A3 A3::expand (const A3& input) const { expanded.push_back (Arg (name, Arg::type_string, Arg::cat_dom)); expanded.push_back (Arg ("<", Arg::cat_op)); - expanded.push_back (Arg (value, Arg::type_string, Arg::cat_literal)); + expanded.push_back (Arg (value, implied, Arg::cat_literal)); } // name.after:value --> name > value @@ -935,7 +938,7 @@ const A3 A3::expand (const A3& input) const { expanded.push_back (Arg (name, Arg::type_string, Arg::cat_dom)); expanded.push_back (Arg (">", Arg::cat_op)); - expanded.push_back (Arg (value, Arg::type_string, Arg::cat_literal)); + expanded.push_back (Arg (value, implied, Arg::cat_literal)); } // name.none: --> name == "" @@ -943,7 +946,7 @@ const A3 A3::expand (const A3& input) const { expanded.push_back (Arg (name, Arg::type_string, Arg::cat_dom)); expanded.push_back (Arg ("=", Arg::cat_op)); - expanded.push_back (Arg ("", Arg::type_string, Arg::cat_none)); + expanded.push_back (Arg ("", implied, Arg::cat_none)); } // name.any: --> name != "" @@ -951,7 +954,7 @@ const A3 A3::expand (const A3& input) const { expanded.push_back (Arg (name, Arg::type_string, Arg::cat_dom)); expanded.push_back (Arg ("!=", Arg::cat_op)); - expanded.push_back (Arg ("", Arg::type_string, Arg::cat_none)); + expanded.push_back (Arg ("", implied, Arg::cat_none)); } // name.is:value --> name = value @@ -959,7 +962,7 @@ const A3 A3::expand (const A3& input) const { expanded.push_back (Arg (name, Arg::type_string, Arg::cat_dom)); expanded.push_back (Arg ("=", Arg::cat_op)); - expanded.push_back (Arg (value, Arg::type_string, Arg::cat_none)); + expanded.push_back (Arg (value, implied, Arg::cat_none)); } // name.isnt:value --> name != value @@ -967,7 +970,7 @@ const A3 A3::expand (const A3& input) const { expanded.push_back (Arg (name, Arg::type_string, Arg::cat_dom)); expanded.push_back (Arg ("!=", Arg::cat_op)); - expanded.push_back (Arg (value, Arg::type_string, Arg::cat_none)); + expanded.push_back (Arg (value, implied, Arg::cat_none)); } // name.has:value --> name ~ value diff --git a/src/Arg.cpp b/src/Arg.cpp index 5356c1333..dd30ffe6b 100644 --- a/src/Arg.cpp +++ b/src/Arg.cpp @@ -121,7 +121,7 @@ const std::string Arg::type_name (Arg::type t) { switch (t) { - case Arg::type_none: return "none"; + case Arg::type_none: return ""; case Arg::type_pseudo: return "pseudo"; case Arg::type_bool: return "bool"; case Arg::type_string: return "string"; @@ -130,7 +130,7 @@ const std::string Arg::type_name (Arg::type t) case Arg::type_number: return "number"; } - return "none"; + return ""; } //////////////////////////////////////////////////////////////////////////////// @@ -161,7 +161,7 @@ const std::string Arg::category_name (Arg::category c) { switch (c) { - case Arg::cat_none: return "none"; + case Arg::cat_none: return ""; case Arg::cat_terminator: return "terminator"; case Arg::cat_program: return "program"; case Arg::cat_command: return "command"; @@ -180,7 +180,7 @@ const std::string Arg::category_name (Arg::category c) case Arg::cat_literal: return "literal"; } - return "none"; + return ""; } ///////////////////////////////////////////////////////////////////////////////