Pythonのソースをカラー表示
tokenizeモジュールを使ってpython組み込み関数に色をつけてみました。
-
- -
colorizesource.py
import sys import keyword import token, tokenize filename = sys.argv[0] if len(sys.argv) > 1: filename = sys.argv[1] token_colors = { token.NUMBER: '#0080C0', token.OP: '#0000C0', token.STRING: '#004080', tokenize.COMMENT: '#008000', token.NAME: '#A00000', token.ERRORTOKEN: '#FF8080', } # parse source source = [line.rstrip("\n") for line in open(filename).readlines()] pos, row = 0, 1 for t in tokenize.generate_tokens(open(filename).readline): tok_type, tok_text, (st_row, st_col), (ed_row, ed_col), line = t if tok_type in token_colors: if tok_type == token.NAME and keyword.iskeyword(tok_text) == False: continue if row != st_row: pos, row = 0, st_row st_col += pos ed_col += pos st_tag = '<font color="%s">' % token_colors[tok_type] ed_tag = '</font>' source[row-1] = source[row-1][:st_col] + \ st_tag + tok_text.rstrip("\n") + ed_tag + \ source[row-1][ed_col:] pos += len(st_tag + ed_tag) # print colored source print "<pre>" for l in source: print l print "</pre>"
colorizesource.py test.py > test.htmlとかすると
# md5 checker import sys, md5 print md5.new(open(sys.argv[1], "rb").read()).hexdigest()
これが↑こんな感じに。。。↓
うぅっ・・・、かえって見づらい、、、おまけにはてなキーワード自動リンクが、、、
# md5 checker
import sys, md5
print md5.new(open(sys.argv[1], "rb").read()).hexdigest()
既知の問題点:
- 行をまたがったコメントなどのカラーリングを考慮してない
- コード中に含まれるhtmlのエスケープ処理をしてない
-
- -
2006.12.14追記
スーパーpre記法 シンタックス・ハイライトが実装された。
http://d.hatena.ne.jp/hatenadiary/20061215