修訂 | 557a0f231675657b68627dac252289ed5f96cb68 (tree) |
---|---|
時間 | 2011-12-31 05:03:47 |
作者 | takezoe <takezoe@871d...> |
Commiter | takezoe |
コラムの一覧を表示するプラグインを追加。
@@ -0,0 +1,95 @@ | ||
1 | +################################################################################ | |
2 | +# | |
3 | +# <p>columnプラグインで記述したコラムの一覧を出力します。</p> | |
4 | +# <pre> | |
5 | +# {{column}} | |
6 | +# </pre> | |
7 | +# <p> | |
8 | +# ページ名を指定することで他のページのコラム一覧を出力することができます。 | |
9 | +# ページ名は複数指定することもできます。 | |
10 | +# </p> | |
11 | +# <pre> | |
12 | +# {{toc ページ名1,ページ名2,...}} | |
13 | +# </pre> | |
14 | +# | |
15 | +################################################################################ | |
16 | +package plugin::book::ColumnList; | |
17 | +#============================================================================== | |
18 | +# コンストラクタ | |
19 | +#============================================================================== | |
20 | +sub new { | |
21 | + my $class = shift; | |
22 | + my $self = {}; | |
23 | + return bless $self,$class; | |
24 | +} | |
25 | + | |
26 | +#============================================================================== | |
27 | +# パラグラフメソッド | |
28 | +#============================================================================== | |
29 | +sub paragraph { | |
30 | + my $self = shift; | |
31 | + my $wiki = shift; | |
32 | + my @pages = @_; | |
33 | + | |
34 | + my $parser = plugin::book::ColumnListParser->new($wiki); | |
35 | + if($#pages == -1){ | |
36 | + my $page = $wiki->get_CGI->param('page'); | |
37 | + $parser->parse('', $wiki->get_page($page)); | |
38 | + } else { | |
39 | + foreach my $page (@pages){ | |
40 | + $parser->parse($page, $wiki->get_page($page)); | |
41 | + } | |
42 | + } | |
43 | + | |
44 | + return $parser->columnlist; | |
45 | +} | |
46 | + | |
47 | +#============================================================================== | |
48 | +# コラム抽出用のパーサ | |
49 | +#============================================================================== | |
50 | +package plugin::book::ColumnListParser; | |
51 | +use Wiki::HTMLParser; | |
52 | + | |
53 | +@ISA = qw(Wiki::HTMLParser); | |
54 | + | |
55 | +sub new { | |
56 | + my $class = shift; | |
57 | + my $self = Wiki::HTMLParser->new(shift); | |
58 | + $self->{columnlist} = ''; | |
59 | + return bless $self,$class; | |
60 | +} | |
61 | + | |
62 | +sub parse { | |
63 | + my $self = shift; | |
64 | + my $page = shift; | |
65 | + my $source = shift; | |
66 | + $self->{pagename} = $page; | |
67 | + $self->{column} = 0; | |
68 | + $self->SUPER::parse($source); | |
69 | +} | |
70 | +sub columnlist { | |
71 | + my $self = shift; | |
72 | + if($self->{columnlist} eq ''){ | |
73 | + return "<p>コラムはありません</p>"; | |
74 | + } else { | |
75 | + return "<ul>".$self->{columnlist}."</ul>"; | |
76 | + } | |
77 | +} | |
78 | + | |
79 | +sub l_plugin{ | |
80 | + my $self = shift; | |
81 | + my $plugin = shift; | |
82 | + | |
83 | + if($plugin->{'command'} eq 'column'){ | |
84 | + $self->{column}++; | |
85 | + $self->{columnlist} .= "<li>"; | |
86 | + if($self->{pagename} ne ''){ | |
87 | + $self->{columnlist} .= "(".Util::escapeHTML($self->{pagename}).")"; | |
88 | + } | |
89 | + $self->{columnlist} .= "<a href=\"?page=".Util::url_encode($self->{pagename}). | |
90 | + "#c".$self->{column}."\">".Util::escapeHTML($plugin->{'args'}->[1])."</a></li>"; | |
91 | + } | |
92 | + return undef; | |
93 | +} | |
94 | + | |
95 | +1; |
@@ -22,6 +22,7 @@ sub install { | ||
22 | 22 | $wiki->add_inline_plugin("code" ,"plugin::book::Code" ,"HTML"); |
23 | 23 | |
24 | 24 | $wiki->add_block_plugin("column" ,"plugin::book::Column" ,"HTML"); |
25 | + $wiki->add_paragraph_plugin("columnlist", "plugin::book::ColumnList", "HTML"); | |
25 | 26 | $wiki->add_block_plugin("note" ,"plugin::book::Note" ,"HTML"); |
26 | 27 | $wiki->add_block_plugin("box" ,"plugin::book::Box" ,"HTML"); |
27 | 28 |