From 26bfed13ac23faf7108f861447f3a1bc774c674f Mon Sep 17 00:00:00 2001 From: joey Date: Fri, 27 Jul 2007 04:42:59 +0000 Subject: [PATCH] web commit by http://ethan.betacantrips.com/: regexes are fun --- ...arsing_chokes_on_function__40____41__.mdwn | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 doc/bugs/pagespec_parsing_chokes_on_function__40____41__.mdwn diff --git a/doc/bugs/pagespec_parsing_chokes_on_function__40____41__.mdwn b/doc/bugs/pagespec_parsing_chokes_on_function__40____41__.mdwn new file mode 100644 index 000000000..b7379e7b4 --- /dev/null +++ b/doc/bugs/pagespec_parsing_chokes_on_function__40____41__.mdwn @@ -0,0 +1,58 @@ +The pagespec regexes don't allow functions with no arguments. + +IkiWiki.pm, around line 1035: + +
+$spec=~m{
+                \s*             # ignore whitespace
+                (               # 1: match a single word
+                        \!              # !
+                |
+                        \(              # (
+                |
+                        \)              # )
+                |
+                        \w+\([^\)]+\)   # command(params)
+                |
+                        [^\s()]+        # any other text
+                )
+                \s*             # ignore whitespace
+        }igx
+
+ +command(params) of course might be just command(). (See +conditional.pm: match_included.) Trying to feed +ikiwiki a pagespec without params will get you instead: + +IkiWiki::PageSpec::match_glob($page, q{function}, @params) ( ) + +Which is completely not desired. The second + on that line should be a *. + +None of the builtin pagespecs "work" with no parameters, so it's hard to +write a unit test for this. But can we at least write a helpful note in +case the user is given to rebuilding the wiki by hand. --Ethan + +
+--- ikiwiki/IkiWiki.pm	2007-07-26 15:15:22.716860000 -0700
++++ ikidev/IkiWiki.pm	2007-07-26 21:34:45.542248000 -0700
+@@ -1032,7 +1032,7 @@
+ 		|
+ 			\)		# )
+ 		|
+-			\w+\([^\)]+\)	# command(params)
++			\w+\([^\)]*\)	# command(params)
+ 		|
+ 			[^\s()]+	# any other text
+ 		)
+@@ -1075,6 +1075,10 @@
+ 	}
+ 
+ 	my $ret=eval pagespec_translate($spec);
++	if ($@){
++		my $t = pagespec_translate($spec);
++		print "evaluating pagespec failed: $t $@\n";
++	}
+ 	return IkiWiki::FailReason->new("syntax error") if $@;
+ 	return $ret;
+ } #}}}
+
\ No newline at end of file -- 2.26.2