Mam problem. Podczas pisania skryptu do kolorowania składni (coś a'la to z forum phph.pl) napotkałem problem jak kolorować kod pomiędzy znacznikami [,code][/,code] na odpowiednie kolory.Rozwiązaniem było geshi. Wszystko ładnie pięknie, lecz po wyciągnięciu kawałka do pokolorowania, zamienia ono zmienne, czyli kod:
<?php class ColorSyntax { public function SearchCode($content) { $content = preg_replace("#\[code lang=\"(.*?)\"\](.*?)\[\/code\]#sie", '$this->PreformBlock("\\1","\\2")', $content); return $content; } public function PreformBlock($lang, $source){ $result = $this->HighlightCode($source, $lang); return $result; } public function ParseCode($content){ return $this->SearchCode($content); } public function HighlightCode($source, $lang ){ $geshi = new GeSHi($source, $lang); $geshi->set_source($source); $result = $geshi->set_language($lang); $geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS); $result = $geshi->parse_code(); return $result; } } ?>
I teraz $content to:
[code lang="php"] $zmienna = 6;[/code]
Egzemplarzowanie:
include('class/stringHighlight.php'); include('geshi/geshi.php'); $color = new ColorSyntax(); $tresc = $color->ParseCode($trescBefore);
I teraz po wywołaniu tego zwróci pokolorowane, lecz usunie zmienne, nie pokaże ich, czyli powyższy przykład to:
= 6;
I teraz dzieje się to przy wyciąganiu fragmentu kodu poprzez backreference.
public function ParseCode($content){ echo $ content; return $this->SearchCode($content); }
Pokaże [code lang="php"]$zmienna = 6;[/code]
ale następny krok:
public function PreformBlock($lang, $source){ $result = $this->HighlightCode($source, $lang); return $result; }
Pokaże już = 6;
Jak zrobić aby to co jest łapane w backreference nie było interpretowane?
pozdrawiam