Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: GeSHi --> Kolorowanie kodu
Forum PHP.pl > Forum > PHP
TheBlackJJoker
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 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 sad.gif

Pomocy!
Kshyhoo
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...
TheBlackJJoker
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 sad.gif
Kshyhoo
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);
TheBlackJJoker
Jak na razie dziękuję. Sprawdzę to smile.gif

Edit: Jest tutaj jakiś błąd :

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

Problem z " ' sad.gif

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


Bo tak trochę się pogubiłem.
A rzadko się gubię 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 ... ?> sad.gif
Kshyhoo
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.
TheBlackJJoker
Okey. A jak zrobić border pomiędzy kodem a numerem lini?
Kshyhoo
Nie wiem, jak wyświetlasz, czy w tabelce, czy w DIVach... zobacz w źródle strony i ten element daj jako border.
TheBlackJJoker
ja. yyy

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

Nie dodaje divu. Ale ogólnie jest to w divie treść biggrin.gif
Kshyhoo
The Code Container
TheBlackJJoker
nie działa sad.gif Nadal wykonuje kod który jest do pokolorowania 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);
?>
Kshyhoo
No wybacz, wrzuciłem Ci gotowca a Ty wklejasz mi jakieś wypociny i narzekasz, że nie działa. Powodzenia.
TheBlackJJoker
Dobra. Zrobiłem lekko inaczej smile.gif
Bo z pliku smile.gif
Z pliku jest all okey 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?
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.