Advertisement
Guest User

Untitled

a guest
Aug 18th, 2017
443
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.06 KB | None | 0 0
  1. <?php
  2.  
  3. /* * *******************************************************************
  4. * Highlighter class - highlights SQL with preg and some compromises
  5. * @Author dzver <dzver@abv.bg>
  6. * @Copyright GNU v 3.0
  7. * ******************************************************************* */
  8.  
  9. class Highlighter {
  10. /*
  11. protected $colors - key order is important because of highlighting < and >
  12. chars and not encoding them to < and >
  13. */
  14.  
  15. protected $colors = Array('chars' => 'grey', 'keywords' => 'blue', 'joins' => 'gray', 'functions' => 'violet', 'constants' => 'red');
  16. /*
  17. lists are not complete.
  18. */
  19. protected $words = Array(
  20. 'keywords' =>
  21. array('SELECT', 'UPDATE', 'INSERT', 'DELETE', 'REPLACE', 'INTO', 'CREATE', 'ALTER', 'TABLE', 'DROP', 'TRUNCATE', 'FROM',
  22. 'ADD', 'CHANGE', 'COLUMN', 'KEY',
  23. 'WHERE', 'ON', 'CASE', 'WHEN', 'THEN', 'END', 'ELSE', 'AS',
  24. 'USING', 'USE', 'INDEX', 'CONSTRAINT', 'REFERENCES', 'DUPLICATE',
  25. 'LIMIT', 'OFFSET', 'SET', 'SHOW', 'STATUS',
  26. 'BETWEEN', 'AND', 'IS', 'NOT', 'OR', 'XOR', 'INTERVAL', 'TOP',
  27. 'GROUP BY', 'ORDER BY', 'DESC', 'ASC', 'COLLATE', 'NAMES', 'UTF8', 'DISTINCT', 'DATABASE',
  28. 'CALC_FOUND_ROWS', 'SQL_NO_CACHE', 'MATCH', 'AGAINST', 'LIKE', 'REGEXP', 'RLIKE',
  29. 'PRIMARY', 'AUTO_INCREMENT', 'DEFAULT', 'IDENTITY', 'VALUES', 'PROCEDURE', 'FUNCTION',
  30. 'TRAN', 'TRANSACTION', 'COMMIT', 'ROLLBACK', 'SAVEPOINT', 'TRIGGER', 'CASCADE',
  31. 'DECLARE', 'CURSOR', 'FOR', 'DEALLOCATE'
  32. ),
  33. 'joins' => array('JOIN', 'INNER', 'OUTER', 'FULL', 'NATURAL', 'LEFT', 'RIGHT'),
  34. 'chars' => '/([\\.,\\(\\)<>:=`]+)/i',
  35. 'functions' => array(
  36. 'MIN', 'MAX', 'SUM', 'COUNT', 'AVG', 'CAST', 'COALESCE', 'CHAR_LENGTH', 'LENGTH', 'SUBSTRING',
  37. 'DAY', 'MONTH', 'YEAR', 'DATE_FORMAT', 'CRC32', 'CURDATE', 'SYSDATE', 'NOW', 'GETDATE',
  38. 'FROM_UNIXTIME', 'FROM_DAYS', 'TO_DAYS', 'HOUR', 'IFNULL', 'ISNULL', 'NVL', 'NVL2',
  39. 'INET_ATON', 'INET_NTOA', 'INSTR', 'FOUND_ROWS',
  40. 'LAST_INSERT_ID', 'LCASE', 'LOWER', 'UCASE', 'UPPER',
  41. 'LPAD', 'RPAD', 'RTRIM', 'LTRIM',
  42. 'MD5', 'MINUTE', 'ROUND',
  43. 'SECOND', 'SHA1', 'STDDEV', 'STR_TO_DATE', 'WEEK'),
  44. 'constants' => '/(\'[^\']*\'|[0-9]+)/i'
  45. );
  46.  
  47. /*
  48. $colors must be blank or
  49. Array('chars' => '', 'keywords' => '', 'joins' => '', 'functions' => '', 'constants' => '')
  50. */
  51.  
  52. function __construct($colors = 0) {
  53. if ($colors)
  54. $this->colors = $colors;
  55. }
  56.  
  57. public function highlight($sql) {
  58. $sql = str_replace('\\\'', '\\&#039;', $sql);
  59. foreach ($this->colors as $key => $color) {
  60. if (in_array($key, Array('constants', 'chars'))) {
  61. $regexp = $this->words[$key];
  62. } else {
  63. $regexp = '/\\b(' . join("|", $this->words[$key]) . ')\\b/i';
  64. }
  65. $sql = preg_replace($regexp, '<span style="color:' . $color . "\">$1</span>", $sql);
  66. }
  67. return $sql;
  68. }
  69.  
  70. }
  71. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement