Browse Source

Merge branch 'maint'

Bastien Guerry 12 years ago
parent
commit
2e94271bd1
4 changed files with 216 additions and 107 deletions
  1. 106 52
      contrib/lisp/org-e-odt.el
  2. 100 51
      lisp/org-odt.el
  3. 1 1
      mk/default.mk
  4. 9 3
      mk/org-fixup.el

+ 106 - 52
contrib/lisp/org-e-odt.el

@@ -116,6 +116,18 @@
 
 
 ;;; Internal Variables
 ;;; Internal Variables
 
 
+(defconst org-e-odt-lib-dir
+  (file-name-directory load-file-name)
+  "Location of ODT exporter.
+Use this to infer values of `org-e-odt-styles-dir' and
+`org-e-odt-schema-dir'.")
+
+(defvar org-e-odt-data-dir
+  (expand-file-name "../../etc/" org-e-odt-lib-dir)
+  "Data directory for ODT exporter.
+Use this to infer values of `org-e-odt-styles-dir' and
+`org-e-odt-schema-dir'.")
+
 (defconst org-e-odt-special-string-regexps
 (defconst org-e-odt-special-string-regexps
   '(("\\\\-" . "­\\1")		; shy
   '(("\\\\-" . "­\\1")		; shy
     ("---\\([^-]\\)" . "—\\1")	; mdash
     ("---\\([^-]\\)" . "—\\1")	; mdash
@@ -123,37 +135,69 @@
     ("\\.\\.\\." . "…"))		; hellip
     ("\\.\\.\\." . "…"))		; hellip
   "Regular expressions for special string conversion.")
   "Regular expressions for special string conversion.")
 
 
