Hilfe:syntaxhighlight

Syntaxhighlight („Syntaxhervorhebung“) ist eine Erweiterung der MediaWiki-Software zur Darstellung von Programm-Quelltexten auf Wiki-Seiten. Die Quelltexte werden ihrer Syntax entsprechend farblich dargestellt.[1]

Syntax

Basis-Syntax zur Erstellung von Quelltexten:

<syntaxhighlight lang="php">
<?php
  echo "Hallo Welt!";
?>
</syntaxhighlight>

Ausgabe:

<?php
  echo "Hallo Welt!";
?>

Hinzu kommt die Angabe optionaler Parameter.

Kopiervorlage

<syntaxhighlight lang="">
</syntaxhighlight>

<source>

Zunächst hatte das Element <source> geheißen; bis 2009 war dies das bevorzugte Tag. Nachdem in HTML5 ein Multimedia-Element gleichen Namens eingeführt worden war, wurde die Präferenz getauscht. Weil <source> im dargestellten HTML-Beispiel vorkommen könnte, sollte nur noch das kollisionsfreie <syntaxhighlight> verwendet werden. Die deutschsprachige Wikipedia hat <source> seit Jahren eliminiert. Inzwischen ist dieses Element vollständig weggefallen, eine fälschliche Verwendung wird in eine Wartungskategorie eingetragen.

Parameter

Wikisyntax: <tag>

<syntaxhighlight>

Syntaxhighlight kann hunderte verschiedene Programmiersprachen darstellen, und jede hat ihre Besonderheiten was die Darstellung betrifft. Deshalb ist lang ein Pflicht-Parameter.

Die Schreibrichtung ist immer explizit von links nach rechts, auch wenn in einen RTL-Textbereich eingebunden.

inline
<syntaxhighlight lang="css" inline>
Damit kann formatierter Computercode innerhalb eines Absatzes erzeugt werden. Beispiel: „Dies ist ein Test um zu zeigen, dass beispielsweise CSS-Code table {display:none;} inline dargestellt werden kann.“
highlight
<syntaxhighlight lang="php" highlight="1,3-5,8" line>
Die Zeilen 1, 3 bis 5 und 8 werden hellgelb unterlegt.
<?php
  echo "Hallo Welt!";
  echo "Hallo Welt!";
  echo "Hallo Welt!";
  echo "Hallo Welt!";
  echo "Hallo Welt!";
  echo "Hallo Welt!";
?>
line
<syntaxhighlight lang="php" line>
Die Zeilen werden durchnummeriert.
<?php
  echo "Hallo Welt!";
  echo "Hallo Welt!";
  echo "Hallo Welt!";
  echo "Hallo Welt!";
  echo "Hallo Welt!";
  echo "Hallo Welt!";
?>

Die GeSHi-Funktionalität, jede fünfte Zeilennummer hervorzuheben, war 2016 noch nicht wiederhergestellt worden.

start
<syntaxhighlight lang="php" start="10" line>
Die Zeilen werden durchnummeriert, die Zeilenzählung beginnt bei 10.
<?php
  echo "Hallo Welt!";
?>

Kann nicht gemeinsam mit highlight verwendet werden.

style
<syntaxhighlight style="margin-left: 6em;" lang="html">
Standard-Attribut in HTML.
  • Beispiel: Hier, um einen ganzen Block entsprechend dem Kontext um 6em einzurücken:
<syntaxhighlight style="margin-left: 6em;" lang="html">
enclose
<syntaxhighlight enclose="none" lang="css">
Veralteter Parameter, der als enclose="none" gerade dem inline entsprach.
enclose= konnte früher noch weitere Werte annehmen (etwa "div"), die heute keine Bedeutung mehr haben.
strict
Mit der Zuweisung strict="1" konnte die zugrundeliegende Software angewiesen werden, die Programmiersprache standardgemäß auszulegen, falls dafür eine gesonderte Definition verfügbar ist. Unter Pygments ist dies aber vermutlich nicht mehr wirksam.

Sprachen

Unterstützte Sprachen

Die folgenden Sprachen werden von dieser Erweiterung unterstützt (Auszug):[2][3]

