File: OutputHandler.py

package info (click to toggle)
python-xml 0.8.4-10.1%2Blenny1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 4,972 kB
  • ctags: 10,628
  • sloc: python: 46,730; ansic: 14,354; xml: 968; makefile: 201; sh: 20
file content (56 lines) | stat: -rw-r--r-- 1,858 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import string
from xml.xslt import NullWriter, PlainTextWriter
from xml.xslt import HtmlWriter, XmlWriter

class OutputHandler(NullWriter.NullWriter):
    def __init__(self, outputParams, stream, notifyFunc):
        self._outputParams = outputParams
        self._stream = stream
        self._notify = notifyFunc
        self._stack = []

    def _finalize(self, writerClass):
        writer = writerClass(self._outputParams, self._stream)
        self._notify(writer)
        writer.startDocument()
        newline = 0
        for (cmd, args, kw) in self._stack:
            if newline:
                writer.text('\n')
            else:
                newline = 1
            apply(getattr(writer, cmd), args, kw)
        self._outputParams = None
        self._stream = None
        self._notify = None
        self._stack = []

    def getResult(self):
        return ''

    def startDocument(self):
        if self._outputParams.method == 'html':
            self._finalize(HtmlWriter.HtmlWriter)
        elif self._outputParams.method == 'xml':
            self._finalize(XmlWriter.XmlWriter)
        elif self._outputParams.method == 'text':
            self._finalize(PlainTextWriter.PlainTextWriter)

    def text(self, *args, **kw):
        self._stack.append(('text', args, kw))
        if string.strip(args[0]):
            self._finalize(XmlWriter.XmlWriter)

    def processingInstruction(self, *args, **kw):
        self._stack.append(('processingInstruction', args, kw))

    def comment(self, *args, **kw):
        self._stack.append(('comment', args, kw))

    def startElement(self, *args, **kw):
        self._stack.append(('startElement', args, kw))
        tagName = args[0]
        if string.upper(tagName) == 'HTML':
            self._finalize(HtmlWriter.HtmlWriter)
        else:
            self._finalize(XmlWriter.XmlWriter)