Seite 1 von 1

[erledigt]strings highlighten

Verfasst: 28.05.2007 13:38
von Ambience
Hallo,

ich bastel mir gerade einen highlighter, der bis jetzt fast richtig funktioniert... er macht alles richtig, aber die strings werden nicht richtig highgelightet...

Das ganze mache ich mit Tokens...

der teil der dafür zuständig ist sollte das sein:

Code: Alles auswählen

case 'T_STRING': 
          $highlightet .= "<font color='#0000ff'>".$token[1]."</font>"; 
        break; 
die strings sollten dann alle in blau erscheinen... aber er macht das nicht, stattdessen macht er andere sachen blau...
das ganze könnt ihr auch lokal testen, indem ihr die viewtopic.php ins gleiche verzeichnes von dem script tut... dan werdet ihr sehen was ich meine...

Code: Alles auswählen

<?php

$text = file_get_contents('viewtopic.php');

$text = token_get_all($text);

$highlightet = '';

foreach($text as $token)
{
  if(!is_array($token)) 
  { 
    $highlightet .= "<font color='#ff0000'>".htmlentities($token)."</font>";
  }
  else
  {
    switch(token_name($token[0]))
    {
      case 'T_OPEN_TAG':
          $highlightet .= "<font color='#ff0000'><b>".htmlentities($token[1]) . "</b></font>";
        break;
      case 'T_CLOSE_TAG':
          $highlightet .= "<font color='#ff0000'><b>".$token[1]. "</b></font>";
        break;
      case 'T_STRING':
          $highlightet .= "<font color='#0000ff'>".$token[1]."</font>";
        break;
      case 'T_CONCAT_EQUAL':
          $highlightet .= "<font color='#000080'>".$token[1]."</font>";
        break;
      case 'T_INT_CAST':
          $highlightet .= "<font color='#ff0000'>".substr($token[1], 0, 1)."</font><b>".substr($token[1], 1, 3)."</b><font color='#ff0000'>".substr($token[1], 4, 1)."</font>";
        break;
      case 'T_ABSRACT':
      case 'T_ARRAY':
      case 'T_AS':
      case 'T_ECHO':
      case 'T_INCLUDE':
      case 'T_IF':
      case 'T_ELSE':
      case 'T_ELSEIF':
      case 'T_FOR':
      case 'T_FOREACH':
      case 'T_ISSET':
      case 'T_EMPTY':
      case 'T_WHILE':
      case 'T_UNSET':
      case 'T_LIST':
      case 'T_CONTINUE':
      case 'T_NEW':
          $highlightet .= "<b>".$token[1]."</b>";
        break;
      case 'T_VARIABLE':
          $highlightet .= "<font color='#800080'>".$token[1]."</font>";
        break;
      case 'T_FILE':
      case 'T_FUNC_C':
      case 'T_CLASS_C':
          $highlightet .= "<font color='#800080'><b>".$token[1]."</b></font>";
        break;
      case 'T_COMMENT':
      case 'T_DOC_COMMENT':
          $highlightet .= "<font color='#c0c0c0'>".$token[1]."</font>";
        break;
      case 'T_DOUBLE_ARROW':
      case 'T_BOOLEAN_AND':
      case 'T_BOOLEAN_OR':
      case 'T_IS_EQUAL':
      case 'T_IS_IDENTICAL':
      case 'T_OBJECT_OPERATOR':
      case 'T_IS_NOT_EQUAL':
      case 'T_IS_NOT_IDENTICAL':
          $highlightet .= "<font color='#ff0000'>".$token[1]."</font>";
        break;
      case 'T_LNUMBER':
          $highlightet .= "<font color='#008000'>".$token[1]."</font>";
        break;
      default:
         $highlightet .= htmlentities($token[1]);
        break;
    }
  }
}

echo nl2br($highlightet);
?>

Verfasst: 28.05.2007 15:24
von CoReY
Hallo,
bevor du hier das Rad völlig neu erfindest: Soll dies ein universeller Highlighter für div. Anwendungszwecke werden, oder ausschließl. für PHP ausgelegt?

In letzterem Fall s. z. B. "highlight_file()" (bzw. allg. "highlight_string()").

Verfasst: 28.05.2007 15:52
von Ambience
die funktionen sind mit verlaub gesagt KACKE, weil ich meine eigenen Farben benutzen will, ich brauch ja nurnoch das er diese strings richtig highlightet...

Verfasst: 28.05.2007 16:02
von killerbees19
Du kannst die Farben selbst einstellen :wink:
Dafür gibt es in der php.ini die Einstellungen highlight.* - einfach mal suchen.
Falls du auf die php.ini keinen Zugriff hast, kannst du diese Einstellungen auch durch eine .htaccess Datei ändern oder durch die PHP Funktion ini_set() :wink:


MfG Christian

Verfasst: 28.05.2007 16:55
von Ambience
das ist aber nicht das was ich will.. ach egal dann versuch ichs einfach alleine weiter.

so... gesuchter token hieß: T_CONSTANT_ENCAPSED_STRING