Blocksatz als BBCode (General)

by Taurec, Thursday, February 11, 2021, 08:19 (169 days ago) @ Karlheinz

Hallo!

Folgendes eher als anekdotische Ergänzung, da es nicht direkt die Frage beantwortet, aber thematisch paßt:

Ich habe tatsächlich vor ein paar Tagen die Möglichkeit implementiert, per BBCode die Textausrichtung zu bestimmen.

Hintergrund ist, daß ich ein paar alte Parsimony-Forenarchive (in Form hunderttausender HTML4-Dateien) herumliegen habe, die ich versuche, in eine moderne My-Little-Forum-Installation zu übertragen (was auch ganz gut zu klappen scheint. Nach einigem Herumexperimentieren mit der DOMDocument-Klasse und heftiger Aufbereitung der HTML-Dateien mit RegEx-Ersetzungen bin ich bald so weit, ein Nutzerverzeichnis und die Beiträge inklusive korrekten Threadbeziehungen der jeweiligen id, pid und tid automatisch in eine Forumsdatenbank schreiben zu lassen).
Weil in den Parsimonyforen HTML-Formatierung erlaubt war, gibt es auch einige Beiträge, die eigene Textformatierungen haben (z. B. align="justify"). Daher mußte ich die entsprechenden Formatierungsoptionen für My Little Forum schaffen, wodurch die BBCodes für zentrierten, rechtsbündigen und Blocksatztext quasi nebenbei abfielen.

In die Funktion html_format in der function.inc.php habe ich in den Block ab Zeile 1011 (z. B. unterhalb Zeile 1019) folgende Zeilen eingefügt:

$bbcode->addCode ('justify', 'simple_replace', null, array ('start_tag' => '<span style="text-align:justify;display: block">', 'end_tag' => '</span>'), 'inline', array ('listitem', 'block', 'inline', 'link', 'quote', 'pre', 'monospace'), array ());
$bbcode->addCode ('center', 'simple_replace', null, array ('start_tag' => '<span style="margin-left:50%;margin-right:50%">', 'end_tag' => '</span>'), 'inline', array ('listitem', 'block', 'inline', 'link', 'quote', 'pre', 'monospace'), array ());
$bbcode->addCode ('right', 'simple_replace', null, array ('start_tag' => '<span style="float:right">', 'end_tag' => '</span>'), 'inline', array ('listitem', 'block', 'inline', 'link', 'quote', 'pre', 'monospace'), array ());

Der zu formatierende Text wird in span-Blöcke mit den entsprechenden Styleanweisungen gepackt.

In die Datei posting.inc.tpl im Theme-Verzeichnis werden folgende Zeilen (z. B. unterhalb Zeile 183) eingefügt:

<dt id="justify" title="{#bbcode_justify_label#}">{#bbcode_justify_title#}</dt>
<dd>{#bbcode_justify_instruction#}</dd>
<dt id="center" title="{#bbcode_center_label#}">{#bbcode_center_title#}</dt>
<dd>{#bbcode_center_instruction#}</dd>
<dt id="right" title="{#bbcode_right_label#}">{#bbcode_right_title#}</dt>
<dd>{#bbcode_right_instruction#}</dd>

Die Sprachdatei (für Deutsch german.lang) wird durch folgende Zeilen ergänzt:

bbcode_justify_label = 'Blocksatz'
bbcode_justify_title = 'Blocksatz'
bbcode_justify_instruction = '[justify]Blocksatz[/justify]'
bbcode_center_label = 'zentrieren'
bbcode_center_title = 'Text zentrieren'
bbcode_center_instruction = '[center]zentrierter Text[/center]'
bbcode_right_label = 'rechtsbündig'
bbcode_right_title = 'Text rechts ausrichten'
bbcode_right_instruction = '[right]rechtsbündiger Text[/right]'

Mit den Tags [justify]...[/justify], [center]...[/center], [right]...[/right] läßt sich dann vom Benutzer die Textausrichtung einzelner Absätze bestimmen. Das ist interessant, falls mal jemand ein Gedicht, einen Brief oder ein Literaturzitat gesondert formatieren will.

Probleme dieses Vorgehens:
Die Rechtbündigkeit funktioniert nur, wenn der Inhalt nicht die ganze Seitenbreite einnimmt. Andernfalls wird float: right nicht angewendet. Desgleichen gilt für die Marginanweisungen zum Zentrieren des Textes, die bei voller Seitenbreite des Textes nicht befriedigend umgesetzt werden.
Bislang habe ich aber noch keine andere Möglichkeit gefunden, das Verhalten für das span-Element als innerstes Hierarchieelement des HTML-Baumes überhaupt herzustellen. Leider gibt es derzeit in CSS noch keinen Parent-Selector, mit dem sich das übergeordnete P-Element anwählen ließe (vgl. diese Antwort). Auf dieser Ebene wäre die Textausrichtung kein Problem.

Eine standardmäßige Formatierung des ganzen Forums in Blocksatz findet dadurch natürlich nicht statt.

Ich habe noch einige andere BBCodes "erfunden", z. B. verschiedene Schriftarten (die im CSS mittels @font-face { ... } aus einem Ordner auf dem Forumsserver geladen werden) und die Formatierung von Tabellen, wobei die BBCode-Tags die 1:1-Umsetzung der korrspondierenden HTML-Tags (<table>, <thead>, <tr>, <th>, <tbody>, <td>) sind. Für letzteres ist außerdem eine Ergänzung der posting.js nötig, um die Tabellenstruktur per Knopfdruck automatisch ins Textfeld einfügen zu lassen. Das funktioniert (wobei ich noch nicht alle Szenarien durchgetestet habe) problemlos und läßt sich unter der Zuhilfename von CSS-Anweisungen so formatieren, daß selbst Tabellen mit vielen Feldern das Layout nicht sprengen und bei engen Displays (wie in der Responsivetheme) automatisch umgebrochen werden.

Gruß
Taurec


Complete thread:

 RSS Feed of thread

powered by my little forum