OSDN Git Service

Revises hilightening of search results
authornangxiang <nangxiang@users.sourceforge.jp>
Sun, 18 Sep 2011 15:40:17 +0000 (00:40 +0900)
committernangxiang <nangxiang@users.sourceforge.jp>
Sun, 18 Sep 2011 15:40:17 +0000 (00:40 +0900)
hanMorph/app/controllers/hanmorph_controller.rb

index 4f48798..b2e4b56 100644 (file)
@@ -1,5 +1,6 @@
 TBL_DIR = File.join(File.dirname(__FILE__), '..', '..', 'config', 'table')
 XS = File.join(TBL_DIR, 'phonetic_components.yml')
+MAX_NUM_FOR_MATCHED = 100
 
 class HanmorphController < ApplicationController
   layout "main"
@@ -25,10 +26,12 @@ class HanmorphController < ApplicationController
     end
   end
   def main_procedure_at_home
-    process_unihan
-    process_sbgy
-    process_dianzhu
-    process_daxu
+    if @char then
+      process_unihan
+      process_sbgy
+      process_dianzhu
+      process_daxu
+    end
     if @extext then
       begin
         search_daxu
@@ -147,7 +150,7 @@ class HanmorphController < ApplicationController
     wordheads = DxWordhead.find_by_sql(["select * from dx_wordheads " +
                                        "where exp like ?", @pattern])
     searched = wordheads.size
-    if searched > 50 then
+    if searched > MAX_NUM_FOR_MATCHED then
       raise TooManyCandidatesError, "#{searched}件、見付かりました。検索条件を絞り込んでください。"
     end
     wordheads.each do |word|
@@ -175,16 +178,21 @@ class HanmorphController < ApplicationController
 #      num = $3.to_i
       appendix = (volume == "8" ? true : false)
       return [page, appendix, volume]
-    end
+    end 
   end
   def get_voltitle(vol)
     return vol.title.sub(/說文解字第/u, "")
   end
   def hilighted_exp(exp, pattern)
-#    span = "<span style='background-color:peachpuff;'>%s</span>"
-    span = "<span style='background-color:lightpink;'>%s</span>"
-    replaced = sprintf(span, pattern)
-    return exp.sub(/#{pattern}/u, replaced)
+    regex = pattern.gsub(/%/, ".+")
+    # BUG: マッチした文字列が異なる場合、最初のものに置換される
+    if exp =~ /#{regex}/u then
+      span = "<span style='background-color:lightpink;'>#{$&}</span>"
+      return exp.gsub(/#{regex}/u, span)
+    else
+      return exp
+    end
+
   end
 end