OSDN Git Service

BugTrack-wiki/318
[fswiki/fswiki.git] / plugin / info / OutlineParser.pm
index fc0a659..8451a20 100644 (file)
-###############################################################################\r
-#\r
-# ¥¢¥¦¥È¥é¥¤¥ó¥Ñ¡¼¥µ\r
-#\r
-###############################################################################\r
-package plugin::info::OutlineParser;\r
-use strict;\r
-use vars qw(@ISA);\r
-use Wiki::HTMLParser;\r
-\r
-@ISA = qw(Wiki::HTMLParser);\r
-\r
-#==============================================================================\r
-# ¥³¥ó¥¹¥È¥é¥¯¥¿\r
-#==============================================================================\r
-sub new {\r
-       my $class = shift;\r
-       my $self  = Wiki::HTMLParser->new(shift);\r
-       $self->{outline_html}  = "";\r
-       $self->{outline_level} =  0;\r
-       $self->{outline_cnt}   =  0;\r
-       return bless $self,$class;\r
-}\r
-\r
-#==============================================================================\r
-# ¥Ø¥Ã¥É¥é¥¤¥ó¤Î¤ßÃê½Ð\r
-#==============================================================================\r
-sub l_headline {\r
-       my $self  = shift;\r
-       my $level = shift;\r
-       my $obj   = shift;\r
-       my $text  = &Util::delete_tag(join("",@$obj));\r
-       \r
-       if($level > $self->{outline_level}){\r
-               while($level!=$self->{outline_level}){\r
-                       $self->{outline_html} .= "<ul>\n";\r
-                       $self->{outline_level}++;\r
-               }\r
-       } elsif($level < $self->{outline_level}){\r
-               while($level!=$self->{outline_level}){\r
-                       $self->{outline_html} .= "</li></ul>\n";\r
-                       $self->{outline_level}--;\r
-               }\r
-       } else {\r
-               $self->{outline_html} .= "</li>\n";\r
-       }\r
-       $self->{outline_html} .= "<li><a href=\"#p".$self->{outline_cnt}."\">$text</a>";\r
-       $self->{outline_cnt}++;\r
-}\r
-\r
-#==============================================================================\r
-# ¥¢¥¦¥È¥é¥¤¥óɽ¼¨ÍÑHTML¤Î¼èÆÀ\r
-#==============================================================================\r
-sub outline {\r
-       my $self   = shift;\r
-       my $source = shift;\r
-       $self->parse($source);\r
-       \r
-       while($self->{outline_level}!=0){\r
-               $self->{outline_html} .= "</li></ul>\n";\r
-               $self->{outline_level}--;\r
-       }\r
-       \r
-       return $self->{outline_html};\r
-}\r
-\r
-#==============================================================================\r
-# ¥×¥é¥°¥¤¥ó¤Î²òÀϤò¹Ô¤¦¤È̵¸Â¥ë¡¼¥×¤·¤Æ¤·¤Þ¤¦¤¿¤á\r
-#==============================================================================\r
-sub plugin{}\r
-\r
-#==============================================================================\r
-# ¥×¥é¥°¥¤¥ó¤Î²òÀϤò¹Ô¤¦¤È̵¸Â¥ë¡¼¥×¤·¤Æ¤·¤Þ¤¦¤¿¤á\r
-#==============================================================================\r
-sub l_plugin{\r
-       my $self   = shift;\r
-       my $plugin = shift;\r
-       \r
-       # outline°Ê³°¤Î¾ì¹ç¤Î¤ß½èÍý¤ò¹Ô¤¦\r
-       if($plugin->{command} ne "outline"){\r
-               my $info = $self->{wiki}->get_plugin_info($plugin->{command});\r
-               if($info->{FORMAT} eq "WIKI"){\r
-                       return $self->SUPER::l_plugin($plugin);\r
-               }\r
-               \r
-       } else {\r
-               return undef;\r
-       }\r
-}\r
-\r
-1;\r
+###############################################################################
+#
+# ¥¢¥¦¥È¥é¥¤¥ó¥Ñ¡¼¥µ
+#
+###############################################################################
+package plugin::info::OutlineParser;
+use strict;
+use vars qw(@ISA);
+use Wiki::HTMLParser;
+
+@ISA = qw(Wiki::HTMLParser);
+
+#==============================================================================
+# ¥³¥ó¥¹¥È¥é¥¯¥¿
+#==============================================================================
+sub new {
+       my $class = shift;
+       my $self  = Wiki::HTMLParser->new(shift);
+       $self->{outline_html}  = "";
+       $self->{outline_level} =  0;
+       $self->{outline_cnt}   =  0;
+       return bless $self,$class;
+}
+
+#==============================================================================
+# ¥Ø¥Ã¥É¥é¥¤¥ó¤Î¤ßÃê½Ð
+#==============================================================================
+sub l_headline {
+       my $self  = shift;
+       my $level = shift;
+       my $obj   = shift;
+       my $text  = &Util::delete_tag(join("",@$obj));
+       
+       if($level > $self->{outline_level}){
+               while($level!=$self->{outline_level}){
+                       if($self->{'outline_close_'.($self->{outline_level})} == 1){\r
+                               $self->{outline_html} .= "</li>\n";\r
+                               $self->{'outline_close_'.($self->{outline_level})} = 0;\r
+                       }
+                       $self->{outline_html} .= "<ul class=\"outline\">\n";
+                       $self->{outline_level}++;
+               }
+       } elsif($level <= $self->{outline_level}){
+               while($level-1  != $self->{outline_level}){
+                       if($self->{'outline_close_'.($self->{outline_level})} == 1){
+                               $self->{outline_html} .= "</li>\n";
+                               $self->{'outline_close_'.($self->{outline_level})} = 0;
+                       }
+                       if($level == $self->{outline_level}){
+                               last;
+                       }
+                       $self->{outline_html} .= "</ul>\n";
+                       $self->{outline_level}--;
+               }
+       } else {
+               $self->{outline_html} .= "</li>\n";
+       }
+       
+       $self->{'outline_close_'.$level} = 1;
+       $self->{outline_html} .= "<li><a href=\"#p".$self->{outline_cnt}."\">$text</a>";
+       $self->{outline_cnt}++;
+}
+
+#==============================================================================
+# ¥¢¥¦¥È¥é¥¤¥óɽ¼¨ÍÑHTML¤Î¼èÆÀ
+#==============================================================================
+sub outline {
+       my $self   = shift;
+       my $source = shift;
+       $self->parse($source);
+       
+       while($self->{outline_level} != 0){
+               if($self->{'outline_close_'.($self->{outline_level})} == 1){
+                       $self->{outline_html} .= "</li>\n";
+               }
+               $self->{outline_html} .= "</ul>\n";
+               $self->{outline_level}--;
+       }
+       
+       return $self->{outline_html};
+}
+
+#==============================================================================
+# ¥×¥é¥°¥¤¥ó¤Î²òÀϤò¹Ô¤¦¤È̵¸Â¥ë¡¼¥×¤·¤Æ¤·¤Þ¤¦¤¿¤á
+#==============================================================================
+sub plugin{}
+
+#==============================================================================
+# ¥×¥é¥°¥¤¥ó¤Î²òÀϤò¹Ô¤¦¤È̵¸Â¥ë¡¼¥×¤·¤Æ¤·¤Þ¤¦¤¿¤á
+#==============================================================================
+sub l_plugin{
+       my $self   = shift;
+       my $plugin = shift;
+       
+       # outline°Ê³°¤Î¾ì¹ç¤Î¤ß½èÍý¤ò¹Ô¤¦
+       if($plugin->{command} ne "outline"){
+               my $info = $self->{wiki}->get_plugin_info($plugin->{command});
+               if($info->{FORMAT} eq "WIKI"){
+                       return $self->SUPER::l_plugin($plugin);
+               }
+               
+       } else {
+               return undef;
+       }
+}
+
+1;