2012年8月21日
Plack::App::Directory::Markdownが便利な件
https://metacpan.org/release/Plack-App-Directory-Markdown
自作自演乙。
意識の高いエンジニアの皆さんなら、markdown形式でメモを残しているんじゃないでしょうか。
plackup -MPlack::App::Directory::Markdown -e 'Plack::App::Directory::Markdown->new->to_app'
のような感じで、ディレクトリ内のmarkdownファイルの一覧を出してくれるとともに、markdownファイルはhtmlに変換して出力してくれます。皆さんが見飽きたBootstrapデザインになっております。
padm とかでalias作るときっと楽ですね。
alias padm="plackup -MPlack::App::Directory::Markdown \
-e 'Plack::App::Directory::Markdown->new->to_app'"
コンストラクタにmarkdown_classを渡せるようになっているのがちょっとしたおしゃれポイントです。Text::Markdownがデフォルトです。こんな仕様にしたのは個人的にText::Markdown::Discountを使いたかったってのが大きな理由です。
DiscountはCで書かれたMarkdown実装+拡張で、割と精力的に開発がおこなわれており、Perl、Python、Ruby、Lua、Haskell等のあらゆる言語のバインディングもあるので面白いんじゃないでしょうか。微妙な記法もありますが、github flavored markdownやPHP Markdown Extraの記法なんかも鋭意取り入れているようです。ググラビリティが低くて困ります。
また、Dataセクション内のデフォルトのXslateテンプレートが気に喰わない場合はtx_pathにテンプレートのパスを渡すことで差し替えることが可能です。その場合index.tx、md.txの2つのテンプレートを用意してください。
Xslateがpathにhashrefでファイルのマップを渡せるようになっているので、こういうふうに簡単にテンプレートを上書きできる仕組みが作れて、Xslateマジ便利ですね。
XslateのData::Section::Simple連携の仕組みに関してはgfxのエントリにも書いてありますが、@tokuhiromに教えてもらいました。tokuhirom++
ちなみに、使われているCSSやJS、画像等はPlack::App::Directory::Markdown::StaticというファイルのDataSectioにpackされており、それをPATHに応じて返する作りになっています。こういうちょっとしたアプリケーションを配布するときにこの仕組みは便利なんじゃないかと思って、もうちょっと汎用化してからまたCPANに上げるかもしれません。