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] Im Dunkelmodus werden stark abweichende Farben angezeigt (Beispiel: diese Hilfeseite).

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

Bearbeiten
<syntaxhighlight lang="">
</syntaxhighlight>

<source>

Bearbeiten

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

Bearbeiten

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 highlight="2">
Die Zeilen werden durchnummeriert, die Zeilenzählung beginnt bei 10.
<?php
  echo "Hallo Welt!";
?>

Kann wie gezeigt gemeinsam mit highlight verwendet werden, jedoch hat in der Positionsangabe dort die erste Zeile trotz start-Angabe die Nummer 1.

copy
<syntaxhighlight lang="php" copy>
Am rechten Rand wird ein Button zum Kopieren des Codes in die Zwischenablage angezeigt.
<?php
  echo "Hallo Welt!";
?>
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

Bearbeiten

Unterstützte Sprachen

Bearbeiten

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

Code Sprache
abap ABAP
abnf ABNF
actionscript
as
ActionScript
actionscript3
as3
ActionScript3
ada
ada95
ada2005
Ada
amdgpu Amdgpu  * pygments
antlr ANTLR
antlr-actionscript
antlr-as
AntlrActionScript  * pygments
apache
apacheconf
aconf
Apache Configuration
applescript AppleScript
arturo
art
Arturo
asm
gas
Assembler (Gas)
aspx-vb Active Server Pages (ASP für Visual Basic)
asymptote
asy
Asymptote
autohotkey
ahk
AutoHotkey
autoit AutoIt
awk
gawk
mawk
nawk
AWK
basic4gl Basic4GL (Basic4GL [en])
bat
dosbatch
winbatch
batch
Batch (Winbatch [en]) * pygments
bbcode BBCode
bdd BDD
befunge Befunge
berry
be
Berry
bf
brainfuck
Brainfuck
bibtex BibTeX
blitzbasic
b3d
bplus
Blitz BASIC
bnf Backus-Naur-Form  * pygments
boo Boo
c C
cadlisp AutoLISP
carbon Carbon
cddl Cddl  * pygments
cfm Coldfusion Markup
chaiscript
chai
ChaiScript (ChaiScript [en])
chapel
chpl
Chapel (Chapel (programming language) [en])
clean Clean
clojure
clj
Clojure
clojurescript
cljs
ClojureScript
cmake CMake
cobol COBOL
comal
comal80
COMAL
coffeescript
coffee-script
coffee
CoffeeScript
control
debcontrol
DebianControl
coq Coq
cplint Cplint  * pygments
cpp
c++
C++
cpp-qt Qt-Bibliothek
cryptol
cry
Cryptol (Cryptol [en])
csharp
c#
CSharp (C#)  * pygments
css Cascading Style Sheets (CSS)
cython
pyx
pyrex
Cython
d D
dart Dart
dax Dax  * pygments
dcpu16 DCPU-16 (0x10c [en])
delphi
pas
pascal
objectpascal
Delphi  * pygments
devicetree
dts
Devicetree (Devicetree [en])
diff
udiff
Diff
dot
graphviz
DOT
dtd DTD
dylan Dylan
dylan-console
dylan-repl
Dylan-Console  * pygments
ebnf Extended Backus–Naur Form
eiffel Eiffel
elpi Elpi  * pygments
emacs
elisp
emacs-lisp
Emacs Lisp
email
eml
E-mail (RFC-Format)  * pygments
erb ERB
erlang Erlang
ezhil Ezhil (Ezhil (programming language) [en])
factor Factor
fancy
fy
Fancy (Ruby)  * pygments
fift
fif
Fift  * pygments
fortran Fortran
freefem FreeFem++ (FreeFem++ [en])
fsharp F-Sharp
fstar Fstar (F* (programming language) [en])
func
fc
FunC  * pygments
futhark Futhark (Futhark (programming language) [en])
gap GAP
gap-console
gap-repl
GAPConsole  * pygments
gdscript
gd
GDScript
genshi
kid
xml+genshi
xml+kid
Genshi (Genshi (templating language) [en])
gherkin
cucumber
Gherkin (Ruby)
glsl GLShader
gnuplot gnuplot
go Go
groff
nroff
man
Groff
groovy Groovy
handlebars Handlebars
haskell
hs
Haskell
haxe
hx
hxsl
Haxe
hexdump Hexdump  * pygments
html Hypertext Markup Language (HTML)
http HTTP
icon Icon (icon (programming language) [en])
ini
cfg
dosini
INI (Datei)
io Io
irc IRC
isabelle Isabelle
j J
java Java
javascript
js
JavaScript
jmespath
jp
Jmespath  * pygments
json JSON
jsonld
json-ld
JSON-LD
jsonnet Jsonnet  * pygments
jsp Jsp
k K  * pygments
kotlin Kotlin
latex
tex
LaTeX (TeX)
lean Lean (Lean (proof assistant) [en])
lighttpd
lighty
Lighttpd (Conf)
lilypond LilyPond
lisp
common-lisp
cl
CommonLisp
llvm LLVM
logtalk Logtalk (Logtalk [en])
lsl Linden Scripting Language
lua Lua  * pygments
m68k Motorola 68000
make
makefile
mf
bsdmake
Makefile
mako Mako (Mako (template engine) [en])
mapbasic MapBasic
markdown
md
Markdown
matlab MATLAB (M)
matlabsession MatlabSession
mathematica
nb
mma
Mathematica
maxima Maxima
minid MiniD
modelica Modelica
modula2
m2
Modula-2  * pygments
moin
trac-wiki
Moin Wiki
mpasm PICmicro (Asm)
msc
mscgen
MSC
mupad MuPad
mxml MXML (MXML [en])
myghty Myghty (Pylons project#templating [en])
mysql MySQL
nemerle Nemerle (Nemerle [en])
netrexx NetRexx (NetRexx [en])
newlisp NewLISP
newspeak Newspeak (Newspeak (programming language) [en])
nginx Nginx (Konfig.)
nimrod
nim
Nimrod (Nimrod (distributed computing) [en])
nsis
nsi
nsh
Nullsoft Scriptable Install System (NSIS)
numpy NumPy (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
octave Octave
oorexx Object REXX (Object REXX [en])
openedge
progress
abl
OpenEdge (Progress)
parasail ParaSail (ParaSail (programming language) [en])
peg Peg (Parsing expression grammar [en])
perl
pl
Perl
phix Phix  * pygments
php
php3
php4
php5
PHP  * pygments
php-brief PHPBrief (nicht mehr in pygments gelistet) (deprecated – no colors, odd framing)
pic16 PICmicro (Asm)
pike Pike
po
pot
Gettext  * pygments
portugol Portugol (Portugol [en])
postgresql
postgres
PostgreSQL
psql
postgresql-console
postgres-console
PostgreSQL (Konsole)
postgres-explain PostgresExplain  * pygments
postscript
postscr
PostScript
pov POV-Ray
powershell
posh
ps1
psm1
Windows PowerShell
ps1con PowerShellSession
praat Praat  * pygments
prolog Prolog
promql PromQL
properties
jproperties
Java-Properties-Datei
pycon Python Konsole  * pygments
pys60 Python (S60)
python
py
sage
Python
pytb PythonTraceback
python3
py3
Python3
py3tb Python3Traceback
q Q  * pygments
qbasic
basic
QBasic
qlik
qlikscript
qliksense
qlikview
Qlik
r R
ragel Ragel (Ragel [en])
rails Rails
raku
perl6
pl6
Raku
reason
reasonml
Reason (Reason (programming language) [en])
red Red (Red (programming language) [en])
redcde Redcode (Asm)
rita RITA  * pygments
rs RS (mit R)
rst
rest
restructuredtext
RST
robotframework Robot Framework
rebol Rebol
registry Registry (MS Windows)
rexx
arexx
REXX
rpmspec
spec
RPM (Spec files)
ruby
rb
duby
Ruby
rbcon
irb
Ruby Konsole  * pygments
rql RQL
rust Rust
s
splus
S
sas SAS (SAS language [en])
savi Savi  * pygments
scala Scala
scheme
scm
Scheme
scilab Scilab
sdlbasic SDL-Basic
sed sed
sh
bash
ksh
shell
Shell (mit Kornshell)
shell-session
console
ShellSession
sieve Sieve
slim Slim (markup)  * pygments
smalltalk Smalltalk
smarty Smarty
sml SML
snbt Snbt  * pygments
snobol SNOBOL (SNOBOL [en])
sophia Sophia  * pygments
spice Spice  * pygments
sparql SPARQL
squid
squidconf
squid.conf
Squid (Konfig.)
sql SQL
srcinfo .SRCINFO  * pygments
systemverilog
sv
SystemVerilog
tal
uxntal
Tal  * pygments
tlb TL-b  * pygments
tcl Tcl
tcsh
csh
Tcsh
tcshcon TcshSession
teraterm
teratermmacro
ttl
Tera Term
termcap Termcap (Termcap [en])
terminfo Terminfo (Terminfo [en])
terraform
tf
hcl
Terraform (Terraform (software) [en])
text Plain text
ts
typescript
TypeScript
typoscript TypoScript
tsql Transact-SQL
turtle Turtle
ucode Ucode  * pygments
ul4 Ul4  * pygments
unicon Unicon (unicon (programming language) [en])
unixconfig
linuxconfig
UnixConfig  * pygments
upc Unified Parallel C (UPC)
urbi Urbi (URBI [en])
urbiscript UrbiScript (Urbiscript [en])
usd
usda
Universal Scene Description
vala
vapi
Vala
vb Visual Basic
vbscript Visual Basic Script
vb.net
vbnet
oobas
lobas
sobas
Visual Basic .NET (und StarOffice Basic)  * pygments
verilog
v
Verilog
vhdl VHDL
vim Vim
foxpro
vfp
clipper
xbase
FoxPro (MS-Visual)
visualprolog Visual Prolog (Visual Prolog [en])
webidl WebIDL (Web IDL [en])
whiley Whiley (Whiley (programming language) [en])
wikitext
mediawiki
Wikitext
wowtoc WoWToc  * pygments
wren Wren  * pygments
x10
xten
X10
xml XML
xorg.conf Xorg configs (X.Org-Server-Konfiguration)
xpp
x++
Microsoft Dynamics AX
xquery
xqy
xq
xql
xqm
XQuery
xslt XSLT
yaml YAML
yang Yang (YANG [en])
zig Zig

Unter Pygments zurzeit nicht mehr unterstützt

Bearbeiten

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

Kürzel Sprache
4cs 4CS
algol68 Algol 68
arm Arm-Architektur
apt_sources Apt sources
asp ASP
autoconf Autoconf
avisynth AviSynth
caddcl AutoCAD DCL (en)
cil CIL
cuesheet Cuesheet
dcl Dialog Control Language (en)
dcs Data Conversion System
dos Stapelverarbeitungsdatei
ecmascript JavaScript
epc Enerscript
f1 Formula One
falcon Falcon (en)
fo FO
freebasic FreeBASIC
freeswitch FreeSWITCH en
gambas Gambas
gdb GDB
genie Genie (en)
gettext GNU gettext
gml GML
gwbasic GW-BASIC
Kürzel Sprache
hicest HicEst
hq9plus HQ9+
html4strict html5 HTML
inno Inno Setup
intercal INTERCAL
kixtart KiXtart
klonec Klone C
klonecpp Klone C++
java5 Java
jquery JavaScript
lb Liberty Basic
locobasic Locomotive BASIC
ldif LDAP DIF
lolcode LOLCODE (en)
lotusformulas Formula language (en)
lotusscript LotusScript
lscript LScript
lsl2 LSL
magiksf magiks (en)
mirc mIRC
mmix MMIX
modula3 Modula-3
nagios Nagios
oberon2 Oberon
objeck Objeck
oracle8 oracle11 Oracle 8 Oracle 11
Kürzel Sprache
oxygene Oxygene
parigp PARI/GP (en)
pcre Perl CRE
per per
pf PF
pixelbender Adobe Pixel Bender
pli PL/I
plsql PL/SQL
powerbuilder PowerBuilder
proftpd ProFTPD
providex ProvideX
purebasic PureBasic
q Q (en)
reg RegDB
robots Robots Exclusion Standard
rsplus rspluse S mit R
stonescript StoneScript, Skriptsprache für ShiVa
thinbasic ThinBasic
tls Transport Layer Security
uscript UnrealScript
visualfoxpro Microsoft Visual FoxPro
vedit VEDIT
whitespace Whitespace
whois Whois-Protokoll
z80 Zilog Z80
 

Anpassungen

Bearbeiten

Einzelne Verwendung

Bearbeiten

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

Bearbeiten

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

Bearbeiten

Weltweit einheitlich wird angepasst:

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

Vorlagenprogrammierung

Bearbeiten

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

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.

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

Bearbeiten
  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