Extend the genshi.builder.tag

2 views
Skip to first unread message

kindy

unread,
Sep 28, 2008, 4:53:49 AM9/28/08
to Genshi
the genshi.builder.tag allow us create element easy and quickly,
but some times we need to create element in html or xhtml, so i do
this.
share to you .

{{{
from builder import Element, ElementFactory, Stream

__all__ = ['htmltag', 'xhtmltag', 'tag']

class CustomElement(Element):

def __init__(self, tag_, serializer, **attrib):
Element.__init__(self, tag_, **attrib)
self.serializer = serializer

def __repr__(self):
return '<%s "%s">' % (self.__class__.__name__, self.tag)

def insert(self, idx, node):
if isinstance(node, (Stream, Element, basestring, int, float,
long)):
self.children.insert(idx, node)
elif isinstance(node, Fragment):
self.children[idx:idx] = node.children
elif node is not None:
try:
for node_ in node:
self.insert(idx, node_)
except TypeError:
self.children.insert(idx, node)

def generate(self):
return Stream(self._generate(), serializer=self.serializer)

class CustomElementFactory(ElementFactory):

def __init__(self, serializer, namespace=None):
ElementFactory.__init__(self, namespace)
self.serializer = serializer

def __getitem__(self, namespace):
return CustomElementFactory(self.serializer, namespace)

def __getattr__(self, name):
return CustomElement(self.namespace and self.namespace[name]
or name, self.serializer)


htmltag = CustomElementFactory('html')
xhtmltag = CustomElementFactory('xhtml')
tag = CustomElementFactory('xml')
}}}
Reply all
Reply to author
Forward
0 new messages