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

CommonMark\Node\BulletList

Klasse

Repräsentiert eine unsortierte (Aufzählungs-)Liste im CommonMark-AST-Baum.

Kategorie: misc

Signatur

class CommonMark\Node\BulletList extends CommonMark\Node

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 alle BulletList-Knoten im Baum zu finden.
  • Ändere oder ersetze den Knoten, bevor du das Dokument mit CommonMark\Renderer wieder 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);
Gefundene BulletList mit 3 Kind(ern) - Item-Knoten - Item-Knoten - Item-Knoten

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);
CommonMark\Node\BulletList <ul> <li>Apfel</li> <li>Banane</li> <li>Kirsche</li> </ul>

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