参考サイト:
ぱちもん書紀
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 )