Dokumentation der StringParser_BBCode-Klasse

6. Flags zum Steuern des Verhaltens der Klasse

6.1 Allgemeines

Man kann bei jedem definierten Code auch Flags setzen. Ein Flag sagt der Klasse, dass bei diesem Code bestimmte Besonderheiten auftreten, die zu Berücksichtigen sind. Um für einen Code ein Flag zu setzen, muss die Methode setCodeFlag aufgerufen werden:

$bbcode->setCodeFlag ('b', 'mein_flag', 'mein_wert');

Die Methode hat folgenden Prototyp:

void setCodeFlag (string $code, string $name, mixed $value);

$code
Gibt den Namen des Codes an, für den das Flag gesetzt werden soll.
$name
Gibt den Namen des Flags an, das gesetzt werden soll. Hinweis: Falls ein Flag schon gesetzt wurde, wird der Wert beim zweiten Aufruf überschrieben. Es wird desweiteren nicht geprüft, ob das Flag überhaupt gültig ist, sie können folglich beliebige Flags setzen, allerdings haben nur bestimmte, weiter unten aufgezählte Flags eine besondere Bedeutung für die Klasse - alle anderen werden ignoriert.
$value
Der Wert des Flags, das zu setzen ist.

6.2 Liste aller Flags

Es folgt nun eine Liste aller Flags, die von der Klasse interpretiert werden. Hinweis: Die meisten Werte für die Flags sind Konstanten. Daher sind diese nicht in Anführungszeichen zu setzen. Falls dies doch notwendig sein sollte, wird dies explizit durch Anführungszeichen gekennzeichnet!

Name des Flags Wert Bedeutung
'case_sensitive' true / false Gibt an, ob Klein- und Großschreibung bei diesem Code beachtet werden sollen. Standard ist true, d.h. es wird zwischen Klein- und Großschreibung unterschieden (bspw. wäre [b] nicht gleich [B]). Bitte sehen Sie sich auch den globalen Flag caseSensitive an.
'closetag' Gibt an, wie der Endtag zu behandeln ist. Dieses Flag und dessen Verhalten ist alles andere, als trivial, deswegen empfielt es sich, einfach einmal mit den Flags zu spielen, um die Effekte genau beobachten zu können.
BBCODE_CLOSETAG_FORBIDDEN Der Endtag darf nicht vorkommen. Falls er doch vorkommt, wird das Vorkommen als normaler Text angefügt und das Element an dieser Stelle nicht geschlossen. Ansonsten verhält sich diese Option wie BBCODE_CLOSETAG_OPTIONAL.
BBCODE_CLOSETAG_OPTIONAL Der Endtag ist optional. Wenn er vorkommt, schließt er ganz normal das Element. Wenn ein Elternelement geschlossen wird, wird dieses Element auch geschlossen. Wenn ein neuer Starttag des gleichen Codes auftritt, wird der Code vorher ebenfalls geschlossen. Dies ist beispielsweise bei Listen nützlich, die zum Beispiel so aussehen können:
[list]
[*] Punkt
[*] Punkt
[/list]

Hier soll der erste Listenpunkt geschlossen werden, sobald der zweite Listenpunkt geöffnet wird. Außerdem soll der zweite Listenpunkt geschlossen werden, sobald die Liste geschlossen wird. Das erreicht man, indem man dem Flag 'closetag' des [*]-Codes diesen Wert (BBCODE_CLOSETAG_OPTIONAL) oder auch BBCODE_CLOSETAG_FORBIDDEN zuweist.
BBCODE_CLOSETAG_IMPLICIT
(Standardeinstellung)
Der Endtag ist nur dann optional, wenn das Elternelement geschlossen wird. Beispiel:
[b]dies ist[i]ein text[/b]
Wenn nun der [i]-Code das Flag 'closetag' mit diesem Wert besitzt, dann wird es mit dem Auftreten von [/b] gleich mit geschlossen. Weiteres Beispiel:
[list]
[*] [b]Punkt
[*] Punkt
[/list]

