Back to index

moin  1.9.0~rc2
util.py
Go to the documentation of this file.
00001 # -*- coding: iso-8859-1 -*-
00002 """
00003     MoinMoin - XML Utilities
00004 
00005     @copyright: 2001 Juergen Hermann <jh@web.de>
00006     @license: GNU GPL, see COPYING for details.
00007 """
00008 
00009 from xml.sax import saxutils
00010 from MoinMoin import config
00011 
00012 
00013 class XMLGenerator(saxutils.XMLGenerator):
00014     default_xmlns = {}
00015 
00016     def __init__(self, out):
00017         saxutils.XMLGenerator.__init__(self, out=out, encoding=config.charset)
00018         self.xmlns = self.default_xmlns
00019 
00020     def _build_tag(self, tag):
00021         if type(tag) == type(""):
00022             qname = tag
00023             tag = (None, tag)
00024         else:
00025             qname = "%s:%s" % tag
00026             tag = (self.xmlns[tag[0]], tag[1])
00027         return tag, qname
00028 
00029     def startNode(self, tag, attr={}):
00030         tag, qname = self._build_tag(tag)
00031         self.startElementNS(tag, qname, attr)
00032 
00033     def endNode(self, tag):
00034         tag, qname = self._build_tag(tag)
00035         self.endElementNS(tag, qname)
00036 
00037     def simpleNode(self, tag, value, attr={}):
00038         self.startNode(tag, attr)
00039         if value:
00040             self.characters(value)
00041         self.endNode(tag)
00042 
00043     def startDocument(self):
00044         saxutils.XMLGenerator.startDocument(self)
00045         for prefix, uri in self.xmlns.items():
00046             self.startPrefixMapping(prefix or None, uri)
00047 
00048     def endDocument(self):
00049         for prefix in self.xmlns:
00050             self.endPrefixMapping(prefix or None)
00051         saxutils.XMLGenerator.endDocument(self)
00052 
00053 
00054 class RssGenerator(XMLGenerator):
00055     default_xmlns = {
00056         None:       "http://purl.org/rss/1.0/",
00057         'rdf':      "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
00058         'xlink':    "http://www.w3.org/1999/xlink",
00059         'dc':       "http://purl.org/dc/elements/1.1/",
00060         'wiki':     "http://purl.org/rss/1.0/modules/wiki/",
00061     }
00062 
00063     def __init__(self, out):
00064         XMLGenerator.__init__(self, out=out)
00065 
00066     def startDocument(self):
00067         XMLGenerator.startDocument(self)
00068         self.startElementNS((self.xmlns['rdf'], 'RDF'), 'rdf:RDF', {})
00069 
00070     def endDocument(self):
00071         self.endElementNS((self.xmlns['rdf'], 'RDF'), 'rdf:RDF')
00072         XMLGenerator.endDocument(self)
00073