GeSHi - obarvěte si svoje zdrojáky
Včera v noci, poté, co jedna milá kamarádka odešla domů k rodičům (musí zítra do školy), jsem se náhodou dostal ve dvě hodiny ráno na web GeSHi. GeSHi je prima věc, barevná. GeSHi umí obarvit automaticky Vaše zdrojáky v actionscript, ada, apache, asm, asp, bash, c, caddcl, cadlisp, cpp, css, delphi, geshi, html4strict, java, javascript, lisp, lua, nsis, oobas, pascal, perl, php-brief, php, python, qbasic, sql, vb, visualfoxpro, xml.
A ona GeSHi nejenom barví, ale rovněž, pokud ji k tomu mírně přinutíte, udělá třeba pro PHP funkce automaticky odkazy na manuál PHP. Dokonalé. Stejně se dá přinutit i k odkazům na HTML či CSS.
Použití je potom triviálně jednoduché, místo <pre>
zadáte <pre language>
.
Napsal jsem si k tomu samozřejmě plugin pro BLOG:CMS, pod názvem NP_GeSHi, funguje dvěma způsoby, buď při ukládání článku (parse-and-save), nebo online (realtime), používám přitom tu nej-geniálnější funkci PHP, tedy preg_replace_callback
.
include('geshi.php'); class NP_Geshi extends NucleusPlugin { function parseString(&$content) { $keys=array('body','more'); foreach ($keys as $key) $content[$key] = preg_replace_callback ( '/<pre\s(.*?)>(.*?)<\/pre>/si', array(&$this,'replaceString'), $content[$key] ); } function replaceString($r){ global $DIR_PLUGINS; $geshi = new GeSHi($r[2],$r[1],$DIR_PLUGINS."geshi/"); $geshi->enable_classes(); $geshi->set_header_type(GESHI_HEADER_PRE); $geshi->set_overall_class('code'); $geshi->set_link_target($this->_linktarget); return $geshi->parse_code(); } } // NP_Geshi
Plus je k tomu samozřejmě potřeba doplnit něco CSS, třeba takto:
/* syntax highlighting code */ .code .br0 { color: #66CC66; } .code .co1 { color: #808080; font-style: italic; } .code .co2 { color: #808080; font-style: italic; } .code .comulti { color: #808080; font-style: italic; } .code .es0 { color: #000099; font-weight: bold; } .code .kw1 { color: #B1B100; } .code .kw2 { color: #000000; font-weight: bold; } .code .kw3 { color: #000066; } .code .kw4 { color: #993333; } .code .kw5 { color: #0000FF; } .code .me0 { color: #006600; } .code .nu0 { color: #CC66CC; } .code .re0 { color: #0000FF; } .code .re1 { color: #0000FF; } .code .re2 { color: #0000FF; } .code .re4 { color: #009999; } .code .sc0 { color: #00BBDD; } .code .sc1 { color: #DDBB00; } .code .sc2 { color: #009900; } .code .st0 { color: #FF0000; }
Alternatíva http://hvge.sk/scripts/fshl/
[1] při vší úctě, fshl nemá ani řádek dokumentace, prostě nic, ani popis, které jazyky podporuje, to se s GeSHi nemůže srovnávat..
[2] Podporuje všetky jazyky, ktorých syntax si tam človek dorobí. HTML, PHP, CSS tam už je.
Dokumentácia chýba, to je pravda, ale porovnávať sa to však dá lebo to má rovnaký účel a preto som to sem aj napísal. Nehovorím, že je to lepšie. Netestoval som.
[2] Pri všetkej úcte, geshi je snáď najpomalší highlighter s akým som sa doteraz stretol. Môj FSHL je pri PHP asi 8x rýchlejší, pri HTML dokonca 10..12x, čo už je pomerne solídny rozdiel. A to ani nehovorím o tom, že FSHL dokáže vnárať gramatiky do seba (PHP v HTML, PHP v CSS v HTML...) a pri popise gramatík sa neobmedzuje iba na vyhľadávanie kľúčových slov, stringov a komentárov (tak, ako to robí väčšina highlighterov).
Absencia dokumentácie je naozaj strašná vec. Ale pri tak jednoduchom API, aké má väčšina highlighterov, je pochopenie takmer iba vecou pozorného prečítania veľavravného examplu... Občasná diskusia (skôr monológ:) okolo FSHL sa vedie na týchto diskusných fórach...
[4] díval jsem se na to, a třeba definice CSS stylů ve FSHL zvlášť pro CSS, HTML a PHP je velice nepraktická věc, proč tam není jeden společný styl?
Jinak, ano, GeSHi je pomalé, ale pokud stránky generuje staticky, tak mi to ani trochu nevadí... Má zase ale lepší koncepci pro API a podporuje přes 20 jazyků.
[5] No, spisal som strucnu (SK dokumentaciu, vratane zoznamu aktualne podporovanych jazykov.
CSS styl je podla mna vecou autora stranky, preto je uplne zbytocne poskytovat mu tak "bohate" API ako ma napr. GeSHi. Dovolim si tvrdit, ze linkovat jeden staticky CSS subor je ovela lepsie riesenie, ako ho generovat dynamicky. Takisto si neviem predstavit, ako by ste riesili viacjazykovy highlighter, bez definovania CSS stylov pre kazdy jazyk zvlast.
Hmm.. osobne nepovazujem 30 zbytocnych funkcii za lepsiu koncepciu API. Ale to len tak na okraj. Pevne verim, ze az raz bude fshl obsahovat 30 jazykov, rad po nom siahnete...
[6] dobrá a rychlá práce, jdu se na to podívat :-)
No, možná jsem jen blbej ale nějak si s tím tvým kódem nevím rady. Nevím jak ho použít. Nemohl bys mi napsat nějaký příklad následného použítí oněch fcí?
Ať to zkouším jak chci, buď to na mne plive chyby nebo to vrátí prázdnou proměnnou :/ Určitě někde dělám něco špatně...