Syntax Highlighting

Radhad

Erfahrenes Mitglied
Hallo zusammen,

ich suche eine Klasse oder Funktionen, wie ich Syntax Highlighting mit PHP darstellen kann, für die Sprachen PHP, HTML, MySQL, Perl, ... mehr fällt mir grade nicht ein ;) Aus dem Thread http://www.tutorials.de/forum/php/276497-html-code-farbig-anzeigen.html bin ich auf GeSHi gestoßen, eine Highlighter-Klasse für div. Sprachen, jedoch fehlt mir bei MySQL die Funktion für automatische Zeilenümbrüche bei bestimmten Keywords :(

Kennt jemand Alternativen? Mein eigener Script-Versuch scheitert bei der Erkennung einer Unterabfrage :/



Gruß Radhad
 
Sorry, gerade erst gesehen, dass jemand geantwortet hat.

Hier mal der Script-Aufbau:
PHP:
<style type="text/css">
<!--
div.mysql
{
  color: #000000;
  font-size: 11px;
  font-family: sans-serif;
  width: 100%;
  background-color: #CCCCCC;
  border: 1px solid #333333;
  padding: 2px;
}

div.mysql span.keyword
{
  color: #990099;
  font-weight: bold;
  font-family: sans-serif;
  font-size: 12px;
}
div.mysql span.number
{
  color: #009999;
}
//-->
</style>

<?php

echo highlight_query('SELECT * FROM `table` WHERE name = (SELECT name FROM antothertable WHERE name LIKE "%r%") LIMIT 1;');


  function highlight_query($query)
  {
    $query = strip_tags($query);
    $query = str_replace(";", "", $query);
    $keywords = array('SELECT', 'INSERT', 'UPDATE', 'DELETE', 'FROM', 'WHERE', 'LIMIT', 'JOIN', 'LIKE', 'ORDER BY', 'GROUP BY', 'COUNT', 'DISTINCT');
    $specialchars = array ('(', ')', '=');
    $i = 0;

    $q = explode(' ', $query);
  
    foreach($q as $key => $word)
    {
      if(in_array(strtoupper($word), $keywords))
      {
        if($i == 0)
        {
          $q[$key] = '<span class="keyword">'. $word .'</span>';
          $i++;
        }
        else
        {
          $q[$key] = '<br><span class="keyword">'. $word .'</span>';
        }
      }
      if(in_array($word, $specialchars))
      {
        $q[$key] = '<span class="keyword">'. $word .'</span>';
      }
      if(is_numeric($word))
      {
        $q[$key] = '<span class="number">'. $word .'</span>';
      }
    }

    return '<div class="mysql">'. implode(' ', $q) .'<span class="keyword">;</span></div>';
  }


?>
Besser wäre wohl auch preg_replace zu benutzen, aber da bin ich nicht so gut drin.


Aus Ausgabe hätte ich es gerne wie bei phpMyAdmin (oder zumindest so ähnlich). Also es soll ca. so aussehen:
SQL:
SELECT *
FROM `table`
WHERE name = 
(
    SELECT name
    FROM antothertable
    WHERE name LIKE "%r%"
)
LIMIT 1;
Also Unterabfragen sollen eingerückt werden (wie bei phpMyAdmin). Farben sollen dann natürlich frei definiert werden können über CSS, ist denk ich mal logisch ;)


Gruß Radhad
 
Hallo

Für PHP gibt es die Funktion "
highlight_file($Dateiname);"
Oder "highlight_string($string);"


Ist aber wahrscheinlich nicht was du meinst.

Gruss
 
Zuletzt bearbeitet:
Zurück