1. Property names with -'s are not handled properly

   Specifically, the escapes are not removed.

   Ex: (org-make-tags-matcher "PROP\\-WITH\\-HYPHENS=2") produces

   ("PROP\\-WITH\\-HYPHENS=2" and
    (progn
    (setq org-cached-props nil)
    (=
     (string-to-number
      (or (org-cached-entry-get nil "PROP\\-WITH\\-HYPHENS")
      ""))
     2))
    t)

   The property name in the matcher should be "PROP-WITH-HYPHENS".
   The original code /does/ instead remove -'s from tag names, which
   shouldn't have them anyway. I suspect that this was intended for
   property names rather than tag names.

2. Incorrect comparison operators allowed, produce bad matchers.

   The regular expression "[<=>]\\{1,2\\}" is used to detect the
   comparison operators. But this can produce bad matchers that fail
   opaquely at match time rather than giving an appropriate error
   message at parse time.

   Ex: (org-make-tags-matcher "P<<2") produces

    ("P<<2" and
     (progn
       (setq org-cached-props nil)
       (nil
        (string-to-number (or (org-cached-entry-get nil "P") "")) 2))
     t)

3. A faulty test for todo matcher in org-make-tags-matcher

   The current code uses (string-match "/+" match)
   to detect the presence of the shortcut /!? style todo matchers.
   But this is insufficient.

   Ex: (org-make-tags-matcher "PROP={^\\s-*// .*$}") produces
   an erroneous matcher:

       ("PROP={^\\s-*// .*$}" progn
        (setq org-cached-props nil)
        (member "PROP" tags-list))

   We want to find the first slash that is not enclosed in {}'s or
   ""'s; if found, a todo match is needed. A simple pattern
   will not be enough for this.

   As a side note, org allows arbitrary characters in TODO keywords,
   (For instance, both PROP={/!} and PROP="/!{/!}" are valid TODO
   keywords (it works!) *and* valid property comparisons.)
   The assumption of the current version is that {}'s and "'s
   are excluded.  I also exclude ()'s from TODO keywords in the
   new version for reasons we can discuss later. Neither seems
   like a big loss. If you are using {}'s, "'s, or ()'s in your
   TODO keywords, use a TODO= match rather than a /!? match.

4. Regexp matchers in todo queries fail when no TODO for an item.

   Ex: (org-make-tags-matcher "/{\\S-}") produces

      ("/{\\S-}" and t (string-match "\\S-" todo))

   This will raise an error when todo is nil (no todo keyword on a
   scanned item) when doing an org-map-entries, say. The todo should be
   replaced with a (or todo "") as it is for tag-style TODO queries.

5. A minor consistency issue

   At line 7179 in org.el (v 7.8.11), missing an org-re call in a
   regex that uses posix classes. The org-re is used elsewhere,
   for xemacs compatibility, I think.


[FWIW, all of these are problems eliminated or made moot in the new parser.]

Reply via email to