NIH v praxi – syntax highlighter pro WordPress

Když jsem nedávno psal o syndromu Not Invented Here, netušil jsem, že tak brzo pocítím “zářný” příklad na vlastní kůži. Potřeboval jsem pro tento blog sehnat syntax highlighter, na který jsem měl skutečně velmi základní požadavky:

  1. V bloku kódu obarvit klíčová slova
  2. Nějak rozumně spolupracovat s Windows Live Writerem

Nic dalšího jsem nepotřeboval. K počítači jsem sedal v jedenáct večer s tím, že do půl hodiny mám hotovo a jdu spát. Používám přece WordPress, na kterém běží tuna vývojářských blogů a syntax highlighting je dávno vyřešená věc.

I zadal jsem do Googlu první dotaz, co mě napadl, a dostal se na stránku Posting Source Code na webu wordpress.com (služba pohánějící miliony blogů). Perfektní, říkal jsem si, kód půjde zadat pomocí syntaxe [sourcecode language="xyz"], existuje pro to plugin do Live Writeru, a když se jedná o “oficiální” řešení na wordpress.com, určitě s tím nebude žádný problém.

Nainstaloval jsem tedy plugin SyntaxHighlighter Evolved, který je odkazován z článku, a celý blog se mi rozes..ypal. Místo zvýrazněné syntaxe se zobrazovaly nesmyslné HTML značky, útržek kódu obsahující otevírací PHP značku zadaný přes Live Writer se do databáze uložil tak divně, že po dalším načtení se různé kusy kódu ztratily, atd.

Bylo půl dvanácté a já začínal tušit, že noc teprve začíná.

Následovalo zběsilé hledání chyb, při kterém se ukázalo, že si SyntaxHighlighter Evolved nerozumí s pluginem pro podporu Markdownu v komentářích, že plugin pro Live Writer obsahuje svou samostatnou chybu, která speciální HTML znaky pošle špatně zakódované a ty se po roundtripu do databáze ztratí atd. A že i když se to všechno jakž takž rozchodí, tak používaná JavaScriptová knihovna (SyntaxHighlighter od Alexe Gorbatcheva) má pro mé potřeby dost nepoužitelný výstup (chci jen obarvit klíčová slova, ne definovat background všem řádkům, přidat ke kódu toolbar, čísla řádků a kde co).

Byla jedna.

V tuto chvíli byl čas rezignovat na oficiální plugin a kouknout se po alternativách. Nejdřív jsem zkusil lovit mezi desítkami pluginů pro zvýrazňování syntaxe v oficiálním repozitáři na wordpress.org, ale to bylo dost zoufalé.

wordpress-syntax-highlighting-plugins

Nastal tedy čas si zanadávat, trochu se uklidnit a podívat se na problém znovu.

Základem bylo zvolit, jakou knihovnou vlastně ve výsledku kód obarvovat. Měl jsem jasno, že to má dělat JavaScript (serverové obarvování má IMO víc nevýhod než výhod a Gisty mají zase nevýhodu, že se nezobrazí v GReaderu), a jako nejméně intruzivní a relativně nejvíc rozšířená mi přišla knihovna Prettify od Googlu (mimochodem, krásné porovnání JS knihoven je zde). Používá ji Stack Overflow, na tomto webu plugin pro komentáře a navíc má výhodu, že není potřeba určovat jazyk kódu – Prettify nějak umí obarvit cokoliv, ačkoliv přesně nechápu, jak to vlastně funguje. Kvůli jednoduchosti syntaxe (v podstatě se jen elementu

 přidá class="prettyprint") je zásadně jednodušší (a funkční) i plugin pro Live Writer a rovněž přidání do stránky je snadné.

Byly dvě ráno.

Cítil jsem se jako vítěz, měl jsem jasno v JavaScriptové knihovně a pro její přidání jsem na wordpress.org našel několik pětihvězdičkových pluginů, takže no problem. Ale asi jsem nepoučitelný. Pluginy jsem vyzkoušel čtyři a dva z nich generovaly PHP warningy, jeden kolem kódu přidával nějaký nesmyslný rámeček a poslední nefungoval vůbec. Zkoušet další jsem už neměl nervy.

Bylo půl třetí a měl jsem toho dost.

Otevřel jsem editor, v druhém okně dokumentaci Prettify a WordPressu a za dvacet minut jsem měl funkční plugin pro zvýrazňování syntaxe.

Zastřelte mě, pokud ho někdy budu chtít vystavit na wordpress.org.