+(defconst org-e-odt-schema-dir-list
+  (list
+   (and org-e-odt-data-dir
+	(expand-file-name "./schema/" org-e-odt-data-dir)) ; bail out
+   (eval-when-compile
+     (and (boundp 'org-e-odt-data-dir) org-e-odt-data-dir ; see make install
+	  (expand-file-name "./schema/" org-e-odt-data-dir))))
+  "List of directories to search for OpenDocument schema files.
+Use this list to set the default value of
+`org-e-odt-schema-dir'.  The entries in this list are
+populated heuristically based on the values of `org-e-odt-lib-dir'
+and `org-e-odt-data-dir'.")
+
+(defconst org-e-odt-styles-dir-list
+  (list
+   (and org-e-odt-data-dir
+	(expand-file-name "./styles/" org-e-odt-data-dir)) ; bail out
+   (eval-when-compile
+     (and (boundp 'org-e-odt-data-dir) org-e-odt-data-dir ; see make install
+	  (expand-file-name "./styles/" org-e-odt-data-dir)))
+   (expand-file-name "../../etc/styles/" org-e-odt-lib-dir) ; git
+   (expand-file-name "./etc/styles/" org-e-odt-lib-dir)  ; elpa
+   (expand-file-name "./org/" data-directory)	       ; system
+   )
+  "List of directories to search for OpenDocument styles files.
+See `org-e-odt-styles-dir'.  The entries in this list are populated
+heuristically based on the values of `org-e-odt-lib-dir' and
+`org-e-odt-data-dir'.")
+
 (defconst org-e-odt-styles-dir
 (defconst org-e-odt-styles-dir
-  (let* ((d (expand-file-name (org-find-library-dir "org-e-odt.el")))
-	 (styles-dir-list (list
-			   (concat d "etc/styles/") ;; ELPA and Git
-			   (concat d "etc/org/")    ;; Org from Emacs
-			   (concat d "../"
-				   (number-to-string emacs-major-version) "."
-				   (number-to-string emacs-minor-version) "/etc/org/")
-			   (concat data-directory "org/"))) ;; Custom install
-	 styles-dir)
-    (setq styles-dir
-	  (car
-	   (delq nil
-		 (mapcar (lambda (sd)
-			   (when (and (file-readable-p
-				       (expand-file-name
-					"OrgOdtContentTemplate.xml" sd))
-				      (file-readable-p
-				       (expand-file-name
-					"OrgOdtStyles.xml" sd)))
-			     sd))
-			 styles-dir-list))))
-    (or (expand-file-name styles-dir)
-	(message "Cannot find factory styles files for Org ODT")))
+  (let* ((styles-dir
+	  (catch 'styles-dir
+	    (message "Debug (org-e-odt): Searching for OpenDocument styles files...")
+	    (mapc (lambda (styles-dir)
+		    (when styles-dir
+		      (message "Debug (org-e-odt): Trying %s..." styles-dir)
+		      (when (and (file-readable-p
+				  (expand-file-name
+				   "OrgOdtContentTemplate.xml" styles-dir))
+				 (file-readable-p
+				  (expand-file-name
+				   "OrgOdtStyles.xml" styles-dir)))
+			(message "Debug (org-e-odt): Using styles under %s"
+				 styles-dir)
+			(throw 'styles-dir styles-dir))))
+		  org-e-odt-styles-dir-list)
+	    nil)))
+    (unless styles-dir
+      (error "Error (org-e-odt): Cannot find factory styles files, aborting"))
+    styles-dir)
   "Directory that holds auxiliary XML files used by the ODT exporter.
   "Directory that holds auxiliary XML files used by the ODT exporter.
 
 
 This directory contains the following XML files -
 This directory contains the following XML files -
-\"OrgOdtStyles.xml\" and \"OrgOdtContentTemplate.xml\".
-These XML files are used as the default values of
-`org-export-odt-styles-file' and
-`org-export-odt-content-template-file'.")
+ \"OrgOdtStyles.xml\" and \"OrgOdtContentTemplate.xml\".  These
+ XML files are used as the default values of
+ `org-e-odt-styles-file' and
+ `org-e-odt-content-template-file'.
+
+The default value of this variable varies depending on the
+version of org in use and is initialized from
+`org-e-odt-styles-dir-list'.  Note that the user could be using org
+from one of: org's own private git repository, GNU ELPA tar or
+standard Emacs.")
 
 
 (defconst org-e-odt-bookmark-prefix "OrgXref.")
 (defconst org-e-odt-bookmark-prefix "OrgXref.")
 
 
@@ -330,26 +374,28 @@ visually."
 ;;;; Document schema
 ;;;; Document schema
 
 
 (defcustom org-e-odt-schema-dir
 (defcustom org-e-odt-schema-dir
-  (let* ((d (expand-file-name (org-find-library-dir "org-e-odt.el")))
-	 (schema-dir-list (list (concat d "../etc/schema/"))) ;; ELPA and Git
-	 schema-dir)
-    (setq schema-dir
-	  (car
-	   (delq nil
-		 (mapcar (lambda (sd)
-			   (when (and (file-readable-p
-				       (expand-file-name
-					"od-manifest-schema-v1.2-cs01.rnc" sd))
-				      (file-readable-p
-				       (expand-file-name
-					"od-schema-v1.2-cs01.rnc" sd))
-				      (file-readable-p
-				       (expand-file-name
-					"schemas.xml" sd)))
-			     sd))
-			 schema-dir-list))))
-    (or schema-dir
-	(message "No OpenDocument schema files installed")))
+  (let* ((schema-dir
+	  (catch 'schema-dir
+	    (message "Debug (org-e-odt): Searching for OpenDocument schema files...")
+	    (mapc
+	     (lambda (schema-dir)
+	       (when schema-dir
+		 (message "Debug (org-e-odt): Trying %s..." schema-dir)
+		 (when (and (file-readable-p
+			     (expand-file-name "od-manifest-schema-v1.2-cs01.rnc"
+					       schema-dir))
+			    (file-readable-p
+			     (expand-file-name "od-schema-v1.2-cs01.rnc"
+					       schema-dir))
+			    (file-readable-p
+			     (expand-file-name "schemas.xml" schema-dir)))
+		   (message "Debug (org-e-odt): Using schema files under %s"
+			    schema-dir)
+		   (throw 'schema-dir schema-dir))))
+	     org-e-odt-schema-dir-list)
+	    (message "Debug (org-e-odt): No OpenDocument schema files installed")
+	    nil)))
+    schema-dir)
   "Directory that contains OpenDocument schema files.
   "Directory that contains OpenDocument schema files.
 
 
 This directory contains:
 This directory contains:
@@ -362,13 +408,15 @@ that `rng-schema-locating-files' is updated and auto-validation
 of OpenDocument XML takes place based on the value
 of OpenDocument XML takes place based on the value
 `rng-nxml-auto-validate-flag'.
 `rng-nxml-auto-validate-flag'.
 
 
-The OASIS schema files are available only in the Org's private
-git repository.  It is *not* bundled with GNU ELPA tar or
-standard Emacs distribution."
+The default value of this variable varies depending on the
+version of org in use and is initialized from
+`org-e-odt-schema-dir-list'.  The OASIS schema files are available
+only in the org's private git repository.  It is *not* bundled
+with GNU ELPA tar or standard Emacs distribution."
   :type '(choice
   :type '(choice
 	  (const :tag "Not set" nil)
 	  (const :tag "Not set" nil)
 	  (directory :tag "Schema directory"))
 	  (directory :tag "Schema directory"))
-  :group 'org-e-odt
+  :group 'org-export-e-odt
   :version "24.1"
   :version "24.1"
   :set
   :set
   (lambda (var value)
   (lambda (var value)
@@ -384,12 +432,17 @@ Also add it to `rng-schema-locating-files'."
 		(file-readable-p
 		(file-readable-p
 		 (expand-file-name "schemas.xml" schema-dir)))
 		 (expand-file-name "schemas.xml" schema-dir)))
 	       schema-dir
 	       schema-dir
-	     (when value (message "No OpenDocument schema files")))))
+	     (when value
+	       (message "Error (org-e-odt): %s has no OpenDocument schema files"
+			value))
+	     nil)))
     (when org-e-odt-schema-dir
     (when org-e-odt-schema-dir
       (eval-after-load 'rng-loc
       (eval-after-load 'rng-loc
 	'(add-to-list 'rng-schema-locating-files
 	'(add-to-list 'rng-schema-locating-files
 		      (expand-file-name "schemas.xml"
 		      (expand-file-name "schemas.xml"
 					org-e-odt-schema-dir))))))
 					org-e-odt-schema-dir))))))
