OSDN Git Service

BugTrack-wiki/353 : 番号付きリスト項目リストの組合せが正しく表示されない
[fswiki/fswiki-lite.git] / wiki.cgi
1 #!/usr/bin/perl
2 ################################################################################
3 #
4 # FSWiki Lite
5 #
6 ################################################################################
7 require "./lib/common.pl";
8 #===============================================================================
9 # ½èÍý¤Î¿¶¤êʬ¤±
10 #===============================================================================
11 &ReadParse();
12 if($in{"p"} eq ""){
13         $in{"p"} = "FrontPage";
14 }
15
16 if($in{"a"} eq "list"){
17         &list_page();
18         
19 } elsif($in{"a"} eq "search"){
20         &search_page();
21         
22 } else {
23         &show_page();
24         
25 }
26
27 #-------------------------------------------------------------------------------
28 # ¥Ú¡¼¥¸¤Î°ìÍ÷
29 #-------------------------------------------------------------------------------
30 sub list_page {
31         my @pages = &Wiki::get_page_list();
32         
33         &print_header("°ìÍ÷");
34         print "<ul>\n";
35         foreach my $page (@pages){
36                 print "<li><a href=\"".&Wiki::create_page_url($page->{NAME})."\">".
37                       &Util::escapeHTML($page->{NAME})."</a>".
38                       " - ".&Util::format_date($page->{TIME})."</li>\n";
39         }
40         print "</ul>\n";
41         &print_footer();
42 }
43
44 #-------------------------------------------------------------------------------
45 # ¥Ú¡¼¥¸¤òɽ¼¨
46 #-------------------------------------------------------------------------------
47 sub show_page {
48         
49         unless(&Wiki::page_exists($in{"p"})){
50                 undef %in;
51                 $in{"a"} = "edit";
52                 require $EDIT_SCRIPT;
53                 return;
54         }
55         
56         my $source = &Wiki::get_page($in{"p"});
57         my $html   = &Wiki::process_wiki($source,1);
58         
59         &print_header($in{"p"},1);
60         
61         if(&Wiki::page_exists("Header")){
62                 print "<div class=\"header\">\n";
63                 print &Wiki::process_wiki(&Wiki::get_page("Header"));
64                 print "</div>\n";
65         }
66
67         print "<div class=\"day body section\">\n";
68         print $html;
69         print "</div>\n";
70         
71         if(&Wiki::page_exists("Footer")){
72                 print "<div class=\"comment\">\n";
73                 print &Wiki::process_wiki(&Wiki::get_page("Footer"));
74                 print "</div>\n";
75         }
76         
77         &print_footer();
78 }
79
80 #-------------------------------------------------------------------------------
81 # ¥Ú¡¼¥¸¤Î¸¡º÷
82 #-------------------------------------------------------------------------------
83 sub search_page {
84         
85         &print_header("¸¡º÷");
86         print &Wiki::Plugin::search();
87         
88         my $buf          = "";
89         my $or_search    = $in{'t'} eq 'or';
90         my $with_content = $in{'c'} eq 'true';
91         my $word = &Util::trim($in{'w'});
92         
93         my $ignore_case = 1;
94         my $conv_upper_case = ($ignore_case and $word =~ /[A-Za-z]/);
95         
96         $word = uc $word if ($conv_upper_case);
97         my @words = grep { $_ ne '' } split(/ +|¡¡+/, $word);
98         if (@words) {
99         #---------------------------------------------------------------------------
100         # ¸¡º÷¼Â¹Ô
101         my @list = &Wiki::get_page_list();
102         my $res = '';
103         PAGE:
104         foreach my $page (@list){
105                 my $name = $page->{NAME};
106                 # ¥Ú¡¼¥¸Ì¾¤â¸¡º÷Âоݤˤ¹¤ë
107                 my $page = $name;
108                 $page .= "\n".&Wiki::get_page($name) if ($with_content);
109                 my $pageref = ($conv_upper_case) ? \(my $page2 = uc $page) : \$page;
110                 my $index;
111
112                 if ($or_search) {
113                         # OR¸¡º÷ -------------------------------------------------------
114                         WORD:
115                         foreach(@words){
116                                 next WORD if (($index = index $$pageref, $_) == -1);
117                                 $res .= "<li>".
118                                             "<a href=\"".&Wiki::create_page_url($name)."\">".&Util::escapeHTML($name)."</a>".
119                                                 " - ".
120                                                 &Util::escapeHTML(&get_match_content($page, $index)).
121                                                 "</li>\n";
122                                 next PAGE;
123                         }
124                 } else {
125                         # AND¸¡º÷ ------------------------------------------------------
126                         WORD:
127                         foreach(@words){
128                                 next PAGE if (($index = index $$pageref, $_) == -1);
129                         }
130                         $res .= "<li>".
131                                         "<a href=\"".&Wiki::create_page_url($name)."\">".Util::escapeHTML($name)."</a>".
132                                         " - ".
133                                         Util::escapeHTML(&get_match_content($page, $index)).
134                                         "</li>\n";
135                 }
136         }
137         print "$buf<ul>\n$res</ul>\n" if ($res ne '');
138         }
139         
140         &print_footer();
141 }
142
143 #-------------------------------------------------------------------------------
144 # ¸¡º÷¤Ë¥Þ¥Ã¥Á¤·¤¿¹Ô¤ò¼è¤ê½Ð¤¹´Ø¿ô
145 #-------------------------------------------------------------------------------
146 sub get_match_content {
147         my $content = shift;
148         my $index   = shift;
149
150         # ¸¡º÷¤Ë¥Þ¥Ã¥Á¤·¤¿¹Ô¤ÎÀèƬʸ»ú¤Î°ÌÃÖ¤òµá¤á¤ë¡£
151         # ¡¦$content ¤Î $index ÈÖÌܤÎʸ»ú¤«¤éÀèƬÊý¸þ¤Ë²þ¹Ôʸ»ú¤òõ¤¹¡£
152         # ¡¦$index ¤Î°ÌÃÖ¤ò´Þ¤à¹Ô¤ÎÀèƬʸ»ú¤Î°ÌÃ֤ϲþ¹Ôʸ»ú¤Î¼¡¤Ê¤Î¤Ç +1 ¤¹¤ë¡£
153         # ¡¦ÀèƬÊý¸þ¤Ë²þ¹Ôʸ»ú¤¬Ìµ¤«¤Ã¤¿¤éºÇ½é¤Î¹Ô¤Ê¤Î¤Ç¡¢·ë²Ì¤Ï 0(ÀèƬ)¡£
154         #   (¸«¤Ä¤«¤é¤Ê¤¤¤È rindex() = -1 ¤Ë¤Ê¤ë¤Î¤Ç¡¢+1 ¤·¤Æ¤Á¤ç¤¦¤É 0)
155         my $pre_index = rindex($content, "\n", $index) + 1;
156
157         # ¸¡º÷¤Ë¥Þ¥Ã¥Á¤·¤¿¹Ô¤ÎËöÈøʸ»ú¤Î°ÌÃÖ¤òµá¤á¤ë¡£
158         # ¡¦$content ¤Î $index ÈÖÌܤÎʸ»ú¤«¤éËöÈøÊý¸þ¤Ë²þ¹Ôʸ»ú¤òõ¤¹¡£
159         my $post_index = index($content, "\n", $index);
160
161         # ËöÈøÊý¸þ¤Ë²þ¹Ôʸ»ú¤¬¤Ê¤«¤Ã¤¿¤éºÇ½ª¹Ô¤Ê¤Î¤Ç $pre_index °Ê¹ßÁ´¤Æ¤òÊֵѡ£
162         return substr($content, $pre_index) if ($post_index == -1);
163
164         # ¸«¤Ä¤«¤Ã¤¿²þ¹Ôʸ»ú¤Ë¶´¤Þ¤ì¤¿Ê¸»úÎó¤òÊֵѡ£
165         return substr($content, $pre_index, $post_index - $pre_index);
166 }
167