OSDN Git Service

(no commit message)
[fswiki/fswiki-lite.git] / plugin / core.pl
diff --git a/plugin/core.pl b/plugin/core.pl
new file mode 100644 (file)
index 0000000..e146012
--- /dev/null
@@ -0,0 +1,301 @@
+################################################################################\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