+
+
 ;;;; Document styles
 ;;;; Document styles
 
 
 (defcustom org-e-odt-content-template-file nil
 (defcustom org-e-odt-content-template-file nil
@@ -1788,6 +1841,7 @@ CONTENTS is nil.  INFO is a plist holding contextual information."
 
 
 ;;;; Latex Environment
 ;;;; Latex Environment
 
 
+
 (eval-after-load 'org-odt
 (eval-after-load 'org-odt
   '(ad-deactivate 'org-format-latex-as-mathml))
   '(ad-deactivate 'org-format-latex-as-mathml))
 
 

+ 100 - 51
lisp/org-odt.el

@@ -84,27 +84,52 @@
     ("\\.\\.\\." . "…"))		; hellip
     ("\\.\\.\\." . "…"))		; hellip
   "Regular expressions for special string conversion.")
   "Regular expressions for special string conversion.")
 
 
+(defconst org-odt-lib-dir (file-name-directory load-file-name)
+  "Location of ODT exporter.
+Use this to infer values of `org-odt-styles-dir' and
+`org-export-odt-schema-dir'.")
+
+(defvar org-odt-data-dir nil
+  "Data directory for ODT exporter.
+Use this to infer values of `org-odt-styles-dir' and
+`org-export-odt-schema-dir'.")
+
+(defconst org-odt-schema-dir-list
+  (list
+   (and org-odt-data-dir
+	(expand-file-name "./schema/" org-odt-data-dir)) ; bail out
+   (eval-when-compile
+     (and (boundp 'org-odt-data-dir) org-odt-data-dir ; see make install
+	  (expand-file-name "./schema/" org-odt-data-dir))))
+  "List of directories to search for OpenDocument schema files.
+Use this list to set the default value of
+`org-export-odt-schema-dir'.  The entries in this list are
+populated heuristically based on the values of `org-odt-lib-dir'
+and `org-odt-data-dir'.")
+
 (defcustom org-export-odt-schema-dir
 (defcustom org-export-odt-schema-dir
-  (let* ((d (expand-file-name "../" (org-find-library-dir "org-odt.el")))
-	 (schema-dir-list (list (concat d "etc/schema/"))) ;; ELPA and Git
-	 schema-dir)
-    (setq schema-dir
-	  (car
-	   (delq nil
-		 (mapcar (lambda (sd)
-			   (when (and (file-readable-p
-				       (expand-file-name
-					"od-manifest-schema-v1.2-cs01.rnc" sd))
-				      (file-readable-p
-				       (expand-file-name
-					"od-schema-v1.2-cs01.rnc" sd))
-				      (file-readable-p
-				       (expand-file-name
-					"schemas.xml" sd)))
-			     sd))
-			 schema-dir-list))))
-    (or schema-dir
-	(message "No OpenDocument schema files installed")))
+  (let* ((schema-dir
+	  (catch 'schema-dir
+	    (message "Debug (org-odt): Searching for OpenDocument schema files...")
+	    (mapc
+	     (lambda (schema-dir)
+	       (when schema-dir
+		 (message "Debug (org-odt): Trying %s..." schema-dir)
+		 (when (and (file-readable-p
+			     (expand-file-name "od-manifest-schema-v1.2-cs01.rnc"
+					       schema-dir))
+			    (file-readable-p
+			     (expand-file-name "od-schema-v1.2-cs01.rnc"
+					       schema-dir))
+			    (file-readable-p
+			     (expand-file-name "schemas.xml" schema-dir)))
+		   (message "Debug (org-odt): Using schema files under %s"
+			    schema-dir)
+		   (throw 'schema-dir schema-dir))))
+	     org-odt-schema-dir-list)
+	    (message "Debug (org-odt): No OpenDocument schema files installed")
+	    nil)))
+    schema-dir)
   "Directory that contains OpenDocument schema files.
   "Directory that contains OpenDocument schema files.
 
 
 This directory contains:
 This directory contains:
@@ -117,9 +142,11 @@ that `rng-schema-locating-files' is updated and auto-validation
 of OpenDocument XML takes place based on the value
 of OpenDocument XML takes place based on the value
 `rng-nxml-auto-validate-flag'.
 `rng-nxml-auto-validate-flag'.
 
 
-The OASIS schema files are available only in the Org's private
-git repository.  It is *not* bundled with GNU ELPA tar or
-standard Emacs distribution."
+The default value of this variable varies depending on the
+version of org in use and is initialized from
+`org-odt-schema-dir-list'.  The OASIS schema files are available
+only in the org's private git repository.  It is *not* bundled
+with GNU ELPA tar or standard Emacs distribution."
   :type '(choice
   :type '(choice
 	  (const :tag "Not set" nil)
 	  (const :tag "Not set" nil)
 	  (directory :tag "Schema directory"))
 	  (directory :tag "Schema directory"))
@@ -139,44 +166,66 @@ Also add it to `rng-schema-locating-files'."
 		(file-readable-p
 		(file-readable-p
 		 (expand-file-name "schemas.xml" schema-dir)))
 		 (expand-file-name "schemas.xml" schema-dir)))
 	       schema-dir
 	       schema-dir
-	     (when value (message "No OpenDocument schema files")))))
+	     (when value
+	       (message "Error (org-odt): %s has no OpenDocument schema files"
+			value))
+	     nil)))
     (when org-export-odt-schema-dir
     (when org-export-odt-schema-dir
       (eval-after-load 'rng-loc
       (eval-after-load 'rng-loc
 	'(add-to-list 'rng-schema-locating-files
 	'(add-to-list 'rng-schema-locating-files
 		      (expand-file-name "schemas.xml"
 		      (expand-file-name "schemas.xml"
 					org-export-odt-schema-dir))))))
 					org-export-odt-schema-dir))))))
 
 
