Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> GeSHi --> Kolorowanie kodu
TheBlackJJoker
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 21.01.2014

Ostrzeżenie: (0%)
-----


Witam.
Proszę was o pomoc.
A mianowicie.
Jak używać tej pseudo Biblioteki (Klasy).
Coś już zrobiłem, ale nie mogę użyć takich znaczników:
<?php, lub ?>

I ogólnie nie wiem jak sformatować wygląd. Najlepiej w css (IMG:style_emoticons/default/smile.gif)

Kod
<?php

include('geshi.php'); //include do skryptu :P
$language = 'php'; // język kodu
ob_start(); // tworzymy zmienną przechowującą kod do pokolorowania
?>
//Tutaj kod, który ma być pokolorowany
<?php
$source = ob_get_contents();// Cały powyższy kod znajduje się w zmiennej $source
ob_end_clean();//zamykamy zmienną przechowującą kod i czyścimy
$geshi = new GeSHi($source, $language);// Tworzymy nowy obiekt klasy
$geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS); // Numerowanie wierszy
//$geshi->set_overall_id('php'); // id = "php" (do css)
//$geshi->get_stylesheet(); // Pobiera styl z stylu css zewnętrznego
echo $geshi->parse_code();// Wyświetlamy
?>


Ten css to tylko background (IMG:style_emoticons/default/sad.gif)

Pomocy!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
Kshyhoo
post
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Przecież w dokumentacji wszystko jest ładnie opisane. Wiem, bo sam korzystałem. Znaczniki <?php lub ?> można używać, ale muszą być użyte wewnątrz znaczników PRE, służących do umieszczania kodu...
Go to the top of the page
+Quote Post
TheBlackJJoker
post
Post #3





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 21.01.2014

Ostrzeżenie: (0%)
-----


Kod
<?php

include('geshi.php'); //include do skryptu :P
$language = 'php'; // język kodu
ob_start(); // tworzymy zmienną przechowującą kod do pokolorowania
?>
<pre>
<?php
// lol
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
ddddddddddddddddddddddddddddddddddddddddddddddddd
include();
?>
</pre><?php
$source = ob_get_contents();// Cały powyższy kod znajduje się w zmiennej $source
ob_end_clean();//zamykamy zmienną przechowującą kod i czyścimy
$geshi = new GeSHi($source, $language);// Tworzymy nowy obiekt klasy
$geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS); // Numerowanie wierszy
$geshi->set_overall_id('php'); // id = "php" (do css)
$geshi->get_stylesheet(); // Pobiera styl z stylu css zewnętrznego
echo $geshi->parse_code();// Wyświetlamy
?>


I chce wykonać include itp...


