Last Updated on 2021-06-04 by Clay
一般我們撰寫程式碼時,如果我們是使用 IDE 來開發程式,那麼我們通常都會注意到我們的程式碼是『高亮』(Highlight) 的。這是由於在 IDE 當中另外有著使用『正規表示式』(Regular Expression) 替 Keyword 上色的程式。
那我們要如何替自己的程式碼上色呢?這時候,我們可以使用 Pygments 這個方便好用的工具!
以下引用自 Wiki:
Pygments是一個著名的語法高亮工具,它使用Python程式語言實現。目前Pygments支持超過300種語言或文本格式的語法高亮。Pygments同時也曾被GitHub、Bitbucket、Phabricator等著名項目用作於其語法高亮工具。
Wiki 中關於 Pygments 的簡介
那麼,我們該怎麼使用 Pygments 呢?以下我就簡單地紀錄使用流程。我們這就開始吧!
安裝
若是在電腦中從未安裝過 Pygments,那麼我們就需要使用以下指令安裝:
sudo pip3 install Pygments
使用流程
基本上,要使用 Pygments 需要決定三種輸出參數,分別為:
- Lexer (語法器): 決定 Highlight 的是什麼語言
- Style: 決定以什麼樣的風格進行 Highlight
- Formatter: 輸出格式
那麼,我們就一步步地來看吧!
Lexer 語法分析器
首先,我們要決定我們要 Highlight 的是什麼語言。在這之前,我們可以先看一下 Pygments 支援哪些語言。
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
接下來,我們便來決定程式碼要用什麼樣的樣式來進行 Highlight。順帶一提,我在 Blog 上的程式碼目前都是用 "native" 這種風格來 Highlight 的呢。
那麼,我們來看看到底有多少種 Style 吧!
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
Formatter
Pygments 的輸出格式有非常多種,以下我們就分別解釋經典的『HTML 格式』以及『Image 格式』吧!
首先是輸出成 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:
使用網頁打開,我們便會看到結果:
使用圖片輸出的格式也一樣,唯一的差別在於圖片的寫入是二進制的,所以要用 "wb" 模式:
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:
如果出現了以下的報錯:
pygments.formatters.img.PilNotAvailable: Python Imaging Library is required for this formatter
那麼便使用以下指令安裝 Pillow 即可:
sudo pip3 install Pillow
References
https://pygments.org/docs/quickstart/
還有許多的參數以及使用方法我並沒有紀錄在文章中,這些都可以在以上網站中查到,可以多多參考。