Browse Source

Merge branch 'maint'

Nicolas Goaziou 5 years ago
parent
commit
78d2bd7edc
2 changed files with 19 additions and 3 deletions
  1. 8 3
      lisp/org-element.el
  2. 11 0
      testing/lisp/test-org-element.el

+ 8 - 3
lisp/org-element.el

@@ -3958,6 +3958,9 @@ Return value is an alist whose CAR is position and CDR the object
 type, as a symbol.
 
 OBJECTS is the previous candidates alist."
+  ;; Filter out any object found but not belonging to RESTRICTION.
+  (setq objects (org-remove-if-not (lambda (obj) (memq (car obj) restriction))
+				   objects))
   (let (next-candidates types-to-search)
     ;; If no previous result, search every object type in RESTRICTION.
     ;; Otherwise, keep potential candidates (old objects located after
@@ -4357,7 +4360,7 @@ and :post-blank properties."
 		       (progn (beginning-of-line)
 			      (skip-chars-forward "* ")
 			      (setq end (point-at-eol))))
-		  (and (memq type '(paragraph table-cell verse-block))
+		  (and (memq type '(paragraph table-row verse-block))
 		       (let ((cbeg (org-element-property
 				    :contents-begin element))
 			     (cend (org-element-property
@@ -4376,7 +4379,7 @@ and :post-blank properties."
 					candidates)))
 	       ;; If ORIGIN is before next object in element, there's
 	       ;; no point in looking further.
-	       (if (> (cdr closest-cand) origin) (throw 'exit element)
+	       (if (> (cdr closest-cand) origin) (throw 'exit parent)
 		 (let* ((object
 			 (progn (goto-char (cdr closest-cand))
 				(funcall (intern (format "org-element-%s-parser"
@@ -4396,7 +4399,9 @@ and :post-blank properties."
 		    ;; search to the end of its contents.
 		    (t (goto-char cbeg)
 		       (org-element-put-property object :parent parent)
-		       (setq parent object end cend)))))))
+		       (setq parent object
+			     restriction (org-element-restriction object)
+			     end cend)))))))
 	   parent))))))
 
 (defsubst org-element-nested-p (elem-A elem-B)

+ 11 - 0
testing/lisp/test-org-element.el

@@ -2512,6 +2512,17 @@ Paragraph \\alpha."
        (org-test-with-temp-text "* Headline _with_ underlining"
 	 (progn (search-forward "w")
 		(org-element-type (org-element-context))))))
+  ;; Find objects in objects.
+  (should
+   (eq 'macro
+       (org-test-with-temp-text "| a | {{{macro}}} |"
+	 (progn (search-forward "{")
+		(org-element-type (org-element-context))))))
+  (should
+   (eq 'table-cell
+       (org-test-with-temp-text "| a | b {{{macro}}} |"
+	 (progn (search-forward "b")
+		(org-element-type (org-element-context))))))
   ;; Correctly set `:parent' property.
   (should
    (eq 'paragraph