X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/90bce7d13923769e0bee64d4a17d67c1df4c1aa9..40257dc62190e90bab468e88c89b59dc24999725:/IkiWiki.pm diff --git a/IkiWiki.pm b/IkiWiki.pm index a8703450c..56be7ed47 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -32,15 +32,15 @@ memoize("file_pruned"); sub defaultconfig () { #{{{ return - wiki_file_prune_regexps => [qr/^\.\.$/, qr/^\./, qr/\/\./, + wiki_file_prune_regexps => [qr/(^|\/)\.\.(\/|$)/, qr/^\./, qr/\/\./, qr/\.x?html?$/, qr/\.ikiwiki-new$/, qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//, qr/(^|\/)_MTN\//, qr/\.dpkg-tmp$/], wiki_link_regexp => qr{ - \[\[ # beginning of link + \[\[(?=[^!]) # beginning of link (?: - ([^\]\|\n\s]+) # 1: link text + ([^\]\|]+) # 1: link text \| # followed by '|' )? # optional @@ -100,6 +100,7 @@ sub defaultconfig () { #{{{ usedirs => 1, numbacklinks => 10, account_creation_password => "", + prefix_directives => 0, } #}}} sub checkconfig () { #{{{ @@ -146,6 +147,24 @@ 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; @@ -613,6 +632,8 @@ sub htmlize ($$$) { #{{{ my $page=shift; my $type=shift; my $content=shift; + + my $oneline = $content !~ /\n/; if (exists $hooks{htmlize}{$type}) { $content=$hooks{htmlize}{$type}{call}->( @@ -630,6 +651,14 @@ sub htmlize ($$$) { #{{{ content => $content, ); }); + + if ($oneline) { + # hack to get rid of enclosing junk added by markdown + # and other htmlizers + $content=~s/^
//i; + $content=~s/<\/p>$//i; + chomp $content; + } return $content; } #}}} @@ -669,10 +698,11 @@ sub preprocess ($$$;$$) { #{{{ my $handle=sub { my $escape=shift; + my $prefix=shift; my $command=shift; my $params=shift; if (length $escape) { - return "[[$command $params]]"; + return "[[$prefix$command $params]]"; } elsif (exists $hooks{preprocess}{$command}) { return "" if $scan && ! $hooks{preprocess}{$command}{scan}; @@ -723,41 +753,81 @@ sub preprocess ($$$;$$) { #{{{ $command, $page, $preprocessing{$page}). "]]"; } - my $ret=$hooks{preprocess}{$command}{call}->( - @params, - page => $page, - destpage => $destpage, - preview => $preprocess_preview, - ); + my $ret; + if (! $scan) { + $ret=$hooks{preprocess}{$command}{call}->( + @params, + page => $page, + destpage => $destpage, + preview => $preprocess_preview, + ); + } + else { + # use void context during scan pass + $hooks{preprocess}{$command}{call}->( + @params, + page => $page, + destpage => $destpage, + preview => $preprocess_preview, + ); + $ret=""; + } $preprocessing{$page}--; return $ret; } else { - return "[[$command $params]]"; + return "[[$prefix$command $params]]"; } }; - $content =~ s{ - (\\?) # 1: escape? - \[\[ # directive open - ([-\w]+) # 2: command - \s+ - ( # 3: the parameters.. - (?: - (?:[-\w]+=)? # named parameter key? + my $regex; + if ($config{prefix_directives}) { + $regex = qr{ + (\\?) # 1: escape? + \[\[(!) # directive open; 2: prefix + ([-\w]+) # 3: command + ( # 4: the parameters.. + \s+ # Must have space if parameters present (?: - """.*?""" # triple-quoted value - | - "[^"]+" # single-quoted value - | - [^\s\]]+ # unquoted value + (?:[-\w]+=)? # named parameter key? + (?: + """.*?""" # triple-quoted value + | + "[^"]+" # single-quoted value + | + [^\s\]]+ # unquoted value + ) + \s* # whitespace or end + # of directive ) - \s* # whitespace or end - # of directive - ) - *) # 0 or more parameters - \]\] # directive closed - }{$handle->($1, $2, $3)}sexg; + *)? # 0 or more parameters + \]\] # directive closed + }sx; + } else { + $regex = qr{ + (\\?) # 1: escape? + \[\[(!?) # directive open; 2: optional prefix + ([-\w]+) # 3: command + \s+ + ( # 4: the parameters.. + (?: + (?:[-\w]+=)? # named parameter key? + (?: + """.*?""" # triple-quoted value + | + "[^"]+" # single-quoted value + | + [^\s\]]+ # unquoted value + ) + \s* # whitespace or end + # of directive + ) + *) # 0 or more parameters + \]\] # directive closed + }sx; + } + + $content =~ s{$regex}{$handle->($1, $2, $3, $4)}eg; return $content; } #}}}