Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyrazenia Regularne, kolorowanie skladni za pomoca php
y3ti
post
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:

  1. <?php 
  2.  
  3.  $zrodlo = join('', file('zrodlo.c'));
  4.  $zrodlo = htmlspecialchars( $zrodlo );
  5.  
  6.  $zrodlo = preg_replace('/bintb/', '<span style=\"color: blue\">int</span>', $zrodlo );
  7.  
  8. ?>


I teraz pytanie. Jak powinno wygladac wyrazenie regularne, aby nie kolorowalo tekstu w cudzyslowach?

Probowalem tak:

  1. <?php
  2.  
  3.  $zrodlo = preg_replace('/([^\"]*?)bintb(.*[^\"])/', '1<span style=\"color:blue\">int</span>2', $zrodlo );
  4.  
  5. ?>


Niestety tez nie dziala. Juz nie mam pomyslu jak mozna sobie z tym poradzic.

Bede wdzieczny za wszelkie informacje.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
cagrET
post
Post #2





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 winksmiley.jpg

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
Go to the top of the page
+Quote Post

Posty w temacie


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 Aktualny czas: 21.08.2025 - 12:32