Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 PEAR – Einführung
2 Authentication
3 Caching
4 Date and Time
5 File Formats
6 HTTP
7 Internationalization
8 Mail
9 Networking
10 PHP
11 Text
12 Web Services
13 Benchmarking
14 Configuration
15 Database
16 File System
17 HTML
18 Images
19 Logging
20 Math
21 Numbers
22 Tools and Utilities
23 XML
24 Selbst Pakete erstellen
25 PECL
Index
Ihre Meinung?

Spacer
 <<   zurück
PHP PEAR von Carsten Möhrke
Anwendung und Entwicklung – Erweiterungen für PHP schreiben
Buch: PHP PEAR

PHP PEAR
798 S., 39,90 Euro
Rheinwerk Computing
ISBN 3-89842-580-0
gp 11 Text
  gp 11.1 Text_Password
  gp 11.2 Text_CAPTCHA
  gp 11.3 Text_Wiki
  gp 11.4 Text_Highlighter
  gp 11.5 Text_Diff


Rheinwerk Computing

11.4 Text_Highlighter  toptop


Besprochene Version: 0.6.1 Lizenz: PHP-Lizenz
Klassendatei(en): Text/Highlighter.php; Text/Highlighter/Renderer/Html.php; Text/ Highlighter/Renderer/Console.php

Der Text_Highlighter ist ein ungemein hilfreiches Paket, wenn Sie Quelltexte formatiert ausgeben wollen. Sie können verschiedenste Arten von Quelltexten mit farblichen Hervorhebungen und Zeilennummern versehen lassen. Zum jetzigen Zeitpunkt kann das Paket die folgenden Quelltext-Typen analysieren: C++ (CPP), Cascading-Stylesheets (CSS), Document Type Definitions (DTD), JavaScript (JAVASCRIPT), MySQL (MYSQL), Perl (PERL), Python (PYTHON), Ruby (RUBY), SQL (SQL) und XML (XML). Hinter den Namen der Texttypen ist jeweils der Bezeichner, der später noch benötigt wird, in Klammern angegeben.

Um das Paket nutzen zu können, müssen Sie sowohl ein Renderer-Objekt als auch ein Highlighter-Objekt instanziieren. Das Highlighter-Objekt ist für die Analyse des Quelltextes zuständig und bekommt das Renderer-Objekt übergeben, um den Text dann aufbereiten zu können.

Die Klasse Text_Highlighter ist in Text/Highlighter.php definiert. Der Renderer für eine HTML-Ausgabe ist in Text/Highlighter/Renderer/Html.php definiert, wohingegen die Ausgabe für die Konsole von Text/Highlighter/Ren derer/Console.php aufbereitet wird.

<html> 
   <head> 
      <link rel="stylesheet" type="text/css" href="php.css"> 
   </head> 
   <body> 
<?php 
// Einbinden der Klassendateien 
require_once 'Text/Highlighter.php'; 
require_once 'Text/Highlighter/Renderer/Html.php'; 
 
// Optionen fuer die Ausgabe definieren 
$options = array( 
              'numbers' => HL_NUMBERS_LI, 
              'tabsize' => 3, 
           ); 
// Renderer instanziieren 
$renderer = new Text_Highlighter_Renderer_HTML($options); 
// Text_Highlighter-Objekt instanziieren 
$highlighter = Text_Highlighter::factory('PHP'); 
// Renderer zuweisen 
$highlighter->setRenderer($renderer); 
// Datei einlesen, die ausgegeben werden soll 
$datei=file_get_contents('CAPTCHA.php'); 
// Quelltext analysieren und highlighten 
$html = $highlighter->highlight($datei); 
echo $html; // Quelltext mit Hervorhebungen ausgeben 
?> 
   </body> 
</html>

Listing 11.5 Ausgabe einer PHP-Datei mit Hervorhebungen

