Signatur
Beschreibung
CommonMark\Node\BulletList ist ein Knoten-Typ der CommonMark-PHP-Erweiterung und bildet eine unsortierte Liste (z. B. mit -, * oder + als Aufzählungszeichen) im abstrakten Syntaxbaum (AST) eines Markdown-Dokuments ab. Jedes BulletList-Objekt enthält als Kindknoten in der Regel eine oder mehrere Instanzen von CommonMark\Node\Item, die die einzelnen Listenpunkte repräsentieren.
Die Klasse wird typischerweise beim Traversieren oder Manipulieren eines geparsten CommonMark-Dokuments verwendet. Sie erlaubt es, gezielt auf unsortierte Listen im AST zuzugreifen, diese zu verändern, umzustrukturieren oder bei der Ausgabe besonders zu behandeln.
Eigenschaften wie bullet_char können je nach Version der Erweiterung verfügbar sein und geben an, welches Zeichen (-, * oder +) als Aufzählungsmarkierung verwendet wurde. Über die geerbten Methoden der Basisklasse CommonMark\Node lassen sich Kindknoten iterieren, einfügen oder entfernen.
- Verwende
CommonMark\Parser, um ein Markdown-Dokument in einen AST zu überführen. - Nutze einen
CommonMark\CQL- oder einen manuellen Traversal-Ansatz, um alleBulletList-Knoten im Baum zu finden. - Ändere oder ersetze den Knoten, bevor du das Dokument mit
CommonMark\Rendererwieder in HTML umwandelst.
Beispiele
Unsortierte Liste aus Markdown parsen und Knoten ermitteln
<?php
use CommonMark\Parser;
use CommonMark\Node\BulletList;
use CommonMark\Node\Item;
$markdown = "- Erster Punkt\n- Zweiter Punkt\n- Dritter Punkt\n";
$parser = new Parser();
$document = $parser->parse($markdown);
// Manuelles Traversieren des AST nach BulletList-Knoten
function findBulletLists(\CommonMark\Node $node): void {
if ($node instanceof BulletList) {
echo "Gefundene BulletList mit " . count(iterator_to_array($node->children())) . " Kind(ern)\n";
foreach ($node->children() as $child) {
if ($child instanceof Item) {
echo " - Item-Knoten\n";
}
}
}
foreach ($node->children() as $child) {
findBulletLists($child);
}
}
findBulletLists($document);
BulletList-Knoten per CQL abfragen und rendern
<?php
use CommonMark\Parser;
use CommonMark\Renderer;
use CommonMark\CQL;
use CommonMark\Node\BulletList;
$markdown = "- Apfel\n- Banane\n- Kirsche\n";
$parser = new Parser();
$document = $parser->parse($markdown);
// CQL-Abfrage: alle BulletList-Knoten selektieren
$cql = new CQL('/BulletList');
$cql($document, function(\CommonMark\Node $root, \CommonMark\Node $node): void {
echo get_class($node) . "\n";
});
$renderer = new Renderer();
echo $renderer->render($document);
// Wichtig · Fallstricke
Die CommonMark-PHP-Erweiterung (ext-commonmark) ist eine native C-Erweiterung und muss separat installiert werden. Sie ist nicht Bestandteil der Standard-PHP-Distribution. Stelle sicher, dass die Erweiterung in der php.ini geladen ist (extension=commonmark).
Die verfügbaren Eigenschaften und Methoden von BulletList können zwischen Versionen der Erweiterung variieren. Prüfe die API der installierten Version, da beispielsweise der Zugriff auf das konkrete Aufzählungszeichen (bullet_char) nicht in allen Versionen stabil ist.
Beim Manipulieren von Knoten im AST ist darauf zu achten, dass strukturelle Invarianten des Baums eingehalten werden – ein BulletList-Knoten sollte ausschließlich Item-Knoten als direkte Kinder besitzen.