org-element: Fix `org-element-context'
authorNicolas Goaziou <n.goaziou@gmail.com>
Fri, 23 Nov 2012 22:46:52 +0000 (23:46 +0100)
committerNicolas Goaziou <n.goaziou@gmail.com>
Fri, 23 Nov 2012 22:46:52 +0000 (23:46 +0100)
* lisp/org-element.el (org-element-context): When point is between two
  objects, be sure to return the second one.
* testing/lisp/test-org-element.el: Add test.

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

index 5da2dec..51b8958 100644 (file)
@@ -4316,18 +4316,22 @@ and :post-blank properties."
                                (funcall (intern (format "org-element-%s-parser"
                                                         (car closest-cand))))))
                        (cbeg (org-element-property :contents-begin object))
-                       (cend (org-element-property :contents-end object)))
+                       (cend (org-element-property :contents-end object))
+                       (obj-end (org-element-property :end object)))
                   (cond
                    ;; ORIGIN is after OBJECT, so skip it.
-                   ((< (org-element-property :end object) origin)
-                    (goto-char (org-element-property :end object)))
-                   ;; ORIGIN is within a non-recursive object or at an
-                   ;; object boundaries: Return that object.
+                   ((<= obj-end origin)
+                    (if (/= obj-end end) (goto-char obj-end)
+                      (throw 'exit
+                             (org-element-put-property
+                              object :parent parent))))
+                   ;; ORIGIN is within a non-recursive object or at
+                   ;; an object boundaries: Return that object.
                    ((or (not cbeg) (> cbeg origin) (< cend origin))
                     (throw 'exit
                            (org-element-put-property object :parent parent)))
-                   ;; Otherwise, move within current object and restrict
-                   ;; search to the end of its contents.
+                   ;; Otherwise, move within current object and
+                   ;; restrict search to the end of its contents.
                    (t (goto-char cbeg)
                       (org-element-put-property object :parent parent)
                       (setq parent object
index 55f5eae..38829d5 100644 (file)
@@ -2490,7 +2490,14 @@ Paragraph \\alpha."
        (org-test-with-temp-text "Some *bold* text"
         (progn (search-forward "bold")
                (org-element-type
-                (org-element-property :parent (org-element-context))))))))
+                (org-element-property :parent (org-element-context)))))))
+  ;; Between two objects, return the second one.
+  (should
+   (eq 'macro
+       (org-test-with-temp-text "<<target>>{{{test}}}"
+        (progn (search-forward "{")
+               (backward-char)
+               (org-element-type (org-element-context)))))))
 
 
 (provide 'test-org-element)