Text_Highlighter

Bietet Methoden um Syntax-Hervorhebung für verschiedene Dateiformate durchzuführen.

Einführung

Mit dem Package Text_Highlighter können von verschiedene Dateiformate Syntax-Hervorhebungen erzeugt werden.

Derzeit werden folgende Formate unterstützt

Es stehen verschiedene Renderer verwenden, um die Hervorhebungen darzustellen:

Verwendung

Die Klasse Text_Highlighter enthält alle notwendigen Funktionen um Text hervorzuheben mit Ausnahme der tatsächlichen Hervorhebungs-Regeln für die verschiedenen Formate. Diese Regeln sind in Unterklassen von Text_Highlighter definiert. Die Unterklassen werden nicht direkt vom Anwender aufgerufen, stattdessen wird über eine Factory-Methode die entsprechende Klasse aufgrund des gewählten Formates herangezogen:

Beispiel 64-7. Hervorhebung für eine SQL-Abfrage


<?php
require_once "Text/Highlighter.php";

$hlSQL =& Text_Highlighter::factory("SQL");
echo $hlSQL->highlight("SELECT * FROM some_table WHERE id = 12");
?>

Im Beispiel wird eine hervorgehobene Version der SQL-Abfrage erzeugt, die der Methode Text_Highlighter::highlight übergeben wird. Die Ausgabe enthält HTML-Code zur farblichen Auszeichnung der Bestandteile. Die Ausgabe kann an eigene Bedürfnisse angepasst werden, z.B. für die Ausgabe auf der Kommandozeile. Näheres dazu im Abschnitt namens Anpassung der Ausgabe.

Für andere Formate muss der SQL-Parameter in der Methode Text_Highlighter::factory durch einen entsprechend anderen ersetzt werden: ABAP, CPP, CSS, DIFF, DTD, HTML, JAVA, JAVASCRIPT, MYSQL, PERL, PHP, PYTHON, RUBY, SQL, oder XML.

Anpassung der Ausgabe

Normalerweise fügt Text_Highlighter HTML-Code in die ursprüngliche Eingabe ein, um die Hervorhebung um zu setzen.

Andere Ausgabeformate sind aber möglich, z.B. werden auch farb-taugliche Kommandozeilenkonsolen unterstützt wie xterm oder über less(1). Dazu muss Text_Highlighter angewiesen werden einen anderen Renderer zu verwenden:

Beispiel 64-8. Den Renderer für die Konsole verwenden


<?php
require_once "Text/Highlighter.php";
require_once "Text/Highlighter/Renderer/Console.php";

$hlSQL =& Text_Highlighter::factory("SQL");
$hlSQL->setRenderer(new Text_Highlighter_Renderer_Console);
echo $hlSQL->highlight("SELECT * FROM some_table WHERE id = 12");
?>

Es ist gleichfalls möglich die Ausgabe des HTML- und Konsolen-Renders anzupassen. Dazu kann im Konstruktor des Renderers ein assoziatives Array übergeben werden, dass entsprechende Optionen enthält:

Beispiel 64-9. Optionen des HTML-Renderers


<?php
require_once "Text/Highlighter.php";
require_once "Text/Highlighter/Renderer/Html.php";

$renderer = new Text_Highlighter_Renderer_Html(array("numbers" => HL_NUMBERS_IL"tabsize" => 4));

$hlJava =& Text_Highlighter::factory("JAVA");
$hlJava->setRenderer($renderer);

echo $hlJava->highlight('class JavaProgram {
    public static void main(String args[]) {
        System.out.println("Hello World!");
    }
}');
?>

Das Beispiel setzt zwei Optionen: Die erste bewirkt, dass die Ausgabe Zeilennummern enthält, diese werden über das <ol />-HTML-Tag erzeugt. Die zweite Option definiert, wie viele Leerzeichen für Tabulatoren verwendet werden sollen.

Folgende Optionen werden derzeit unterstützt:

Tabelle 64-1. Mögliche Renderer-Optionen

NameBeschreibungUnterstützt vom HTML-RendererUnterstützt vom Konsolen-RendererHinweise
numbersArt der ZeilennummerierungJaJa Beim Konsolen-Renderer kennt diese Option lediglich TRUE oder FALSE, um die Zeilennummerierung an- oder abzuschalten. Der HTML-Render akkzeptiert drei verschiedene Werte: bei HL_NUMBERS_LI wird das <ol />-HTML-Tag benutzt; während bei HL_NUMBERS_TABLE eine zweispaltige Tabelle verwendet wird. Die erste Spalte enthält die Zeilennummer, die zweite den Code. Wird die Option auf FALSE gesetzt wird Zeilennummerierung abgeschaltet.
tabsizeTabulator-WeiteJaJa 
colorsZusätzliche FarbdefinitionenNeinJa Ein assoziatives Array mit zusätzlichen Farbangaben für farbfähige Konsolen. Der Schlüssel eines jeden Array-Eintrages ist der Name der Farbe und der entsprechende Wert muss die Escape-Sequenz beinhalten. (Zum Beispiel: \033[1;31mRed.)