浏览代码

Merge branch 'maint'

Nicolas Goaziou 8 年之前
父节点
当前提交
c0b37e1883
共有 2 个文件被更改,包括 46 次插入21 次删除
  1. 31 21
      lisp/org-element.el
  2. 15 0
      testing/lisp/test-org-element.el

+ 31 - 21
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))))
@@ -3839,10 +3845,14 @@ element it has to parse."
 	 (or (save-excursion (org-with-limited-levels (outline-next-heading)))
 	     limit)))
        ;; Planning.
-       ((and (eq mode 'planning) (looking-at org-planning-line-re))
+       ((and (eq mode 'planning)
+	     (eq ?* (char-after (line-beginning-position 0)))
+	     (looking-at org-planning-line-re))
 	(org-element-planning-parser limit))
        ;; Property drawer.
        ((and (memq mode '(planning property-drawer))
+	     (eq ?* (char-after (line-beginning-position
+				 (if (eq mode 'planning) 0 -1))))
 	     (looking-at org-property-drawer-re))
 	(org-element-property-drawer-parser limit))
        ;; When not at bol, point is at the beginning of an item or

+ 15 - 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
@@ -1966,6 +1971,11 @@ Outside list"
    (eq 'planning
        (org-test-with-temp-text
 	   "* H\n# Comment\n<point>DEADLINE: <2012-03-29 thu.>"
+	 (org-element-type (org-element-at-point)))))
+  (should-not
+   (eq 'planning
+       (org-test-with-temp-text
+	   "* H\n\n<point>DEADLINE: <2012-03-29 thu.>"
 	 (org-element-type (org-element-at-point))))))
 
 
@@ -2008,6 +2018,11 @@ Outside list"
        (org-test-with-temp-text
 	   "* H\nParagraph\n<point>:PROPERTIES:\nparagraph\n:END:"
 	 (org-element-type (org-element-at-point)))))
+  (should-not
+   (eq 'property-drawer
+       (org-test-with-temp-text
+	   "* H\n\n<point>:PROPERTIES:\n:prop: value\n:END:"
+	 (org-element-type (org-element-at-point)))))
   ;; Handle non-empty blank line at the end of buffer.
   (should
    (org-test-with-temp-text "* H\n<point>:PROPERTIES:\n:END:\n "