org-element: Fix timestamps parsing in planning lines
authorNicolas Goaziou <n.goaziou@gmail.com>
Tue, 25 Feb 2014 19:48:15 +0000 (25 20:48 +0100)
committerNicolas Goaziou <n.goaziou@gmail.com>
Tue, 25 Feb 2014 19:51:32 +0000 (25 20:51 +0100)
* lisp/org-element.el (org-element-context): Fix timestamps parsing.
* testing/lisp/test-org-element.el (test-org-element/context): Add
  test.

lisp/org-element.el
testing/lisp/test-org-element.el

index b6ebd33..68b830e 100644 (file)
@@ -4891,6 +4891,16 @@ Providing it allows for quicker computation."
           (if (and (>= origin (point)) (< origin (line-end-position)))
               (narrow-to-region (point) (line-end-position))
             (throw 'objects-forbidden element))))
+       ;; At a planning line, if point is at a timestamp, return it,
+       ;; otherwise, return element.
+       ((eq type 'planning)
+        (dolist (p '(:closed :deadline :scheduled))
+          (let ((timestamp (org-element-property p element)))
+            (when (and timestamp
+                       (<= (org-element-property :begin timestamp) origin)
+                       (> (org-element-property :end timestamp) origin))
+              (throw 'objects-forbidden timestamp))))
+        (throw 'objects-forbidden element))
        (t (throw 'objects-forbidden element)))
        (goto-char (point-min))
        (let ((restriction (org-element-restriction type))
index ede5e02..7cc8dd8 100644 (file)
@@ -3022,6 +3022,17 @@ Paragraph \\alpha."
        (org-test-with-temp-text "| a | b {{{macro}}} |"
         (progn (search-forward "b")
                (org-element-type (org-element-context))))))
+  ;; Find objects in planning lines.
+  (should
+   (eq 'timestamp
+       (org-test-with-temp-text "* H\n  SCHEDULED: <2012-03-29 thu.>"
+        (search-forward "2012")
+        (org-element-type (org-element-context)))))
+  (should-not
+   (eq 'timestamp
+       (org-test-with-temp-text "* H\n  SCHEDULED: <2012-03-29 thu.>"
+        (search-forward "SCHEDULED")
+        (org-element-type (org-element-context)))))
   ;; Find objects in document keywords.
   (should
    (eq 'macro