OSDN Git Service

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