Signatur
Beschreibung
CommonMark\Node\Paragraph ist ein Knoten-Typ aus der commonmark-PHP-Erweiterung (pecl/commonmark) und bildet einen Absatz im Abstract Syntax Tree (AST) eines CommonMark-Dokuments ab. Im gerenderten HTML entspricht er einem <p>-Element.
Absätze sind Block-Level-Elemente und können Inline-Knoten wie CommonMark\Node\Text, CommonMark\Node\Emphasis oder CommonMark\Node\Strong als Kindknoten enthalten. Sie werden beim Parsen von gewöhnlichem Fließtext (Zeilen ohne spezielles Markdown-Präfix) automatisch erzeugt.
Die Klasse wird typischerweise beim programmatischen Aufbau oder Traversieren eines CommonMark-Dokumentbaums verwendet – entweder um den geparsten Baum zu analysieren, zu modifizieren oder um neue Absätze dynamisch einzufügen. Sie erbt alle Methoden zur Baum-Navigation und -Manipulation von CommonMark\Node, etwa appendChild(), prependChild(), insertAfter() sowie die Kindknoten- und Elternknoten-Eigenschaften.
Sollen eigene Absätze erzeugt und in ein Dokument eingefügt werden, reicht eine einfache Instanziierung ohne Parameter, gefolgt vom Hinzufügen von Inline-Kindknoten.
Beispiele
Absatz aus geparsten Dokument auslesen
<?php
use CommonMark\Parse;
use CommonMark\Node\Paragraph;
use CommonMark\Node\Text;
$markdown = "Erster Absatz.\n\nZweiter Absatz.";
$document = Parse($markdown);
// Alle Absätze im Baum durchlaufen
foreach ($document->children() as $node) {
if ($node instanceof Paragraph) {
foreach ($node->children() as $inline) {
if ($inline instanceof Text) {
echo $inline->literal . PHP_EOL;
}
}
}
}
Neuen Absatz programmatisch erstellen und einfügen
<?php
use CommonMark\Node\Document;
use CommonMark\Node\Paragraph;
use CommonMark\Node\Text;
use CommonMark\Render\HTML;
$document = new Document();
$paragraph = new Paragraph();
$text = new Text();
$text->literal = 'Hallo, CommonMark-Welt!';
$paragraph->appendChild($text);
$document->appendChild($paragraph);
echo HTML($document);
// Wichtig · Fallstricke
Die commonmark-Erweiterung ist eine PECL-Erweiterung und nicht standardmäßig in PHP enthalten. Sie muss separat installiert werden (pecl install commonmark). Alternativ kann die reine PHP-Bibliothek league/commonmark verwendet werden, die einen ähnlichen, aber eigenen API-Ansatz bietet.
Beim Traversieren des AST sollte stets auf den konkreten Knotentyp geprüft werden, da nicht alle Kindknoten eines Dokuments Absätze sind – es können auch Heading, BlockQuote, FencedCode usw. auftreten.