Ich habe soeben mein Markup-Language-Toolkit DMLT in der Version 0.1 released!
DMLT ist ein kleines Toolkit, was das verarbeiten von Markup-Sprachen vereinfachen soll. Man beschreibt die „Sprache“ anhand von Anweisungen die von `dmlt.machine.Directive` abgeleitet werden.
Als Beispiel eine Direktive, die vereinfacht `{{{ code }}}` darstellt:
Code: Alles auswählen
class CodeDirective(Directive):
rule = rule(r'\{\{\{|\}\}\}', enter='code')
def parse(self, stream):
stream.expect('code_begin')
data = escape(u''.join(filter_stream(stream, 'code_end')))
stream.expect('code_end')
return nodes.Preformatted([nodes.HTML(data)])
So, das ist schon alles. `parse` gibt eine `node` zurück, die einen Teil in einem AST darstellt, welcher später dann in ein entsprechendes Ausgabe-Format gewandelt wird. Ein Textknoten sieht z.B. dann so aus:
Code: Alles auswählen
class Element(Container):
"""
Baseclass for elements.
"""
def __init__(self, children=None, id=None, style=None, class_=None):
Container.__init__(self, children)
self.id = id
self.style = style
self.class_ = class_
@property
def text(self):
rv = Container.text.__get__(self)
return rv
class Preformatted(Element):
"""
Preformatted text.
"""
is_raw = True
def prepare_html(self):
yield build_html_tag(u'pre', id=self.id, style=self.style,
class_=self.class_)
for item in Element.prepare_html(self):
yield item
yield u'</pre>'
Weitere Features sind unter anderem das compilieren und decompilieren eines AST-Baums sowie verschiedene HTML-Utilities.
Als Beispiel mal eine simple Implementation eines Mixes aus Trac und MoinMoin Syntax (nicht vollständig):
http://paste.pocoo.org/show/79205/ (parser.py)
http://paste.pocoo.org/show/79206/ (nodes.py)
Download gibts hier: http://pypi.python.org/pypi/Descriptive ... oolkit/0.1
Ich hoffe, auf Meinungen und Anregungen für weitere Versionen

Gruß, Christopher