Signatur
Beschreibung
CommonMark\Node\ThematicBreak ist ein Knoten-Typ der CommonMark-Erweiterung für PHP und repräsentiert eine thematische Trennlinie im Abstract Syntax Tree (AST) eines geparsten CommonMark-Dokuments. In Markdown wird eine solche Trennlinie durch drei oder mehr Bindestriche (---), Sternchen (***) oder Unterstriche (___) auf einer eigenen Zeile erzeugt und wird beim Rendern in ein HTML-<hr>-Element umgewandelt.
Der Knoten ist ein Leaf-Node, d. h. er hat keine Kinder-Knoten. Er dient ausschließlich als Trennmarkierung auf Blockebene und enthält keinen eigenen Textinhalt. Beim Traversieren oder Manipulieren eines CommonMark-AST kann dieser Knotentyp gezielt gesucht, eingefügt oder entfernt werden.
Typische Anwendungsfälle sind die programmatische Analyse von Markdown-Dokumenten (z. B. um Dokumente an Trennlinien aufzuteilen) oder die gezielte Manipulation des AST vor dem Rendern, etwa um Trennlinien automatisch einzufügen oder herauszufiltern.
Beispiele
Thematische Trennlinie im AST erkennen
<?php
use CommonMark\Parser;
use CommonMark\Node\ThematicBreak;
use CommonMark\Node\Document;
$markdown = "Erster Abschnitt\n\n---\n\nZweiter Abschnitt";
$parser = new Parser();
$document = $parser->parse($markdown);
// Alle Kinder des Dokuments durchlaufen
foreach ($document->children as $node) {
if ($node instanceof ThematicBreak) {
echo "Thematische Trennlinie gefunden!" . PHP_EOL;
} else {
echo get_class($node) . PHP_EOL;
}
}
Thematische Trennlinie programmatisch einfügen
<?php
use CommonMark\Parser;
use CommonMark\Render\HTML;
use CommonMark\Node\ThematicBreak;
use CommonMark\Node\Paragraph;
$markdown = "Abschnitt A\n\nAbschnitt B";
$parser = new Parser();
$document = $parser->parse($markdown);
// Neue Trennlinie zwischen den beiden Absätzen einfügen
$nodes = iterator_to_array($document->children);
if (isset($nodes[0])) {
$hr = new ThematicBreak();
// Trennlinie nach dem ersten Kind-Knoten einfügen
$nodes[0]->insertAfter($hr);
}
$renderer = new HTML();
echo $renderer->render($document);
// Wichtig · Fallstricke
Leaf-Node: ThematicBreak besitzt keine Kind-Knoten. Der Versuch, Kinder hinzuzufügen, führt zu einem Fehler.
Erweiterungsabhängigkeit: Diese Klasse ist Teil der PHP-Erweiterung commonmark (PECL), die separat installiert werden muss (pecl install commonmark). Sie steht nicht in der PHP-Standardbibliothek zur Verfügung.
CommonMark-Spezifikation: Gemäß der CommonMark-Spezifikation muss eine thematische Trennlinie mindestens drei Zeichen desselben Typs (-, * oder _) enthalten und darf außer Leerzeichen keine weiteren Zeichen auf derselben Zeile haben.