Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kolorowanie składni
Forum PHP.pl > Forum > PHP
MadMark
Witam, napisałem funkcję, której celem było kolorowanie składni języka C/C++:

  1. <?php
  2. // BBC File
  3. function BBCodeCpp($content){
  4. $keywords1 = array(
  5. "and",
  6. "and_eq",
  7. "asm",
  8. "bitand",
  9. "bitor",
  10. "break",
  11. "case",
  12. "catch",
  13. "compl",
  14. "const_cast",
  15. "continue",
  16. "default",
  17. "delete",
  18. "do",
  19. "dynamic_cast",
  20. "else",
  21. "for",
  22. "fortran",
  23. "friend",
  24. "goto",
  25. "if",
  26. "new",
  27. "not",
  28. "not_eq",
  29. "operator",
  30. "or",
  31. "or_eq",
  32. "private",
  33. "protected",
  34. "public",
  35. "reinterpret_cast",
  36. "return",
  37. "sizeof",
  38. "static_cast",
  39. "switch",
  40. "this",
  41. "throw",
  42. "try",
  43. "typeid",
  44. "using",
  45. "while",
  46. "xor",
  47. "xor_eq"
  48. );
  49. $keywords2 = array(
  50. "auto",
  51. "bool",
  52. "char",
  53. "class",
  54. "const",
  55. "double",
  56. "enum",
  57. "explicit",
  58. "export",
  59. "extern",
  60. "float",
  61. "inline",
  62. "int",
  63. "long",
  64. "mutable",
  65. "namespace",
  66. "register",
  67. "short",
  68. "signed",
  69. "static",
  70. "struct",
  71. "template",
  72. "typedef",
  73. "typename",
  74. "union",
  75. "unsigned",
  76. "virtual",
  77. "void",
  78. "volatile",
  79. "wchar_t"
  80. );
  81. $content = htmlspecialchars($content);
  82. $sao = array("=", "!", "~", "&amp;", "?", "|", "^", "%", "+", "-", "*", "(", ")", "{", "}", "[","]", ".", ",", ":", "&lt;", "&gt;");
  83. for($i=0;$i<sizeof($sao);++$i){
  84. $content = str_replace($sao[$i],'<span id="sep">'.$sao[$i].'</span>',$content);
  85. }
  86. $content = preg_replace('#\#include(.*?)\n#m','<span id="inc">\\0</span>',$content);
  87. $content = preg_replace('#//(.*?)\n#m','<span id="koma">\\0</span>',$content);
  88. //$content = str_replace("\n","<br />",$content);
  89. //$content = preg_replace('#(([a-z])\((.*?)\)#',' <span style="color: darkgoldenrod;">\\1(</span>\\2<span style="color: darkgoldenrod;">)</span>',$content);
  90. foreach($keywords1 AS $k1){
  91. $content = preg_replace('#'.$k1.'\s#s','<span id="keya">'.$k1.'</span> ',$content);
  92. }
  93. foreach($keywords2 AS $k2){
  94. $content = preg_replace('#'.$k2.'\s#s','<span id="keyb">'.$k2.'</span> ',$content);
  95. }
  96. foreach($keywords3 AS $k3){
  97. $content = preg_replace('#'.$k3.'\s#s','<span id="key3">'.$k3.'</span> ',$content);
  98. }
  99. $content = preg_replace('#/\*(.*?)\*/#s','<span id="koma">\\0</span>',$content);
  100. $content = preg_replace('#&quot;(.*?)&quot;#s','<span id="quo">\\0</span>',$content);
  101. $content = preg_replace('#&\#39;(.*?)&\#39;#s','<span id="quo">\\0</span>',$content);
  102. $content = preg_replace('#([0-9])#s', '<span id="numb">\\0</span>',$content);
  103. return $content;
  104. }
  105. ?>


Ale nie wszystko działa jak powinno...
Tj. między znacznikami cytatu, komentarza itp jest kolorowane wszystko od słów kluczowych po liczby, liczby niezależnie czy są częścią zmiennej czy są "same" są kolorowane, to samo dotyczy separatorów i operatorów (chodzi o komentarze i quotowanie).

Ktoś mi powie jak to poprawić ?
krzotr
Dla komentarzy i quote użyj strip_tags, usuniesz w ten sposób kolorowanie reszty elementów.
Crozin
Użyj normalnego narzędzia do kolorowania składni typu GeSHi.
MadMark
Cytat(Crozin @ 15.03.2011, 21:49:43 ) *
Użyj normalnego narzędzia do kolorowania składni typu GeSHi.

A czy geshi nie koloruje czasem wg php i tylko własnych kolorków? Bo nie wydaje mi się, żeby pokazywał TYLKO C/C++...
Crozin
http://qbnz.com/highlighter/ - tak, to po lewej to lista obsługiwach języków.
MadMark
No dobra, przekonałeś mnie. Ale jak to zainstalować i jak używać? snitch.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.