Browse Source

org-element: Fix block parsing in lists

* lisp/org-element.el (org-element--list-struct): Fix block parsing in
  lists.
* testing/lisp/test-org-element.el: Add test.

Reported-by: Omid <omidlink@gmail.com>
Nicolas Goaziou 11 năm trước cách đây
mục cha
commit
b1e7b86fda
2 tập tin đã thay đổi với 10 bổ sung3 xóa
  1. 3 2
      lisp/org-element.el
  2. 7 1
      testing/lisp/test-org-element.el

+ 3 - 2
lisp/org-element.el

@@ -1230,9 +1230,10 @@ CONTENTS is the contents of the element."
 		    (throw 'exit (sort struct 'car-less-than-car))))))
 	    ;; Skip blocks (any type) and drawers contents.
 	    (cond
-	     ((and (looking-at "#\\+BEGIN\\(:[ \t]*$\\|_\\S-\\)+")
+	     ((and (looking-at "#\\+BEGIN\\(:\\|_\\S-+\\)")
 		   (re-search-forward
-		    (format "^[ \t]*#\\+END%s[ \t]*$" (match-string 1))
+		    (format "^[ \t]*#\\+END%s[ \t]*$"
+			    (match-string-no-properties 1))
 		    limit t)))
 	     ((and (looking-at drawers-re)
 		   (re-search-forward "^[ \t]*:END:[ \t]*$" limit t))))

+ 7 - 1
testing/lisp/test-org-element.el

@@ -1127,7 +1127,13 @@ DEADLINE: <2012-03-29 thu.>"
    (equal '(("- item"))
 	  (org-test-with-temp-text "- - item"
 	    (org-element-map
-	     (org-element-parse-buffer) 'paragraph 'org-element-contents)))))
+	     (org-element-parse-buffer) 'paragraph 'org-element-contents))))
+  ;; Block in an item: ignore indentation within the block.
+  (should
+   (org-test-with-temp-text "- item\n  #+begin_src emacs-lisp\n(+ 1 1)\n  #+end_src"
+     (forward-char)
+     (goto-char (org-element-property :end (org-element-at-point)))
+     (eobp))))
 
 
 ;;;; Keyword