Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Implementacja GeSHi
piotrooo89
post 24.10.2009, 13:44:02
Post #1


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




Mam pewien problem z implementacją GeSHi na stronie. Więc od początku.

Pobieram dane z bazy i dostaje je w postaci:

  1. $zmienna = 'jakiś tekst <pre lang="php" line="1">php php php</pre> znów jakiś nowy tekst <pre lang="sql">sql sql sql</pre>';


i teraz chcę zaimplementować GeSHi aby kolorował mi owy tekst, próbowałem w ten sposób:

  1. include ('geshi/geshi.php');
  2. $zmienna = 'tekst tekst <pre lang="php" line="1">phptekst phptekst</pre> tekst2 tekst2 <pre lang="sql">sqltekst sqltekst</pre> tekst3 tekst3';
  3.  
  4. preg_match_all("/<pre(?:lang=[\"']([\w-]*)[\"']|line=[\"'](\d*)[\"']|\s)+>(.*)<\/pre>\s*/siU", $zmienna, $a);
  5.  
  6. print_r($a);
  7.  
  8. $geshi = new GeSHi($a[3][0], $a[1][0]);
  9.  
  10. echo preg_replace("/<pre(?:lang=[\"']([\w-]*)[\"']|line=[\"'](\d*)[\"']|\s)+>(.*)<\/pre>\s*/siU", $geshi->parse_code();, $zmienna);


tylko że jak będę miał n rożnych kodów, skrypt zamieni mi n na jednakowe kody (inaczej nie da rady bo w tablicy $a podałem phptekst phptekst)

W jaki dobry sposób rozwiązać ten problem, siedzę już chwilę nad tym i jakoś nie mogę nic nadzwyczajnego wymyślić.


--------------------
Go to the top of the page
+Quote Post
wookieb
post 24.10.2009, 14:33:53
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A myślałeś o preg_replace_callback? Dodatkowo chyba zapomniałeś o dodanie znaku ? do gwiazdki przed </pre>


--------------------
Go to the top of the page
+Quote Post
piotrooo89
post 24.10.2009, 14:50:45
Post #3


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




no już bliżej jak dalej. teraz problem mam z tym że wyświetla mi sie tylko 1 literka a nie cały tekst.

  1. include ('geshi/geshi.php');
  2. $zmienna = 'tekst tekst <pre lang="php" line="1">phptekst phptekst</pre> tekst2 tekst2 <pre lang="sql">sqltekst sqltekst</pre> tekst3 tekst3';
  3.  
  4. function zmien($match)
  5. {
  6. $geshi = new GeSHi($match[3][0], $match[1][0]);
  7. $geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS);
  8. $geshi->set_overall_style('font-size: 90%; color: #000066; border: 1px solid #d0d0d0; background-color: #f0f0f0;', true);
  9. $geshi->set_line_style('font: normal normal 95% "Courier New", Courier, monospace; color: #003030;', 'font: bold normal 95% "Courier New",
  10. Courier, monospace; color: #006060;', true);
  11. return $geshi->parse_code();
  12. }
  13.  
  14. echo preg_replace_callback("/<pre(?:lang=[\"']([\w-]*)[\"']|line=[\"'](\d*)[\"']|\s)+>(.*)<\/pre>\s*/siU", 'zmien', $zmienna);


--------------------
Go to the top of the page
+Quote Post
wookieb
post 24.10.2009, 14:52:12
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A zobacz sobie co masz w $match to dostaniesz odpowiedź smile.gif


--------------------
Go to the top of the page
+Quote Post
piotrooo89
post 24.10.2009, 14:55:36
Post #5


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




tylko że ja w tablicy mam poprawnie

Kod
Array ( [0] =>

phptekst phptekst

[1] => php [2] => 1 [3] => phptekst phptekst ) Array ( [0] =>

sqltekst sqltekst

[1] => sql [2] => [3] => sqltekst sqltekst )


więc IMHO RegEx jest ok.

ok już wiem, nie tablice wielowymiarowe... :/

Ten post edytował piotrooo89 24.10.2009, 14:58:03


--------------------
Go to the top of the page
+Quote Post
wookieb
post 24.10.2009, 14:58:17
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Nie podałeś po prostu całego ciągu
  1. $geshi = new GeSHi($match[3], $match[1]);


--------------------
Go to the top of the page
+Quote Post
piotrooo89
post 24.10.2009, 15:44:18
Post #7


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




tak tak, podawałem jako tablice wielo wymiarowe, dopiero po chwili zauważyłem że coś nie tak. dzięki smile.gif

pociągnę jeszcze ten temat. nie ma to już związku z php mianowicie ze stylami co zrobić aby geshi łamał mi tekst?
obecnie mam tak, jak zrobić to bez dodawania overflow: scroll? czy istnieje taka opcja?




Ten post edytował piotrooo89 24.10.2009, 15:45:05


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.07.2025 - 01:18