Преглед на файлове

org-e-odt: Few cleanups

Jambunathan K преди 13 години
родител
ревизия
d37b3681d6
променени са 2 файла, в които са добавени 95 реда и са изтрити 648 реда
  1. 18 44
      EXPERIMENTAL/org-e-html.el
  2. 77 604
      EXPERIMENTAL/org-e-odt.el

+ 18 - 44
EXPERIMENTAL/org-e-html.el

@@ -890,12 +890,12 @@ order to reproduce the default set-up:
 ;;;; Emphasis
 
 (defcustom org-e-html-emphasis-alist
-  '(("*" . "\\textbf{%s}")
-    ("/" . "\\emph{%s}")
-    ("_" . "\\underline{%s}")
-    ("+" . "\\st{%s}")
-    ("=" . protectedtexttt)
-    ("~" . verb))
+  '(("*" . "<b>%s</b>")
+    ("/" . "<i>%s</i>")
+    ("_" . "<span style=\"text-decoration:underline;\">%s</span>")
+    ("+" . "<del>%s</del>")
+    ("=" . "<code>%s</code>")
+    ("~" . "<code>%s</code>"))
   "Alist of HTML expressions to convert emphasis fontifiers.
 
 The key is the character used as a marker for fontification.  The
@@ -1317,7 +1317,7 @@ that uses these same face definitions."
 		  headline
 		  ;; tags
 		  (and tags (concat
-			     (org-e-html-format-spaces 3)
+			     "&nbsp;&nbsp;&nbsp;"
 			     (org-e-html-format-fontify tags "tag")))))
   ;; fontify headline based on TODO keyword
   (when todo (setq headline (org-e-html-format-fontify headline "todo")))
@@ -1430,18 +1430,6 @@ that uses these same face definitions."
 (defun org-e-html-end-outline-text ()
   (org-lparse-insert-tag "</div>"))
 
-(defun org-e-html-format-spaces (n)
-  (let (out) (dotimes (i n out) (setq out (concat out "&nbsp;")))))
-
-(defun org-e-html-format-tabs (&optional n)
-  (ignore))
-
-(defun org-e-html-format-line-break ()
-  "<br/>\n")
-
-(defun org-e-html-format-horizontal-line ()
-  "<hr/>\n")
-
 ;; (defun org-e-html-format-line (line)
 ;;   (case org-lparse-dyn-current-environment
 ;;     ((quote fixedwidth) (concat (org-e-html-encode-plain-text line) "\n"))
@@ -1522,7 +1510,7 @@ Replaces invalid characters with \"_\"."
 	 x (concat org-e-html-tag-class-prefix
 		   (org-e-html-fix-class-name x))))
       (org-split-string tags ":")
-      (org-e-html-format-spaces 1)) "tag")))
+      "&nbsp;") "tag")))
 
 (defun org-e-html-format-section-number (&optional snumber level)
   ;; FIXME
@@ -1537,7 +1525,7 @@ Replaces invalid characters with \"_\"."
    (org-e-html-format-extra-targets extra-targets)
    (concat (org-e-html-format-section-number snumber level) " ")
    title
-   (and tags (concat (org-e-html-format-spaces 3)
+   (and tags (concat "&nbsp;&nbsp;&nbsp;"
 		     (org-e-html-format-org-tags tags)))))
 
 (defun org-e-html-format-footnote-reference (n def refcnt)
@@ -1989,18 +1977,8 @@ holding contextual information.  See
   "Transcode EMPHASIS from Org to HTML.
 CONTENTS is the contents of the emphasized text.  INFO is a plist
 holding contextual information.."
-  ;; (format (cdr (assoc (org-element-property :marker emphasis)
-  ;; 		      org-e-html-emphasis-alist))
-  ;; 	  contents)
-  (org-e-html-format-fontify
-   contents (cadr (assoc
-		   (org-element-property :marker emphasis)
-		   '(("*" bold)
-		     ("/" emphasis)
-		     ("_" underline)
-		     ("=" code)
-		     ("~" verbatim)
-		     ("+" strike))))))
+  (let* ((marker (org-element-property :marker emphasis)))
+    (format (cdr (assoc marker org-e-html-emphasis-alist)) contents)))
 
 
 ;;;; Entity
@@ -2399,8 +2377,7 @@ CONTENTS is nil.  INFO is a plist holding contextual information."
   (let ((attr (mapconcat #'identity
 			 (org-element-property :attr_html horizontal-rule)
 			 " ")))
-    (org-e-html--wrap-label horizontal-rule
-			    (org-e-html-format-horizontal-line))))
+    (org-e-html--wrap-label horizontal-rule "<hr/>\n")))
 
 
 ;;;; Inline Babel Call
@@ -2971,8 +2948,7 @@ CONTENTS is nil.  INFO is a plist holding contextual information."
   "Transcode a SUBSCRIPT object from Org to HTML.
 CONTENTS is the contents of the object.  INFO is a plist holding
 contextual information."
-  ;; (format (if (= (length contents) 1) "$_%s$" "$_{\\mathrm{%s}}$") contents)
-  (org-e-html-format-fontify contents 'subscript))
+  (format "<sub>%s</sub>" contents))
 
 
 ;;;; Superscript
@@ -2981,8 +2957,7 @@ contextual information."
   "Transcode a SUPERSCRIPT object from Org to HTML.
 CONTENTS is the contents of the object.  INFO is a plist holding
 contextual information."
-  ;; (format (if (= (length contents) 1) "$^%s$" "$^{\\mathrm{%s}}$") contents)
-  (org-e-html-format-fontify contents 'superscript))
+  (format "<sup>%s</sup>" contents))
 
 
 ;;;; Table
@@ -3260,14 +3235,13 @@ CONTENTS is nil.  INFO is a plist holding contextual information."
 		    (org-export-secondary-string
 		     (org-element-property :value verse-block)
 		     'e-html info)))))
-
   ;; Replace each white space at beginning of a line with a
   ;; non-breaking space.
   (while (string-match "^[ \t]+" contents)
-    (let ((new-str (org-e-html-format-spaces
-		    (length (match-string 0 contents)))))
-      (setq contents (replace-match new-str nil t contents))))
-
+    (let* ((num-ws (length (match-string 0 contents)))
+	   (ws (let (out) (dotimes (i num-ws out)
+			    (setq out (concat out "&nbsp;"))))))
+      (setq contents (replace-match ws nil t contents))))
   (org-e-html--wrap-label
    verse-block (format "<p class=\"verse\">\n%s</p>" contents)))
 

