diff --git a/contrib/lisp/ox-extra.el b/contrib/lisp/ox-extra.el index 85dae471f..9cd6980d9 100644 --- a/contrib/lisp/ox-extra.el +++ b/contrib/lisp/ox-extra.el @@ -56,7 +56,7 @@ ;;; Code: (require 'ox) -(eval-when-compile (require 'cl)) +(require 'cl-lib) (defun org-latex-header-blocks-filter (backend) (when (org-export-derived-backend-p backend 'latex) @@ -72,8 +72,10 @@ (org-element-property :post-affiliated block))))))) (mapc (lambda (pos) (goto-char (nth 2 pos)) - (destructuring-bind + (cl-destructuring-bind (beg end &rest ignore) + ;; FIXME: `org-edit-src-find-region-and-lang' was + ;; removed in 9c06f8cce (2014-11-11). (org-edit-src-find-region-and-lang) (let ((contents-lines (split-string (buffer-substring-no-properties beg end) @@ -150,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))