diff --git a/contrib/lisp/org-export.el b/contrib/lisp/org-export.el index 2e12aa097..4ad58be1e 100644 --- a/contrib/lisp/org-export.el +++ b/contrib/lisp/org-export.el @@ -2586,57 +2586,29 @@ it also." ;;;; For Tables Of Contents -;; `org-export-get-headlines' builds a table of contents in the shape -;; of a nested list of cons cells whose car is headline's name and cdr -;; an unique identifier. One can then easily parse it and transcode -;; it in a back-end. Identifiers can be used to construct internal -;; links. +;; `org-export-collect-headlines' builds a list of all exportable +;; headline elements, maybe limited to a certain depth. One can then +;; easily parse it and transcode it. ;; Building lists of tables, figures or listings is quite similar. ;; Once the generic function `org-export-collect-elements' is defined, ;; `org-export-collect-tables', `org-export-collect-figures' and ;; `org-export-collect-listings' can be derived from it. -(defun org-export-get-headlines (backend info &optional n) - "Build a table of contents. - -BACKEND is the back-end used to transcode headline's name. INFO -is a plist holding export options. +(defun org-export-collect-headlines (info &optional n) + "Collect headlines in order to build a table of contents. When non-nil, optional argument N must be an integer. It specifies the depth of the table of contents. -Return an alist whose keys are headlines' name and value their -relative level and an unique identifier that might be used for -internal links. - -For example, on the following tree, where numbers in parens are -buffer position at beginning of the line: - -* Title 1 (1) -** Sub-title 1 (21) -** Sub-title 2 (42) -* Title 2 (62) - -the function will return: - -\(\(\"Title 1\" 1 1\) - \(\"Sub-title 1\" 2 21\) - \(\"Sub-title 2\" 2 42\) - \(\"Title 2\" 1 62\)\)" +Return a list of all exportable headlines as parsed elements." (org-element-map (plist-get info :parse-tree) 'headline - (lambda (headline local-info) - ;; Get HEADLINE's relative level. - (let ((level (+ (or (plist-get local-info :headline-offset) 0) - (org-element-get-property :level headline)))) - (unless (and (wholenump n) (> level n)) - (list - (org-export-secondary-string - (org-element-get-property :title headline) backend info) - level - (org-element-get-property :begin headline))))) + (lambda (headline local) + ;; Strip contents from HEADLINE. + (let ((relative-level (org-export-get-relative-level headline local))) + (unless (and n (> relative-level n)) headline))) info)) (defun org-export-collect-elements (type backend info)