diff --git a/src/Makefile.am b/src/Makefile.am
index cfb6ea43..892ed4f2 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -609,6 +609,7 @@ filters/rclscribus \
filters/rclshowinfo \
filters/rclsiduxman \
filters/rclsoff.py \
+filters/rclsoff-flat.py \
filters/rclsvg.py \
filters/rcltar \
filters/rcltex \
diff --git a/src/filters/rclsoff-flat.py b/src/filters/rclsoff-flat.py
new file mode 100755
index 00000000..7649dd8b
--- /dev/null
+++ b/src/filters/rclsoff-flat.py
@@ -0,0 +1,204 @@
+#!/usr/bin/env python
+# Copyright (C) 2014 J.F.Dockes
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the
+# Free Software Foundation, Inc.,
+# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+######################################
+
+from __future__ import print_function
+
+import sys
+import rclexecm
+import rclxslt
+from zipfile import ZipFile
+
+stylesheet_meta = '''
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ abstract
+
+
+
+
+
+
+
+
+
+ keywords
+
+
+
+
+
+
+
+
+
+ author
+
+
+
+
+
+
+
+
+
+ keywords
+
+
+
+
+
+
+
+
+'''
+
+stylesheet_content = '''
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+'''
+
+class OOExtractor:
+ def __init__(self, em):
+ self.em = em
+ self.currentindex = 0
+
+ def extractone(self, params):
+ if "filename:" not in params:
+ self.em.rclog("extractone: no mime or file name")
+ return (False, "", "", rclexecm.RclExecM.eofnow)
+ fn = params["filename:"]
+
+ try:
+ f = open(fn)
+ data = f.read()
+ f.close()
+ except Exception as err:
+ self.em.rclog("open failed: %s" % err)
+ return (False, "", "", rclexecm.RclExecM.eofnow)
+
+ docdata = b'\n
\n\n'
+
+ try:
+ res = rclxslt.apply_sheet_data(stylesheet_meta, data)
+ docdata += res
+ except:
+ # To be checked. I'm under the impression that I get this when
+ # nothing matches?
+ #self.em.rclog("no/bad metadata in %s" % fn)
+ pass
+
+ docdata += b''
+
+ try:
+ res = rclxslt.apply_sheet_data(stylesheet_content, data)
+ docdata += res
+ docdata += b''
+ except Exception as err:
+ self.em.rclog("bad data in %s: %s" % (fn, err))
+ return (False, "", "", rclexecm.RclExecM.eofnow)
+
+ return (True, docdata, "", rclexecm.RclExecM.eofnext)
+
+ ###### File type handler api, used by rclexecm ---------->
+ def openfile(self, params):
+ self.currentindex = 0
+ return True
+
+ def getipath(self, params):
+ return self.extractone(params)
+
+ def getnext(self, params):
+ if self.currentindex >= 1:
+ return (False, "", "", rclexecm.RclExecM.eofnow)
+ else:
+ ret= self.extractone(params)
+ self.currentindex += 1
+ return ret
+
+if __name__ == '__main__':
+ proto = rclexecm.RclExecM()
+ extract = OOExtractor(proto)
+ rclexecm.main(proto, extract)
diff --git a/src/sampleconf/mimeconf b/src/sampleconf/mimeconf
index f0265827..bc403727 100644
--- a/src/sampleconf/mimeconf
+++ b/src/sampleconf/mimeconf
@@ -72,6 +72,9 @@ application/vnd.oasis.opendocument.text-template = execm rclsoff.py
application/vnd.oasis.opendocument.presentation = execm rclsoff.py
application/vnd.oasis.opendocument.spreadsheet = execm rclsoff.py
application/vnd.oasis.opendocument.graphics = execm rclsoff.py
+application/vnd.oasis.opendocument.spreadsheet-flat-xml = execm rclsoff-flat.py
+application/vnd.oasis.opendocument.presentation-flat-xml = execm rclsoff-flat.py
+application/vnd.oasis.opendocument.spreadsheet-flat-xml = execm rclsoff-flat.py
application/vnd.openxmlformats-officedocument.wordprocessingml.document = \
execm rclopxml.py
application/vnd.openxmlformats-officedocument.wordprocessingml.template = \
diff --git a/src/sampleconf/mimemap b/src/sampleconf/mimemap
index 783a6b05..bf24062b 100644
--- a/src/sampleconf/mimemap
+++ b/src/sampleconf/mimemap
@@ -112,6 +112,10 @@
.sxg = application/vnd.sun.xml.writer.global
.stw = application/vnd.sun.xml.writer.template
+.fods = application/vnd.oasis.opendocument.spreadsheet-flat-xml
+.fodp = application/vnd.oasis.opendocument.presentation-flat-xml
+.fods = application/vnd.oasis.opendocument.spreadsheet-flat-xml
+
# ms openxml
.docm = application/vnd.ms-word.document.macroEnabled.12
.docx = application/vnd.openxmlformats-officedocument.wordprocessingml.document