]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki.pm
response
[git.ikiwiki.info.git] / IkiWiki.pm
index 18a518f3f57ba06c7fdb4942e90cd13af4a1d882..1c87831879afd5f154983123d3da1b7b188758ee 100644 (file)
@@ -17,6 +17,7 @@ use Exporter q{import};
 our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
                  bestlink htmllink readfile writefile pagetype srcfile pagename
                  displaytime will_render gettext urlto targetpage
+                add_underlay
                  %config %links %renderedfiles %pagesources %destsources);
 our $VERSION = 2.00; # plugin interface version, next is ikiwiki version
 our $version='unknown'; # VERSION_AUTOREPLACE done by Makefile, DNE
@@ -38,7 +39,7 @@ sub defaultconfig () { #{{{
        wiki_link_regexp => qr{
                \[\[                    # beginning of link
                (?:
-                       ([^\]\|]+)      # 1: link text
+                       ([^\]\|\n\s]+)  # 1: link text
                        \|              # followed by '|'
                )?                      # optional
                
@@ -83,6 +84,7 @@ sub defaultconfig () { #{{{
        pingurl => [],
        templatedir => "$installdir/share/ikiwiki/templates",
        underlaydir => "$installdir/share/ikiwiki/basewiki",
+       underlaydirs => [],
        setup => undef,
        adminuser => undef,
        adminemail => undef,
@@ -285,11 +287,26 @@ sub srcfile ($) { #{{{
        my $file=shift;
 
        return "$config{srcdir}/$file" if -e "$config{srcdir}/$file";
-       return "$config{underlaydir}/$file" if -e "$config{underlaydir}/$file";
-       error("internal error: $file cannot be found in $config{srcdir} or $config{underlaydir}");
+       foreach my $dir (@{$config{underlaydirs}}, $config{underlaydir}) {
+               return "$dir/$file" if -e "$dir/$file";
+       }
+       error("internal error: $file cannot be found in $config{srcdir} or underlay");
        return;
 } #}}}
 
+sub add_underlay ($) { #{{{
+       my $dir=shift;
+
+       if ($dir=~/^\//) {
+               unshift @{$config{underlaydirs}}, $dir;
+       }
+       else {
+               unshift @{$config{underlaydirs}}, "$config{underlaydir}/../$dir";
+       }
+
+       return 1;
+} #}}}
+
 sub readfile ($;$$) { #{{{
        my $file=shift;
        my $binary=shift;
@@ -571,6 +588,9 @@ sub htmllink ($$$;@) { #{{{
        if (defined $opts{rel}) {
                push @attrs, ' rel="'.$opts{rel}.'"';
        }
+       if (defined $opts{class}) {
+               push @attrs, ' class="'.$opts{class}.'"';
+       }
 
        return "<a href=\"$bestlink\"@attrs>$linktext</a>";
 } #}}}
@@ -886,7 +906,7 @@ sub template_params (@) { #{{{
        my @ret=(
                filter => sub {
                        my $text_ref = shift;
-                       ${$text_ref} = Encode::decode_utf8(${$text_ref});
+                       ${$text_ref} = decode_utf8(${$text_ref});
                },
                filename => $filename,
                loop_context_vars => 1,
@@ -1203,7 +1223,7 @@ sub match_link ($$;@) { #{{{
                                if $bestlink eq IkiWiki::bestlink($page, $p);
                }
                else {
-                       return IkiWiki::SuccessReason->new("$page links to page matching $link")
+                       return IkiWiki::SuccessReason->new("$page links to page $p matching $link")
                                if match_glob($p, $link, %params);
                }
        }