diff --git a/src/A3.cpp b/src/A3.cpp index 35cee4f6f..97aca0a57 100644 --- a/src/A3.cpp +++ b/src/A3.cpp @@ -759,198 +759,6 @@ const A3 A3::tokenize (const A3& input) const return output; } -//////////////////////////////////////////////////////////////////////////////// -const A3 A3::expand (const A3& input) const -{ - A3 expanded; - - std::vector ::const_iterator arg; - 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) - { - std::string name; - std::string value; - A3::extract_attr (arg->_raw, name, value); - - expanded.push_back (Arg (name, Arg::type_string, Arg::cat_dom)); - expanded.push_back (Arg ("=", Arg::cat_op)); - expanded.push_back (Arg (value, implied, Arg::cat_literal)); - } - - // name.mod:value --> name value - else if (arg->_category == Arg::cat_attmod) - { - std::string name; - std::string mod; - std::string value; - std::string sense; - extract_attmod (arg->_raw, name, mod, value, sense); - - // name.before:value --> name < value - if (mod == "before" || mod == "under" || mod == "below") - { - expanded.push_back (Arg (name, Arg::type_string, Arg::cat_dom)); - expanded.push_back (Arg ("<", Arg::cat_op)); - expanded.push_back (Arg (value, implied, Arg::cat_literal)); - } - - // name.after:value --> name > value - else if (mod == "after" || mod == "over" || mod == "above") - { - expanded.push_back (Arg (name, Arg::type_string, Arg::cat_dom)); - expanded.push_back (Arg (">", Arg::cat_op)); - expanded.push_back (Arg (value, implied, Arg::cat_literal)); - } - - // name.none: --> name == "" - else if (mod == "none") - { - expanded.push_back (Arg (name, Arg::type_string, Arg::cat_dom)); - expanded.push_back (Arg ("=", Arg::cat_op)); - expanded.push_back (Arg ("", implied, Arg::cat_none)); - } - - // name.any: --> name != "" - else if (mod == "any") - { - expanded.push_back (Arg (name, Arg::type_string, Arg::cat_dom)); - expanded.push_back (Arg ("!=", Arg::cat_op)); - expanded.push_back (Arg ("", implied, Arg::cat_none)); - } - - // name.is:value --> name = value - else if (mod == "is" || mod == "equals") - { - expanded.push_back (Arg (name, Arg::type_string, Arg::cat_dom)); - expanded.push_back (Arg ("=", Arg::cat_op)); - expanded.push_back (Arg (value, implied, Arg::cat_none)); - } - - // name.isnt:value --> name != value - else if (mod == "isnt" || mod == "not") - { - expanded.push_back (Arg (name, Arg::type_string, Arg::cat_dom)); - expanded.push_back (Arg ("!=", Arg::cat_op)); - expanded.push_back (Arg (value, implied, Arg::cat_none)); - } - - // name.has:value --> name ~ value - else if (mod == "has" || mod == "contains") - { - 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_rx)); - } - - // name.hasnt:value --> name !~ value - else if (mod == "hasnt") - { - 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_rx)); - } - - // name.startswith:value --> name ~ ^value - else if (mod == "startswith" || mod == "left") - { - 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_rx)); - } - - // name.endswith:value --> name ~ value$ - else if (mod == "endswith" || mod == "right") - { - 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_rx)); - } - - // name.word:value --> name ~ \bvalue\b - else if (mod == "word") - { - expanded.push_back (Arg (name, Arg::type_string, Arg::cat_dom)); - expanded.push_back (Arg ("~", Arg::cat_op)); -#ifdef DARWIN - expanded.push_back (Arg (value, Arg::type_string, Arg::cat_literal)); -#else -#ifdef SOLARIS - expanded.push_back (Arg ("\\<" + value + "\\>", Arg::type_string, Arg::cat_rx)); -#else - expanded.push_back (Arg ("\\b" + value + "\\b", Arg::type_string, Arg::cat_rx)); -#endif -#endif - } - - // name.noword:value --> name !~ \bvalue\n - else if (mod == "noword") - { - expanded.push_back (Arg (name, Arg::type_string, Arg::cat_dom)); - expanded.push_back (Arg ("!~", Arg::cat_op)); -#ifdef DARWIN - expanded.push_back (Arg (value, Arg::type_string, Arg::cat_literal)); -#else -#ifdef SOLARIS - expanded.push_back (Arg ("\\<" + value + "\\>", Arg::type_string, Arg::cat_rx)); -#else - expanded.push_back (Arg ("\\b" + value + "\\b", Arg::type_string, Arg::cat_rx)); -#endif -#endif - } - else - throw format (STRING_A3_UNKNOWN_ATTMOD, mod); - } - - // [+-]value --> tags _hastag_/_notag_ value - else if (arg->_category == Arg::cat_tag) - { - char type; - std::string value; - extract_tag (arg->_raw, type, value); - - expanded.push_back (Arg ("tags", Arg::type_string, Arg::cat_dom_)); - expanded.push_back (Arg (type == '+' ? "_hastag_" : "_notag_", Arg::cat_op)); - expanded.push_back (Arg (value, Arg::type_string, Arg::cat_literal)); - } - - // word --> description ~ word - // Note: use of previous prevents desc~foo --> desc~desc~foo - else if (arg->_category == Arg::cat_literal && - previous->_category != Arg::cat_op) - { - expanded.push_back (Arg ("description", Arg::type_string, Arg::cat_dom)); - expanded.push_back (Arg ("~", Arg::cat_op)); - expanded.push_back (Arg (arg->_raw, Arg::type_string, Arg::cat_literal)); - } - - // /pattern/ --> description ~ pattern - else if (arg->_category == Arg::cat_pattern) - { - std::string value; - extract_pattern (arg->_raw, value); - - expanded.push_back (Arg ("description", Arg::type_string, Arg::cat_dom)); - expanded.push_back (Arg ("~", Arg::cat_op)); - expanded.push_back (Arg (value, Arg::type_string, Arg::cat_rx)); - } - - // Default --> preserve - else - expanded.push_back (*arg); - - previous = arg; - } - - expanded.dump ("A3::expand"); - return expanded; -} - //////////////////////////////////////////////////////////////////////////////// // Convert: 1-3,5 7 92bea814-2e3f-487b-92a1-3286dd1a7eda // To: (id=1 or id=2 or id=3 or id=5 or id=7 or diff --git a/src/A3.h b/src/A3.h index 156feac2d..03c1633af 100644 --- a/src/A3.h +++ b/src/A3.h @@ -62,7 +62,6 @@ public: const A3 extract_modifications () const; const A3 tokenize (const A3&) const; - const A3 expand (const A3&) const; const A3 sequence (const A3&) const; const A3 postfix (const A3&) const;