Aiuto:Syntax highlighting

Abbreviazioni
Aiuto:Source

L'estensione SyntaxHighlight GeSHi permette di effettuare l'evidenziazione della sintassi per le porzioni di codice sorgente inserite nelle voci di it.wiki.

Nonostante il nome, l'estensione non usa la libreria GeSHi, ma dal giugno 2015 utilizza Pygments.

La sintassi da usare è

<syntaxhighlight lang="linguaggio">codice sorgente</syntaxhighlight>

Il tag <source> è deprecato e inserisce la pagina nella categoria automatica di errore Pagine che utilizzano tag source deprecati.

Esempio modifica

Scrivendo

<syntaxhighlight lang="php">
<?php
 // esempio
 $num = 10;
 echo "Hello world";
?>
</syntaxhighlight>

si ottiene

<?php
 // esempio
 $num = 10;
 echo "Hello world";
?>

Linguaggi supportati modifica

Di seguito sono elencati i principali valori che è possibile attribuire al parametro lang.


Valore Linguaggio
6502acme MOS 6502 (6510) ACME Cross Assembler
6502kickass MOS 6502 (6510) Kick Assembler
6502tasm MOS 6502 (6510) TASM/64TASS
68000devpac Motorola 68000 - HiSoft Devpac ST 2 Assembler
abap ABAP
actionscript ActionScript
actionscript3 ActionScript 3
ada Ada
apache Apache Configuration
applescript AppleScript
apt_sources Apt sources
arm ARM Assembler
asm Assembly
asp Active Server Pages (ASP)
asymptote Asymptote
autohotkey AutoHotkey
autoit AutoIt
awk AWK
bascomavr BASCOM AVR
bash Bash
basic4gl Basic4GL
bf Brainfuck
blitzbasic Blitz BASIC
bnf Backus-Naur Form
boo Boo
c C
c_loadrunner C Loadrunner
c_mac C (Mac)
caddcl AutoCAD DCL
cadlisp AutoLISP
cfdg CFDG
cfm ColdFusion Markup Language
chaiscript ChaiScript
clojure Clojure
cmake CMake
cobol COBOL
coffeescript CoffeeScript
cpp-qt C++ (Qt toolkit)
cpp C++
csh C shell
csharp C#
css Cascading Style Sheets (CSS)
d D
dart Dart
dcl Data Control Language
dcpu16 DCPU-16
delphi Delphi
diff diff
div DIV
dos DOS batch file
ebnf Extended Backus–Naur Form
ecmascript ECMAScript
erlang Erlang
eiffel Eiffel
euphoria Euphoria
fortran Fortran
freebasic FreeBASIC
fsharp F Sharp
gambas Gambas
genero Genero
gettext GNU internationalization (i18n) library
gettext gettext
glsl OpenGL Shading Language (GLSL)
gnuplot gnuplot
go Go
groovy Groovy
gwbasic GW-BASIC
haskell Haskell
Haxe Haxe
html4strict HTML
html5 HTML5
idl Uno IDL
ini INI
io Io
java Java
java5 Java(TM) 2 Platform Standard Edition 5.0
javascript JavaScript
jquery JQuery
kotlin Kotlin
ksh Korn shell
latex LaTeX
lisp Lisp
llvm LLVM
locobasic Locomotive BASIC
logtalk Logtalk
lua Lua
m68k Motorola 68000 Assembler
make make
mapbasic MapBasic
matlab MATLAB M
mirc mIRC scripting language
mmix MMIX
modula2 Modula-2
mpasm Microchip Assembler
mxml MXML
mysql MySQL
netrexx NetRexx
newlisp NewLISP
nsis Nullsoft Scriptable Install System (NSIS)
oberon2 Oberon-2
objc Objective-C
ocaml-brief OCaml
ocaml OCaml
octave Octave
oobas OpenOffice.org Basic
oorexx Object REXX
oracle8 Oracle 8 SQL
oracle11 Oracle 11 SQL
pascal Pascal
perlpl Perl
perl6 / pl6 Perl 6
php-brief PHP
php PHP
pic16 PIC assembly language
pike Pike
plsql PL/SQL
postgresql PostgreSQL
postscript PostScript
povray Persistence of Vision Raytracer
powershell Windows PowerShell
progress OpenEdge Advanced Business Language
prolog Prolog
properties Properties file
purebasic PureBasic
pycon Python
qbasic QBasic/QuickBASIC
rails Rails
rebol Rebol
reg Windows Registry
rexx Rexx
rpmspec RPM Spec files
rsplus R
ruby Ruby
scala Scala
scheme Scheme
sh / shell / shell-session Shell script (POSIX)
sdlbasic SdlBasic
smalltalk Smalltalk
smarty Smarty
spark SPARK
sparql SPARQL
sql SQL
systemverilog SystemVerilog
tcsh Tcsh
tcl Tcl
teraterm Tera Term
text Plain text
thinbasic thinBasic
ts TypeScript
tsql Transact-SQL
typoscript TypoScript
unicon Unicon
upc Unified Parallel C
urbi URBI
vala Vala
vb Visual Basic
vbnet Visual Basic .NET
verilog Verilog
vhdl VHDL
vim Vimscript
visualfoxpro Visual FoxPro
visualprolog Visual Prolog
winbatch Winbatch
xml XML
yaml YAML
xpp X++
z80 ZiLOG Z80 Assembler
zxbasic ZXBasic

