![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 19.08.2004 Skąd: Pruszków Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Wraz z moim znajomym piszemy skrypt odpowiedzialny za kolorowanie skladni w artykulach i forum w naszym serwisie. Jak dotad wszystko nam szlo jak po masle, ale natknelismy sie na pewien problem, z ktorym od pewnego juz czasu nie mozemy dac sobie sami rady. Problem polega na tym, ze jak kolorujemy slowa kluczowe (dla przykladu niech to bedzie int z C) to slowa te nam sie koloruja, ale niestety rowniez wtedy, jesli slowo to jest lancuchem znakow. Mamy powiedzmy taki oto prosty kod napisany w C: Kod #include <stdio.h> int main() { printf("Hello int World \n"); return 0; } i teraz powiedzmy, ze chcemy pokolorowac wszystkie int na niebiesko, wiec:
I teraz pytanie. Jak powinno wygladac wyrazenie regularne, aby nie kolorowalo tekstu w cudzyslowach? Probowalem tak:
Niestety tez nie dziala. Juz nie mam pomyslu jak mozna sobie z tym poradzic. Bede wdzieczny za wszelkie informacje. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Wydaje mi się, zę w takim przypadku najlepiej by było zobaczyć jak robią to inni.
Niestety - problem nie jest łatwy, i nie ma jednego dobrego rozwiązania. Te które widziałem napisane w php nie zapewniają jednak 100% skteczności (jak choćby kolorowanie SQL na tym forum - które jest tylko delikatnie zmodyfikowanym orginalnym mechanizmem z IPB) Widziałe natomiast niedawno skrypt, który kolorował kod dokłądnie tak, jak by "mi się to podobało" Niestety - jest napisany w JS... Mimo to sądzę, że przestudiowanie jesgo konstrukcji może przynieść Wam spory pożytek http://gosu.pl/dhtml/JavascriptDecoder.html ps. Brawo, cagrET -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 90 Pomógł: 0 Dołączył: 3.04.2003 Skąd: Opole Ostrzeżenie: (0%) ![]() ![]() |
W tym dekoderze kolorowanie skladni dziala niestety tylko na Mozilli. Na IE nie dziala poniewaz string zawierajacy znak nowej lini "\n" ktory został wygenerowany przez javascript nie działa w tagach PRE, nie mam pojęcia czemu.
Jak znajdę trochę czasu to spróbuję napisać w php kolorowanie składni dla C/SQL i może dołącze mały tutorial (niestety pewnie po angielsku). W sumie to nie jest trudne, jak się idzie na skróty tak jak ja to zrobiłem, niezbyt profejonalnie, ale spełnia swoje założenia, najważniejsze że działa ! Już słyszałem od paru osób że jedynym słusznym rozwiązaniem tego problemu jest napisanie parsera, ktory zajmie z minimum 200 KB, a napisanie go zajmie z kilka miechów, no thx ![]() W sumie to kolorowanie tej skladni C mozna by napisac w javascript, a później mały skrypt który pobiera na stronie wszystkie elementy PRE z klasa np "clanguage" i je koloruje. Kod <pre class="clanguage">
#include <stdio.h> int main() { printf("Hello int World \n"); return 0; } </pre> -------------------- code.gosu.pl
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 19.08.2004 Skąd: Pruszków Ostrzeżenie: (0%) ![]() ![]() |
Postanowilem jeszcze raz poszukac na googlach i znalazlem kilka rozwiazan. Idealnym (no prawie) zostal projekt Geshi - skrypt w php do kolorowania skladni.
http://qbnz.com/highlighter/ Mozliwosci: - dosc dobrze koloruje, sa drobne bledy, ale mozna je sobie odpusic - projekt jest wciaz rozwijany - numerowanie linii kodu - latwa rozbudowa parsera (dodanie "nowych jezykow") - latwo mozna modyfikowac style w kolorowaniu (te proponowane przez tworcow maja brzydkie kolorki, ale to tylko kwestia gustu) Jedyna wada jaka znalazlem jest to, ze nie zwraca nam lancucha z pokolorowanym tekstem, tylko odrazu wyswietla. Naszczescie mozna sie z tym uporac za pomoca manipulacji buforem. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Bardzo ciekawy projekt. Jestem pod wrażeniem. Załuje tylko, że powstał dopiero teraz (first release: 2004-07-17 05:00) ponieważ poświęciłem kiedyś sporo czasu na znalezienie czegoś takiego w php (w innych językach oczywiście były odpowiednie moduły) i niestety - nic z tego nie wyszło.
A teraz juyż chyba jest nawet odpowiedni mod dla bb, wykorzystujący ten system kolorowania. nono... -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 0 Dołączył: 22.07.2004 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(cagrET @ 2004-08-20 02:32:50) Już słyszałem od paru osób że jedynym słusznym rozwiązaniem tego problemu jest napisanie parsera, ktory zajmie z minimum 200 KB, a napisanie go zajmie z kilka miechów, no thx ![]() To bardzo ciekawe. Do kolorowania składni wystarczy lekser, a nie parser. Napisanie go wcale nie zajmuje pare miesięcy. Widze, że ostatnio ten temat dość często poruszany jest na forum. Proponuje zatem na początek zainteresować się programem GNU Enscript Może kiedyś zmusze się do napisania czegoś, bo ten problem również i mnie troche interesuje. Teraz podam przykład prostego leksera. Nie daje żadnej gwarancji, że działa. Jest mocno uproszczony. To tylko przykład jak napisać lekser.
Ten post edytował Parti 20.08.2004, 13:35:16 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 90 Pomógł: 0 Dołączył: 3.04.2003 Skąd: Opole Ostrzeżenie: (0%) ![]() ![]() |
Cytat To bardzo ciekawe. Do kolorowania składni wystarczy lekser, a nie parser. Możliwe, miałem też na myśli ten Dekoder, czyli formatowanie kodu. Niestety jestem zielony w tej dziedzinie. Btw. masz może jakieś materiały / linki do artykułów na ten temat ? (leksery, parsery).
-------------------- code.gosu.pl
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 0 Dołączył: 22.07.2004 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(cagrET @ 2004-08-20 15:55:14) Btw. masz może jakieś materiały / linki do artykułów na ten temat ? (leksery, parsery). Polecam książke: Aho, Sethi, Ullman "Kompilatory" (jakiś czas temu wydana po Polsku) tzw. Dragon Book. Manuale do Flexa (automatyczny generator lekserów) oraz Bisona (automatyczny generator parserów). Jeszcze mi sie przypomniało. Na pierwszym roku informatyki na przedmiocie programowanie można poznać podstawy pisania kompilatorów. Tutaj skrypt do tego przedmiotu. Ten post edytował Parti 20.08.2004, 15:10:58 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 12.08.2025 - 23:58 |