dokkit 続報

dokkitをちょっと使ってみました。Roteからの乗り換え、なんとかできそうかなぁ?という感じ。

Roteの時は、設定やレイアウトにRubyのコードを書けるのをいいことに、かなり好き放題やっていたのですが、dokkitではYAMLで設定を書くのでどこまで融通が利くかまだ見切れてません。

テキスト→HTMLへの変換にdeplatemarukuというフィルタが使えるのですが、どちらも入力がShift_JISだとうまく動かないようです。

入力をUTF-8にすればおおよそうまく動くようなのですが(厳密には確認してません)、入力ファイルをUTF-8にすると編集時にテキストエディタ文字コード判別に失敗したりして面倒です。

そこで、dokkitの設定ファイル(setup/setup.rb)をいじって、フィルタを追加してみました。見よう見まねで適当にでっち上げましたが、動いているようです。

require 'dokkit/environment'
require 'nkf'

include Dokkit::Environment

module Dokkit
  module Filter
    class SjisUtf8
      def filter(text)
        NKF.nkf('-S -w -x -m0', text)
      end
    end
    class Utf8Sjis
      def filter(text)
        NKF.nkf('-W -s -x -m0', text)
      end
    end
  end
end
    
environment do |env|

  env.select_document do |selection|
    selection.include('**/*')
  end
  
  env.filter_factory.add('sjis-utf8') { Dokkit::Filter::SjisUtf8.new }
  env.filter_factory.add('utf8-sjis') { Dokkit::Filter::Utf8Sjis.new }
#  p env.filter_factory
end

私の場合、marukuを使ってMarkdown記法からHTMLに変換したいので、COMMON.yamlを以下のように書いてみました。(まだ調整中ですが)

---
format:
- html:
   filter:
   - sjis-utf8
   - erb
   - maruku-html
layout:
- simple
---