Orz部屋 - Hiki-1.0.0 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

!Hiki-1.0.0 on ruby-1.9.3
リリースノートには、ruby-1.8.7をサポートする最後のリリースとあるが、ruby-1.8.7上のCGIとしてはエラーが出て動かないので、ruby-1.9.3上での環境構築を推奨する

!!!FreeBSD上での必須ports
* lang/ruby19
* devel/ruby-gems

ruby-1.8.7と共存させる場合は、ports構築時に'''RUBY_VER'''を指定する、スクリプト中の''/usr/bin/env ruby''を''/usr/bin/env ruby19''へ書き換える等の作業が必要

!!!必須rubygems
* docdiff
* hikidoc

''gem19 install''で突っ込む

!!x-math(x-hiki) pluginを使う
http://www.hinet.mydns.jp/%7Ehiraku/で配布されている x-hiki-0.21.3は hiki-1.0.0/ruby-1.9未対応なので要パッチです

動作に必要な修正は、大別して4点あり
* ruby-1.9では、default encodingが utf-8
* ruby-1.9では Stringの sizeメソッドが文字数を返すので、Contents-Lengthの計算に使えないため、bytesizeメソッドに置換が必要
* hiki-1.0.0の @cgi.paramsの定義が変更になっておりリクエストをパースした際に要素数 1の場合は、ハッシュではなく要素そのものを返す(つまり、@cgi.parms[key][0]は、@cgi.parms[key]と書き換える必要有り)
* hiki-1.0.0が返す @cgi(実体は Hiki::Request型オブジェクト)に user_agentメソッドが未実装(Rack使用時は、Rack::Request型に置き換わるので問題ない)

最後の1点は、hiki-1.0.0側の互換性の問題です(標準添付のプラグインは使用していないメソッドです)

!!!パッチ
* {{attach_anchor(x-hiki-0.12.3.diff.gz)}}
* {{attach_anchor(hiki-1.0.0-request.diff)}}

!!警告メッセージ軽減
代表的な警告メッセージは以下の2種
* '''regexp match /.../n against to UTF-8 string'''
** UTF-8な文字列に '''n'''付きなASCII-8BIT正規表現を適用している
** ''hiki/util.rb''内の escapeメソッド群が発生源
** ruby-1.8の''cgi.rb''からコピーされたコード片なので、ruby-1.9の''cgi/util.rb''由来のコードに置き換え可能
* '''variable \$KCODE is no longer effective'''
** ''hiki/filter/bayes_filter/bayes.rb''にて、'''\$KCODE'''が使われている
** 外部エンコードの参照は、'''Encoding.default_external.to_s.downcase'''に置き換える
** 正規表現のエンコード制御は、'''force_encoding'''付きの文字列リテラルに置き換える

!!!パッチ
* {{attach_anchor(hiki-1.0.0-util.diff.gz)}}
* {{attach_anchor(hiki-1.0.0-bayes.diff)}}

!!既存のコンテンツの変換
内部コードのUTF-8化に伴いコード変換が必要
''tool/convert.rb''に変換ツールがあるが、ページタイトル等のメタデータが消えるのでうれしくない

ページ名(タイトルにあらず)がマルチバイト化されていない場合は、ページ名は変化しないので、
コンテンツデータを手作業で変換したほうが良い
# ''text''ディレクトリ以下のファイルの中身をEUC-JPから UTF-8へコード変換(nkf -w辺りが便利)
# ''info.db''内の'''title'''を EUC-JPから UTF-8へ変換(marthal dumpなデータなので注意)
# ''hiki.conf''の'''site_name'''を (2)と同様に変換
# ''hikiconf.rb''を EUC-JPから UTF-8へ変換して、'''@charset'''を修正する

上記の(1)〜(3)までの作業を自動化したスクリプト({{attach_anchor(tiny-hiki-info-conv)}})を作ってみた
(UTF-8から EUC-JPへの逆変換もサポートした)

sedを使って強引に書き換える際に、'''title'''や'''site_name'''に sedのメタ文字が含まれることを考慮していないので使う前に確認し、コードを弄るなり手で変換するなり対処すること

作業前に元データのバックアップを忘れずに!!

!!旧コンテンツの履歴サポート
''misc/plugin/history.rb''にて、旧コンテンツの編集履歴を参照する際に、文字コードを変換するパッチ

'''@options['repos.old_revision']'''と'''@options['repos.old_charset']'''にて、古い文字コードで記録された最後の ''revision''とその文字コードを指定してください

!!!パッチ
* {{attach_anchor(hiki-1.0.0-command.diff)}}
* {{attach_anchor(hiki-1.0.0-history.diff)}}