howmファイルをHTML変換する

howm2htmlでHTML変換する

howmファイルをHTML変換したい場合には「howm2html.vim」で変換が行えます。

QFixHowm用に設定して修正等を行ったhowm2html.vimが同梱されているので、これまでhowm2html.vimを使用していた場合は削除してください。

" HTMLファイル出力先 
let HowmHtml_htmldir = '~/path/to/html_dir'

cssは howm2html.css (html/howm2html.css)と peachpuff.css(コードハイライタを使用する場合)をHTML出力先へコピーして使用してください。(HowmHtml_htmldirがデフォルトの場合はコピーする必要はありません)

デザインはhowm2html.css を使用して変更可能です。

実際にhowm2html.jax(doc/howm2html.jax) を開いて変換してみてください。

こういうエントリを

このように 表示します。

変換可能なファイルタイプ

HTML変換可能なファイルタイプとしてデフォルトでは「qfix_memoファイルタイプ」が使えます。

qfix_memoは「はてな記法」のサブセット(独自拡張を含む)でMarkdown記法も一部取り込まれています。

また外部のHTML変換コマンドを使用してMarkdown等のファイル形式をHTML変換することも可能です。

コードハイライタ (スーパーpreのシンタックスハイライト)

howmメモにコード片を書くことはよくあると思いますが、これをシンタックスハイライト(色分け)してHTML変換することができます。

コード片のシンタックスハイライトはqfix_memo(デフォルト)とMarkdown形式の変換で有効で、Vimが対応しているファイルタイプなら何でもシンタックスハイライトされます。

スーパーpreをVimのsyntaxで変換することができます。

コードハイライタを有効にするにはHowmHtml_CodeHighlight を設定します。

" スーパーpreのコードハイライタを有効にする

let HowmHtml_CodeHighlight = 1

その後に howm2html.css と peachpuff.css をHTML出力先へコピーしてHTML変換するとスーパーpreは色付けして表示されます。(QFixHowmの場合は misc/css に同じファイルがあります)

howmファイル

>|vim|
" grep,tagsのためカレントディレクトリをファイルと同じディレクトリに移動する
if !exists('+autochdir')
  " autochdirが存在しないが、カレントディレクトリを移動したい場合
  au BufEnter * execute ":silent! lcd " . escape(expand("%:p:h"), ' ')
endif
||<

HTML変換後の表示(howm2html.css+peachpuff.css)

スーパーpre内のコードを filetype=vimとして変換して表示します

HTMLの表示(css)をカスタマイズ

howm2html.cssの * Decoration 以降は単なる装飾ですので削除するとほぼプレーンな状態になります。

気に入らない部分は適当に修正して好みのcssに変更してください。

HTML変換関数

HTML変換に使用する関数はHowmHtml_ConvertFuncで指定可能です。

明示的にqfix_memo(デフォルト)HTML変換関数を指定したい場合は以下を設定してください。

" デフォルトHTML変換関数
let HowmHtml_ConvertFunc = '<SID>HowmStr2HTML'

HowmHtml_ConvertFuncに独自の関数を指定することで好みのHTMLを作成することができます。

その他のHTML変換

なおMarkdownについては専用の変換関数が用意されています。

外部コマンドでのMarkdown変換

markdown.plpandocなどHTML変換を行う外部コマンドを使用してMarkdown等のファイル形式をHTML変換することも可能です。

Markdown形式のHTML変換

メモの書式にMarkdownを使用している場合は「HTML変換」で外部コマンドを使用したHTML変換が行えます。

" Markdownを外部コマンド使用でHTML変換
let HowmHtml_ConvertFunc = '<SID>MarkdownStr2HTML'

外部コマンドのデフォルトとして markdown.plを使用しますが、パスの通った場所に markdown.plがない場合はパスを指定してください。

" HTML変換用コマンド
let HowmHtml_ConvertCmd = 'path/to/markdown.pl'

Windowsで空白を含むパスに実行ファイルがある場合は " で囲ってください。

変換用コマンド

動作確認は公式のmarkdown.plとpandocで行いました。

余談ですが表(テーブル)と定義リストのフォーマットはmarkdown.plとpandocで異なるようなので気をつけて下さい。

markdown.pl

http://daringfireball.net/projects/markdown/

テーブルや定義リストが使えるパッチを適用したmarkdown.plでも動作確認しています。

http://www.sera.desuyo.net/komono/

http://daringfireball.net/projects/downloads/Markdown_1.0.2b8.tbz

pandocを利用して変換も可能です。

http://johnmacfarlane.net/pandoc/

" HTML変換用コマンド

let HowmHtml_ConvertCmd = '"C:/Program Files/Pandoc/bin/pandoc" -f markdown'

Windowsで空白を含むパスに実行ファイルがある場合は " で囲ってください。

特殊記法

Markdownの画像ファイルリンクは原寸表示しか行えませんが、howm2html.vimの独自処理として [: と :] で囲んだ画像ファイルはサムネイル化して変換することが可能です。

[:C:/temp/ほげ.jpg:]

またMarkdownのコード片はハイライト表示(色分け)されませんが >|hoge| と ||< でコードを囲むと「スーパーpreのシンタックスハイライト」として表示されます。

hogeにはコードハイライト対象のファイルタイプを指定してください。

>|vim|
function! hoge()
  " この関数はVimによるコードハイライトがそのまま使用されます
endfunction
||<

この場合は filetype=vim のコードとしてハイライト表示されます。

コードハイライトが反映されるためには howm2html.css と peachpuff.css をHTML出力先へコピーする必要があります。

その他のHTML変換

pandocなどHTML変換を行う外部コマンドを使用して任意のファイル形式をHTML変換することも可能です。

howm(qfix_memo)、Markdown以外のファイルタイプを外部コマンドで変換するために特殊処理を行わない変換関数が用意されています。

" HTML変換関数
let HowmHtml_ConvertFunc = '<SID>H2HStr2HTML'
たとえばpandocで reStructuredTextを変換するには以下のように設定します。
" HTML変換用コマンド
let HowmHtml_ConvertCmd = '"C:/Program Files/Pandoc/bin/pandoc" -f rst'

Windowsで空白を含むパスに実行ファイルがある場合は " で囲ってください。

独自の変換関数を作成する例

変換元のリストが渡されるので、外部コマンド mycommand でHTMLに変換したリストを取得して返します。

" HTML変換関数
let HowmHtml_ConvertFunc = 'MyStr2HTML' 
function! MyStr2HTML(list, htmlname, anchor)   let list = a:list
  " 渡されたリストのエンコーディングをutf-8に変換   let from = &enc   let to = 'utf-8'   if from != to     call map(list, 'iconv(v:val, from, to)')   endif 
  " リストをファイルに書き出して外部コマンドで変換
  let mkdfile = tempname()
  call writefile(list, mkdfile)   let cmd = 'mycommand '.mkdfile   let html = split(system(cmd), '[\r\n]\+')
  call delete(mkdfile)
  " リストのエンコーディングを元に戻す
  if from != to     call map(html, 'iconv(v:val, to, from)')   endif
  return html
endfunction 

他のプラグインのHTML変換を利用する

QFixHowmのバッファとして Markdownや VimWikiを利用している場合は、直接ファイルを渡して対応するHTML変換を使用することもできます。

MarkdownとVimWiki

Markdownや VimWiki以外のプラグインやファイルタイプでも応用可能です。