require "./lib/mimew.pl";
require "./lib/setup.pl";
#-------------------------------------------------------------------------------
-# °ú¿ô¤ÇÅϤ·¤¿¥Ú¡¼¥¸¤ËÁ«°Ü
-#-------------------------------------------------------------------------------
-sub redirect {
- my $page = shift;
- my $url = "$MAIN_SCRIPT?p=".&Util::url_encode($page);
- &redirectURL($url);
-}
-
-#-------------------------------------------------------------------------------
-# °ú¿ô¤ÇÅϤ·¤¿URL¤ËÁ«°Ü
-#-------------------------------------------------------------------------------
-sub redirectURL {
- my $url = shift;
-
- print "Content-Type: text/html;charset=EUC-JP\n";
- print "Pragma: no-cache\n";
- print "Cache-Control: no-cache\n\n";
- print "<html>\n";
- print " <head>\n";
- print " <title>moving...</title>\n";
- print " <meta http-equiv=\"Refresh\" content=\"0;URL=$url\">\n";
- print " </head>\n";
- print " <body>\n";
- print " Wait or <a href=\"$url\">Click Here!!</a>\n";
- print " </body>\n";
- print "</html>\n";
-
- exit;
-}
-
-#-------------------------------------------------------------------------------
# ¥Ø¥Ã¥À¤òɽ¼¨
#-------------------------------------------------------------------------------
sub print_header {
print "<div class=\"adminmenu\">\n";
print " <span class=\"adminmenu\">\n";
- print " <a href=\"$MAIN_SCRIPT?p=FrontPage\">FrontPage</a>\n";
- print " <a href=\"$EDIT_SCRIPT?a=new\">¿·µ¬</a>\n";
+ print " <a href=\"".&Wiki::create_url({p=>"FrontPage"})."\">FrontPage</a>\n";
+ print " <a href=\"".&Wiki::create_url({a=>"new"})."\">¿·µ¬</a>\n";
if($show==1){
- print " <a href=\"$EDIT_SCRIPT?a=edit&p=".&Util::url_encode($in{"p"})."\">ÊÔ½¸</a>\n";
+ print " <a href=\"".&Wiki::create_url({a=>"edit",p=>$in{"p"}})."\">ÊÔ½¸</a>\n";
}
- print " <a href=\"$MAIN_SCRIPT?a=search\">¸¡º÷</a>\n";
- print " <a href=\"$MAIN_SCRIPT?a=list\">°ìÍ÷</a>\n";
- print " <a href=\"$MAIN_SCRIPT?p=Help\">¥Ø¥ë¥×</a>\n";
+ print " <a href=\"".&Wiki::create_url({a=>"search"})."\">¸¡º÷</a>\n";
+ print " <a href=\"".&Wiki::create_url({a=>"list"})."\">°ìÍ÷</a>\n";
+ print " <a href=\"".&Wiki::create_url({p=>"Help"})."\">¥Ø¥ë¥×</a>\n";
print " </span>\n";
print "</div>\n";
print "<h1>".&Util::escapeHTML($title)."</h1>\n";
- if(&Wiki::exists_page("Menu")){
+ if(&Wiki::page_exists("Menu")){
print "<div class=\"main\">\n";
}
-
}
#-------------------------------------------------------------------------------
# ¥Õ¥Ã¥¿¤òɽ¼¨
#-------------------------------------------------------------------------------
sub print_footer {
- if(&Wiki::exists_page("Menu")){
+ if(&Wiki::page_exists("Menu")){
print "</div>\n";
print "<div class=\"sidebar\">\n";
print &Wiki::process_wiki(&Wiki::get_page("Menu"));
print "</div>\n";
}
- print "<div class=\"footer\">Powered by <a href=\"$main::SITE_URL\">FreeStyleWikiLite $main::VERSION</a></div>\n";
+ print "<div class=\"footer\">Powered by <a href=\"".$main::SITE_URL."\">FreeStyleWikiLite ".$main::VERSION."</a></div>\n";
print "</body></html>\n";
}
+#-------------------------------------------------------------------------------
+# µìVer(0.0.11)¸ß´¹À°Ý»ý
+# ¼¡´ü¥Ð¡¼¥¸¥ç¥ó¤Çºï½ü¤µ¤ì¤Þ¤¹¡£
+#-------------------------------------------------------------------------------
+sub redirect { return &Wiki::redirect($@); }
+sub redirectURL { return &Wiki::redirectURL($@); }
+
+package Wiki;
+sub exists_page { return &page_exists(shift); }
+sub send_mail { return &Util::send_mail($@); }
+
+package HTMLParser;
+
+package Util;
+sub parse_plugin { return &Wiki::parse_inline_plugin($@); }
+
###############################################################################
#
# Wiki´ØÏ¢¤Î´Ø¿ô¤òÄ󶡤¹¤ë¥Ñ¥Ã¥±¡¼¥¸
#
###############################################################################
package Wiki;
-#-------------------------------------------------------------------------------
-# ¥Ú¡¼¥¸¤ò¼èÆÀ
-#-------------------------------------------------------------------------------
-sub get_page {
- my $page = &Util::url_encode(shift);
-
- open(DATA,"$main::DATA_DIR/$page.wiki") or &Util::error("$main::DATA_DIR/$page.wiki¤Î¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
- my $content = "";
- while(<DATA>){
- $content .= $_;
- }
- close(DATA);
-
- return $content;
+
+local @current_parser = [];
+
+#==============================================================================
+# ¥×¥é¥°¥¤¥ó¤Î¾ðÊó¤ò¼èÆÀ¤·¤Þ¤¹
+#==============================================================================
+sub get_plugin_info {
+ my $name = shift;
+ return defined($main::P_PLUGIN->{$name}) ? {FUNCTION=>$main::P_PLUGIN->{$name}, TYPE=>'paragraph'} :
+ defined($main::I_PLUGIN->{$name}) ? {FUNCTION=>$main::I_PLUGIN->{$name}, TYPE=>'inline' } :
+ defined($main::B_PLUGIN->{$name}) ? {FUNCTION=>$main::B_PLUGIN->{$name}, TYPE=>'block' } :
+ {};
}
-#-------------------------------------------------------------------------------
-# ¥Ú¡¼¥¸¤òÊݸ
-#-------------------------------------------------------------------------------
-sub save_page {
- my $page = shift;
- my $source = shift;
+
+#==============================================================================
+# Wiki¥½¡¼¥¹¤òÅϤ·¤ÆHTML¤ò¼èÆÀ¤·¤Þ¤¹
+#==============================================================================
+sub process_wiki {
+ my $source = shift;
+ my $mainflg = shift;
+ my $parser = HTMLParser->new($mainflg);
- $page = &Util::trim($page);
- $source =~ s/\r\n/\n/g;
- $source =~ s/\r/\n/g;
+ # ΢µ»ÍÑ(¥×¥é¥°¥¤¥óÆâÉô¤«¤é¥Ñ¡¼¥µ¤ò»È¤¦¾ì¹ç)
+ push(@current_parser, $parser);
- my $enc_page = &Util::url_encode($page);
- my $action = 'MODIFY';
- unless(-e "$main::DATA_DIR/$enc_page.wiki"){
- $action = 'CREATE';
- }
-
- # ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òºîÀ®
- if(-e "$main::DATA_DIR/$enc_page.wiki"){
- open(BACKUP,">$main::BACKUP_DIR/$enc_page.bak") or &Util::error("$main::BACKUP_DIR/$enc_page.bak¤Î¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
- open(DATA ,"$main::DATA_DIR/$enc_page.wiki") or &Util::error("$main::DATA_DIR/$enc_page.wiki¤Î¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
- while(<DATA>){
- print BACKUP $_;
- }
- close(DATA);
- close(BACKUP);
- }
+ $parser->parse($source);
- # ÆþÎÏÆâÍƤòÊݸ
- open(DATA,">$main::DATA_DIR/$enc_page.wiki") or &Util::error("$main::DATA_DIR/$enc_page.wiki¤Î¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
- print DATA $source;
- close(DATA);
+ # ¥Ñ¡¼¥µ¤Î»²¾È¤ò²òÊü
+ pop(@current_parser);
- &send_mail($action,$page);
+ return $parser->{html};
}
-#-------------------------------------------------------------------------------
-# ¥Ú¡¼¥¸¤òºï½ü
-#-------------------------------------------------------------------------------
-sub remove_page {
- my $page = shift;
- my $enc_page = &Util::url_encode($page);
- unlink("$main::DATA_DIR/$enc_page.wiki") or &Util::error("$main::DATA_DIR/$enc_page.wiki¤Îºï½ü¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
-
- &send_mail('DELETE',$page);
+
+#==============================================================================
+# ¥Ñ¡¼¥¹Ãæ¤Î¾ì¹ç¡¢¸½ºß͸ú¤ÊHTMLParser¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÊֵѤ·¤Þ¤¹¡£
+# ¥Ñ¡¼¥¹Ãæ¤ÎÆâÍƤò¥×¥é¥°¥¤¥ó¤«¤éÊѹ¹¤·¤¿¤¤¾ì¹ç¤Ë»ÈÍѤ·¤Þ¤¹¡£
+#==============================================================================
+sub get_current_parser {
+ return $current_parser[$#current_parser];
}
-#-------------------------------------------------------------------------------
-# ¥á¡¼¥ëÁ÷¿®
-#-------------------------------------------------------------------------------
-sub send_mail {
- my $action = shift;
- my $page = shift;
- my $enc_page = &Util::url_encode($page);
-
- if($main::ADMIN_MAIL eq "" || $main::SEND_MAIL eq ""){
- return;
- }
-
- my $subject = "";
- if($action eq 'CREATE'){
- $subject = "[FSWikiLite]$page¤¬ºîÀ®¤µ¤ì¤Þ¤·¤¿";
-
- } elsif($action eq 'MODIFY'){
- $subject = "[FSWikiLite]$page¤¬¹¹¿·¤µ¤ì¤Þ¤·¤¿";
-
- } elsif($action eq 'DELETE'){
- $subject = "[FSWikiLite]$page¤¬ºï½ü¤µ¤ì¤Þ¤·¤¿";
+
+#===============================================================================
+# ¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó¤ò¥Ñ¡¼¥¹¤·¤Æ¥³¥Þ¥ó¥É¤È°ú¿ô¤Ëʬ³ä
+#===============================================================================
+sub parse_inline_plugin {
+ my $text = shift;
+ my ($cmd, @args_tmp) = split(/ /,$text);
+ my $args_txt = &Util::trim(join(" ",@args_tmp));
+ if($cmd =~ s/\}\}(.*?)$//){
+ return { command=>$cmd, args=>[], post=>"$1 $args_txt"};
}
- # MIME¥¨¥ó¥³¡¼¥É
- $subject = &main::mimeencode($subject);
-
- my $head = "Subject: $subject\n".
- "From: $main::ADMIN_MAIL\n".
- "Content-Transfer-Encoding: 7bit\n".
- "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n".
- "Reply-To: $main::ADMIN_MAIL\n".
- "\n";
-
- my $body = "IP:".$ENV{'REMOTE_ADDR'}."\n".
- "UA:".$ENV{'HTTP_USER_AGENT'}."\n";
+ my @ret_args;
+ my $tmp = "";
+ my $escape = 0;
+ my $quote = 0;
+ my $i = 0;
- if($action eq 'MODIFY' || $action eq 'DELETE'){
- if(-e "$main::BACKUP_DIR/$enc_page.bak"){
- $body .= "°Ê²¼¤ÏÊѹ¹Á°¤Î¥½¡¼¥¹¤Ç¤¹¡£\n".
- "-----------------------------------------------------\n";
- open(BACKUP,"$main::BACKUP_DIR/$enc_page.bak");
- while(my $line = <BACKUP>){
- $body .= $line;
+ for($i = 0; $i<length($args_txt); $i++){
+ my $c = substr($args_txt,$i,1);
+ if($quote!=1 && $c eq ","){
+ if($quote==3){
+ $tmp .= '}';
}
- close(BACKUP);
+ push(@ret_args,$tmp);
+ $tmp = "";
+ $quote = 0;
+ } elsif($quote==1 && $c eq "\\"){
+ if($escape==0){
+ $escape = 1;
+ } else {
+ $tmp .= $c;
+ $escape = 0;
+ }
+ } elsif($quote==0 && $c eq '"'){
+ if($tmp eq ""){
+ $quote = 1;
+ } else {
+ $tmp .= $c;
+ }
+ } elsif($quote==1 && $c eq '"'){
+ if($escape==1){
+ $tmp .= $c;
+ $escape = 0;
+ } else {
+ $quote = 2;
+ }
+ } elsif(($quote==0 || $quote==2) && $c eq '}'){
+ $quote = 3;
+ } elsif($quote==3){
+ if($c eq '}'){
+ last;
+ } else {
+ $tmp .= '}'.$c;
+ $quote = 0;
+ }
+ } elsif($quote==2){
+ return {error=>"¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó¤Î¹½Ê¸¤¬ÉÔÀµ¤Ç¤¹¡£"};
+ } else {
+ $tmp .= $c;
+ $escape = 0;
}
}
- # ʸ»ú¥³¡¼¥É¤ÎÊÑ´¹(jcode.pl¤ò»ÈÍѤ¹¤ë)
- &jcode::convert(\$body,'jis');
+ if($quote!=3){
+ my $info = &Wiki::get_plugin_info($cmd);
+ return undef if (defined($info->{TYPE}) && $info->{TYPE} ne 'block');
+ }
- open(MAIL,"| $main::SEND_MAIL $main::ADMIN_MAIL");
- print MAIL $head;
- print MAIL $body;
- close(MAIL);
+ if($tmp ne ""){
+ push(@ret_args,$tmp);
+ }
+
+ return { command=>$cmd, args=>\@ret_args,
+ post=>substr($args_txt, $i + 1, length($args_txt) - $i)};
}
-#-------------------------------------------------------------------------------
+
+#==============================================================================
+# ¥Ú¡¼¥¸É½¼¨¤ÎURL¤òÀ¸À®
+#==============================================================================
+sub create_page_url {
+ my $page = shift;
+ return create_url({p=>$page});
+}
+
+#==============================================================================
+# Ǥ°Õ¤ÎURL¤òÀ¸À®
+#==============================================================================
+sub create_url {
+ my $params = shift;
+ my $script = shift;
+ my $url = '';
+ my $query = '';
+ my $action = '';
+ foreach my $key (keys(%$params)){
+ my $val = $params->{$key};
+ if ($key eq 'a') {
+ $action = $val;
+ }
+ if($query ne ''){
+ $query .= '&';
+ }
+ $query .= Util::url_encode($key)."=".Util::url_encode($val);
+ }
+ if(!defined($script)){
+ if ($action =~ /^(edit|new|delconf)$/){
+ $script = $main::EDIT_SCRIPT;
+ }else{
+ $script = $main::MAIN_SCRIPT;
+ }
+ }
+ $url = $script;
+ if($query ne ''){
+ $url .= '?'.$query;
+ }
+ return $url;
+}
+
+#==============================================================================
# ¥Ú¡¼¥¸¤Î°ìÍ÷¤ò¼èÆÀ
-#-------------------------------------------------------------------------------
+#==============================================================================
sub get_page_list {
opendir(DIR, $main::DATA_DIR);
my ($fileentry, @files);
return @pages;
}
-#-------------------------------------------------------------------------------
+#==============================================================================
# ¥Ú¡¼¥¸¤Î¹¹¿·Æü»þ¤ò¼èÆÀ
-#-------------------------------------------------------------------------------
+#==============================================================================
sub get_last_modified {
my $page = shift;
- if(&exists_page($page)){
+ if(&page_exists($page)){
my $file = sprintf("%s/%s.wiki",$main::DATA_DIR,&Util::url_encode($page));
my @stat = stat($file);
return $stat[9];
}
}
-#-------------------------------------------------------------------------------
+#==============================================================================
+# ¥Ú¡¼¥¸¤ò¼èÆÀ
+#==============================================================================
+sub get_page {
+ my $page = &Util::url_encode(shift);
+
+ open(DATA,"$main::DATA_DIR/$page.wiki") or &Util::error("$main::DATA_DIR/$page.wiki¤Î¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
+ my $content = "";
+ while(<DATA>){
+ $content .= $_;
+ }
+ close(DATA);
+
+ return $content;
+}
+#==============================================================================
+# ¥Ú¡¼¥¸¤òÊݸ
+#==============================================================================
+sub save_page {
+ my $page = shift;
+ my $source = shift;
+
+ $page = &Util::trim($page);
+ $source =~ s/\r\n/\n/g;
+ $source =~ s/\r/\n/g;
+
+ my $enc_page = &Util::url_encode($page);
+ my $action = 'MODIFY';
+ unless(-e "$main::DATA_DIR/$enc_page.wiki"){
+ $action = 'CREATE';
+ }
+
+ # ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òºîÀ®
+ if(-e "$main::DATA_DIR/$enc_page.wiki"){
+ open(BACKUP,">$main::BACKUP_DIR/$enc_page.bak") or &Util::error("$main::BACKUP_DIR/$enc_page.bak¤Î¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
+ open(DATA ,"$main::DATA_DIR/$enc_page.wiki") or &Util::error("$main::DATA_DIR/$enc_page.wiki¤Î¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
+ while(<DATA>){
+ print BACKUP $_;
+ }
+ close(DATA);
+ close(BACKUP);
+ }
+
+ # ÆþÎÏÆâÍƤòÊݸ
+ open(DATA,">$main::DATA_DIR/$enc_page.wiki") or &Util::error("$main::DATA_DIR/$enc_page.wiki¤Î¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
+ print DATA $source;
+ close(DATA);
+
+ &Util::send_mail($action,$page);
+}
+
+#==============================================================================
# ¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¤«¤É¤¦¤«
-#-------------------------------------------------------------------------------
-sub exists_page {
+#==============================================================================
+sub page_exists {
my $page = &Util::url_encode(shift);
if(-e "$main::DATA_DIR/$page.wiki"){
return 1;
}
}
-#-------------------------------------------------------------------------------
-# Wiki¥½¡¼¥¹¤òÅϤ·¤ÆHTML¤ò¼èÆÀ¤·¤Þ¤¹
-#-------------------------------------------------------------------------------
-sub process_wiki {
- my $source = shift;
- my $main = shift;
- my $parser = HTMLParser->new($main);
- $parser->parse($source);
+#==============================================================================
+# °ú¿ô¤ÇÅϤ·¤¿¥Ú¡¼¥¸¤ËÁ«°Ü
+#==============================================================================
+sub redirect {
+ my $page = shift;
+ my $url = &Wiki::create_url({p=>$page});
+ &redirectURL($url);
+}
+
+#==============================================================================
+# °ú¿ô¤ÇÅϤ·¤¿URL¤ËÁ«°Ü
+#==============================================================================
+sub redirectURL {
+ my $url = shift;
- return $parser->{html};
+ print "Content-Type: text/html;charset=EUC-JP\n";
+ print "Pragma: no-cache\n";
+ print "Cache-Control: no-cache\n\n";
+ print "<html>\n";
+ print " <head>\n";
+ print " <title>moving...</title>\n";
+ print " <meta http-equiv=\"Refresh\" content=\"0;URL=$url\">\n";
+ print " </head>\n";
+ print " <body>\n";
+ print " Wait or <a href=\"$url\">Click Here!!</a>\n";
+ print " </body>\n";
+ print "</html>\n";
+
+ exit;
+}
+
+#==============================================================================
+# ¥Ú¡¼¥¸¤òºï½ü
+#==============================================================================
+sub remove_page {
+ my $page = shift;
+ my $enc_page = &Util::url_encode($page);
+ unlink("$main::DATA_DIR/$enc_page.wiki") or &Util::error("$main::DATA_DIR/$enc_page.wiki¤Îºï½ü¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
+
+ &Util::send_mail('DELETE',$page);
}
###############################################################################
if(!defined($mainflg) || $mainflg eq ""){ $mainflg = 0; }
+ $self->{dl_flag} = 0;
+ $self->{dt} = "";
+ $self->{dd} = "";
+
$self->{html} = "";
$self->{pre} = "";
$self->{quote} = "";
$self->{table} = 0;
$self->{level} = 0;
+ $self->{list} = 0;
$self->{para} = 0;
$self->{p_cnt} = 0;
- $self->{explan} = 0;
$self->{main} = $mainflg;
return bless $self,$class;
}
my $self = shift;
my $source = shift;
+ $self->start_parse;
$source =~ s/\r//g;
+
my @lines = split(/\n/,$source);
foreach my $line (@lines){
my $word3 = substr($line,0,3);
# ¶õ¹Ô
- if($line eq ""){
+ if($line eq "" && !$self->{block}){
$self->l_paragraph();
next;
}
+ # ¥Ö¥í¥Ã¥¯½ñ¼°¤Î¥¨¥¹¥±¡¼¥×
+ if($word2 eq "\\\\" || $word1 eq "\\"){
+ my @obj = $self->parse_line(substr($line, 1));
+ $self->l_text(\@obj);
+ next;
+ }
+
# ¥Ñ¥é¥°¥é¥Õ¥×¥é¥°¥¤¥ó
- if($line =~ /^{{((.|\s)+?)}}$/){
- my $plugin = &Util::parse_plugin($1);
- my $class = $main::P_PLUGIN->{$plugin->{command}};
- if(defined($class)){
+ if($line =~ /^\{\{(.+\}\})$/){
+ if(!$self->{block}){
+ my $plugin = &Wiki::parse_inline_plugin($1);
+ my $info = &Wiki::get_plugin_info($plugin->{command});
+ if($info->{TYPE} eq "paragraph"){
+ $self->l_plugin($plugin);
+ } else {
+ my @obj = $self->parse_line($line);
+ $self->l_text(\@obj);
+ }
+ next;
+ }
+ } elsif($line =~ /^\{\{(.+)$/){
+ if ($self->{block}) {
+ my $plugin = &Wiki::parse_inline_plugin($1);
+ my $info = &Wiki::get_plugin_info($plugin->{command});
+ $self->{block}->{level}++ if($info->{TYPE} eq "block");
+ $self->{block}->{args}->[0] .= $line."\n";
+ next;
+ }
+ my $plugin = &Wiki::parse_inline_plugin($1);
+ my $info = &Wiki::get_plugin_info($plugin->{command});
+ if($info->{TYPE} eq "block"){
+ unshift(@{$plugin->{args}}, "");
+ $self->{block} = $plugin;
+ $self->{block}->{level} = 0;
+ } else {
+ my @obj = $self->parse_line($line);
+ $self->l_text(\@obj);
+ }
+ next;
+ }
+ if($self->{block}){
+ if($line eq "}}"){
+ if ($self->{block}->{level} > 0) {
+ $self->{block}->{level}--;
+ $self->{block}->{args}->[0] .= $line."\n";
+ next;
+ }
+ my $plugin = $self->{block};
+ delete($self->{block});
$self->l_plugin($plugin);
} else {
- my @obj = $self->parse_line($line);
- $self->l_text(\@obj);
+ $self->{block}->{args}->[0] .= $line."\n";
}
next;
}
$self->{dd} .= substr($line,3);
next;
}
+ if($self->{dt} ne "" || $self->{dd} ne ""){
+ $self->multi_explanation;
+ }
if(index($line,"::")==0){
- if($self->{dt} ne "" || $self->{dd} ne ""){
- $self->multi_explanation;
- }
$self->{dt} = substr($line,2);
$self->{dl_flag} = 1;
next;
$line .= " ";
}
my @spl = map {/^"(.*)"$/ ? scalar($_ = $1, s/\"\"/\"/g, $_) : $_}
- ($line =~ /,\s*(\"[^\"]*(?:\"\"[^\"]*)*\"|[^,]*)/g);
+ ($line =~ /,\s*(\"[^\"]*(?:\"\"[^\"]*)*\"|[^,]*)/g);
my @array;
foreach my $value (@spl){
my @cell = $self->parse_line($value);
# Ê£¿ô¹Ô¤ÎÀâÌÀ
$self->multi_explanation;
+ # ¥Ñ¡¼¥¹Ãæ¤Î¥Ö¥í¥Ã¥¯¥×¥é¥°¥¤¥ó¤¬¤¢¤Ã¤¿¾ì¹ç¡¢¤È¤ê¤¢¤¨¤ºÉ¾²Á¤·¤Æ¤ª¤¯¡©
+ if($self->{block}){
+ my $plugin = $self->{block};
+ delete($self->{block});
+ $self->l_plugin($plugin);
+ }
+
$self->end_parse;
}
# £±¹Ôʬ¤ò¥Ñ¡¼¥¹
#===============================================================================
sub parse_line {
- my $self = shift;
- my $source = shift;
- my @array = ();
-
- # ¥×¥é¥°¥¤¥ó
- if($source =~ /{{((.|\s)+?)}}/){
- my $pre = $`;
- my $post = $';
- if($pre ne ""){ push(@array,$self->parse_line($pre)); }
- my $plugin = &Util::parse_plugin($1);
- my $class = $main::I_PLUGIN->{$plugin->{command}};
- if(defined($class)){
- push @array,$self->plugin($plugin);
- } else {
- push @array,$self->text("{{$1}}");
+ my ($self, $source) = @_;
+
+ return () if (not defined $source);
+
+ my @array = ();
+ my $pre = q{};
+ my @parsed = ();
+
+ # $source ¤¬¶õ¤Ë¤Ê¤ë¤Þ¤Ç·«¤êÊÖ¤¹¡£
+ SOURCE:
+ while ($source ne q{}) {
+
+ # ¤É¤Î¥¤¥ó¥é¥¤¥ó Wiki ½ñ¼°¤ÎÀèƬ¤Ë¤â match ¤·¤Ê¤¤¾ì¹ç
+ if (!($source =~ /^(.*?)((?:\{\{|\[\[?|https?:|mailto:|f(?:tp:|ile:)|'''?|==|__|<<).*)$/)) {
+ # WikiName¸¡º÷¡¦ÃÖ´¹½èÍý¤Î¤ß¼Â»Ü¤·¤Æ½ªÎ»¤¹¤ë
+ push @array, $self->_parse_line_wikiname($pre . $source);
+ return @array;
}
- if($post ne ""){ push(@array,$self->parse_line($post)); }
-
- # ¥Ü¡¼¥ë¥É¡¢¥¤¥¿¥ê¥Ã¥¯¡¢¼è¤ê¾Ã¤·Àþ¡¢²¼Àþ
- } elsif($source =~ /((''')|('')|(==)|(__))(.+?)(\1)/){
- my $pre = $`;
- my $post = $';
- my $type = $1;
- my $label = $6;
- if($pre ne ""){ push(@array,$self->parse_line($pre)); }
- if($type eq "'''"){
- push @array,$self->bold($label);
- } elsif($type eq "__"){
- push @array,$self->underline($label);
- } elsif($type eq "''"){
- push @array,$self->italic($label);
- } elsif($type eq "=="){
- push @array,$self->denialline($label);
+
+ $pre .= $1; # match ¤·¤Ê¤«¤Ã¤¿ÀèƬÉôʬ¤Ïί¤á¤Æ¤ª¤¤¤Æ¸å¤Ç½èÍý¤¹¤ë
+ $source = $2; # match Éôʬ¤Ï¸å³½èÍý¤Ë¤Æ¾ÜºÙ¥Á¥§¥Ã¥¯¤ò¹Ô¤¦
+ @parsed = ();
+
+ # ¥×¥é¥°¥¤¥ó
+ if ($source =~ /^\{\{/) {
+ $source = $';
+ my $plugin = &Wiki::parse_inline_plugin($source);
+ unless($plugin){
+ push @parsed, '{{';
+ push @parsed, $self->parse_line($source);
+ } else {
+ my $info = &Wiki::get_plugin_info($plugin->{command});
+ if($info->{TYPE} eq "inline"){
+ push @parsed, $self->plugin($plugin);
+ } else {
+ push @parsed, $self->parse_line("<<".$plugin->{command}."¥×¥é¥°¥¤¥ó¤Ï¸ºß¤·¤Þ¤»¤ó¡£>>");
+ }
+ if ($source ne "") {
+ $source = $plugin->{post};
+ }
+ }
}
- if($post ne ""){ push(@array,$self->parse_line($post)); }
-
- # ¥Ú¡¼¥¸ÊÌ̾¥ê¥ó¥¯
- } elsif($source =~ /\[\[([^\[]+?)\|(.+?)\]\]/){
- my $pre = $`;
- my $post = $';
- my $label = $1;
- my $page = $2;
- if($pre ne ""){ push(@array,$self->parse_line($pre)); }
- push @array,$self->wiki_anchor($page,$label);
- if($post ne ""){ push(@array,$self->parse_line($post)); }
-
- # URLÊÌ̾¥ê¥ó¥¯
- } elsif($source =~ /\[([^\[]+?)\|((http|https|ftp|mailto):[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!\$&=:;\*#\@']*)\]/
- || $source =~ /\[([^\[]+?)\|(file:[^\[\]]*)\]/
- || $source =~ /\[([^\[]+?)\|((\/|\.\/|\.\.\/)+[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!\$&=:;\*#\@']*)\]/){
- my $pre = $`;
- my $post = $';
- my $label = $1;
- my $url = $2;
- if($pre ne ""){ push(@array,$self->parse_line($pre)); }
- if(index($url,'"') >= 0 || index($url,'><') >= 0 || index($url, 'javascript:') >= 0){
- push @array,"<span class=\"error\">ÉÔÀµ¤Ê¥ê¥ó¥¯¤Ç¤¹¡£</span>";
- } else {
- push @array,$self->url_anchor($url,$label);
+
+ # ¥Ú¡¼¥¸ÊÌ̾¥ê¥ó¥¯
+ elsif ($source =~ /^\[\[([^\[]+?)\|([^\|\[]+?)\]\]/) {
+ my $label = $1;
+ my $page = $2;
+ $source = $';
+ push @parsed, $self->wiki_anchor($page, $label);
}
- if($post ne ""){ push(@array,$self->parse_line($post)); }
-
- # URL¥ê¥ó¥¯
- } elsif($source =~ /(http|https|ftp|mailto):[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!\$&=:;\*#\@']*/
- || $source =~ /\[([^\[]+?)\|(file:[^\[\]]*)\]/){
- my $pre = $`;
- my $post = $';
- my $url = $&;
- if($pre ne ""){ push(@array,$self->parse_line($pre)); }
- if(index($url,'"') >= 0 || index($url,'><') >= 0 || index($url, 'javascript:') >= 0){
- push @array,"<span class=\"error\">ÉÔÀµ¤Ê¥ê¥ó¥¯¤Ç¤¹¡£</span>";
- } else {
- push @array,$self->url_anchor($url);
+
+ # URLÊÌ̾¥ê¥ó¥¯
+ elsif ($source
+ =~ /^\[([^\[]+?)\|((?:http|https|ftp|mailto):[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!&=:;\*#\@'\$]*)\]/
+ || $source =~ /^\[([^\[]+?)\|(file:[^\[\]]*)\]/
+ || $source
+ =~ /^\[([^\[]+?)\|((?:\/|\.\/|\.\.\/)+[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!&=:;\*#\@'\$]*)\]/
+ )
+ {
+ my $label = $1;
+ my $url = $2;
+ $source = $';
+ if ( index($url, q{"}) >= 0
+ || index($url, '><') >= 0
+ || index($url, 'javascript:') >= 0)
+ {
+ push @parsed, $self->parse_line('<<ÉÔÀµ¤Ê¥ê¥ó¥¯¤Ç¤¹¡£>>');
+ }
+ else {
+ push @parsed, $self->url_anchor($url, $label);
+ }
}
- if($post ne ""){ push(@array,$self->parse_line($post)); }
-
- # ¥Ú¡¼¥¸¥ê¥ó¥¯
- } elsif($source =~ /\[\[([^\|]+?)\]\]/){
- my $pre = $`;
- my $post = $';
- my $page = $1;
- if($pre ne ""){ push(@array,$self->parse_line($pre)); }
- push @array,$self->wiki_anchor($page);
- if($post ne ""){ push(@array,$self->parse_line($post)); }
-
- # Ǥ°Õ¤ÎURL¥ê¥ó¥¯
- } elsif($source =~ /\[([^\[]+?)\|(.+?)\]/){
- my $pre = $`;
- my $post = $';
- my $label = $1;
- my $url = $2;
- if($pre ne ""){ push(@array,$self->parse_line($pre)); }
- if(index($url,'"') >= 0 || index($url,'><') >= 0 || index($url, 'javascript:') >= 0){
- push @array,"<span class=\"error\">ÉÔÀµ¤Ê¥ê¥ó¥¯¤Ç¤¹¡£</span>";
- } else {
- push @array,$self->url_anchor($url,$label);
+
+ # URL¥ê¥ó¥¯
+ elsif ($source
+ =~ /^(?:https?|ftp|mailto):[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!&=:;\*#\@'\$]*/
+ || $source =~ /^file:[^\[\]]*/)
+ {
+ my $url = $&;
+ $source = $';
+ if ( index($url, q{"}) >= 0
+ || index($url, '><') >= 0
+ || index($url, 'javascript:') >= 0)
+ {
+ push @parsed, $self->parse_line('<<ÉÔÀµ¤Ê¥ê¥ó¥¯¤Ç¤¹¡£>>');
+ }
+ else {
+ push @parsed, $self->url_anchor($url);
+ }
+ }
+
+ # ¥Ú¡¼¥¸¥ê¥ó¥¯
+ elsif ($source =~ /^\[\[([^\|]+?)\]\]/) {
+ my $page = $1;
+ $source = $';
+ push @parsed, $self->wiki_anchor($page);
+ }
+
+ # Ǥ°Õ¤ÎURL¥ê¥ó¥¯
+ elsif ($source =~ /^\[([^\[]+?)\|(.+?)\]/) {
+ my $label = $1;
+ my $url = $2;
+ $source = $';
+ if ( index($url, q{"}) >= 0
+ || index($url, '><') >= 0
+ || index($url, 'javascript:') >= 0)
+ {
+ push @parsed, $self->parse_line('<<ÉÔÀµ¤Ê¥ê¥ó¥¯¤Ç¤¹¡£>>');
+ }
+ else {
+ # URI¤òºîÀ®
+ my $uri = &main::MyBaseUrl().$ENV{"PATH_INFO"};
+ push @parsed, $self->url_anchor($uri . '/../' . $url, $label);
+ }
+ }
+
+ # ¥Ü¡¼¥ë¥É¡¢¥¤¥¿¥ê¥Ã¥¯¡¢¼è¤ê¾Ã¤·Àþ¡¢²¼Àþ
+ elsif ($source =~ /^('''?|==|__)(.+?)\1/) {
+ my $type = $1;
+ my $label = $2;
+ $source = $';
+ if ($type eq q{'''}) {
+ push @parsed, $self->bold($label);
+ }
+ elsif ($type eq q{__}) {
+ push @parsed, $self->underline($label);
+ }
+ elsif ($type eq q{''}) {
+ push @parsed, $self->italic($label);
+ }
+ else { ## elsif ($type eq q{==}) {
+ push @parsed, $self->denialline($label);
+ }
+ }
+
+ # ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸
+ elsif ($source =~ /^<<(.+?)>>/) {
+ my $label = $1;
+ $source = $';
+ push @parsed, $self->error($label);
+ }
+
+ # ¥¤¥ó¥é¥¤¥ó Wiki ½ñ¼°Á´ÂÎ¤Ë¤Ï macth ¤·¤Ê¤«¤Ã¤¿¤È¤
+ else {
+ # 1 ʸ»ú¿Ê¤à¡£
+ if ($source =~ /^(.)/) {
+ $pre .= $1;
+ $source = $';
+ }
+
+ # parse ·ë²Ì¤ò @array ¤ËÊݸ¤¹¤ë½èÍý¤òÈô¤Ð¤·¤Æ·«¤êÊÖ¤·¡£
+ next SOURCE;
+ }
+
+ # ¥¤¥ó¥é¥¤¥ó Wiki ½ñ¼°Á´ÂÎ¤Ë macth ¤·¤¿¸å¤Î
+ # parse ·ë²Ì¤ò @array ¤ËÊݸ¤¹¤ë½èÍý¡£
+
+ # ¤â¤· $pre ¤¬Î¯¤Þ¤Ã¤Æ¤¤¤ë¤Ê¤é¡¢WikiName¤Î½èÍý¤ò¼Â»Ü¡£
+ if ($pre ne q{}) {
+ push @array, $self->_parse_line_wikiname($pre);
+ $pre = q{};
+ }
+
+ push @array, @parsed;
+ }
+
+ # ¤â¤· $pre ¤¬Î¯¤Þ¤Ã¤Æ¤¤¤ë¤Ê¤é¡¢WikiName¤Î½èÍý¤ò¼Â»Ü¡£
+ if ($pre ne q{}) {
+ push @array, $self->_parse_line_wikiname($pre);
+ }
+
+ return @array;
+}
+
+#========================================================================
+# parse_line() ¤«¤é¸Æ¤Ó½Ð¤µ¤ì¡¢WikiName¤Î¸¡º÷¡¦ÃÖ´¹½èÍý¤ò¹Ô¤¤¤Þ¤¹¡£
+#========================================================================
+sub _parse_line_wikiname {
+ my $self = shift;
+ my $source = shift;
+
+ return () if (not defined $source);
+
+ my @array = ();
+
+ # $source ¤¬¶õ¤Ë¤Ê¤ë¤Þ¤Ç·«¤êÊÖ¤¹¡£
+ while ($source ne q{}) {
+
+ # WikiName
+ if ($main::WIKI_NAME == 1 && $source =~ /[A-Z]+?[a-z]+?(?:[A-Z]+?[a-z]+)+/) {
+ my $pre = $`;
+ my $page = $&;
+ $source = $';
+ if ($pre ne q{}) {
+ push @array, $self->_parse_line_wikiname($pre);
+ }
+ push @array, $self->wiki_anchor($page);
+ }
+
+ # WikiName ¤â¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¤È¤
+ else {
+ push @array, $self->text($source);
+ return @array;
}
- if($post ne ""){ push(@array,$self->parse_line($post)); }
-
- # WikiName
- } elsif($main::WIKI_NAME==1 && $source =~ /[A-Z]+?[a-z]+?([A-Z]+?[a-z]+)+/){
- my $pre = $`;
- my $post = $';
- my $page = $&;
- if($pre ne ""){ push(@array,$self->parse_line($pre)); }
- push @array,$self->wiki_anchor($page);
- if($post ne ""){ push(@array,$self->parse_line($post)); }
-
- } else {
- push @array,$self->text($source);
}
-
return @array;
}
+#===============================================================================
+# <p>
+# ¥Ñ¡¼¥¹¤ò³«»ÏÁ°¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
+# ¥µ¥Ö¥¯¥é¥¹¤ÇɬÍפʽèÍý¤¬¤¢¤ë¾ì¹ç¤Ï¥ª¡¼¥Ð¡¼¥é¥¤¥É¤·¤Æ¤¯¤À¤µ¤¤¡£
+# </p>
+#===============================================================================
+sub start_parse {}
+
#==============================================================================
# ¥ê¥¹¥È
#==============================================================================
$self->{para} = 0;
}
+ if($self->{list} == 1 && $level <= $self->{level}){
+ $self->end_list;
+ }
+ $self->{list} = 0;
+
$self->end_verbatim;
$self->end_table;
$self->end_quote;
- $self->end_explan;
my $html = join("",@$obj);
- my $plus = 1;
-
- if($level < $self->{level}){ $plus = -1; }
- if($level==$self->{level}){
- $self->{html} .= "</li>\n";
- }
- while($level != $self->{level}){
- if($plus==1){
+
+ if($level > $self->{level}){
+ while($level != $self->{level}){
$self->{html} .= "<ul>\n";
push(@{$self->{close_list}},"</ul>\n");
- } else {
- $self->{html} .= "</li>\n";
+ $self->{level}++;
+ }
+ } elsif($level <= $self->{level}){
+ while($level-1 != $self->{level}){
+ if($self->{'list_close_'.$self->{level}} == 1){
+ $self->{html} .= "</li>\n";
+ $self->{'list_close_'.$self->{level}} = 0;
+ }
+ if($level == $self->{level}){
+ last;
+ }
$self->{html} .= pop(@{$self->{close_list}});
+ $self->{level}--;
}
- $self->{level} += $plus;
}
$self->{html} .= "<li>".$html;
+ $self->{'list_close_'.$level} = 1;
}
#==============================================================================
$self->{para} = 0;
}
+ if($self->{list} == 0 && $level <= $self->{level}){
+ $self->end_list;
+ }
+ $self->{list} = 1;
+
$self->end_verbatim;
$self->end_table;
$self->end_quote;
- $self->end_explan;
my $html = join("",@$obj);
- my $plus = 1;
- if($level < $self->{level}){ $plus = -1; }
- if($level==$self->{level}){
- $self->{html} .= "</li>\n";
- }
- while($level != $self->{level}){
- if($plus==1){
+ if($level > $self->{level}){
+ while($level != $self->{level}){
$self->{html} .= "<ol>\n";
push(@{$self->{close_list}},"</ol>\n");
- } else {
- $self->{html} .= "</li>\n";
+ $self->{level}++;
+ }
+ } elsif($level <= $self->{level}){
+ while($level-1 != $self->{level}){
+ if($self->{'list_close_'.$self->{level}} == 1){
+ $self->{html} .= "</li>\n";
+ $self->{'list_close_'.$self->{level}} = 0;
+ }
+ if($level == $self->{level}){
+ last;
+ }
$self->{html} .= pop(@{$self->{close_list}});
+ $self->{level}--;
}
- $self->{level} += $plus;
}
+
$self->{html} .= "<li>".$html;
+ $self->{'list_close_'.$level} = 1;
}
#==============================================================================
#==============================================================================
sub end_list {
my $self = shift;
- if ($self->{level}!=0) {
- $self->{html} .= "</li>\n";
- while($self->{level}!=0){
- $self->{html} .= pop(@{$self->{close_list}});
- $self->{level} += -1;
+ while($self->{level} != 0){
+ if($self->{'list_close_'.($self->{level})} == 1){
+ $self->{html} .= "</li>\n";
+ $self->{'list_close_'.$self->{level}} = 0;
}
+ $self->{html} .= pop(@{$self->{close_list}});
+ $self->{level}--;
}
}
$self->end_verbatim;
$self->end_table;
$self->end_quote;
- $self->end_explan;
my $html = join("",@$obj);
+ # ¥á¥¤¥ó¤Îɽ¼¨Îΰè¤Ç¤Ê¤¤¤È¤
if(!$self->{main}){
$self->{html} .= "<h".($level+1).">".$html."</h".($level+1).">\n";
+
+ # ¥á¥¤¥ó¤Îɽ¼¨Îΰè¤Î¾ì¹ç¤Ï¥¢¥ó¥«¤ò½ÐÎÏ
} else {
if($level==2){
- $self->{html} .= "<h".($level+1)."><a name=\"p".$self->{p_cnt}."\">".
- "<span class=\"sanchor\">_</span></a>".$html."</h".($level+1).">\n";
+ $self->{html} .= "<h".($level+1)."><a name=\"p".$self->{p_cnt}."\"><span class=\"sanchor\"> </span>".
+ $html."</a></h".($level+1).">\n";
} else {
- $self->{html} .= "<h".($level+1).">".
- "<a name=\"p".$self->{p_cnt}."\">".$html."</a>".
- "</h".($level+1).">\n";
+ $self->{html} .= "<h".($level+1)."><a name=\"p".$self->{p_cnt}."\">".$html."</a></h".($level+1).">\n";
}
}
$self->{p_cnt}++;
sub l_line {
my $self = shift;
+ if($self->{para}==1){
+ $self->{html} .= "</p>\n";
+ $self->{para} = 0;
+ }
+
$self->end_list;
$self->end_verbatim;
$self->end_table;
$self->end_quote;
- $self->end_explan;
$self->{html} .= "<hr>\n";
}
$self->end_verbatim;
$self->end_table;
$self->end_quote;
- $self->end_explan;
if($self->{para}==1){
$self->{html} .= "</p>\n";
$self->{para} = 0;
+ } elsif($main::BR_MODE==1){
+ $self->{html} .= "<br>\n";
}
}
$self->end_list;
$self->end_table;
$self->end_quote;
- $self->end_explan;
+ $text =~ s/^\s//;
$self->{pre} .= Util::escapeHTML($text)."\n";
}
sub end_verbatim {
my $self = shift;
if($self->{pre} ne ""){
- $self->{html} .= "<pre>".$self->{pre}."</pre>";
+ $self->{html} .= "<pre>".$self->{pre}."</pre>\n";
$self->{pre} = "";
}
}
$self->end_list;
$self->end_verbatim;
$self->end_quote;
- $self->end_explan;
+
+ my $tag = "td";
if($self->{table}==0){
$self->{table}=1;
$self->{html} .= "<table>\n";
- $self->{html} .= "<tr>\n";
- foreach(@$row){
- my $html = join("",@$_);
- $self->{html} .= "<th>".$html."</th>\n";
- }
- $self->{html} .= "</tr>\n";
+ $tag = "th";
} else {
$self->{table}=2;
- $self->{html} .= "<tr>\n";
- foreach(@$row){
- my $html = join("",@$_);
- $self->{html} .= "<td>".$html."</td>\n";
+ }
+
+ my @columns = ();
+ foreach(@$row){
+ my $html = join("",@$_);
+ if($#columns != -1 && $html eq '<<'){
+ @columns[$#columns]->{colspan}++;
+ } else {
+ push(@columns, {colspan => 1, html => $html});
}
- $self->{html} .= "</tr>\n";
}
+ $self->{html} .= "<tr>\n";
+ foreach(@columns){
+ $self->{html} .= "<$tag colspan=\"".$_->{colspan}."\">".$_->{html}."</$tag>\n";
+ }
+ $self->{html} .= "</tr>\n";
}
sub end_table {
$self->end_verbatim;
$self->end_table;
$self->end_quote;
- $self->end_explan;
if($self->{para}==1){
$self->{html} .= "</p>\n";
$self->end_verbatim;
$self->end_table;
$self->end_quote;
- $self->end_explan;
my $html = join("",@$obj);
if($self->{para}==0){
$self->{para} = 1;
}
$self->{html} .= $html;
+
+ # br¥â¡¼¥É¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï<br>¤ò¤¹
+ if($main::BR_MODE==1){
+ $self->{html} .= "<br>\n";
+ }
}
#==============================================================================
$self->end_list;
$self->end_verbatim;
$self->end_table;
- $self->end_explan;
my $html = join("",@$obj);
$self->{quote} .= "<p>".$html."</p>\n";
}
my $obj1 = shift;
my $obj2 = shift;
- if($self->{para}==1){
- $self->{html} .= "</p>";
- $self->{para} = 0;
- }
-
$self->end_list;
$self->end_verbatim;
$self->end_table;
$self->end_quote;
- if($self->{explan}==0){
- $self->{explan}=1;
- $self->{html} .= "<dl>\n";
- }
-
my $html1 = join("",@$obj1);
my $html2 = join("",@$obj2);
- $self->{html} .= "<dt>".$html1."</dt>\n<dd>".$html2."</dd>\n";
-}
-
-sub end_explan {
- my $self = shift;
- if($self->{explan}!=0){
- $self->{explan} = 0;
- $self->{html} .= "</dl>\n";
- }
+ $self->{html} .= "<dl>\n<dt>".$html1."</dt>\n<dd>".$html2."</dd>\n</dl>\n";
}
#==============================================================================
$name = $url;
}
- if($url eq $name && $url=~/\.(gif|jpg|jpeg|bmp|png)$/i){
+ if($url eq $name && $url=~/\.(gif|jpg|jpeg|bmp|png)$/i && $main::DISPLAY_IMAGE==1){
return "<img src=\"".$url."\">";
} else {
return "<a href=\"$url\">".Util::escapeHTML($name)."</a>";
my $page = shift;
my $name = shift;
+ my $anchor = undef;
+ my $ppage = $page;
+
if(!defined($name) || $name eq ""){
$name = $page;
}
- if(&Wiki::exists_page($page)){
- return "<a href=\"$main::MAIN_SCRIPT?p=".&Util::url_encode($page)."\" class=\"wikipage\">".
+ if(&Wiki::page_exists($page)){
+ #¥¢¥ó¥«¡¼¤ò´Þ¤à¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¾ì¹ç¤Ï¥ê¥ó¥¯¤òÍ¥Àè
+ return "<a href=\"".&Wiki::create_page_url($page)."\" class=\"wikipage\">".
&Util::escapeHTML($name)."</a>";
} else {
- return "<span class=\"nopage\">".&Util::escapeHTML($name)."</span>".
- "<a href=\"$main::MAIN_SCRIPT?p=".&Util::url_encode($page)."\">?</a>";
+ #ºÇ¸å¤Î"#"°Ê¹ß¤ò¥¢¥ó¥«¡¼¤È¤¹¤ë
+ if($page =~ m/#([^#]+)$/) {
+ $page = $`;
+ $anchor = $1;
+ }
+ if(defined($anchor) && $page eq '') {
+ #Ʊ°ì¥Ú¡¼¥¸¤Î¥¢¥ó¥«¡¼¥ê¥ó¥¯
+ return "<a href=\"#$anchor\" class=\"wikipage\">".
+ &Util::escapeHTML($name)."</a>";
+ } elsif(&Wiki::page_exists($page)) {
+ #»ØÄê¥Ú¡¼¥¸¤Î¥¢¥ó¥«¡¼¥ê¥ó¥¯
+ return "<a href=\"".&Wiki::create_page_url($page).(defined($anchor)?"#".$anchor:"")."\" class=\"wikipage\">".
+ &Util::escapeHTML($name)."</a>";
+ } else {
+ #¿·µ¬¥Ú¡¼¥¸ºîÀ®ÍÑ¥ê¥ó¥¯
+ return "<span class=\"nopage\">".&Util::escapeHTML($name)."</span>".
+ "<a href=\"".&Wiki::create_page_url($page)."\">?</a>";
+ }
}
}
my $self = shift;
my $plugin = shift;
- my $func_ref = $main::I_PLUGIN->{$plugin->{command}};
+ my $func_ref = &Wiki::get_plugin_info($plugin->{command})->{FUNCTION};
my $result = &$func_ref(@{$plugin->{args}});
if(defined($result) && $result ne ""){
return ($result);
$self->end_verbatim;
$self->end_table;
$self->end_quote;
- $self->end_explan;
- my $func_ref = $main::P_PLUGIN->{$plugin->{command}};
+ my $func_ref = &Wiki::get_plugin_info($plugin->{command})->{FUNCTION};
my $result = &$func_ref(@{$plugin->{args}});
if(defined($result) && $result ne ""){
$self->{html} .= $result;
# ¥¤¥á¡¼¥¸
#==============================================================================
sub l_image {
- my $self = shift;
- my $page = shift;
- my $file = shift;
- my $wiki = $self->{wiki};
+ my $self = shift;
+ my $page = shift;
+ my $file = shift;
+ my $width = shift;
+ my $height = shift;
if($self->{para}==1){
- $self->{html} .= "</p>";
+ $self->{html} .= "</p>\n";
$self->{para} = 0;
}
$self->end_verbatim;
$self->end_table;
$self->end_quote;
- $self->end_explan;
- $self->{html} .= "<img src=\"".$wiki->config('script_name')."?action=ATTACH&".
- "page=".&Util::url_encode($page)."&file=".&Util::url_encode($file)."\">";
+ $self->{html} .= "<div class=\"image\">";
+ $self->{html} .= "<img src=\"".&Wiki::create_url({'p'=>$page,'f'=>$file},$main::DOWNLOAD_SCRIPT)."\"";
+ $self->{html} .= " width=\"$width\"" if ($width ne "");
+ $self->{html} .= " height=\"$height\"" if ($height ne "");
+ $self->{html} .= "/>";
+ $self->{html} .= "</div>\n";
}
+#==============================================================================
+# ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸
+#==============================================================================
+sub error {
+ my $self = shift;
+ my $label = shift;
+
+ return "<span class=\"error\">".Util::escapeHTML($label)."</span>";
+}
################################################################################
#
#===============================================================================
sub url_encode {
my $retstr = shift;
+ &jcode::convert(\$retstr,"euc");
+
$retstr =~ s/([^ 0-9A-Za-z])/sprintf("%%%.2X", ord($1))/eg;
$retstr =~ tr/ /+/;
return $retstr;
#===============================================================================
sub url_decode{
my $retstr = shift;
+
$retstr =~ tr/+/ /;
$retstr =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge;
return $retstr;
#===============================================================================
sub escapeHTML {
my($retstr) = shift;
+ &jcode::convert(\$retstr,"euc");
+
my %table = (
'&' => '&',
'"' => '"',
'>' => '>',
);
$retstr =~ s/([&\"<>])/$table{$1}/go;
+ $retstr =~ s/&#([0-9]{1,5});/&#$1;/go;
+ $retstr =~ s/&#(0*(0|9|10|13|38|60|62));/&#$1;/g;
+# $retstr =~ s/&([a-zA-Z0-9]{2,8});/&$1;/go;
return $retstr;
}
}
#===============================================================================
+# ¥Ú¡¼¥¸Ì¾¤¬»ÈÍѲÄǽ¤«¤É¤¦¤«¥Á¥§¥Ã¥¯¤·¤Þ¤¹¡£
+#===============================================================================
+sub check_pagename {
+ my $pagename = shift;
+
+ #¥Ú¡¼¥¸Ì¾¤ò¥Á¥§¥Ã¥¯
+ if( !defined($pagename)
+ || $pagename eq "" # ¶õ
+ || $pagename =~ /[\|\[\]]/ # |[]
+ || $pagename =~ /^:/ # ¥³¥í¥ó¤Ç»Ï¤Þ¤ë
+ || $pagename =~ /[^:]:[^:]/ # ¥³¥í¥óñÂΤǤλÈÍÑ
+ || $pagename =~ /^\s+$/ # ¶õÇò¤Î¤ß
+ ){
+ return 0;
+ }
+ return 1;
+}
+
+#===============================================================================
# ¿ôÃͤ«¤É¤¦¤«¥Á¥§¥Ã¥¯¤·¤Þ¤¹¡£
#===============================================================================
sub check_numeric {
}
}
+#==============================================================================
+# ¥á¡¼¥ëÁ÷¿®
+#==============================================================================
+sub send_mail {
+ my $action = shift;
+ my $page = shift;
+ my $enc_page = &Util::url_encode($page);
+
+ if($main::ADMIN_MAIL eq "" || $main::SEND_MAIL eq ""){
+ return;
+ }
+
+ my $subject = "";
+ if($action eq 'CREATE'){
+ $subject = "[FSWikiLite]$page¤¬ºîÀ®¤µ¤ì¤Þ¤·¤¿";
+
+ } elsif($action eq 'MODIFY'){
+ $subject = "[FSWikiLite]$page¤¬¹¹¿·¤µ¤ì¤Þ¤·¤¿";
+
+ } elsif($action eq 'DELETE'){
+ $subject = "[FSWikiLite]$page¤¬ºï½ü¤µ¤ì¤Þ¤·¤¿";
+ }
+
+ # MIME¥¨¥ó¥³¡¼¥É
+ $subject = &main::mimeencode($subject);
+
+ my $head = "Subject: $subject\n".
+ "From: $main::ADMIN_MAIL\n".
+ "Content-Transfer-Encoding: 7bit\n".
+ "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n".
+ "Reply-To: $main::ADMIN_MAIL\n".
+ "\n";
+
+ my $body = "IP:".$ENV{'REMOTE_ADDR'}."\n".
+ "UA:".$ENV{'HTTP_USER_AGENT'}."\n";
+
+ if($action eq 'MODIFY' || $action eq 'DELETE'){
+ if(-e "$main::BACKUP_DIR/$enc_page.bak"){
+ $body .= "°Ê²¼¤ÏÊѹ¹Á°¤Î¥½¡¼¥¹¤Ç¤¹¡£\n".
+ "-----------------------------------------------------\n";
+ open(BACKUP,"$main::BACKUP_DIR/$enc_page.bak");
+ while(my $line = <BACKUP>){
+ $body .= $line;
+ }
+ close(BACKUP);
+ }
+ }
+
+ # ʸ»ú¥³¡¼¥É¤ÎÊÑ´¹(jcode.pl¤ò»ÈÍѤ¹¤ë)
+ &jcode::convert(\$body,'jis');
+
+ open(MAIL,"| $main::SEND_MAIL $main::ADMIN_MAIL");
+ print MAIL $head;
+ print MAIL $body;
+ close(MAIL);
+}
+
#===============================================================================
# ¥¨¥é¡¼¤òÄÌÃÎ
#===============================================================================
if(!defined($ua)){
return 0;
}
- if($ua=~/^DoCoMo\// || $ua=~ /^J-PHONE\// || $ua=~ /UP\.Browser/){
+ if($ua=~/^DoCoMo\// || $ua=~ /^J-PHONE\// || $ua=~ /UP\.Browser/ || $ua=~ /\(DDIPOCKET\;/ || $ua=~ /\(WILLCOM\;/ || $ua=~ /^Vodafone\// || $ua=~ /^SoftBank\//){
return 1;
} else {
return 0;
}
#===============================================================================
-# ¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó¤ò¥Ñ¡¼¥¹¤·¤Æ¥³¥Þ¥ó¥É¤È°ú¿ô¤Ëʬ³ä
+# ¥¹¥Þ¡¼¥È¥Õ¥©¥ó¤«¤É¤¦¤«¥Á¥§¥Ã¥¯¤·¤Þ¤¹¡£
#===============================================================================
-sub parse_plugin {
- my $text = shift;
- my ($cmd,@args_tmp) = split(/ /,$text);
- my $args_txt = &Util::trim(join(" ",@args_tmp));
-
- my @ret_args;
- my $tmp = "";
- my $escape = 0;
- my $quote = 0;
-
- for(my $i=0;$i<length($args_txt);$i++){
- my $c = substr($args_txt,$i,1);
-
- if($quote!=1 && $c eq ","){
- if($tmp ne ""){
- push(@ret_args,$tmp);
- $tmp = "";
- $quote = 0;
- }
- } elsif($quote==1 && $c eq "\\"){
- if($escape==0){
- $escape = 1;
- } else {
- $tmp .= $c;
- $escape = 0;
- }
- } elsif($quote==0 && $c eq '"'){
- if($tmp eq ""){
- $quote = 1;
- } else {
- $tmp .= $c;
- }
- } elsif($quote==1 && $c eq '"'){
- if($escape==1){
- $tmp .= $c;
- $escape = 0;
- } else {
- $quote = 2;
- }
- } elsif($quote==2){
- return {error=>"¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó¤Î¹½Ê¸¤¬ÉÔÀµ¤Ç¤¹¡£"};
- } else {
- $tmp .= $c;
- }
+sub smartphone {
+ my $ua = $ENV{'HTTP_USER_AGENT'};
+ if(!defined($ua)){
+ return 0;
}
-
- if($tmp ne ""){
- push(@ret_args,$tmp);
+ if($ua =~ /Android/ || $ua =~ /iPhone/){
+ return 1;
+ } else {
+ return 0;
}
-
- return {command=>$cmd,args=>\@ret_args};
}
1;
$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;
+ $main::I_PLUGIN->{category} = \&Wiki::Plugin::category;
+ $main::I_PLUGIN->{lastmodified} = \&Wiki::Plugin::lastmodified;
+ $main::I_PLUGIN->{ref} = \&Wiki::Plugin::ref;
+ $main::I_PLUGIN->{raw} = \&Wiki::Plugin::raw;
+
+ # ¥Ö¥í¥Ã¥¯¥×¥é¥°¥¤¥ó¤Î¥¨¥ó¥È¥ê
+ $main::B_PLUGIN->{pre} = \&Wiki::Plugin::pre;
+ $main::B_PLUGIN->{bq} = \&Wiki::Plugin::bq;
}
#==============================================================================
#==============================================================================
sub recent {
my $max = shift;
- $max = 0 if($max eq "");
+ my $way = shift;
+
+ # ɽ¼¨Êý¼°¤ò·èÄê
+ if($way eq ""){
+ $way = "H";
+ }
+ if($max eq "V" || $max eq "v"){
+ $way = "V";
+ $max = 0;
+ } elsif($max eq "H" || $max eq "h"){
+ $way = "H";
+ $max = 0;
+ } elsif($max eq ""){
+ $max = 0;
+ }
+
+ # ɽ¼¨ÆâÍƤòºîÀ®
my $buf = "";
+ my $content = "";
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";
+ $content = "<a href=\"".&Wiki::create_url({p=>$page->{NAME}})."\">".&Util::escapeHTML($page->{NAME})."</a>";
+ if($way eq "H" || $way eq "h"){
+ if($count!=0){
+ $buf .= " / ";
+ }
+ $buf .= $content;
+ } else {
+ if($count==0){
+ $buf .= "<ul>\n";
+ }
+ $buf .= "<li>".$content."</li>\n";
+ }
$count++;
last if($count==$max && $max!=0);
}
- $buf .= "</ul>\n";
-
+ if($count>0 && $way ne "H" && $way ne "h"){
+ $buf .= "</ul>\n";
+ }
return $buf;
}
$buf .= "<ul>\n";
}
- $buf .= "<li><a href=\"$main::MAIN_SCRIPT?p=".&Util::url_encode($page->{NAME})."\">".
+ $buf .= "<li><a href=\"".&Wiki::create_url({p=>$page->{NAME}})."\">".
&Util::escapeHTML($page->{NAME})."</a></li>\n";
}
sub category {
my $category = shift;
if($category eq ""){
- return "¥«¥Æ¥´¥ê¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£";
+ return "<span class=\"error\">¥«¥Æ¥´¥ê¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£</span>";
} else {
- return "[<a href=\"$main::CATEGORY_SCRIPT?c=".&Util::url_encode($category)."\">".
+ return "[<a href=\"".&Wiki::create_url({c=>$category},$main::CATEGORY_SCRIPT)."\">".
"¥«¥Æ¥´¥ê:".&Util::escapeHTML($category)."</a>]";
}
}
# ¥Ú¡¼¥¸¤ÎºÇ½ª¹¹¿·Æü»þ¤òɽ¼¨¤¹¤ë¥×¥é¥°¥¤¥ó¡£
#=============================================================================
sub lastmodified {
- my $page = $main::in{"p"};
- if(&Wiki::exists_page($page)){
+ my $page = shift || $main::in{"p"};
+ if(&Wiki::page_exists($page)){
return "ºÇ½ª¹¹¿·»þ´Ö¡§".&Util::format_date(&Wiki::get_last_modified($page));
} else {
return undef;
# ¥«¥Æ¥´¥ê¤Ë¥Þ¥Ã¥Á¤·¤¿¤é¥ê¥¹¥Æ¥£¥ó¥°
if($line =~ /{{category\s+$category}}/){
- $buf .= "<li><a href=\"$main::MAIN_SCRIPT?p=".&Util::url_encode($page->{NAME})."\">".
+ $buf .= "<li><a href=\"".&Wiki::create_url({p=>$page->{NAME}})."\">".
&Util::escapeHTML($page->{NAME})."</a></li>";
last;
}
next if($line =~ /^(\t| |\/\/)/);
# ¥«¥Æ¥´¥ê¤Ë¥Þ¥Ã¥Á¤·¤¿¤é¥ê¥¹¥Æ¥£¥ó¥°
- while($line =~ /{{category\s+(.+?)}}/g){
+ while($line =~ /\{\{category\s+(.+?)\}\}/g){
$category->{$1}->{$page->{NAME}} = 1;
}
}
$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)."\">".
+ $buf .= "<li><a href=\"".&Wiki::create_url({p=>$page})."\">".
&Util::escapeHTML($page)."</a></li>\n";
}
$buf .= "</ul>\n";
# źÉÕ¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥ó¥¯¤òɽ¼¨¤¹¤ë¤¿¤á¤Î¥×¥é¥°¥¤¥ó¡£
#=============================================================================
sub ref {
- my $page = $main::in{"p"};
- my $file = shift;
+ my $file = shift;
+ my $page = shift;
+ my $alias = shift;
if($file eq ""){
- return "¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£";
+ return "<p class=\"error\">¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£</p>\n";
+ }
+ if(!defined($page) || $page eq ""){
+ $page = $main::in{"p"};
+ }
+ if(!defined($alias) || $alias eq ""){
+ $alias = $file;
}
my $filename = sprintf("$main::ATTACH_DIR/%s.%s",
&Util::url_encode($page),&Util::url_encode($file));
unless(-e $filename){
- return "¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤»¤ó¡£";
+ return "<p class=\"error\">¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤»¤ó¡£</p>\n";
}
- return sprintf("<a href=\"$main::DOWNLOAD_SCRIPT?p=%s&f=%s\">%s</a>",
- &Util::url_encode($page),&Util::url_encode($file),$file);
+ return "<a href=\"".&Wiki::create_url({p=>$page,f=>$file},$main::DOWNLOAD_SCRIPT)."\">".&Util::escapeHTML($alias)."</a>";
}
#=============================================================================
# źÉÕ¥Õ¥¡¥¤¥ë¤ò²èÁü¤È¤·¤Æɽ¼¨¤¹¤ë¤¿¤á¤Î¥×¥é¥°¥¤¥ó¡£
#=============================================================================
sub ref_image {
- my $page = $main::in{"p"};
- my $file = shift;
+ my $file = shift;
+ my $page = "";
+
+ my @options = @_;
+ my $width = "";
+ my $height = "";
if($file eq ""){
- return "¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£";
+ return "<p class=\"error\">¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£</p>\n";
+ }
+ foreach my $option (@options){
+ if($option =~ /^w([0-9]+)$/){
+ $width = $1;
+ } elsif($option =~ /^h([0-9]+)$/){
+ $height = $1;
+ } else {
+ $page = $option;
+ }
+ }
+ if($page eq ""){
+ $page = $main::in{"p"};
}
my $filename = sprintf("$main::ATTACH_DIR/%s.%s",
&Util::url_encode($page),&Util::url_encode($file));
unless(-e $filename){
- return "<p>¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤»¤ó¡£</p>\n";
+ return "<p class=\"error\">¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤»¤ó¡£</p>\n";
}
- return sprintf("<div><img src=\"$main::DOWNLOAD_SCRIPT?p=%s&f=%s\"></div>",
- &Util::url_encode($page),&Util::url_encode($file));
+ &Wiki::get_current_parser()->l_image($page, $file, $width, $height);
+ return undef;
}
#=============================================================================
# źÉÕ¥Õ¥¡¥¤¥ë¤ò²èÁü¤È¤·¤Æɽ¼¨¤¹¤ë¤¿¤á¤Î¥×¥é¥°¥¤¥ó¡£
#=============================================================================
sub ref_text {
- my $page = $main::in{"p"};
my $file = shift;
+ my $page = shift || $main::in{"p"};
if($file eq ""){
- return "¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£";
+ return "<p class=\"error\">¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£</p>\n";
}
my $filename = sprintf("$main::ATTACH_DIR/%s.%s",
&Util::url_encode($page),&Util::url_encode($file));
unless(-e $filename){
- return "<p>¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤»¤ó¡£</p>\n";
+ return "<p class=\"error\">¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤»¤ó¡£</p>\n";
}
my $text = "";
# ½ÐÎϤµ¤ì¤ëHTML¤Ï¤Á¤ç¤Ã¤È¼êÈ´¤¤Ç¤¹¡Ä
#=============================================================================
sub outline {
- my $page = $main::in{'p'};
- my $source = &Wiki::get_page($page);
+ my $page = shift;
+ my $url = "";
+
+ if (!defined($page)) {
+ $page = $main::in{'p'};
+ } else {
+ $url = &Wiki::create_url({p=>$page});
+ }
+
+ my $source = "";
my $level = 0;
my $count = 0;
my $buf = "";
+
+ if(&Wiki::page_exists($page)){
+ $source = &Wiki::get_page($page);
+ }
+
foreach my $line (split(/\n/,$source)){
if($line=~/^(!{1,3})(.+)$/){
my $find_level = 4 - length($1);
}
my $section = &Util::delete_tag(&Wiki::process_wiki($2));
- $buf .= "<li><a href=\"#p$count\">$section</a></li>\n";
+ $buf .= "<li><a href=\"".$url."#p$count\">$section</a></li>\n";
$count++;
}
}
# ¸¡º÷¥Õ¥©¡¼¥à¤òɽ¼¨¤¹¤ë¤¿¤á¤Î¥×¥é¥°¥¤¥ó
#=============================================================================
sub search {
- return "<form action=\"$main::MAIN_SCRIPT\" method=\"GET\">\n".
+ my $way = shift;
+ my $or_checked = $main::in{'t'} eq 'or';
+ my $with_content = $main::in{'c'} eq 'true';
+ return "<form action=\"".&Wiki::create_url({},$main::MAIN_SCRIPT)."\" method=\"GET\">\n".
" ¥¡¼¥ï¡¼¥É <input type=\"text\" name=\"w\" size=\"20\" value=\"".&Util::escapeHTML($main::in{'w'})."\">\n".
+ ($way eq "v" ? "<br>" : "").
+ " <input type=\"radio\" name=\"t\" id=\"and\" value=\"and\"".(!$or_checked?" checked":"")."><label for=\"and\">AND</label>".
+ " <input type=\"radio\" name=\"t\" id=\"or\" value=\"or\"".($or_checked?" checked":"")."><label for=\"or\">OR</label>".
+ ($way eq "v" ? "<br>" : "").
+ " <input type=\"checkbox\" name=\"c\" id=\"contents\" value=\"true\"".($with_content?" checked":"")."><label for=\"contents\">¥Ú¡¼¥¸ÆâÍƤâ´Þ¤á¤ë</label>".
" <input type=\"submit\" value=\" ¸¡ º÷ \">\n".
" <input type=\"hidden\" name=\"a\" value=\"search\">\n".
"</form>\n";
}
+#=============================================================================
+# °ú¿ô¤Ç»ØÄꤷ¤¿Ê¸»úÎó¤ò¤½¤Î¤Þ¤Þɽ¼¨¤¹¤ë¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó
+#=============================================================================
+sub raw {
+ my $text = shift;
+ return &Util::escapeHTML($text);
+}
+
+#=============================================================================
+# pre¥¿¥°¤ò½ÐÎϤ¹¤ëÊ£¿ô¹Ô¥×¥é¥°¥¤¥ó
+#=============================================================================
+sub pre {
+ my $text = shift;
+ my $option = shift;
+
+ my $count = 1;
+ my $buf = "<pre>";
+ my @lines = split(/\n/, $text);
+ my $len = length($#lines + 1);
+ foreach my $line (@lines){
+ if($option eq "num"){
+ $buf .= sprintf("%0${len}d", $count) . "|";
+ }
+ $buf .= Util::escapeHTML($line) . "\n";
+ $count++;
+ }
+
+ return $buf . "</pre>";
+}
+
+#=============================================================================
+# blockquote¥¿¥°¤ò½ÐÎϤ¹¤ëÊ£¿ô¹Ô¥×¥é¥°¥¤¥ó
+#=============================================================================
+sub bq {
+ my $text = shift;
+ my $buf = "<blockquote>";
+ foreach my $line (split(/(\r\n)|\n|\r/,&Util::escapeHTML($text))){
+ $buf .= "<p>$line<p>";
+ }
+ $buf .= "</blockquote>";
+ return $buf;
+}
+
1;