OSDN Git Service

slinkプラグインを追加。
[fswiki/sandbox.git] / takezoe / plugin / book / SLink.pm
diff --git a/takezoe/plugin/book/SLink.pm b/takezoe/plugin/book/SLink.pm
new file mode 100644 (file)
index 0000000..495766e
--- /dev/null
@@ -0,0 +1,101 @@
+################################################################################
+#
+# <p>¸«½Ð¤·¤ä¿Þɽ¤Ø¤Î¥ê¥ó¥¯¤ò½ÐÎϤ¹¤ë¤¿¤á¤Î¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó¤Ç¤¹¡£</p>
+# <p>°ú¿ô¤Ë¤Ïtitle1¡Átitle3¥×¥é¥°¥¤¥ó¤äcaption¥×¥é¥°¥¤¥ó¤Çµ­½Ò¤·¤¿»²¾ÈÍѤΥé¥Ù¥ë¤ò»ØÄꤷ¤Þ¤¹¡£</p>
+# <pre>
+# !!!{{title1 installation}}¥¤¥ó¥¹¥È¡¼¥ëÊýË¡
+# ...
+# ¥¤¥ó¥¹¥È¡¼¥ëÊýË¡¤Ë¤Ä¤¤¤Æ¤Ï{{slink installation}}¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
+# </pre>
+# <p>Âè2°ú¿ô¤Ç¥Ú¡¼¥¸¤ò»ØÄꤹ¤ë¤³¤È¤Ç¡¢ÊÌ¥Ú¡¼¥¸¤Î¸«½Ð¤·¤ä¿Þɽ¤ò»²¾È¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£</p>
+# <pre>
+# ¥¤¥ó¥¹¥È¡¼¥ëÊýË¡¤Ë¤Ä¤¤¤Æ¤Ï{{slink installation,Chapter1}}¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
+# </pre>
+#
+################################################################################
+package plugin::book::SLink;
+#==============================================================================
+# ¥³¥ó¥¹¥È¥é¥¯¥¿
+#==============================================================================
+sub new {
+       my $class = shift;
+       my $self = {};
+       my $self->{cache} = {};
+       return bless $self,$class;
+}
+
+#==============================================================================
+# ¥¤¥ó¥é¥¤¥ó¥á¥½¥Ã¥É
+#==============================================================================
+sub inline {
+       my $self   = shift;
+       my $wiki   = shift;
+       my $anchor = shift;
+       my $page   = shift;
+       
+       $page = $wiki->get_CGI->param('page') unless $page;
+       my $source = $wiki->get_page($page);
+       
+       unless(defined($self->{cache}->{$page})){
+               $self->{cache}->{$page} = {};
+               my $source = $wiki->get_page($page);
+
+               my $text = '';
+       
+               my @lines = split(/\n/,$wiki->get_page($page));
+               my $chapter = '';
+               my $count = {};
+               my $title1Count = 0;
+               my $title2Count = 0;
+               my $title3Count = 0;
+               
+               # TODO {{pre}}¥×¥é¥°¥¤¥óÆâ¤Îµ­½Ò¤ÏÈô¤Ð¤µ¤Ê¤¤¤È¥À¥á¡ª¡ª¥Ñ¡¼¥µ¤òºî¤é¤Ê¤¤¤È¥À¥á¤Ã¤Ý¤¤¡©
+               foreach my $line (@lines){
+                       if($line =~ /^{{(chapter.+}})$/){
+                               my $plugin = $wiki->parse_inline_plugin($1);
+                               $chapter = $plugin->{'args'}->[0];
+                               $title1Count = 0;
+                               $title2Count = 0;
+                               $title3Count = 0;
+                               foreach my $key (keys(%$count)){
+                                       $count->{$key} = 0;
+                               }
+                       } elsif($line =~ /^!!!{{(title1.+}})(.+)$/){
+                               my $plugin = $wiki->parse_inline_plugin($1);
+                               $title1Count++;
+                               $title2Count = 0;
+                               $title3Count = 0;
+                               $text= $chapter.'-'.$title1Count;
+                               $self->{cache}->{$page}->{$plugin->{'args'}->[0]} = $text;
+                               
+                       } elsif($line =~ /^!!{{(title2.+}})$/){
+                               my $plugin = $wiki->parse_inline_plugin($1);
+                               $title2Count++;
+                               $title3Count = 0;
+                               $text= $chapter.'-'.$title1Count.'-'.$title2Count;
+                               $self->{cache}->{$page}->{$plugin->{'args'}->[0]} = $text;
+                               
+                       } elsif($line =~ /^!{{(title3.+}})$/){
+                               my $plugin = $wiki->parse_inline_plugin($1);
+                               $title3Count++;
+                               $text= $chapter.'-'.$title1Count.'-'.$title2Count.'-'.$title3Count;
+                               $self->{cache}->{$page}->{$plugin->{'args'}->[0]} = $text;
+                               
+                       } elsif($line =~ /^{{(caption.+}})$/){
+                               my $plugin = $wiki->parse_inline_plugin($1);
+                               my $type = $plugin->{'args'}->[0];
+                               $count->{$type}++;
+                               $text = $type.$chapter.'-'.$count->{$type};
+                               $self->{cache}->{$page}->{$plugin->{'args'}->[2]} = $text;
+                       }
+               }
+       }
+       if(defined($self->{cache}->{$page}->{$anchor})){
+               my $text = $self->{cache}->{$page}->{$anchor};
+               return '<a href="?page='.Util::url_encode($page).'#'.Util::escapeHTML($anchor).'" style="border: 1px solid black;">'.Util::escapeHTML($text).'</a>';
+       } else {
+               return '<span class="xref-error">»²¾ÈÀ褬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡ª</span>';
+       }
+}
+
+1;