debian-python-odf/contrib/tracplugins/0.10/odfpreview/odfpreview.py

86 lines
3.0 KiB
Python

# -*- coding: utf-8 -*-
# Copyright (C) 2007 Søren Roug, European Environment Agency
#
# This is free software. You may redistribute it under the terms
# of the Apache license and the GNU General Public License Version
# 2 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#
# Contributor(s):
#
from trac.core import *
from trac.mimeview.api import IHTMLPreviewRenderer
import os
from tempfile import mkstemp
from odf.odf2xhtml import ODF2XHTML
class ODF2XHTMLBody(ODF2XHTML):
def __init__(self):
ODF2XHTML.__init__(self, generate_css=False, embedable=True)
def rewritelink(self, imghref):
imghref = imghref.replace("Pictures/","index_html?pict=")
return imghref
class OdfPreview(Component):
"""Display OpenDocument as HTML."""
implements(IHTMLPreviewRenderer)
def get_quality_ratio(self, mimetype):
self.env.log.debug('Trac checking for %s' % mimetype)
if mimetype in ('application/vnd.oasis.opendocument.text',
'application/vnd.oasis.opendocument.text-template',
'application/vnd.oasis.opendocument.spreadsheet',
'application/vnd.oasis.opendocument.presentation'):
return 7
return 0
def render(self, req, input_type, content, filename=None, url=None):
self.env.log.debug('HTML output for ODF')
odhandler = ODF2XHTMLBody()
hfile, hfilename = mkstemp('tracodf')
try:
if hasattr(content,'read'):
os.write(hfile, content.read())
else:
os.write(hfile, content)
os.close(hfile)
out = odhandler.odf2xhtml(hfilename).encode('us-ascii','xmlcharrefreplace')
except:
self.env.log.error("odf2xhtml failed")
finally:
os.unlink(hfilename)
if out != '':
return out
return "<h1>HTML preview failed</h1>"
# def render(self, req, input_type, content, filename=None, url=None):
# self.env.log.debug('HTML output for ODF')
# hfilename = None
# odhandler = ODF2XHTML()
# if filename is not None:
# infile = filename
# else:
# hfile, hfilename = mkstemp('tracodf')
# if hasattr(content,'read'):
# os.write(hfile, content.read())
# else:
# os.write(hfile, content)
# os.close(hfile)
# infile = hfilename
# out = odhandler.odf2xhtml(infile).encode('us-ascii','xmlcharrefreplace')
# if hfilename is not None:
# os.unlink(hfilename)
# return out