[ 新規 ] [ 検索 | 一覧 | FrontPage ] [ 履歴 (RSS) | 差分履歴 (RSS) ] [ ログイン ]
【PR】Amazon | SL-C3000 | SL-C1000(3/18発売!) | SL-C860 | SL-6000W | SL-6000L | SL-6000N

WalWiki/カスタマイズ/検索キーワードハイライト表示

差分表示


編集前の状態に戻します。
検索に使用したキーワードをハイライト表示します。

- 2004-04-22 (Thu) 00:17:33 検索ページでの検索結果もハイライト表示するように処理を追加。
- 2004-05-20 (Thu) 21:58:08 日本語を正しくマッチさせるようにして、2バイト以内の文字列もハイライトさせるように修正。
- 2004-05-22 (Sat) 15:32:59 "箸"等を検索した後でInternalServerErrorがでる場合があったので手法を変更。
* [highlight search keywords]

CSSに下記のような定義を追加しておいて下さい。

 em.keyword {
     font-weight: bold;
     background-color: yellow;
 }

** 関連するカスタマイズ

- [[WalWiki/カスタマイズ/クッキーを使用する]]

** グローバル変数定義

検索キーワードをクッキーで保持しています。
キーワードを覚えておく時間を設定します。

 my $highlightexpires = '+10m';                               # yakty add [highlight search keywords]

日本語を正しくマッチさせるためのEUC文字の定義です。(参考:[[Perlメモ http://www.din.or.jp/~ohzaki/perl.htm]])

 my $EUC_CHAR  = '[\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE]';   # yakty add [highlight search keywords]
 my $EUC_PRE   = qr{(?<!\x8F)};
 my $EUC_POST  = qr{
     (?=
         (?:[\xA1-\xFE][\xA1-\xFE])* # JIS X 0208 が 0文字以上続いて
         (?:[\x00-\x7F\x8E\x8F]|\z)  # ASCII, SS2, SS3 または終端
     )
 }x;
** init_form()内の変更

     $form{mymsg} = &code_convert(\$form{mymsg}, $kanjicode);
     $form{myname} = &code_convert(\$form{myname}, $kanjicode);
     # yakty add [highlight search keywords] start
     if($form{mycmd} eq 'search'){
         &set_cookie('mysearchwords', $form{mymsg}, expires => $highlightexpires);
     }
     # yakty add [highlight search keywords] end

** print_content()内の変更

- 2003-09-28 (Sun) 00:04:58 空白文字がキーワードになってしまう問題があったので修正。ついでに"海"とか"箸"とかが日本語の変な部分にマッチしてしまうので、2バイト以内の文字はハイライトしないように変更。
- 2004-01-07 (Wed) 00:01:36 メタ文字のクォートが思ったように機能していなかったので修正。
- 2004-05-20 (Thu) 21:54:35 日本語を正しくマッチさせるようにして2バイト以内の文字列もハイライトするように修正。
- 2004-05-22 (Sat) 15:32:47 "箸"等を検索した後でInternalServerErrorがでる場合があったので手法を変更。

 sub print_content {
     my ($rawcontent) = @_;
 #   print &text_to_html($rawcontent, toc=>1);               # Walrus add [part edit]
     #print &text_to_html($rawcontent, toc=>1, partinfo=>1);  # Walrus add [part edit]     # yakty del [highlight search keywords]
     # yakty add [highlight search keywords] start
     my $content = &text_to_html($rawcontent, toc=>1, partinfo=>1);  # Walrus add [part edit]
     $_ = cookie(-name => 'mysearchwords');
     if($_){
         s/(?:\x0D\x0A|[\x0D\x0A])?$/ /;
         my @search_words = map {/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_} (/("[^"]*(?:""[^"]*)*"|[^ ]*) /g);
         #@search_words = grep { length($_) > 2 } @search_words;
         if(@search_words){
             @search_words = map { "(\Q@{[&escape($_)]}\E)" } @search_words;
             my $highlightkeywords = join("|", @search_words);
             #$content =~ s|($highlightkeywords)(?![^<]*>)|<em class="keyword">$1</em>|gs;
             $content =~ s|\G((?:$EUC_CHAR)*?)($highlightkeywords)(?![^<]*>)|$1<em class="keyword">$2</em>|gs;
             #$content =~ s|\G((?:$EUC_CHAR)*?)($highlightkeywords)(?![^<]*>)|$1<em class="keyword">$2</em>|gs;
             $content =~ s|$EUC_PRE($highlightkeywords)$EUC_POST(?![^<]*>)|<em class="keyword">$1</em>|gs;
         }
     }
     print $content;
     # yakty add [highlight search keywords] end
 }
** do_search()内の変更

- 2004-04-22 (Thu) 00:16:53 検索結果もハイライトする。
- 2004-05-20 (Thu) 21:55:57 日本語を正しくマッチさせるようにしたので、2バイト以内の文字列もハイライトするように修正。

     $_ = $form{mymsg};
     s/(?:\x0D\x0A|[\x0D\x0A])?$/ /;
     my @search_words = map {/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_} (/("[^"]*(?:""[^"]*)*"|[^ ]*) /g);
     # yakty add [highlight search keywords] start
     #my @highlight_words = grep { length($_) > 2 } @search_words;
     my @highlight_words = @search_words;
     if(@highlight_words){
         @highlight_words = map { "(\Q@{[&escape($_)]}\E)" } @highlight_words;
     }
     my $highlightkeywords = join("|", @highlight_words);
     # yakty add [highlight search keywords] end
     if (@search_words) {

             next unless ($list);
             print "<ul>\n" unless ($counter);
             #$list =~ s|($highlightkeywords)(?![^<]*>)|<em class="keyword">$1</em>|go if(@highlight_words);                       # yakty add [highlight search keywords]
             $list =~ s|\G((?:$EUC_CHAR)*?)($highlightkeywords)(?![^<]*>)|$1<em class="keyword">$2</em>|go if(@highlight_words);   # yakty add [highlight search keywords]
             $list = "<li><b>".&make_link($page)."</b>$list</li>\n";
             &code_convert(\$list, $kanjicode);
             print $list;
             $counter++;


03003