Erfahrungen mit Creoleparser?

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

Freitag 14. März 2008, 11:26


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

Samstag 15. März 2008, 11:13

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

Samstag 15. März 2008, 11:26

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:

Samstag 15. März 2008, 16:03

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
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Samstag 15. März 2008, 18:12

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

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

Samstag 15. März 2008, 21:25

der Creoleparser.


Gruß
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 15. März 2008, 22:56

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 Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Sonntag 16. März 2008, 09:28

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?

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

Sonntag 16. März 2008, 09:56

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:

Sonntag 16. März 2008, 10:26

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

Sonntag 16. März 2008, 10:38

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
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Sonntag 16. März 2008, 10:55

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Sonntag 16. März 2008, 11:13

@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
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Sonntag 16. März 2008, 11:21

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/

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

Donnerstag 20. März 2008, 10:07

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
Antworten