+(defconst org-odt-styles-dir-list
+  (list
+   (and org-odt-data-dir
+	(expand-file-name "./styles/" org-odt-data-dir)) ; bail out
+   (eval-when-compile
+     (and (boundp 'org-odt-data-dir) org-odt-data-dir ; see make install
+	  (expand-file-name "./styles/" org-odt-data-dir)))
+   (expand-file-name "../etc/styles/" org-odt-lib-dir) ; git
+   (expand-file-name "./etc/styles/" org-odt-lib-dir)  ; elpa
+   (expand-file-name "./org/" data-directory)	       ; system
+   )
+  "List of directories to search for OpenDocument styles files.
+See `org-odt-styles-dir'.  The entries in this list are populated
+heuristically based on the values of `org-odt-lib-dir' and
+`org-odt-data-dir'.")
+
 (defconst org-odt-styles-dir
 (defconst org-odt-styles-dir
-  (let* ((d (expand-file-name "../" (org-find-library-dir "org-odt.el")))
-	 (styles-dir-list (list
-			   (concat d "etc/styles/") ;; ELPA and Git
-			   (concat d "etc/org/")    ;; Org from Emacs
-			   (concat d "../"
-				   (number-to-string emacs-major-version) "."
-				   (number-to-string emacs-minor-version) "/etc/org/")
-			   (concat data-directory "org/"))) ;; Custom install
-	 styles-dir)
-    (setq styles-dir
-	  (car
-	   (delq nil
-		 (mapcar (lambda (sd)
-			   (when (and (file-readable-p
-				       (expand-file-name
-					"OrgOdtContentTemplate.xml" sd))
-				      (file-readable-p
-				       (expand-file-name
-					"OrgOdtStyles.xml" sd)))
-			     sd))
-			 styles-dir-list))))
-    (or (expand-file-name styles-dir)
-	(message "Cannot find factory styles files for Org ODT, aborting")))
+  (let* ((styles-dir
+	  (catch 'styles-dir
+	    (message "Debug (org-odt): Searching for OpenDocument styles files...")
+	    (mapc (lambda (styles-dir)
+		    (when styles-dir
+		      (message "Debug (org-odt): Trying %s..." styles-dir)
+		      (when (and (file-readable-p
+				  (expand-file-name
+				   "OrgOdtContentTemplate.xml" styles-dir))
+				 (file-readable-p
+				  (expand-file-name
+				   "OrgOdtStyles.xml" styles-dir)))
+			(message "Debug (org-odt): Using styles under %s"
+				 styles-dir)
+			(throw 'styles-dir styles-dir))))
+		  org-odt-styles-dir-list)
+	    nil)))
+    (unless styles-dir
+      (error "Error (org-odt): Cannot find factory styles files, aborting"))
+    styles-dir)
   "Directory that holds auxiliary XML files used by the ODT exporter.
   "Directory that holds auxiliary XML files used by the ODT exporter.
 
 
 This directory contains the following XML files -
 This directory contains the following XML files -
-\"OrgOdtStyles.xml\" and \"OrgOdtContentTemplate.xml\".
-These XML files are used as the default values of
-`org-export-odt-styles-file' and
-`org-export-odt-content-template-file'.")
+ \"OrgOdtStyles.xml\" and \"OrgOdtContentTemplate.xml\".  These
+ XML files are used as the default values of
+ `org-export-odt-styles-file' and
+ `org-export-odt-content-template-file'.
+
+The default value of this variable varies depending on the
+version of org in use and is initialized from
+`org-odt-styles-dir-list'.  Note that the user could be using org
+from one of: org's own private git repository, GNU ELPA tar or
+standard Emacs.")
 
 
 (defvar org-odt-file-extensions
 (defvar org-odt-file-extensions
   '(("odt" . "OpenDocument Text")
   '(("odt" . "OpenDocument Text")

+ 1 - 1
mk/default.mk

@@ -91,7 +91,7 @@ MAKE_ORG_INSTALL = $(BATCHL) \
 MAKE_ORG_VERSION = $(BATCHL) \
 MAKE_ORG_VERSION = $(BATCHL) \
 	  --eval '(load "org-compat.el")' \
 	  --eval '(load "org-compat.el")' \
 	  --eval '(load "../mk/org-fixup.el")' \
 	  --eval '(load "../mk/org-fixup.el")' \
-	  --eval '(org-make-org-version "$(ORGVERSION)" "$(GITVERSION)")'
+	  --eval '(org-make-org-version "$(ORGVERSION)" "$(GITVERSION)" "$(datadir)")'
 
 
 # How to byte-compile the whole source directory
 # How to byte-compile the whole source directory
 ELCDIR	= $(BATCHL) \
 ELCDIR	= $(BATCHL) \

+ 9 - 3
mk/org-fixup.el

@@ -27,7 +27,7 @@
 (require 'autoload)
 (require 'autoload)
 (require 'org-compat "org-compat.el")
 (require 'org-compat "org-compat.el")
 
 
-(defun org-make-org-version (org-release org-git-version)
+(defun org-make-org-version (org-release org-git-version odt-dir)
   "Make the file org-version.el in the current directory.
   "Make the file org-version.el in the current directory.
 This function is internally used by the build system and should
 This function is internally used by the build system and should
 be used by foreign build systems or installers to produce this
 be used by foreign build systems or installers to produce this
@@ -51,6 +51,9 @@ the Git work tree)."
   Inserted by installing org-mode or when a release is made.\"
   Inserted by installing org-mode or when a release is made.\"
    (let ((org-git-version \"" org-git-version "\"))
    (let ((org-git-version \"" org-git-version "\"))
      org-git-version))
      org-git-version))
+;;;\#\#\#autoload
+\(defvar org-odt-data-dir \"" odt-dir "\"
+  \"The location of ODT styles.\")
 \f\n\(provide 'org-version\)
 \f\n\(provide 'org-version\)
 \f\n;; Local Variables:\n;; version-control: never
 \f\n;; Local Variables:\n;; version-control: never
 ;; no-byte-compile: t
 ;; no-byte-compile: t
@@ -84,12 +87,15 @@ force re-compilation.  This function is provided for easier
 manual install when the build system can't be used."
 manual install when the build system can't be used."
   (let* ((origin default-directory)
   (let* ((origin default-directory)
 	 (dirlisp (org-find-library-dir "org"))
 	 (dirlisp (org-find-library-dir "org"))
-	 (dirorg (concat dirlisp "../" )))
+	 (dirorg (concat dirlisp "../" ))
+	 (dirodt (if (boundp 'org-odt-data-dir)
+		     org-odt-data-dir
+		   (concat dirorg "etc/"))))
     (unwind-protect
     (unwind-protect
 	(progn
 	(progn
 	  (cd dirlisp)
 	  (cd dirlisp)
 	  (org-fixup)
 	  (org-fixup)
-	  (org-make-org-version (org-release) (org-git-version))
+	  (org-make-org-version (org-release) (org-git-version) dirodt)
 	  (org-make-org-loaddefs)
 	  (org-make-org-loaddefs)
 	  (when compile (byte-recompile-directory dirlisp 0 force)))
 	  (when compile (byte-recompile-directory dirlisp 0 force)))
       (cd origin))))
       (cd origin))))