OSDN Git Service

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