Wie in Listing 11.5 zu sehen ist, akzeptiert der Konstruktor des HTML-Renderers ein Array als Parameter. Dieses Array kann aus den Elementen numbers und tabsize bestehen. numbers gibt Ihnen die Möglichkeit zu definieren, wie die Zeilennummern ausgegeben werden sollen. Ist die Zahl 0 enthalten, werden keine Nummern ausgegeben. HL_NUMBERS_LI und HL_NUMBERS_TABLE erzeugen jeweils Zeilennummern, wobei die erste Variante die Nummerierung aus Basis einer »Ordered List« vornimmt und die zweite eine HTML-Tabelle nutzt. Die Variante mit der Tabelle hat den Vorteil, dass Sie den Quelltext aus dem Browser mit »Kopieren und Einfügen« übernehmen können, ohne dass die Zeilennummern mit kopiert werden. Der zweite Schlüssel legt fest, wie groß ein Tabulatorsprung sein soll. Mit anderen Worten: Wenn ein Tabulatorsprung im Quelltext gefunden wird, so wird er in diesem Beispiel durch drei Leerzeichen ersetzt.

Das Text_Highlighter-Objekt wird mit einer Factory-Methode generiert, die die Information übergeben bekommt, um welche Art von Quelltext es sich handelt. Dabei werden die Bezeichner genutzt, die bereits am Anfang des Kapitels erwähnt wurden. Nachdem das geschehen ist, kann ihm mit der Methode setRenderer() das vorhandene Renderer-Objekt zugewiesen werden. Nun muss nur noch die Datei eingelesen und an die Methode highlight() übergeben werden. Diese analysiert den Quelltext und hebt die erkannten Wörter hervor.

Die Ausgabe von Listing 11.5 sehen Sie in Abbildung 11.3.

Abbildung 11.3 Ausgabe eines Scripts im Browser

Vielleicht ist Ihnen aufgefallen, dass im HTML-Kopf von Listing 11.5 auf eine CSS-Datei verwiesen wird. Diese CSS-Datei dient dazu, die Farben und Formatierungen zu definieren, die für die Ausgabe der Datei genutzt werden sollen. Die einzelnen Abschnitte werden bei der Ausgabe nämlich nicht direkt formatiert, sondern nur mit CSS-Klassen ausgezeichnet. Die einzelnen Quelltext-Elemente sind alle in Tags wie <span class="hl-code"> </span> verpackt.

Leider bringt das Paket keine fertigen CSS-Dateien mit, so dass Sie diese selbst erstellen müssen. Welche Klassen Verwendung finden, können Sie nur den XML-Dateien entnehmen, die Sie im Verzeichnis data/Text_Highlighter unterhalb des PEAR-Heimatverzeichnisses finden. In diesen XML-Dateien finden Sie Abschnitte wie z. B. <block name="var" match="\$[a-z_]\w*" innerClass="var" contained="yes"/>, die jeweils in eigene Klassen umgewandelt werden. In diesem Fall würde sich die CSS-Klasse hl-var ergeben.

Ein Ausschnitt aus einer CSS-Datei, die zur Formatierung von PHP genutzt werden kann, könnte so aussehen:

.hl-reserved { 
      color: red; 
      font-weight: bolder; 
} 
.hl-var { 
      color: green; 
      font-style: italic; 
} 
.hl-string { 
      color: rgb(120,120,120); 
      font-weight: bolder; 
}

Listing 11.6 Auszug aus einer CSS-Datei zum Formatieren von PHP-Quellcode

