Last Updated on 2021-06-08 by Clay
If we using IDE to develop the program, maybe you have noticed: the code we wrote is highlighted! This is because of there is a backend program to highlight our code automatically.
So, if we want to highlight our code by ourself, how do we do? We can use a useful Python package “Pygments”!
The following quote from the official website:
This is the home of Pygments. It is a generic syntax highlighter suitable for use in code hosting, forums, wikis or other applications that need to prettify source code. Highlights are:
https://pygments.org/
– a wide range of over 500 languages and other text formats is supported
– special attention is paid to details that increase highlighting quality
– support for new languages and formats are added easily;
most languages use a simple regex-based lexing mechanism
– a number of output formats is available, among them HTML, RTF, LaTeX and ANSI sequences
– it is usable as a command-line tool and as a library
So how do we use the Pygments? In the following article I will simply record the usage.
Installation
If you never install the Pygments in your computer, you need the following command:
sudo pip3 install Pygments
Instructions
To use Pygments you need to decide three parameters:
- Lexer: Decide what language you want to highlight
- Style: Decide what styles you want to use
- Formatter: output foramt
Lexer
First, we need to decide what programming language. But before we decide, we can take a look for the languages which are support.
from pygments import lexers for lexer in lexers.get_all_lexers(): print(lexer)
Output:
('ABAP', ('abap',), ('<em>.abap', '</em>.ABAP'), ('text/x-abap',)) ('APL', ('apl',), ('<em>.apl',), ()) ('ABNF', ('abnf',), ('</em>.abnf',), ('text/x-abnf',)) . . . ('Zeek', ('zeek', 'bro'), ('<em>.zeek', '</em>.bro'), ()) ('Zephir', ('zephir',), ('<em>.zep',), ()) </em> ('Zig', ('zig',), ('*.zig',), ('text/zig',))
Style
Just like the narrative above, we need to decide what style we want to use. By the way, I always use “native”.
from pygments.styles import get_all_styles # Style for s in get_all_styles(): print(s)
Output:
default
emacs
friendly
colorful
autumn
murphy
manni
monokai
perldoc
pastie
borland
trac
native
fruity
bw
vim
vs
tango
rrt
xcode
igor
paraiso-light
paraiso-dark
lovelace
algol
algol_nu
arduino
rainbow_dash
abap
solarized-dark
solarized-light
sas
stata
stata-light
stata-dark
inkpot
That’s all styles we can choose.
Formatter
The output formats of Pygments have many types you can choose. For example: “HTML” and “Image”.
First is “HTML”:
from pygments import highlight from pygments import lexers from pygments.formatters.html import HtmlFormatter from pygments.styles import get_style_by_name # Settings code = "print('Hello World!')" lexer = lexers.get_lexer_by_name('python') style = get_style_by_name('native') formatter = HtmlFormatter(full=True, style=style) # Highlight with open('test.html', 'w') as f: highlight(code, lexer, formatter, outfile=f)
Output:
And we can open the browser and see the result:
Image output format is the same usage. The obvious difference is that the writing of the picture is binary, so we need to use “wb” mode.
from pygments import highlight from pygments import lexers from pygments.formatters.img import ImageFormatter from pygments.styles import get_style_by_name # Settings code = "print('Hello World!')" lexer = lexers.get_lexer_by_name('python') style = get_style_by_name('native') formatter = ImageFormatter(full=True, style=style) # Highlight with open('test.png', 'wb') as f: f.write(highlight(code, lexer, formatter))
Output:
If the following error occurs:
pygments.formatters.img.PilNotAvailable: Python Imaging Library is required for this formatter
Then install Pillow using the following instructions:
sudo pip3 install Pillow