+ 77 - 604
EXPERIMENTAL/org-e-odt.el

@@ -26,7 +26,6 @@
 ;;; Code:
 (eval-when-compile
   (require 'cl))
-(require 'org-lparse)
 
 (defgroup org-export-e-odt nil
   "Options specific for ODT export of Org-mode files."
@@ -34,11 +33,12 @@
   :group 'org-export
   :version "24.1")
 
-;; (defun org-e-odt-unload-function ()
-;;   (org-lparse-unregister-backend 'odt)
-;;   (remove-hook 'org-export-preprocess-after-blockquote-hook
-;; 	       'org-export-e-odt-preprocess-latex-fragments)
-;;   nil)
+;; FIXMES
+;; org-export-preprocess-after-blockquote-hook
+;; org-export-e-odt-preprocess-latex-fragments
+;; org-export-as-e-odt-and-open
+;; org-export-as-e-odt-batch
+;; org-export-as-e-odt
 
 (defun org-e-odt-get-style-name-for-entity (category &optional entity)
   (let ((entity (or entity 'default)))
@@ -51,50 +51,6 @@
 	    entity category))))
 
 
-;;;###autoload
-(defun org-export-as-e-odt-and-open (arg)
-  "Export the outline as ODT and immediately open it with a browser.
-If there is an active region, export only the region.
-The prefix ARG specifies how many levels of the outline should become
-headlines.  The default is 3.  Lower levels will become bulleted lists."
-  (interactive "P")
-  (org-lparse-and-open
-   (or org-export-e-odt-preferred-output-format "odt") "odt" arg))
-
-;;;###autoload
-(defun org-export-as-e-odt-batch ()
-  "Call the function `org-lparse-batch'.
-This function can be used in batch processing as:
-emacs   --batch
-        --load=$HOME/lib/emacs/org.el
-        --eval \"(setq org-export-headline-levels 2)\"
-        --visit=MyFile --funcall org-export-as-e-odt-batch"
-  (org-lparse-batch "odt"))
-
-;;; org-export-as-e-odt
-;;;###autoload
-(defun org-export-as-e-odt (arg &optional hidden ext-plist
-				to-buffer body-only pub-dir)
-  "Export the outline as a OpenDocumentText file.
-If there is an active region, export only the region.  The prefix
-ARG specifies how many levels of the outline should become
-headlines.  The default is 3.  Lower levels will become bulleted
-lists.  HIDDEN is obsolete and does nothing.
-EXT-PLIST is a property list with external parameters overriding
-org-mode's default settings, but still inferior to file-local
-settings.  When TO-BUFFER is non-nil, create a buffer with that
-name and export to that buffer.  If TO-BUFFER is the symbol
-`string', don't leave any buffer behind but just return the
-resulting XML as a string.  When BODY-ONLY is set, don't produce
-the file header and footer, simply return the content of
-<body>...</body>, without even the body tags themselves.  When
-PUB-DIR is set, use this as the publishing directory."
-  (interactive "P")
-  (org-lparse (or org-export-e-odt-preferred-output-format "odt")
-	      "odt" arg hidden ext-plist to-buffer body-only pub-dir))
-
-
-
 ;; Following variable is let bound when `org-do-lparse' is in
 ;; progress. See org-html.el.
 
@@ -198,49 +154,19 @@ PUB-DIR is set, use this as the publishing directory."
 	  (format "%s:%s" (substring date 0 -2) (substring date -2)))))))
 
 (defun org-e-odt-begin-annotation (&optional author date)
-  (org-lparse-insert-tag "<office:annotation>")
-  (when (setq author (org-e-odt-format-author author))
-    (insert author))
-  (insert (org-e-odt-format-tags
-	   '("<dc:date>" . "</dc:date>")
-	   (org-e-odt-format-date
-	    (or date (plist-get org-lparse-opt-plist :date)))))
-  (org-lparse-begin-paragraph))
+  (concat
+   "<office:annotation>\n"
+   (and author (org-e-odt-format-author author))
+   (org-e-odt-format-tags
+    '("<dc:date>" . "</dc:date>")
+    (org-e-odt-format-date
+     (or date (plist-get org-lparse-opt-plist :date))))
+   (org-e-odt-begin-paragraph)))
 
 (defun org-e-odt-end-annotation ()
-  (org-lparse-insert-tag  "</office:annotation>"))
-
-(defun org-e-odt-begin-environment (style env-options-plist)
-  (case style
-    (annotation
-     (org-lparse-stash-save-paragraph-state)
-     (org-e-odt-begin-annotation (plist-get env-options-plist 'author)
-				 (plist-get env-options-plist 'date)))
-    ((blockquote verse center quote)
-     (org-lparse-begin-paragraph style)
-     (list))
-    ((fixedwidth native)
-     (org-lparse-end-paragraph)
-     (list))
-    (t (error "Unknown environment %s" style))))
-
-(defun org-e-odt-end-environment (style env-options-plist)
-  (case style
-    (annotation
-     (org-lparse-end-paragraph)
-     (org-e-odt-end-annotation)
-     (org-lparse-stash-pop-paragraph-state))
-    ((blockquote verse center quote)
-     (org-lparse-end-paragraph)
-     (list))
-    ((fixedwidth native)
-     (org-lparse-begin-paragraph)
-     (list))
-    (t (error "Unknown environment %s" style))))
+  "</office:annotation>")
 
 (defun org-e-odt-begin-plain-list (ltype)
-  ;; (setq ltype (or (org-lparse-html-list-type-to-canonical-list-type ltype)
-  ;; 		  ltype))
   (let* ((style-name (org-e-odt-get-style-name-for-entity 'list ltype))
 	 (extra (concat
 		 ;; (if (or org-lparse-list-table-p
@@ -261,14 +187,10 @@ PUB-DIR is set, use this as the publishing directory."
       (t (error "Unknown list type: %s"  ltype)))))
 
 (defun org-e-odt-end-plain-list (ltype)
-  ;; (setq ltype (or (org-lparse-html-list-type-to-canonical-list-type ltype)
-  ;; 		  ltype))
   (if ltype "</text:list>"
     (error "Unknown list type: %s" ltype)))
 
 (defun org-e-odt-begin-list-item (ltype &optional arg headline)
-  (setq ltype (or (org-lparse-html-list-type-to-canonical-list-type ltype)
-		  ltype))
   (case ltype
     (ordered
      (assert (not headline) t)
@@ -303,8 +225,6 @@ PUB-DIR is set, use this as the publishing directory."
     (t (error "Unknown list type"))))
 
 (defun org-e-odt-end-list-item (ltype)
-  ;; (setq ltype (or (org-lparse-html-list-type-to-canonical-list-type ltype)
-  ;; 		  ltype))
   (case ltype
     ((ordered unordered)
      ;; (org-lparse-insert-tag
@@ -337,8 +257,6 @@ PUB-DIR is set, use this as the publishing directory."
 	do (org-lparse-begin-list list-type)
 	(org-lparse-begin-list-item list-type)))
 
-;; Following variables are let bound when table emission is in
-;; progress. See org-lparse.el.
 (defun org-e-odt-write-automatic-styles ()
   "Write automatic styles to \"content.xml\"."
   (with-current-buffer
@@ -380,7 +298,7 @@ new entry in `org-e-odt-automatic-styles'.  Return (OBJECT-NAME
 
 (defun org-e-odt-format-table-columns ()
   (let* ((num-cols (length (plist-get table-info :alignment)))
-	 (col-nos (loop for i from 1 below num-cols collect i))
+	 (col-nos (loop for i from 0 below num-cols collect i))
 	 (levels )
 	 (col-widths (plist-get table-info :width))
 	 (style (or (nth 1 org-e-odt-table-style-spec) "OrgTable")))
@@ -423,27 +341,9 @@ new entry in `org-e-odt-automatic-styles'.  Return (OBJECT-NAME
 
   ;; (org-e-html-pp  table-info)
 
-  ;; (setq org-lparse-table-begin-marker (point))
   )
 
 (defun org-e-odt-end-table ()
-  ;; fill style attributes for table cells
-  (when org-lparse-table-is-styled
-    (while (re-search-forward "@@\\(table-cell:p\\|table-cell:style-name\\)@@\\([0-9]+\\)@@\\([0-9]+\\)@@" nil t)
-      (let* (;; (spec (match-string 1))
-  	     ;; (r (string-to-number (match-string 2)))
-  	     ;; (c (string-to-number (match-string 3)))
-  	     (cell-styles (org-e-odt-get-table-cell-styles
-  			   r c org-e-odt-table-style-spec))
-  	     (table-cell-style (car cell-styles))
-  	     (table-cell-paragraph-style (cdr cell-styles)))
-  	(cond
-  	 ((equal spec "table-cell:p")
-  	  (replace-match table-cell-paragraph-style t t))
-  	 ((equal spec "table-cell:style-name")
-  	  (replace-match table-cell-style t t))))))
-  (goto-char (point-max))
-
   (concat
    "</table:table>"
    ;; (when org-e-odt-table-indentedp
@@ -594,12 +494,6 @@ styles congruent with the ODF-1.2 specification."
        (setq s (concat s "\n<table:covered-table-cell/>"))) s)
    "\n"))
 
-(defun org-e-odt-begin-footnote-definition (n)
-  (org-lparse-begin-paragraph 'footnote))
-
-(defun org-e-odt-end-footnote-definition (n)
-  (org-lparse-end-paragraph))
-
 (defun org-e-odt-begin-toc (lang-specific-heading max-level)
   (concat
    (format "
@@ -962,23 +856,22 @@ value of `org-export-e-odt-fontify-srcblocks."
 	 (target-dir (format "Formula-%04d/"
 			     (incf org-e-odt-embedded-formulas-count)))
 	 (target-file (concat target-dir "content.xml")))
-    (when (not org-lparse-to-buffer)
-      (message "Embedding %s as %s ..."
-	       (substring-no-properties path) target-file)
+    (message "Embedding %s as %s ..."
+	     (substring-no-properties path) target-file)
+
+    (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))
+      (odf
+       (org-e-odt-zip-extract-one src-file "content.xml" target-dir))
+      (t
+       (error "%s is not a formula file" src-file)))
 
-      (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))
-	(odf
-	 (org-e-odt-zip-extract-one src-file "content.xml" target-dir))
-	(t
-	 (error "%s is not a formula file" src-file)))
-
-      (org-e-odt-create-manifest-file-entry "text/xml" target-file))
+    (org-e-odt-create-manifest-file-entry "text/xml" target-file)
     target-file))
 
 (defun org-e-odt-format-inline-formula (thefile)
@@ -1274,7 +1167,6 @@ ATTR is a string of other attributes of the a element."
 		label caption (or category (nth 1 entity-style)))))
 	     width height frame-params)))))
 
-
 (defun org-e-odt-copy-image-file (path)
   "Returns the internal name of the file"
   (let* ((image-type (file-name-extension path))
@@ -1285,16 +1177,15 @@ ATTR is a string of other attributes of the a element."
 	 (target-file
 	  (format "%s%04d.%s" target-dir
 		  (incf org-e-odt-embedded-images-count) image-type)))
-    (when (not org-lparse-to-buffer)
-      (message "Embedding %s as %s ..."
-	       (substring-no-properties path) target-file)
+    (message "Embedding %s as %s ..."
+	     (substring-no-properties path) target-file)
 
-      (when (= 1 org-e-odt-embedded-images-count)
-	(make-directory target-dir)
-	(org-e-odt-create-manifest-file-entry "" target-dir))
+    (when (= 1 org-e-odt-embedded-images-count)
+      (make-directory target-dir)
+      (org-e-odt-create-manifest-file-entry "" target-dir))
 
-      (copy-file src-file target-file 'overwrite)
-      (org-e-odt-create-manifest-file-entry media-type target-file))
+    (copy-file src-file target-file 'overwrite)
+    (org-e-odt-create-manifest-file-entry media-type target-file)
     target-file))
 
 (defun org-e-odt-do-image-size (probe-method file &optional dpi anchor-type)
@@ -1470,6 +1361,11 @@ ATTR is a string of other attributes of the a element."
 	  org-e-odt-object-counters nil
 	  org-e-odt-entity-counts-plist nil)
 
+    ;; let `htmlfontify' know that we are interested in collecting
+    ;; styles - FIXME
+
+    (setq hfy-user-sheet-assoc nil)
+
     ;; init conten.xml
     (with-current-buffer
 	(find-file-noselect content-file t)
@@ -1501,7 +1397,7 @@ ATTR is a string of other attributes of the a element."
   (let ((xml-files '("mimetype" "META-INF/manifest.xml" "content.xml"
 		     "meta.xml"))
 	(zipdir default-directory))
-    (when (equal org-lparse-backend 'odt)
+    (when (or t (equal org-lparse-backend 'odt)) ; FIXME
       (push "styles.xml" xml-files))
     (message "Switching to directory %s" (expand-file-name zipdir))
 
@@ -1632,17 +1528,15 @@ ATTR is a string of other attributes of the a element."
     (set (make-local-variable 'backup-inhibited) t)
 
     ;; Import local setting of `org-export-with-section-numbers'
-    (org-lparse-bind-local-variables opt-plist)
     (org-e-odt-configure-outline-numbering
      (if org-export-with-section-numbers org-export-headline-levels 0)))
 
   ;; Write custom styles for source blocks
-  ;; (org-e-odt-insert-custom-styles-for-srcblocks FIXME
-  ;;  (mapconcat
-  ;;   (lambda (style)
-  ;;     (format " %s\n" (cddr style)))
-  ;;   hfy-user-sheet-assoc ""))
-  )
+  (org-e-odt-insert-custom-styles-for-srcblocks
+   (mapconcat
+    (lambda (style)
+      (format " %s\n" (cddr style)))
+    hfy-user-sheet-assoc "")))
 
 (defun org-e-odt-write-mimetype-file (format)
   ;; create mimetype file
@@ -2145,75 +2039,14 @@ standard Emacs.")
 
 (defvar org-export-e-odt-org-styles-alist org-export-e-odt-default-org-styles-alist)
 
-(defvar org-e-odt-entity-control-callbacks-alist
-  `((EXPORT
-     . (org-e-odt-begin-export org-e-odt-end-export))
-    (DOCUMENT-CONTENT
-     . (org-e-odt-begin-document-content org-e-odt-end-document-content))
-    (DOCUMENT-BODY
-     . (org-e-odt-begin-document-body org-e-odt-end-document-body))
-    (TOC
-     . (org-e-odt-begin-toc org-e-odt-end-toc))
-    (ENVIRONMENT
-     . (org-e-odt-begin-environment org-e-odt-end-environment))
-    (FOOTNOTE-DEFINITION
-     . (org-e-odt-begin-footnote-definition org-e-odt-end-footnote-definition))
-    (TABLE
-     . (org-e-odt-begin-table org-e-odt-end-table))
-    (TABLE-ROWGROUP
-     . (org-e-odt-begin-table-rowgroup org-e-odt-end-table-rowgroup))
-    (LIST
-     . (org-e-odt-begin-list org-e-odt-end-list))
-    (LIST-ITEM
-     . (org-e-odt-begin-list-item org-e-odt-end-list-item))
-    (OUTLINE
-     . (org-e-odt-begin-outline org-e-odt-end-outline))
-    (OUTLINE-TEXT
-     . (org-e-odt-begin-outline-text org-e-odt-end-outline-text))
-    (PARAGRAPH
-     . (org-e-odt-begin-paragraph org-e-odt-end-paragraph)))
-  "")
-
-(defvar org-e-odt-entity-format-callbacks-alist
-  `((EXTRA-TARGETS . org-lparse-format-extra-targets)
-    (ORG-TAGS . org-lparse-format-org-tags)
-    (SECTION-NUMBER . org-lparse-format-section-number)
-    (HEADLINE . org-e-odt-format-headline)
-    (TOC-ENTRY . org-e-odt-format-toc-entry)
-    (TOC-ITEM . org-e-odt-format-toc-item)
-    (TAGS . org-e-odt-format-tags)
-    (SPACES . org-e-odt-format-spaces)
-    (TABS . org-e-odt-format-tabs)
-    (LINE-BREAK . org-e-odt-format-line-break)
-    (FONTIFY . org-e-odt-format-fontify)
-    (TODO . org-lparse-format-todo)
-    (LINK . org-e-odt-format-link)
-    (INLINE-IMAGE . org-e-odt-format-inline-image)
-    (ORG-LINK . org-e-odt-format-org-link)
-    (HEADING . org-e-odt-format-heading)
-    (ANCHOR . org-e-odt-format-anchor)
-    (TABLE . org-lparse-format-table)
-    (TABLE-ROW . org-e-odt-format-table-row)
-    (TABLE-CELL . org-e-odt-format-table-cell)
-    (FOOTNOTES-SECTION . ignore)
-    (FOOTNOTE-REFERENCE . org-e-odt-format-footnote-reference)
-    (HORIZONTAL-LINE . org-e-odt-format-horizontal-line)
-    (COMMENT . org-e-odt-format-comment)
-    (LINE . org-e-odt-format-line)
-    (ORG-ENTITY . org-e-odt-format-org-entity))
-  "")
-
 ;;;_. callbacks
 ;;;_. control callbacks
 ;;;_ , document body
 
-(defvar org-lparse-toc)
 (defvar org-lparse-body-only)		; let bound during org-do-lparse
-(defvar org-lparse-to-buffer)		; let bound during org-do-lparse
 (defvar org-lparse-opt-plist)		    ; bound during org-do-lparse
 (defvar org-lparse-list-stack) ; dynamically bound in org-do-lparse
 (defvar org-e-odt-list-stack-stashed)
-(defvar org-lparse-table-begin-marker)
 (defvar org-lparse-table-ncols)
 (defvar org-e-odt-table-rowgrp-open)
 (defvar org-e-odt-table-rownum)
@@ -3261,54 +3094,6 @@ string defines the replacement string for this quote."
 	      (substring style (match-beginning 0)))
     style))
 
-(defun org-export-e-odtize-region-for-paste (beg end)
-  "Convert the region to HTML, using htmlize.el.
-This is much like `htmlize-region-for-paste', only that it uses
-the settings define in the org-... variables."
-  (let* ((htmlize-output-type org-export-e-odtize-output-type)
-	 (htmlize-css-name-prefix org-export-e-odtize-css-font-prefix)
-	 (htmlbuf (htmlize-region beg end)))
-    (unwind-protect
-	(with-current-buffer htmlbuf
-	  (buffer-substring (plist-get htmlize-buffer-places 'content-start)
-			    (plist-get htmlize-buffer-places 'content-end)))
-      (kill-buffer htmlbuf))))
-
-;;;###autoload
-(defun org-export-e-odtize-generate-css ()
-  "Create the CSS for all font definitions in the current Emacs session.
-Use this to create face definitions in your CSS style file that can then
-be used by code snippets transformed by htmlize.
-This command just produces a buffer that contains class definitions for all
-faces used in the current Emacs session.  You can copy and paste the ones you
-need into your CSS file.
-
-If you then set `org-export-e-odtize-output-type' to `css', calls to
-the function `org-export-e-odtize-region-for-paste' will produce code
-that uses these same face definitions."
-  (interactive)
-  (require 'htmlize)
-  (and (get-buffer "*html*") (kill-buffer "*html*"))
-  (with-temp-buffer
-    (let ((fl (face-list))
-	  (htmlize-css-name-prefix "org-")
-	  (htmlize-output-type 'css)
-	  f i)
-      (while (setq f (pop fl)
-		   i (and f (face-attribute f :inherit)))
-	(when (and (symbolp f) (or (not i) (not (listp i))))
-	  (insert (org-add-props (copy-sequence "1") nil 'face f))))
-      (htmlize-region (point-min) (point-max))))
-  (org-pop-to-buffer-same-window "*html*")
-  (goto-char (point-min))
-  (if (re-search-forward "<style" nil t)
-      (delete-region (point-min) (match-beginning 0)))
-  (if (re-search-forward "</style>" nil t)
-      (delete-region (1+ (match-end 0)) (point-max)))
-  (beginning-of-line 1)
-  (if (looking-at " +") (replace-match ""))
-  (goto-char (point-min)))
-
 ;; (defun org-e-odt-format-toc-entry (snumber todo headline tags href)
 ;;   (setq headline (concat
 ;; 		  ;; section number
@@ -3375,11 +3160,6 @@ that uses these same face definitions."
 (defun org-e-odt-end-outline ()
   (org-lparse-insert-tag  "</div>"))
 
-
-;; (defun org-e-odt-format-heading (text level &optional id)
-;;   (let* ((extra (concat (when id (format " id=\"%s\"" id)))))
-;;     (concat (format "<h%d%s>" level extra) text (format "</h%d>" level))))
-
 (defun org-e-odt-suffix-from-snumber (snumber)
   (let* ((snu (replace-regexp-in-string "\\." "-" snumber))
 	 (href (cdr (assoc (concat "sec-" snu)
@@ -3394,32 +3174,11 @@ that uses these same face definitions."
    level1 target)
    contents))
 
-;; (defun org-e-odt-begin-outline-text (level1 snumber extra-class)
-;;   (let* ((class (format "outline-text-%d" level1))
-;; 	 (class (if extra-class (concat  class " " extra-class) class))
-;; 	 (id (format "text-%s" (org-lparse-suffix-from-snumber snumber)))
-;; 	 (extra (concat (when id (format " id=\"%s\"" id))
-;; 			(when class (format " class=\"%s\"" class)))))
-;;     (org-lparse-insert-tag "<div%s>" extra)))
-
-;; (defun org-e-odt-end-outline-text ()
-;;   (org-lparse-insert-tag "</div>"))
-
-;; (defun org-e-odt-format-spaces (n)
-;;   (let (out) (dotimes (i n out) (setq out (concat out "&nbsp;")))))
-
-(defun org-e-odt-format-tabs (&optional n)
-  (ignore))
-
 ;; (defun org-e-odt-format-line (line)
 ;;   (case org-lparse-dyn-current-environment
 ;;     ((quote fixedwidth) (concat (org-e-odt-encode-plain-text line) "\n"))
 ;;     (t (concat line "\n"))))
 
-(defun org-e-odt-format-comment (fmt &rest args)
-  (let ((comment (apply 'format fmt args)))
-    (format "\n<!-- %s  -->\n" comment)))
-
 (defun org-e-odt-fix-class-name (kwd) 	; audit callers of this function
   "Turn todo keyword into a valid class name.
 Replaces invalid characters with \"_\"."
@@ -3428,52 +3187,9 @@ Replaces invalid characters with \"_\"."
       (setq kwd (replace-match "_" t t kwd))))
   kwd)
 
-;; (defun org-e-odt-format-fontify (text style &optional id)
-;;   (let (class extra how)
-;;     (cond
-;;      ((eq style 'underline)
-;;       (setq extra " style=\"text-decoration:underline;\"" ))
-;;      ((setq how (cdr (assoc style
-;; 			    '((bold . ("<b>" . "</b>"))
-;; 			      (emphasis . ("<i>" . "</i>"))
-;; 			      (code . ("<code>" . "</code>"))
-;; 			      (verbatim . ("<code>" . "</code>"))
-;; 			      (strike . ("<del>" . "</del>"))
-;; 			      (subscript . ("<sub>" . "</sub>"))
-;; 			      (superscript . ("<sup>" . "</sup>")))))))
-;;      ((listp style)
-;;       (setq class (mapconcat 'identity style " ")))
-;;      ((stringp style)
-;;       (setq class style))
-;;      (t (error "Unknown style %S" style)))
-
-;;     (setq extra (concat (when class (format " class=\"%s\"" class))
-;; 			(when id (format " id=\"%s\""  id))
-;; 			extra))
-
-;;     (let ((tags (or how '("<span%s>" . "</span>"))))
-;;       (concat (format (car tags) extra) text  (cdr tags)))))
-
-;; (defun org-e-odt-format-link (text href &optional extra)
-;;   (let ((extra (concat (format " href=\"%s\"" href)
-;; 		       (and extra (concat  " " extra)))))
-;;     (format "<a%s>%s</a>" extra text)))
-
 (defun org-e-odt-format-internal-link (text href &optional extra)
   (org-e-odt-format-link text (concat "#" href) extra))
 
-;; (defun org-e-odt-format-heading (text level &optional id)
-;;   (let* ((extra (concat (when id (format " id=\"%s\"" id)))))
-;;     (concat (format "<h%d%s>" level extra) text (format "</h%d>\n" level))))
-
-;; (defun org-e-odt-format-anchor (text name &optional class)
-;;   (let* ((id name)
-;; 	 (extra (concat
-;; 		 (when name (format " name=\"%s\""  name))
-;; 		 (when id (format " id=\"%s\""  id))
-;; 		 (when class (format " class=\"%s\""  class)))))
-;;     (format "<a%s>%s</a>" extra text)))
-
 (defun org-e-odt-format-extra-targets (extra-targets)
   (if (not extra-targets) ""
     (mapconcat (lambda (x)
@@ -3509,26 +3225,6 @@ Replaces invalid characters with \"_\"."
 ;;    (and tags (concat (org-e-odt-format-spaces 3)
 ;; 		     (org-e-odt-format-org-tags tags)))))
 
-;; (defun org-e-odt-format-footnote-reference (n def refcnt)
-;;   (let ((extra (if (= refcnt 1) "" (format ".%d"  refcnt))))
-;;     (format org-e-odt-footnote-format
-;; 	    (format
-;; 	     "<a class=\"footref\" name=\"fnr.%s%s\" href=\"#fn.%s\">%s</a>"
-;; 	     n extra n n))))
-
-(defun org-e-odt-format-footnotes-section (section-name definitions)
-  (if (not definitions) ""
-    (format org-e-odt-footnotes-section section-name definitions)))
-
-;; (defun org-e-odt-format-footnote-definition (fn)
-;;   (let ((n (car fn)) (def (cdr fn)))
-;;     (format
-;;      "<tr>\n<td>%s</td>\n<td>%s</td>\n</tr>\n"
-;;      (format
-;;       (format org-e-odt-footnote-format
-;; 	      "<a class=\"footnum\" name=\"fn.%s\" href=\"#fnr.%s\">%s</a>")
-;;       n n n) def)))
-
 (defun org-e-odt-get-coding-system-for-write ()
   (or org-e-odt-coding-system
       (and (boundp 'buffer-file-coding-system) buffer-file-coding-system)))
@@ -3666,9 +3362,7 @@ original parsed data.  INFO is a plist holding export options."
   "Transcode a CENTER-BLOCK element from Org to HTML.
 CONTENTS holds the contents of the block.  INFO is a plist
 holding contextual information."
-  (org-e-odt--wrap-label
-   center-block
-   (format "<div style=\"text-align: center\">\n%s</div>" contents)))
+  (org-e-odt--wrap-label center-block contents))
 
 
 ;;;; Comment
@@ -3742,166 +3436,11 @@ contextual information."
 
 ;;;; Example Block
 
-
-;; (defun org-odt-format-source-code-or-example-colored
-;;   (lines lang caption textareap cols rows num cont rpllbl fmt))
-
-;; (defun org-e-odt-format-source-code-or-example-plain
-;;   (lines lang caption textareap cols rows num cont rpllbl fmt)
-;;   (setq lines
-;; 	(concat
-;; 	 "<pre class=\"example\">\n"
-;; 	 (cond
-;; 	  (textareap
-;; 	   (concat
-;; 	    (format "<p>\n<textarea cols=\"%d\" rows=\"%d\">"
-;; 		    cols rows)
-;; 	    lines "</textarea>\n</p>\n"))
-;; 	  (t
-;; 	   (with-temp-buffer
-;; 	     (insert lines)
-;; 	     (goto-char (point-min))
-;; 	     (while (re-search-forward "[<>&]" nil t)
-;; 	       (replace-match (cdr (assq (char-before)
-;; 					 '((?&."&amp;")(?<."&lt;")(?>."&gt;"))))
-;; 			      t t))
-;; 	     (buffer-string))))
-;; 	 "</pre>\n"))
-
-;;   (unless textareap
-;;     (setq lines (org-export-number-lines lines 1 1 num cont rpllbl fmt)))
-
-;;   ;; (when (string-match "\\(\\`<[^>]*>\\)\n" lines)
-;;   ;;   (setq lines (replace-match "\\1" t nil lines)))
-
-;;   lines)
-
-;; (defun org-e-odt-format-source-code-or-example-colored
-;;   (lines lang caption textareap cols rows num cont rpllbl fmt)
-;;   (let* ((lang-m (when lang
-;; 		   (or (cdr (assoc lang org-src-lang-modes))
-;; 		       lang)))
-;; 	 (mode (and lang-m (intern
-;; 			    (concat
-;; 			     (if (symbolp lang-m)
-;; 				 (symbol-name lang-m)
-;; 			       lang-m)
-;; 			     "-mode"))))
-;; 	 (org-inhibit-startup t)
-;; 	 (org-startup-folded nil))
-;;     (setq lines
-;; 	  (with-temp-buffer
-;; 	    (insert lines)
-;; 	    (if (functionp mode)
-;; 		(funcall mode)
-;; 	      (fundamental-mode))
-;; 	    (font-lock-fontify-buffer)
-;; 	    ;; markup each line separately
-;; 	    (org-remove-formatting-on-newlines-in-region
-;; 	     (point-min) (point-max))
-;; 	    (org-src-mode)
-;; 	    (set-buffer-modified-p nil)
-;; 	    (org-export-e-odtize-region-for-paste
-;; 	     (point-min) (point-max))))
-
-;;     (when (string-match "<pre\\([^>]*\\)>\n*" lines)
-;;       (setq lines (replace-match
-;; 		   (format "<pre class=\"src src-%s\">\n" lang) t t lines)))
-
-;;     (when caption
-;;       (setq lines
-;; 	    (concat
-;; 	     "<div class=\"org-src-container\">"
-;; 	     (format "<label class=\"org-src-name\">%s</label>" caption)
-;; 	     lines "</div>")))
-
-;;     (unless textareap
-;;       (setq lines (org-export-number-lines lines 1 1 num cont rpllbl fmt)))
-
-;;     ;; (when (string-match "\\(\\`<[^>]*>\\)\n" lines)
-;;     ;;   (setq lines (replace-match "\\1" t nil lines)))
-;;     lines))
-
-;; (defun org-e-odt-format-source-code-or-example
-;;   (lang code &optional opts indent caption)
-;;   "Format CODE from language LANG and return it formatted for export.
-;; The CODE is marked up in `org-export-current-backend' format.
-
-;; Check if a function by name
-;; \"org-<backend>-format-source-code-or-example\" is bound. If yes,
-;; use it as the custom formatter. Otherwise, use the default
-;; formatter. Default formatters are provided for docbook, html,
-;; latex and ascii backends. For example, use
-;; `org-e-odt-format-source-code-or-example' to provide a custom
-;; formatter for export to \"html\".
-
-;; If LANG is nil, do not add any fontification.
-;; OPTS contains formatting options, like `-n' for triggering numbering lines,
-;; and `+n' for continuing previous numbering.
-;; Code formatting according to language currently only works for HTML.
-;; Numbering lines works for all three major backends (html, latex, and ascii).
-;; INDENT was the original indentation of the block."
-;;   (save-match-data
-;;     (let* ((backend-formatter 'org-e-odt-format-source-code-or-example-plain)
-;; 	   num cont rtn rpllbl keepp textareap preserve-indentp cols rows fmt)
-;;       (setq opts (or opts "")
-;; 	    num (string-match "[-+]n\\>" opts)
-;; 	    cont (string-match "\\+n\\>" opts)
-;; 	    rpllbl (string-match "-r\\>" opts)
-;; 	    keepp (string-match "-k\\>" opts)
-;; 	    textareap (string-match "-t\\>" opts)
-;; 	    preserve-indentp (or org-src-preserve-indentation
-;; 				 (string-match "-i\\>" opts))
-;; 	    cols (if (string-match "-w[ \t]+\\([0-9]+\\)" opts)
-;; 		     (string-to-number (match-string 1 opts))
-;; 		   80)
-;; 	    rows (if (string-match "-h[ \t]+\\([0-9]+\\)" opts)
-;; 		     (string-to-number (match-string 1 opts))
-;; 		   (org-count-lines code))
-;; 	    fmt (if (string-match "-l[ \t]+\"\\([^\"\n]+\\)\"" opts)
-;; 		    (match-string 1 opts)))
-;;       (when (and textareap
-;; 		 ;; (eq org-export-current-backend 'html)
-;; 		 )
-;; 	;; we cannot use numbering or highlighting.
-;; 	(setq num nil cont nil lang nil))
-;;       (if keepp (setq rpllbl 'keep))
-;;       (setq rtn (if preserve-indentp code (org-remove-indentation code)))
-;;       (when (string-match "^," rtn)
-;; 	(setq rtn (with-temp-buffer
-;; 		    (insert rtn)
-;; 		    ;; Free up the protected lines
-;; 		    (goto-char (point-min))
-;; 		    (while (re-search-forward "^," nil t)
-;; 		      (if (or (equal lang "org")
-;; 			      (save-match-data
-;; 				(looking-at "\\([*#]\\|[ \t]*#\\+\\)")))
-;; 			  (replace-match ""))
-;; 		      (end-of-line 1))
-;; 		    (buffer-string))))
-;;       (when lang
-;; 	(if (featurep 'xemacs)
-;; 	    (require 'htmlize)
-;; 	  (require 'htmlize nil t)))
-
-;;       (setq backend-formatter
-;; 	    (cond
-;; 	     ((fboundp 'htmlize-region-for-paste)
-;; 	      'org-e-odt-format-source-code-or-example-colored)
-;; 	     (t
-;; 	      (message
-;; 	       "htmlize.el 1.34 or later is needed for source code formatting")
-;; 	      'org-e-odt-format-source-code-or-example-plain)))
-;;       (funcall backend-formatter rtn lang caption textareap cols rows
-;; 	       num cont rpllbl fmt))))
-
 (defun org-e-odt-example-block (example-block contents info)
   "Transcode a EXAMPLE-BLOCK element from Org to HTML.
 CONTENTS is nil.  INFO is a plist holding contextual information."
   (let* ((options (or (org-element-property :options example-block) ""))
 	 (value (org-export-handle-code example-block info)))
-    ;; (org-e-odt--wrap-label
-    ;;  example-block (format "\\begin{verbatim}\n%s\\end{verbatim}" value))
     (org-e-odt--wrap-label
      example-block (org-e-odt-format-source-code-or-example value nil))))
 
@@ -4257,13 +3796,13 @@ CONTENTS is nil.  INFO is a plist holding contextual information."
 				(string-to-number (match-string 0 value)))
 			   (plist-get info :with-toc))))
 	    (when (wholenump depth) (org-e-odt-toc depth info))))
-	 ((string= "tables" value) "\\listoftables")
-	 ((string= "figures" value) "\\listoffigures")
+	 ((string= "tables" value) "FIXME")
+	 ((string= "figures" value) "FIXME")
 	 ((string= "listings" value)
 	  (cond
 	   ;; At the moment, src blocks with a caption are wrapped
 	   ;; into a figure environment.
-	   (t "\\listoffigures")))))))))
+	   (t "FIXME")))))))))
 
 
 ;;;; Latex Environment
@@ -4341,7 +3880,7 @@ CONTENTS is nil.  INFO is a plist holding contextual information."
 (defun org-e-odt-line-break (line-break contents info)
   "Transcode a LINE-BREAK object from Org to HTML.
 CONTENTS is nil.  INFO is a plist holding contextual information."
-  "<br/>")
+  "<text:line-break/>\n")
 
 
 ;;;; Link
@@ -4487,14 +4026,13 @@ the plist used as a communication channel."
 	 (class (cdr (assoc style '((footnote . "footnote")
 				    (verse . nil)))))
 	 (extra (if class (format " class=\"%s\"" class) ""))
-	 (parent (car (org-export-get-genealogy paragraph info))))
-    (cond
-     ;; ((and (equal (car parent) 'item)
-     ;; 	   (= (org-element-property :begin paragraph)
-     ;; 	      (org-element-property :contents-begin parent)))
-     ;;  ;; leading paragraph in a list item have no tags
-     ;;  contents)
-     (t (org-e-odt-format-stylized-paragraph nil contents)))))
+	 (parent (car (org-export-get-genealogy paragraph info)))
+	 (parent-type (org-element-type parent))
+	 (style (case parent-type
+		  (quote-block 'quote)
+		  (center-block 'center)
+		  (t nil))))
+    (org-e-odt-format-stylized-paragraph style contents)))
 
 
 ;;;; Plain List
@@ -4589,8 +4127,7 @@ information."
   "Transcode a QUOTE-BLOCK element from Org to HTML.
 CONTENTS holds the contents of the block.  INFO is a plist
 holding contextual information."
-  (org-e-odt--wrap-label
-   quote-block (format "<blockquote>\n%s</blockquote>" contents)))
+  (org-e-odt--wrap-label quote-block contents))
 
 
 ;;;; Quote Section
@@ -4600,7 +4137,7 @@ holding contextual information."
 CONTENTS is nil.  INFO is a plist holding contextual information."
   (let ((value (org-remove-indentation
 		(org-element-property :value quote-section))))
-    (when value (format "<pre>\n%s</pre>" value))))
+    (when value (org-e-odt-format-source-code-or-example value nil))))
 
 
 ;;;; Section
@@ -4684,42 +4221,9 @@ contextual information."
 
 ;;;; Table
 
-;; (defun org-e-odt-begin-table (caption label attributes)
-;;   (let* ((html-table-tag (or (plist-get info :html-table-tag) ; FIXME
-;; 			     org-e-odt-table-tag))
-;; 	 (html-table-tag
-;; 	  (org-e-odt-splice-attributes html-table-tag attributes)))
-;;     (when label
-;;       (setq html-table-tag
-;; 	    (org-e-odt-splice-attributes
-;; 	     html-table-tag
-;; 	     (format "id=\"%s\"" (org-solidify-link-text label)))))
-;;     (concat "\n" html-table-tag
-;; 	    (format "\n<caption>%s</caption>" (or caption "")))))
-
-;; (defun org-e-odt-end-table ()
-;;   "</table>\n")
-
-;; (defun org-e-odt-format-table-cell (text r c horiz-span)
-;;   (let ((cell-style-cookie
-;; 	 (if org-e-odt-table-align-individual-fields
-;; 	     (format (if (and (boundp 'org-e-odt-format-table-no-css)
-;; 			      org-e-odt-format-table-no-css)
-;; 			 " align=\"%s\"" " class=\"%s\"")
-;; 		     (or (aref (plist-get table-info :alignment) c) "left")) ""))) ;; FIXME
-;;     (cond
-;;      (org-e-odt-table-cur-rowgrp-is-hdr
-;;       (concat
-;;        (format (car org-export-table-header-tags) "col" cell-style-cookie)
-;;        text (cdr org-export-table-header-tags)))
-;;      ((and (= c 0) org-e-odt-table-use-header-tags-for-first-column)
-;;       (concat
-;;        (format (car org-export-table-header-tags) "row" cell-style-cookie)
-;;        text (cdr org-export-table-header-tags)))
-;;      (t
-;;       (concat
-;;        (format (car org-export-table-data-tags) cell-style-cookie)
-;;        text (cdr org-export-table-data-tags))))))
+(defun org-e-odt-get-colwidth (c)
+  (let ((col-widths (plist-get table-info :width)))
+    (or (and org-lparse-table-is-styled (aref col-widths c)) 0)))
 
 (defun org-e-odt-table-row (fields &optional text-for-empty-fields)
   (incf org-e-odt-table-rownum)
@@ -4730,25 +4234,11 @@ contextual information."
 	(when (and (string= x "") text-for-empty-fields)
 	  (setq x text-for-empty-fields))
 	(incf i)
-	(let (horiz-span)
+	(let ((horiz-span (org-e-odt-get-colwidth i)))
 	  (org-e-odt-format-table-cell
-	   x org-e-odt-table-rownum i (or horiz-span 0))))
+	   x org-e-odt-table-rownum i horiz-span)))
       fields "\n"))))
 
-;; (defun org-e-odt-end-table-rowgroup ()
-;;   (when org-e-odt-table-rowgrp-open
-;;     (setq org-e-odt-table-rowgrp-open nil)
-;;     (if org-e-odt-table-cur-rowgrp-is-hdr "</thead>" "</tbody>")))
-
-;; (defun org-e-odt-begin-table-rowgroup (&optional is-header-row)
-;;   (concat
-;;    (when org-e-odt-table-rowgrp-open
-;;      (org-e-odt-end-table-rowgroup))
-;;    (progn
-;;      (setq org-e-odt-table-rowgrp-open t)
-;;      (setq org-e-odt-table-cur-rowgrp-is-hdr is-header-row)
-;;      (if is-header-row "<thead>" "<tbody>"))))
-
 (defun org-e-odt-table-preamble ()
   (let ((colgroup-vector (plist-get table-info :column-groups)) ;; FIXME
 	c gr colgropen preamble)
@@ -4878,7 +4368,11 @@ CONTENTS is nil.  INFO is a plist holding contextual information."
 	      (columns-number (length (plist-get table-info :alignment)))
 	      (lines (org-split-string
 		      (org-export-clean-table
-		       raw-table (plist-get table-info :special-column-p)) "\n")))
+		       raw-table (plist-get table-info :special-column-p)) "\n"))
+
+	      (genealogy (org-export-get-genealogy table info))
+	      (parent (car genealogy))
+	      (parent-type (org-element-type parent)))
 	 (org-e-odt-list-table lines caption label attr))))))
 
 
