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

CommonMark\Node\CodeBlock

Klasse

Repräsentiert einen eingerückten oder umzäunten (fenced) Codeblock im CommonMark-AST.

Kategorie: misc

Signatur

class CommonMark\Node\CodeBlock extends CommonMark\Node

Beschreibung

CommonMark\Node\CodeBlock ist ein Knotentyp im abstrakten Syntaxbaum (AST) der CommonMark-PHP-Erweiterung. Er steht für Codeblöcke, die entweder durch Einrückung (4 Leerzeichen oder 1 Tab) oder durch Absperrung (drei oder mehr Backticks bzw. Tilden) im CommonMark-Markdown ausgezeichnet wurden.

Ein CodeBlock-Knoten besitzt zwei wesentliche Eigenschaften: literal enthält den rohen Text-Inhalt des Codeblocks, und fenceInfo speichert den optionalen Sprach-Bezeichner, der bei umzäunten Blöcken hinter den öffnenden Backticks oder Tilden angegeben wird (z. B. php oder javascript).

Die Klasse wird typischerweise beim Parsen von Markdown-Dokumenten mit CommonMark\Parser erzeugt, kann aber auch programmatisch instanziiert werden, um Codeblöcke in einem Dokument-AST zu konstruieren oder zu manipulieren, bevor dieser in HTML gerendert wird.

  • literal (string|null): Der reine Quelltext innerhalb des Codeblocks.
  • fenceInfo (string|null): Der Info-String des Zaunblocks (z. B. die Programmiersprache).

Parameter

Name Typ Default Beschreibung
$literal string|null null Der Inhalt des Codeblocks als Klartext-Zeichenkette. Kann nach der Instanziierung über die Eigenschaft literal gesetzt werden.
$fenceInfo string|null null Der Info-String des Zaunblocks, üblicherweise die Sprach-Kennzeichnung (z. B. 'php'). Nur bei umzäunten Blöcken relevant.

Rückgabewert

Typ

Beispiele

Codeblock aus geparsten Markdown lesen

<?php
use CommonMark\Parser;
use CommonMark\Node\CodeBlock;

$parser = new Parser();
$document = $parser->parse(<<<MD
```php
echo 'Hallo Welt';
```
MD);

// AST traversieren und alle CodeBlock-Knoten ausgeben
foreach ($document as $node) {
    if ($node instanceof CodeBlock) {
        echo 'Sprache : ' . ($node->fenceInfo ?? '(keine)') . PHP_EOL;
        echo 'Inhalt  : ' . $node->literal . PHP_EOL;
    }
}
Sprache : php Inhalt : echo 'Hallo Welt';

Codeblock programmatisch erstellen und rendern

<?php
use CommonMark\Node\Document;
use CommonMark\Node\CodeBlock;
use CommonMark\Render\HTML;

$document = new Document();

$block = new CodeBlock();
$block->fenceInfo = 'javascript';
$block->literal  = "console.log('Hallo');\n";

$document->appendChild($block);

$renderer = new HTML();
echo $renderer->render($document);
<pre><code class="language-javascript">console.log('Hallo'); </code></pre>

// Wichtig · Fallstricke

Erweiterung erforderlich: CommonMark\Node\CodeBlock gehört zur PHP-Erweiterung cmark (ext-cmark), die separat installiert werden muss (z. B. über PECL: pecl install cmark). Sie ist nicht im PHP-Kern enthalten.

Sicherheit: Der Inhalt von literal wird beim HTML-Rendering von der Erweiterung HTML-kodiert und ist daher in der Standardausgabe XSS-sicher. Wer den Wert anderweitig verarbeitet, muss selbst auf korrektes Escaping achten (htmlspecialchars()).

Unterschied zu InlineCode: Für einzeiligen Inline-Code (einzelne Backticks im Fließtext) existiert der separate Knotentyp CommonMark\Node\Code.