Hier auch ein kleines Skriptchen von mir welches auf den Token Funktionen von PHP aufbaut. Mit Befehlsverlinkung.
Noch etwas aufräumen und dann sollte das Ding auch mal auf meiner Seite veröffentlich werden
Kritik gerne.
<?php
// =============================================================================
// GIBT DEN UEBERGEBENEN PHP CODE FARBLICH ANGEPASST ZURUECK
// =============================================================================
function my_highlight_string($code)
{
// ==============================================================================
// ERGAENZENDE FUNKTIONEN
// ==============================================================================
// ------------------------------------------------------------------------------
// GIBT DIE *SELBER* DEFINIERTEN FUNKTIONEN ZURUECK
// ------------------------------------------------------------------------------
if (!function_exists('my_get_defined_functions') {
function my_get_defined_functions()
{
$funktionen = get_defined_functions();
return $funktionen['user'];
}
}
// ------------------------------------------------------------------------------
// SUCHT DEN PASSENDEN SCHLUESSEL ZUM TOKEN UND GIBT IHN ZURUECK
// ------------------------------------------------------------------------------
if (!function_exists('get_array_key') {
function get_array_key($id, $a_konstanten)
{
foreach ($a_konstanten as $key => $wert) {
if (in_array($id, $wert)) {
return $key;
}
}
return false;
}
}
// ==============================================================================
// VORBEREITUNG
// ==============================================================================
// Farben definieren
$a_farben = array( // STANDARDFARBEN
'string' => ini_get('highlight.string', // #DD0000 rot
'comment' => ini_get('highlight.comment', // #FF8000 orange
'keyword' => ini_get('highlight.keyword', // #007700 gruen
'default' => ini_get('highlight.default', // #0000BB blau
'html' => ini_get('highlight.html' // #000000 schwarz
);
// Token Konstanten in Gruppen fuer Farbbestimmung einteilen
$a_konstanten = array(
'string' => array(T_CONSTANT_ENCAPSED_STRING, T_ENCAPSED_AND_WHITESPACE),
'comment' => array(T_COMMENT, T_DOC_COMMENT),
'default' => array(T_CLOSE_TAG, T_OPEN_TAG, T_OPEN_TAG_WITH_ECHO, T_VARIABLE, T_STRING, T_LNUMBER, T_WHITESPACE, T_CLASS_C),
'keyword' => array(T_ABSTRACT, T_ARRAY, T_ARRAY_CAST, T_AS, T_BOOLEAN_AND, T_BOOLEAN_OR, T_BOOL_CAST, T_BREAK, T_CASE, T_CATCH, T_CLASS, T_CLONE, T_CONCAT_EQUAL, T_CONTINUE, T_DEFAULT, T_DOUBLE_ARROW, T_DOUBLE_CAST, T_ECHO, T_ELSE, T_ELSEIF, T_EMPTY, T_ENDDECLARE, T_ENDFOR, T_ENDFOREACH, T_ENDIF, T_ENDSWITCH, T_ENDWHILE, T_END_HEREDOC, T_EXIT, T_EXTENDS, T_FINAL, T_FOREACH, T_FUNCTION, T_GLOBAL, T_IF, T_INC, T_INCLUDE, T_INCLUDE_ONCE, T_INSTANCEOF, T_INT_CAST, T_ISSET, T_IS_EQUAL, T_IS_IDENTICAL, T_IS_NOT_IDENTICAL, T_IS_SMALLER_OR_EQUAL, T_NEW, T_OBJECT_CAST, T_OBJECT_OPERATOR, T_PAAMAYIM_NEKUDOTAYIM, T_PRIVATE, T_PROTECTED, T_PUBLIC, T_REQUIRE, T_REQUIRE_ONCE, T_RETURN, T_SL, T_SL_EQUAL, T_SR, T_SR_EQUAL, T_START_HEREDOC, T_STATIC, T_STRING_CAST, T_THROW, T_TRY, T_UNSET_CAST, T_VAR, T_WHILE, T_LOGICAL_OR, T_UNSET, T_LIST, T_LOGICAL_AND, T_IS_NOT_EQUAL, T_IS_GREATER_OR_EQUAL, T_FOR, T_MUL_EQUAL, T_DIV_EQUAL, T_SWITCH, T_PLUS_EQUAL, T_DO),
'html' => array(T_INLINE_HTML)
);
// Formatierung von Farbangaben und Links
$format_highlighting = '<span style="color:%s;">%s</span>';
$format_link = '<a href="http://php.net/function.%s" class="php" title="%s()">%s</a>';
// ==============================================================================
// SCRIPT
// ==============================================================================
$php = '';
$i = 0;
$a_token = token_get_all($code);
foreach($a_token as $token)
{
if (is_string($token)) {
// 1 Buchstaben Token z.B. ( { [ ; usw.
$php .= sprintf($format_highlighting, $a_farben['keyword'], htmlspecialchars($token));
} else {
// Token Inhalt aufteilen
list($id, $text) = $token;
// Formatierung beibehalten
$text = htmlspecialchars($text);
$text = str_replace(' ', ' ', $text);
// entsprechenden Schluessel fuer Farbauswahl auslesen
$key = get_array_key($id, $a_konstanten);
if ($id == T_STRING && ($a_token[$i + 1] == '(' || $a_token[$i + 2] == '(' && function_exists($text) && !in_array($text, my_get_defined_functions())) {
// Manual Link
$php .= sprintf($format_link, $text, $text, $text);
} else {
// normale Ausgabe
$php .= sprintf($format_highlighting, $a_farben[$key], $text);
}
}
// Zaehler fuer Manual Verlinkung
$i++;
}
return str_replace("\n", '<br />', $php);
}
?>