• R/O
  • HTTP
  • SSH
  • HTTPS

sandbox: コミット

個人用


コミットメタ情報

リビジョン557a0f231675657b68627dac252289ed5f96cb68 (tree)
日時2011-12-31 05:03:47
作者takezoe <takezoe@871d...>
コミッターtakezoe

ログメッセージ

コラムの一覧を表示するプラグインを追加。

変更サマリ

差分

--- /dev/null
+++ b/takezoe/plugin/book/ColumnList.pm
@@ -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;
--- a/takezoe/plugin/book/Install.pm
+++ b/takezoe/plugin/book/Install.pm
@@ -22,6 +22,7 @@ sub install {
2222 $wiki->add_inline_plugin("code" ,"plugin::book::Code" ,"HTML");
2323
2424 $wiki->add_block_plugin("column" ,"plugin::book::Column" ,"HTML");
25+ $wiki->add_paragraph_plugin("columnlist", "plugin::book::ColumnList", "HTML");
2526 $wiki->add_block_plugin("note" ,"plugin::book::Note" ,"HTML");
2627 $wiki->add_block_plugin("box" ,"plugin::book::Box" ,"HTML");
2728
旧リポジトリブラウザで表示