A dokumentację czytałem, ale z angielskiego kiepski jestem (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #4





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Złe podejście.
  1. include_once 'geshi.php';
  2.  
  3. // funkcja z ustawieniami
  4. function zmien($match) {
  5. // replace problematic characters
  6. $search = array("\\", "&quot;", "'", "\", "&quot;", "'", "&lt;", "&gt;", "&amp;");
  7. $replace = array("\\\\", "\"", "'", "\\", "\"", "\'", "<", ">", "&");
  8. $match = str_replace($search, $replace, $match);
  9.  
  10. $mode = '';
  11. $geshi = new GeSHi($match[3], $match[1]);
  12.  
  13. // wyłączenie aktywnych linków
  14. $geshi->enable_keyword_links(false);
  15.  
  16. // style do PRE (ale lepiej zastosować osobny plik styli
  17. $geshi->set_header_content_style('position: absolute; margin-top: -12px; float: right; background: #0026FF; border: 1px solid rgb(208, 208, 208); padding: 2px 4px; color: #fff; font-weight: bold;');
  18.  
  19. // jaki język kolorowany
  20. $geshi->set_header_content('<LANGUAGE>');
  21.  
  22. // styl kontentu
  23. $geshi->set_footer_content($content);
  24.  
  25. // stopka
  26. $geshi->set_footer_content('<TIME> Wygenerowano w: <SPEED> Wersja GeShi: <VERSION>');
  27.  
  28. // wiele języków w jednym (np. mieszany kod HTML i PHP
  29. $geshi->enable_strict_mode(GESHI_ALWAYS, true);
  30.  
  31. // numerowanie linii
  32. $geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, 2);
  33.  
  34. // kodowanie
  35. $geshi->set_encoding('UTF-8');
  36.  
  37. // błędy
  38. $geshi->error();
  39.  
  40. // parsowanie
  41. return $geshi->parse_code();
  42. }
  43.  
  44. // i podmieniasz to, co masz w treści w znacznikach PRE
  45. $source = preg_replace_callback("/<pre(?:lang=[\"']([\w-]*)[\"']|line=[\"'](\d*)[\"']|\s)+>(.*)<\/pre>\s*/siU", 'zmien', $source);
Go to the top of the page
+Quote Post
TheBlackJJoker
post
Post #5





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 21.01.2014

Ostrzeżenie: (0%)
-----


Jak na razie dziękuję. Sprawdzę to (IMG:style_emoticons/default/smile.gif)

Edit: Jest tutaj jakiś błąd :

$search = array("\\", "&quot;", "'", "\", "&quot;", "'", "&lt;", "&gt;", "&amp;");
$replace = array("\\\\", "\"", "'", "\\", "\"", "\'", "<", ">", "&");

Problem z " ' (IMG:style_emoticons/default/sad.gif)

Zastosowałem większość, ale ...


Bo tak trochę się pogubiłem.
A rzadko się gubię (IMG:style_emoticons/default/biggrin.gif)

Sam zrobiłem w 100% www.skryptowanie.xaa.pl

A i skąd mam wiedzieć jaką klasę, lub id mam użyć w css, aby zrobić styl do kodu?

I jeszcze jedno.

Mi kod który ma być pokolorowany wykonuje się jeżeli dodam <?php ... ?> (IMG:style_emoticons/default/sad.gif)

Ten post edytował TheBlackJJoker 1.02.2014, 19:19:22
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #6





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Parser Forum podmienia znaki. Spróbuję jeszcze raz:
  1. $search = array("\\", "&quot;", "&# 39;", "&# 92;", "&quot;", "&# 39;", "&lt;", "&gt;", "&amp;");
  2. $replace = array("\\\\", "\"", "'", "\\", "\"", "\'", "<", ">", "&");

W górnym rzędzie usuń spacje pomiędzy &# a liczbami.
Co do CSS, można tak: załóżmy, że masz klasę "artykul", to dajesz tak:
  1. .artykul pre {
  2. font-family: monospace;
  3. color: rgb(0, 0, 102);
  4. border: 1px solid rgb(208, 208, 208);
  5. overflow: auto;
  6. word-wrap: break-word;
  7. white-space: pre-wrap;
  8. text-align: left;
  9. font-size: 14px;
  10. margin: 15px 5px;
  11. padding: 0 5px 0 60px;
  12. }

Czyli styl zostanie zastosowany dla elementów PRE zawartych w klasie "artykul".

Jeżeli będziesz miał tak:
  1. <pre><?php
  2. // kod php
  3. ?></pre>

kod PHP się nie wykona. Jeżeli masz z tym problem, możesz zamieniać znaki specjalne na encje.
Go to the top of the page
+Quote Post
TheBlackJJoker
post
Post #7





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 21.01.2014

Ostrzeżenie: (0%)
-----


Okey. A jak zrobić border pomiędzy kodem a numerem lini?
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #8





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Nie wiem, jak wyświetlasz, czy w tabelce, czy w DIVach... zobacz w źródle strony i ten element daj jako border.
Go to the top of the page
+Quote Post
TheBlackJJoker
post
Post #9





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 21.01.2014

Ostrzeżenie: (0%)
-----


ja. yyy

echo $geshi->parse_code();// Wyświetlamy

Nie dodaje divu. Ale ogólnie jest to w divie treść (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #10





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




The Code Container
Go to the top of the page
+Quote Post
TheBlackJJoker
post
Post #11





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 21.01.2014

Ostrzeżenie: (0%)
-----


nie działa (IMG:style_emoticons/default/sad.gif) Nadal wykonuje kod który jest do pokolorowania (IMG:style_emoticons/default/sad.gif)

Kod
<?php

include('geshi.php'); //include do skryptu :P
$language = 'php'; // język kodu

function zmien($match) {
$search = array("\\", "&quot;", "'", "\", "&quot;", "'", "&lt;", "&gt;", "&amp;");
$replace = array("\\\\", "\"", "'", "\\", "\"", "\'", "<", ">", "&");
  $match = str_replace($search, $replace, $match);

  $mode = '';
  $geshi = new GeSHi($match[3], $match[1]);
ob_start(); // tworzymy zmienną przechowującą kod do pokolorowania
?>
<?php
// lol
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
ddddddddddddddddddddddddddddddddddddddddddddddddd
include();
?><?php
$source = ob_get_contents();// Cały powyższy kod znajduje się w zmiennej $source
ob_end_clean();//zamykamy zmienną przechowującą kod i czyścimy
$geshi = new GeSHi($source, $language);// Tworzymy nowy obiekt klasy
$geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, 2); // Numerowanie wierszy
$geshi->set_overall_id('php'); // id = "php" (do css)
$geshi->get_stylesheet(); // Pobiera styl z stylu css zewnętrznego
$geshi->enable_keyword_links(false);// wyłączenie aktywnych linków
$geshi->set_header_content('<LANGUAGE>');//tekst na górze
$geshi->set_footer_content('Wygenerowano w: <TIME> Szybkość: <SPEED> Wersja GeShi: <VERSION>'); // Tekst na dole
$geshi->set_encoding('UTF-8');// kodowanie
$geshi->error();// błędy
echo $geshi->parse_code();// Wyświetlamy
}
$source = preg_replace_callback("/<pre(?:lang=[\"']([\w-]*)[\"']|line=[\"'](\d*)[\"']|\s)+>(.*)<\/pre>\s*/siU", 'zmien', $source);
?>
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #12





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




No wybacz, wrzuciłem Ci gotowca a Ty wklejasz mi jakieś wypociny i narzekasz, że nie działa. Powodzenia.
Go to the top of the page
+Quote Post
TheBlackJJoker
post
Post #13





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 21.01.2014

Ostrzeżenie: (0%)
-----


Dobra. Zrobiłem lekko inaczej (IMG:style_emoticons/default/smile.gif)
Bo z pliku (IMG:style_emoticons/default/smile.gif)
Z pliku jest all okey (IMG:style_emoticons/default/smile.gif)

A i jeszcze jedno.

Jak skasowałem te liczby wierszy to nie działa formatowanie wierszy.
Jak zrobić padding tylko dla "tego kodu"?
Aby nie obejmowało to Header i footer?

Ten post edytował TheBlackJJoker 2.02.2014, 00:50:00
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 19:57