[[Vorlage(getestet, focal, bionic)]]

{{{#!vorlage Wissen
[:Pakete installieren: Installation von Programmen]
[:Terminal: Ein Terminal öffnen]
}}}

[[Inhaltsverzeichnis(1)]]
[[Bild(pygments_logo.png, align=left)]]
[http://pygments.org/ Pygments] {en} ist ein leistungsfähiges, in [:Python:] geschriebenes Programm zur Syntax-Hervorhebung. Das heißt, man übergibt Pygments eine Datei (z.B. den Quellcode eines Programms) und erhält als Ergebnis eine Datei, in der die Syntax-Elemente farbig hervorgehoben sind, was in der Regel die Lesbarkeit erhöht.

[http://ubuntuusers.de/inyoka/ Inyoka] verwendet Pygments zur Syntax-Hervorhebung, ebenso wie eine Reihe weiterer [https://pygments.org/faq/#who-uses-pygments Projekte] {en}.

= Installation =
== Paketquellen ==
Pygments ist in den Ubuntu-Quellen enthalten [1]:

{{{#!vorlage Paketinstallation
python3-pygments
}}}

== Manuell ==
[[Vorlage(pipinstallation, pygments)]]

= Nutzung =
Es gibt zwei Möglichkeiten, Pygments zu nutzen: Über das Kommandozeilen-Programm pygmentize oder über das Python-Modul.

== Pygmentize ==
Pygmentize ist das Kommandozeilen-Programm zu Pygments.

Die allgemeine Syntax lautet:

{{{#!vorlage Befehl
pygmentize -l LEXER -f FORMATTER [-O WEITERE_OPTIONEN] -o ZIELDATEI EINGABEDATEI
}}}

Zwingend ist dabei allerdings nur die `EINGABEDATEI`. Wird keine `AUSGABEDATEI` definiert erfolgt die Ausgabe auf stdout, also in der Regel den Bildschirm.

Die Option `-l` legt den Lexer fest. Dies bedeutet, dass man vorgibt, um welche Eingabedatei es sich handelt (Python-Code, HTML-Datei, Make-File usw.). Gibt man die Option nicht an, versucht Pygments anhand der Datei-Endung zu erraten, um welche Datei es sich handelt. Gibt man die Option `-g` an, so wird versucht, anhand des Datei-Inhalts die Art der Eingabedatei zu erraten.

Die Option `-f` gibt an, wie die `ZIELDATEI` formatiert werden soll. Zur Auswahl stehen eine Vielzahl von Ausgabeformaten wie HTML, LaTex, diverse Grafik-Formate usw.

Je nach Ausgabeformat stehen eine Reihe von Optionen zur Verfügung, die mit `-O OPTION` übergeben werden. Werden mehrere Optionen benötigt, kann man `-O` mehrfach angeben. Einen Überblick über die gängigen Optionen gibt es in der [http://pygments.org/docs/formatters/ Dokumentation] {en}.

Beispiel:

{{{#!vorlage Befehl
pygmentize -l python -f html -o codeseite.html quellcode.py
}}}

Dieser Befehl würde die Datei '''quellcode.py''' laden, den Code gemäß dem Python-Lexer hervorheben, die Ausgabe als HTML-Seite formatieren und in der Datei '''codeseite.html''' speichern. Allerdings wird so keine vollständige HTML-Seite erzeugt, sondern nur eine Teil (hauptsächlich `<div class="...">` und `<span class="..."`>, außerdem werden die CSS-Stile weder intern definiert noch eine externe CSS-Datei angelegt.

Der Befehl

{{{#!vorlage Befehl
pygmentize -l python -f html -O full -o codeseite.html quellcode.py
}}}

erzeugt eine vollständige HTML-Datei (also inkl. `<html>`,`<head>`,`<body>` usw.) mit intern definierten CSS-Stilen.

Über den Aufruf

{{{#!vorlage Befehl
pygmentize -l python -f html -O full -O cssfile="quellcode.css" -o codeseite.html quellcode.py
}}}

erhält man eine vollständige HTML-Datei und eine externe CCS-Datei mit dem Namen '''quellcode.css''', welche in der HTML-Dateie eingebunden wird.

Eine vollständige Übersicht über alle Lexer und Formatter erhält man über den Aufruf von

{{{#!vorlage Befehl
pygmentize -L
}}}

Pygmentize kennt noch eine Reihe weiterer Optionen, welche man in der [:man:Manpage] oder [http://pygments.org/docs/cmdline/ Online-Dokumentation]  {en} nachlesen kann.

== Python Modul ==
Mit der Installation von Pygments werden die entsprechenden Python-Module installiert.

Dieses können über den übliche Weg

{{{#!code python
import pygments
# alternativ
from pygments import ...
}}}

in Python geladen werden.

Auf der Projekte-Seite gibt es eine vollständige Übersicht über die [http://pygments.org/docs/api/ Pygments-API] {en}. Alle Funktionen, die '''pygmentize''' beherrscht stehen auch innerhalb von Python zur Verfügung.

= Links =
 * [http://pygments.org/docs/ Dokumentation] {en} zu Pygments
 * [http://pygments.org/demo/ Live-Demo] {en} von Pygments

#tag: Programmierung, Python