--- /dev/null
+################################################################################\r
+#\r
+# ¥³¥¢¥×¥é¥°¥¤¥ó¤Î¼ÂÁõ\r
+#\r
+################################################################################\r
+package Wiki::Plugin;\r
+\r
+BEGIN {\r
+ # ¥Ñ¥é¥°¥é¥Õ¥×¥é¥°¥¤¥ó¤Î¥¨¥ó¥È¥ê\r
+ $main::P_PLUGIN->{recent} = \&Wiki::Plugin::recent;\r
+ $main::P_PLUGIN->{recentdays} = \&Wiki::Plugin::recentdays;\r
+ $main::P_PLUGIN->{category_list} = \&Wiki::Plugin::category_list;\r
+ $main::P_PLUGIN->{ref_image} = \&Wiki::Plugin::ref_image;\r
+ $main::P_PLUGIN->{ref_text} = \&Wiki::Plugin::ref_text;\r
+ $main::P_PLUGIN->{outline} = \&Wiki::Plugin::outline;\r
+ $main::P_PLUGIN->{search} = \&Wiki::Plugin::search;\r
+ \r
+ # ¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó¤Î¥¨¥ó¥È¥ê\r
+ $main::I_PLUGIN->{category} = \&Wiki::Plugin::category;\r
+ $main::I_PLUGIN->{lastmodified} = \&Wiki::Plugin::lastmodified;\r
+ $main::I_PLUGIN->{ref} = \&Wiki::Plugin::ref;\r
+}\r
+\r
+#==============================================================================\r
+# ¥Ú¡¼¥¸¤Î°ìÍ÷¤ò¹¹¿·Æü»þ½ç¤Ëɽ¼¨¤¹¤ë¥×¥é¥°¥¤¥ó¡£\r
+#==============================================================================\r
+sub recent {\r
+ my $max = shift;\r
+ $max = 0 if($max eq "");\r
+ my $buf = "";\r
+ \r
+ my @pages = &Wiki::get_page_list();\r
+ my $count = 0;\r
+ \r
+ $buf .= "<ul>\n";\r
+ foreach my $page (@pages){\r
+ $buf .= "<li><a href=\"$main::MAIN_SCRIPT?p=".&Util::url_encode($page->{NAME})."\">".\r
+ &Util::escapeHTML($page->{NAME})."</a></li>\n";\r
+ $count++;\r
+ last if($count==$max && $max!=0);\r
+ }\r
+ $buf .= "</ul>\n";\r
+ \r
+ return $buf;\r
+}\r
+\r
+#==============================================================================\r
+# ÆüÉÕ¤´¤È¤Ë¹¹¿·¤µ¤ì¤¿¥Ú¡¼¥¸¤ò°ìÍ÷ɽ¼¨¤¹¤ë¥×¥é¥°¥¤¥ó¡£\r
+#==============================================================================\r
+sub recentdays {\r
+ my $max = shift;\r
+ $max = 5 if($max eq "");\r
+ my $buf = "";\r
+ \r
+ my @pages = &Wiki::get_page_list();\r
+ my $count = 0;\r
+ \r
+ my $last_year = 0;\r
+ my $last_mon = 0;\r
+ my $last_day = 0;\r
+ \r
+ foreach my $page (@pages){\r
+ my ($sec, $min, $hour, $day, $mon, $year) = localtime($page->{TIME});\r
+ \r
+ $year += 1900;\r
+ $mon += 1;\r
+ \r
+ if($last_year!=$year || $last_mon!=$mon || $last_day!=$day){\r
+ \r
+ $count++;\r
+ last if($count == $max+1);\r
+ \r
+ $last_year = $year;\r
+ $last_mon = $mon;\r
+ $last_day = $day;\r
+ \r
+ $buf .= "</ul>\n" if($buf ne "");\r
+ $buf .= sprintf("<b>%04d/%02d/%02d</b>\n",$year,$mon,$day);\r
+ $buf .= "<ul>\n";\r
+ }\r
+ \r
+ $buf .= "<li><a href=\"$main::MAIN_SCRIPT?p=".&Util::url_encode($page->{NAME})."\">".\r
+ &Util::escapeHTML($page->{NAME})."</a></li>\n";\r
+ }\r
+ \r
+ if($buf ne ""){\r
+ $buf .= "</UL>\n";\r
+ }\r
+ \r
+ return $buf;\r
+}\r
+\r
+#==============================================================================\r
+# ¥Ú¡¼¥¸¤ò¥«¥Æ¥´¥é¥¤¥º¤¹¤ë¤¿¤á¤Î¥×¥é¥°¥¤¥ó¡£\r
+#==============================================================================\r
+sub category {\r
+ my $category = shift;\r
+ if($category eq ""){\r
+ return "¥«¥Æ¥´¥ê¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£";\r
+ } else {\r
+ return "[<a href=\"$main::CATEGORY_SCRIPT?c=".&Util::url_encode($category)."\">".\r
+ "¥«¥Æ¥´¥ê:".&Util::escapeHTML($category)."</a>]";\r
+ }\r
+}\r
+\r
+#=============================================================================\r
+# ¥Ú¡¼¥¸¤ÎºÇ½ª¹¹¿·Æü»þ¤òɽ¼¨¤¹¤ë¥×¥é¥°¥¤¥ó¡£\r
+#=============================================================================\r
+sub lastmodified {\r
+ my $page = $main::in{"p"};\r
+ if(&Wiki::exists_page($page)){\r
+ return "ºÇ½ª¹¹¿·»þ´Ö¡§".&Util::format_date(&Wiki::get_last_modified($page));\r
+ } else {\r
+ return undef;\r
+ }\r
+}\r
+\r
+#=============================================================================\r
+# ¥«¥Æ¥´¥ê¤´¤È¤Î¥Ú¡¼¥¸°ìÍ÷¤òɽ¼¨¤¹¤ë¥×¥é¥°¥¤¥ó¡£\r
+#=============================================================================\r
+sub category_list {\r
+ my $category = shift;\r
+ my $buf = "";\r
+ \r
+ # »ØÄꤵ¤ì¤¿¥«¥Æ¥´¥ê¤òɽ¼¨\r
+ if($category ne ""){\r
+ my @pages = &Wiki::get_page_list();\r
+ $buf .= "<h2>".&Util::escapeHTML($category)."</h2>\n";\r
+ $buf .= "<ul>\n";\r
+ #foreach my $page (sort(@pages)){\r
+ foreach my $page (sort {$a->{NAME} cmp $b->{NAME}} @pages){\r
+ my $source = &Wiki::get_page($page->{NAME});\r
+ foreach my $line (split(/\n/,$source)){\r
+ # ¥³¥á¥ó¥È¤«À°·ÁºÑ¥Æ¥¥¹¥È¤Î¾ì¹ç¤ÏÈô¤Ð¤¹\r
+ next if($line =~ /^(\t| |\/\/)/);\r
+ \r
+ # ¥«¥Æ¥´¥ê¤Ë¥Þ¥Ã¥Á¤·¤¿¤é¥ê¥¹¥Æ¥£¥ó¥°\r
+ if($line =~ /{{category\s+$category}}/){\r
+ $buf .= "<li><a href=\"$main::MAIN_SCRIPT?p=".&Util::url_encode($page->{NAME})."\">".\r
+ &Util::escapeHTML($page->{NAME})."</a></li>";\r
+ last;\r
+ }\r
+ }\r
+ }\r
+ $buf .= "</ul>\n";\r
+ \r
+ # Á´¤Æ¤Î¥«¥Æ¥´¥ê¤òɽ¼¨\r
+ } else {\r
+ my $category = {};\r
+ my @pages = &Wiki::get_page_list();\r
+ \r
+ foreach my $page (@pages){\r
+ my $source = &Wiki::get_page($page->{NAME});\r
+ foreach my $line (split(/\n/,$source)){\r
+ # ¥³¥á¥ó¥È¤«À°·ÁºÑ¥Æ¥¥¹¥È¤Î¾ì¹ç¤ÏÈô¤Ð¤¹\r
+ next if($line =~ /^(\t| |\/\/)/);\r
+ \r
+ # ¥«¥Æ¥´¥ê¤Ë¥Þ¥Ã¥Á¤·¤¿¤é¥ê¥¹¥Æ¥£¥ó¥°\r
+ while($line =~ /{{category\s+(.+?)}}/g){\r
+ $category->{$1}->{$page->{NAME}} = 1;\r
+ }\r
+ }\r
+ }\r
+ \r
+ foreach my $name (sort(keys(%$category))){\r
+ $buf .= "<h2>".&Util::escapeHTML($name)."</h2>\n";\r
+ $buf .= "<ul>\n";\r
+ foreach my $page (sort(keys(%{$category->{$name}}))){\r
+ $buf .= "<li><a href=\"$main::MAIN_SCRIPT?p=".&Util::url_encode($page)."\">".\r
+ &Util::escapeHTML($page)."</a></li>\n";\r
+ }\r
+ $buf .= "</ul>\n";\r
+ }\r
+ }\r
+ return $buf;\r
+}\r
+\r
+#=============================================================================\r
+# źÉÕ¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥ó¥¯¤òɽ¼¨¤¹¤ë¤¿¤á¤Î¥×¥é¥°¥¤¥ó¡£\r
+#=============================================================================\r
+sub ref {\r
+ my $page = $main::in{"p"};\r
+ my $file = shift;\r
+ \r
+ if($file eq ""){\r
+ return "¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£";\r
+ }\r
+ \r
+ my $filename = sprintf("$main::ATTACH_DIR/%s.%s",\r
+ &Util::url_encode($page),&Util::url_encode($file));\r
+ unless(-e $filename){\r
+ return "¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤»¤ó¡£";\r
+ }\r
+ \r
+ return sprintf("<a href=\"$main::DOWNLOAD_SCRIPT?p=%s&f=%s\">%s</a>",\r
+ &Util::url_encode($page),&Util::url_encode($file),$file);\r
+}\r
+\r
+#=============================================================================\r
+# źÉÕ¥Õ¥¡¥¤¥ë¤ò²èÁü¤È¤·¤Æɽ¼¨¤¹¤ë¤¿¤á¤Î¥×¥é¥°¥¤¥ó¡£\r
+#=============================================================================\r
+sub ref_image {\r
+ my $page = $main::in{"p"};\r
+ my $file = shift;\r
+ \r
+ if($file eq ""){\r
+ return "¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£";\r
+ }\r
+ \r
+ my $filename = sprintf("$main::ATTACH_DIR/%s.%s",\r
+ &Util::url_encode($page),&Util::url_encode($file));\r
+ unless(-e $filename){\r
+ return "<p>¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤»¤ó¡£</p>\n";\r
+ }\r
+ \r
+ return sprintf("<div><img src=\"$main::DOWNLOAD_SCRIPT?p=%s&f=%s\"></div>",\r
+ &Util::url_encode($page),&Util::url_encode($file));\r
+}\r
+\r
+#=============================================================================\r
+# źÉÕ¥Õ¥¡¥¤¥ë¤ò²èÁü¤È¤·¤Æɽ¼¨¤¹¤ë¤¿¤á¤Î¥×¥é¥°¥¤¥ó¡£\r
+#=============================================================================\r
+sub ref_text {\r
+ my $page = $main::in{"p"};\r
+ my $file = shift;\r
+ \r
+ if($file eq ""){\r
+ return "¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£";\r
+ }\r
+ \r
+ my $filename = sprintf("$main::ATTACH_DIR/%s.%s",\r
+ &Util::url_encode($page),&Util::url_encode($file));\r
+ unless(-e $filename){\r
+ return "<p>¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤»¤ó¡£</p>\n";\r
+ }\r
+ \r
+ my $text = "";\r
+ open(DATA,$filename);\r
+ while(<DATA>){\r
+ $text .= $_;\r
+ }\r
+ close(DATA);\r
+ \r
+ # ²þ¹Ô¥³¡¼¥É¤òÊÑ´¹\r
+ $text =~ s/\r\n/\n/g;\r
+ $text =~ s/\r/\n/g;\r
+ # ʸ»ú¥³¡¼¥É¤òÊÑ´¹\r
+ &jcode::convert(\$text,"euc");\r
+ \r
+ # pre¥¿¥°¤ò¤Ä¤±¤ÆÊÖµÑ\r
+ return "<pre>".&Util::escapeHTML($text)."</pre>\n";\r
+}\r
+\r
+#=============================================================================\r
+# ¥¢¥¦¥È¥é¥¤¥ó¤òɽ¼¨¤¹¤ë¤¿¤á¤Î¥×¥é¥°¥¤¥ó\r
+# ½ÐÎϤµ¤ì¤ëHTML¤Ï¤Á¤ç¤Ã¤È¼êÈ´¤¤Ç¤¹¡Ä\r
+#=============================================================================\r
+sub outline {\r
+ my $page = $main::in{'p'};\r
+ my $source = &Wiki::get_page($page);\r
+ my $level = 0;\r
+ my $count = 0;\r
+ my $buf = "";\r
+ foreach my $line (split(/\n/,$source)){\r
+ if($line=~/^(!{1,3})(.+)$/){\r
+ my $find_level = 4 - length($1);\r
+ \r
+ while($level < $find_level){\r
+ $buf .= "<ul>\n";\r
+ $level++;\r
+ }\r
+ \r
+ while($level > $find_level){\r
+ $buf .= "</ul>\n";\r
+ $level--;\r
+ }\r
+ my $section = &Util::delete_tag(&Wiki::process_wiki($2));\r
+ \r
+ $buf .= "<li><a href=\"#p$count\">$section</a></li>\n";\r
+ $count++;\r
+ }\r
+ }\r
+ while($level > 0){\r
+ $buf .= "</ul>\n";\r
+ $level--;\r
+ }\r
+ return $buf;\r
+}\r
+\r
+#=============================================================================\r
+# ¸¡º÷¥Õ¥©¡¼¥à¤òɽ¼¨¤¹¤ë¤¿¤á¤Î¥×¥é¥°¥¤¥ó\r
+#=============================================================================\r
+sub search {\r
+ return "<form action=\"$main::MAIN_SCRIPT\" method=\"GET\">\n".\r
+ " ¥¡¼¥ï¡¼¥É <input type=\"text\" name=\"w\" size=\"20\" value=\"".&Util::escapeHTML($main::in{'w'})."\">\n".\r
+ " <input type=\"submit\" value=\" ¸¡ º÷ \">\n".\r
+ " <input type=\"hidden\" name=\"a\" value=\"search\">\n".\r
+ "</form>\n";\r
+}\r
+\r
+1;\r