Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [klasa] Rainbow
Forum PHP.pl > Inne > Oceny
SHiP
Przedsawiam kolejny wytwór mojej chorej główki winksmiley.jpg. Tym razem jest to klasa odpowiedzialna za kolorowanie kodu.

DOWNLAOD
Male info:
- klasa obsluguje 4 tryby; php, html, css, oraz all(wszystkie tryby naraz).
- jeśli zostanie wybrany np. tryb css a skrypt wykryje znaczniki php automatycznie zmieni tryb na all
- jezeli stala HTML_STRICT zadeklarowana w pliku libs/rainbow.class.php bedzie miala wartość 1 skrypt bedzie pracowal w trybie wymuszającym poprawny kod xhtml. Klasa podkreśli i pokoloruje na czerwono kod:
  • w przypadku niezamkniecia znacznika np. <br>
  • w przypadku braku cydzyslowów np cellspadding=0
  • w przypadku użycia wielkich liter np <DIV>
  • w przypadku użycia apostrofów np. <td rowspan='2'>
- klasa tworzy pamiec cache przez co gotowy kod generowany jest tylko raz

Tworzenie kodu jest bardzo proste
  1. <?php
  2. $rainbow = new rainbow(); // tworzenie obiektu
  3. $rainbow -> loadFile($file); // ladujemy kod z pliku 
  4. // lub
  5. $rainbow -> assignCode($code); // ladujemy kod ze zmiennej
  6.  
  7. // ustawiamy unikalny identyfikator(uzywany to tworzenia plikow cache)
  8. $rainbow -> setId('mieszane');
  9. echo $rainbow -> make('all'); // generujemy i wyswietlamy gotowy kod
  10. ?>

Funkcja make() posiada 2 parametry - pierwszy to tryb, drugi to tryb cache(domyslnie: 1 - wlaczony)

Aby usunąć cache wywolujemy
  1. <?php
  2. $rainbow -> deleteCache('mieszane'); // gdzie parametr to nasz unikalny identyfikator
  3. ?>


Zapraszam do komentowania, Jutro zaprezentuje drugą klase z bbCode pokaze jak wykozystywac rainbow w praktyce winksmiley.jpg
Mam problem z kodem php wyrwanym z kontekstu(tj, bez znacznikow <?php ?>. Czy jedynym sposobem bedzie dodanie ich, przeparsowanie a nastepnie usuniecie tych znaczników? Da sie wymusic parsowanie stringu na funkcji highlight_string" title="Zobacz w manualu php" target="_manual ?
1010
Może wstaw gdzieś na serwer przykład jak to działa...
1010
Nom koloruje bardzo ładnie... W kod nie patrzałem więc nie ocenie na ile on jest optymalny...
nospor
Troszkę odświerzam smile.gif
Brakuje mi tu jeszcze kolorowania [quote] i najlepiej by wylapywal zagniezdzenia. Da sie dorobic? smile.gif

Ogolnie klaska wydaje się sensowna, jestem w fazie testowania.
SHiP
Do cytatów i ogolnie do obslugi BBcode napisałem oddzielna funkcję która filtruje parametry, pilnuje zagnieżdżania itp.
Demo: http://www.srodek.fc.pl/examples/handycode/run_live.php
Biblioteka nazywa sie handyCode, powinien byc gdzieś temat na forum. Ponadto biblioteki zawsze dostepne pod http://srodek.info/download smile.gif
nospor
No faktycznie, dzięki smile.gif

ps: ale dla quote to przydalaby sie jeszcze taka konstrukcja: [quote=KtoNapisal]
SHiP
Huh, rzeczywiscie dziwne ze o tym nie pomyslalem winksmiley.jpg. Nie mam narazie czasu zajmować sie tą biblioteką ;] Rozszerzenie nie powinno stanowić problemu - mini manual http://www.srodek.fc.pl/examples/handycode/manual.html
sniezny_wilk
A co jeśli wpiszę:
Kod
[b][[/b]
Tu jest błąd, klasa powinna klorować znak "[", ale tego nie robi winksmiley.jpg

PS: Jeśli oddziele spacją to zadziała.
SHiP
Niby powinno działac ale wg. mojej smile.gif specyfikacji BBcoda jest to bledny zapis to tak jakby w htmlu uzyc < zamiast &lt;

Poprawna forma
Kod
[b]\[[/b]
sniezny_wilk
Hehe, a wpisz na tym forum ten przykład co podałem.. zadziała smile.gif na innych forach też, może warto, żęby u Ciebie też działało?
Balon
Kod
/\[b\][^\[]\[/b\]/

hm to chyba tak by leciało ? tongue.gif
SHiP
Balon -> obawiam się ze to jest bardziej skomplikowane smile.gif. Bez wczesniejszego filtrowania zmiennej z tekstem chyba sie nie obędzie.

345 linijka
  1. <?php
  2. $code = preg_replace_callback('# [('.$this -> AllowedTags.')(s=?.+?|=.+?)?] ( (?: (?(R) [^[]++ | [^[]*+) | (?R)) *) [/1] #x',Array($this, 'parseTag'), $code);
  3. ?>


Jesli wiecie jak to zoptymalizować winksmiley.jpg aby pomijalo zbedne nawiasy to byłoby fajnie winksmiley.jpg.
nospor
@SHiP masz pewien drobny błąd w kolorowaniu sql. Założmy ze mamy takie zapytanie:
  1. CREATE TABLE `ShoutBox` (
  2. `ID` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `FK_USER` int(11) UNSIGNED DEFAULT NULL,
  4. `NICK` varchar(64) NOT NULL DEFAULT '',
  5. `MESSAGE` text NOT NULL,
  6. `TIME` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  7. PRIMARY KEY (`ID`)
  8. ) ENGINE=MyISAM DEFAULT CHARSET=utf8

i spowodu tego default '' poniższe linijki:
  1. `MESSAGE` text NOT NULL,
  2. `TIME` timestamp NOT NULL DEFAULT
zostaną pokolorowane jako tekst.
Wystarczy tylko, by napisać: default ' ', czyli dać cokolowiek miedzy apostrofu i już bedzie git. No ale nie tędy droga. Pozwolilem sobie nanieść pewne poprawki. W funkcji hl_sql() w preg_replace zamiast '#("|\')(.+?)\\1#', dałem '#("|\')(.*?)\\1#', i już działa git.
Nie powinno to mieć zadnych ujemnych skutków na coś innego?
SHiP
Dzięki, rzeczywiście nie przewidziałem tego... Trzeba będzie Cie do readme dopisac w następnej wersji ^^. Oczywiście to wyrażenie nic nie zmieni - powiązane sa ze sobą jedynie jezyki html, css, js i php. SQL wystepuje jako singiel smile.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.