X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/e5ddd9b5812cfe57c1dce38509e3922715f62cda..7bdb9846379c5f410662c0a84785e52152a4d434:/IkiWiki.pm?ds=sidebyside diff --git a/IkiWiki.pm b/IkiWiki.pm index 9e71cc153..a290b479a 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -8,7 +8,7 @@ use HTML::Entities; use URI::Escape q{uri_escape_utf8}; use open qw{:utf8 :std}; -use vars qw{%config %links %oldlinks %oldpagemtime %pagectime %pagecase +use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase %renderedfiles %oldrenderedfiles %pagesources %depends %hooks %forcerebuild $gettext_obj}; @@ -672,7 +672,7 @@ sub loadindex () { #{{{ my $page=pagename($items{src}[0]); if (! $config{rebuild}) { $pagesources{$page}=$items{src}[0]; - $oldpagemtime{$page}=$items{mtime}[0]; + $pagemtime{$page}=$items{mtime}[0]; $oldlinks{$page}=[@{$items{link}}]; $links{$page}=[@{$items{link}}]; $depends{$page}=$items{depends}[0] if exists $items{depends}; @@ -694,9 +694,9 @@ sub saveindex () { #{{{ my $newfile="$config{wikistatedir}/index.new"; my $cleanup = sub { unlink($newfile) }; open (OUT, ">$newfile") || error("cannot write to $newfile: $!", $cleanup); - foreach my $page (keys %oldpagemtime) { - next unless $oldpagemtime{$page}; - my $line="mtime=$oldpagemtime{$page} ". + foreach my $page (keys %pagemtime) { + next unless $pagemtime{$page}; + my $line="mtime=$pagemtime{$page} ". "ctime=$pagectime{$page} ". "src=$pagesources{$page}"; $line.=" dest=$_" foreach @{$renderedfiles{$page}}; @@ -921,7 +921,7 @@ sub pagespec_translate ($) { #{{{ } elsif ($word =~ /^(\w+)\((.*)\)$/) { if (exists $IkiWiki::PageSpec::{"match_$1"}) { - $code.=" IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).")"; + $code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \$from)"; } else { $code.=" 0"; @@ -968,22 +968,35 @@ sub match_glob ($$$) { #{{{ return $page=~/^$glob$/i; } #}}} -sub match_link ($$) { #{{{ +sub match_link ($$$) { #{{{ my $page=shift; my $link=lc(shift); + my $from=shift; + if (! defined $from){ + $from = ""; + } + + # relative matching + if ($link =~ m!^\.! && defined $from) { + $from=~s!/?[^/]+$!!; + $link=~s!^\./!!; + $link="$from/$link" if length $from; + } my $links = $IkiWiki::links{$page} or return undef; + return 0 unless @$links; + my $bestlink = IkiWiki::bestlink($from, $link); foreach my $p (@$links) { - return 1 if lc $p eq $link; + return 1 if $bestlink eq IkiWiki::bestlink($page, $p); } return 0; } #}}} -sub match_backlink ($$) { #{{{ - match_link(pop, pop); +sub match_backlink ($$$) { #{{{ + match_link($_[1], $_[0], $_[3]); } #}}} -sub match_created_before ($$) { #{{{ +sub match_created_before ($$$) { #{{{ my $page=shift; my $testpage=shift; @@ -995,7 +1008,7 @@ sub match_created_before ($$) { #{{{ } } #}}} -sub match_created_after ($$) { #{{{ +sub match_created_after ($$$) { #{{{ my $page=shift; my $testpage=shift; @@ -1007,15 +1020,15 @@ sub match_created_after ($$) { #{{{ } } #}}} -sub match_creation_day ($$) { #{{{ +sub match_creation_day ($$$) { #{{{ return ((gmtime($IkiWiki::pagectime{shift()}))[3] == shift); } #}}} -sub match_creation_month ($$) { #{{{ +sub match_creation_month ($$$) { #{{{ return ((gmtime($IkiWiki::pagectime{shift()}))[4] + 1 == shift); } #}}} -sub match_creation_year ($$) { #{{{ +sub match_creation_year ($$$) { #{{{ return ((gmtime($IkiWiki::pagectime{shift()}))[5] + 1900 == shift); } #}}}