Parametri modifica

enclose modifica

Normalmente <syntaxhighlight> racchiude il codice nei tag <pre> e l'effetto è un riquadro attorno al codice stesso. Se non si vuole questo effetto è possibile usare il parametro enclose per racchiudere il codice nei tag <div>. Nota: il parametro line forza l'uso della modalità <div>. Vediamo come si usa, scrivendo

<syntaxhighlight lang="php" enclose=div >
<?php
 // esempio
 $num = 10;
 echo "Hello world";
?>
</syntaxhighlight>

si ottiene:

<?php
 // esempio
 $num = 10;
 echo "Hello world";
?>

line modifica

Specificando il parametro line è possibile numerare automaticamente le righe, ad esempio scrivendo

<syntaxhighlight lang="php" line>
<?php
 // esempio
 $num = 10;
 echo "Hello world";
?>
</syntaxhighlight>

si ottiene

<?php
 // esempio
 $num = 10;
 echo "Hello world";
?>

start modifica

È anche possibile far iniziare la numerazione da un valore prestabilito (solo valori interi e maggiori di >0) aggiungendo il parametro start = X a line. Ad esempio:

<syntaxhighlight lang="php" line start="8">
<?php
 // esempio
 $num = 10;
 echo "Hello world";
?>
</syntaxhighlight>

si ottiene

<?php
 // esempio
 $num = 10;
 echo "Hello world";
?>

strict modifica

In alcuni casi si possono inserire porzioni di codice di un linguaggio di programmazione all'interno di un altro linguaggio; come, ad esempio, il php all'interno di una pagina html. In questi casi l'evidenziazione può risultare errata, aggiungendo il parametro strict si dovrebbe risolvere la cosa. Vediamo le differenze. Scrivendo

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

otteniamo

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

usando il parametro strict

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

si vede in modo corretto

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

Se invece cerchiamo l'evidenziazione dell'html

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

otteniamo

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

highlight modifica

Con il parametro highlight è possibile evidenziare una o più righe. Per evidenziare una sola riga occorre specificarne il numero nel parametro highlight. Nel seguente esempio viene evidenziata la riga numero 4:

<syntaxhighlight lang="php" highlight="4">
<?php
 // esempio
 $num = 10;
 echo "Hello world";
?>
</syntaxhighlight>

risultato:

<?php
 // esempio
 $num = 10;
 echo "Hello world";
?>

Per evidenziare più righe separate basta specificare i numeri nel parametro highlight separati da una virgola. Nel seguente esempio vengono evidenziate le righe numero 2 e 4:

<syntaxhighlight lang="php" highlight="2,4">
<?php
 // esempio
 $num = 10;
 echo "Hello world";
?>
</syntaxhighlight>

risultato:

<?php
 // esempio
 $num = 10;
 echo "Hello world";
?>

È anche possibile evidenziare una serie di righe specificando nel parametro highlight la prima e l'ultima riga da evidenziare separate da un trattino (-). Nel seguente esempio vengono evidenziate le righe dalla 2 alla 4:

<syntaxhighlight lang="php" highlight="2-4">
<?php
 // esempio
 $num = 10;
 echo "Hello world";
?>
</syntaxhighlight>

risultato:

<?php
 // esempio
 $num = 10;
 echo "Hello world";
