diff options
author | Nicolas Goaziou <n.goaziou@gmail.com> | 2013-05-08 09:56:26 +0200 |
---|---|---|
committer | Nicolas Goaziou <n.goaziou@gmail.com> | 2013-05-08 10:10:29 +0200 |
commit | be794a2a308483c44968fdd6b09270224d073595 (patch) | |
tree | b1739060d24173edcac41632bf29c11a93f129aa | |
parent | bd27a005bb9ddc547de5e08722f2f15df7d48e49 (diff) | |
download | org-mode-be794a2a308483c44968fdd6b09270224d073595.tar.gz |
org-element: Fix visible-only parsing
* lisp/org-element.el (org-element--parse-elements): Also parse
visible headlines within an otherwise compacted headline.
* testing/lisp/test-org-element.el: Add test.
-rw-r--r-- | lisp/org-element.el | 13 | ||||
-rw-r--r-- | testing/lisp/test-org-element.el | 14 |
2 files changed, 23 insertions, 4 deletions
diff --git a/lisp/org-element.el b/lisp/org-element.el index 16a6cf8..04df21b 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -4199,6 +4199,10 @@ elements. Elements are accumulated into ACC." (save-excursion (goto-char beg) + ;; Visible only: skip invisible parts at the beginning of the + ;; element. + (when (and visible-only (org-invisible-p2)) + (goto-char (min (1+ (org-find-visible)) end))) ;; When parsing only headlines, skip any text before first one. (when (and (eq granularity 'headline) (not (org-at-heading-p))) (org-with-limited-levels (outline-next-heading))) @@ -4211,12 +4215,13 @@ Elements are accumulated into ACC." (type (org-element-type element)) (cbeg (org-element-property :contents-begin element))) (goto-char (org-element-property :end element)) + ;; Visible only: skip invisible parts between siblings. + (when (and visible-only (org-invisible-p2)) + (goto-char (min (1+ (org-find-visible)) end))) ;; Fill ELEMENT contents by side-effect. (cond - ;; If VISIBLE-ONLY is true and element is hidden or if it has - ;; no contents, don't modify it. - ((or (and visible-only (org-element-property :hiddenp element)) - (not cbeg))) + ;; If element has no contents, don't modify it. + ((not cbeg)) ;; Greater element: parse it between `contents-begin' and ;; `contents-end'. Make sure GRANULARITY allows the ;; recursion, or ELEMENT is a headline, in which case going diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el index ae2e4b6..f03f54a 100644 --- a/testing/lisp/test-org-element.el +++ b/testing/lisp/test-org-element.el @@ -2613,6 +2613,20 @@ Paragraph \\alpha." +;;; Test Visible Only Parsing + +(ert-deftest test-org-element/parse-buffer-visible () + "Test `org-element-parse-buffer' with visible only argument." + (should + (equal '("H1" "H3" "H5") + (org-test-with-temp-text + "* H1\n** H2\n** H3 :visible:\n** H4\n** H5 :visible:" + (org-occur ":visible:") + (org-element-map (org-element-parse-buffer nil t) 'headline + (lambda (hl) (org-element-property :raw-value hl))))))) + + + ;;; Test `:parent' Property (ert-deftest test-org-element/parent-property () |