diff options
author | Bastien Guerry <bzg@altern.org> | 2011-03-01 20:01:42 +0100 |
---|---|---|
committer | Bastien Guerry <bzg@altern.org> | 2011-03-01 20:01:42 +0100 |
commit | 99675ffead44e32f4959909a657b88831fe33703 (patch) | |
tree | 0f7e82a2e1daea8474043989d6b68791ca04e5cb | |
parent | 03a6844054e73d8f8f5e1f02f780d9129ff019fd (diff) | |
download | org-mode-99675ffead44e32f4959909a657b88831fe33703.tar.gz |
Use `org-export-current-backend' whenever possible.
* org-special-blocks.el
(org-special-blocks-make-special-cookies): Use
`org-export-current-backend'.
* org-publish.el (org-publish-aux-preprocess): Use
`org-export-current-backend'.
* org-inlinetask.el (org-inlinetask-export-handler): Use
`org-export-current-backend'.
* org-exp.el (org-export-current-backend): New variable.
(org-export-preprocess-string)
(org-export-format-drawer-function)
(org-export-remove-or-extract-drawers)
(org-export-format-drawer)
(org-export-convert-protected-spaces)
(org-export-select-backend-specific-text)
(org-export-mark-list-end, org-export-mark-list-properties)
(org-export-attach-captions-and-attributes)
(org-export-replace-src-segments-and-examples)
(org-export-format-source-code-or-example)
(org-export-number-lines): Use the new global variable instead
of a local variable.
* org-exp-blocks.el (org-export-blocks-format-ditaa)
(org-export-blocks-format-dot)
(org-export-blocks-format-comment): Use
`org-export-current-backend'.
-rw-r--r-- | lisp/org-exp-blocks.el | 9 | ||||
-rw-r--r-- | lisp/org-exp.el | 106 | ||||
-rw-r--r-- | lisp/org-inlinetask.el | 5 | ||||
-rw-r--r-- | lisp/org-publish.el | 3 | ||||
-rw-r--r-- | lisp/org-special-blocks.el | 5 |
5 files changed, 66 insertions, 62 deletions
diff --git a/lisp/org-exp-blocks.el b/lisp/org-exp-blocks.el index df41c40..8b73ba6 100644 --- a/lisp/org-exp-blocks.el +++ b/lisp/org-exp-blocks.el @@ -76,8 +76,6 @@ (require 'cl)) (require 'org) -(defvar backend) ; dynamically scoped from caller - (defvar org-exp-blocks-block-regexp (concat "^\\([ \t]*\\)#\\+begin_\\(\\S-+\\)" @@ -222,6 +220,7 @@ which defaults to the value of `org-export-blocks-witheld'." (file-name-directory (or load-file-name buffer-file-name))))))) "Path to the ditaa jar executable.") +(defvar org-export-current-backend) ; dynamically bound in org-exp.el (defun org-export-blocks-format-ditaa (body &rest headers) "DEPRECATED: use begin_src ditaa code blocks @@ -250,7 +249,7 @@ passed to the ditaa utility as command line arguments." "\n"))) (prog1 (cond - ((member backend '(html latex docbook)) + ((member org-export-current-backend '(html latex docbook)) (unless (file-exists-p out-file) (mapc ;; remove old hashed versions of this file (lambda (file) @@ -309,7 +308,7 @@ digraph data_relationships { (out-file (concat (car out-file-parts) "_" hash "." (cdr out-file-parts)))) (prog1 (cond - ((member backend '(html latex docbook)) + ((member org-export-current-backend '(html latex docbook)) (unless (file-exists-p out-file) (mapc ;; remove old hashed versions of this file (lambda (file) @@ -341,7 +340,7 @@ other backends, it converts the comment into an EXAMPLE segment." (let ((owner (if headers (car headers))) (title (if (cdr headers) (mapconcat 'identity (cdr headers) " ")))) (cond - ((eq backend 'html) ;; We are exporting to HTML + ((eq org-export-current-backend 'html) ;; We are exporting to HTML (concat "#+BEGIN_HTML\n" "<div class=\"org-comment\"" (if owner (format " id=\"org-comment-%s\" " owner)) diff --git a/lisp/org-exp.el b/lisp/org-exp.el index f950183..8eb1fbf 100644 --- a/lisp/org-exp.el +++ b/lisp/org-exp.el @@ -584,6 +584,14 @@ table.el tables." (defconst org-level-max 20) +(defvar org-export-current-backend nil + "During export, this will be bound to a symbol such as 'html, + 'latex, 'docbook, 'ascii, etc, indicating which of the export + backends is in use. Otherwise it has the value nil. Users + should not attempt to change the value of this variable + directly, but it can be used in code to test whether export is + in progress, and if so, what the backend is.") + (defvar org-current-export-file nil) ; dynamically scoped parameter (defvar org-current-export-dir nil) ; dynamically scoped parameter (defvar org-export-opt-plist nil @@ -1033,7 +1041,7 @@ to export. It then creates a temporary buffer where it does its job. The result is then again returned as a string, and the exporter works on this string to produce the exported version." (interactive) - (let* ((backend (plist-get parameters :for-backend)) + (let* ((org-export-current-backend (plist-get parameters :for-backend)) (archived-trees (plist-get parameters :archived-trees)) (inhibit-read-only t) (drawers org-drawers) @@ -1091,22 +1099,22 @@ on this string to produce the exported version." ;; Change lists ending. Other parts of export may insert blank ;; lines and lists' structure could be altered. - (org-export-mark-list-end backend) + (org-export-mark-list-end) ;; Export code blocks (org-export-blocks-preprocess) ;; Mark lists with properties - (org-export-mark-list-properties backend) + (org-export-mark-list-properties) ;; Handle source code snippets - (org-export-replace-src-segments-and-examples backend) + (org-export-replace-src-segments-and-examples) ;; Protect short examples marked by a leading colon (org-export-protect-colon-examples) ;; Protected spaces - (org-export-convert-protected-spaces backend) + (org-export-convert-protected-spaces) ;; Normalize footnotes (when (plist-get parameters :footnotes) @@ -1122,7 +1130,7 @@ on this string to produce the exported version." ;; Get rid of drawers (org-export-remove-or-extract-drawers - drawers (plist-get parameters :drawers) backend) + drawers (plist-get parameters :drawers)) ;; Get the correct stuff before the first headline (when (plist-get parameters :skip-before-1st-heading) @@ -1145,7 +1153,7 @@ on this string to produce the exported version." ;; Select and protect backend specific stuff, throw away stuff ;; that is specific for other backends (run-hooks 'org-export-preprocess-before-selecting-backend-code-hook) - (org-export-select-backend-specific-text backend) + (org-export-select-backend-specific-text) ;; Protect quoted subtrees (org-export-protect-quoted-subtrees) @@ -1165,8 +1173,7 @@ on this string to produce the exported version." (org-export-remove-timestamps)) ;; Attach captions to the correct object - (setq target-alist (org-export-attach-captions-and-attributes - backend target-alist)) + (setq target-alist (org-export-attach-captions-and-attributes target-alist)) ;; Find matches for radio targets and turn them into internal links (org-export-mark-radio-links) @@ -1198,7 +1205,7 @@ on this string to produce the exported version." (run-hooks 'org-export-preprocess-before-backend-specifics-hook) ;; Backend-specific preprocessing - (let* ((backend-name (symbol-name backend)) + (let* ((backend-name (symbol-name org-export-current-backend)) (f (intern (format "org-export-%s-preprocess" backend-name)))) (require (intern (concat "org-" backend-name)) nil) (funcall f parameters)) @@ -1374,17 +1381,16 @@ the current file." The function must accept three parameters: NAME the drawer name, like \"PROPERTIES\" CONTENT the content of the drawer. - BACKEND one of the symbols html, docbook, latex, ascii, xoxo +You can check the export backend through `org-export-current-backend'. The function should return the text to be inserted into the buffer. If this is nil, `org-export-format-drawer' is used as a default.") -(defun org-export-remove-or-extract-drawers (all-drawers exp-drawers backend) +(defun org-export-remove-or-extract-drawers (all-drawers exp-drawers) "Remove drawers, or extract and format the content. ALL-DRAWERS is a list of all drawer names valid in the current buffer. EXP-DRAWERS can be t to keep all drawer contents, or a list of drawers whose content to keep. Any drawers that are in ALL-DRAWERS but not in -EXP-DRAWERS will be removed. -BACKEND is the current export backend." +EXP-DRAWERS will be removed." (goto-char (point-min)) (let ((re (concat "^[ \t]*:\\(" (mapconcat 'identity all-drawers "\\|") @@ -1408,10 +1414,10 @@ BACKEND is the current export backend." (member name exp-drawers)) (setq content (funcall (or org-export-format-drawer-function 'org-export-format-drawer) - name content backend)) + name content)) (insert content))))))) -(defun org-export-format-drawer (name content backend) +(defun org-export-format-drawer (name content) "Format the content of a drawer as a colon example." (if (string-match "[ \t]+\\'" content) (setq content (substring content (match-beginning 0)))) @@ -1547,7 +1553,7 @@ from the buffer." (add-text-properties (point) (org-end-of-subtree t) '(org-protected t))))) -(defun org-export-convert-protected-spaces (backend) +(defun org-export-convert-protected-spaces () "Convert strings like \\____ to protected spaces in all backends." (goto-char (point-min)) (while (re-search-forward "\\\\__+" nil t) @@ -1555,13 +1561,13 @@ from the buffer." (replace-match (org-add-props (cond - ((eq backend 'latex) + ((eq org-export-current-backend 'latex) (format "\\hspace{%dex}" (- (match-end 0) (match-beginning 0)))) - ((eq backend 'html) + ((eq org-export-current-backend 'html) (org-add-props (match-string 0) nil 'org-whitespace (- (match-end 0) (match-beginning 0)))) - ;; ((eq backend 'docbook)) - ((eq backend 'ascii) + ;; ((eq org-export-current-backend 'docbook)) + ((eq org-export-current-backend 'ascii) (org-add-props (match-string 0) '(org-whitespace t))) (t (make-string (- (match-end 0) (match-beginning 0)) ?\ ))) '(org-protected t)) @@ -1589,7 +1595,7 @@ from the buffer." (add-text-properties beg (if (bolp) (1- (point)) (point)) '(org-protected t))))) -(defun org-export-select-backend-specific-text (backend) +(defun org-export-select-backend-specific-text () (let ((formatters '((docbook "DOCBOOK" "BEGIN_DOCBOOK" "END_DOCBOOK") (html "HTML" "BEGIN_HTML" "END_HTML") @@ -1605,7 +1611,7 @@ from the buffer." (goto-char (point-min)) (while (re-search-forward (concat "^\\([ \t]*\\)#\\+" (cadr fmt) ":[ \t]*\\(.*\\)") nil t) - (if (not (eq (car fmt) backend)) + (if (not (eq (car fmt) org-export-current-backend)) (delete-region (point-at-bol) (min (1+ (point-at-eol)) (point-max))) (replace-match "\\1\\2" t) (add-text-properties @@ -1618,7 +1624,7 @@ from the buffer." (while (re-search-forward (concat "^\\([ \t]*\\)#\\+attr_" (cadr fmt) ":[ \t]*\\(.*\\)") nil t) (setq ind (org-get-indentation)) - (when (not (eq (car fmt) backend)) + (when (not (eq (car fmt) org-export-current-backend)) (delete-region (point-at-bol) (min (1+ (point-at-eol)) (point-max))))) ;; Handle #+begin_backend and #+end_backend stuff (goto-char (point-min)) @@ -1629,7 +1635,7 @@ from the buffer." (when (re-search-forward (concat "^[ \t]*#\\+" (cadddr fmt) "\\>.*\n?") nil t) (setq end (match-end 0) end-content (match-beginning 0)) - (if (eq (car fmt) backend) + (if (eq (car fmt) org-export-current-backend) ;; yes, keep this (progn (add-text-properties @@ -1666,9 +1672,9 @@ These special cookies will later be interpreted by the backend." (delete-region beg end) (insert (org-add-props content nil 'original-indentation ind)))))) -(defun org-export-mark-list-end (backend) +(defun org-export-mark-list-end () "Mark all list endings with a special string." - (unless (eq backend 'ascii) + (unless (eq org-export-current-backend 'ascii) (mapc (lambda (e) ;; For each type allowing list export, find every list, remove @@ -1697,7 +1703,7 @@ These special cookies will later be interpreted by the backend." (list 'original-indentation top-ind))))))) (cons nil org-list-export-context)))) -(defun org-export-mark-list-properties (backend) +(defun org-export-mark-list-properties () "Mark list with special properties. These special properties will later be interpreted by the backend." (let ((mark-list @@ -1750,7 +1756,7 @@ These special properties will later be interpreted by the backend." ;; Following property is used by LaTeX exporter. (add-text-properties top (point) (list 'list-context ctxt))))))) ;; Mark lists except for backends not interpreting them. - (unless (eq backend 'ascii) + (unless (eq org-export-current-backend 'ascii) (let ((org-list-end-re "^ORG-LIST-END-MARKER\n")) (mapc (lambda (e) @@ -1759,7 +1765,7 @@ These special properties will later be interpreted by the backend." (when (eq (nth 2 (org-list-context)) e) (funcall mark-list e)))) (cons nil org-list-export-context)))))) -(defun org-export-attach-captions-and-attributes (backend target-alist) +(defun org-export-attach-captions-and-attributes (target-alist) "Move #+CAPTION, #+ATTR_BACKEND, and #+LABEL text into text properties. If the next thing following is a table, add the text properties to the first table line. If it is a link, add it to the line containing the link." @@ -1769,7 +1775,7 @@ table line. If it is a link, add it to the line containing the link." (let ((case-fold-search t) (re (concat "^[ \t]*#\\+caption:[ \t]+\\(.*\\)" "\\|" - "^[ \t]*#\\+attr_" (symbol-name backend) ":[ \t]+\\(.*\\)" + "^[ \t]*#\\+attr_" (symbol-name org-export-current-backend) ":[ \t]+\\(.*\\)" "\\|" "^[ \t]*#\\+label:[ \t]+\\(.*\\)" "\\|" @@ -2318,7 +2324,7 @@ in the list) and remove property and value from the list in LISTVAR." (defvar org-export-last-code-line-counter-value 0) -(defun org-export-replace-src-segments-and-examples (backend) +(defun org-export-replace-src-segments-and-examples () "Replace source code segments with special code for export." (setq org-export-last-code-line-counter-value 0) (let ((case-fold-search t) @@ -2351,7 +2357,7 @@ in the list) and remove property and value from the list in LISTVAR." caption (get-text-property 0 'org-caption (match-string 0)))) (setq trans (org-export-format-source-code-or-example - backend lang code opts indent caption)) + lang code opts indent caption)) (replace-match trans t t)))) (defvar org-export-latex-verbatim-wrap) ;; defined in org-latex.el @@ -2364,7 +2370,7 @@ in the list) and remove property and value from the list in LISTVAR." (defvar org-export-latex-minted-options) ;; defined in org-latex.el (defun org-export-format-source-code-or-example - (backend lang code &optional opts indent caption) + (lang code &optional opts indent caption) "Format CODE from language LANG and return it formatted for export. If LANG is nil, do not add any fontification. OPTS contains formatting options, like `-n' for triggering numbering lines, @@ -2390,7 +2396,7 @@ INDENT was the original indentation of the block." (org-count-lines code)) fmt (if (string-match "-l[ \t]+\"\\([^\"\n]+\\)\"" opts) (match-string 1 opts))) - (when (and textareap (eq backend 'html)) + (when (and textareap (eq org-export-current-backend 'html)) ;; we cannot use numbering or highlighting. (setq num nil cont nil lang nil)) (if keepp (setq rpllbl 'keep)) @@ -2410,15 +2416,15 @@ INDENT was the original indentation of the block." ;; Now backend-specific coding (setq rtn (cond - ((eq backend 'docbook) - (setq rtn (org-export-number-lines rtn 'docbook 0 0 num cont rpllbl fmt)) + ((eq org-export-current-backend 'docbook) + (setq rtn (org-export-number-lines rtn 0 0 num cont rpllbl fmt)) (concat "\n#+BEGIN_DOCBOOK\n" (org-add-props (concat "<programlisting><![CDATA[" rtn "]]></programlisting>\n") '(org-protected t org-example t)) "#+END_DOCBOOK\n")) - ((eq backend 'html) + ((eq org-export-current-backend 'html) ;; We are exporting to HTML (when lang (if (featurep 'xemacs) @@ -2482,13 +2488,12 @@ INDENT was the original indentation of the block." (setq rtn (buffer-string))) (setq rtn (concat "<pre class=\"example\">\n" rtn "</pre>\n")))) (unless textareap - (setq rtn (org-export-number-lines rtn 'html 1 1 num - cont rpllbl fmt))) + (setq rtn (org-export-number-lines rtn 1 1 num cont rpllbl fmt))) (if (string-match "\\(\\`<[^>]*>\\)\n" rtn) (setq rtn (replace-match "\\1" t nil rtn))) (concat "\n#+BEGIN_HTML\n" (org-add-props rtn '(org-protected t org-example t)) "\n#+END_HTML\n\n")) - ((eq backend 'latex) - (setq rtn (org-export-number-lines rtn 'latex 0 0 num cont rpllbl fmt)) + ((eq org-export-current-backend 'latex) + (setq rtn (org-export-number-lines rtn 0 0 num cont rpllbl fmt)) (concat "#+BEGIN_LaTeX\n" (org-add-props @@ -2544,9 +2549,9 @@ INDENT was the original indentation of the block." rtn (cdr org-export-latex-verbatim-wrap)))) '(org-protected t org-example t)) "#+END_LaTeX\n")) - ((eq backend 'ascii) + ((eq org-export-current-backend 'ascii) ;; This is not HTML or LaTeX, so just make it an example. - (setq rtn (org-export-number-lines rtn 'ascii 0 0 num cont rpllbl fmt)) + (setq rtn (org-export-number-lines rtn 0 0 num cont rpllbl fmt)) (concat caption "\n" "#+BEGIN_ASCII\n" (org-add-props @@ -2560,8 +2565,7 @@ INDENT was the original indentation of the block." "#+END_ASCII\n")))) (org-add-props rtn nil 'original-indentation indent)))) -(defun org-export-number-lines (text backend - &optional skip1 skip2 number cont +(defun org-export-number-lines (text &optional skip1 skip2 number cont replace-labels label-format) (setq skip1 (or skip1 0) skip2 (or skip2 0)) (if (not cont) (setq org-export-last-code-line-counter-value 0)) @@ -2577,11 +2581,11 @@ INDENT was the original indentation of the block." (fmt (format "%%%dd: " (length (number-to-string nmax)))) (fm (cond - ((eq backend 'html) (format "<span class=\"linenr\">%s</span>" + ((eq org-export-current-backend 'html) (format "<span class=\"linenr\">%s</span>" fmt)) - ((eq backend 'ascii) fmt) - ((eq backend 'latex) fmt) - ((eq backend 'docbook) fmt) + ((eq org-export-current-backend 'ascii) fmt) + ((eq org-export-current-backend 'latex) fmt) + ((eq org-export-current-backend 'docbook) fmt) (t ""))) (label-format (or label-format org-coderef-label-format)) (label-pre (if (string-match "%s" label-format) @@ -2626,7 +2630,7 @@ INDENT was the original indentation of the block." (delete-region (match-beginning 2) (match-end 2)) (insert "(" ref ")") (push (cons ref (concat "(" ref ")")) org-export-code-refs))) - (when (eq backend 'html) + (when (eq org-export-current-backend 'html) (save-excursion (beginning-of-line 1) (insert (format "<span id=\"coderef-%s\" class=\"coderef-off\">" diff --git a/lisp/org-inlinetask.el b/lisp/org-inlinetask.el index 31a5dbe..6bf38df 100644 --- a/lisp/org-inlinetask.el +++ b/lisp/org-inlinetask.el @@ -252,7 +252,7 @@ This assumes the point is inside an inline task." (re-search-backward (org-inlinetask-outline-regexp) nil t) (- (match-end 1) (match-beginning 1)))) -(defvar backend) ; dynamically scoped into the next function +(defvar org-export-current-backend) ; dynamically bound in org-exp.el (defun org-inlinetask-export-handler () "Handle headlines with level larger or equal to `org-inlinetask-min-level'. Either remove headline and meta data, or do special formatting." @@ -302,7 +302,8 @@ Either remove headline and meta data, or do special formatting." (priority (or (match-string 3 headline) "")) (heading (or (match-string 4 headline) "")) (tags (or (match-string 5 headline) "")) - (backend-spec (assq backend org-inlinetask-export-templates)) + (backend-spec (assq org-export-current-backend + org-inlinetask-export-templates)) (format-str (org-add-props (nth 1 backend-spec) '(org-protected t))) (tokens (cadr (nth 2 backend-spec))) diff --git a/lisp/org-publish.el b/lisp/org-publish.el index 649e39a..97fe956 100644 --- a/lisp/org-publish.el +++ b/lisp/org-publish.el @@ -931,7 +931,6 @@ the project." ;;; Index generation -(defvar backend) ; dynamically scoped (defun org-publish-aux-preprocess () "Find index entries and write them to an .orgx file." (let ((case-fold-search t) @@ -942,7 +941,7 @@ the project." (re-search-forward "^[ \t]*#\\+index:[ \t]*\\(.*?\\)[ \t]*$" nil t) (> (match-end 1) (match-beginning 1))) (setq entry (match-string 1)) - (when (eq backend 'latex) + (when (eq org-export-current-backend 'latex) (replace-match (format "\\index{%s}" entry) t t)) (save-excursion (ignore-errors (org-back-to-heading t)) diff --git a/lisp/org-special-blocks.el b/lisp/org-special-blocks.el index fa59657..dbdcd40 100644 --- a/lisp/org-special-blocks.el +++ b/lisp/org-special-blocks.el @@ -47,11 +47,12 @@ by org-special-blocks. These blocks will presumably be interpreted by other mechanisms.") -(defvar backend) ; dynamically scoped +(defvar org-export-current-backend) ; dynamically bound in org-exp.el (defun org-special-blocks-make-special-cookies () "Adds special cookies when #+begin_foo and #+end_foo tokens are seen. This is run after a few special cases are taken care of." - (when (or (eq backend 'html) (eq backend 'latex)) + (when (or (eq org-export-current-backend 'html) + (eq org-export-current-backend 'latex)) (goto-char (point-min)) (while (re-search-forward "^[ \t]*#\\+\\(begin\\|end\\)_\\(.*\\)$" nil t) (unless (org-string-match-p org-special-blocks-ignore-regexp (match-string 2)) |