Start · Sprachen · PHP · Referenz · CommonMark\Node\ThematicBreak

CommonMark\Node\ThematicBreak

Klasse

Repräsentiert eine thematische Trennlinie (horizontale Linie, <code>&lt;hr&gt;</code>) im CommonMark-AST.

Kategorie: misc

Signatur

class CommonMark\Node\ThematicBreak extends CommonMark\Node

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;
    }
}
CommonMark\Node\Paragraph Thematische Trennlinie gefunden! CommonMark\Node\Paragraph

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);
<p>Abschnitt A</p> <hr /> <p>Abschnitt B</p>

// 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.