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;
 }

Thanks, done --Joey

Note that the printing of the error isn't needed though. pagespec_match() returns an IkiWiki::FailReason object if parsing fails, and its caller can use that as desired to print the error.