Erfahrungen mit Creoleparser?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:


GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Das Werkzeug „simplewiki“ nutzt ihn.

Siehe http://dev.pocoo.org/projects/werkzeug/ ... simplewiki


Ist jedenfalls ganz schick, aber als Abhängigkeit kommt halt Genshi mit. Wenn man Genshi allerdings wie im obigen Beispiel als Template Engine einsetzt, isses wunderbar :)


MfG EnTeQuAK
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Was ich da in dem "Cheat Sheet compact" sehe, kann man in 15min mit ein paar regulären Ausdrücken selbst bauen. Ich habe das jedenfalls schon mehrfach so oder so ähnlich in verschiedenen Sprachen gemacht und würde dafür nicht auf eine fremde Bibliothek setzen.

Stefan
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

sma hat geschrieben:Was ich da in dem "Cheat Sheet compact" sehe, kann man in 15min mit ein paar regulären Ausdrücken selbst bauen. Ich habe das jedenfalls schon mehrfach so oder so ähnlich in verschiedenen Sprachen gemacht und würde dafür nicht auf eine fremde Bibliothek setzen.
klar :lol:
TUFKAB – the user formerly known as blackbird
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

EnTeQuAk hat geschrieben:aber als Abhängigkeit kommt halt Genshi mit.
Wie jetzt? Braucht Creole Genshi oder das simplewiki?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

der Creoleparser.


Gruß
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:Wie jetzt? Braucht Creole Genshi oder das simplewiki?
Creole ist nur die Spec, du kannst dir also auch einen Creole Parser mittels PLY aus der EBNF-Grammatik selbst bauen. Der Creoleparser hingegen, ein Parser der Creole-Syntax benötigt Genshi. Es hindert dich aber keiner dran, selbst einen zu schreiben, mit der formellen Grammatik ist ja ein komplizierterer Teil bereits erledigt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ah, jetzt geht mir ein Licht auf. Die interessante Seite ist ja http://pages.infinit.net/shday/Creoleparser/index.html und nicht die Spec.
Ich habe da etwas falsch verstanden. Ich dache der Creoleparser wäre quasi das was Descriptive Markup Language Toolkit werden sollte. Was ist aus DMLT geworden, EnTeQuAk?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Die Formatierungen aus dem "cheat sheet" deckt folgender Code ab:

Code: Alles auswählen

import re

def format(text):
    noformat = []

    def escape(m):
        noformat.append("<pre><code>%s</code></pre>" % m.group(1))
        return "<@%i@>" % (len(noformat) - 1)
    
    def table(m):
        line = m.group(1)
        line = re.sub(r'\|=([^|]*)', r'<th>\1</th>', line)
        line = re.sub(r'\|([^|]*)', r'<td>\1</td>', line)
        return '<table><tr>%s</tr></table>' % line

    text = re.sub(r'&', r'&', text)
    text = re.sub(r'<', r'<', text)
    text = re.sub(r'(?ms)^\{\{\{(.*?)\}\}\}', escape, text)
    text = re.sub(r'(?m)^== (.*)$', r'<h1>\1</h1>', text)
    text = re.sub(r'(?m)^=== (.*)$', r'<h2>\1</h2>', text)
    text = re.sub(r'(?m)^==== (.*)$', r'<h3>\1</h3>', text)
    text = re.sub(r'(?m)^\* (.*)$', r'<ul><li>\1</li></ul>', text)
    text = re.sub(r'(?m)^\** (.*)$', r'<ul><li><ul><li>\1</li></ul></li></ul>', text)
    text = re.sub(r'(?m)^(\|.*)\|$', table, text)
    text = re.sub(r'(?m)^([^<\n].*)$', r'<p>\1</p>', text)
    
    text = re.sub(r'</p>\n<p>', '\n', text)
    text = re.sub(r'</ul>\n<ul>', '\n', text)
    text = re.sub(r'</ul></li>\n<li><ul>', '\n', text)
    text = re.sub(r'</table>\n<table>', '\n', text)

    text = re.sub(r'\[\[(.*?)\|(.*?)\]\]', r'<a href="\1">\2</a>', text)
    text = re.sub(r'\[\[(.*?)\]\]', r'<a href="\1">\1</a>', text)
    text = re.sub(r'\{\{(.*?)\|(.*?)\}\}', r'<img src="\1" alt="\2"/>', text)
    text = re.sub(r'//\b(.*?)\b//', r'<i>\1</i>', text)
    text = re.sub(r'\*\*\b(.*?)\b\*\*', r'<b>\1</b>', text)
    text = re.sub(r'\\', r'<br/>', text)
    
    text = re.sub(r'<@(\d+)@>', lambda m: noformat[int(m.group(1))], text)
    
    return text