?>

Combinando i due metodi spiegati sopra è possibile farne un uso più complesso. Nel seguente esempio vengono evidenziate le righe dalla 15 alla 20, la 24, dalla 26 alla 32 e la 44:

<syntaxhighlight lang="php" highlight="15-20,24,26-32,44">
 <?php
 
 /*
  * Questo è un commento. Altri modi per commentare sono i simboli // e #
  * Questo tipo di commenti non ha bisogno degli asterischi (*) all'inizio
  * di ogni riga, ma lo si fa per convenzione. I simboli // e #
  * commentano solo il testo che si trova dopo di essi e fino alla fine della riga;
  * non c'è bisogno di finire il commento con qualche carattere speciale.
  */
 
 /*
  * Prima definiamo una funzione chiamata "plural".
  * Restituisce una "s" se l'argomento passato non è 1.
  */
 function plural($number)
 {
     // L'operatore ternario (!= ? :) è una struttura condizionale 
     // simile a if-else: (condizione ? true : false)
     return ($number != 1 ? "s" : "");
 }
 
 // Definiamo una variabile chiamata $a_capo che contiene un a capo HTML,
 // un carattere di ritorno e uno di nuova riga:
 $a_capo = "<br />\r\n";
 
 for ($i = 99; $i > 0; $i--) {
    print "$i bottle" . plural($i) . " of beer on the wall,$a_capo";
    // Non abbiamo bisogno di ripetere il comando print per ogni riga:
    print "$i bottle" . plural($i) . " of beer.$a_capo
         Take one down, pass it around,$a_capo" .
         ($i - 1 != 0 ? $i - 1 : "no more") .
         " bottle" . plural($i - 1) . " of beer on the wall.$a_capo$a_capo";
    /*
      * PHP permette di creare stringhe su più righe, finché
      * trova un punto e virgola (;) che termina l'istruzione.
      * Un punto (.) concatena insieme più stringhe.
      * Le variabili, che iniziano con il carattere "$", sono interpretate
      * anche dentro i doppi apici ("), ma non dentro gli apici singoli (').
      * Le funzioni, come plural(), non sono interpretate fra gli apici.
      */
 }

 
 print "Go to the store, $a_capo buy some more, $a_capo 99 bottles of beer on the wall!";
 
 ?>
</syntaxhighlight>

risultato:

 <?php
 
 /*
  * Questo è un commento. Altri modi per commentare sono i simboli // e #
  * Questo tipo di commenti non ha bisogno degli asterischi (*) all'inizio
  * di ogni riga, ma lo si fa per convenzione. I simboli // e #
  * commentano solo il testo che si trova dopo di essi e fino alla fine della riga;
  * non c'è bisogno di finire il commento con qualche carattere speciale.
  */
 
 /*
  * Prima definiamo una funzione chiamata "plural".
  * Restituisce una "s" se l'argomento passato non è 1.
  */
 function plural($number)
 {
     // L'operatore ternario (!= ? :) è una struttura condizionale 
     // simile a if-else: (condizione ? true : false)
     return ($number != 1 ? "s" : "");
 }
 
 // Definiamo una variabile chiamata $a_capo che contiene un a capo HTML,
 // un carattere di ritorno e uno di nuova riga:
 $a_capo = "<br />\r\n";
 
 for ($i = 99; $i > 0; $i--) {
    print "$i bottle" . plural($i) . " of beer on the wall,$a_capo";
    // Non abbiamo bisogno di ripetere il comando print per ogni riga:
    print "$i bottle" . plural($i) . " of beer.$a_capo
         Take one down, pass it around,$a_capo" .
         ($i - 1 != 0 ? $i - 1 : "no more") .
         " bottle" . plural($i - 1) . " of beer on the wall.$a_capo$a_capo";
    /*
      * PHP permette di creare stringhe su più righe, finché
      * trova un punto e virgola (;) che termina l'istruzione.
      * Un punto (.) concatena insieme più stringhe.
      * Le variabili, che iniziano con il carattere "$", sono interpretate
      * anche dentro i doppi apici ("), ma non dentro gli apici singoli (').
      * Le funzioni, come plural(), non sono interpretate fra gli apici.
      */
 }

 
 print "Go to the store, $a_capo buy some more, $a_capo 99 bottles of beer on the wall!";
 
 ?>

Pagine correlate modifica