@@ -4971,24 +4465,8 @@ CONTENTS is nil.  INFO is a plist holding contextual information."
 ;;; Filter Functions
 
 ;;;; Filter Settings
-
-(defconst org-e-odt-filters-alist
-  '((:filter-final-output . org-e-odt-final-function))
-  "Alist between filters keywords and back-end specific filters.
-See `org-export-filters-alist' for more information.")
-
-
 ;;;; Filters
 
-(defun org-e-odt-final-function (contents backend info)
-  (if (not org-export-e-odt-prettify-xml) contents
-    (with-temp-buffer
-      (nxml-mode)
-      (insert contents)
-      (indent-region (point-min) (point-max))
-      (buffer-substring-no-properties (point-min) (point-max)))))
-
-
 ;;; Interactive functions
 
 (defun org-e-odt-export-to-odt
@@ -5105,15 +4583,10 @@ Return output file's name."
 		(cons (concat  "\\." (car desc) "\\'") 'archive-mode)))
  org-e-odt-file-extensions)
 
-;; register the odt exporter with the pre-processor
-(add-to-list 'org-export-backends 'odt)
-
-;; register the odt exporter with org-lparse library
-(org-lparse-register-backend 'odt)
-
-(eval-after-load 'org-exp
-  '(add-to-list 'org-export-inbuffer-options-extra
-		'("ODT_STYLES_FILE" :odt-styles-file)))
+;; FIXME
+;; (eval-after-load 'org-exp
+;;   '(add-to-list 'org-export-inbuffer-options-extra
+;; 		'("ODT_STYLES_FILE" :odt-styles-file)))
 
 (provide 'org-e-odt)