Extension:SyntaxHighlight

From mediawiki.org
Jump to navigation Jump to search
This page is a translated version of the page Extension:SyntaxHighlight and the translation is 99% complete.
Other languages:
Deutsch • ‎English • ‎Türkçe • ‎dansk • ‎español • ‎français • ‎magyar • ‎беларуская (тарашкевіца)‎ • ‎русский • ‎українська • ‎中文 • ‎日本語 • ‎한국어
Diese Erweiterung ist üblicherweise in MediaWiki 1.21 und darüber enthalten. Daher muss sie nicht erneut heruntergeladen werden. Allerdings müssen die folgenden Anweisungen trotzdem beachtet werden.
Zum Hervorheben von Syntax in Wikicode bei Verwendung des Source-Editors siehe die CodeMirror Erweiterung oder die Benutzerskripts von Remember the dot und Cacycle.
MediaWiki-Erweiterungen
OOjs UI icon advanced.svg
SyntaxHighlight
Freigabestatus: stabil
SyntaxHighlighting with Pygments.png
Einbindung Tag
Beschreibung Erlaubt die Hervorhebung von Syntax eines Quellcodes auf Wikiseiten
Autor(en)
  • Brion Vibber,
  • Tim Starling,
  • Rob Church,
  • Ori Livneh
Letzte Version continuous updates
Kompatibilitätspolitik master
MediaWiki 1.25+
Datenbankänderungen Nein
Lizenz GNU General Public License 2.0 or later
Herunterladen
README
  • $wgPygmentizePath
<syntaxhighlight>
Übersetze die SyntaxHighlight-Erweiterung, wenn sie auf translatewiki.net verfügbar ist
Prüfe die Benutzungs- und Versionsmatrix.
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.

Verwendung

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

1 def quick_sort(arr):
2 	less = []
3 	pivot_list = []
4 	more = []
5 	if len(arr) <= 1:
6 		return arr
7 	else:
8 		pass

ist das Ergebnis des folgenden Wikitext-Markups:

<syntaxhighlight lang="python" line='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.

1 def quick_sort(arr):
2 	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.

55 def quick_sort(arr):
56     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"). Zu beachten ist, dass die Zeilennummernangabe jegliche Renummerierung der angezeigten Zeilne durch das start-Attribut ignoriert.

3 def quick_sort(arr):
4     less = []
5     pivot_list = []
6     more = []
7     if len(arr) <= 1:
8         return arr

ist das Ergebnis von

<syntaxhighlight lang="python" highlight="1,5-7" start='3' line>
..
</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. Das enclose="none"-Attribut resultiert für Abwärtskompatibilität im gleichen Verhalten.

Note that using the "enclose" parameter is deprecated; if set to "none", it should be replaced with inline; otherwise, it can be removed entirely.

Zu beachten ist, dass Zeilenumbrüche an irgendeiner Stelle zwischen dem Öffnen und Schließen der Tags stehen können, außer der Quellcode ist mit class="nowrap" (auf Wikis die dies unterstützen, siehe unten) oder style=white-space:nowrap als nicht umbrechbar 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

With 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>

Unterstützte Sprachen

Die Pygments-Bibliothek bietet Unterstützung für hunderte Programmiersprachen und Dateiformate. Die vollständige Liste mit 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
  • 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

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

Für genaue Sprachcodes, siehe komplette Details im Pygments-Dokument und es gibt auch ein paar Zuordnungen für Sprachnamen, welche von GeSHi unterstützt wurden (vollständige Liste)

Pygments stellt noch keinen "wikitext"- oder "mediawiki"-Lexer zur Verfügung (phab:T29828). Stattdessen kann "html+handlebars" oder "moin" verwendet werden.

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.

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.
  • 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 der LocalSettings.php hinzufü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 – Zu Special:Version in dem Wiki (bei Einstellung auf deutsch nach Spezial:Version) navigieren, um die erfolgreiche Installierung der Erweiterung zu überprüfen.

Für Benutzer, die MediaWiki in der Version 1.24 und früher betreiben:

Die oben stehenden Anweisungen beschreiben die neue Installationsanweisung für diese Erweiterung unter der Verwendung von wfLoadExtension(). Wird diese Erweiterung in einer dieser früheren Versionen (MediaWiki 1.24 und früher)  – an Stelle von wfLoadExtension( 'SyntaxHighlight_GeSHi' ); – installiert, benutze:

require_once "$IP/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php";
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

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";.
  • $wgSyntaxHighlightModels: Setzt den Standard-Lexer für einige Wikiseiten. Standardmäßig wird dies JavaScript und CSS-Seiten highlighten. Zusätzliche Content-Modelle können mittels Erweiterungen konfiguriert werden (z.B. Lua, JSON, ...). Beispiel:
     $wgSyntaxHighlightModels[CONTENT_MODEL_SCRIBUNTO] = 'lua';
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 environments with cPanel, this can be done by setting up a new Python application through the "Setup Python App" menu, and activating the virtual environment for the app through SSH (source /virtualenv/python/3.5/bin/activate). After this, the Pygments module can be added to the Python app, for which navigate to the virtual environment path (cd virtualenv/python/3.5/bin/), download and install Pygments (./pip install Pygments) and then activate the module by adding "Pygments" under the "Existing applications" section of the "Setup Python App" menu. This will create the required file at path: virtualenv/python/3.5/bin/pygmentize

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) 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