summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Guerry <bzg@altern.org>2012-10-03 10:15:35 (GMT)
committer Bastien Guerry <bzg@altern.org>2012-10-03 10:15:35 (GMT)
commit2e94271bd1a77f01b98d038aa28568bde175b740 (patch)
tree41b9dd933c96d2b49930e5e6ecd67bdf27968f2d
parent34681fb135286fb11c0a80fb81a281e866d4152a (diff)
parent21478e1733e01cdf3a3f91e8b56f0d3aa3617fd5 (diff)
downloadorg-mode-2e94271bd1a77f01b98d038aa28568bde175b740.zip
org-mode-2e94271bd1a77f01b98d038aa28568bde175b740.tar.gz
Merge branch 'maint'
-rw-r--r--contrib/lisp/org-e-odt.el158
-rw-r--r--lisp/org-odt.el151
-rw-r--r--mk/default.mk2
-rw-r--r--mk/org-fixup.el12
4 files changed, 216 insertions, 107 deletions
diff --git a/contrib/lisp/org-e-odt.el b/contrib/lisp/org-e-odt.el
index 28799e3..0ce2e69 100644
--- a/contrib/lisp/org-e-odt.el
+++ b/contrib/lisp/org-e-odt.el
@@ -116,6 +116,18 @@
;;; 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
'(("\\\\-" . "&#x00ad;\\1") ; shy
("---\\([^-]\\)" . "&#x2014;\\1") ; mdash
@@ -123,37 +135,69 @@
("\\.\\.\\." . "&#x2026;")) ; hellip
"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
- (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.
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.")
@@ -330,26 +374,28 @@ visually."
;;;; Document schema
(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.
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
`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
(const :tag "Not set" nil)
(directory :tag "Schema directory"))
- :group 'org-e-odt
+ :group 'org-export-e-odt
:version "24.1"
:set
(lambda (var value)
@@ -384,12 +432,17 @@ Also add it to `rng-schema-locating-files'."
(file-readable-p
(expand-file-name "schemas.xml" 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
(eval-after-load 'rng-loc
'(add-to-list 'rng-schema-locating-files
(expand-file-name "schemas.xml"
org-e-odt-schema-dir))))))
+
+
;;;; Document styles
(defcustom org-e-odt-content-template-file nil
@@ -1788,6 +1841,7 @@ CONTENTS is nil. INFO is a plist holding contextual information."
;;;; Latex Environment
+
(eval-after-load 'org-odt
'(ad-deactivate 'org-format-latex-as-mathml))
diff --git a/lisp/org-odt.el b/lisp/org-odt.el
index 117c824..7e7e5e1 100644
--- a/lisp/org-odt.el
+++ b/lisp/org-odt.el
@@ -84,27 +84,52 @@
("\\.\\.\\." . "&#x2026;")) ; hellip
"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
- (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.
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
`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
(const :tag "Not set" nil)
(directory :tag "Schema directory"))
@@ -139,44 +166,66 @@ Also add it to `rng-schema-locating-files'."
(file-readable-p
(expand-file-name "schemas.xml" 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
(eval-after-load 'rng-loc
'(add-to-list 'rng-schema-locating-files
(expand-file-name "schemas.xml"
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
- (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.
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
'(("odt" . "OpenDocument Text")
diff --git a/mk/default.mk b/mk/default.mk
index b3befad..dcd2947 100644
--- a/mk/default.mk
+++ b/mk/default.mk
@@ -91,7 +91,7 @@ MAKE_ORG_INSTALL = $(BATCHL) \
MAKE_ORG_VERSION = $(BATCHL) \
--eval '(load "org-compat.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
ELCDIR = $(BATCHL) \
diff --git a/mk/org-fixup.el b/mk/org-fixup.el
index 2e2d48a..7b59efb 100644
--- a/mk/org-fixup.el
+++ b/mk/org-fixup.el
@@ -27,7 +27,7 @@
(require 'autoload)
(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.
This function is internally used by the build system and should
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.\"
(let ((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;; Local Variables:\n;; version-control: never
;; 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."
(let* ((origin default-directory)
(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
(progn
(cd dirlisp)
(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)
(when compile (byte-recompile-directory dirlisp 0 force)))
(cd origin))))