emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Dan Davison <dandavison7@gmail.com>
To: Bastien <bastien.guerry@wikimedia.fr>
Cc: Org <emacs-orgmode@gnu.org>, mail@christianmoe.com
Subject: [PATCH] Re: [BUG] htmlp and latexp
Date: Tue, 22 Feb 2011 11:08:57 -0800	[thread overview]
Message-ID: <m1fwrfnaye.fsf_-_@int200.counsyl.com> (raw)
In-Reply-To: <87d3mpekpg.fsf@gnu.org> (Bastien's message of "Fri, 18 Feb 2011 10:49:31 +0100")

Bastien <bastien.guerry@wikimedia.fr> writes:

> Hi Dan,
>
> Dan Davison <dandavison7@gmail.com> writes:
>
>> I was thinking that if it were defvard in org.el, say as
>>
>> (defvar org-export-current-backend nil)
>>
>> then any code could use (null org-export-current-backend) to test
>> whether org is currently exporting or not. Otherwise, the code has to be
>> certain that it has been called during export if it is going to access
>> the variable.
>
> I agree this would be a good idea.  If you have time, please send a
> patch.  Otherwise, I just put it [somewhere] in my own todo list...

Here's a patch. I note that Eric S pointed out in a separate thread that
org-current-export-file can be used for a similar purpose.

Incidentally, I would suggest that org-current-export-file and
org-current-export-dir are renamed so that they are within the
org-export-* namespace. There are other areas of Org where I think the
naming should be standardised, notably in org-src.el: the distinction
between org-src-* and org-edit-src-* is unclear IMO. I think this is
kind of important, because in learning emacs one does makes use of these
namespace conventions, e.g. C-h v <initial-letters> TAB. How much change
would there be if we demanded that *all* variables defined in org-foo.el
are named within the org-foo-* namespace?

Dan

commit ac9baa44c7c0baeb8ed3133ed79bc22c4eb6acc7
Author: Dan Davison <dandavison7@gmail.com>
Date:   Sun Feb 20 08:55:39 2011 -0800

    New variable storing current export backend symbol, or nil.
    
    * lisp/org-exp.el (org-export-current-backend): Variable to
    hold current export backend symbol when export is in progress.
    (org-export-preprocess-string): Bind `org-export-current-backend' to
    backend symbols during export.
    
    * lisp/org-exp-blocks.el (org-export-blocks-format-ditaa): Dynamically
    scoped variable `backend' renamed as `org-export-current-backend'
    (org-export-blocks-format-dot): Dynamically scoped variable `backend'
    renamed as `org-export-current-backend'
    (org-export-blocks-format-comment): Dynamically scoped variable
    `backend' renamed as `org-export-current-backend'
    
    * lisp/org-exp.el (org-export-convert-protected-spaces): Dynamically
    scoped variable `backend' renamed as `org-export-current-backend'
    
    * lisp/org-publish.el (org-publish-project-alist): Dynamically scoped
    variable `backend' renamed as `org-export-current-backend'
    (org-export-current-backend): Dynamically scoped variable `backend'
    renamed as `org-export-current-backend'
    (org-publish-aux-preprocess): Dynamically scoped variable `backend'
    renamed as `org-export-current-backend'
    
    * lisp/org-special-blocks.el (org-export-current-backend): Dynamically
    scoped variable `backend' renamed as `org-export-current-backend'
    (org-special-blocks-make-special-cookies): Dynamically scoped variable
    `backend' renamed as `org-export-current-backend'

diff --git a/lisp/org-exp-blocks.el b/lisp/org-exp-blocks.el
index 1fac3bf..15549b8 100644
--- a/lisp/org-exp-blocks.el
+++ b/lisp/org-exp-blocks.el
@@ -242,7 +242,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)
@@ -301,7 +301,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)
@@ -333,7 +333,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 9a35b00..e239c25 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 org-export-current-backend)
 
       ;; Export code blocks
       (org-export-blocks-preprocess)
 
       ;; Mark lists with properties
-      (org-export-mark-list-properties backend)
+      (org-export-mark-list-properties org-export-current-backend)
 
       ;; Handle source code snippets
