11/01/2005

tDiaryのkw.rbをUconvでUTF-8に

参考サイト:ぱちもん書紀 tDiaryのキーワードプラグイン(kw.rb)でPukiWiki Plus!(国際化版)へのリンクを張ろうと思って設定したのですが、うまく指定のページにリンクされません。PukiWiki Plus!(国際化版)で使われている日本語文字列は、UTF-8を URLエンコードしたものなのですが、tDiaryの kw.rbには EUC-JP/Shift_JIS/ISO-2022-JP の変換しか記述されていないのです。Uconvモジュールを使って UFT-8の変換を書き足すことにしました。(Uconvモジュールの導入については他サイトを参考にしてください。)
  • kw.diff Patch for kw.rb rev.1.10(2005-09-07) download
テストもかねて幾つか使ってみます。
*** kw.rb 2005-09-07 11:18:41.000000000 +0900 --- kw.rb.uconv 2005-11-01 15:34:59.000000000 +0900 *************** *** 14,20 **** # If keyword is 'foo', it has key nil. # If keyword is 'google:foo', it has key 'google'. # URL: the URL for link. '$1' is replace by keyword. ! # style: encoding style as: 'euc-jp', 'sjis', 'jis' or nil. # # if there isn't @options['kw.dic'], the plugin links to google. # --- 14,20 ---- # If keyword is 'foo', it has key nil. # If keyword is 'google:foo', it has key 'google'. # URL: the URL for link. '$1' is replace by keyword. ! # style: encoding style as: 'euc-jp', 'sjis', 'jis', 'utf8' or nil. # # if there isn't @options['kw.dic'], the plugin links to google. # *************** *** 28,39 **** # You can distribute this under GPL. # def kw_parse( str ) kw_list = [] str.each do |pair| k, u, s = pair.sub( /[\r\n]+/, '' ).split( /[ \t]+/, 3 ) k = nil if k == '' or k == 'nil' ! s = nil if s != 'euc-jp' && s != 'sjis' && s != 'jis' kw_list << [k, u, s] if u end kw_list --- 28,46 ---- # You can distribute this under GPL. # + begin + require 'uconv' + @kw_encoder = Proc::new {|s| Uconv.euctou8( s ) } + rescue LoadError + @kw_encoder = Proc::new {|s| s } + end + def kw_parse( str ) kw_list = [] str.each do |pair| k, u, s = pair.sub( /[\r\n]+/, '' ).split( /[ \t]+/, 3 ) k = nil if k == '' or k == 'nil' ! s = nil if s != 'euc-jp' && s != 'sjis' && s != 'jis' && s != 'utf8' kw_list << [k, u, s] if u end kw_list *************** *** 80,85 **** --- 87,94 ---- NKF::nkf( '-s', key ) when 'jis' NKF::nkf( '-j', key ) + when 'utf8' + @kw_encoder.call( key.gsub( /\t/, '' ) ) else # none key end )