で,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