Ich melde mich mal auch nochmal zu Wort. Hatte ich eig. nicht mehr vor.
Irgendwo auf diesen 51 52 Seiten hier haben wir ja schonmal geschrieben das wir bereits mehrfach versucht haben eine solche Implementation zu schreiben. Die aktuelle Implementation sieht so aus: http://paste.pocoo.org/show/MurhMjRAmoYipXHnjN0j/
Im Inyoka-Parser gibt es sog. Transformatoren die nach dem eigendlichen Lexing Vorgang durchlaufen und Dynamische Macors expandieren, Smileys implementieren und all son' schmarn.
Wie Oskar schon sagte gibt es das Problem das auf Ebene des Lexers bereits Newlines als Tokens benutzt werden um Syntax-Konstrukte wie Listen, Tabellen und eben Paragraphen ordentlich zu implementieren. Das zu deaktivieren (Vorraussetzung für den oben genannten BozoNewlines-Transformator) würde die Implementation aufblähen.
Davon mal abgesehen und auf deinen Vorschlag eingehend den nl2p-Parser nach dem parsing drüberrennen zu lassen:
Ich kann dir den derzeitigen Parser-Workflow mal Schematisch darstellen
Der Benutzer speichert einen Beitrag
|----------------| | Text | |----------------| | Lexing | | \ / Token-Stream | Parsing | | \ / AST (Abstract Syntax Tree) | | | Speichern | | | \ / \ / AST HTML \ / \ / \ / Datenbank
Nun liegt in der Datenbank der AST und das gerenderte HTML vor. Der Renderer ansich ist abstrakt genug um quasi nur das Stichwort "html" zu benötigen und den Rest erledigen die Nodes im AST. Hier ein
(vereinfacht)
1 2 3 | if format == 'html': result = render_html(tree) result = onlies_nl2p_parser(result) |
...einzubauen bricht die Abstraktheit. Nun, mal davon abgesehen würde es hier gehen. Aber der Parser kennt ja auch noch Docbook und kann theoretisch viele andere Formate lernen. Also ist hier Abstraktheit gefragt.
Aber nichts destotrotz werden wir den nl2p Parser nicht einbauen. Es hat seinen Grund das (X)HTML keine Newlines laut Spec interpretiert, sondern diese speziell ausgezeichnet werden müssen. Das macht Tex nicht anders. So macht es auch fast jede vernünftige Wiki-Software. MoinMoin z.B. Und genauso macht es auch Inyoka.
Das man deinen Parser noch tierisch erweitern müsste damit der überhaupt sinnvoll Newlines zu Paragraphs bastelt ist dir so nebenbei sicherlich klar. Weiterhin ist es absolut untypisch und unschön nur über den Abstand von Paragraphen Leerzeilen und Zeilenumbrüche zu unterscheiden. Dafür gibt es halt <br />.
Wie gesagt, es ist schön das du den Parser uns zur verfügung stellst. Aber es hat nichts damit zu tun, das wir Python und du PHP benutzt, nichts damit das wir einfach ignorant sind sondern es hat viele andere Gründe die hier im Thread mehrfach aufgezählt wurden.
Wenn wir jetzt wieder die Syntax (bzw. das Resultat) ändern müssen 90.000 Benutzer abermals umlernen
Die Resultate im Wiki und Forum währen andere. Das Hauptziel der Inyoka-Syntax währe damit zerstört
Wir richten uns nunmal nach XHTML, Tex und anderen Wiki-Engines. Und nicht nach BBCode.
Ich weiß ja nicht wie lange du das Thema hier immer und immer wieder beleben möchtest. Aber an der aktuellen Situation wird sich schlicht und einfach nicht so schnell etwas ändern.
Grüße, Christopher
(der insgeheim hofft das der Thread hier endlich mal einschläft)