]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki.pm
web commit by http://jblevins.org/: Case-sensitivity of HTML::Scrubber
[git.ikiwiki.info.git] / IkiWiki.pm
index 1091ca8728ee94af5378247a409a9d6e0c45e552..221d1e589d1a977ec97648220e78804565e07be3 100644 (file)
@@ -37,21 +37,6 @@ sub defaultconfig () { #{{{
                qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//,
                qr/(^|\/)_MTN\//,
                qr/\.dpkg-tmp$/],
-       wiki_link_regexp => qr{
-               \[\[(?=[^!])            # beginning of link
-               (?:
-                       ([^\]\|]+)      # 1: link text
-                       \|              # followed by '|'
-               )?                      # optional
-               
-               ([^\n\r\]#]+)           # 2: page to link to
-               (?:
-                       \#              # '#', beginning of anchor
-                       ([^\s\]]+)      # 3: anchor text
-               )?                      # optional
-               
-               \]\]                    # end of link
-       }x,
        wiki_file_regexp => qr/(^[-[:alnum:]_.:\/+]+$)/,
        web_commit_regexp => qr/^web commit (by (.*?(?=: |$))|from (\d+\.\d+\.\d+\.\d+)):?(.*)/,
        verbose => 0,
@@ -89,8 +74,8 @@ sub defaultconfig () { #{{{
        setup => undef,
        adminuser => undef,
        adminemail => undef,
-       plugin => [qw{mdwn inline htmlscrubber passwordauth openid signinedit
-                     lockedit conditional recentchanges}],
+       plugin => [qw{mdwn link inline htmlscrubber passwordauth openid
+                       signinedit lockedit conditional recentchanges}],
        libdir => undef,
        timeformat => '%c',
        locale => undef,
@@ -147,24 +132,6 @@ sub checkconfig () { #{{{
                umask(possibly_foolish_untaint($config{umask}));
        }
 
-       if (!$config{prefix_directives}) {
-               $config{wiki_link_regexp} = qr{
-                       \[\[                    # beginning of link
-                       (?:
-                               ([^\]\|\n\s]+)  # 1: link text
-                               \|              # followed by '|'
-                       )?                      # optional
-
-                       ([^\s\]#]+)             # 2: page to link to
-                       (?:
-                               \#              # '#', beginning of anchor
-                               ([^\s\]]+)      # 3: anchor text
-                       )?                      # optional
-
-                       \]\]                    # end of link
-               }x,
-       }
-
        run_hooks(checkconfig => sub { shift->() });
 
        return 1;
@@ -684,21 +651,17 @@ sub htmlize ($$$) { #{{{
 } #}}}
 
 sub linkify ($$$) { #{{{
-       my $lpage=shift; # the page containing the links
-       my $page=shift; # the page the link will end up on (different for inline)
+       my $page=shift;
+       my $destpage=shift;
        my $content=shift;
 
-       $content =~ s{(\\?)$config{wiki_link_regexp}}{
-               defined $2
-                       ? ( $1 
-                               ? "[[$2|$3".($4 ? "#$4" : "")."]]" 
-                               : htmllink($lpage, $page, linkpage($3),
-                                       anchor => $4, linktext => pagetitle($2)))
-                       : ( $1 
-                               ? "[[$3".($4 ? "#$4" : "")."]]"
-                               : htmllink($lpage, $page, linkpage($3),
-                                       anchor => $4))
-       }eg;
+       run_hooks(linkify => sub {
+               $content=shift->(
+                       page => $page,
+                       destpage => $destpage,
+                       content => $content,
+               );
+       });
        
        return $content;
 } #}}}
@@ -999,7 +962,7 @@ sub saveindex () { #{{{
                if (exists $pagestate{$page}) {
                        foreach my $id (@hookids) {
                                foreach my $key (keys %{$pagestate{$page}{$id}}) {
-                                       $line.=' '.$id.'_'.encode_entities($key)."=".encode_entities($pagestate{$page}{$id}{$key}, " \t\n");
+                                       $line.=' '.$id.'_'.encode_entities($key, " \t\n")."=".encode_entities($pagestate{$page}{$id}{$key}, " \t\n");
                                }
                        }
                }
@@ -1143,6 +1106,8 @@ sub add_depends ($$) { #{{{
        my $page=shift;
        my $pagespec=shift;
        
+       return unless pagespec_valid($pagespec);
+
        if (! exists $depends{$page}) {
                $depends{$page}=$pagespec;
        }
@@ -1204,8 +1169,6 @@ sub pagespec_merge ($$) { #{{{
 } #}}}
 
 sub pagespec_translate ($) { #{{{
-       # This assumes that $page is in scope in the function
-       # that evalulates the translated pagespec code.
        my $spec=shift;
 
        # Support for old-style GlobLists.
@@ -1242,18 +1205,18 @@ sub pagespec_translate ($) { #{{{
                }
                elsif ($word =~ /^(\w+)\((.*)\)$/) {
                        if (exists $IkiWiki::PageSpec::{"match_$1"}) {
-                               $code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \@params)";
+                               $code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \@_)";
                        }
                        else {
                                $code.=' 0';
                        }
                }
                else {
-                       $code.=" IkiWiki::PageSpec::match_glob(\$page, ".safequote($word).", \@params)";
+                       $code.=" IkiWiki::PageSpec::match_glob(\$page, ".safequote($word).", \@_)";
                }
        }
 
-       return $code;
+       return eval 'sub { my $page=shift; '.$code.' }';
 } #}}}
 
 sub pagespec_match ($$;@) { #{{{
@@ -1266,9 +1229,16 @@ sub pagespec_match ($$;@) { #{{{
                unshift @params, 'location';
        }
 
-       my $ret=eval pagespec_translate($spec);
+       my $sub=pagespec_translate($spec);
        return IkiWiki::FailReason->new('syntax error') if $@;
-       return $ret;
+       return $sub->($page, @params);
+} #}}}
+
+sub pagespec_valid ($) { #{{{
+       my $spec=shift;
+
+       my $sub=pagespec_translate($spec);
+       return ! $@;
 } #}}}
 
 package IkiWiki::FailReason;