1 ###############################################################################
3 # book¥×¥é¥°¥¤¥ó¤ËÂбþ¤·¤¿¥¢¥¦¥È¥é¥¤¥ó¥Ñ¡¼¥µ
5 ###############################################################################
6 package plugin::book::TocParser;
11 @ISA = qw(Wiki::HTMLParser);
13 #==============================================================================
15 #==============================================================================
18 my $self = Wiki::HTMLParser->new(shift);
20 $self->{'outline_html'} = "";
21 $self->{'outline_level'} = 0;
22 $self->{'outline_cnt'} = 0;
23 $self->{'pagename'} = $page;
24 return bless $self,$class;
27 #==============================================================================
28 # ¥Ø¥Ã¥É¥é¥¤¥ó¤Î¤ßÃê½Ð
29 #==============================================================================
34 my $text = &Util::delete_tag(join("",@$obj));
36 if($level > $self->{outline_level}){
37 while($level!=$self->{outline_level}){
38 if($self->{'outline_close_'.($self->{outline_level})} == 1){
\r
39 $self->{outline_html} .= "</li>\n";
\r
40 $self->{'outline_close_'.($self->{outline_level})} = 0;
\r
42 $self->{outline_html} .= "<ul class=\"outline\">\n";
43 $self->{outline_level}++;
45 } elsif($level <= $self->{outline_level}){
46 while($level-1 != $self->{outline_level}){
47 if($self->{'outline_close_'.($self->{outline_level})} == 1){
48 $self->{outline_html} .= "</li>\n";
49 $self->{'outline_close_'.($self->{outline_level})} = 0;
51 if($level == $self->{outline_level}){
54 $self->{outline_html} .= "</ul>\n";
55 $self->{outline_level}--;
58 $self->{outline_html} .= "</li>\n";
61 $self->{'outline_close_'.$level} = 1;
62 $self->{outline_html} .= "<li><a href=\"?page=".Util::url_encode($self->{pagename})."#p".$self->{outline_cnt}."\">$text</a>";
63 $self->{outline_cnt}++;
66 #==============================================================================
67 # ¥¢¥¦¥È¥é¥¤¥óɽ¼¨ÍÑHTML¤Î¼èÆÀ
68 #==============================================================================
72 $self->parse($source);
74 while($self->{outline_level} != 0){
75 if($self->{'outline_close_'.($self->{outline_level})} == 1){
76 $self->{outline_html} .= "</li>\n";
78 $self->{outline_html} .= "</ul>\n";
79 $self->{outline_level}--;
82 return $self->{outline_html};
85 #==============================================================================
86 # ¥×¥é¥°¥¤¥ó¤Î²òÀϤò¹Ô¤¦¤È̵¸Â¥ë¡¼¥×¤·¤Æ¤·¤Þ¤¦¤¿¤á
87 #==============================================================================
92 if($plugin->{'command'} eq 'title1'){
94 $self->{'title2'} = 0;
95 $self->{'title3'} = 0;
96 return $self->{'chapter'}.'-'.$self->{'title1'}.'. ';
98 } elsif($plugin->{'command'} eq 'title2'){
100 $self->{'title3'} = 0;
101 return $self->{'chapter'}.'-'.$self->{'title1'}.'-'.$self->{'title2'}.'. ';
103 } elsif($plugin->{'command'} eq 'title3'){
105 return $self->{'chapter'}.'-'.$self->{'title1'}.'-'.$self->{'title2'}.'-'.$self->{'title3'}.'. ';
111 #==============================================================================
112 # ¥×¥é¥°¥¤¥ó¤Î²òÀϤò¹Ô¤¦¤È̵¸Â¥ë¡¼¥×¤·¤Æ¤·¤Þ¤¦¤¿¤á
113 #==============================================================================
118 if($plugin->{'command'} eq 'chapter'){
119 $self->{'chapter'} = $plugin->{'args'}->[0];
123 # outline°Ê³°¤Î¾ì¹ç¤Î¤ß½èÍý¤ò¹Ô¤¦
124 if($plugin->{command} ne "outline"){
125 my $info = $self->{wiki}->get_plugin_info($plugin->{command});
126 if($info->{FORMAT} eq "WIKI"){
127 return $self->SUPER::l_plugin($plugin);