-      (org-export-replace-src-segments-and-examples backend)
+      (org-export-replace-src-segments-and-examples org-export-current-backend)
 
       ;; 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 org-export-current-backend)
 
       ;; 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) org-export-current-backend)
 
       ;; 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 org-export-current-backend)
 
       ;; Protect quoted subtrees
       (org-export-protect-quoted-subtrees)
@@ -1166,7 +1174,7 @@ on this string to produce the exported version."
 
       ;; Attach captions to the correct object
       (setq target-alist (org-export-attach-captions-and-attributes
-			  backend target-alist))
+			  org-export-current-backend target-alist))
 
       ;; Find matches for radio targets and turn them into internal links
       (org-export-mark-radio-links)
@@ -1198,20 +1206,20 @@ on this string to produce the exported version."
       (run-hooks 'org-export-preprocess-before-backend-specifics-hook)
 
       ;; LaTeX-specific preprocessing
-      (when (eq backend 'latex)
+      (when (eq org-export-current-backend 'latex)
 	(require 'org-latex nil)
 	(org-export-latex-preprocess parameters))
 
       ;; ASCII-specific preprocessing
-      (when (eq backend 'ascii)
+      (when (eq org-export-current-backend 'ascii)
 	(org-export-ascii-preprocess parameters))
 
       ;; HTML-specific preprocessing
-      (when (eq backend 'html)
+      (when (eq org-export-current-backend 'html)
 	(org-export-html-preprocess parameters))
 
       ;; DocBook-specific preprocessing
-      (when (eq backend 'docbook)
+      (when (eq org-export-current-backend 'docbook)
 	(require 'org-docbook nil)
 	(org-export-docbook-preprocess parameters))
 
@@ -1567,13 +1575,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))
diff --git a/lisp/org-publish.el b/lisp/org-publish.el
index 649e39a..5bc4f28 100644
--- a/lisp/org-publish.el
+++ b/lisp/org-publish.el
@@ -931,7 +931,7 @@ the project."
 
 ;;; Index generation
 
-(defvar backend) ; dynamically scoped
+(defvar org-export-current-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 +942,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 54fb6cb..f253787 100644
--- a/lisp/org-special-blocks.el
+++ b/lisp/org-special-blocks.el
@@ -45,11 +45,12 @@
 by org-special-blocks.  These blocks will presumably be
 interpreted by other mechanisms.")
 
-(defvar backend) ; dynamically scoped
+(defvar org-export-current-backend) ; dynamically scoped
 (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))




>
> Thanks!

  reply	other threads:[~2011-02-22 19:09 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-15 22:23 [BUG] htmlp and latexp Dan Davison
2011-02-16  8:44 ` Christian Moe
2011-02-16 10:01   ` Bastien
2011-02-16 10:01   ` Bastien
2011-02-16 10:07   ` Dan Davison
2011-02-16 10:44     ` Bastien
2011-02-16 17:11       ` Dan Davison
2011-02-18  9:49         ` Bastien
2011-02-22 19:08           ` Dan Davison [this message]
2011-03-01 19:06             ` [PATCH] " Bastien
2011-03-01 19:09             ` Bastien
2011-03-02  2:01               ` Dan Davison
2011-03-07 15:32                 ` Bastien
2011-02-16 10:03 ` Bastien
2011-02-17  8:46   ` Andreas Leha
2011-02-17 10:19     ` Sébastien Vauban
2011-02-17 10:50     ` Jambunathan K
2011-02-17 23:14       ` Jeff Horn
2011-02-17 23:32         ` Nick Dokos
2011-02-17 23:44         ` Bastien
2011-02-18  8:09         ` Christian Moe
2011-02-18  8:22       ` Andreas Leha
2011-02-18  8:49         ` Bastien
2011-02-18 22:52           ` Jeff Horn

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m1fwrfnaye.fsf_-_@int200.counsyl.com \
    --to=dandavison7@gmail.com \
    --cc=bastien.guerry@wikimedia.fr \
    --cc=emacs-orgmode@gnu.org \
    --cc=mail@christianmoe.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).