mercoledì 12 maggio 2010

Blogger: Il dilemma della formattazione del codice

Il primo problema che un programmatore deve affrontare nel momento in cui decide di tenere un blog dove pubblicare le scoperte di ogni giorno è sicuramente quello relativo alla formattazione del codice: senza uno strumento appropriato, è impossibile inserire codice sorgente in una pagina web senza che si perda la formattazione originale.



Su questa pagina: http://www.craftyfella.com/2010/01/syntax-highlighting-with-blogger-engine.html ho trovato un interessante strumento adatto alle mie esigenze. Proviamolo con uno stralcio di codice preso dalla test suite delle API di Facebook per PHP:



Blocco 1

public function testIgnoreDeleteSetCookie()
{
$facebook = new Facebook(array(
'appId' => self::APP_ID,
'secret' => self::SECRET,
'cookie' => true,
));
$cookieName = 'fbs_' . self::APP_ID;
$this->assertFalse(isset($_COOKIE[$cookieName]),
'Expect Cookie to not exist.');
$facebook->setSession(null);
$this->assertFalse(isset($_COOKIE[$cookieName]),
'Expect Cookie to not exist.');


Ottimo, sembra funzionare! Ma come? stando al post linkato sopra, è sufficiente inserire nel template di default di Blogger alcune righe di codice, prima del tag </head>:



Blocco 2

<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/> 
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'></script>

<script language='javascript'>
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf';
SyntaxHighlighter.all();
</script>


Come potete vedere, oltre a mostrare il codice in modo molto più leggibile, in alto a destra vi vengono anche offerte alcune utili feature extra: un pulsante che permette di copiare il codice direttamente, senza doverlo selezionare a mano dalla pagina (l'effetto è ottenuto tramite uno script flash, quel clipboard.swf che viene richiamato nella penultima riga del blocco 2. Un altro pulsante vi permette di aprire una finestra con il codice senza formattazione, un terzo, vi permette di stampare solo lo spezzone di codice. Piuttosto utile, che ve ne pare? Per ulteriori informazioni, visitate il sito ufficiale di SyntaxHighlighter: http://alexgorbatchev.com/wiki/SyntaxHighlighter



Un'ultimo accorgimento: se nel codice che volete inserire sono presenti caratteri come il segno di minore o di maggiore, ci sono buone probabilità che non verranno mostrati nella pagina. Come fare in questo caso? Ci sono varie possibilità, una è utilizzare un servizio come http://www.opinionatedgeek.com/dotnet/tools/htmlencode/Encode.aspx, gli passate il vostro codice e ve ne restituisce una versione in cui tutti i caratteri che hanno corrispondenti entità in html sono stati sostituiti. Un'altra, la mia favorita: potete utilizzare php direttamente da riga di comando, dopo aver salvato il codice che volete mostrare in un file, ad esempio code.tmp:



Blocco 3

cat code.tmp | 
php -r 'while ($line = fgets(STDIN))$output .= htmlentities($line, ENT_NOQUOTES, "UTF-8"); echo $output;'

Nessun commento:

Posta un commento