Stefan
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Ist aber weder ein Parser, noch kann das schlechte Formatierungen des Benutzers berücksichtigen.
Jens hat geschrieben:ch habe da etwas falsch verstanden. Ich dache der Creoleparser wäre quasi das was Descriptive Markup Language Toolkit werden sollte. Was ist aus DMLT geworden, EnTeQuAk?
Nein, ist er nicht wie du selber schon bemerkt hast.

DMLT ist derzeit am kompletten rewrite, und pausiert (jaja, schlechte kombo...).

Gruß, Christopher
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Warum ist es wichtig, ob es ein Parser ist? Mein Programm versteht eine Syntax. Damit ist es ein Parser. Es meldet allerdings keine Syntaxfehler. Es ist sogar ein Compiler, denn ich übersetze, was ich verstehe, in HTML. Und was heißt schlechte Formatierung? Entweder hält sich der Benutzer an die Syntax und dann klappt es oder er hält sich nicht daran und dann gilt "garbage in -> garbage out". Ich finde, das reicht für so etwas einfaches wie Text-Formatierung. Ich glaube, dem Benutzer ist weniger geholfen, wenn man statt den Text zu formatieren einen Fehler der Art "// expected to close italics region" ausgibt.

Stefan
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

sma hat geschrieben:Die Formatierungen aus dem "cheat sheet" deckt folgender Code ab:...
Ist ja ganz nett, hat aber einige Bugs ;)
Ich hab es mal mit einem Test Text probiert: http://paste.pocoo.org/show/33812/

Aber so ist es immer. Man kommt schnell nach ans Ziel, aber bis zu 100% ist es noch ein langer Weg ;)

Vielleicht sollte ich mein tinyTextile mal wieder anfassen ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

@sma: Dein Parser ist leider: gültiger Creole-Quelltext in, Garbage out. Die haben auf der Seite einen Testfall. Probier den mal aus, da funktioniert echt vieles nicht.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Es gibt auch hier einen Test: http://code.google.com/p/creoleparser/s ... r/tests.py
...der google codehightligher kommt da ein wenig durcheinander, pygments kann's besser: http://paste.pocoo.org/show/33815/

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

BlackJack hat geschrieben:@sma: Dein Parser ist leider: gültiger Creole-Quelltext in, Garbage out. Die haben auf der Seite einen Testfall. Probier den mal aus, da funktioniert echt vieles nicht.
Hey, ich habe nur versprochen, in 15min das zu verarbeiten, was da auf der Startseite stand. Keine zusätzlichen Testfälle. Verschachteltes bold/italic war da genauso wenig zu sehen wie Überschriften größer H3, Link-Varianten, eingebetteter Code in einer Zeile usw. Dinge wie "----" in <hr> oder "#" statt "*" hatte ich mir gespart, weil diese simpel genug waren.

Ein paar Sachen ließen sich noch leicht korrigieren, aber z.B. verschachtelte Textauszeichnungen zu erkennen wird mit regulären Ausdrücken alleine nicht klappen. Ich könnte vielleicht nach wie vor mit regulären Ausdrücken einen Token-Stream erzeugen, müsste diesen aber "klassisch" mit einem top-down-Parser verarbeiten.

Stefan
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hmm, Moment, gibt es nicht schon einen Parser dafür? ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hab jetzt eine Implementierung gefunden, die kein Genshi benötigt:
http://djikiki.googlecode.com/svn/trunk/djikiki/creole/

Stammt wohl ursprünglich aus MoinMoin: http://hg.moinmo.in/moin/1.7/file/tip/MoinMoin/parser/

Oder ob das das original ist: http://sheep.art.pl/devel/creole/file/tip ?

Was jetzt noch toll wäre, ein WYSIWYG JavaScript Editor der Creole Markup statt html ausspuckt...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten