はじめてのはてな
はてなの機能に興味が出てきたのでためしにはてなダイアリーしてみるテスト。
Python のソースも貼れるみたいなので、ためしに pyhighlight.py:Python ソースを HTML で色分け: つちのこ、のこのこ。 にて公開したソースを貼ってみます。
# -*- coding: utf-8 -*- u''' pyhighlight.py Python ソースの色分け表示 HTML 作成。 ''' import tokenize import codecs import keyword from xml.sax.saxutils import escape __author__ = 'kadotanimitsuru' __date__ = '2005-05-09' __license__ = 'public domain' __version__ = '1.0.0' _BUILTINS = dir(__builtins__) _STYLE = { 'definition':'color:#0000ff;', 'builtin':'color:#900090;', 'keyword':'color:#ff7700;', 'STRING':'color:#00aa00;', 'COMMENT':'color:#dd0000;', } def _name(token_type, token_string, pre_token, definition): '''-> (name, definition)''' name = tokenize.tok_name[token_type] if name == 'NAME': if keyword.iskeyword(token_string): name = 'keyword' if token_string in ('def', 'class'): return name, True elif token_string in _BUILTINS and pre_token != '.': name = 'builtin' elif definition: name = 'definition' return name, False def _convert(file_): t = tokenize.generate_tokens(file_.readline) data = [] old_row, old_col = (0,0) definition = False pre_token = '' for (token_type, token_string, (srow, scol), (erow, ecol), line) in t: name, definition = _name( token_type, token_string, pre_token, definition) pre_token = token_string # print '%3d,%2d %s\t%s' % (srow, scol, name, repr(token_string)) token_string = escape(token_string) if name in _STYLE: token_string = u'<span style="%s">%s</span>' % ( _STYLE[name], token_string) if old_row==srow: data.append(u' '*(scol-old_col)) else: data.append(u' '*scol) data.append(token_string) old_row, old_col = erow, ecol return ''.join(data) def html(filename, encoding='utf-8'): '''-> HTML body text''' style = ( 'overflow:auto;' 'border:2px inset silver;' 'padding:1ex;' 'line-height:125%;' 'font-size:small;' 'color:black;' 'background-color:white;' # 'font-family:Courier,monospace;' # フォントも IDLE のにするなら。 ) return u'<pre style="%s">\n%s</pre>' % ( style,_convert(codecs.open(filename,'r',encoding))) def make(filename, encoding='utf-8'): '''hoge.py -> hoge.py.html''' h = u'''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>%s</title> </head> <body> %s </body> </html>''' % (escape(filename), html(filename, encoding)) file(filename+'.html','wb').write(h.encode('utf-8')) if __name__=='__main__': import sys argv = sys.argv[1:] if argv: for i in argv: make(i) else: make('pyhighlight.py') # 好きに流用してください。