| 
					
				 | 
			
			
				@@ -243,7 +243,7 @@ structure of the values.") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defun org-e-odt-write-automatic-styles () 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   "Write automatic styles to \"content.xml\"." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (with-current-buffer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (find-file-noselect (expand-file-name "content.xml") t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      (find-file-noselect (concat org-e-odt-zip-dir "content.xml") t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ;; position the cursor 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (goto-char (point-min)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (re-search-forward "  </office:automatic-styles>" nil t) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -256,7 +256,7 @@ structure of the values.") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defun org-e-odt-update-display-level (&optional level) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (with-current-buffer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (find-file-noselect (expand-file-name "content.xml") t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      (find-file-noselect (concat org-e-odt-zip-dir "content.xml") t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ;; position the cursor. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (goto-char (point-min)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ;; remove existing sequence decls. 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -465,7 +465,7 @@ Update styles.xml with styles that were collected as part of 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 `org-e-odt-hfy-face-to-css' callbacks." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (when styles 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (with-current-buffer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(find-file-noselect (expand-file-name "styles.xml") t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	(find-file-noselect (concat org-e-odt-zip-dir "styles.xml") t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (goto-char (point-min)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (when (re-search-forward "</office:styles>" nil t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	(goto-char (match-beginning 0)) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -526,6 +526,9 @@ Update styles.xml with styles that were collected as part of 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		       (string-match "file:\\([^]]*\\)" formula-link) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		       (match-string 1 formula-link)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	       (t (error "what is this?")))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 (src-expanded (if (file-name-absolute-p src) src 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			 (expand-file-name src (file-name-directory 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						(plist-get info :input-file))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 (caption-from 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	  (case (org-element-type element) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	    (link (org-export-get-parent-element element)) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -535,7 +538,7 @@ Update styles.xml with styles that were collected as part of 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 (href 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	  (org-e-odt-format-tags 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	   "<draw:object xlink:href=\"%s\" xlink:type=\"simple\" xlink:show=\"embed\" xlink:actuate=\"onLoad\"/>" "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	   (file-name-directory (org-e-odt-copy-formula-file src)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	   (file-name-directory (org-e-odt-copy-formula-file src-expanded)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 (embed-as (if caption 'paragraph 'character)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 width height) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (cond 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -563,25 +566,25 @@ Update styles.xml with styles that were collected as part of 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	     (car (org-e-odt-format-label caption-from info 'definition))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 '(table (:attr_odt (":style \"OrgEquation\""))) info)))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-(defun org-e-odt-copy-formula-file (path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+(defun org-e-odt-copy-formula-file (src-file) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   "Returns the internal name of the file" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  (let* ((src-file (expand-file-name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		    path (file-name-directory org-current-export-file))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 (target-dir (format "Formula-%04d/" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (let* ((target-dir (format "Formula-%04d/" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			     (incf org-e-odt-embedded-formulas-count))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 (target-file (concat target-dir "content.xml"))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    (message "Embedding %s as %s ..." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	     (substring-no-properties path) target-file) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    (message "Embedding %s as %s ..." src-file target-file) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    (when (= org-e-odt-embedded-formulas-count 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      (make-directory (concat org-e-odt-zip-dir target-dir))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    (make-directory target-dir) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (org-e-odt-create-manifest-file-entry 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      "application/vnd.oasis.opendocument.formula" target-dir "1.2") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (case (org-e-odt-is-formula-link-p src-file) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (mathml 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       (copy-file src-file target-file 'overwrite)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       (copy-file src-file (concat org-e-odt-zip-dir target-file) 'overwrite)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (odf 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       (org-e-odt-zip-extract-one src-file "content.xml" target-dir)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       (org-e-odt-zip-extract-one src-file "content.xml" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				  (concat org-e-odt-zip-dir target-dir))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (t 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        (error "%s is not a formula file" src-file))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -596,81 +599,6 @@ Update styles.xml with styles that were collected as part of 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      ((string-match "\\.odf\\'" file) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       'odf)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-(defun org-e-odt-format-org-link (opt-plist type-1 path fragment desc attr 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					    descp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  "Make a OpenDocument link. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-OPT-PLIST is an options list. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-TYPE-1 is the device-type of the link (THIS://foo.html). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-PATH is the path of the link (http://THIS#location). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-FRAGMENT is the fragment part of the link, if any (foo.html#THIS). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-DESC is the link description, if any. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-ATTR is a string of other attributes of the a element." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  (declare (special org-lparse-par-open)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  (save-match-data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    (let* ((may-inline-p 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	    (and (member type-1 '("http" "https" "file")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 (org-lparse-should-inline-p path descp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 (not fragment))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	   (type (if (equal type-1 "id") "file" type-1)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	   (filename path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	   (thefile path)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (cond 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       ;; check for inlined images 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       ((and (member type '("file")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	     (not fragment) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	     (org-file-image-p 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	      filename org-e-odt-inline-image-extensions) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	     (not descp)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(org-e-odt-format-inline-image thefile)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       ;; check for embedded formulas 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       ((and (member type '("file")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	     (not fragment) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	     (org-e-odt-is-formula-link-p filename) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	     (or (not descp))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(org-e-odt-format-formula thefile)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       ((string= type "coderef") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(let* ((ref fragment) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	       (lineno-or-ref (cdr (assoc ref org-export-code-refs))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	       (desc (and descp desc)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	       (org-e-odt-suppress-xref nil) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	       (href (org-xml-format-href (concat "#coderef-" ref)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	  (cond 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	   ((and (numberp lineno-or-ref) (not desc)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	    (org-e-odt-format-link lineno-or-ref href)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	   ((and (numberp lineno-or-ref) desc 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 (string-match (regexp-quote (concat "(" ref ")")) desc)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	    (format (replace-match "%s" t t desc) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		    (org-e-odt-format-link lineno-or-ref href))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	   (t 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	    (setq desc (format 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			(if (and desc (string-match 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				       (regexp-quote (concat "(" ref ")")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				       desc)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			    (replace-match "%s" t t desc) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			  (or desc "%s")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			lineno-or-ref)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	    (org-e-odt-format-link (org-xml-format-desc desc) href))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       (t 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(when (string= type "file") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	  (setq thefile 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		(cond 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 ((file-name-absolute-p path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		  (concat "file://" (expand-file-name path))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 (t (org-e-odt-relocate-relative-path 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		     thefile org-current-export-file))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(when (and (member type '("" "http" "https" "file")) fragment) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	  (setq thefile (concat thefile "#" fragment))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(setq thefile (org-xml-format-href thefile)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(when (not (member type '("" "file"))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	  (setq thefile (concat type ":" thefile))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(let ((org-e-odt-suppress-xref nil)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	  (org-e-odt-format-link 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	   (org-xml-format-desc desc) thefile attr))))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defun org-e-odt-format-anchor (text name &optional class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (org-e-odt-format-target text name)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -764,8 +692,6 @@ ATTR is a string of other attributes of the a element." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   "Returns the internal name of the file" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (let* ((image-type (file-name-extension path)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 (media-type (format "image/%s" image-type)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 (src-file (expand-file-name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		    path (file-name-directory org-current-export-file))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 (target-dir "Images/") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 (target-file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	  (format "%s%04d.%s" target-dir 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -774,10 +700,10 @@ ATTR is a string of other attributes of the a element." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	     (substring-no-properties path) target-file) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (when (= 1 org-e-odt-embedded-images-count) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (make-directory target-dir) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      (make-directory (concat org-e-odt-zip-dir target-dir)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (org-e-odt-create-manifest-file-entry "" target-dir)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    (copy-file src-file target-file 'overwrite) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    (copy-file path (concat org-e-odt-zip-dir target-file) 'overwrite) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (org-e-odt-create-manifest-file-entry media-type target-file) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     target-file)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -810,9 +736,6 @@ ATTR is a string of other attributes of the a element." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defun org-e-odt-image-size-from-file (file &optional user-width 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					    user-height scale dpi embed-as) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  (unless (file-name-absolute-p file) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    (setq file (expand-file-name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		file (file-name-directory org-current-export-file)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (let* (size width height) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (unless (and user-height user-width) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (loop for probe-method in org-e-odt-image-size-probe-method 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -967,7 +890,7 @@ ATTR is a string of other attributes of the a element." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	  (find-file-noselect content-file t)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (current-buffer)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-(defun org-e-odt-save-as-outfile (target opt-plist) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+(defun org-e-odt-save-as-outfile () 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ;; write automatic styles 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (org-e-odt-write-automatic-styles) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -983,67 +906,14 @@ ATTR is a string of other attributes of the a element." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (org-e-odt-create-manifest-file-entry "text/xml" "content.xml") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ;; write out the manifest entries before zipping 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  (org-e-odt-write-manifest-file) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  (let ((xml-files '("mimetype" "META-INF/manifest.xml" "content.xml" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		     "meta.xml")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(zipdir default-directory)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    (when (or t (equal org-lparse-backend 'odt)) ; FIXME 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (push "styles.xml" xml-files)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    (message "Switching to directory %s" (expand-file-name zipdir)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ;; save all xml files 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    (mapc (lambda (file) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	    (with-current-buffer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		(find-file-noselect (expand-file-name file) t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	      ;; prettify output if needed 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	      (when org-e-odt-prettify-xml 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		(indent-region (point-min) (point-max))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	      (save-buffer 0))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	  xml-files) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    (let* ((target-name (file-name-nondirectory target)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	   (target-dir (file-name-directory target)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	   (cmds `(("zip" "-mX0" ,target-name "mimetype") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		   ("zip" "-rmTq" ,target-name ".")))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (when (file-exists-p target) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	;; FIXME: If the file is locked this throws a cryptic error 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(delete-file target)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (let ((coding-system-for-write 'no-conversion) exitcode err-string) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(message "Creating odt file...") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(mapc 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 (lambda (cmd) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	   (message "Running %s" (mapconcat 'identity cmd " ")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	   (setq err-string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 (with-output-to-string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		   (setq exitcode 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			 (apply 'call-process (car cmd) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				nil standard-output nil (cdr cmd))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	   (or (zerop exitcode) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	       (ignore (message "%s" err-string)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	       (error "Unable to create odt file (%S)" exitcode))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 cmds)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ;; move the file from outdir to target-dir 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (rename-file target-name target-dir) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ;; kill all xml buffers 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (mapc (lambda (file) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	      (kill-buffer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	       (find-file-noselect (expand-file-name file zipdir) t))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	    xml-files) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (delete-directory zipdir))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  (message "Created %s" target) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  (set-buffer (find-file-noselect target t))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (org-e-odt-write-manifest-file)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defun org-e-odt-create-manifest-file-entry (&rest args) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (push args org-e-odt-manifest-file-entries)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defun org-e-odt-write-manifest-file () 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  (make-directory "META-INF") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  (let ((manifest-file (expand-file-name "META-INF/manifest.xml"))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (make-directory (concat org-e-odt-zip-dir "META-INF")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (let ((manifest-file (concat org-e-odt-zip-dir "META-INF/manifest.xml"))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (with-current-buffer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	(let ((nxml-auto-insert-xml-declaration-flag nil)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	  (find-file-noselect manifest-file t)) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1093,7 +963,7 @@ ATTR is a string of other attributes of the a element." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (format "<dc:title>%s</dc:title>\n" title) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       "\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       "  </office:meta>\n" "</office:document-meta>") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     nil (expand-file-name "meta.xml"))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     nil (concat org-e-odt-zip-dir "meta.xml"))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ;; create a manifest entry for meta.xml 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (org-e-odt-create-manifest-file-entry "text/xml" "meta.xml")) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1106,7 +976,7 @@ ATTR is a string of other attributes of the a element." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ;; FIXME: Who is opening an empty styles.xml before this point? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (with-current-buffer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(find-file-noselect (expand-file-name "styles.xml") t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	(find-file-noselect (concat org-e-odt-zip-dir "styles.xml") t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (revert-buffer t t))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ;; Write custom styles for source blocks 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1123,7 +993,7 @@ ATTR is a string of other attributes of the a element." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	   (odt "application/vnd.oasis.opendocument.text") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	   (odf "application/vnd.oasis.opendocument.formula") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	   (t (error "Unknown OpenDocument backend %S" org-lparse-backend))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    (write-region mimetype nil (expand-file-name "mimetype")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    (write-region mimetype nil (concat org-e-odt-zip-dir "mimetype")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     mimetype)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defun org-e-odt-do-preprocess-latex-fragments () 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1216,9 +1086,10 @@ ATTR is a string of other attributes of the a element." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (let ((styles-file-type (file-name-extension styles-file))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (cond 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ((string= styles-file-type "xml") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(copy-file styles-file (expand-file-name "styles.xml") t)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	(copy-file styles-file (concat org-e-odt-zip-dir "styles.xml") t)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ((member styles-file-type '("odt" "ott")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(org-e-odt-zip-extract styles-file "styles.xml"))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	(org-e-odt-zip-extract styles-file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			       (concat org-e-odt-zip-dir "styles.xml")))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    (t 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (error (format "Invalid specification of styles.xml file: %S" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		   org-e-odt-styles-file)))) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1287,8 +1158,7 @@ non-nil." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (or (org-export-push-to-kill-ring 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	   (upcase (symbol-name org-lparse-backend))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	  (message "Exporting... done"))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    (org-e-odt-save-as-outfile filename nil ; FIXME 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			       ))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    (org-e-odt-save-as-outfile filename))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ;;;###autoload 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defun org-export-as-odf-and-open () 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1646,26 +1516,6 @@ captions on export.") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defvar org-lparse-latex-fragment-fallback) ; set by org-do-lparse 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-;;;; HTML Internal Variables 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-(defvar html-table-tag nil) ; dynamically scoped into this. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-;; FIXME: it already exists in org-e-odt.el 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-(defconst org-e-odt-cvt-link-fn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   "Function to convert link URLs to exportable URLs. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Takes two arguments, TYPE and PATH. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Returns exportable url as (TYPE PATH), or nil to signal that it 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-didn't handle this case. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Intended to be locally bound around a call to `org-export-as-html'." ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-(defvar org-e-odt-headline-formatter 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  (lambda (level snumber todo todo-type priority 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 title tags target extra-targets extra-class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    (concat snumber " " title))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ;;; User Configuration Variables 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2627,7 +2477,7 @@ original parsed data.  INFO is a plist holding export options." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ;; Update styles.xml - take care of outline numbering 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (with-current-buffer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(find-file-noselect (expand-file-name "styles.xml") t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	(find-file-noselect (concat org-e-odt-zip-dir "styles.xml") t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ;; Don't make automatic backup of styles.xml file. This setting 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ;; prevents the backed-up styles.xml file from being zipped in to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ;; odt file. This is more of a hackish fix. Better alternative 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3147,9 +2997,12 @@ used as a communication channel." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		       (string-match "file:\\([^]]*\\)" formula-link) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		       (match-string 1 formula-link)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	       (t (error "what is this?")))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 (src-expanded (if (file-name-absolute-p src) src 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			 (expand-file-name src (file-name-directory 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						(plist-get info :input-file))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 (href (org-e-odt-format-tags 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		"<draw:image xlink:href=\"%s\" xlink:type=\"simple\" xlink:show=\"embed\" xlink:actuate=\"onLoad\"/>" "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		(org-e-odt-copy-image-file src))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		(org-e-odt-copy-image-file src-expanded))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 ;; extract attributes from #+ATTR_ODT line. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 (attr-from (case (org-element-type element) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		      (link (org-export-get-parent-element element)) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3170,7 +3023,7 @@ used as a communication channel." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 ;; extrac 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 ;; handle `:width', `:height' and `:scale' properties. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 (size (org-e-odt-image-size-from-file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		src (plist-get attr-plist :width) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		src-expanded (plist-get attr-plist :width) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		(plist-get attr-plist :height) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		(plist-get attr-plist :scale) nil ;; embed-as 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		"paragraph"			  ; FIXME 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3970,6 +3823,107 @@ contextual information." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ;;; Interactive functions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+(defvar org-e-odt-zip-dir nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  "Temporary work directory for OpenDocument exporter.") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+(defmacro org-e-odt--export-wrap (out-file &rest body) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  `(let* ((out-file-type (file-name-extension ,out-file)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-e-odt-xml-files '("META-INF/manifest.xml" "content.xml" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				 "meta.xml" "styles.xml")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  ;; Initialize workarea.  All files that end up in the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  ;; exported get created here. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-e-odt-zip-dir (file-name-as-directory 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			      (make-temp-file (format org-e-odt-tmpdir-prefix 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						      out-file-type) t))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (--cleanup-xml-buffers 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	   (function 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (lambda nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      ;; Kill all XML buffers. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      (mapc (lambda (file) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		      (let ((buf (get-file-buffer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				  (concat org-e-odt-zip-dir file)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			(when buf 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			  (set-buffer-modified-p nil) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			  (kill-buffer buf)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		    org-e-odt-xml-files) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      ;; Delete temporary directory and also other embedded 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      ;; files that get copied there. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      (delete-directory org-e-odt-zip-dir t))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     (org-condition-case-unless-debug 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      (progn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	(unless (executable-find "zip") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  ;; Not at all OSes ship with zip by default 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (error "Executable \"zip\" needed for creating OpenDocument files")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	;; Do export.  This creates a bunch of xml files ready to be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	;; saved and zipped. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	(progn ,@body) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	;; Save all XML files. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	(mapc (lambda (file) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		(let ((buf (get-file-buffer (concat org-e-odt-zip-dir file)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		  (when buf 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		    (with-current-buffer buf 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		      ;; Prettify output if needed. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		      (when org-e-odt-prettify-xml 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			(indent-region (point-min) (point-max))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		      (save-buffer 0))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      org-e-odt-xml-files) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	;; Run zip. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	(let* ((target ,out-file) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	       (target-name (file-name-nondirectory target)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	       (target-dir (file-name-directory target)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	       (cmds `(("zip" "-mX0" ,target-name "mimetype") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		       ("zip" "-rmTq" ,target-name ".")))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  ;; If a file with same name as the desired output file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  ;; exists, remove it. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (when (file-exists-p target) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (delete-file target)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  ;; Zip up the xml files. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (let ((coding-system-for-write 'no-conversion) exitcode err-string) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (message "Creating ODT file...") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    ;; Switch temporarily to content.xml.  This way Zip 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    ;; process will inherit `org-e-odt-zip-dir' as the current 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    ;; directory. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (with-current-buffer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		(find-file-noselect (concat org-e-odt-zip-dir "content.xml") t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      (mapc 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	       (lambda (cmd) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		 (message "Running %s" (mapconcat 'identity cmd " ")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		 (setq err-string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		       (with-output-to-string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			 (setq exitcode 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			       (apply 'call-process (car cmd) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				      nil standard-output nil (cdr cmd))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		 (or (zerop exitcode) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		     (error (concat "Unable to create OpenDocument file." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				    (format "  Zip failed with error (%s)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					    err-string))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	       cmds) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      ;; Zip file is now in the rightful place. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      (rename-file target-name target))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (message "Created %s" target) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  ;; Cleanup work directory and work files. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (funcall --cleanup-xml-buffers) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  ;; Open the OpenDocument file in archive-mode for 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  ;; examination. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (find-file-noselect target t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  ;; Return exported file. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (cond 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	   ;; Case 1: Conversion desired on exported file.  Run the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	   ;; converter on the OpenDocument file.  Return the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	   ;; converted file. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	   (org-e-odt-preferred-output-format 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (or (org-e-odt-convert target org-e-odt-preferred-output-format) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		target)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	   ;; Case 2: No further conversion.  Return exported 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	   ;; OpenDocument file. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	   (t target)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ((quit error) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       ;; Cleanup work directory and work files. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       (funcall --cleanup-xml-buffers) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       (message "OpenDocument export failed: %s" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		(error-message-string err)))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ;;;###autoload 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defun org-e-odt-export-to-odt 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (&optional subtreep visible-only body-only ext-plist pub-dir) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3999,29 +3953,32 @@ directory. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Return output file's name." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (interactive) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  (setq debug-on-error t)		; FIXME 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  (let* ((outbuf (org-e-odt-init-outfile)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 (target (org-export-output-file-name ".odt" subtreep pub-dir)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 (outdir (file-name-directory (buffer-file-name outbuf))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 (default-directory outdir)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ;; FIXME: for copying embedded images 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    (setq org-current-export-file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	  (file-name-directory 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	   (org-export-output-file-name ".odt" subtreep nil))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    (org-export-to-buffer 'e-odt outbuf subtreep visible-only body-only) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    (setq org-lparse-opt-plist nil) 	; FIXME 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    (org-e-odt-save-as-outfile target	;; info 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			       nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			       ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ;; return outfile 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    (if (not org-e-odt-preferred-output-format) target 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (or (org-e-odt-convert target org-e-odt-preferred-output-format) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	  target)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (org-e-odt--export-wrap 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   (org-export-output-file-name ".odt" subtreep pub-dir) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   (let* ((org-e-odt-manifest-file-entries nil) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-e-odt-embedded-images-count 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-e-odt-embedded-formulas-count 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-e-odt-section-count 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-e-odt-automatic-styles nil) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-e-odt-object-counters nil) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  ;; Let `htmlfontify' know that we are interested in collecting 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  ;; styles. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (hfy-user-sheet-assoc nil)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     ;; Initialize content.xml and kick-off the export process. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     (let ((out-buf (progn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		      (require 'nxml-mode) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		      (let ((nxml-auto-insert-xml-declaration-flag nil)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			(find-file-noselect 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			 (concat org-e-odt-zip-dir "content.xml") t))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       (org-export-to-buffer 'e-odt out-buf subtreep visible-only body-only)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     ;; Prepare other XML files. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     ;; - mimetype 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     ;; - content.xml 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     ;; - styles.xml 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     ;; - manifest.xml 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     ;; - meta.mxl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     (org-e-odt-save-as-outfile)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |