Autor Zpráva
dtr
Profil *
Zdravím,
sháním nějaký syntax highlighter, který by zvládal určitě PHP, k tomu nejlépe ještě html, js a případně i nějaké další jazyky navíc :) Podmínkou je, aby přebíral jako parametr string, nikoliv celý soubor a aby vracel VALIDNÍ xhtml 1.0 strict kód. Tedy žádné inline styly.

Zatím jsem našel GeSHi, PEARovský highlighter, chip a samozřejmě jsem zkusil PHP funkci highlight_source, ale ani jeden z nich nesplňuje zmiňované požadavky, především tedy nepoužívání inline stylů.

Dal jsem se tedy do psaní (ufff) vlastního highlighteru a narazil jsem na první problém s regulárním výrazem.
Snažím se napsat regulární výrazy pro vyžrání zakomentovaného textu, ale ne uplně se mi to daří.

1) Neumím napsat regexp pro tento typ komentáře: // nějaký komentář
-- problém tu vzníká s koncem řádky, který nevim jak do výrazu dostat. \n nefunguje a [[:space:]] vezme i mezery apod., což je nežádoucí

2) S komentářem typu /* komentář */ by to mělo být jednoduší, problém ale je, že mu jako parametr předávám k přechroupání string, který již obsahuje ostylovaný text z dřívějšího highlightování, tedy například: <span class="h_variable">$some_var</span> = 10;
Tento text to sice kompletně správně obalí tagem <span class="h_comment"></span>, ale uvnitř něj už je text (span) s classou pro označení proměnné a ta se zobrazí modře, i když by samozřejmě, jakožto zakomentovaný text neměla.

Problém tedy tkví v tom, že potřebuji nějakým regulárem odstranit veškeré <span class="(.*)"> a </span> uvnitř značek pro zakomentování /* a */.
Jenže se mi na to nedaří napsat správný regulární výraz. Zkoušel jsem různé varianty tohoto:
 $text = preg_replace('/(\/\*.*)(<span class=".*">)(.*)(<\/span>)(.*\*\/)/Us', "\\1\\3\\5", $text ); 

ale neúspěšně. Jestli někdo dokážete odhadnout, co mám v tomto výrazu špatně, byl bych vděčný za radu. Určitě to bude nějaká trivka, já na to ale za těch posledních x hodin ne a ne přijít :|

Nebo uplně nejlepší by bylo, kdybyste znali nějaký již hotový syntax highlighter, který splňuje výše uvedené požadavky (stačilo by snad pouze pro php, důležitá je validita).
Díky moc, už za dočtení tohoto textu až do konce :)
Johnik
Profil
Použij preg_replace_callback.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: