소스 검색

org-element: Fix inlinetask parsing

* lisp/org-element.el (org-element-headline-parser): Small refactoring.
(org-element-inlinetask-parser): Add missing :pre-blank property.  Small
refactoring.  Also fix regexp for task end.

* testing/lisp/test-org-element.el (test-org-element/inlinetask-parser):
  Add test.
Nicolas Goaziou 8 년 전
부모
커밋
1dc6c4bc9c
2개의 변경된 파일31개의 추가작업 그리고 20개의 파일을 삭제
  1. 26 20
      lisp/org-element.el
  2. 5 0
      testing/lisp/test-org-element.el

+ 26 - 20
lisp/org-element.el

@@ -1018,15 +1018,14 @@ Assume point is at beginning of the headline."
 	   (standard-props (org-element--get-node-properties))
 	   (time-props (org-element--get-time-properties))
 	   (end (min (save-excursion (org-end-of-subtree t t)) limit))
-	   (pos-after-head (progn (forward-line) (point)))
 	   (contents-begin (save-excursion
+			     (forward-line)
 			     (skip-chars-forward " \r\t\n" end)
 			     (and (/= (point) end) (line-beginning-position))))
 	   (contents-end (and contents-begin
 			      (progn (goto-char end)
 				     (skip-chars-backward " \r\t\n")
-				     (forward-line)
-				     (point)))))
+				     (line-beginning-position 2)))))
       (let ((headline
 	     (list 'headline
 		   (nconc
@@ -1035,7 +1034,7 @@ Assume point is at beginning of the headline."
 			  :end end
 			  :pre-blank
 			  (if (not contents-begin) 0
-			    (count-lines pos-after-head contents-begin))
+			    (1- (count-lines begin contents-begin)))
 			  :contents-begin contents-begin
 			  :contents-end contents-end
 			  :level level
@@ -1043,9 +1042,10 @@ Assume point is at beginning of the headline."
 			  :tags tags
 			  :todo-keyword todo
 			  :todo-type todo-type
-			  :post-blank (count-lines
-				       (or contents-end pos-after-head)
-				       end)
+			  :post-blank
+			  (if contents-end
+			      (count-lines contents-end end)
+			    (1- (count-lines begin end)))
 			  :footnote-section-p footnote-section-p
 			  :archivedp archivedp
 			  :commentedp commentedp
@@ -1116,10 +1116,11 @@ CONTENTS is the contents of the element."
   "Parse an inline task.
 
 Return a list whose CAR is `inlinetask' and CDR is a plist
-containing `:title', `:begin', `:end', `:contents-begin' and
-`:contents-end', `:level', `:priority', `:raw-value', `:tags',
-`:todo-keyword', `:todo-type', `:scheduled', `:deadline',
-`:closed', `:post-blank' and `:post-affiliated' keywords.
+containing `:title', `:begin', `:end', `:pre-blank',
+`:contents-begin' and `:contents-end', `:level', `:priority',
+`:raw-value', `:tags', `:todo-keyword', `:todo-type',
+`:scheduled', `:deadline', `:closed', `:post-blank' and
+`:post-affiliated' keywords.
 
 The plist also contains any property set in the property drawer,
 with its name in upper cases and colons added at the
@@ -1157,18 +1158,20 @@ Assume point is at beginning of the inline task."
 	   (task-end (save-excursion
 		       (end-of-line)
 		       (and (re-search-forward org-outline-regexp-bol limit t)
-			    (looking-at-p "END[ \t]*$")
+			    (looking-at-p "[ \t]*END[ \t]*$")
 			    (line-beginning-position))))
 	   (standard-props (and task-end (org-element--get-node-properties)))
 	   (time-props (and task-end (org-element--get-time-properties)))
-	   (contents-begin (progn (forward-line)
-				  (and task-end (< (point) task-end) (point))))
+	   (contents-begin (and task-end
+				(< (point) task-end)
+				(progn
+				  (forward-line)
+				  (skip-chars-forward " \t\n")
+				  (line-beginning-position))))
 	   (contents-end (and contents-begin task-end))
-	   (before-blank (if (not task-end) (point)
-			   (goto-char task-end)
-			   (forward-line)
-			   (point)))
-	   (end (progn (skip-chars-forward " \r\t\n" limit)
+	   (end (progn (when task-end (goto-char task-end))
+		       (forward-line)
+		       (skip-chars-forward " \r\t\n" limit)
 		       (if (eobp) (point) (line-beginning-position))))
 	   (inlinetask
 	    (list 'inlinetask
@@ -1176,6 +1179,9 @@ Assume point is at beginning of the inline task."
 		   (list :raw-value raw-value
 			 :begin begin
 			 :end end
+			 :pre-blank
+			 (if (not contents-begin) 0
+			   (1- (count-lines begin contents-begin)))
 			 :contents-begin contents-begin
 			 :contents-end contents-end
 			 :level level
@@ -1183,7 +1189,7 @@ Assume point is at beginning of the inline task."
 			 :tags tags
 			 :todo-keyword todo
 			 :todo-type todo-type
-			 :post-blank (count-lines before-blank end)
+			 :post-blank (1- (count-lines (or task-end begin) end))
 			 :post-affiliated begin)
 		   time-props
 		   standard-props))))

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

@@ -1269,6 +1269,11 @@ Some other text
 	   (org-test-with-temp-text
 	       "*************** Task\nTest\n*************** END"
 	     (org-element-type (org-element-at-point)))))
+      (should
+       (eq 'inlinetask
+	   (org-test-with-temp-text
+	       "*************** Task\nTest\n***************   END"
+	     (org-element-type (org-element-at-point)))))
       ;; Degenerate inlinetask.
       (should
        (eq 'inlinetask