- apache
- 2013/10/11 08:47
mod_sundown 改め mod_hoedown を作りました
Apache モジュールのmod_sundown ですが、sundown 自体が非推奨となっているため sundown からフォークされた hoedown にマークダウンの処理変更することにしました。
sundown から hoedown への変更に伴い、Apache モジュールも改めてmod_hoedown として作り直しました。
関連記事:mod_sundown (markdown) という Apache モジュールを作ってみた
hoedown の独自拡張
hoedown はsundown からフォークされたプロジェクトになります。
詳細は Github の hoedown をご確認ください。
拡張
hoedown をそのまま使用しても良かったのですが、個人的に幾つか欲しい機能があったので独自に拡張させました。
拡張したソースは kjdev/hoedown になります。
特殊属性
PHP Markdown Extra の Special Attributes にあるように ID 付きの見出しやリンク等を作成できるようにしました。
## Header 1 {#header1} ## Header 2 {.header .second #header2} [link](url){#id .class} {#id .class}
項目の末尾に波括弧 ({}) で囲んで、ID 名、クラス名を指定します。
- ID 名: シャープ (#) から始まる文字列
- クラス 名: ドット (.) から始まる文字列
区切り文字は半角スペースになります。
有効にする場合は hoedown の extensions に HOEDOWN_EXT_SPECIAL_ATTRIBUTE
を指定してください。
改行削除
あ い う
のような文字列があった場合、通常の hoedown では
<p>あ い う</p>
のように変換されます。
これをブラウザで見ると「あ」と「い」、「い」と「う」の間に微妙に余白が空き嫌だったので改行を削除できるようにしました。
有効にして変換すると
<p>あいう</p>
となります。
英数字の場合は
a b c
改行の代わりに半角スペースになります。
<p>a b c</p>
有効にする場合は hoedown のレンダーオプションに HOEDOWN_HTML_SKIP_EOL
を指定してください。
(HOEDOWN_HTML_HARD_WRAP
と併用した場合は Hard Wrap の方が優先されます)
タスクリスト
GitHub Flavored Markdown と同じような出力ができるようにしました。
* [ ] Red * [x] Green * [ ] Blue
を変換すると
<ul> <li><input type="checkbox"> Red</li> <li><input checked="" type="checkbox"> Green</li> <li><input type="checkbox"> Blue</li> </ul>
となります。
有効にする場合は hoedown のレンダーオプションに HOEDOWN_HTML_USE_TASK_LIST
を指定してください。
目次 (Table of contents)
ID 属性の修正
hoedown のレンダーオプションに HOEDOWN_HTML_TOC
を指定するとヘッダに ID 属性が付与されるようになるのですが、デフォルトのままだと
# abc # あいう
は
<h1 id="abc">abc</h1> <h1 id="---------">あいう</h1>
のようになり、ヘッダに日本語等が含まれている場合はすべてハイフン (-) になり残念なことになってしまいます。
そこで少し修正して
<h1 id="abc">abc</h1> <h1 id="E38182E38184E38186">あいう</h1>
のように出力されるように変更しました。
目次のレンダリングオプションを追加
目次のレンダリングオプションに
- ヘッダー
- フッター
- 開始レベル
- 終了レベル
を指定できるようにしました。
ヘッダーとフッターは
options.toc_data.header = "<div class=\"toc\">"; options.toc_data.footer = "</div>";
のように指定すると hoedown_html_toc_renderer
の出力の前後に指定値が付与されます。
開始、終了レベルは目次の生成範囲を指定できます。
options.toc_data.starting_level = 2; options.toc_data.nesting_level = 4;
の場合は <h2>
から <h4>
を対象にして目次を生成します。
Apache モジュールの作成
拡張した hoedown をもとに Apache モジュールを作成します。
基本的には mod_sundown をもとにしますが、オプション指定を configure 時に行っていたのをやめ、Apache の設定ファイルで指定できるように変更しました。
configure オプションは --enable-hoedown-url-support
のみになります。
enable-hoedown-url-support
を指定すると url パラメータで外部のマークダウンファイルを取得して、表示することができます。
Apache の設定可能変数の一覧は次のものになります。
- HoedownDefaultPage
- HoedownDirectoryIndex
- HoedownStylePath
- HoedownStyleDefault
- HoedownStyleExtension
- HoedownClassUl
- HoedownClassOl
- HoedownClassTask
- HoedownTocHeader
- HoedownTocFooter
- HoedownTocStarting
- HoedownTocNesting
- HoedownRaw
- HoedownExtNoIntraEmphasis
- HoedownExtTables
- HoedownExtFencedCode
- HoedownExtAutolink
- HoedownExtStrikethrough
- HoedownExtUnderline
- HoedownExtSpaceHeaders
- HoedownExtSuperscript
- HoedownExtLaxSpacing
- HoedownExtDisableIndentedCode
- HoedownExtHighlight
- HoedownExtFootnotes
- HoedownExtQuote
- HoedownExtSpecialAttribute
- HoedownRenderSkipHtml
- HoedownRenderSkipStyle
- HoedownRenderSkipImages
- HoedownRenderSkipLinks
- HoedownRenderExpandTabs
- HoedownRenderSafelink
- HoedownRenderHardWrap
- HoedownRenderUseXhtml
- HoedownRenderEscape
- HoedownRenderPrettify
- HoedownRenderUseTaskList
- HoedownRenderSkipEol
- HoedownRenderToc
- HoedownRenderTocSkipEscape
出力のサンプルは設定サンプル をご確認ください。
ビルド
ビルドには apxs, apr, apreq2 が必要になります。(--enable-hoedown-url-support
オプションを有効にした場合は libcurl も必要)
% ./autogen.sh % ./configure % make % make install
パッケージ
CentOS / Fedora
CentOS と Fedora は RPMS に RPM パッケージを置いてあります。
yum コマンドを使用する場合は
$ rpm -ivh https://raw.github.com/kjdev/pkgs/master/fedora/19/noarch/kjdev-release-1.0.0-0.fc19.kjdev.noarch.rpm $ yum install mod_hoedown
のようにしてください。
RPM パッケージを直接ダウンロードしてインストールしても問題ありません。
CentOS の場合は libapreq2 も必要になります。
Ubuntu
PPA にて libapache2-mod-hoedown として公開させました。
% sudo add-apt-repository ppa:kamijo % sudo apt-get update % sudo apt-get install libapache2-mod-hoedown
kj