Hier würde das [b]-Element beim Eintreten des zweiten [*] ebenso geschlossen, weil das Elternelement geschlossen wird.
BBCODE_CLOSETAG_IMPLICIT_ON_CLOSE_ONLY Dies verhält sich wie BBCODE_CLOSETAG_IMPLICIT, nur, dass im Fall
[list]
[*] [b]Punkt
[*] Punkt
[/list]

das [b]-Element nicht geschlossen wird, da das Elternelement nur geschlossen würde, weil ein neues Element des gleichen Typs geöffnet würde. Dadurch, dass [b] nicht geschlossen wird, wird konsequenterweise auch das erste [*]-Element nicht geschlossen und somit das zweite [*]-Element nicht geöffnet, da es innerhalb von [b] nicht erlaubt ist.
BBCODE_CLOSETAG_MUSTEXIST Der Endtag muss existieren. Falls er nicht existieren sollte, wird der Starttag als Text angehängt und nach dem Starttag weitergemacht. Ein derartiges Element kann auch nicht vom Elternelement geschlossen werden.
'opentag.before.newline' Gibt an, wie ein möglicherweise existierendes Neue-Zeile-Zeichen (\n) vor dem Starttag behandelt werden soll. Zu den möglichen Werten weiter unten.
'opentag.after.newline' Gibt an, wie ein möglicherweise existierendes Neue-Zeile-Zeichen (\n) nach dem Starttag behandelt werden soll. Zu den möglichen Werten weiter unten.
'closetag.before.newline' Gibt an, wie ein möglicherweise existierendes Neue-Zeile-Zeichen (\n) vor dem Endtag behandelt werden soll. Zu den möglichen Werten weiter unten.
'closetag.after.newline' Gibt an, wie ein möglicherweise existierendes Neue-Zeile-Zeichen (\n) nach dem Endtag behandelt werden soll. Zu den möglichen Werten weiter unten.
Mögliche Werte zu den vier obigen Flags BBCODE_NEWLINE_PARSE
(Standardeinstellung)
Das Neue-Zeile-Zeichen wird ganz normal wie jedes andere Zeichen auch mit Hilfe der Parserfunktionen verarbeitet.
BBCODE_NEWLINE_IGNORE Das Neue-Zeile-Zeichen wird nicht von den Parserfunktionen verarbeitet, jedoch an die Ausgabe angehängt.
BBCODE_NEWLINE_DROP Das Neue-Zeile-Zeichen wird entfernt.
'paragraph_type' Flags, die bei der Absatzbehandlung notwendig ist. Dazu mehr im Kapitel Absatzbehandlung.
'paragraphs'
'occurrence_type' Ein internes Flag, das von der Methode setOccurrenceType gesetzt wird. Es sollte nie notwendig sein, es manuell zu setzen oder auszuwerten. Mehr zu setOccurrenceType im Kapitel Maximales Auftreten von Elementen.

6.3 Globale Flags

Es gibt auch einige globale Flags. Dies sind Flags, die nicht nur für einen einzelnen Code gelten, sondern für die gesamte Klasse.

caseSensitive

Dieser Flag steuert, ob die gesamte Klasse zwischen Groß- und Kleinschreibung unterscheidet. Der Wert des Flags kann mit der Methode setGlobalCaseSensitive geändert werden. Der aktuelle Wert kann mittels globalCaseSensitive abgefragt werden. Bei true (Standardeinstellung) unterscheidet die Klasse bei allen Codes zwischen Groß- und Kleinschreibung - außer bei denen, die das 'case_sensitive'-Flag auf false gesetzt haben. Bei false unterscheidet die Klasse nie zwischen Groß- und Kleinschreibung - unabhängig davon, welchen Wert das 'case_sensitive'-Attribut des Codes hat. Beispiel:

$bbcode->setGlobalCaseSensitive (false);

mixedAttributeTypes

Wenn das Flag aktiviert ist, wird [code=foo attr=bar] so verarbeitet, dass zwei Attribute erkannt werden (default = 'foo', attr = 'bar'), wenn das Flag deaktiviert ist, wird nur ein Attribut erkannt (default = foo attr=bar). Standardmäßig ist das Flag deaktiviert. Der aktuelle Wert kann mittels mixedAttributeTypes abgefragt werden. Beispiel:

$bbcode->setMixedAttributeTypes (true);