Tuesday 11 February 2014

blogger でも (github flavored) markdown で syntax highlight 使いたい!

というわけで先日 html を syntaxhighlighter 表記に変換するのは書いたわけだけれど, まあなんと言うか甘やかされてというか, (github flavoured) markdown で書けたらええなとか思うようになり,早速書こうという.



で,python だしきっとモジュールあるでしょう,というので探すと stackoverflow に殆どそのままの記事があり (Github-Flavored-Markdown in Python - Stack Overflow), misaka というモジュールが紹介されているので (名前の由来が気になるところだ), これを使うことにする.いわく,
GitHub uses Redcarpet which is really a Ruby binding built by github for Sundown.
でこれの python binding が misaka, とのことだ.
…と思ったらこれまた manual に ほとんどそのままの例 があり,この例では言語指定があった場合には pygments でよしなに highlight することになってるのを,syntaxhighlighter を使う表記に書き換える.
class BleepRenderer(msk.HtmlRenderer, msk.SmartyPants):

    def block_code(self, text, lang):
        if not lang:
            return '<pre><code>{}</code></pre>'.format(
                        cgi.escape(text.strip()))
        return '<pre class="brush: {}">\n{}\n</pre>'.format(
                        lang, cgi.escape(text.strip()))
言語名指定がない場合は cgi.escape してやる感じに.まあこんな感じだろうか.あとは最後のほうのに従って
def convert(filename):
    renderer = BleepRenderer()
    md = msk.Markdown(renderer,
                extensions = msk.EXT_FENCED_CODE | msk.EXT_NO_INTRA_EMPHASIS)
    with open(filename, 'r') as f:
        md_to_convert = f.read()
    return md.render(md_to_convert)
でファイルを変換の形に.後は main をよしなに書けばよろしい.
$ md_to_synlighter foo.md
foo.conv.html ができる感じにしました.
これで記事書きがだいぶ楽になりました (emmet つかう好機でもあるわけだけど,どうしよう).

No comments:

Post a Comment