diff options
author | Kyle Meyer <kyle@kyleam.com> | 2017-04-29 12:58:49 -0400 |
---|---|---|
committer | Kyle Meyer <kyle@kyleam.com> | 2017-05-03 23:35:40 -0400 |
commit | fef346798f9230644d389e21d33990bfac65e884 (patch) | |
tree | 07c73eb83e885197cb666522271b752626b2fb6b | |
parent | fa1c6e92ac0f3c8c37c2d2d7e11073ccce550156 (diff) | |
download | org-mode-fef346798f9230644d389e21d33990bfac65e884.tar.gz |
ox-extra: Merge sections from ignored headlines
* contrib/lisp/ox-extra.el (org-extra--merge-sections): New function.
(org-export-ignore-headlines): Merge multiple sections that result
from removing ignored headlines.
Prevent org-export-ignore-headlines from violating the one headline to
one section mapping that is relied on by at least one export backend,
ox-texinfo. (ox-texinfo uses each section to generate the menu.)
-rw-r--r-- | contrib/lisp/ox-extra.el | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/contrib/lisp/ox-extra.el b/contrib/lisp/ox-extra.el index b203b92..9cd6980 100644 --- a/contrib/lisp/ox-extra.el +++ b/contrib/lisp/ox-extra.el @@ -152,8 +152,27 @@ parent." (org-element-contents object))) (org-element-extract-element object))) info nil) + (org-extra--merge-sections data backend info) data) +(defun org-extra--merge-sections (data _backend info) + (org-element-map data 'headline + (lambda (hl) + (let ((sections + (cl-loop + for el in (org-element-map (org-element-contents hl) + '(headline section) #'identity info) + until (eq (org-element-type el) 'headline) + collect el))) + (when (and sections + (> (length sections) 1)) + (apply #'org-element-adopt-elements + (car sections) + (cl-mapcan (lambda (s) (org-element-contents s)) + (cdr sections))) + (mapc #'org-element-extract-element (cdr sections))))) + info)) + (defconst ox-extras '((latex-header-blocks org-latex-header-blocks-filter org-export-before-parsing-hook) (ignore-headlines org-export-ignore-headlines org-export-filter-parse-tree-functions)) |