From 85a0c9ad8d16ed741266ffcae1fca44c80a535df Mon Sep 17 00:00:00 2001
From: "http://www.cse.unsw.edu.au/~willu/"
 <http://www.cse.unsw.edu.au/~willu/@web>
Date: Sun, 21 Sep 2008 05:27:54 -0400
Subject: [PATCH] Update patch:  Add /s to end of regexps to handle multi-line
 pagespecs.  Simplify match_link().  Simplify pagespec_match().

---
 doc/todo/tracking_bugs_with_dependencies.mdwn | 58 +++++++++----------
 1 file changed, 29 insertions(+), 29 deletions(-)

diff --git a/doc/todo/tracking_bugs_with_dependencies.mdwn b/doc/todo/tracking_bugs_with_dependencies.mdwn
index 8435e9f58..3af0458bd 100644
--- a/doc/todo/tracking_bugs_with_dependencies.mdwn
+++ b/doc/todo/tracking_bugs_with_dependencies.mdwn
@@ -191,7 +191,7 @@ account all comments above (which doesn't mean it is above reproach :) ).  --[[W
 ----
 
     diff --git a/IkiWiki.pm b/IkiWiki.pm
-    index 4e4da11..2cc5f09 100644
+    index 4e4da11..8b3cdfe 100644
     --- a/IkiWiki.pm
     +++ b/IkiWiki.pm
     @@ -1550,7 +1550,16 @@ sub globlist_to_pagespec ($) { #{{{
@@ -208,7 +208,7 @@ account all comments above (which doesn't mean it is above reproach :) ).  --[[W
     +					\))?\s*$
     +			) |
     +				(\s and \s) | (\s or \s)	# or we find 'and' or 'or' somewhere
-    +			/x);
+    +			/xs);
      } #}}}
      
      sub safequote ($) { #{{{
@@ -221,7 +221,7 @@ account all comments above (which doesn't mean it is above reproach :) ).  --[[W
      	my $spec=shift;
      
      	# Support for old-style GlobLists.
-    @@ -1650,7 +1659,9 @@ sub pagespec_translate ($) { #{{{
+    @@ -1650,12 +1659,14 @@ sub pagespec_translate ($) { #{{{
      		|
      			\)		# )
      		|
@@ -232,18 +232,25 @@ account all comments above (which doesn't mean it is above reproach :) ).  --[[W
      		|
      			[^\s()]+	# any other text
      		)
+     		\s*		# ignore whitespace
+    -	}igx) {
+    +	}igxs) {
+     		my $word=$1;
+     		if (lc $word eq 'and') {
+     			$code.=' &&';
     @@ -1666,16 +1677,23 @@ sub pagespec_translate ($) { #{{{
      		elsif ($word eq "(" || $word eq ")" || $word eq "!") {
      			$code.=' '.$word;
      		}
-    +		elsif ($word =~ /^define\(\s*~(\w+)\s*,(.*)\)$/) {
+    -		elsif ($word =~ /^(\w+)\((.*)\)$/) {
+    +		elsif ($word =~ /^define\(\s*~(\w+)\s*,(.*)\)$/s) {
     +			$code .= " (\$params{specFuncs}->{$1}=";	# (exists \$params{specFuncs}) && 
     +			$code .= "memoize(";
     +			$code .= &pagespec_makeperl($2);
     +			$code .= ")";
     +			$code .= ") ";
     +		}
-     		elsif ($word =~ /^(\w+)\((.*)\)$/) {
+    +		elsif ($word =~ /^(\w+)\((.*)\)$/s) {
      			if (exists $IkiWiki::PageSpec::{"match_$1"}) {
     -				$code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \@_)";
     +				$code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \%params)";
@@ -258,7 +265,7 @@ account all comments above (which doesn't mean it is above reproach :) ).  --[[W
      		}
      	}
      
-    @@ -1683,23 +1701,36 @@ sub pagespec_translate ($) { #{{{
+    @@ -1683,8 +1701,18 @@ sub pagespec_translate ($) { #{{{
      		$code=0;
      	}
      
@@ -278,27 +285,16 @@ account all comments above (which doesn't mean it is above reproach :) ).  --[[W
      } #}}}
      
      sub pagespec_match ($$;@) { #{{{
-     	my $page=shift;
-     	my $spec=shift;
-     	my @params=@_;
-    +	my %params=@_;
+    @@ -1699,7 +1727,7 @@ sub pagespec_match ($$;@) { #{{{
      
-     	# Backwards compatability with old calling convention.
-     	if (@params == 1) {
-    -		unshift @params, 'location';
-    +		%params = { location => $params[1] };
-     	}
-     
-    +	$params{specFuncs} = {} unless defined $params{specFuncs};
-    +
      	my $sub=pagespec_translate($spec);
      	return IkiWiki::FailReason->new("syntax error in pagespec \"$spec\"") if $@;
     -	return $sub->($page, @params);
-    +	return $sub->($page, %params);
+    +	return $sub->($page, @params, specFuncs => {});
      } #}}}
      
      sub pagespec_valid ($) { #{{{
-    @@ -1748,11 +1779,78 @@ sub new { #{{{
+    @@ -1748,11 +1776,78 @@ sub new { #{{{
      
      package IkiWiki::PageSpec;
      
@@ -377,7 +373,7 @@ account all comments above (which doesn't mean it is above reproach :) ).  --[[W
      	my $from=exists $params{location} ? $params{location} : '';
      	
      	# relative matching
-    @@ -1782,11 +1880,16 @@ sub match_internal ($$;@) { #{{{
+    @@ -1782,11 +1877,12 @@ sub match_internal ($$;@) { #{{{
      
      sub match_link ($$;@) { #{{{
      	my $page=shift;
@@ -386,17 +382,21 @@ account all comments above (which doesn't mean it is above reproach :) ).  --[[W
      	my %params=@_;
     +	my $link=lc($fulllink);
      
-    -	my $from=exists $params{location} ? $params{location} : '';
-    +	if (substr($fulllink, 0, 1) eq '~') {
-    +		return check_named_spec_existential($page, $fulllink, \&match_link, %params);
-    +	}
-     
-    +	my $from=exists $params{location} ? $params{location} : '';
+     	my $from=exists $params{location} ? $params{location} : '';
+    -
     +	
      	# relative matching
      	if ($link =~ m!^\.! && defined $from) {
      		$from=~s#/?[^/]+$##;
-    @@ -1811,12 +1914,25 @@ sub match_link ($$;@) { #{{{
+    @@ -1804,19 +1900,32 @@ sub match_link ($$;@) { #{{{
+     		}
+     		else {
+     			return IkiWiki::SuccessReason->new("$page links to page $p matching $link")
+    -				if match_glob($p, $link, %params);
+    +				if match_glob($p, $fulllink, %params);
+     		}
+     	}
+     	return IkiWiki::FailReason->new("$page does not link to $link");
      } #}}}
      
      sub match_backlink ($$;@) { #{{{
@@ -423,7 +423,7 @@ account all comments above (which doesn't mean it is above reproach :) ).  --[[W
      
      	if (exists $IkiWiki::pagectime{$testpage}) {
      		if ($IkiWiki::pagectime{$page} < $IkiWiki::pagectime{$testpage}) {
-    @@ -1834,6 +1950,11 @@ sub match_created_before ($$;@) { #{{{
+    @@ -1834,6 +1943,11 @@ sub match_created_before ($$;@) { #{{{
      sub match_created_after ($$;@) { #{{{
      	my $page=shift;
      	my $testpage=shift;
-- 
2.39.5