OSDN Git Service

liの閉じタグのtypoを修正。
[fswiki/fswiki.git] / plugin / info / OutlineParser.pm
1 ###############################################################################
2 #
3 # ¥¢¥¦¥È¥é¥¤¥ó¥Ñ¡¼¥µ
4 #
5 ###############################################################################
6 package plugin::info::OutlineParser;
7 use strict;
8 use vars qw(@ISA);
9 use Wiki::HTMLParser;
10
11 @ISA = qw(Wiki::HTMLParser);
12
13 #==============================================================================
14 # ¥³¥ó¥¹¥È¥é¥¯¥¿
15 #==============================================================================
16 sub new {
17         my $class = shift;
18         my $self  = Wiki::HTMLParser->new(shift);
19         $self->{outline_html}  = "";
20         $self->{outline_level} =  0;
21         $self->{outline_cnt}   =  0;
22         return bless $self,$class;
23 }
24
25 #==============================================================================
26 # ¥Ø¥Ã¥É¥é¥¤¥ó¤Î¤ßÃê½Ð
27 #==============================================================================
28 sub l_headline {
29         my $self  = shift;
30         my $level = shift;
31         my $obj   = shift;
32         my $text  = &Util::delete_tag(join("",@$obj));
33         
34         if($level > $self->{outline_level}){
35                 while($level!=$self->{outline_level}){
36                         $self->{outline_html} .= "<ul class=\"outline\">\n";
37                         $self->{outline_level}++;
38                 }
39         } elsif($level <= $self->{outline_level}){
40                 while($level-1  != $self->{outline_level}){
41                         if($self->{'outline_close_'.($self->{outline_level})} == 1){
42                                 $self->{outline_html} .= "</li>\n";
43                                 $self->{'outline_close_'.($self->{outline_level})} = 0;
44                         }
45                         if($level == $self->{outline_level}){
46                                 last;
47                         }
48                         $self->{outline_html} .= "</ul>\n";
49                         $self->{outline_level}--;
50                 }
51         } else {
52                 $self->{outline_html} .= "</li>\n";
53         }
54         
55         $self->{'outline_close_'.$level} = 1;
56         $self->{outline_html} .= "<li><a href=\"#p".$self->{outline_cnt}."\">$text</a>";
57         $self->{outline_cnt}++;
58 }
59
60 #==============================================================================
61 # ¥¢¥¦¥È¥é¥¤¥óɽ¼¨ÍÑHTML¤Î¼èÆÀ
62 #==============================================================================
63 sub outline {
64         my $self   = shift;
65         my $source = shift;
66         $self->parse($source);
67         
68         while($self->{outline_level} != 0){
69                 if($self->{'outline_close_'.($self->{outline_level})} == 1){
70                         $self->{outline_html} .= "</li>\n";
71                 }
72                 $self->{outline_html} .= "</ul>\n";
73                 $self->{outline_level}--;
74         }
75         
76         return $self->{outline_html};
77 }
78
79 #==============================================================================
80 # ¥×¥é¥°¥¤¥ó¤Î²òÀϤò¹Ô¤¦¤È̵¸Â¥ë¡¼¥×¤·¤Æ¤·¤Þ¤¦¤¿¤á
81 #==============================================================================
82 sub plugin{}
83
84 #==============================================================================
85 # ¥×¥é¥°¥¤¥ó¤Î²òÀϤò¹Ô¤¦¤È̵¸Â¥ë¡¼¥×¤·¤Æ¤·¤Þ¤¦¤¿¤á
86 #==============================================================================
87 sub l_plugin{
88         my $self   = shift;
89         my $plugin = shift;
90         
91         # outline°Ê³°¤Î¾ì¹ç¤Î¤ß½èÍý¤ò¹Ô¤¦
92         if($plugin->{command} ne "outline"){
93                 my $info = $self->{wiki}->get_plugin_info($plugin->{command});
94                 if($info->{FORMAT} eq "WIKI"){
95                         return $self->SUPER::l_plugin($plugin);
96                 }
97                 
98         } else {
99                 return undef;
100         }
101 }
102
103 1;