[Hiki-dev] キーワードハイライト

Back to archive index

Yoshio TAKAEDA / 高枝佳男 takae****@mri*****
2003年 10月 13日 (月) 18:33:11 JST


高枝です。

In article <20031****@lists*****>,
kita****@kitaj***** (Junichiro Kita) さん wrote:
>この部分は
>
>>       formatter = HikiFormatter::new( tokens, @db, @plugin )
>>       contents, toc = formatter.to_s, formatter.toc
>>       if $hilight_keys
>>         word = @params['key'][0]
>>         if word && word.size > 0
>>           contents = hilighten(contents, word.unescape.split)
>>         end
>
>の方がいいかも.

御意。ということで、きたさんの本来のパッチは次のとおりという
ことで。(ありがたく使わせていただきます。_o_)

--- command.rb.orig	Sun Aug 24 21:03:21 2003
+++ command.rb	Mon Oct 13 18:22:26 2003
@@ -135,6 +135,12 @@
       tokens = parser.parse( text )
       formatter = HikiFormatter::new( tokens, @db, @plugin )
       contents, toc = formatter.to_s, formatter.toc
+      if $hilight_keys
+        word = @params['key'][0]
+        if word && word.size > 0
+          contents = hilighten(contents, word.unescape.split)
+        end
+      end
 
       @db.set_references( @p, formatter.references )
       @db.increment_hitcount( @p )
@@ -159,6 +165,20 @@
 
       generate_page( data )
     end
+ 
+    def hilighten(str, keywords)
+      hilighted = str.dup
+      keywords.each do |key|
+        re = Regexp.new('(' << Regexp.escape(key) << ')', Regexp::IGNORECASE)
+        hilighted.gsub!(/([^<]*)(<[^>]*>)?/) {
+          body, tag = $1, $2
+          body.gsub(re) {
+            %Q[<em class="hilight">#{$1}</em>]
+          } << ( tag || "" )
+        }
+      end
+      hilighted
+    end
 
     def cmd_index
       list =****@db*****_info.sort {|a, b|
@@ -343,7 +363,11 @@
       word = @params['key'][0]
       if word && word.size > 0
         total, l =****@db*****(word)
-        l.collect! {|p| @plugin.hiki_anchor( p[0].escape, @plugin.page_name(p[0])) + " - #{p[1]}"}
+        if $hilight_keys
+          l.collect! {|p| @plugin.make_anchor("#{$cgi_name}?cmd=view&p=#{p[0].escape}&key=#{word.split.join('+').escape}", @plugin.page_name(p[0])) + " - #{p[1]}"}
+        else
+          l.collect! {|p| @plugin.hiki_anchor( p[0].escape, @plugin.page_name(p[0])) + " - #{p[1]}"}
+        end
         data             = get_common_data( @db, @plugin )
         @plugin.hiki_menu(data, @cmd)
 
    




Hiki-dev メーリングリストの案内
Back to archive index