CodeSprache
abapABAP
abnfABNF
actionscript
as
ActionScript
actionscript3
as3
ActionScript3
ada
ada95
ada2005
Ada
amdgpuAmdgpu  * pygments
antlrANTLR
antlr-actionscript
antlr-as
AntlrActionScript  * pygments
apache
apacheconf
aconf
Apache Configuration
applescriptAppleScript
arturo
art
Arturo
asm
gas
Assembler (Gas)
aspx-vbActive Server Pages (ASP für Visual Basic)
asymptote
asy
Asymptote
autohotkey
ahk
AutoHotkey
autoitAutoIt
awk
gawk
mawk
nawk
AWK
basic4glBasic4GL (Basic4GL [en])
bat
dosbatch
winbatch
batch
Batch (Winbatch [en]) * pygments
bbcodeBBCode
bddBDD
befungeBefunge
berry
be
Berry
bf
brainfuck
Brainfuck
bibtexBibTeX
blitzbasic
b3d
bplus
Blitz BASIC
bnfBackus-Naur-Form  * pygments
booBoo
cC
cadlispAutoLISP
carbonCarbon
cddlCddl  * pygments
cfmColdfusion Markup
chaiscript
chai
ChaiScript (ChaiScript [en])
chapel
chpl
Chapel (Chapel (programming language) [en])
cleanClean
clojure
clj
Clojure
clojurescript
cljs
ClojureScript
cmakeCMake
cobolCOBOL
comal
comal80
COMAL
coffeescript
coffee-script
coffee
CoffeeScript
control
debcontrol
DebianControl
coqCoq
cplintCplint  * pygments
cpp
c++
C++
cpp-qtQt-Bibliothek
cryptol
cry
Cryptol (Cryptol [en])
csharp
c#
CSharp (C#)  * pygments
cssCascading Style Sheets (CSS)
cython
pyx
pyrex
Cython
dD
dartDart
daxDax  * pygments
dcpu16DCPU-16 (0x10c [en])
delphi
pas
pascal
objectpascal
Delphi  * pygments
devicetree
dts
Devicetree (Devicetree [en])
diff
udiff
Diff
dot
graphviz
DOT
dtdDTD
dylanDylan
dylan-console
dylan-repl
Dylan-Console  * pygments
ebnfExtended Backus–Naur Form
eiffelEiffel
elpiElpi  * pygments
emacs
elisp
emacs-lisp
Emacs Lisp
email
eml
E-mail (RFC-Format)  * pygments
erbERB
erlangErlang
ezhilEzhil (Ezhil (programming language) [en])
factorFactor
fancy
fy
Fancy (Ruby)  * pygments
fift
fif
Fift  * pygments
fortranFortran
freefemFreeFem++ (FreeFem++ [en])
fsharpF-Sharp
fstarFstar (F* (programming language) [en])
func
fc
FunC  * pygments
futharkFuthark (Futhark (programming language) [en])
gapGAP
gap-console
gap-repl
GAPConsole  * pygments
gdscript
gd
GDScript
genshi
kid
xml+genshi
xml+kid
Genshi (Genshi (templating language) [en])
gherkin
cucumber
Gherkin (Ruby)
glslGLShader
gnuplotgnuplot
goGo
groff
nroff
man
Groff
groovyGroovy
handlebarsHandlebars
haskell
hs
Haskell
haxe
hx
hxsl
Haxe
hexdumpHexdump  * pygments
htmlHypertext Markup Language (HTML)
httpHTTP
iconIcon (icon (programming language) [en])
ini
cfg
dosini
INI (Datei)
ioIo
ircIRC
isabelleIsabelle
jJ
javaJava
javascript
js
JavaScript
jmespath
jp
Jmespath  * pygments
jsonJSON
jsonld
json-ld
JSON-LD
jsonnetJsonnet  * pygments
jspJsp
kK  * pygments
kotlinKotlin
latex
tex
LaTeX (TeX)
leanLean (Lean (proof assistant) [en])
lighttpd
lighty
Lighttpd (Conf)
lilypondLilyPond
lisp
common-lisp
cl
CommonLisp
llvmLLVM
logtalkLogtalk (Logtalk [en])
lslLinden Scripting Language
luaLua  * pygments
m68kMotorola 68000
make
makefile
mf
bsdmake
Makefile
makoMako (Mako (template engine) [en])
mapbasicMapBasic
markdown
md
Markdown
matlabMATLAB (M)
matlabsessionMatlabSession
mathematica
nb
mma
Mathematica
maximaMaxima
minidMiniD
modelicaModelica
modula2
m2
Modula-2  * pygments
moin
trac-wiki
Moin Wiki
mpasmPICmicro (Asm)
msc
mscgen
MSC
mupadMuPad
mxmlMXML (MXML [en])
myghtyMyghty (Pylons project#templating [en])
mysqlMySQL
nemerleNemerle (Nemerle [en])
netrexxNetRexx (NetRexx [en])
newlispNewLISP
newspeakNewspeak (Newspeak (programming language) [en])
nginxNginx (Konfig.)
nimrod
nim
Nimrod (Nimrod (distributed computing) [en])
nsis
nsi
nsh
Nullsoft Scriptable Install System (NSIS)
numpyNumPy (NumPy [en])
objc
obj-c
objective-c
objectivec
Objective-C
objj
obj-j
objective-j
objectivej
Objective-J (Objective-J [en])
ocaml
ocaml-brief
OCaml
octaveOctave
oorexxObject REXX (Object REXX [en])
openedge
progress
abl
OpenEdge (Progress)
parasailParaSail (ParaSail (programming language) [en])
pegPeg (Parsing expression grammar [en])
perl
pl
Perl
phixPhix  * pygments
php
php3
php4
php5
PHP  * pygments
php-briefPHPBrief (nicht mehr in pygments gelistet) (deprecated – no colors, odd framing)
pic16PICmicro (Asm)
pikePike
po
pot
Gettext  * pygments
portugolPortugol (Portugol [en])
postgresql
postgres
PostgreSQL
psql
postgresql-console
postgres-console
PostgreSQL (Konsole)
postgres-explainPostgresExplain  * pygments
postscript
postscr
PostScript
povPOV-Ray
powershell
posh
ps1
psm1
Windows PowerShell
ps1conPowerShellSession
praatPraat  * pygments
prologProlog
promqlPromQL
properties
jproperties
Java-Properties-Datei
pyconPython Konsole  * pygments
pys60Python (S60)
python
py
sage
Python
pytbPythonTraceback
python3
py3
Python3
py3tbPython3Traceback
qQ  * pygments
qbasic
basic
QBasic
qlik
qlikscript
qliksense
qlikview
Qlik
rR
ragelRagel (Ragel [en])
railsRails
raku
perl6
pl6
Raku
reason
reasonml
Reason (Reason (programming language) [en])
redRed (Red (programming language) [en])
redcdeRedcode (Asm)
ritaRITA  * pygments
rsRS (mit R)
rst
rest
restructuredtext
RST
robotframeworkRobot Framework
rebolRebol
registryRegistry (MS Windows)
rexx
arexx
REXX
rpmspec
spec
RPM (Spec files)
ruby
rb
duby
Ruby
rbcon
irb
Ruby Konsole  * pygments
rqlRQL
rustRust
s
splus
S
sasSAS (SAS language [en])
saviSavi  * pygments
scalaScala
scheme
scm
Scheme
scilabScilab
sdlbasicSDL-Basic
sedsed
sh
bash
ksh
shell
Shell (mit Kornshell)
shell-session
console
ShellSession
sieveSieve
slimSlim (markup)  * pygments
smalltalkSmalltalk
smartySmarty
smlSML
snbtSnbt  * pygments
snobolSNOBOL (SNOBOL [en])
sophiaSophia  * pygments
spiceSpice  * pygments
sparqlSPARQL
squid
squidconf
squid.conf
Squid (Konfig.)
sqlSQL
srcinfo.SRCINFO  * pygments
systemverilog
sv
SystemVerilog
tal
uxntal
Tal  * pygments
tlbTL-b  * pygments
tclTcl
tcsh
csh
Tcsh
tcshconTcshSession
teraterm
teratermmacro
ttl
Tera Term
termcapTermcap (Termcap [en])
terminfoTerminfo (Terminfo [en])
terraform
tf
hcl
Terraform (Terraform (software) [en])
textPlain text
ts
typescript
TypeScript
typoscriptTypoScript
tsqlTransact-SQL
turtleTurtle
ucodeUcode  * pygments
ul4Ul4  * pygments
uniconUnicon (unicon (programming language) [en])
unixconfig
linuxconfig
UnixConfig  * pygments
upcUnified Parallel C (UPC)
urbiUrbi (URBI [en])
urbiscriptUrbiScript (Urbiscript [en])
usd
usda
Universal Scene Description
vala
vapi
Vala
vbVisual Basic
vbscriptVisual Basic Script
vb.net
vbnet
oobas
lobas
sobas
Visual Basic .NET (und StarOffice Basic)  * pygments
verilog
v
Verilog
vhdlVHDL
vimVim
foxpro
vfp
clipper
xbase
FoxPro (MS-Visual)
visualprologVisual Prolog (Visual Prolog [en])
webidlWebIDL (Web IDL [en])
whileyWhiley (Whiley (programming language) [en])
wikitext
mediawiki
Wikitext
wowtocWoWToc  * pygments
wrenWren  * pygments
x10
xten
X10
xmlXML
xorg.confXorg configs (X.Org-Server-Konfiguration)
xpp
x++
Microsoft Dynamics AX
xquery
xqy
xq
xql
xqm
XQuery
xsltXSLT
yamlYAML
yangYang (YANG [en])
zigZig

Unter Pygments zurzeit nicht mehr unterstützt

Die nachstehenden Codes gab es mit GeSHi, nicht mehr mit Pygments:

KürzelSprache
4cs4CS
algol68Algol 68
armArm-Architektur
apt_sourcesApt sources
aspASP
autoconfAutoconf
avisynthAviSynth
caddclAutoCAD DCL (en)
cilCIL
cuesheetCuesheet
dclDialog Control Language (en)
dcsData Conversion System
dosStapelverarbeitungsdatei
ecmascriptJavaScript
epcEnerscript
f1Formula One
falconFalcon (en)
foFO
freebasicFreeBASIC
freeswitchFreeSWITCH en
gambasGambas
gdbGDB
genieGenie (en)
gettextGNU gettext
gmlGML
gwbasicGW-BASIC
KürzelSprache
hicestHicEst
hq9plusHQ9+
html4strict html5HTML
innoInno Setup
intercalINTERCAL
kixtartKiXtart
klonecKlone C
klonecppKlone C++
java5Java
jqueryJavaScript
lbLiberty Basic
locobasicLocomotive BASIC
ldifLDAP DIF
lolcodeLOLCODE (en)
lotusformulasFormula language (en)
lotusscriptLotusScript
lscriptLScript
lsl2LSL
magiksfmagiks (en)
mircmIRC
mmixMMIX
modula3Modula-3
nagiosNagios
oberon2Oberon
objeckObjeck
oracle8 oracle11Oracle 8 Oracle 11
KürzelSprache
oxygeneOxygene
parigpPARI/GP (en)
pcrePerl CRE
perper
pfPF
pixelbenderAdobe Pixel Bender
pliPL/I
plsqlPL/SQL
powerbuilderPowerBuilder
proftpdProFTPD
providexProvideX
purebasicPureBasic
qQ (en)
regRegDB
robotsRobots Exclusion Standard
rsplus rspluseS mit R
stonescriptStoneScript, Skriptsprache für ShiVa
thinbasicThinBasic
tlsTransport Layer Security
uscriptUnrealScript
visualfoxproMicrosoft Visual FoxPro
veditVEDIT
whitespaceWhitespace
whoisWhois-Protokoll
z80Zilog Z80

Anpassungen

Einzelne Verwendung

Es kann über den Parameter style= die aktuelle Einbindung angepasst werden, etwa Rahmen oder Einrückung.

  • Seit Mitte 2012[4] werden die Blöcke nicht mehr als <div> eingefügt, sondern (wenn nicht mit inline markiert) als <pre> mit dem hier standardmäßig vorgesehenen Rahmen.
    • Das ist bei einem mehrzeiligen Block sinnvoll; bei nur ein oder zwei Zeilen kann dies aber störend wirken.
    • style="border: none; padding: 0;"
      reduziert die Dekoration weitestmöglich.
  • Seit 2015 ist beim inline-Style (und ganz allgemein) der Zeilenumbruch erlaubt; das umrahmte Feld eignet sich aber nicht dazu, auf mehrere Zeilen verteilt zu werden, und insbesondere bei Assembler-Sprachen kann das Einpassen längerer Zeilen in die momentane Bildschirmbreite sehr störend sein.
    • style="white-space:nowrap" verhindert das.

Seit Mitte 2015 werden nur noch die Elemente <pre> und <code> ausgeliefert.

Benutzer

Zu benutzerspezifischen Anpassungen siehe Skin/CSS.

  • Ein interessantes Feature unter pygments; kann aber sehr anstrengend werden – die nachfolgende CSS-Sequenz macht auf Syntaxfehler aufmerksam:
.mw-highlight .err {
   border: #FF0000 1px solid;
}

Mediawiki

Weltweit einheitlich wird angepasst:

Benutzer können nach diesem Vorbild ihre eigenen Gewohnheiten wirken lassen.

Vorlagenprogrammierung

Bei der Vorlagenprogrammierung mittels #tag: ist auf die Reihenfolge der Parameter zu achten. Es muss zwingend als erster Parameter der Content übergeben werden. Anschließend können die Angaben zur Sprache und dem umschließenden HTML-Tag erfolgen. Zudem dürfen keine Zeilenumbrüche zwischen den einzelnen Parametern enthalten sein.

{{#tag:syntaxhighlight|{{{code}}}|lang={{#if:{{{language|}}}|{{{language}}}|diff}}}}

Anschließend kann eine so entworfene Vorlage mit den Parametern

{{Vorlagenname
| language =
| code =
}}

aufgerufen werden. Als Beispiel für eine solche Verwendung sei auf die Vorlage Patch verwiesen.

Des Weiteren ist zu beachten, dass der Parameter code selbst direkt kein Pipezeichen enthalten darf (wie immer in der Vorlagenprogrammierung), dieses muss dann ggf. durch ein {{!}} ersetzt werden (Beispiel).

Der Code kann auch aus einer vollständigen Seite eingebunden werden:

{{#tag:syntaxhighlight | {{Modul:Hello}} | lang=lua}}

liefert

local p = {} 
function p.hello(frame)
    local name = frame.args[1]
    if not name then 
        name = 'Welt' 
    end
    return  'Hallo, ' .. name .. '! Dies ist Lua!' 
end 
return p

Wartung

Seiten mit nicht erkanntem Sprachcode oder anderen ungültigen Werten werden in der Kategorie:Wikipedia:Seite mit Syntaxhervorhebungsfehlern aufgelistet.

Sie werden über MediaWiki:Syntaxhighlight-error-category, MediaWiki:Syntaxhighlight-source-category und MediaWiki:Syntaxhighlight-enclose-category definiert.

GeSHi

Bis zum 25. Juni 2015 wurde das Paket GeSHi benutzt, seitdem pygments.

Um nicht alle Pfade und Definitionen und Bezeichner umstellen zu müssen, nennt sich die Erweiterung aber weiterhin „GeSHi“, und Identifikatoren behalten diesen Namensbestandteil.

Die Umstellung wurde erforderlich, weil es keine Upstream-Wartung und Pflege bei GeSHi mehr gab.

Anmerkungen

  1. Falls du in deinen Einstellungen die Option Vorschau ohne Neuladen der Seite anzeigen ausgewählt hast, wird Syntaxhighlight in der Vorschau einer Seite nicht angezeigt. Sie muss dann gespeichert werden, um sichtbar zu sein.
  2. Die aktuelle Liste ist immer bei der Originaldokumentation
  3. Bei Dialekten und Varianten wird der gleiche optische Effekt meist auch mit der Stamm-Sprache erreicht.
  4. phab:T21416 (Bugzilla:19416), rev:113190