Thread Modul Parse::BBCode (16 answers)
Opened by pq at 2011-05-16 18:46

pq
 2011-05-16 18:46
#148692 #148692
User since
2003-08-04
12207 Artikel
Admin1
[Homepage]
user image
Es hat sich einiges getan (alter thread Parse::BBCode).

CPAN:Parse::BBCode ist ein Modul, welches BBCode parst, einen parse tree bereitstellt und das ganze als HTML und auch als Text rendern kann.

Für die Features, die ich brauchte, war kein anderes Modul zu finden:
  • Erweiterbar mit eigenen Tags
  • "kaputter" BBCode soll nicht zu einem Abbruch führen
  • soweit wie möglich valides HTML


Es gibt viele Möglichkeiten, ein Tag zu rendern. Im einfachsten Fall gibt man einfach einen String an wie
h1 => 'block:<h1>%s</h1>'

Man kann aber auch eine Subroutine angeben, in der man viele Informationen zur Verfügung gestellt bekommt.
  • Ob man sich innerhalb eines Tags mit der Klasse 'url' befindet, worin einfache tags wie [b] gerendert werden sollen, aber keine weiteren urls geparst werden sollen, z.B. mittels URI::Find.
  • Innerhalb welcher Tags man sich befindet (wichtig für das [list] und [*] tag - letzteres soll nur innerhalb einer liste in <li> umgewandelt werden).
  • Welche Nummer ein Tag hat, also z.B. code-Tag Nummer 3 (wichtig, um Code-Downloads bereitzustellen)
  • Man kann ausserdem einen Hash mit eigenen Parametern an die render()-Methode übergeben, die dann in den einzelnen Subroutinen ausgewertet wird. Auch wichtig für Code-Downloads, um z.b. die Artikel-ID zu übergeben. Sonst müsste man den Parser bei jedem Aufruf neu erstellen oder umständlich eine closure erzeugen.
  • In der Subroutine hat man Zugriff auf den schon gerenderten Text der inneren Tags, aber bei Bedarf kann man sich auch den Originaltext holen (wie oben erwähnt nötig bei [*] Tags, die nicht innerhalb eines list-Tags sind)


Ausserdem möchte man auf den Rest des Textes evtl. noch weitere Prozessoren anwenden. Die beiden häufigsten habe ich als Option hinzugefügt
  • url_finder: Nutzt URI::Find und wandelt Links in <a> tags um. Das <a> Tag ist konfigurierbar, ausserdem die Länge des angezeigten Titels (wird bei Überschreitung abgeschnitten)
  • smileys: Ersetzt smileys mit den angegebenen Icons.
  • text_processor: Für alle weiteren Sachen, die man auf den Text anwenden will


Ein code-Tag mit Downloadfunktion ist als Beispielscript in examples/code_download.pl enthalten.

edit: für die oben erwähnten url_finder, text_processor, smileys und code_download.pl bitte z.zt. in die aktuellste developer-version 0.12_004 schauen

edit 2012-05-07: nun auch auf github gehostet: https://github.com/perlpunk/Parse-BBCode
Last edited: 2012-05-07 12:47:15 +0200 (CEST)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread Modul Parse::BBCode