Signatur
Beschreibung
Die Klasse CommonMark\Node\Text\Emphasis ist Teil der PHP-Erweiterung commonmark und bildet einen Knoten im abstrakten Syntaxbaum (AST) eines CommonMark-Dokuments. Sie entspricht dem Markdown-Konstrukt *kursiv* oder _kursiv_, das in HTML als <em>-Element gerendert wird.
Wie alle Knoten im CommonMark-AST ist Emphasis ein Containerknoten: Er kann untergeordnete Knoten (Kinder) besitzen, typischerweise CommonMark\Node\Text-Knoten mit dem eigentlichen Textinhalt. Beim programmatischen Aufbau eines Dokuments kann ein Emphasis-Knoten instanziiert, mit Kindknoten befüllt und in den Baum eingefügt werden.
Die Klasse wird sowohl beim Parsen von Markdown (Lesen des AST) als auch beim programmatischen Erstellen von Dokumenten eingesetzt. Sie ermöglicht es, gezielt Hervorhebungen im Dokumentbaum zu identifizieren, zu verändern oder neu zu erzeugen, bevor das Dokument in HTML oder ein anderes Format gerendert wird.
- Zum Parsen:
CommonMark\Parse()gibt einen AST zurück, in dem Emphasis-Knoten enthalten sein können. - Zum Rendern:
CommonMark\Render\HTML()wandelt den AST in HTML um, wobeiEmphasiszu<em>...</em>wird.
Beispiele
Emphasis-Knoten im geparsten AST erkennen
<?php
use CommonMark\Node\Text\Emphasis;
use CommonMark\Node\Text;
$markdown = 'Das ist *kursiver* Text.';
$ast = CommonMark\Parse($markdown);
// Rekursiv durch den AST traversieren
function traverseNode($node) {
if ($node instanceof Emphasis) {
echo 'Emphasis-Knoten gefunden!' . PHP_EOL;
// Kinder des Emphasis-Knotens ausgeben
foreach ($node->children() as $child) {
if ($child instanceof Text) {
echo 'Text: ' . $child->literal . PHP_EOL;
}
}
}
foreach ($node->children() as $child) {
traverseNode($child);
}
}
traverseNode($ast);
Dokument mit Emphasis-Knoten programmatisch erstellen
<?php
use CommonMark\Node\Document;
use CommonMark\Node\Block\Paragraph;
use CommonMark\Node\Text\Emphasis;
use CommonMark\Node\Text;
// Dokument aufbauen
$doc = new Document();
$para = new Paragraph();
$before = new Text();
$before->literal = 'Das ist ';
$para->appendChild($before);
$em = new Emphasis();
$emText = new Text();
$emText->literal = 'wichtig';
$em->appendChild($emText);
$para->appendChild($em);
$after = new Text();
$after->literal = '!';
$para->appendChild($after);
$doc->appendChild($para);
// Als HTML rendern
echo CommonMark\Render\HTML($doc);
// Wichtig · Fallstricke
Abgrenzung zu StrongEmphasis: Für fetten Text (**text** bzw. __text__) existiert die separate Klasse CommonMark\Node\Text\StrongEmphasis, die in HTML als <strong> gerendert wird. Emphasis entspricht ausschließlich der einfachen (single-asterisk) Hervorhebung.
Verfügbarkeit: Die Klasse ist nur verfügbar, wenn die PECL-Erweiterung commonmark installiert ist (pecl install commonmark). Sie ist nicht Teil der PHP-Standardinstallation. Vergewissere dich, dass extension=commonmark in der php.ini aktiviert ist.
Kindknoten: Ein Emphasis-Knoten ist ein Containerknoten. Das direkte Setzen von Text als Literal ist nicht vorgesehen – der Textinhalt muss als CommonMark\Node\Text-Kindknoten angefügt werden.