Export: New hooks for preprocessing

This patch introduces more hooks for preprocessing the export buffer,
at various strategic moments.  See the Changes.org file for a
description of the hooks.
This commit is contained in:
Carsten Dominik 2008-12-31 18:37:33 +01:00
parent ffd89f5752
commit df07e0a4f3
3 changed files with 70 additions and 10 deletions

View File

@ -148,6 +148,30 @@ Thanks to Ilya Shlyakhter for proposing this feature set. Thanks
to Sebastian Rose for the key Javascript element that made the to Sebastian Rose for the key Javascript element that made the
remote highlighting possible. remote highlighting possible.
*** New hooks for export preprocessing
The export preprocessor now runs more hooks, to allow
better-timed tweaking by user functions:
- =org-export-preprocess-hook= ::
Pretty much the first thing in the preprocessor. But org-mode
is already active in the preprocessing buffer.
- =org-export-preprocess-after-include-files-hook= ::
This is run after the contents of included files have been inserted.
- =org-export-preprocess-after-tree-selection-hook= ::
This is run after selection of trees to be exported has
happened. This selection includes tags-based selection, as
well as removal of commented and archived trees.
- =org-export-preprocess-before-backend-specifics-hook= ::
Hook run before backend-specific functions are called during preprocessing.
- =org-export-preprocess-final-hook= ::
Hook for preprocessing an export buffer. This is run as the
last thing in the preprocessing buffer, just before returning
the buffer string to the backend.
*** Capture column view into a different file. *** Capture column view into a different file.
The :id parameter for the dynamic block capturing column view The :id parameter for the dynamic block capturing column view

View File

@ -1,5 +1,13 @@
2008-12-31 Carsten Dominik <carsten.dominik@gmail.com> 2008-12-31 Carsten Dominik <carsten.dominik@gmail.com>
* org-exp.el (org-export-preprocess-string): Move the preprocess
hook to after turning on Org-mode.
(org-export-preprocess-after-include-files-hook)
(org-export-preprocess-after-tree-selection-hook)
(org-export-preprocess-before-backend-specifics-hook)
(org-export-preprocess-final-hook): New hooks.
(org-export-preprocess-string): Run the new hooks.
* org.el (org-ctrl-c-minus): Fix indentation for new items. * org.el (org-ctrl-c-minus): Fix indentation for new items.
* org-footnote.el: New file. * org-footnote.el: New file.

View File

@ -298,6 +298,24 @@ drawer names to export."
"Hook for preprocessing an export buffer. "Hook for preprocessing an export buffer.
Pretty much the first thing when exporting is running this hook.") Pretty much the first thing when exporting is running this hook.")
(defvar org-export-preprocess-after-include-files-hook nil
"Hook for preprocessing an export buffer.
This is run after the contents of included files have been inserted.")
(defvar org-export-preprocess-after-tree-selection-hook nil
"Hook for preprocessing an export buffer.
This is run after selection of trees to be exported has happened.
This selection includes tags-based selection, as well as removal
of commented and archived trees.")
(defvar org-export-preprocess-before-backend-specifics-hook nil
"Hook run before backend-specific functions are called during preprocessing.")
(defvar org-export-preprocess-final-hook nil
"Hook for preprocessing an export buffer.
This is run as the last thing in the preprocessing buffer, just before
returning the buffer string to the backend.")
(defgroup org-export-translation nil (defgroup org-export-translation nil
"Options for translating special ascii sequences for the export backends." "Options for translating special ascii sequences for the export backends."
:tag "Org Export Translation" :tag "Org Export Translation"
@ -1477,8 +1495,6 @@ on this string to produce the exported version."
(erase-buffer) (erase-buffer)
(insert string) (insert string)
(setq case-fold-search t) (setq case-fold-search t)
;; Call the hook
(run-hooks 'org-export-preprocess-hook)
;; Remove license-to-kill stuff ;; Remove license-to-kill stuff
;; The caller marks some stuff for killing, stuff that has been ;; The caller marks some stuff for killing, stuff that has been
@ -1487,14 +1503,26 @@ on this string to produce the exported version."
(let ((org-inhibit-startup t)) (org-mode)) (let ((org-inhibit-startup t)) (org-mode))
(setq case-fold-search t) (setq case-fold-search t)
;; Call the hook
(run-hooks 'org-export-preprocess-hook)
(untabify (point-min) (point-max)) (untabify (point-min) (point-max))
;; Handle include files ;; Handle include files, and call a hook
(org-export-handle-include-files) (org-export-handle-include-files)
(run-hooks 'org-export-preprocess-after-include-files-hook)
;; Get rid of excluded trees ;; Get rid of archived trees
(org-export-remove-archived-trees archived-trees)
;; Remove comment environment and comment subtrees
(org-export-remove-comment-blocks-and-subtrees)
;; Get rid of excluded trees, and call a hook
(org-export-handle-export-tags (plist-get parameters :select-tags) (org-export-handle-export-tags (plist-get parameters :select-tags)
(plist-get parameters :exclude-tags)) (plist-get parameters :exclude-tags))
(run-hooks 'org-export-preprocess-after-tree-selection-hook)
;; Handle source code snippets ;; Handle source code snippets
(org-export-replace-src-segments-and-examples backend) (org-export-replace-src-segments-and-examples backend)
@ -1521,9 +1549,6 @@ on this string to produce the exported version."
(goto-char (point-min)) (goto-char (point-min))
(insert (plist-get parameters :add-text) "\n")) (insert (plist-get parameters :add-text) "\n"))
;; Get rid of archived trees
(org-export-remove-archived-trees archived-trees)
;; Remove todo-keywords before exporting, if the user has requested so ;; Remove todo-keywords before exporting, if the user has requested so
(org-export-remove-headline-metadata parameters) (org-export-remove-headline-metadata parameters)
@ -1547,9 +1572,6 @@ on this string to produce the exported version."
(setq target-alist (org-export-attach-captions-and-attributes (setq target-alist (org-export-attach-captions-and-attributes
backend target-alist)) backend target-alist))
;; Remove comment environment and comment subtrees
(org-export-remove-comment-blocks-and-subtrees)
;; Find matches for radio targets and turn them into internal links ;; Find matches for radio targets and turn them into internal links
(org-export-mark-radio-links) (org-export-mark-radio-links)
@ -1573,6 +1595,9 @@ on this string to produce the exported version."
(when org-export-table-remove-special-lines (when org-export-table-remove-special-lines
(org-export-remove-special-table-lines)) (org-export-remove-special-table-lines))
;; Another hook
(run-hooks 'org-export-preprocess-before-backend-specifics-hook)
;; Specific LaTeX stuff ;; Specific LaTeX stuff
(when latexp (when latexp
(require 'org-export-latex nil) (require 'org-export-latex nil)
@ -1589,6 +1614,9 @@ on this string to produce the exported version."
;; Remove or replace comments ;; Remove or replace comments
(org-export-handle-comments (plist-get parameters :comments)) (org-export-handle-comments (plist-get parameters :comments))
;; Run the final hook
(run-hooks 'org-export-preprocess-final-hook)
(setq rtn (buffer-string))) (setq rtn (buffer-string)))
(kill-buffer " org-mode-tmp") (kill-buffer " org-mode-tmp")
rtn)) rtn))