差分表示
- 最後の更新で追加された行はこのように表示します。
- 最後の更新で削除された行はこのように表示します。
検索に使用したキーワードをハイライト表示します。
- 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++;
02982