OSDN Git Service

BugTrack-plugin/331 : アンカー記述への対応(ページとして存在する場合はページリンク優先)
authorkgsoft <kgsoft@users.osdn.me>
Mon, 26 Mar 2018 05:49:04 +0000 (05:49 +0000)
committerkgsoft <kgsoft@users.osdn.me>
Mon, 26 Mar 2018 05:49:04 +0000 (05:49 +0000)
lib/Wiki/HTMLParser.pm

index 999f589..d991476 100644 (file)
@@ -473,15 +473,36 @@ sub wiki_anchor {
        my $page = shift;
        my $name = shift;
        
        my $page = shift;
        my $name = shift;
        
+       my $anchor = undef;
+       my $ppage = $page;
+       
        if(!defined($name) || $name eq ""){
                $name = $page;
        }
        if(!defined($name) || $name eq ""){
                $name = $page;
        }
-       if($self->{wiki}->page_exists($page)){
-               return "<a href=\"".$self->{wiki}->create_page_url($page)."\" class=\"wikipage\">".
+       
+       if($self->{wiki}->page_exists($page)) {
+               #¥¢¥ó¥«¡¼¤ò´Þ¤à¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¾ì¹ç¤Ï¥ê¥ó¥¯¤òÍ¥Àè
+               return "<a href=\"".$self->{wiki}->create_page_url($page).(defined($anchor)?"#".$anchor:"")."\" class=\"wikipage\">".
                       &Util::escapeHTML($name)."</a>";
        } else {
                       &Util::escapeHTML($name)."</a>";
        } else {
-               return "<span class=\"nopage\">".&Util::escapeHTML($name)."</span>".
-                      "<a href=\"".$self->{wiki}->create_page_url($page)."\">?</a>";
+               #ºÇ¸å¤Î"#"°Ê¹ß¤ò¥¢¥ó¥«¡¼¤È¤¹¤ë
+               if($page =~ m/#([^#]+)$/) {
+                       $page = $`;
+                       $anchor = $1;
+               }
+               if(defined($anchor) && $page eq '') {
+                       #Ʊ°ì¥Ú¡¼¥¸¤Î¥¢¥ó¥«¡¼¥ê¥ó¥¯
+                       return "<a href=\"#$anchor\" class=\"wikipage\">".
+                              &Util::escapeHTML($name)."</a>";
+               } elsif($self->{wiki}->page_exists($page)) {
+                       #»ØÄê¥Ú¡¼¥¸¤Î¥¢¥ó¥«¡¼¥ê¥ó¥¯
+                       return "<a href=\"".$self->{wiki}->create_page_url($page).(defined($anchor)?"#".$anchor:"")."\" class=\"wikipage\">".
+                              &Util::escapeHTML($name)."</a>";
+               } else {
+                       #¿·µ¬¥Ú¡¼¥¸ºîÀ®ÍÑ¥ê¥ó¥¯
+                       return "<span class=\"nopage\">".&Util::escapeHTML($name)."</span>".
+                              "<a href=\"".$self->{wiki}->create_page_url($ppage)."\">?</a>";
+               }
        }
 }
 
        }
 }