Zoom Icon

Help:SyntaxHighlighting

From UIC

Contents

Syntax Highlighting

Il wiki e' in grado di evidenziare automaticamente le parole chiavi, funzioni e argomenti dei seguenti linguaggi:

  • actionscript
  • ada
  • apache
  • applescript
  • asm
  • asp
  • autoit
  • bash
  • blitzbasic
  • bnf
  • c
  • caddcl
  • cadlisp
  • cfdg
  • cfm
  • cpp-qt
  • cpp
  • csharp
  • css-gen.cfg
  • css
  • c_mac
  • d
  • delphi
  • diff
  • div
  • dos
  • eiffel
  • fortran
  • freebasic
  • gml
  • groovy
  • html4strict
  • idl
  • ini
  • inno
  • io
  • java
  • java5
  • javascript
  • latex
  • lisp
  • lua
  • matlab
  • mirc
  • mpasm
  • mysql
  • nsis
  • objc
  • ocaml-brief
  • ocaml
  • oobas
  • oracle8
  • pascal
  • perl
  • php-brief
  • php
  • plsql
  • python
  • qbasic
  • reg

Il syntax highlighter e' semplicissimo da utilizzare, basta includere nel tag <code> il parametro: lang="linguaggio", dove linguaggio e' uno di quelli elencati poco sopra. Facciamo un esempio, volete effettuare l'highlight di un listato in assembler x86 (o x86_64), bastera' usare il tag <code> in questo modo:

  • <code lang="asm">

facciamo un test:

mov eax,lParam ; I commenti verranno evidenziati in automatico
and eax,0FFFFh
mov hitpoint.x,eax

Stessa cosa per altri linguaggi, proviamo con C usando il tag in questo modo:

  • <code lang="C">
// Benvenuto nel sorgente della funzione strncmp()
#include <string.h>
int strncmp(s1, s2, n)
        register const char *s1, *s2;
        register size_t n;
{

        if (n == 0)
                printf("aaa");
                return (0);
        do {
                if (*s1 != *s2++)
                        return (*(const unsigned char *)s1 -
                                *(const unsigned char *)(s2 - 1));
                if (*s1++ == 0)
                        break;
        } while (--n != 0);
        return (0);
}

Lo stesso discorso vale per ogni altro linguaggio tra quelli elencati qui sopra.

Sintassi avanzata del tag

Numero di riga

Grazie al syntax highlighter e' possibile anche inserire il numero di riga di fianco al sorgente, basta aggiungere il parametro line=GESHI_NORMAL_LINE_NUMBERS al tag, facciamo un esempio utilizzando:

  • <code lang="asm" line=GESHI_NORMAL_LINE_NUMBERS>
  1. ; Le righe vengono numerate automaticamente
  2. mov eax,lParam
  3. and eax,0FFFFh
  4. mov hitpoint.x,eax

E' possibile indicare al wiki da quale numero iniziare il conteggio, questa feature e' utile nel caso si analizzi in due momenti un unico snapshot di codice, per iniziare il conto dal numero 10 utilizzeremo il tag in questo modo:

  • <code lang="asm" line=GESHI_NORMAL_LINE_NUMBERS start=10>
  1. ; Le righe iniziano il conteggio da 10
  2. mov eax,lParam
  3. and eax,0FFFFh
  4. mov hitpoint.x,eax

Strict mode

Alcuni linguaggi interpretati, come PHP, vengono eseguiti soltanto se si trovano all'interno dei tag <? ?>, ma in mezzo al codice PHP puo' trovarsi senza problemi anche dell'HTML e questo confonde la maggior parte degli highlighter, cosa fare dunque se il vostro codice non viene evidenziato correttamente? Bastera' dichiarare il parametro strict nel tag <code></code>, ad esempio cosi':

  • <code lang="asm" strict>

E dal momento che un'immagine vale piu' di mille parole, facciamo una prova, _senza_ dichiarare il tag strict:

<img src="<?php echo rand(1, 100) ?>" />

Come vedete, il codice PHP non viene affatto evidenziato, anzi appare come una dichiarazione di stringa, proviamo quindi a dichiarare il parametro strict:

<img src="<?php echo rand(1, 100) ?>" />

Ecco che il codice viene evidenziato in maniera corretta.

Overflow

Puo' capitare che il codice vada oltre i margini della pagina, sarebbe buona norma correggere il listato per evitare che questo accada... In fondo basta andare a capo. Ma se avete una valida ragione per non farlo... Non preoccupatevi, verra' generato automaticamente uno scroll per consentirvi di visualizzare correttamente il listato. Ricordate che il codice ordinato ed entro i margini si legge molto meglio, percio' correggete sempre i vostri listati nel caso di overflow non voluti.

// Una riga di questo sorgente va oltre i margini della pagina
#include <string.h>
int strncmp(s1, s2, n)
        register const char *s1, *s2;
        register size_t n;
{

        if (n == 0)
                printf("aaa");
                return (0);
        do {
                if (*s1 != *s2++)
                        return   ( *(const   unsigned   char *)s1   -   *(const   unsigned char   *)(s2   -   1));
                if (*s1++ == 0)
                        break;
        } while (--n != 0);
        return (0);
}

Stile personalizzato

Il tag <code> è molto flessibile, potete specificare al suo interno tutti i parametri utilizzati dallo standard CSSCascading Style Sheets: i così detti fogli di stile, servono a personalizzare il layout senza intervenire in maniera diretta sul codice html della pagina, ad esempio facendo così:

  • <code style="background-color: #def8d4; font-weight: bold; border-style: solid;">Codice....</code>
Questo box ha: background, font e bordi pesonalizzati!!!

Linguaggio non supportato

Cosa accade se il linguaggio che state inserendo non e' supportato? Niente di particolare, semplicemente non verra' evidenziato! In questo caso NON specificate il parametro lang, ed inserite il codice come fate di solito, se avete bisogno di evidenziare qualcosa, ad esempio dei commenti, e' presente il tag <comment></comment> che vi consente di colorare una stringa, e va usato cosi':

<code>
pop ciccio->borsello <comment>// Questo commento verra' evidenziato</comment>
save bubba->geppetto.cucchiaio
print "mucca"
</code>

Facciamo il solito test:

pop ciccio->borsello // Questo commento verra' evidenziato
save bubba->geppetto.cucchiaio
print "mucca"

Se avete personalizzato la vostra toolbar, allora avrete anche un comodo pulsante per inserire automaticamente questo tag, si trova tra il pulsante "code" ed il pulsante "<br />". Non potrete pero' far uso di tag html perche' questi vengono encodati proprio dal tag <code> nelle rispettive html entities, se volete usare dei colori, potete semplicemente utilizzare il tag PRE, ma questo e' spiegato a dovere nella guida per gli editori.