forked from mirrors/org-mode
ox: Allow a less strict UNNUMBERED inheritance
* lisp/ox.el (org-export-collect-headlines): (org-export-excluded-from-toc-p): Allow to number headlines in the middle of an otherwise unnumbered tree. * testing/lisp/test-ox.el (test-org-export/collect-headlines): (test-org-export/excluded-from-toc-p): (test-org-export/toc-entry-backend): Update tests. Add more tests. Reported-by: Akater <nuclearspace@gmail.com> <http://lists.gnu.org/archive/html/emacs-orgmode/2017-11/msg00219.html>
This commit is contained in:
parent
d788d1b00e
commit
7455f4bf83
17
lisp/ox.el
17
lisp/ox.el
|
@ -5225,16 +5225,14 @@ Footnote sections are ignored."
|
|||
(n (if (not (wholenump n)) limit
|
||||
(min (if (eq (org-element-type scope) 'org-data) n
|
||||
(+ (org-export-get-relative-level scope info) n))
|
||||
limit)))
|
||||
(skipped nil))
|
||||
limit))))
|
||||
(org-element-map (org-element-contents scope) 'headline
|
||||
(lambda (h)
|
||||
(if (or (org-element-property :footnote-section-p h)
|
||||
(equal "notoc" (org-element-property :UNNUMBERED h))
|
||||
(memq (org-element-property :parent h) skipped)
|
||||
(< n (org-export-get-relative-level h info)))
|
||||
(progn (push h skipped) nil)
|
||||
h))
|
||||
(and (not (org-element-property :footnote-section-p h))
|
||||
(not (equal "notoc"
|
||||
(org-export-get-node-property :UNNUMBERED h t)))
|
||||
(>= n (org-export-get-relative-level h info))
|
||||
h))
|
||||
info)))
|
||||
|
||||
(defun org-export-collect-elements (type info &optional predicate)
|
||||
|
@ -5299,8 +5297,7 @@ contents. However, it is useful if some additional processing is
|
|||
required on headlines excluded from table of contents."
|
||||
(or (org-element-property :footnote-section-p headline)
|
||||
(org-export-low-level-p headline info)
|
||||
(cl-some (lambda (h) (equal "notoc" (org-element-property :UNNUMBERED h)))
|
||||
(org-element-lineage headline nil t))))
|
||||
(equal "notoc" (org-export-get-node-property :UNNUMBERED headline t))))
|
||||
|
||||
(defun org-export-toc-entry-backend (parent &rest transcoders)
|
||||
"Return an export back-end appropriate for table of contents entries.
|
||||
|
|
|
@ -4318,13 +4318,18 @@ Another text. (ref:text)
|
|||
(org-export-collect-headlines info))))))
|
||||
;; Do not collect headlines with UNNUMBERED property set to "notoc".
|
||||
;; Headlines with another value for the property are still
|
||||
;; collected.
|
||||
;; collected. UNNUMBERED property is inherited.
|
||||
(should
|
||||
(equal '("H1")
|
||||
(org-test-with-parsed-data
|
||||
"* H1\n* H2\n:PROPERTIES:\n:UNNUMBERED: notoc\n:END:"
|
||||
(mapcar (lambda (h) (org-element-property :raw-value h))
|
||||
(org-export-collect-headlines info)))))
|
||||
(should-not
|
||||
(org-test-with-parsed-data
|
||||
"* H1\n:PROPERTIES:\n:UNNUMBERED: notoc\n:END:\n** H2"
|
||||
(mapcar (lambda (h) (org-element-property :raw-value h))
|
||||
(org-export-collect-headlines info))))
|
||||
(should
|
||||
(equal '("H1" "H2")
|
||||
(org-test-with-parsed-data
|
||||
|
@ -4348,17 +4353,28 @@ Another text. (ref:text)
|
|||
|
||||
(ert-deftest test-org-export/excluded-from-toc-p ()
|
||||
"Test `org-export-excluded-from-toc-p' specifications."
|
||||
;; By default, headlines are not excluded.
|
||||
(should-not
|
||||
(org-test-with-parsed-data "* H1"
|
||||
(org-element-map tree 'headline
|
||||
(lambda (h) (org-export-excluded-from-toc-p h info)) info t)))
|
||||
;; Exclude according to a maximum level.
|
||||
(should
|
||||
(equal '(in out)
|
||||
(org-test-with-parsed-data "#+OPTIONS: H:1\n* H1\n** H2"
|
||||
(org-element-map tree 'headline
|
||||
(lambda (h) (if (org-export-excluded-from-toc-p h info) 'out 'in))
|
||||
info))))
|
||||
;; Exclude according to UNNUMBERED property.
|
||||
(should
|
||||
(org-test-with-parsed-data "* H1\n:PROPERTIES:\n:UNNUMBERED: notoc\n:END:"
|
||||
(org-element-map tree 'headline
|
||||
(lambda (h) (org-export-excluded-from-toc-p h info)) info t)))
|
||||
;; UNNUMBERED property is inherited, so is "notoc" value.
|
||||
(should
|
||||
(equal '(in out)
|
||||
(org-test-with-parsed-data "#+OPTIONS: H:1\n* H1\n** H2"
|
||||
(equal '(out out)
|
||||
(org-test-with-parsed-data
|
||||
"* H1\n:PROPERTIES:\n:UNNUMBERED: notoc\n:END:\n** H2"
|
||||
(org-element-map tree 'headline
|
||||
(lambda (h) (if (org-export-excluded-from-toc-p h info) 'out 'in))
|
||||
info)))))
|
||||
|
@ -4427,10 +4443,10 @@ Another text. (ref:text)
|
|||
(let (org-export-registered-backends)
|
||||
(org-export-define-backend 'test
|
||||
'((headline . (lambda (h _c i) (org-export-data-with-backend
|
||||
(org-element-property :title h)
|
||||
(org-export-toc-entry-backend 'test
|
||||
'(bold . (lambda (_b c _i) c)))
|
||||
i)))))
|
||||
(org-element-property :title h)
|
||||
(org-export-toc-entry-backend 'test
|
||||
'(bold . (lambda (_b c _i) c)))
|
||||
i)))))
|
||||
(org-export-as 'test))))))
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue