Jump to content

Erweiterung:SyntaxHighlight

From mediawiki.org
This page is a translated version of the page Extension:SyntaxHighlight and the translation is 99% complete.
This extension comes with MediaWiki 1.21 and above. Daher muss sie nicht erneut heruntergeladen werden. Allerdings müssen die folgenden Anweisungen trotzdem beachtet werden.
Zum Hervorheben von Syntax in Wikitext bei Verwendung des Source-Editors siehe die CodeMirror -Erweiterung oder die Benutzerskripts von Remember the dot und Cacycle.
MediaWiki-Erweiterungen
SyntaxHighlight
Freigabestatus: stabil
Einbindung Tag
Beschreibung Erlaubt die Hervorhebung von Syntax eines Quellcodes auf Wikiseiten
Autor(en)
Letzte Version Laufende Aktualisierungen
Kompatibilitätspolitik Der Master behält die Abwärtskompatibilität bei.
MediaWiki 1.25+
Datenbankänderungen Nein
Lizenz GNU General Public License 2.0 oder neuer
Herunterladen
README
  • $wgPygmentizePath
  • $wgSyntaxHighlightMaxLines
  • $wgSyntaxHighlightMaxBytes
‎<syntaxhighlight>
Public wikis using 11,760 (Ranked 8th)
Übersetze die SyntaxHighlight-Erweiterung
Probleme Offene Aufgaben · Einen Fehler melden

Die SyntaxHighlight-Erweiterung, früher bekannt als SyntaxHighlight_GeSHi, stellt reiche Formatierung von Quellcode bei der Verwendung des Tags ‎<syntaxhighlight> bereit. Sie wird von der Library Pygments angetrieben und unterstützt Hunderte von Programmiersprachen und Dateiformaten.

Genau wie die Tags ‎<pre> und <poem > wird der Text genau so dargestellt, wie er getippt wurde und bewahrt so jegliche Leerzeichen.

The SyntaxHighlight extension does not work on wiki installations hardened using Hardened-PHP due to the lack of proc_open, shell_exec and other functions. Siehe task T250763.

Der ‎<syntaxhighlight>-Tag ist seit 1.39 für 5.000 oder eine andere extreme Anzahl von Syntaxhighlight-Tags auf einer einzigen Seite, wie z.B. bei Wikibooks, belastend geworden. Erhöhe in Extremfällen den Timeout-Wert des Webservers in der Umgebung. (Siehe task T316858.)

Verwendung

Einmal installiert, kann man den "syntaxhighlight"-Tag auf Wikiseiten verwenden. Zum Beispiel

def quick_sort(arr):
	less = []
	pivot_list = []
	more = []
	if len(arr) <= 1:
		return arr
	else:
		pass

ist das Ergebnis des folgenden Wikitext-Markups:

<syntaxhighlight lang="python" line>
def quick_sort(arr):
	less = []
	pivot_list = []
	more = []
	if len(arr) <= 1:
		return arr
	else:
		pass
</syntaxhighlight>

In älteren Versionen (vor MediaWiki 1.16) benutzte die Erweiterung den Tag ‎<source>. Dieser wird noch immer unterstützt, jedoch hilft ‎<syntaxhighlight> Konflikte zu vermeiden.

Gestaltung

Wenn der angezeigte Code zu groß ist, kann dieser angepasst werden, indem folgendes in die MediaWiki:Common.css Seite in Ihrem Wiki getan wird (wenn diese nicht existiert, muss sie erzeugt werden):

/* CSS, welches hier platziert wird, beeinflusst jedes Aussehen */
.mw-highlight pre {
	font-size: 90%;
}

Um Codeblocks in Kanten einzuschließen, muss eine Zeile wie border: 1px dashed blue; in die Sektion oben eingefügt werden. Kontrolle über die verwendete Schriftartfamilie kann durch Einfügen einer Zeile wie font-family: "Courier New", monospace; in die obere Sektion ausgeübt werden.

Kategorie für Syntaxhervorhebungsfehler

Die Erweiterung fügt Seiten, die ein fehlerhaftes lang-Attribut in einem ‎<syntaxhighlight>-Tag haben zu einer tracking category hinzu. Der Nachrichtenschlüssel MediaWiki:syntaxhighlight-error-category bestimmt den Kategorienamen; auf diesem Wiki ist das Category:Pages with syntax highlighting errors.

Der häufigste Fehler, der dazu führt, dass Seiten zu dieser Kategorie hinzugefügt werden ist ein ‎<syntaxhighlight> Tag ganz ohne lang Attribut, da ältere Versionen dieser Erweiterung die Definition von $wgSyntaxHighlightDefaultLang unterstützten. Diese können üblicherweise entweder durch ‎<pre> ersetzt werden oder lang="bash" oder lang="text" kann zum Tag hinzugefügt werden.

Die Kategorie kann auch zugewiesen werden und der Inhalt nicht hervorgehoben werden, wenn der Text länger als 1000 Zeilen oder größer als 100 kB ist.[1]

Parameter

lang

Das lang="name" Attribut definiert, welcher Lexer verwendet werden soll. Die Auswahl der Sprache beeinflusst, wie der Quellcode hervorgehoben wird. Details zu unterstützten Sprachen finden sich im Abschnitt Unterstützte Sprachen.

def quick_sort(arr):
    less = []
<syntaxhighlight lang="python">
...
</syntaxhighlight>

Wenn ein ungültiger oder unbekannter Name verwendet wird, wird die Seite der Wartungskategorie zugeordnet. Für Details siehe den Abschnitt Kategorie mit Syntaxhervorhebungsfehlern.

line

Das line Attribut aktiviert Zeilennummern.

def quick_sort(arr):
	less = []
<syntaxhighlight lang="python" line>
...
</syntaxhighlight>

start

Das start Attribut (in Kombination mit line) definiert die erste Zeilennummer des Codeblocks. Zum Beispiel bewirkt line start="55" hier, dass die Nummerierung bei der Zahl 55 beginnt.

def quick_sort(arr):
    less = []
<syntaxhighlight lang="python" line start="55">
...
</syntaxhighlight>

highlight

Das highlight-Attribut definiert eine oder mehr Zeilen, die markiert werden sollen (indem diese Zeilen mit einer anderen Hintergrundfarbe hervorgehoben werden). Man kann mehrere Zeilennummern kommasepariert (zum Beispiel highlight="1,4,8") angeben oder Bereiche, indem man zwei Zeilennummern mit einem Bindestrich angibt (zum Beispiel highlight="5-7").

Die Angabe der Zeilennummer ignoriert eine eventuelle Umnummerierung der angezeigten Zeilennummern mit dem Attribut start.
def quick_sort(arr):
    less = []
    pivot_list = []
    more = []
    if len(arr) <= 1:
        return arr

ist das Ergebnis von

<syntaxhighlight lang="python" line start="3" highlight="1,5-7">
...
</syntaxhighlight>

inline

MediaWiki Version:
1.26

Das Attribut weist darauf hin, dass der Quellcode Fließtext als Teil des Paragraphen sein soll (statt ein eigener Block zu sein). Diese Option ist ab MediaWiki 1.26 verfügbar.

Die Verwendung des Parameters „enclose“ ist veraltet; wenn er auf none gesetzt ist, sollte er durch inline ersetzt werden; andernfalls kann er ganz entfernt werden.
Zeilenumbrüche können an jeder beliebigen Stelle zwischen dem öffnenden und dem schließenden Tag vorkommen, es sei denn, der Quelltext ist mit class="nowrap" (in den Wikis, die dies unterstützen; siehe unten) oder style="white-space:nowrap" als nicht umbrechend markiert.

Zum Beispiel:

Der folgende lambda x: x * 2 ist ein Lambdra-Ausdruck in Python.

ist das Ergebnis von:

Der folgende <syntaxhighlight lang="python" inline>lambda x: x * 2</syntaxhighlight> ist ein [[w:Lambda (programming)|Lambda-Ausdruck]] in Python.

class

Wenn inline benutzt wird, bewirkt class="nowrap" (auf Wikis, die es unterstützen; nicht auf MediaWiki selbst), dass keine Zeilenumbrücke bei Leerzeichen innerhalb des Codeblocks auftreten sollten.

Zum Beispiel:

Ohne class="nowrap":

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxlambda x: x * 2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Mit style="white-space:nowrap":

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxlambda x: x * 2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

style

Das style-Attribut erlaubt es, CSS-Atribute direkt einzubinden. Das ist das Gleiche, wie den Block in ein ‎<div>-(nicht ‎<span>-)Tag einzuschließen. Das tab‑size-Attribut kann nicht auf diese Weise gesetzt werden; es benötigt ein umschließendes ‎<span>-Tag, so wie unter Advanced beschrieben.

Zum Beispiel:

def quick_sort(arr):
	less = []
	pivot_list = []
	more = []
	if len(arr) <= 1:
		return arr
	else:
		pass

ist das Ergebnis von:

<syntaxhighlight lang="python" style="border: 3px dashed blue;">
def quick_sort(arr):
	less = []
	pivot_list = []
	more = []
	if len(arr) <= 1:
		return arr
	else:
		pass
</syntaxhighlight>

copy

MediaWiki Version:
1.43

The copy attribute adds a button link that copies the content to the clipboard when clicked.

This attribute cannot be used together with the inline attribute. If both are specified, copy will be ignored.

For example:

def quick_sort(arr):
    less = []

Is the result of:

<syntaxhighlight lang="python" copy>
def quick_sort(arr):
    less = []
</syntaxhighlight>


Unterstützte Sprachen

Die Pygments-Bibliothek bietet Unterstützung für hunderte von Programmiersprachen und Dateiformaten, mit Hilfe der verschiedenen „Lexer“, die in der Bibliothek enthalten sind.

In den meisten Fällen wird für das Attribut lang=, das mit dieser Erweiterung verwendet wird, der Namen der Sprache kleingeschrieben. Viele haben jedoch Aliase oder „Abkürzungen“, wie sie in der Pygments-Dokumentation aufgeführt sind; siehe „Verfügbare Lexer“ für weitere Details.

Einige Sprachen, die zuvor von GeSHi unterstützt wurden, sind nun auf Pygments-Lexer umgestellt; siehe für Details SyntaxHighlightGeSHiCompat.php.

Pygments bietet seit April 2023 einen „wikitext“-Lexer an. In älteren Versionen kann stattdessen „html+handlebars“ oder „moin“ verwendet werden.

Die vollständige Liste der Sprachen, die von Pygments unterstützt werden (Stand Januar 2020):

Programmiersprachen

  • ActionScript
  • Ada
  • Agda (inkl. literate)
  • Alloy
  • AMPL
  • ANTLR
  • APL
  • AppleScript
  • Assembly (verschiedene)
  • Asymptote
  • Augeas
  • AutoIt
  • Awk
  • BBC Basic
  • Befunge
  • BlitzBasic
  • Boa
  • Boo
  • Boogie
  • BrainFuck
  • C, C++ (inkl. Dialekte wie Arduino)
  • C#
  • Chapel
  • Charm++ CI
  • Cirru
  • Clay
  • Clean
  • Clojure
  • CoffeeScript
  • ColdFusion
  • Common Lisp
  • Component Pascal
  • Coq
  • Croc (MiniD)
  • Cryptol (inkl. Literate Cryptol)
  • Crystal
  • Cypher
  • Cython
  • D
  • Dart
  • DCPU-16
  • Delphi
  • Dylan (inkl. console)
  • Eiffel
  • Elm
  • Emacs Lisp
  • Email
  • Erlang (inkl. Shell-Sitzungen)
  • Ezhil
  • Factor
  • Fancy
  • Fantom
  • Fennel
  • FloScript
  • Forth
  • Fortran
  • FreeFEM++
  • F#
  • GAP
  • Gherkin (Cucumber)
  • GLSL Shader
  • Golo
  • Gosu
  • Groovy
  • Haskell (inkl. Literate Haskell)
  • HLSL
  • HSpec
  • Hy
  • IDL
  • Idris (inkl. Literate Idris)
  • Igor Pro
  • Io
  • Jags
  • Java
  • JavaScript
  • Jasmin
  • Jcl
  • Julia
  • Kotlin
  • Lasso (inkl. templating)
  • Limbo
  • LiveScript
  • Logtalk
  • Logos
  • Lua
  • Mathematica
  • Matlab
  • Modelica
  • Modula-2
  • Monkey
  • Monte
  • MoonScript
  • Mosel
  • MuPad
  • NASM
  • Nemerle
  • NesC
  • NewLISP
  • Nimrod
  • Nit
  • Notmuch
  • NuSMV
  • Objective-C
  • Objective-J
  • Octave
  • OCaml
  • Opa
  • OpenCOBOL
  • ParaSail
  • Pawn
  • PHP
  • Perl 5
  • Pike
  • Pony
  • PovRay
  • PostScript
  • PowerShell
  • Praat
  • Prolog
  • Python (inkl. Konsolensitzungen und Tracebacks)
  • QBasic
  • Racket
  • Raku a.k.a. Perl 6
  • REBOL
  • Red
  • Redcode
  • Rexx
  • Ride
  • Ruby (inkl. irb sessions)
  • Rust
  • S, S-Plus, R
  • Scala
  • Scdoc
  • Scheme
  • Scilab
  • SGF
  • Shell-Skripte (Bash, Tcsh, Fish)
  • Shen
  • Silver
  • Slash
  • Slurm
  • Smalltalk
  • SNOBOL
  • Snowball
  • Solidity
  • SourcePawn
  • Stan
  • Standard ML
  • Stata
  • Swift
  • Swig
  • SuperCollider
  • Tcl
  • Tera Term language
  • TypeScript
  • TypoScript
  • USD
  • Unicon
  • Urbiscript
  • Vala
  • VBScript
  • Verilog, SystemVerilog
  • VHDL
  • Visual Basic.NET
  • Visual FoxPro
  • Whiley
  • Xtend
  • XQuery
  • Zeek
  • Zephir
  • Zig

Template-Sprachen

  • Angular Templates
  • Cheetah Templats
  • ColdFusion
  • Django/Jinja Templates
  • ERB (Ruby templating)
  • Evoque
  • Genshi (die Trac Template Language)
  • Handlebars
  • JSP (Java Server Pages)
  • Liquid
  • Myghty (das HTML::Mason basierte Framework)
  • Mako (der Nachfolger von Myghty)
  • Slim
  • Smarty Templates (PHP templating)
  • Tea
  • Twig

Andere Markup-Sprachen

  • Apache Konfigurationsdateien
  • Apache Pig
  • BBCode
  • CapDL
  • Cap'n Proto
  • CMake
  • Csound Partituren
  • CSS
  • Debian Kontrolldateien
  • Diff-Dateien
  • Dockerfiles
  • DTD
  • EBNF
  • E-Mail Kopfzeilen
  • Extempore
  • Flatline
  • Gettext-Kataloge
  • Gnuplot-Skript
  • Groff-Markup
  • Hexdumps
  • HTML
  • HTTP-Sitzungen
  • IDL
  • Inform
  • INI-style Konfigurationsdateien
  • IRC logs (irssi-Style)
  • Isabelle
  • JSGF-Notation
  • JSON, JSON-LD
  • Lean theorem prover
  • Lighttpd Konfigurationsdateien
  • Linux Kernel logs (dmesg)
  • LLVM assembly
  • LSL-Skripte
  • Makefiles
  • MoinMoin/Trac Wiki Markup
  • MQL
  • MySQL
  • NCAR Befehlssprache
  • Nginx Konfigurationsdateien
  • Nix-Sprache
  • NSIS-Skripte
  • Notmuch
  • POV-Ray-Szenen
  • Puppet
  • QML
  • Ragel
  • Redcode
  • ReST
  • Roboconf
  • Robot Framework
  • RPM spec-Dateien
  • Rql
  • RSL
  • Scdoc
  • SPARQL
  • SQL, auch MySQL, SQLite
  • Squid-Konfiguration
  • TADS 3
  • Terraform
  • TeX
  • Thrift
  • TOML
  • Treetop-Grammatiken
  • USD (Universal Scene Description)
  • Varnish-Configs
  • VGL
  • Vim Script
  • WDiff
  • Windows-Batch-Dateien
  • XML
  • XSLT
  • YAML
  • Windows Registry-Dateien
Seit MediaWiki 1.37 wurden mit dem Update von Pygments auf Version 2.10.0 weitere Lexer hinzugefügt, wie in task T280117 beschrieben.
  • ansys
  • apdl
  • asc
  • gcode
  • golang === go
  • gsql
  • jslt
  • julia-repl
  • kuin
  • meson
  • nestedtext
  • nodejsrepl
  • nt
  • omg-idl
  • output
  • pem
  • procfile
  • pwsh
  • smithy
  • teal
  • thingsdb
  • ti
  • wast
  • wat

Bisher von GeSHi unterstützte Lexer

Anschließend folgt eine unvollständige Liste mit Sprachen, die GeSHi hervorheben konnte. Sprachen, die seit der Umstellung auf Pygments nicht mehr unterstützt werden, sind durchgestrichen.

Bisher von GeSHi unterstützte Lexer
Code Sprache
4cs GADV 4CS
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 ActionScript3
ada Ada
algol68 ALGOL 68
apache Apache Configuration
applescript AppleScript
apt_sources Apt sources
arm ARM Assembler
asm Assembly
asp Active Server Pages (ASP)
asymptote Asymptote
autoconf Autoconf
autohotkey AutoHotkey
autoit AutoIt
avisynth AviSynth
awk AWK
bascomavr BASCOM AVR
bash Bash
basic4gl Basic4GL
bf Brainfuck
bibtex BibTeX
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
cil Common Intermediate Language (CIL)
clojure Clojure
cmake CMake
cobol COBOL
coffeescript CoffeeScript
cpp C++
cpp-qt C++ (Qt toolkit)
csh C shell
csharp C#
css Cascading Style Sheets (CSS)
cuesheet Cue sheet
d D
dart Dart
dcl Data Control Language
dcpu16 DCPU-16
dcs Data Conversion System
delphi Delphi
diff Diff
div DIV
dosbatch DOS batch file
dot DOT
e E
ebnf Extended Backus–Naur Form
ecmascript ECMAScript
eiffel Eiffel
email Email (mbox \ eml \ RFC format)
epc Enerscript
erlang Erlang
euphoria Euphoria
f1 Formula One
falcon Falcon
fo FO
fortran Fortran
freebasic FreeBASIC
freeswitch FreeSWITCH
fsharp Fsharp
gambas Gambas
gdb GDB
genero Genero
genie Genie
gettext gettext
glsl OpenGL Shading Language (GLSL)
gml Game Maker Language (GML)
gnuplot gnuplot
go Go
groovy Groovy
gwbasic GW-BASIC
haskell Haskell
haxe Haxe
hicest HicEst
hq9plus HQ9+
html4strict HTML (use "html" instead)
html5 HTML5 (use "html" instead)
icon Icon
idl Uno IDL
ini INI
inno Inno
intercal INTERCAL
io Io
j J
java Java
java5 Java(TM) 2 Platform Standard Edition 5.0
javascript JavaScript
jquery jQuery
kixtart KiXtart
klonec Klone C
klonecpp Klone C++
kotlin Kotlin
ksh Korn shell
latex LaTeX
lb Liberty BASIC
ldif LDAP Data Interchange Format
lisp Lisp
llvm LLVM
locobasic Locomotive BASIC
logtalk Logtalk
lolcode LOLCODE
lotusformulas Formula language
lotusscript LotusScript
lscript LightWave 3D
lsl2 Linden Scripting Language
lua Lua
magiksf Magik
m68k Motorola 68000 Assembler
make make
mapbasic MapBasic
matlab MATLAB M
mirc mIRC scripting language
mmix MMIX
modula2 Modula-2
modula3 Modula-3
mpasm Microchip Assembler
mxml MXML
mysql MySQL
nagios Nagios
netrexx NetRexx
newlisp NewLISP
nsis Nullsoft Scriptable Install System (NSIS)
oberon2 Oberon-2
objc Objective-C
objeck Objeck
ocaml OCaml
ocaml-brief OCaml
octave Octave
oobas LibreOffice/OpenOffice.org Basic
oorexx Object REXX
oracle11 Oracle 11 SQL
oracle8 Oracle 8 SQL
oxygene Oxygene
oz Oz
parasail ParaSail
parigp PARI/GP
pascal Pascal
pcre Perl Compatible Regular Expressions
per per
perlpl
Perl
perl6
pl6
raku
Perl 6
pf PF
php PHP
php-brief PHP (deprecated – no colors, odd framing)
pic16 PIC assembly language
pike Pike
pixelbender Pixel Bender
pli PL/I
plsql PL/SQL
postgresql PostgreSQL
postscript PostScript
povray Persistence of Vision Raytracer
powerbuilder PowerBuilder
powershell Windows PowerShell
proftpd ProFTPD
progress OpenEdge Advanced Business Language
prolog Prolog
properties Properties file
providex ProvideX
purebasic PureBasic
pycon Python
pys60 PyS60
python
py
python3
py3
Python
python2
py2
Python 2
q Q
qbasic QBasic/QuickBASIC
rails Rails
rebol Rebol
reg Windows Registry
rexx Rexx
robots robots.txt
rpmspec RPM Spec files
rsplus R
ruby Ruby (Programmiersprache)
sas SAS
scala Scala
scheme Scheme
sh
shell
shell-session
Shell Script (POSIX)
scilab Scilab
sdlbasic SdlBasic
smalltalk Smalltalk
smarty Smarty
spark SPARK
sparql SPARQL
sql SQL
stonescript StoneScript (Scripting language for ShiVa3D)
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
uscript UnrealScript
vala Vala
vb Visual Basic
vbnet Visual Basic .NET
vedit VEDIT
verilog Verilog
vhdl VHDL
vim Vim script
visualfoxpro Visual FoxPro
visualprolog Visual Prolog
whitespace Whitespace
whois Whois
winbatch Winbatch
xml XML
xorg_conf Xorg.conf
yaml YAML
xpp Microsoft Dynamics AX
z80 ZiLOG Z80 Assembler
zxbasic ZXBasic

Installation

Die Version dieser Erweiterung, die in Mediawiki 1.31 enthalten ist, benötigt Python in der Version 3 (python3) auf dem Server installiert. Dadurch unterscheidet sie sich von der Version, die in Mediawiki 1.30 enthalten war, welche Python in Version 2 (python) verwendete. Zu beachten ist, dass die Python3-Binary im Ausführungspfad des PHP-Interpreters installiert sein muss (PATH-Variable).
Trotz der Umstellung auf Pygments (und weg von GeSHi) und trotz des neuen Namens benutzt diese Erweiterung intern immer noch die alten Dateinamen, wie unten beschrieben.
  • Die Erweiterung herunterladen und die Datei(en) in ein Verzeichnis namens SyntaxHighlight_GeSHi im Ordner extensions/ ablegen.
    Entwickler und Code-Beitragende sollten stattdessen die Erweiterung von Git installieren, mit:cd extensions/
    git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/SyntaxHighlight_GeSHi
  • Wird von git aus installiert, ist Composer auszuführen, um PHP-Abhängigkeiten zu installieren, indem composer install --no-dev im Erweiterungsverzeichnis ausgeführt wird. (Siehe task T173141 für mögliche Komplikationen.)
  • Folgenden Code am Ende deiner LocalSettings.php -Datei einfügen:
    wfLoadExtension( 'SyntaxHighlight_GeSHi' );
    
  • in Linux müssen Ausführungsberechtigungen für die "pygmentize"-Binary gesetzt werden. Dafür kann man einen FTP-Client oder den folgenden Shell-Befehl verwenden:
chmod a+x /path/to/extensions/SyntaxHighlight_GeSHi/pygments/pygmentize
  • Yes Erledigt – Navigiere zu Special:Version in deinem Wiki, um zu überprüfen, ob die Erweiterung erfolgreich installiert wurde.


Vagrant-Installation:

  • Wird Vagrant benutzt, ist mit vagrant roles enable syntaxhighlight --provision zu installieren
Wenn von Git installiert wird, bitte beachten, dass diese Erweiterung von MediaWiki 1.26 bis MediaWiki 1.31 Composer benötigt.

Nach der Installation via Git wechselt man in das Verzeichnis, das die Erweiterung beinhaltet, z.B. "../extensions/SyntaxHighlight_GeSHi/" und führt composer install --no-dev aus, oder bei einem Update composer update --no-dev.

Als bevorzugte Alternative kann die Zeile "extensions/SyntaxHighlight_GeSHi/composer.json" in die "composer.local.json"-Datei im root-Verzeichnis des Wikis eingetragen werden, z.B. so
{
	"extra": {
		"merge-plugin": {
			"include": [
				"extensions/SyntaxHighlight_GeSHi/composer.json"
			]
		}
	}
}
Jetzt folgendes ausführen: composer update --no-dev Voilà!
Warnung Warnung: Wenn die Erweiterung über FTP hochgeladen wird, sollte sichergestellt werden, dass die Datei "pygments/pygmentize" mit dem Transfertyp "binär" hochgeladen wird.

Konfiguration

$wgSyntaxHighlightMaxLines and $wgSyntaxHighlightMaxBytes (optional): For performance reasons, blobs or pages (JS, Lua and CSS pages) larger than these values will not be highlighted. (since 1.40)

Linux
  • $wgPygmentizePath (optional): Absoluter Pfad zu "pygmentize" aus dem Pygments-Paket. Die Erweiterung beinhaltet das Pygments-Paket und $wgPygmentizePath zeigt standardmäßig auf die mitgelieferte Version. Man kann jedoch auf eine andere Version zeigen, wenn man will. Zum Beispiel: $wgPygmentizePath = "/usr/local/bin/pygmentize";.
Windows
  • Wenn das Mediawiki auf einer Windows-Maschine gehostet wird, muss der Pfad zur Pygmentize.exe gesetzt werden: $wgPygmentizePath = "c:\\Python27\\Scripts\\pygmentize.exe";
    • Wenn es keine pygmentize.exe gibt, muss easy_install Pygments per Kommandozeile von innerhalb des Scripts-Verzeichnisses ausgeführt werden, um die Datei zu erzeugen.

Wenn die mitgelieferte pygmentize-Binary (extensions/SyntaxHighlight_GeSHi/pygments/pygmentize) verwendet wird, muss sichergestellt werden, dass der Webserver die Berechtigung hat, sie auszuführen. Wenn der Host es nicht gestattet, ausführbare Dateien im Webverzeichnis zu hinterlegen, muss python-pygments installiert werden und $wgPygmentizePath = pygmentize in LocalSettings.php gesetzt werden.

Fehlerbehebung

Einige Benutzer berichteten von Problemen mit der Erweiterung nach einem Update auf MediaWiki 1.26 oder höher. Es gab Fälle, wenn Sprachen wie Lua nicht hervorgehoben wurden und wenn Debugging angeschaltet wurde, schmiss MediaWiki den Fehler Notice: Failed to invoke Pygments: /usr/bin/env: python3: No such file or directory.

  • Versuche, $wgPygmentizePath in der LocalSettings.php auf eine externe pygmentize-Binary zeigen zu lassen.
  • In Shared-Hosting-Umgebungen mit cPanel kann dies durch das Einrichten einer neuen Python-Anwendung über das Menü „Setup Python App“ und die Aktivierung der virtuellen Umgebung für die Anwendung über SSH (source /virtualenv/python/3.5/bin/activate) erfolgen. Danach kann das Modul Pygments [1] zur Python-Anwendung hinzugefügt werden. Dazu zum Pfad der virtuellen Umgebung (cd virtualenv/python/3.5/bin/) navigieren, Pygments herunterladen und installieren (./pip install Pygments) und dann das Modul durch Hinzufügen von „Pygments“ unter dem Abschnitt „Vorhandene Anwendungen“ im Menü „Python-Anwendung einrichten“ aktivieren. Dadurch wird die erforderliche Datei im folgenden Pfad erstellt: virtualenv/python/3.5/bin/pygmentize
  • phab:T128993 enthält weitere Vorschläge und Informationen.
  • SELinux kann auch verhindern, dass die Erweiterung mit einem ähnlichen Fehler wie type=AVC msg=audit(1609598265.169:225924): avc: denied { execute } for pid=2360888 comm="bash" name="pygmentize" dev="dm-0" ino=50814399 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:httpd_user_content_t:s0 tclass=file permissive=0 in deinem audit.log erscheint. Das kann mit setsebool -P httpd_unified 1 erlaubt werden.
  • In früheren Versionen dieser Erweiterung hat Windows manchmal einen _Py_HashRandomization_Init-Fehler verursacht. Dies war ein Bug, bei dem die Windows-Umgebung nicht an Python-Aufrufe übergeben wurde. Ein Bugfix wurde in 1.40 veröffentlicht, mit Backports zu 1.38 und 1.39.

VisualEditor-Integration

Das Plugin ermöglicht direktes Editieren mit VisualEditor. Es öffnet sich ein PopUp, wenn ein User syntaxhighlight-Abschnitte bearbeiten will. Damit das funktioniert, muss VisualEditor von der neuesten Git-Version installiert und konfiguriert werden. Gleiches gilt für Parsoid. Diese Feature funktioniert willkürlich nicht mit älteren Parsoid-Versionen. Für Details, siehe Extension:SyntaxHighlight/VisualEditor

Erweitert

Anders als bei ‎<pre>- und ‎<code>-Tags muss (und sollte) hier bei HTML-Zeichen-Gebilden wie &nbsp; das &-Zeichen nicht mittels &amp; escaped werden. Wie beim ‎<pre>-Tag, aber anders als beim ‎<code>-Tag, muss bei Tags im Bereich (außer dem eigenen schließenden Tag) weder das <-Symbol als &lt; escaped werden, noch muss Wikitext mit einem ‎<nowiki>-Tag escaped werden.

Während ‎<pre> davon ausgeht, dass alle 8 Zeichen ein Tabstopp auftritt und Tabs tatsächlich mittels Leerzeichen dargestellt werden, wenn der gerenderte Text kopiert wird, benutzt ‎<syntaxhighlight> Tabstopps aus nur 4 Leerzeichen (außer Internet Explorer, welcher 8 benutzt) und bewahrt die Tabstopp-Zeichen im gerenderten Text; letzteres Verhalten kann durch Einschließen in ein ‎<span style="-moz-tab-size: nn; -o-tab-size: nn; tab-size: nn;">-Tag geändert werden (nicht ‎<div> und nicht durch Verwendung eines eigenen style-Attributs) Das -moz--Präfis wird für Firefox (ab Version 4.0 bis Version 90) benötigt und das -o--Präfix wird für Opera (ab Version 10.60 bis Version 15) benötigt.[2] (Beachten: Das Wiki-Editor-Kästchen geht von 8-Leerzeichen-Tabs aus.) Dies bezieht sich nur auf tastächlich auch gespeicherte Seiten; Vorschauen, die durch ein Editieren-Kästchen oder Special:ExpandTemplates erzeugt wurden, können abweichen.

Siehe auch

Fußnoten