org-element: Fix inlinetask parsing

* lisp/org-element.el (org-element-inlinetask-parser): Fix parsing
  when regular and degenerate inlinetasks are mixed in the section.
* testing/lisp/test-org-element.el (test-org-element/inlinetask-parser):
  Add tests.

Thanks to Anders Johansson for reporting it.
This commit is contained in:
Nicolas Goaziou 2014-02-17 22:59:25 +01:00
parent d25a2967b9
commit c5d88fb606
2 changed files with 32 additions and 28 deletions

View file

@ -972,8 +972,9 @@ Assume point is at beginning of the inline task."
plist))))
(task-end (save-excursion
(end-of-line)
(and (re-search-forward "^\\*+ END" limit t)
(match-beginning 0))))
(and (re-search-forward org-outline-regexp-bol limit t)
(org-looking-at-p "END[ \t]*$")
(line-beginning-position))))
(contents-begin (progn (forward-line)
(and task-end (< (point) task-end) (point))))
(hidden (and contents-begin (org-invisible-p2)))

View file

@ -1021,55 +1021,58 @@ Some other text
"Test `inlinetask' parser."
(when (featurep 'org-inlinetask)
(let ((org-inlinetask-min-level 15))
;; 1. Regular inlinetask.
;; Regular inlinetask.
(should
(eq 'inlinetask
(org-test-with-temp-text
"*************** Task\nTest\n*************** END"
(org-element-type (org-element-at-point)))))
;; Degenerate inlinetask.
(should
(eq 'inlinetask
(org-test-with-temp-text "*************** Task"
(org-element-type (org-element-at-point)))))
;; Mixed inlinetasks.
(should-not
(org-test-with-temp-text
"*************** Task\nTest\n*************** END"
(org-element-map (org-element-parse-buffer) 'inlinetask 'identity)))
;; 2. Degenerate inlinetask.
(should
(org-test-with-temp-text "*************** Task"
(org-element-map (org-element-parse-buffer) 'inlinetask 'identity)))
"
*************** Task
*************** Task2
Contents
*************** END"
(forward-line)
(goto-char (org-element-property :end (org-element-at-point)))
(eobp)))
;; TODO keyword.
(should
(equal
"TODO"
(let ((org-todo-keywords '((sequence "TODO" "DONE"))))
(org-test-with-temp-text "*************** TODO Task"
(org-element-property
:todo-keyword
(org-element-map (org-element-parse-buffer) 'inlinetask
'identity nil t))))))
(org-element-property :todo-keyword (org-element-at-point))))))
;; Planning info.
(should
(equal
"2012-03-29 thu."
(org-test-with-temp-text "
(org-test-with-temp-text "
*************** Task
DEADLINE: <2012-03-29 thu.>"
(org-element-property
:deadline
(org-element-map (org-element-parse-buffer) 'inlinetask 'identity nil t)))))
(forward-line)
(org-element-property :deadline (org-element-at-point))))
;; Priority.
(should
(equal
(eq
?A
(org-test-with-temp-text "
*************** [#A] Task"
(org-element-property
:priority
(org-element-map
(org-element-parse-buffer) 'inlinetask 'identity nil t)))))
(forward-line)
(org-element-property :priority (org-element-at-point)))))
;; Tags.
(should
(equal
'("test")
(org-test-with-temp-text "
*************** Task :test:"
(org-element-property
:tags
(org-element-map
(org-element-parse-buffer) 'inlinetask 'identity nil t)))))
(forward-line)
(org-element-property :tags (org-element-at-point)))))
;; Regular properties are accessed through upper case keywords.
(should
(org-test-with-temp-text "