DMLT - Markup Toolkit

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

DMLT - Markup Toolkit

Beitragvon EnTeQuAk » Samstag 12. Juli 2008, 10:54

Hallo liebe Pythonbenutzer!

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)])


Es ist auch möglich mehrere Regeln (`rule`) für die Syntax zu erstellen, da einfach `rules` überschreiben.

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>'


Wobei `Container` eine von DMLT gestellte Basis-Node ist, um Container mit Child-Nodes darzustellen.

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder