Quelltexte und Codeschnipsel werden durch farbige Hervorhebung der entsprechenden Codebestandteile deutlich lesbarer und damit leichter verständlich. Da auch in diesem Blog immer wieder Code-Beispiele zu sehen sein werden, war es mir ein Anliegen, ein vernünftiges syntax highlighting zu besitzen.
Eine kurze Recherche im Internet führt sehr schnell zu
GeSHi (
Generic
Syntax
Highlighter).
Glücklicherweise steht sogar ein zugehöriges Plugin für Serendipity zur Verfügung (serendipity_event_geshi), das über spartacus schnell und einfach installiert wird. Leider ging danach erst mal gar nichts mehr:
Fatal error: serendipity_event_geshi::require_once() [function.require]: Failed opening required '/.../plugins/serendipity_event_geshi/geshi.php' (include_path='.:/opt/php5/share/pear:/.../bundled-libs/:/.../bundled-libs/Smarty/libs/:/.../:') in /.../plugins/serendipity_event_geshi/serendipity_event_geshi.php on line 144
Also nochmal zurück auf die Konfigurations-Seite des Plugins und verschiedene Varianten für den Pfad zu GeSHi ausprobiert – ohne Erfolg.
Die Lösung brachte dann ein Blick über ftp in das GeSHi Plugin-Verzeichnis: Die Datei ‚geshi.php‘ war einfach nicht mit installiert worden! Vom
CVS-Repository des Plugins war die
fehlende Datei dann jedoch schnell besorgt und in das richtige Verzeichnis kopiert. Daraufhin funktionierte das Plugin problemlos.
Dasselbe Installationsproblem wird auch in
diesem Blog beschrieben.
Die Funktionsweise des Plugins ist denkbar simpel: Der Quellcode wird einfach mit
[geshi lang=lang]...
[/geshi] umschlossen. Über den Parameter
lang=lang kann dabei aus einer großen Zahl unterstützter Sprachen ausgewählt werden. Hier nur eine kleine Auswahl:
- c - (C language)
- cpp (C++)
- java
- php
- actionscript
- javascript
- python
- css
- sql
Zu beachten ist noch, dass verschiedene Serendipity-Plugins Textformatierungen anhand von Steuerzeichen vornehmen. Die Eingabe
_Text_ ergibt z. B.
Text. Um also zu vermeiden, dass die in Quelltexten häufig vorkommenden Sonderzeichen, wie Unterstriche oder Sternchen (Asterisk) usw. von einem anderen Textformatierungs-Plugin missinterpretiert werden, muss das GeSHi-Plugin vor allen anderen Textformatierungs-Plugins ausgeführt werden.
Hier nun ein kleines XML-Beispiel mit syntax highlighting:
<?xml version="1.0"?>
<root>
<node1 attr="abc"/>
<node2>Entry</node2>
</root>
Der in
diesem Eintrag erwähnte Codeschnipsel zur Einbindung von Google AdSense in Serendipity (vollständige Anleitung
hier):
{if ($smarty.
foreach.
baseloop.
index == 0 AND
$smarty.
foreach.
entryloop.
index == 0) OR
$smarty.
foreach.
baseloop.
index == 0 AND
$smarty.
foreach.
entryloop.
index == 0} <p />
<div align="center">
<!-- Google Adsense Code -->
</div>
Und zu guter Letzt noch das „offizielle“ Referenzbeispiel der GeSHi-Entwickler:
double CAAPluto::EclipticLongitude(double JD) {
double T = (JD - 2451545) / 36525;
double J = 34.35 + 3034.9057*T;
//Calculate Longitude
double L = 0;
int nPlutoCoefficients = sizeof(g_PlutoArgumentCoefficients) / sizeof(PlutoCoefficient1);
for (int i=0; i<nPlutoCoefficients; i++) {
double Alpha = g_PlutoArgumentCoefficients[i].J * J + g_PlutoArgumentCoefficients[i].S * S + g_PlutoArgumentCoefficients[i].P * P;
Alpha = CAACoordinateTransformation::DegreesToRadians(Alpha);
L += ((g_PlutoLongitudeCoefficients[i].A * sin(Alpha)) + (g_PlutoLongitudeCoefficients[i].B * cos(Alpha)));
}
L = L / 1000000;
L += (238.958116 + 144.96*T);
L = CAACoordinateTransformation::MapTo0To360Range(L);
return L;
}