AdvancedBBCodeParser

1. Einführung

Der AdvancedBBCodeParser ist eine generische Implementierung eines BBCode-Formatierers. Im Gegensatz zum herkömmlichen BBCodeParser ist dieser leichgewichtig und mit der verwendeten Provider-Logik einfach anpassbar. Der Parser bringt standardmäßig vier Provider mit, die Schrift-Stile (fett, kursiv, unterstrichen), Schriftgröße (je nach Konfiguration), Schrift-Farbe (je nach Konfiguration) und Zeilenumbrüche im übergebenen Text entsprechend formatiert.

2. Aufbau

Der Parser besteht aus aus insgesamt drei Klassendefinitionen: einer BBCodeParserDefinition, die einen Output-Provider (zuständig für die Formatierung) beschreibt, einem Interface für den Provider (BBCodeParserProvider) und dem Parser selbst (AdvancedBBCodeParser). Da Provider grundsätzlich in der Lage sein müssen an Hand des aktuellen Kontextes der Applikation Konfigurationsdateien zu laden sollte der AdvancedBBCodeParser möglichst als ServiceObject erzeugt werden, damit dieser über den aktuellen Kontext verfügt.

Soll ein weiterer Provider hinzugefügt oder einbestehender ersetzt werden, so muss die Implementierung des Providers stets von der Klasse BBCodeParserProvider erben. Eine einfache Provider-Definition kann dem folgenden Quellcode-Kasten entnommen werden:

PHP-Code
use APF\tools\string\BBCodeParserProvider; class NewLineProvider extends BBCodeParserProvider { public function getOutput($string){ return nl2br($string); } }

Der AdvancedBBCodeParser kann dabei beliebig viele Provider ausführen.

3. Anwendung

Soll der AdvancedBBCodeParser mit der Standard-Einstellung verwendet werden, muss sichergestellt sein, dass je eine Konfigurationsdatei für die Schriftgrößen und Schriftfarben existiert. Diese werden unter den Namespace APF\tools\string\bbcpprovider und dem jeweiligen Kontext der Applikation erwartet. Die Definition der Schriftgrößen muss in der Datei

APF-Template
{Environment}_fontsize.ini

enthalten sein, die Farben in der Datei

APF-Template
{Environment}_fontcolor.ini

Die Konfigurationen bestehen dabei aus einer festen Sektion und einer variablen Anzahl von Größen- und Farb-Definitionen:

DEFAULT_fontsize.ini:
APF-Konfiguration
[Sizes] 1 = "10px" 2 = "12px" 3 = "16px" 4 = "18px" 5 = "24px" 6 = "32px"
DEFAULT_fontcolor.ini:
APF-Konfiguration
[Colors] green = "#56a437" blue = "#002488" lightblau = "rgb(102 153 255)" orange = "rgb(233 142 31)" gray = "#666666" red = "red"

Anschließend kann der Parser wie folgt angewendet werden:

PHP-Code
$bP = &$this->getServiceObject('APF\tools\string\AdvancedBBCodeParser'); echo $bP->parseCode($string);

4. Erweiterte Konfiguration

Um die bestehenden Provider zu ergänzen oder auszutauschen oder neue hinzuzufügen, stehen die Methoden addProvider() und removeProvider() zur Verfügung. Die standardmäßig beinhalteten Provider können unter folgendem Alias angesprochen werden:

  • standard.font.style: Formatierung von Schrift-Varianten (fett, kursiv, unterstrichen)
  • standard.font.size: Formatierung von Schrift-Größen
  • standard.font.color: Formatierung von Schrift-Farben
  • standard.newline: Formatierung von Zeilenumbrüchen

Weitere Aliases können frei definiert werden. Das folgende Beispiel zeigt, wie die bestehende Provider ersetzt und neue hinzugefügt werden können:

PHP-Code
use APF\tools\string\AdvancedBBCodeParser; use APF\tools\string\BBCodeParserDefinition; $bP = &$this->getServiceObject('APF\tools\string\AdvancedBBCodeParser'); // Bestehenden Provider ersetzten $fontProv = new BBCodeParserDefinition('VENDOR\pres\bbcp\MyFontParser'); $bP->addProvider('standard.font.style', $fontProv); // Neuen Provider hinzufuegen $specProv = new BBCodeParserDefinition('VENDOR\pres\bbcp\MySpecialParser'); $bP->addProvider('special_provider', $specProv); // Bestehenden Provider entfernen $bP->removeProvider('standard.newline'); echo $bP->parseCode($string);

Kommentare

Möchten Sie den Artikel eine Anmerkung hinzufügen, oder haben Sie ergänzende Hinweise? Dann können Sie diese hier einfügen. Die bereits verfassten Anmerkungen und Kommentare finden Sie in der untenstehenden Liste.
Für diesen Artikel liegen aktuell keine Kommentare vor.