diff --git a/lisp/org-odt.el b/lisp/org-odt.el index 553965cd3..179c4d908 100644 --- a/lisp/org-odt.el +++ b/lisp/org-odt.el @@ -100,7 +100,7 @@ This directory contains the following XML files - `org-export-odt-styles-file' and `org-export-odt-content-template-file'.") -(defconst org-export-odt-schema-dir +(defcustom org-export-odt-schema-dir (let ((schema-dir (expand-file-name "../contrib/odt/etc/schema/" org-odt-lib-dir))) (if (and (file-readable-p @@ -116,7 +116,32 @@ This directory contains the following XML files - This directory contains rnc files for OpenDocument schema. It also contains a \"schemas.xml\" that can be added to `rng-schema-locating-files' for auto validation of OpenDocument -XML files. See also `rng-nxml-auto-validate-flag'.") +XML files. See also `rng-nxml-auto-validate-flag'." + :type '(choice + (const :tag "Not set" nil) + (directory :tag "Schema directory")) + :group 'org-export-odt + :set + (lambda (var value) + "Set `org-export-odt-schema-dir'. +Also add it to `rng-schema-locating-files'." + (let ((schema-dir value)) + (set var + (if (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))) + schema-dir + (prog1 nil + (message "Warning (org-odt): Unable to locate OpenDocument schema files."))))) + (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)))))) (defvar org-odt-file-extensions '(("odt" . "OpenDocument Text") @@ -130,32 +155,7 @@ XML files. See also `rng-nxml-auto-validate-flag'.") ("otp" . "OpenDocument Presentation Template") ("odi" . "OpenDocument Image") ("odf" . "OpenDocument Formula") - ("odc" . "OpenDocument Chart") - ("doc" . "Microsoft Text") - ("docx" . "Microsoft Text") - ("xls" . "Microsoft Spreadsheet") - ("xlsx" . "Microsoft Spreadsheet") - ("ppt" . "Microsoft Presentation") - ("pptx" . "Microsoft Presentation"))) - -(defvar org-odt-ms-file-extensions - '(("doc" . "Microsoft Text") - ("docx" . "Microsoft Text") - ("xls" . "Microsoft Spreadsheet") - ("xlsx" . "Microsoft Spreadsheet") - ("ppt" . "Microsoft Presentation") - ("pptx" . "Microsoft Presentation"))) - -;; RelaxNG validation of OpenDocument xml files -(eval-after-load 'rng-nxml - '(when org-export-odt-schema-dir - (setq rng-nxml-auto-validate-flag t))) - -(eval-after-load 'rng-loc - '(when org-export-odt-schema-dir - (add-to-list 'rng-schema-locating-files - (expand-file-name "schemas.xml" - org-export-odt-schema-dir)))) + ("odc" . "OpenDocument Chart"))) (mapc (lambda (desc) @@ -167,13 +167,6 @@ XML files. See also `rng-nxml-auto-validate-flag'.") (cons (concat "\\." (car desc) "\\'") 'archive-mode))) org-odt-file-extensions) -(mapc - (lambda (desc) - ;; Let Org open all Microsoft files using system-registered app - (add-to-list 'org-file-apps - (cons (concat "\\." (car desc) "\\'") 'system))) - org-odt-ms-file-extensions) - ;; register the odt exporter with the pre-processor (add-to-list 'org-export-backends 'odt)