Browse Source

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

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

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