summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyle Meyer <kyle@kyleam.com>2017-04-29 12:58:49 -0400
committerKyle Meyer <kyle@kyleam.com>2017-05-03 23:35:40 -0400
commitfef346798f9230644d389e21d33990bfac65e884 (patch)
tree07c73eb83e885197cb666522271b752626b2fb6b
parentfa1c6e92ac0f3c8c37c2d2d7e11073ccce550156 (diff)
downloadorg-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.el19
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))