Parcourir la source

org-element: Fix filling bug in a list with affiliated keyword

* lisp/org-element.el (org-element-paragraph-parser): Fix parsing of
   paragraph at the beginning of an item.
* testing/lisp/test-org-element.el: Add test.
Nicolas Goaziou il y a 12 ans
Parent
commit
b4604d2833
2 fichiers modifiés avec 24 ajouts et 5 suppressions
  1. 10 4
      lisp/org-element.el
  2. 14 1
      testing/lisp/test-org-element.el

+ 10 - 4
lisp/org-element.el

@@ -1736,9 +1736,15 @@ containing `:begin', `:end', `:contents-begin' and
 
 Assume point is at the beginning of the paragraph."
   (save-excursion
-    (let* ((contents-begin (point))
-	   (keywords (org-element--collect-affiliated-keywords))
-	   (begin (car keywords))
+    (let* (;; INNER-PAR-P is non-nil when paragraph is at the
+	   ;; beginning of an item or a footnote reference. In that
+	   ;; case, we mustn't look for affiliated keywords since they
+	   ;; belong to the container.
+	   (inner-par-p (/= (point-at-bol) (point)))
+	   (contents-begin (point))
+	   (keywords (unless inner-par-p
+		       (org-element--collect-affiliated-keywords)))
+	   (begin (if inner-par-p contents-begin (car keywords)))
 	   (before-blank
 	    (let ((case-fold-search t))
 	      (end-of-line)
@@ -1797,7 +1803,7 @@ Assume point is at the beginning of the paragraph."
 	    ;; If paragraph has no affiliated keywords, it may not begin
 	    ;; at beginning of line if it starts an item.
 	    (nconc
-	     (list :begin (if (cadr keywords) begin contents-begin)
+	     (list :begin begin
 		   :end end
 		   :contents-begin contents-begin
 		   :contents-end contents-end

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

@@ -1168,7 +1168,20 @@ e^{i\\pi}+1=0
    (org-test-with-temp-text "#+BEGIN: \nParagraph"
      (let ((elem (org-element-at-point)))
        (and (eq (org-element-type elem) 'paragraph)
-	    (= (point-max) (org-element-property :end elem)))))))
+	    (= (point-max) (org-element-property :end elem))))))
+  ;; Include incomplete latex environments.
+  (should
+   (org-test-with-temp-text "\begin{equation}\nParagraph"
+     (let ((elem (org-element-at-point)))
+       (and (eq (org-element-type elem) 'paragraph)
+	    (= (point-max) (org-element-property :end elem))))))
+  ;; Do not steal affiliated keywords from container.
+  (should
+   (org-test-with-temp-text "#+ATTR_LATEX: test\n- item 1"
+     (let ((elem (progn (search-forward "item") (org-element-at-point))))
+       (and (eq (org-element-type elem) 'paragraph)
+	    (not (org-element-property :attr_latex elem))
+	    (/= (org-element-property :begin elem) 1))))))
 
 
 ;;;; Plain List