ox: Rename some internal functions
* lisp/ox.el (org-export--prune-tree): Renamed from `org-export-prune-tree'. Move it close to its caller. (org-export--remove-uninterpreted-data): Renamed from `org-export-remove-uninterpreted-data'. Move it close to its caller. (org-export--remove-uninterpreted-data-1): Move internal function close to its caller. (org-export-as): Apply renaming. * testing/lisp/test-ox.el (org-test-with-parsed-data): Apply renaming.
This commit is contained in:
parent
5a550938ce
commit
f7b27896e9
258
lisp/ox.el
258
lisp/ox.el
|
@ -2032,133 +2032,6 @@ recursively convert DATA using BACKEND translation table."
|
||||||
;; will probably be used on small trees.
|
;; will probably be used on small trees.
|
||||||
:exported-data (make-hash-table :test 'eq :size 401)))))
|
:exported-data (make-hash-table :test 'eq :size 401)))))
|
||||||
|
|
||||||
(defun org-export-prune-tree (data info)
|
|
||||||
"Prune non exportable elements from DATA.
|
|
||||||
DATA is the parse tree to traverse. INFO is the plist holding
|
|
||||||
export info. Also set `:ignore-list' in INFO to a list of
|
|
||||||
objects which should be ignored during export, but not removed
|
|
||||||
from tree."
|
|
||||||
(let* (walk-data
|
|
||||||
ignore
|
|
||||||
;; First find trees containing a select tag, if any.
|
|
||||||
(selected (org-export--selected-trees data info))
|
|
||||||
(walk-data
|
|
||||||
(lambda (data)
|
|
||||||
;; Prune non-exportable elements and objects from tree.
|
|
||||||
;; As a special case, special rows and cells from tables
|
|
||||||
;; are stored in IGNORE, as they still need to be accessed
|
|
||||||
;; during export.
|
|
||||||
(let ((type (org-element-type data)))
|
|
||||||
(if (org-export--skip-p data info selected)
|
|
||||||
(if (memq type '(table-cell table-row)) (push data ignore)
|
|
||||||
(org-element-extract-element data))
|
|
||||||
(if (and (eq type 'headline)
|
|
||||||
(eq (plist-get info :with-archived-trees) 'headline)
|
|
||||||
(org-element-property :archivedp data))
|
|
||||||
;; If headline is archived but tree below has to
|
|
||||||
;; be skipped, remove contents.
|
|
||||||
(org-element-set-contents data)
|
|
||||||
;; Move into secondary string, if any.
|
|
||||||
(let ((sec-prop
|
|
||||||
(cdr (assq type org-element-secondary-value-alist))))
|
|
||||||
(when sec-prop
|
|
||||||
(mapc walk-data (org-element-property sec-prop data))))
|
|
||||||
;; Move into recursive objects/elements.
|
|
||||||
(mapc walk-data (org-element-contents data))))))))
|
|
||||||
;; If a select tag is active, also ignore the section before the
|
|
||||||
;; first headline, if any.
|
|
||||||
(when selected
|
|
||||||
(let ((first-element (car (org-element-contents data))))
|
|
||||||
(when (eq (org-element-type first-element) 'section)
|
|
||||||
(org-element-extract-element first-element))))
|
|
||||||
;; Prune tree and communication channel.
|
|
||||||
(funcall walk-data data)
|
|
||||||
(dolist (prop org-export-document-properties)
|
|
||||||
(funcall walk-data (plist-get info prop)))
|
|
||||||
;; Eventually set `:ignore-list'.
|
|
||||||
(plist-put info :ignore-list ignore)))
|
|
||||||
|
|
||||||
(defun org-export-remove-uninterpreted-data (data info)
|
|
||||||
"Change uninterpreted elements back into Org syntax.
|
|
||||||
DATA is the parse tree. INFO is a plist containing export
|
|
||||||
options. Each uninterpreted element or object is changed back
|
|
||||||
into a string. Contents, if any, are not modified. The parse
|
|
||||||
tree is modified by side effect."
|
|
||||||
(org-export--remove-uninterpreted-data-1 data info)
|
|
||||||
(dolist (prop org-export-document-properties)
|
|
||||||
(plist-put info
|
|
||||||
prop
|
|
||||||
(org-export--remove-uninterpreted-data-1
|
|
||||||
(plist-get info prop)
|
|
||||||
info))))
|
|
||||||
|
|
||||||
(defun org-export--remove-uninterpreted-data-1 (data info)
|
|
||||||
"Change uninterpreted elements back into Org syntax.
|
|
||||||
DATA is a parse tree or a secondary string. INFO is a plist
|
|
||||||
containing export options. It is modified by side effect and
|
|
||||||
returned by the function."
|
|
||||||
(org-element-map data
|
|
||||||
'(entity bold italic latex-environment latex-fragment strike-through
|
|
||||||
subscript superscript underline)
|
|
||||||
#'(lambda (blob)
|
|
||||||
(let ((new
|
|
||||||
(case (org-element-type blob)
|
|
||||||
;; ... entities...
|
|
||||||
(entity
|
|
||||||
(and (not (plist-get info :with-entities))
|
|
||||||
(list (concat
|
|
||||||
(org-export-expand blob nil)
|
|
||||||
(make-string
|
|
||||||
(or (org-element-property :post-blank blob) 0)
|
|
||||||
?\s)))))
|
|
||||||
;; ... emphasis...
|
|
||||||
((bold italic strike-through underline)
|
|
||||||
(and (not (plist-get info :with-emphasize))
|
|
||||||
(let ((marker (case (org-element-type blob)
|
|
||||||
(bold "*")
|
|
||||||
(italic "/")
|
|
||||||
(strike-through "+")
|
|
||||||
(underline "_"))))
|
|
||||||
(append
|
|
||||||
(list marker)
|
|
||||||
(org-element-contents blob)
|
|
||||||
(list (concat
|
|
||||||
marker
|
|
||||||
(make-string
|
|
||||||
(or (org-element-property :post-blank blob)
|
|
||||||
0)
|
|
||||||
?\s)))))))
|
|
||||||
;; ... LaTeX environments and fragments...
|
|
||||||
((latex-environment latex-fragment)
|
|
||||||
(and (eq (plist-get info :with-latex) 'verbatim)
|
|
||||||
(list (org-export-expand blob nil))))
|
|
||||||
;; ... sub/superscripts...
|
|
||||||
((subscript superscript)
|
|
||||||
(let ((sub/super-p (plist-get info :with-sub-superscript))
|
|
||||||
(bracketp (org-element-property :use-brackets-p blob)))
|
|
||||||
(and (or (not sub/super-p)
|
|
||||||
(and (eq sub/super-p '{}) (not bracketp)))
|
|
||||||
(append
|
|
||||||
(list (concat
|
|
||||||
(if (eq (org-element-type blob) 'subscript)
|
|
||||||
"_"
|
|
||||||
"^")
|
|
||||||
(and bracketp "{")))
|
|
||||||
(org-element-contents blob)
|
|
||||||
(list (concat
|
|
||||||
(and bracketp "}")
|
|
||||||
(and (org-element-property :post-blank blob)
|
|
||||||
(make-string
|
|
||||||
(org-element-property :post-blank blob)
|
|
||||||
?\s)))))))))))
|
|
||||||
(when new
|
|
||||||
;; Splice NEW at BLOB location in parse tree.
|
|
||||||
(dolist (e new (org-element-extract-element blob))
|
|
||||||
(unless (string= e "") (org-element-insert-before e blob))))))
|
|
||||||
info)
|
|
||||||
;; Return modified parse tree.
|
|
||||||
data)
|
|
||||||
|
|
||||||
(defun org-export-expand (blob contents &optional with-affiliated)
|
(defun org-export-expand (blob contents &optional with-affiliated)
|
||||||
"Expand a parsed element or object to its original state.
|
"Expand a parsed element or object to its original state.
|
||||||
|
|
||||||
|
@ -2792,6 +2665,133 @@ The function assumes BUFFER's major mode is `org-mode'."
|
||||||
(overlays-in (point-min) (point-max)))
|
(overlays-in (point-min) (point-max)))
|
||||||
ov-set)))))
|
ov-set)))))
|
||||||
|
|
||||||
|
(defun org-export--prune-tree (data info)
|
||||||
|
"Prune non exportable elements from DATA.
|
||||||
|
DATA is the parse tree to traverse. INFO is the plist holding
|
||||||
|
export info. Also set `:ignore-list' in INFO to a list of
|
||||||
|
objects which should be ignored during export, but not removed
|
||||||
|
from tree."
|
||||||
|
(let* (walk-data
|
||||||
|
ignore
|
||||||
|
;; First find trees containing a select tag, if any.
|
||||||
|
(selected (org-export--selected-trees data info))
|
||||||
|
(walk-data
|
||||||
|
(lambda (data)
|
||||||
|
;; Prune non-exportable elements and objects from tree.
|
||||||
|
;; As a special case, special rows and cells from tables
|
||||||
|
;; are stored in IGNORE, as they still need to be accessed
|
||||||
|
;; during export.
|
||||||
|
(let ((type (org-element-type data)))
|
||||||
|
(if (org-export--skip-p data info selected)
|
||||||
|
(if (memq type '(table-cell table-row)) (push data ignore)
|
||||||
|
(org-element-extract-element data))
|
||||||
|
(if (and (eq type 'headline)
|
||||||
|
(eq (plist-get info :with-archived-trees) 'headline)
|
||||||
|
(org-element-property :archivedp data))
|
||||||
|
;; If headline is archived but tree below has to
|
||||||
|
;; be skipped, remove contents.
|
||||||
|
(org-element-set-contents data)
|
||||||
|
;; Move into secondary string, if any.
|
||||||
|
(let ((sec-prop
|
||||||
|
(cdr (assq type org-element-secondary-value-alist))))
|
||||||
|
(when sec-prop
|
||||||
|
(mapc walk-data (org-element-property sec-prop data))))
|
||||||
|
;; Move into recursive objects/elements.
|
||||||
|
(mapc walk-data (org-element-contents data))))))))
|
||||||
|
;; If a select tag is active, also ignore the section before the
|
||||||
|
;; first headline, if any.
|
||||||
|
(when selected
|
||||||
|
(let ((first-element (car (org-element-contents data))))
|
||||||
|
(when (eq (org-element-type first-element) 'section)
|
||||||
|
(org-element-extract-element first-element))))
|
||||||
|
;; Prune tree and communication channel.
|
||||||
|
(funcall walk-data data)
|
||||||
|
(dolist (prop org-export-document-properties)
|
||||||
|
(funcall walk-data (plist-get info prop)))
|
||||||
|
;; Eventually set `:ignore-list'.
|
||||||
|
(plist-put info :ignore-list ignore)))
|
||||||
|
|
||||||
|
(defun org-export--remove-uninterpreted-data (data info)
|
||||||
|
"Change uninterpreted elements back into Org syntax.
|
||||||
|
DATA is the parse tree. INFO is a plist containing export
|
||||||
|
options. Each uninterpreted element or object is changed back
|
||||||
|
into a string. Contents, if any, are not modified. The parse
|
||||||
|
tree is modified by side effect."
|
||||||
|
(org-export--remove-uninterpreted-data-1 data info)
|
||||||
|
(dolist (prop org-export-document-properties)
|
||||||
|
(plist-put info
|
||||||
|
prop
|
||||||
|
(org-export--remove-uninterpreted-data-1
|
||||||
|
(plist-get info prop)
|
||||||
|
info))))
|
||||||
|
|
||||||
|
(defun org-export--remove-uninterpreted-data-1 (data info)
|
||||||
|
"Change uninterpreted elements back into Org syntax.
|
||||||
|
DATA is a parse tree or a secondary string. INFO is a plist
|
||||||
|
containing export options. It is modified by side effect and
|
||||||
|
returned by the function."
|
||||||
|
(org-element-map data
|
||||||
|
'(entity bold italic latex-environment latex-fragment strike-through
|
||||||
|
subscript superscript underline)
|
||||||
|
(lambda (blob)
|
||||||
|
(let ((new
|
||||||
|
(case (org-element-type blob)
|
||||||
|
;; ... entities...
|
||||||
|
(entity
|
||||||
|
(and (not (plist-get info :with-entities))
|
||||||
|
(list (concat
|
||||||
|
(org-export-expand blob nil)
|
||||||
|
(make-string
|
||||||
|
(or (org-element-property :post-blank blob) 0)
|
||||||
|
?\s)))))
|
||||||
|
;; ... emphasis...
|
||||||
|
((bold italic strike-through underline)
|
||||||
|
(and (not (plist-get info :with-emphasize))
|
||||||
|
(let ((marker (case (org-element-type blob)
|
||||||
|
(bold "*")
|
||||||
|
(italic "/")
|
||||||
|
(strike-through "+")
|
||||||
|
(underline "_"))))
|
||||||
|
(append
|
||||||
|
(list marker)
|
||||||
|
(org-element-contents blob)
|
||||||
|
(list (concat
|
||||||
|
marker
|
||||||
|
(make-string
|
||||||
|
(or (org-element-property :post-blank blob)
|
||||||
|
0)
|
||||||
|
?\s)))))))
|
||||||
|
;; ... LaTeX environments and fragments...
|
||||||
|
((latex-environment latex-fragment)
|
||||||
|
(and (eq (plist-get info :with-latex) 'verbatim)
|
||||||
|
(list (org-export-expand blob nil))))
|
||||||
|
;; ... sub/superscripts...
|
||||||
|
((subscript superscript)
|
||||||
|
(let ((sub/super-p (plist-get info :with-sub-superscript))
|
||||||
|
(bracketp (org-element-property :use-brackets-p blob)))
|
||||||
|
(and (or (not sub/super-p)
|
||||||
|
(and (eq sub/super-p '{}) (not bracketp)))
|
||||||
|
(append
|
||||||
|
(list (concat
|
||||||
|
(if (eq (org-element-type blob) 'subscript)
|
||||||
|
"_"
|
||||||
|
"^")
|
||||||
|
(and bracketp "{")))
|
||||||
|
(org-element-contents blob)
|
||||||
|
(list (concat
|
||||||
|
(and bracketp "}")
|
||||||
|
(and (org-element-property :post-blank blob)
|
||||||
|
(make-string
|
||||||
|
(org-element-property :post-blank blob)
|
||||||
|
?\s)))))))))))
|
||||||
|
(when new
|
||||||
|
;; Splice NEW at BLOB location in parse tree.
|
||||||
|
(dolist (e new (org-element-extract-element blob))
|
||||||
|
(unless (string= e "") (org-element-insert-before e blob))))))
|
||||||
|
info)
|
||||||
|
;; Return modified parse tree.
|
||||||
|
data)
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun org-export-as
|
(defun org-export-as
|
||||||
(backend &optional subtreep visible-only body-only ext-plist)
|
(backend &optional subtreep visible-only body-only ext-plist)
|
||||||
|
@ -2909,8 +2909,8 @@ Return code as a string."
|
||||||
;; Prune tree from non-exported elements and transform
|
;; Prune tree from non-exported elements and transform
|
||||||
;; uninterpreted elements or objects in both parse tree and
|
;; uninterpreted elements or objects in both parse tree and
|
||||||
;; communication channel.
|
;; communication channel.
|
||||||
(org-export-prune-tree tree info)
|
(org-export--prune-tree tree info)
|
||||||
(org-export-remove-uninterpreted-data tree info)
|
(org-export--remove-uninterpreted-data tree info)
|
||||||
;; Parse buffer, handle uninterpreted elements or objects,
|
;; Parse buffer, handle uninterpreted elements or objects,
|
||||||
;; then call parse-tree filters.
|
;; then call parse-tree filters.
|
||||||
(setq tree
|
(setq tree
|
||||||
|
|
|
@ -50,8 +50,8 @@ variable, and communication channel under `info'."
|
||||||
`(org-test-with-temp-text ,data
|
`(org-test-with-temp-text ,data
|
||||||
(let* ((tree (org-element-parse-buffer))
|
(let* ((tree (org-element-parse-buffer))
|
||||||
(info (org-export-get-environment)))
|
(info (org-export-get-environment)))
|
||||||
(org-export-prune-tree tree info)
|
(org-export--prune-tree tree info)
|
||||||
(org-export-remove-uninterpreted-data tree info)
|
(org-export--remove-uninterpreted-data tree info)
|
||||||
(let ((info (org-combine-plists
|
(let ((info (org-combine-plists
|
||||||
info (org-export-collect-tree-properties tree info))))
|
info (org-export-collect-tree-properties tree info))))
|
||||||
,@body))))
|
,@body))))
|
||||||
|
|
Loading…
Reference in New Issue