org-element: Fix previous patch

* lisp/org-element.el (org-element-paragraph-parser): Fix previous patch.
* testing/lisp/test-org-element.el: Add tests.
This commit is contained in:
Nicolas Goaziou 2012-08-17 17:24:33 +02:00
parent b1ed817e38
commit 8ab1d76529
2 changed files with 60 additions and 18 deletions

View File

@ -1738,22 +1738,40 @@ Assume point is at the beginning of the paragraph."
(end-of-line) (end-of-line)
(re-search-forward org-element-paragraph-separate limit 'm) (re-search-forward org-element-paragraph-separate limit 'm)
(while (and (/= (point) limit) (while (and (/= (point) limit)
(cond ((and (looking-at "[ \t]*:\\S-") (cond
(not (looking-at org-drawer-regexp)))) ;; Skip non-existent or incomplete drawer.
((not (looking-at "[ \t]*#\\S-")) nil) ((save-excursion
((looking-at "[ \t]*\\+BEGIN:? ") (beginning-of-line)
(not (save-excursion (and (looking-at "[ \t]*:\\S-")
(re-search-forward (or (not (looking-at org-drawer-regexp))
"^[ \t]*\\+END:" limit t)))) (not (save-excursion
((looking-at "[ \t]*\\+BEGIN_\\(\\S-+\\)") (re-search-forward
(not (save-excursion "^[ \t]*:END:" limit t)))))))
(re-search-forward ;; Stop at comments.
(concat "^[ \t]*\\+END_" ((save-excursion
(match-string 1)) (beginning-of-line)
limit t)))) (not (looking-at "[ \t]*#\\S-"))) nil)
((not (looking-at "[ \t]*#\\+\\S-+:"))))) ;; Skip incomplete dynamic blocks.
(when (re-search-forward org-element-paragraph-separate limit 'm) ((save-excursion
(goto-char (match-beginning 0)))) (beginning-of-line)
(looking-at "[ \t]*#\\+BEGIN: "))
(not (save-excursion
(re-search-forward
"^[ \t]*\\+END:" limit t))))
;; Skip incomplete blocks.
((save-excursion
(beginning-of-line)
(looking-at "[ \t]*#\\+BEGIN_\\(\\S-+\\)"))
(not (save-excursion
(re-search-forward
(concat "^[ \t]*#\\+END_"
(match-string 1))
limit t))))
;; Skip ill-formed keywords.
((not (save-excursion
(beginning-of-line)
(looking-at "[ \t]*#\\+\\S-+:"))))))
(re-search-forward org-element-paragraph-separate limit 'm))
(if (eobp) (point) (goto-char (line-beginning-position))))) (if (eobp) (point) (goto-char (line-beginning-position)))))
(contents-end (progn (skip-chars-backward " \r\t\n" contents-begin) (contents-end (progn (skip-chars-backward " \r\t\n" contents-begin)
(forward-line) (forward-line)

View File

@ -1144,10 +1144,34 @@ e^{i\\pi}+1=0
(org-element-parse-buffer) 'paragraph (org-element-parse-buffer) 'paragraph
(lambda (p) (char-after (org-element-property :end p))) (lambda (p) (char-after (org-element-property :end p)))
nil t)))) nil t))))
;; Keywords without colons are treated as plain text. ;; Include ill-formed Keywords.
(should (should
(org-test-with-temp-text "#+wrong_keyword something" (org-test-with-temp-text "#+wrong_keyword something"
(org-element-map (org-element-parse-buffer) 'paragraph 'identity)))) (org-element-map (org-element-parse-buffer) 'paragraph 'identity)))
;; Include incomplete-drawers.
(should
(let ((org-drawers '("TEST")))
(org-test-with-temp-text ":TEST:\nParagraph"
(let ((elem (org-element-at-point)))
(and (eq (org-element-type elem) 'paragraph)
(= (point-max) (org-element-property :end elem)))))))
;; Include non-existent drawers.
(should
(let ((org-drawers '("TEST")))
(org-test-with-temp-text ":NONAME:"
(org-element-map (org-element-parse-buffer) 'paragraph 'identity))))
;; Include incomplete blocks.
(should
(org-test-with-temp-text "#+BEGIN_CENTER\nParagraph"
(let ((elem (org-element-at-point)))
(and (eq (org-element-type elem) 'paragraph)
(= (point-max) (org-element-property :end elem))))))
;; Include incomplete dynamic blocks.
(should
(org-test-with-temp-text "#+BEGIN: \nParagraph"
(let ((elem (org-element-at-point)))
(and (eq (org-element-type elem) 'paragraph)
(= (point-max) (org-element-property :end elem)))))))
;;;; Plain List ;;;; Plain List