Dev::Coder 在電梯裡遇見雙胞胎
首頁 | 關於我 | 筆記 // 當你開始尋找,你就已經在前往的路上...

AsciiDoc 的 syntax highlighting 由 source 這個 filter plugin 來負責。

輸出 HTML 時,有多個 syntax highlighter 可供選擇,由 source-highlighter 這個 attribute 來指定:

  • GNU Source-highlight(預設)

    內部會呼叫 source-highlight 來做轉換。Ubuntu 下可以安裝 source-highlight 套件。

  • Highlight

    source-highlighter=highlight

    內部會呼叫 highlight 來做轉換,會吃 encoding attribute 的設定。Ubuntu 下可以安裝 highlight 套件。

  • Pygments(字體、配色都比較美觀)

    source-highlighter=pygments

    內部會呼叫 pygmentize 來做轉換,會吃 encoding attribute 的設定。Ubuntu 下可以安裝 python-pygments 套件。

    Note 不同於上面兩個 highlighters,文字的效果並非內嵌在 HTML 裡,必須要搭配 pygments.css 才會有效果,因此別忘了將 CSS 引進來。

例如:

[source,python,numbered]
--------------------------------------------------------------------------------
if __name__ == '__main__':
    print 'Hello, World!'
--------------------------------------------------------------------------------

用 Pygments 輸出的效果:

1
2
3
4
5
def main():
    print 'Hello, World!'

if __name__ == '__main__':
    main()

其中 [source,python,numbered] 依序對應下面 3 個不同的 block attributes:

  • style - 固定填上 source,表示要用 source filter 來處理這個 block。

  • language - 用來識別程式語言,這裡要填的值會依 highlighter 不同而異。

    如果採用 Pygments 的話,可以參考這裡,常用的有:pythonpycon (Python console)、python3rubyirbjavascripthtmljavagroovyshconsole (shell sessions)、batxmldiff (unified diff)、inicobjcc# (或 csharp)、json 等。

    Tip 完整的 lexers 清單也可以用 pygmentize -L lexers 取得。
  • src_numbered - 預設不輸出行號,如果需要的話,可以填上 numbered

更多 Pygments 的例子:

[source,pycon]
--------------------------------------------------------------------------------
>>> def say_hello():
...     print 'Hello, World!' # <1>
...
>>> say_hello()
Hello, World!
>>>
--------------------------------------------------------------------------------
<1> 注意 link:../writing/callouts.html[callout] 要放在該程式語言的註解裡,才不會造成 highlighter 的混淆。
>>> def say_hello():
...     print 'Hello, World!' # 1
...
>>> say_hello()
Hello, World!
1 注意 callout 要放在該程式語言的註解裡,才不會造成 highlighter 的混淆。

覺得這份文件有幫助?別忘了按個讚並分享給更多的人、留下你/您的意見...

comments powered by Disqus