不過我不是用port install來裝。原因不明地,
> sudo port install py26-pygments
以後,不知道怎麼打開它。@@> pygmentize
> pygments
> py-pygments
> py26-pygments
等等的排列組合都試過了,但是就是不能用。
不知道是哪個地方跳針了還是如何? @@
最後解決的方法是去PyPI下載source code以後自己build就可以用了。(我的python版本=2.5.1)
> wget 'http://pypi.python.org/packages/source/P/Pygments/Pygments-1.2.2.tar.gz#md5=920e706a817437eae3a1406380421a3d'
> tar -xzf Pygments-1.2.2.tar.gz
> cd Pygments-1.2.2
> sudo python setup.py install
pygments有四個重要的元件:Lexers, Formatters, Filters和Styles。Lexers是source code parser;Formatters是output generator;Filters是針對特別需求時可以更改部份輸出結果用的工具;Styles是色彩字體等格式的定義。詳情可以參考Pygments Online Document中的Builtin components的部份。
(註:要使用有關圖檔的formatter都需要安裝PIL(Python Image Library)。build的方法幾乎和build pygments一模一樣。只是wget的target要換一下罷了。
> wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz
> tar -xf Imaging-1.1.7.tar
> cd Imaging-1.1.7
> sudo python setup.py install
)(註:在Mac上,style的定義檔存放在/Library/Python/2.5/site-packages/Pygments-1.2.2-py2.5.egg/pygments/styles/這裡面。劍心的twilight.py我就是直接賽進這邊就可以用了。)
pygmentize身上也有非常多參數可以下。最基本的兩個flag分別是
-f
和-o
。-f 可以指定要使用的formatter(也就是指定輸出格式);-o 則是和一般compiler一樣指定輸出檔名。當然,因為formatter本身就包含了format在內,所以也可以不要用-o,不過這樣一來就要自己做檔案輸出。以下兩個作法是等價的。> pygmentize -f html -o setup_c.html setup.c
> pygmentize -f html setup.c > setup_c.html
-O
可以進一步設定lexer和formatter的選項。-O可以一次接受複數個選項,但是這也造成了-O不能接受含有","或"="的選項。因此也就有了-P
的出現,-P一次只能吃一個選項參數,但是選項參數中就可以包含","或"="。> pygmentize -f html -O full,style=twilight,linenos=1 01.hs
> pygmentize -f html -P "heading=Pygments, the Python highlighter" full,linenos=1 setup.py
相似於-O和-P, -F是用來在token stream上面增加filter用的。用法大概是這樣
-F keywordcase:case=upper,whitespace:spaces=True
、-F whitespace:spaces=True
。(註,這三個參數都可以重複一直使用。)
pygmentize預設只會生出資訊而不會把style的定義也一併輸出,也就是說,
> pygmentize -f html setup.py > test.html
用browser打開test.html以後會發現是黑白的。
因此我們可以用
> pygmentize -f html -S twilight -a .pygments > style.css
來取得名為twilight的style的css檔
還有, 參數
-N
可以查詢某source code的lexer。例如說
> pygmentize -N Makefile
會輸出make
。此外pygmentize也提供兩個flag,
-L
和-H
, 可以查詢lexers, formatters和filters的資訊(-L還可以查詢styles)。例如> pygmentize -L
會傾印lexers, formatters, filters和styles的資訊> pygmentize -L styles
會指定印出styles的資訊> pygmentize -H formatter html
會印出html的help info.這是測試的結果(原因不明的在blogger上面Line#和Code會有點錯開)
1 | import GHC.Conc |