ďťż

[JS] Regexp z pominięciem stringów

       

Podstrony


telcocafe

Porywam się na skrypt do kolorowania składni w Javascript. Na początku utworzę uniwersalną bazę słów kluczowych. Jeśli będą konflikty, wtedy osobne pliki definicji dla każdego obsługiwanego języka.

Przykład kodu do sformatowania:function funkcja($function) { if($function == 'instanceof integer this') ... }
Na pewno nie można kolorować słów kluczowych w ciągach znaków, np. 'instanceof integer this'.

Za pomocą wyrażeń regularnych mogę kolorować np. this na niebiesko. Jak pominąć stringi?



hmm może poprostu styl dla stringa nakładać na końcu, tak, żeby anulował poprzednie? Ewentualnie kolorować partiami pomijając stringi.
Użytkownik someone edytował ten post 19 wrzesień 2009, 14:05
Raczej nie da się anulować. Trzeba po prostu ominąć stringi. :)

Teraz zastanawiam się, czy nie lepiej jednak kolorować po stronie serwera.

Załóżmy, że kolorowanie odbywa się po stronie JS. Można odciążyć serwer, a użytkownik ma większy wpływ na wygląd kodu. Mniej danych do przesłania, bo biblioteka .js jest pobierana tylko raz. Aby wstawić do artykułu kod HTML, redaktor strony musi zamienić < i > na encje. Podobnie w innych językach, choć jest mniej zbędnej roboty.

W przypadku kolorowania po stronie PHP da się zamienić <, >, & na encje wewnątrz <pre> lub <code>, ale nigdy nie wiadomo, czy kod nie znajdzie się w innym znaczniku, np. <div>.


Raczej nie da się anulować. Trzeba po prostu ominąć stringi.
Rozumiem, że chcesz pokolorowany kod do wyświetlenia na stronie, więc zależy jak zaprojektujesz CSS kolorujący załóżmy że zrobisz sobie klasę .keyword{color: blue}
którą stosujesz np. w formie
<span class="keyword">this</span>
do tego jeszcze
.string, .string .keyword {color: grey}
i nakładasz na wszystkie stringi w tekście
<span class="string"></span>
co w rezultacie da np.
<span class="string"><span class="keyword">this</span> is string</span>
a tekst będzie szary.

Chyba, że chodzi Ci o coś innego :)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.