顯示具有 Pygments 標籤的文章。 顯示所有文章
顯示具有 Pygments 標籤的文章。 顯示所有文章

2011年4月20日 星期三

[note] Pygments, a review

因為被抱怨說看以前我那篇 [reStructuredText] Pygments Intro. & Install 東西還是跑不出來,所以就重裝一下順便看看現在有啥搞頭。

總之,我現在沒有在用 macport,而 homebrew 中沒有 pygments 可以裝。所以稍微奮鬥了一下看能不能暴力裝進 /usr/local/cell/pygments/1.4/ 裡面去。最後發現說,pygments 被當作 python 的一個 package,而硬是給我裝到 /Library/Python/2.6/site-packages 裡面去。好吧,既然 cabal 下面灌的 agda 我沒做 brew link,這個我看也算了。一方面是懶惰,另一方面是想說趕快看是為什麼不能用。

前言結束


補充一點

首先,為了避免有人和我說沒有 twilight 可以用,先扯一下 style 的事情:
請在 /Library/Python/2.6/site-packages/Pygments-1.4-py2.6.egg/pygments/styles/ 下面開一個檔案叫做 twilight.py。然後把這篇裡面最下面的那一塊 twilight.py 的內容複製並且貼進去自己的 twilight.py 檔案中。


正文開始

基本上和以前沒差多少嘛,到底是哪哩不能用 T▽T

> pygmentize -f html -o out.html -O full,style=twilight,linenos=1 p.hs
-f html ≡ 指定輸出格式為 html [1]
-o out.html ≡ 指定輸出檔名
-O ≡ lexer 和 formatter 額外的設定
full ≡ 產生完整的 HTML 4 檔案
style=twilight ≡ 指定 style [2]
linenos=1 ≡ 開啟line number
p.hs ≡ 輸入的檔名

PS.
每個 formatter 可以用的參數不一樣
可以翻翻 formatter 的 source code
禮面會有寫,而且寫的蠻清楚的 [1]

不過上述的方法對於想要把 style 和 code 分開來的用的人來說,比較麻煩一點。因為變成要手動去把 html 中無關 code layout 的部份刪掉。因此就可以利用下面這種方式來輸出:

> pygmentize -f html -o skeleton.html p.hs
然後用 browser 打開 skeleton.html 以後會發現是黑白的。
而且用 editor 打開的話會發現他根本只有
換句話說這只是一個 html 的"片段"

所以我們可以用
> pygmentize -f html -S twilight > style.css
來取得名為twilight的style的css檔

然後打開之前輸出的 skeleton.html
補上 html, head, body 和 css 的 link
這樣就可以看見顏色了
(不過看不到 background color)


[1]
關於可以輸出的格式還有相對應的參數可以去這裡看看有哪些東西
/Library/Python/2.6/site-packages/Pygments-1.4-
py2.6.egg/pygments/formatters
[2]
關於可以 style 可以去這裡看看有哪些東西
/Library/Python/2.6/site-packages/Pygments-1.4-
py2.6.egg/pygments/styles

2010年2月3日 星期三

[reStructuredText] Pygments Intro. & Install

參考了劍心的這篇,也弄了pygments來用用看。

不過我不是用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
2
3
4
5
6
7
8
9
10
11
import GHC.Conc
import System.Info
import Text.Printf
import Data.Version

main = do
printf "Compiled with %s-%s on %s/%s\n"
compilerName
(showVersion compilerVersion)
os arch
printf "Running with %d OS threads\n" numCapabilities