2013年6月18日 星期二

在Blogger上Highlight程式碼 (Blogger CSS設定, Pygments產生html, Appkit Paste Buffer)

動機:
  • 想在Blogger上放上程式碼,不想使用syntax highlight plugins,在Mac上可以直接使用程式碼轉成html貼上部落格上。
使用工具:
步驟:
  1. Blogger「範本設計工具」新增CSS。
  2. Pygments 產生程式碼有Highlight的html。
  3. 使用PyObjC Appkit的剪貼簿複製Buffer。
  4. 程式碼貼到Blogger上。
Blogger「範本設計工具」新增CSS
from pygments.formatters import HtmlFormatter

print HtmlFormatter().get_style_defs('.highlight')
把印出來的CSS貼到Blogger的範本設計工具(範本>自定>進階>自定CSS)


Pygments 產生程式碼有Highlight的html
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter

code = u'print "Hello World!!"'
print highlight(code, PythonLexer(), HtmlFormatter())
會印出html這樣就可以貼上Blogger了!

使用PyObjC Appkit的剪貼簿複製Buffer

但~~每次都要去複製print出來的HTML實在非常麻
煩,如果程式碼很長你就要複製更多的HTML,身為一個程式設計師當然要找到解決的solution.
Solution就是用PyObjC的AppKit啦!!Apple的一些Framework接到python library!
以下就是複製與貼上的程式碼啦!:
from AppKit import *

def pbcopy(input_string):
    "Copy string argument to clipboard"
    newStr = Foundation.NSString.stringWithString_(input_string).nsstring()
    newData = newStr.dataUsingEncoding_(Foundation.NSUTF8StringEncoding)
    board = NSPasteboard.generalPasteboard()
    board.declareTypes_owner_([NSStringPboardType], None)
    board.setData_forType_(newData, NSStringPboardType)

def pbpaste():
    "Returns contents of clipboard"
    board = NSPasteboard.generalPasteboard()
    content = board.stringForType_(NSStringPboardType)
    return content

程式碼貼到Blogger上

最後就是在Blogger上打Command + v!打完收工。

P.S.上述程式碼都還滿容易的,有需要完整程式碼可以寫信給我!

沒有留言:

張貼留言