########################################################################
# $Header: /var/local/cvsroot/4Suite/Ft/Xml/Xslt/HtmlWriter.py,v 1.29 2005/02/09 09:14:48 mbrown Exp $
"""
HTML writer for XSLT processor output
Copyright 2005 Fourthought, Inc. (USA).
Detailed license and copyright information: http://4suite.org/COPYRIGHT
Project home, documentation, distributions: http://4suite.org/
"""
from Ft.Xml import EMPTY_NAMESPACE
from Ft.Xml.Lib import HtmlPrinter,HtmlPrettyPrinter
from Ft.Xml.Xslt import XmlWriter
class HtmlWriter(XmlWriter.XmlWriter):
"""
Takes events such as those generated by an XSLT processor and
invokes a serializer to produce HTML. Uses XML syntax for
elements in a non-empty namespace. Instructs the serializer to
insert a Content-Type 'meta' element in the first 'head' element.
"""
def _completeLastElementAfterMeta(self):
XmlWriter.XmlWriter._completeLastElement(self)
return
def _completeLastElement(self):
# XmlWriter clears self._elementName before returning
if self._elementName and self._elementUri == EMPTY_NAMESPACE:
in_head_tag = (self._elementName.lower() == u'head')
else:
in_head_tag = False
XmlWriter.XmlWriter._completeLastElement(self)
if in_head_tag:
# Output the META tag
content = u'%s; charset=%s' % (self._outputParams.mediaType,
self._outputParams.encoding)
attrs = {u'http-equiv' : u'Content-Type',
u'content' : content,
}
self._printer.startElement(None, u'meta', {}, attrs)
self._printer.endElement(None, u'meta')
self._completeLastElement = self._completeLastElementAfterMeta
return
def startDocument(self):
self._outputParams.setDefault('version', '4.0')
self._outputParams.setDefault('encoding', 'iso-8859-1')
self._outputParams.setDefault('indent', 1)
self._outputParams.setDefault('mediaType', 'text/html')
encoding = self._outputParams.encoding.encode('ascii')
version = self._outputParams.version.encode('ascii')
if self._outputParams.indent:
printer = HtmlPrettyPrinter.HtmlPrettyPrinter
else:
printer = HtmlPrinter.HtmlPrinter
self._printer = printer(self._stream, encoding)
self._printer.startDocument(version)
return
|