From c5d88fb606f0243607a9405655523b0de53ba8b0 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Mon, 17 Feb 2014 22:59:25 +0100 Subject: [PATCH] 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. --- lisp/org-element.el | 5 ++-- testing/lisp/test-org-element.el | 55 +++++++++++++++++++++------------------- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/lisp/org-element.el b/lisp/org-element.el index dcc8f8a79..372250297 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -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))) diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el index 71c29ef0f..ede5e027c 100644 --- a/testing/lisp/test-org-element.el +++ b/testing/lisp/test-org-element.el @@ -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 - (org-test-with-temp-text - "*************** Task\nTest\n*************** END" - (org-element-map (org-element-parse-buffer) 'inlinetask 'identity))) - ;; 2. Degenerate inlinetask. + (eq 'inlinetask + (org-test-with-temp-text + "*************** Task\nTest\n*************** END" + (org-element-type (org-element-at-point))))) + ;; Degenerate inlinetask. (should - (org-test-with-temp-text "*************** Task" - (org-element-map (org-element-parse-buffer) 'inlinetask 'identity))) + (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 +*************** 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 " -- 2.11.4.GIT