« IPython Notebook使ってみた。 | トップページ | TortoiseHgでDropbox上にリポジトリを置いてみる »

2013年1月31日 (木)

ココログでpygmentsを使ってコードのハイライト

from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter

def py2htmlcss(codeblock, basename='test', style='monokai'):
    
    with open(basename+'.html', 'w') as htmlfile:
        highlight(codeblock, PythonLexer(), HtmlFormatter(), htmlfile)

    with open(basename+'.css', 'w') as cssfile:
        CSS = HtmlFormatter(style=style).get_style_defs('.highlight')
        cssfile.write(CSS)

Pythonのライブラリであるpygmentsで出てきたHTMLとCSSを使ってココログに綺麗にコードを貼っつけるtestです。ハイライトされてない。。。

追記。そうか、HtmlFormatter(full=True)でフルオプションを指定して、スタイル指定を含んだHTMLを出力して、スタイルの部分をブログのサブタイトル(キャッチフレーズ)の部分に埋め込めばいいのか。(紆余曲折しましたが、ちゃんとカスカムCSSからできました。)

追記2。pygmentize.exeを使えば、こんなコード書かなくともよいのですね。まだmonokaiの背景色のグレーっぽい色が来ないなぁ。

追記3 HtmlFormatter(style='monokai')でmonokaiを指定すべきところ、あほでHtmlFormatter().get_style_defs('.monokai')なんてやっていたのでCSSに.monokaiというクラスの定義で60行できて、HTMLの方ではクラス名がデフォルトのhighlightになっているのがうまくいかない原因だった。

まとめ

普通はpygmentize.exeでやるのかもしれませんが、出てくるCSSが.hll { background-color: #49483e }からはじまっていて、.highlightを各行の頭に追加しないとhighlightのクラスだけに有効にしたいデザインが他のところにも影響してしまいます。

上のコードでやると、そのまま使えるHTMLとCSSが出てきます。

使い方:

codeblockに整形済みテキストでコードを渡すと、basenameで指定したファイル名でtest.htmlとかtest.cssとかができます。できたcssはそのままカスタムCSSに貼っつけ、あとはhtmlの方も記事そのままはっつけます。ちゃんとHTMLの編集タブの方に切り替えてから貼っつけましょう。わかってしまえば結構、簡単。

まあSyntaxHighlighterというjavascriptのライブラリを使うのが普通かもしれませんし、ココログでも使えるようです。どっちで行くかまよったんですが、pygmentsで先にレンダリングすると変換がないのでおそらくページの読み込みが速いのと、javascriptを切っていれもちゃんと見れるあたりがちょっと利点ですね。

追記4 コードに長い行があると右端で切れてしまうのでスクロールバーを足しました。CSSにpre { line-height: 125%; white-space: pre; overflow: auto; }を追加でうまくいきました。

« IPython Notebook使ってみた。 | トップページ | TortoiseHgでDropbox上にリポジトリを置いてみる »

Python」カテゴリの記事

ココログ」カテゴリの記事

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1169291/49068320

この記事へのトラックバック一覧です: ココログでpygmentsを使ってコードのハイライト:

« IPython Notebook使ってみた。 | トップページ | TortoiseHgでDropbox上にリポジトリを置いてみる »

広告欄


やっつけタイムライン

広告欄

はてブ

人目の訪問です。

  • follow us in feedly

    かなり更新が不定期なため、RSSリーダーをオススメします。現在Feedlyに122人登録頂いています。多謝!RSSを表示

    ブログランキング用 にほんブログ村 IT技術ブログ Pythonへ ブログランキングならblogram






    Jenny Mayhem
2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

IT技術注目記事

無料ブログはココログ