Wie schon erwähnt wurde, kann das Paket aber auch Daten für eine Ausgabe auf der Kommandozeile aufbereiten. Grundsätzlich ist die Vorgehensweise dieselbe. Ein großer Unterschied besteht jedoch darin, dass die farbliche Hervorhebung auf der Kommandozeile nicht mit CSS realisiert werden kann. An dieser Stelle kommen ANSI-Sequenzen zum Einsatz. Diese Sequenzen werden mit dem ASCII-Code für Escape (33 oktal) und einer eckigen Klammer eingeleitet. Danach folgt ein Steuercode für die Formatierung (unterstrichen etc.), einer für die Vordergrundfarbe und einer für die Hintergrundfarbe. Die einzelnen Codes sind jeweils durch ein Semikolon zu trennen. Sie müssen allerdings nicht alle drei Codes angeben. Es wäre auch ausreichend, nur einen Code, z. B. für die Hintergrundfarbe anzugeben. Die gesamte Sequenz wird dann mit einem m abgeschlossen.


Tabelle 11.3 ANSI-Codes
ANSI-Code Bedeutung
0 Normale Darstellung
1 Fette Schrift
4 Schrift unterstreichen
5 Schrift blinkt
7 Invertierte Darstellung
8 Unsichtbar
30 Schwarze Schrift
31 Rote Schrift
32 Grüne Schrift
33 Gelbe Schrift
34 Blaue Schrift
35 Magenta-farbene Schrift
36 Cyan-farbene Schrift
37 Weiße Schrift
40 Schwarzer Hintergrund
41 Roter Hintergrund
42 Grüner Hintergrund
43 Gelber Hintergrund
44 Blauer Hintergrund
45 Magenta-farbener Hintergrund
46 Cyan-farbener Hintergrund
47 Weißer Hintergrund

Der Code \033[1;30;47m würde also eine weiße, fette Schrift auf schwarzem Hintergrund darstellen. Allerdings sollte erwähnt werden, dass für die Ausgabe auf der Konsole schon viele Farben vordefiniert sind, so dass Sie in den meisten Fällen selbst keine Farben definieren müssen.

require_once 'Text/Highlighter.php'; 
require_once 'Text/Highlighter/Renderer/Console.php'; 
 
$colors=array ( 
          // normaler Text mit rotem Hintergrund 
         'var'=>"\033[0;41m", 
         // unterstrichen und roter Text 
         'reserved'=>"\033[4;31m" 
         ); 
 
$options = array( 
  'numbers' => true, 
  'tabsize' => 3, 
  'colors' => $colors 
); 
$renderer = new Text_Highlighter_Renderer_Console($options); 
$highlighter = Text_Highlighter::factory('PHP'); 
$highlighter->setRenderer($renderer); 
$datei=file_get_contents 
('/home/netviser/public_html/CAPTCHA.php'); 
$text = $highlighter->highlight($datei); 
echo $text;

Listing 11.7 Ausgabe eines Quellcodes auf der Konsole

Wie Sie in Listing 11.7 sehen, unterscheidet sich die Arbeit mit der Konsolenversion nicht sonderlich von der HTML-Variante. Der Renderer unterscheidet in diesem Fall allerdings nicht mehrere Modi zum Ausgeben der Zeilennummern. Übergeben Sie mit dem Schlüssel numbers den Wert true, werden die Zeilennummern eingeblendet. Des Weiteren werden die Farben, die Sie nutzen möchten, auch in dem Array mit den Optionen an den Renderer übergeben. Die Farben wiederum werden auch in einem Array definiert, wobei der Typ des Elements den Schlüssel darstellt und die ANSI-Sequenz zum Definieren der Farbe den Wert. Auch hierbei gilt, dass Sie die Namen der Typen aus den XML-Dateien ableiten können.

Eine solches Konsolen-Script können Sie dann z. B. mit php script.php | more oder php script.php | less –r aufrufen und die Ausgabe seitenweise anzeigen lassen.

Abbildung 11.4 Ausgabe eines Quellcodes im Terminalfenster

 <<   zurück
     
  Zum Katalog
Zum Katalog: PHP PEAR
PHP PEAR
Jetzt bestellen!
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Katalog: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Katalog: Responsive Webdesign






 Responsive Webdesign


Zum Katalog: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Katalog: MySQL 5.6






 MySQL 5.6


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de