1 ################################################################################
3 # FSWikiLite ¶¦ÄÌ´Ø¿ô¥Õ¥¡¥¤¥ë
5 ################################################################################
6 require "./lib/cgi-lib.pl";
7 require "./lib/jcode.pl";
8 require "./lib/mimew.pl";
9 require "./lib/setup.pl";
10 #-------------------------------------------------------------------------------
12 #-------------------------------------------------------------------------------
17 print "Content-Type: text/html;charset=EUC-JP\n";
18 print "Pragma: no-cache\n";
19 print "Cache-Control: no-cache\n\n";
22 print "<title>".&Util::escapeHTML($title)." - $SITE_TITLE</title>\n";
23 print "<link rel=\"stylesheet\" type=\"text/css\" href=\"$THEME_URL\">\n";
27 print "<div class=\"adminmenu\">\n";
28 print " <span class=\"adminmenu\">\n";
29 print " <a href=\"".&Wiki::create_url({p=>"FrontPage"})."\">FrontPage</a>\n";
30 print " <a href=\"".&Wiki::create_url({a=>"new"})."\">¿·µ¬</a>\n";
32 print " <a href=\"".&Wiki::create_url({a=>"edit",p=>$in{"p"}})."\">ÊÔ½¸</a>\n";
34 print " <a href=\"".&Wiki::create_url({a=>"search"})."\">¸¡º÷</a>\n";
35 print " <a href=\"".&Wiki::create_url({a=>"list"})."\">°ìÍ÷</a>\n";
36 print " <a href=\"".&Wiki::create_url({p=>"Help"})."\">¥Ø¥ë¥×</a>\n";
40 print "<h1>".&Util::escapeHTML($title)."</h1>\n";
41 if(&Wiki::page_exists("Menu")){
42 print "<div class=\"main\">\n";
46 #-------------------------------------------------------------------------------
48 #-------------------------------------------------------------------------------
50 if(&Wiki::page_exists("Menu")){
52 print "<div class=\"sidebar\">\n";
53 print &Wiki::process_wiki(&Wiki::get_page("Menu"));
56 print "<div class=\"footer\">Powered by <a href=\"".$main::SITE_URL."\">FreeStyleWikiLite ".$main::VERSION."</a></div>\n";
57 print "</body></html>\n";
60 #-------------------------------------------------------------------------------
61 # µìVer(0.0.11)¸ß´¹À°Ý»ý
62 # ¼¡´ü¥Ð¡¼¥¸¥ç¥ó¤Çºï½ü¤µ¤ì¤Þ¤¹¡£
63 #-------------------------------------------------------------------------------
64 sub redirect { return &Wiki::redirect(@_); }
65 sub redirectURL { return &Wiki::redirectURL(@_); }
68 sub exists_page { return &page_exists(shift); }
69 sub send_mail { return &Util::send_mail(@_); }
74 sub parse_plugin { return &Wiki::parse_inline_plugin(@_); }
76 ###############################################################################
78 # Wiki´ØÏ¢¤Î´Ø¿ô¤òÄ󶡤¹¤ë¥Ñ¥Ã¥±¡¼¥¸
80 ###############################################################################
83 local @current_parser = [];
85 #==============================================================================
86 # ¥×¥é¥°¥¤¥ó¤Î¾ðÊó¤ò¼èÆÀ¤·¤Þ¤¹
87 #==============================================================================
90 return defined($main::P_PLUGIN->{$name}) ? {FUNCTION=>$main::P_PLUGIN->{$name}, TYPE=>'paragraph'} :
91 defined($main::I_PLUGIN->{$name}) ? {FUNCTION=>$main::I_PLUGIN->{$name}, TYPE=>'inline' } :
92 defined($main::B_PLUGIN->{$name}) ? {FUNCTION=>$main::B_PLUGIN->{$name}, TYPE=>'block' } :
96 #==============================================================================
97 # Wiki¥½¡¼¥¹¤òÅϤ·¤ÆHTML¤ò¼èÆÀ¤·¤Þ¤¹
98 #==============================================================================
102 my $parser = HTMLParser->new($mainflg);
104 # ΢µ»ÍÑ(¥×¥é¥°¥¤¥óÆâÉô¤«¤é¥Ñ¡¼¥µ¤ò»È¤¦¾ì¹ç)
105 push(@current_parser, $parser);
107 $parser->parse($source);
110 pop(@current_parser);
112 return $parser->{html};
115 #==============================================================================
116 # ¥Ñ¡¼¥¹Ãæ¤Î¾ì¹ç¡¢¸½ºß͸ú¤ÊHTMLParser¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÊֵѤ·¤Þ¤¹¡£
117 # ¥Ñ¡¼¥¹Ãæ¤ÎÆâÍƤò¥×¥é¥°¥¤¥ó¤«¤éÊѹ¹¤·¤¿¤¤¾ì¹ç¤Ë»ÈÍѤ·¤Þ¤¹¡£
118 #==============================================================================
119 sub get_current_parser {
120 return $current_parser[$#current_parser];
123 #===============================================================================
124 # ¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó¤ò¥Ñ¡¼¥¹¤·¤Æ¥³¥Þ¥ó¥É¤È°ú¿ô¤Ëʬ³ä
125 #===============================================================================
126 sub parse_inline_plugin {
128 my ($cmd, @args_tmp) = split(/ /,$text);
129 my $args_txt = &Util::trim(join(" ",@args_tmp));
130 if($cmd =~ s/\}\}(.*?)$//){
131 return { command=>$cmd, args=>[], post=>"$1 $args_txt"};
140 for($i = 0; $i<length($args_txt); $i++){
141 my $c = substr($args_txt,$i,1);
142 if($quote!=1 && $c eq ","){
146 push(@ret_args,$tmp);
149 } elsif($quote==1 && $c eq "\\"){
156 } elsif($quote==0 && $c eq '"'){
162 } elsif($quote==1 && $c eq '"'){
169 } elsif(($quote==0 || $quote==2) && $c eq '}'){
179 return {error=>"¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó¤Î¹½Ê¸¤¬ÉÔÀµ¤Ç¤¹¡£"};
187 my $info = &Wiki::get_plugin_info($cmd);
188 return undef if (defined($info->{TYPE}) && $info->{TYPE} ne 'block');
192 push(@ret_args,$tmp);
195 return { command=>$cmd, args=>\@ret_args,
196 post=>substr($args_txt, $i + 1, length($args_txt) - $i)};
199 #==============================================================================
200 # ¥Ú¡¼¥¸É½¼¨¤ÎURL¤òÀ¸À®
201 #==============================================================================
202 sub create_page_url {
204 return create_url({p=>$page});
207 #==============================================================================
209 #==============================================================================
216 foreach my $key (keys(%$params)){
217 my $val = $params->{$key};
224 $query .= Util::url_encode($key)."=".Util::url_encode($val);
226 if(!defined($script)){
227 if ($action =~ /^(edit|new|delconf)$/){
228 $script = $main::EDIT_SCRIPT;
230 $script = $main::MAIN_SCRIPT;
240 #==============================================================================
242 #==============================================================================
244 opendir(DIR, $main::DATA_DIR);
245 my ($fileentry, @files);
246 while($fileentry = readdir(DIR)){
247 my $type = substr($fileentry,rindex($fileentry,"."));
248 if($type eq ".wiki"){
249 push(@files, "$main::DATA_DIR/$fileentry");
255 foreach my $entry (@files){
256 my @stat = stat($entry);
259 $entry = substr($entry,length($main::DATA_DIR)+1);
260 $entry =~ /(.+?)\.wiki/;
261 my $page = &Util::url_decode($1);
262 push(@pages,{NAME=>$page,TIME=>$time});
265 @pages = sort { $b->{TIME}<=>$a->{TIME} } @pages;
269 #==============================================================================
270 # ¥Ú¡¼¥¸¤Î¹¹¿·Æü»þ¤ò¼èÆÀ
271 #==============================================================================
272 sub get_last_modified {
274 if(&page_exists($page)){
275 my $file = sprintf("%s/%s.wiki",$main::DATA_DIR,&Util::url_encode($page));
276 my @stat = stat($file);
283 #==============================================================================
285 #==============================================================================
287 my $page = &Util::url_encode(shift);
289 open(DATA,"$main::DATA_DIR/$page.wiki") or &Util::error("$main::DATA_DIR/$page.wiki¤Î¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
298 #==============================================================================
300 #==============================================================================
305 $page = &Util::trim($page);
306 $source =~ s/\r\n/\n/g;
307 $source =~ s/\r/\n/g;
309 my $enc_page = &Util::url_encode($page);
310 my $action = 'MODIFY';
311 unless(-e "$main::DATA_DIR/$enc_page.wiki"){
315 # ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òºîÀ®
316 if(-e "$main::DATA_DIR/$enc_page.wiki"){
317 open(BACKUP,">$main::BACKUP_DIR/$enc_page.bak") or &Util::error("$main::BACKUP_DIR/$enc_page.bak¤Î¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
318 open(DATA ,"$main::DATA_DIR/$enc_page.wiki") or &Util::error("$main::DATA_DIR/$enc_page.wiki¤Î¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
327 open(DATA,">$main::DATA_DIR/$enc_page.wiki") or &Util::error("$main::DATA_DIR/$enc_page.wiki¤Î¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
331 &Util::send_mail($action,$page);
334 #==============================================================================
335 # ¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¤«¤É¤¦¤«
336 #==============================================================================
338 my $page = &Util::url_encode(shift);
339 if(-e "$main::DATA_DIR/$page.wiki"){
346 #==============================================================================
347 # °ú¿ô¤ÇÅϤ·¤¿¥Ú¡¼¥¸¤ËÁ«°Ü
348 #==============================================================================
351 my $url = &Wiki::create_url({p=>$page});
355 #==============================================================================
356 # °ú¿ô¤ÇÅϤ·¤¿URL¤ËÁ«°Ü
357 #==============================================================================
361 print "Content-Type: text/html;charset=EUC-JP\n";
362 print "Pragma: no-cache\n";
363 print "Cache-Control: no-cache\n\n";
366 print " <title>moving...</title>\n";
367 print " <meta http-equiv=\"Refresh\" content=\"0;URL=$url\">\n";
370 print " Wait or <a href=\"$url\">Click Here!!</a>\n";
377 #==============================================================================
379 #==============================================================================
382 my $enc_page = &Util::url_encode($page);
383 unlink("$main::DATA_DIR/$enc_page.wiki") or &Util::error("$main::DATA_DIR/$enc_page.wiki¤Îºï½ü¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
385 &Util::send_mail('DELETE',$page);
388 ###############################################################################
392 ###############################################################################
394 #==============================================================================
396 #==============================================================================
402 if(!defined($mainflg) || $mainflg eq ""){ $mainflg = 0; }
404 $self->{dl_flag} = 0;
416 $self->{main} = $mainflg;
417 return bless $self,$class;
420 #===============================================================================
422 #===============================================================================
430 my @lines = split(/\n/,$source);
432 foreach my $line (@lines){
436 $self->multi_explanation($line);
438 my $word1 = substr($line,0,1);
439 my $word2 = substr($line,0,2);
440 my $word3 = substr($line,0,3);
443 if($line eq "" && !$self->{block}){
444 $self->l_paragraph();
448 # ¥Ö¥í¥Ã¥¯½ñ¼°¤Î¥¨¥¹¥±¡¼¥×
449 if(!$self->{block} && ($word2 eq "\\\\" || $word1 eq "\\")){
450 my @obj = $self->parse_line(substr($line, 1));
451 $self->l_text(\@obj);
455 # ¥Ñ¥é¥°¥é¥Õ¥×¥é¥°¥¤¥ó
456 if($line =~ /^\{\{(.+\}\})$/){
458 my $plugin = &Wiki::parse_inline_plugin($1);
459 my $info = &Wiki::get_plugin_info($plugin->{command});
460 if($info->{TYPE} eq "paragraph"){
461 $self->l_plugin($plugin);
463 my @obj = $self->parse_line($line);
464 $self->l_text(\@obj);
468 } elsif($line =~ /^\{\{(.+)$/){
469 if ($self->{block}) {
470 my $plugin = &Wiki::parse_inline_plugin($1);
471 my $info = &Wiki::get_plugin_info($plugin->{command});
472 $self->{block}->{level}++ if($info->{TYPE} eq "block");
473 $self->{block}->{args}->[0] .= $line."\n";
476 my $plugin = &Wiki::parse_inline_plugin($1);
477 my $info = &Wiki::get_plugin_info($plugin->{command});
478 if($info->{TYPE} eq "block"){
479 unshift(@{$plugin->{args}}, "");
480 $self->{block} = $plugin;
481 $self->{block}->{level} = 0;
483 my @obj = $self->parse_line($line);
484 $self->l_text(\@obj);
490 if ($self->{block}->{level} > 0) {
491 $self->{block}->{level}--;
492 $self->{block}->{args}->[0] .= $line."\n";
495 my $plugin = $self->{block};
496 delete($self->{block});
497 $self->l_plugin($plugin);
499 $self->{block}->{args}->[0] .= $line."\n";
505 if($word1 eq " " || $word1 eq "\t"){
506 $self->l_verbatim($line);
509 } elsif($word3 eq "!!!"){
510 my @obj = $self->parse_line(substr($line,3));
511 $self->l_headline(1,\@obj);
513 } elsif($word2 eq "!!"){
514 my @obj = $self->parse_line(substr($line,2));
515 $self->l_headline(2,\@obj);
517 } elsif($word1 eq "!"){
518 my @obj = $self->parse_line(substr($line,1));
519 $self->l_headline(3,\@obj);
522 } elsif($word3 eq "***"){
523 my @obj = $self->parse_line(substr($line,3));
524 $self->l_list(3,\@obj);
526 } elsif($word2 eq "**"){
527 my @obj = $self->parse_line(substr($line,2));
528 $self->l_list(2,\@obj);
530 } elsif($word1 eq "*"){
531 my @obj = $self->parse_line(substr($line,1));
532 $self->l_list(1,\@obj);
535 } elsif($word3 eq "+++"){
536 my @obj = $self->parse_line(substr($line,3));
537 $self->l_numlist(3,\@obj);
539 } elsif($word2 eq "++"){
540 my @obj = $self->parse_line(substr($line,2));
541 $self->l_numlist(2,\@obj);
543 } elsif($word1 eq "+"){
544 my @obj = $self->parse_line(substr($line,1));
545 $self->l_numlist(1,\@obj);
548 } elsif($line eq "----"){
552 } elsif($word2 eq '""'){
553 my @obj = $self->parse_line(substr($line,2));
554 $self->l_quotation(\@obj);
557 } elsif(index($line,":")==0 && index($line,":",1)!=-1){
558 if(index($line,":::")==0){
559 $self->{dd} .= substr($line,3);
562 if($self->{dt} ne "" || $self->{dd} ne ""){
563 $self->multi_explanation;
565 if(index($line,"::")==0){
566 $self->{dt} = substr($line,2);
567 $self->{dl_flag} = 1;
570 my $dt = substr($line,1,index($line,":",1)-1);
571 my $dd = substr($line,index($line,":",1)+1);
572 my @obj1 = $self->parse_line($dt);
573 my @obj2 = $self->parse_line($dd);
574 $self->l_explanation(\@obj1,\@obj2);
577 } elsif($word1 eq ","){
581 my @spl = map {/^"(.*)"$/ ? scalar($_ = $1, s/\"\"/\"/g, $_) : $_}
582 ($line =~ /,\s*(\"[^\"]*(?:\"\"[^\"]*)*\"|[^,]*)/g);
584 foreach my $value (@spl){
585 my @cell = $self->parse_line($value);
588 $self->l_table(\@array);
591 } elsif($word2 eq "//"){
595 my @obj = $self->parse_line($line);
596 $self->l_text(\@obj);
601 $self->multi_explanation;
603 # ¥Ñ¡¼¥¹Ãæ¤Î¥Ö¥í¥Ã¥¯¥×¥é¥°¥¤¥ó¤¬¤¢¤Ã¤¿¾ì¹ç¡¢¤È¤ê¤¢¤¨¤ºÉ¾²Á¤·¤Æ¤ª¤¯¡©
605 my $plugin = $self->{block};
606 delete($self->{block});
607 $self->l_plugin($plugin);
613 #===============================================================================
615 #===============================================================================
616 sub multi_explanation {
619 if($self->{dl_flag}==1 && (index($line,":")!=0 || !defined($line))){
620 my @obj1 = $self->parse_line($self->{dt});
621 my @obj2 = $self->parse_line($self->{dd});
622 $self->l_explanation(\@obj1,\@obj2);
623 $self->{dl_flag} = 0;
629 #===============================================================================
631 #===============================================================================
633 my ($self, $source) = @_;
635 return () if (not defined $source);
641 # $source ¤¬¶õ¤Ë¤Ê¤ë¤Þ¤Ç·«¤êÊÖ¤¹¡£
643 while ($source ne q{}) {
645 # ¤É¤Î¥¤¥ó¥é¥¤¥ó Wiki ½ñ¼°¤ÎÀèƬ¤Ë¤â match ¤·¤Ê¤¤¾ì¹ç
646 if (!($source =~ /^(.*?)((?:\{\{|\[\[?|https?:|mailto:|f(?:tp:|ile:)|'''?|==|__|<<).*)$/)) {
647 # WikiName¸¡º÷¡¦ÃÖ´¹½èÍý¤Î¤ß¼Â»Ü¤·¤Æ½ªÎ»¤¹¤ë
648 push @array, $self->_parse_line_wikiname($pre . $source);
652 $pre .= $1; # match ¤·¤Ê¤«¤Ã¤¿ÀèƬÉôʬ¤Ïί¤á¤Æ¤ª¤¤¤Æ¸å¤Ç½èÍý¤¹¤ë
653 $source = $2; # match Éôʬ¤Ï¸å³½èÍý¤Ë¤Æ¾ÜºÙ¥Á¥§¥Ã¥¯¤ò¹Ô¤¦
657 if ($source =~ /^\{\{/) {
659 my $plugin = &Wiki::parse_inline_plugin($source);
662 push @parsed, $self->parse_line($source);
664 my $info = &Wiki::get_plugin_info($plugin->{command});
665 if($info->{TYPE} eq "inline"){
666 push @parsed, $self->plugin($plugin);
668 push @parsed, $self->parse_line("<<".$plugin->{command}."¥×¥é¥°¥¤¥ó¤Ï¸ºß¤·¤Þ¤»¤ó¡£>>");
671 $source = $plugin->{post};
677 elsif ($source =~ /^\[\[([^\[]+?)\|([^\|\[]+?)\]\]/) {
681 push @parsed, $self->wiki_anchor($page, $label);
686 =~ /^\[([^\[]+?)\|((?:http|https|ftp|mailto):[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!&=:;\*#\@'\$]*)\]/
687 || $source =~ /^\[([^\[]+?)\|(file:[^\[\]]*)\]/
689 =~ /^\[([^\[]+?)\|((?:\/|\.\/|\.\.\/)+[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!&=:;\*#\@'\$]*)\]/
695 if ( index($url, q{"}) >= 0
696 || index($url, '><') >= 0
697 || index($url, 'javascript:') >= 0)
699 push @parsed, $self->parse_line('<<ÉÔÀµ¤Ê¥ê¥ó¥¯¤Ç¤¹¡£>>');
702 push @parsed, $self->url_anchor($url, $label);
708 =~ /^(?:https?|ftp|mailto):[a-zA-Z0-9\.,%~^_+\-%\/\?\(\)!&=:;\*#\@'\$]*/
709 || $source =~ /^file:[^\[\]]*/)
713 if ( index($url, q{"}) >= 0
714 || index($url, '><') >= 0
715 || index($url, 'javascript:') >= 0)
717 push @parsed, $self->parse_line('<<ÉÔÀµ¤Ê¥ê¥ó¥¯¤Ç¤¹¡£>>');
720 push @parsed, $self->url_anchor($url);
725 elsif ($source =~ /^\[\[([^\|]+?)\]\]/) {
728 push @parsed, $self->wiki_anchor($page);
732 elsif ($source =~ /^\[([^\[]+?)\|(.+?)\]/) {
736 if ( index($url, q{"}) >= 0
737 || index($url, '><') >= 0
738 || index($url, 'javascript:') >= 0)
740 push @parsed, $self->parse_line('<<ÉÔÀµ¤Ê¥ê¥ó¥¯¤Ç¤¹¡£>>');
744 my $uri = &main::MyBaseUrl().$ENV{"PATH_INFO"};
745 push @parsed, $self->url_anchor($uri . '/../' . $url, $label);
749 # ¥Ü¡¼¥ë¥É¡¢¥¤¥¿¥ê¥Ã¥¯¡¢¼è¤ê¾Ã¤·Àþ¡¢²¼Àþ
750 elsif ($source =~ /^('''?|==|__)(.+?)\1/) {
754 if ($type eq q{'''}) {
755 push @parsed, $self->bold($label);
757 elsif ($type eq q{__}) {
758 push @parsed, $self->underline($label);
760 elsif ($type eq q{''}) {
761 push @parsed, $self->italic($label);
763 else { ## elsif ($type eq q{==}) {
764 push @parsed, $self->denialline($label);
769 elsif ($source =~ /^<<(.+?)>>/) {
772 push @parsed, $self->error($label);
775 # ¥¤¥ó¥é¥¤¥ó Wiki ½ñ¼°Á´ÂÎ¤Ë¤Ï macth ¤·¤Ê¤«¤Ã¤¿¤È¤
778 if ($source =~ /^(.)/) {
783 # parse ·ë²Ì¤ò @array ¤ËÊݸ¤¹¤ë½èÍý¤òÈô¤Ð¤·¤Æ·«¤êÊÖ¤·¡£
787 # ¥¤¥ó¥é¥¤¥ó Wiki ½ñ¼°Á´ÂÎ¤Ë macth ¤·¤¿¸å¤Î
788 # parse ·ë²Ì¤ò @array ¤ËÊݸ¤¹¤ë½èÍý¡£
790 # ¤â¤· $pre ¤¬Î¯¤Þ¤Ã¤Æ¤¤¤ë¤Ê¤é¡¢WikiName¤Î½èÍý¤ò¼Â»Ü¡£
792 push @array, $self->_parse_line_wikiname($pre);
796 push @array, @parsed;
799 # ¤â¤· $pre ¤¬Î¯¤Þ¤Ã¤Æ¤¤¤ë¤Ê¤é¡¢WikiName¤Î½èÍý¤ò¼Â»Ü¡£
801 push @array, $self->_parse_line_wikiname($pre);
807 #========================================================================
808 # parse_line() ¤«¤é¸Æ¤Ó½Ð¤µ¤ì¡¢WikiName¤Î¸¡º÷¡¦ÃÖ´¹½èÍý¤ò¹Ô¤¤¤Þ¤¹¡£
809 #========================================================================
810 sub _parse_line_wikiname {
814 return () if (not defined $source);
818 # $source ¤¬¶õ¤Ë¤Ê¤ë¤Þ¤Ç·«¤êÊÖ¤¹¡£
819 while ($source ne q{}) {
822 if ($main::WIKI_NAME == 1 && $source =~ /[A-Z]+?[a-z]+?(?:[A-Z]+?[a-z]+)+/) {
827 push @array, $self->_parse_line_wikiname($pre);
829 push @array, $self->wiki_anchor($page);
832 # WikiName ¤â¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¤È¤
834 push @array, $self->text($source);
841 #===============================================================================
843 # ¥Ñ¡¼¥¹¤ò³«»ÏÁ°¤Ë¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
844 # ¥µ¥Ö¥¯¥é¥¹¤ÇɬÍפʽèÍý¤¬¤¢¤ë¾ì¹ç¤Ï¥ª¡¼¥Ð¡¼¥é¥¤¥É¤·¤Æ¤¯¤À¤µ¤¤¡£
846 #===============================================================================
849 #==============================================================================
851 #==============================================================================
857 if($self->{para}==1){
858 $self->{html} .= "</p>\n";
862 if($self->{list} == 1 && $level <= $self->{level}){
871 my $html = join("",@$obj);
873 if($level > $self->{level}){
874 while($level != $self->{level}){
875 $self->{html} .= "<ul>\n";
876 push(@{$self->{close_list}},"</ul>\n");
879 } elsif($level <= $self->{level}){
880 while($level-1 != $self->{level}){
881 if($self->{'list_close_'.$self->{level}} == 1){
882 $self->{html} .= "</li>\n";
883 $self->{'list_close_'.$self->{level}} = 0;
885 if($level == $self->{level}){
888 $self->{html} .= pop(@{$self->{close_list}});
893 $self->{html} .= "<li>".$html;
894 $self->{'list_close_'.$level} = 1;
897 #==============================================================================
899 #==============================================================================
905 if($self->{para}==1){
906 $self->{html} .= "</p>\n";
910 if($self->{list} == 0 && $level >= $self->{level}){
919 my $html = join("",@$obj);
921 if($level > $self->{level}){
922 while($level != $self->{level}){
923 $self->{html} .= "<ol>\n";
924 push(@{$self->{close_list}},"</ol>\n");
927 } elsif($level <= $self->{level}){
928 while($level-1 != $self->{level}){
929 if($self->{'list_close_'.$self->{level}} == 1){
930 $self->{html} .= "</li>\n";
931 $self->{'list_close_'.$self->{level}} = 0;
933 if($level == $self->{level}){
936 $self->{html} .= pop(@{$self->{close_list}});
941 $self->{html} .= "<li>".$html;
942 $self->{'list_close_'.$level} = 1;
945 #==============================================================================
947 #==============================================================================
950 while($self->{level} != 0){
951 if($self->{'list_close_'.($self->{level})} == 1){
952 $self->{html} .= "</li>\n";
953 $self->{'list_close_'.$self->{level}} = 0;
955 $self->{html} .= pop(@{$self->{close_list}});
960 #==============================================================================
962 #==============================================================================
968 if($self->{para}==1){
969 $self->{html} .= "</p>\n";
978 my $html = join("",@$obj);
980 # ¥á¥¤¥ó¤Îɽ¼¨Îΰè¤Ç¤Ê¤¤¤È¤
982 $self->{html} .= "<h".($level+1).">".$html."</h".($level+1).">\n";
984 # ¥á¥¤¥ó¤Îɽ¼¨Îΰè¤Î¾ì¹ç¤Ï¥¢¥ó¥«¤ò½ÐÎÏ
987 $self->{html} .= "<h".($level+1)."><a name=\"p".$self->{p_cnt}."\"><span class=\"sanchor\"> </span>".
988 $html."</a></h".($level+1).">\n";
990 $self->{html} .= "<h".($level+1)."><a name=\"p".$self->{p_cnt}."\">".$html."</a></h".($level+1).">\n";
996 #==============================================================================
998 #==============================================================================
1002 if($self->{para}==1){
1003 $self->{html} .= "</p>\n";
1008 $self->end_verbatim;
1012 $self->{html} .= "<hr>\n";
1015 #==============================================================================
1017 #==============================================================================
1022 $self->end_verbatim;
1026 if($self->{para}==1){
1027 $self->{html} .= "</p>\n";
1029 } elsif($main::BR_MODE==1){
1030 $self->{html} .= "<br>\n";
1034 #==============================================================================
1036 #==============================================================================
1041 if($self->{para}==1){
1042 $self->{html} .= "</p>\n";
1051 $self->{pre} .= Util::escapeHTML($text)."\n";
1056 if($self->{pre} ne ""){
1057 $self->{html} .= "<pre>".$self->{pre}."</pre>\n";
1062 #==============================================================================
1064 #==============================================================================
1069 $self->end_verbatim;
1074 if($self->{table}==0){
1076 $self->{html} .= "<table>\n";
1084 my $html = join("",@$_);
1085 if($#columns != -1 && $html eq '<<'){
1086 @columns[$#columns]->{colspan}++;
1088 push(@columns, {colspan => 1, html => $html});
1091 $self->{html} .= "<tr>\n";
1093 $self->{html} .= "<$tag colspan=\"".$_->{colspan}."\">".$_->{html}."</$tag>\n";
1095 $self->{html} .= "</tr>\n";
1100 if($self->{table}!=0){
1102 $self->{html} .= "</table>\n";
1106 #==============================================================================
1107 # ¥Ñ¡¼¥¹½ªÎ»»þ¤Î½èÍý
1108 #==============================================================================
1112 $self->end_verbatim;
1116 if($self->{para}==1){
1117 $self->{html} .= "</p>\n";
1122 #==============================================================================
1123 # ¹Ô½ñ¼°¤Ë³ºÅö¤·¤Ê¤¤¹Ô
1124 #==============================================================================
1129 $self->end_verbatim;
1132 my $html = join("",@$obj);
1134 if($self->{para}==0){
1135 $self->{html} .= "<p>";
1138 $self->{html} .= $html;
1140 # br¥â¡¼¥É¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï<br>¤ò¤¹
1141 if($main::BR_MODE==1){
1142 $self->{html} .= "<br>\n";
1146 #==============================================================================
1148 #==============================================================================
1153 $self->end_verbatim;
1155 my $html = join("",@$obj);
1156 $self->{quote} .= "<p>".$html."</p>\n";
1161 if($self->{quote} ne ""){
1162 $self->{html} .= "<blockquote>".$self->{quote}."</blockquote>\n";
1163 $self->{quote} = "";
1167 #==============================================================================
1169 #==============================================================================
1176 $self->end_verbatim;
1180 my $html1 = join("",@$obj1);
1181 my $html2 = join("",@$obj2);
1183 $self->{html} .= "<dl>\n<dt>".$html1."</dt>\n<dd>".$html2."</dd>\n</dl>\n";
1186 #==============================================================================
1188 #==============================================================================
1192 return "<strong>".join("",$self->parse_line($text))."</strong>";
1195 #==============================================================================
1197 #==============================================================================
1201 return "<em>".join("",$self->parse_line($text))."</em>";
1204 #==============================================================================
1206 #==============================================================================
1210 return "<ins>".join("",$self->parse_line($text))."</ins>";
1213 #==============================================================================
1215 #==============================================================================
1219 return "<del>".join("",$self->parse_line($text))."</del>";
1222 #==============================================================================
1224 #==============================================================================
1234 if($url eq $name && $url=~/\.(gif|jpg|jpeg|bmp|png)$/i && $main::DISPLAY_IMAGE==1){
1235 return "<img src=\"".$url."\">";
1237 return "<a href=\"$url\">".Util::escapeHTML($name)."</a>";
1241 #==============================================================================
1242 # Wiki¥Ú¡¼¥¸¤Ø¤Î¥¢¥ó¥«
1243 #==============================================================================
1252 if(!defined($name) || $name eq ""){
1256 if(&Wiki::page_exists($page)){
1257 #¥¢¥ó¥«¡¼¤ò´Þ¤à¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¾ì¹ç¤Ï¥ê¥ó¥¯¤òÍ¥Àè
1258 return "<a href=\"".&Wiki::create_page_url($page)."\" class=\"wikipage\">".
1259 &Util::escapeHTML($name)."</a>";
1261 #ºÇ¸å¤Î"#"°Ê¹ß¤ò¥¢¥ó¥«¡¼¤È¤¹¤ë
1262 if($page =~ m/#([^#]+)$/) {
1266 if(defined($anchor) && $page eq '') {
1267 #Ʊ°ì¥Ú¡¼¥¸¤Î¥¢¥ó¥«¡¼¥ê¥ó¥¯
1268 return "<a href=\"#$anchor\" class=\"wikipage\">".
1269 &Util::escapeHTML($name)."</a>";
1270 } elsif(&Wiki::page_exists($page)) {
1271 #»ØÄê¥Ú¡¼¥¸¤Î¥¢¥ó¥«¡¼¥ê¥ó¥¯
1272 return "<a href=\"".&Wiki::create_page_url($page).(defined($anchor)?"#".$anchor:"")."\" class=\"wikipage\">".
1273 &Util::escapeHTML($name)."</a>";
1275 #¿·µ¬¥Ú¡¼¥¸ºîÀ®ÍÑ¥ê¥ó¥¯
1276 return "<span class=\"nopage\">".&Util::escapeHTML($name)."</span>".
1277 "<a href=\"".&Wiki::create_page_url($page)."\">?</a>";
1282 #==============================================================================
1284 #==============================================================================
1288 return &Util::escapeHTML($text);
1291 #==============================================================================
1292 # ¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó
1293 #==============================================================================
1298 my $func_ref = &Wiki::get_plugin_info($plugin->{command})->{FUNCTION};
1299 my $result = &$func_ref(@{$plugin->{args}});
1300 if(defined($result) && $result ne ""){
1307 #==============================================================================
1308 # ¥Ñ¥é¥°¥é¥Õ¥×¥é¥°¥¤¥ó
1309 #==============================================================================
1314 if($self->{para}==1){
1315 $self->{html} .= "</p>\n";
1320 $self->end_verbatim;
1324 my $func_ref = &Wiki::get_plugin_info($plugin->{command})->{FUNCTION};
1325 my $result = &$func_ref(@{$plugin->{args}});
1326 if(defined($result) && $result ne ""){
1327 $self->{html} .= $result;
1331 #==============================================================================
1333 #==============================================================================
1341 if($self->{para}==1){
1342 $self->{html} .= "</p>\n";
1347 $self->end_verbatim;
1351 $self->{html} .= "<div class=\"image\">";
1352 $self->{html} .= "<img src=\"".&Wiki::create_url({'p'=>$page,'f'=>$file},$main::DOWNLOAD_SCRIPT)."\"";
1353 $self->{html} .= " width=\"$width\"" if ($width ne "");
1354 $self->{html} .= " height=\"$height\"" if ($height ne "");
1355 $self->{html} .= "/>";
1356 $self->{html} .= "</div>\n";
1359 #==============================================================================
1361 #==============================================================================
1366 return "<span class=\"error\">".Util::escapeHTML($label)."</span>";
1369 ################################################################################
1371 # ¥æ¡¼¥Æ¥£¥ê¥Æ¥£´Ø¿ô¤òÄ󶡤¹¤ë¥Ñ¥Ã¥±¡¼¥¸
1373 ################################################################################
1375 #===============================================================================
1376 # °ú¿ô¤ÇÅϤµ¤ì¤¿Ê¸»úÎó¤òURL¥¨¥ó¥³¡¼¥É¤·¤ÆÊÖ¤·¤Þ¤¹¡£
1377 #===============================================================================
1380 &jcode::convert(\$retstr,"euc");
1382 $retstr =~ s/([^ 0-9A-Za-z])/sprintf("%%%.2X", ord($1))/eg;
1387 #===============================================================================
1388 # °ú¿ô¤ÇÅϤµ¤ì¤¿Ê¸»úÎó¤òURL¥Ç¥³¡¼¥É¤·¤ÆÊÖ¤·¤Þ¤¹¡£
1389 #===============================================================================
1394 $retstr =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge;
1398 #===============================================================================
1399 # °ú¿ô¤ÇÅϤµ¤ì¤¿Ê¸»úÎó¤ÎHTML¥¿¥°¤ò¥¨¥¹¥±¡¼¥×¤·¤ÆÊÖ¤·¤Þ¤¹¡£
1400 #===============================================================================
1402 my($retstr) = shift;
1403 &jcode::convert(\$retstr,"euc");
1411 $retstr =~ s/([&\"<>])/$table{$1}/go;
1412 $retstr =~ s/&#([0-9]{1,5});/&#$1;/go;
1413 $retstr =~ s/&#(0*(0|9|10|13|38|60|62));/&#$1;/g;
1414 # $retstr =~ s/&([a-zA-Z0-9]{2,8});/&$1;/go;
1419 #===============================================================================
1420 # ÆüÉÕ¤ò¥Õ¥©¡¼¥Þ¥Ã¥È¤·¤Þ¤¹¡£
1421 #===============================================================================
1424 my ($sec, $min, $hour, $mday, $mon, $year) = localtime($t);
1425 return sprintf("%04dǯ%02d·î%02dÆü %02d»þ%02dʬ%02dÉÃ",
1426 $year+1900,$mon+1,$mday,$hour,$min,$sec);
1429 #===============================================================================
1430 # ʸ»úÎó¤Îξü¤Î¶õÇò¤òÀÚ¤êÍî¤È¤·¤Þ¤¹¡£
1431 #===============================================================================
1434 if(!defined($text)){
1437 $text =~ s/^(?:\s)+//o;
1438 $text =~ s/(?:\s)+$//o;
1443 #===============================================================================
1444 # ¥¿¥°¤òºï½ü¤·¤Æʸ»úÎó¤Î¤ß¤ò¼èÆÀ¤·¤Þ¤¹¡£
1445 #===============================================================================
1448 $text =~ s/<(.|\s)+?>//g;
1452 #===============================================================================
1453 # ¥Ú¡¼¥¸Ì¾¤¬»ÈÍѲÄǽ¤«¤É¤¦¤«¥Á¥§¥Ã¥¯¤·¤Þ¤¹¡£
1454 #===============================================================================
1455 sub check_pagename {
1456 my $pagename = shift;
1459 if( !defined($pagename)
1460 || $pagename eq "" # ¶õ
1461 || $pagename =~ /[\|\[\]]/ # |[]
1462 || $pagename =~ /^:/ # ¥³¥í¥ó¤Ç»Ï¤Þ¤ë
1463 || $pagename =~ /[^:]:[^:]/ # ¥³¥í¥óñÂΤǤλÈÍÑ
1464 || $pagename =~ /^\s+$/ # ¶õÇò¤Î¤ß
1471 #===============================================================================
1472 # ¿ôÃͤ«¤É¤¦¤«¥Á¥§¥Ã¥¯¤·¤Þ¤¹¡£
1473 #===============================================================================
1476 if($text =~ /^[0-9]+$/){
1483 #==============================================================================
1485 #==============================================================================
1489 my $enc_page = &Util::url_encode($page);
1491 if($main::ADMIN_MAIL eq "" || $main::SEND_MAIL eq ""){
1496 if($action eq 'CREATE'){
1497 $subject = "[FSWikiLite]$page¤¬ºîÀ®¤µ¤ì¤Þ¤·¤¿";
1499 } elsif($action eq 'MODIFY'){
1500 $subject = "[FSWikiLite]$page¤¬¹¹¿·¤µ¤ì¤Þ¤·¤¿";
1502 } elsif($action eq 'DELETE'){
1503 $subject = "[FSWikiLite]$page¤¬ºï½ü¤µ¤ì¤Þ¤·¤¿";
1507 $subject = &main::mimeencode($subject);
1509 my $head = "Subject: $subject\n".
1510 "From: $main::ADMIN_MAIL\n".
1511 "Content-Transfer-Encoding: 7bit\n".
1512 "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n".
1513 "Reply-To: $main::ADMIN_MAIL\n".
1516 my $body = "IP:".$ENV{'REMOTE_ADDR'}."\n".
1517 "UA:".$ENV{'HTTP_USER_AGENT'}."\n";
1519 if($action eq 'MODIFY' || $action eq 'DELETE'){
1520 if(-e "$main::BACKUP_DIR/$enc_page.bak"){
1521 $body .= "°Ê²¼¤ÏÊѹ¹Á°¤Î¥½¡¼¥¹¤Ç¤¹¡£\n".
1522 "-----------------------------------------------------\n";
1523 open(BACKUP,"$main::BACKUP_DIR/$enc_page.bak");
1524 while(my $line = <BACKUP>){
1531 # ʸ»ú¥³¡¼¥É¤ÎÊÑ´¹(jcode.pl¤ò»ÈÍѤ¹¤ë)
1532 &jcode::convert(\$body,'jis');
1534 open(MAIL,"| $main::SEND_MAIL $main::ADMIN_MAIL");
1540 #===============================================================================
1542 #===============================================================================
1546 print "Content-Type: text/html;charset=EUC-JP\n\n";
1548 print "<head><title>¥¨¥é¡¼ - FSWikiLite</title></head>\n";
1550 print "<h1>¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿</h1>\n";
1552 print &Util::escapeHTML($error);
1554 print "</body><html>\n";
1559 #===============================================================================
1560 # ·ÈÂÓÅÅÏ䫤ɤ¦¤«¥Á¥§¥Ã¥¯¤·¤Þ¤¹¡£
1561 #===============================================================================
1563 my $ua = $ENV{'HTTP_USER_AGENT'};
1567 if($ua=~/^DoCoMo\// || $ua=~ /^J-PHONE\// || $ua=~ /UP\.Browser/ || $ua=~ /\(DDIPOCKET\;/ || $ua=~ /\(WILLCOM\;/ || $ua=~ /^Vodafone\// || $ua=~ /^SoftBank\//){
1574 #===============================================================================
1575 # ¥¹¥Þ¡¼¥È¥Õ¥©¥ó¤«¤É¤¦¤«¥Á¥§¥Ã¥¯¤·¤Þ¤¹¡£
1576 #===============================================================================
1578 my $ua = $ENV{'HTTP_USER_AGENT'};
1582 if($ua =~ /Android/ || $ua =~ /iPhone/){