diff options
-rw-r--r-- | IkiWiki.pm | 66 | ||||
-rw-r--r-- | IkiWiki/Plugin/camelcase.pm | 15 | ||||
-rw-r--r-- | debian/changelog | 3 | ||||
-rw-r--r-- | po/ikiwiki.pot | 8 |
4 files changed, 82 insertions, 10 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm index 8143f5256..015df1f74 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -33,7 +33,21 @@ sub defaultconfig () { #{{{ qr/\.x?html?$/, qr/\.ikiwiki-new$/, qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//, qr/\.dpkg-tmp$/], - wiki_link_regexp => qr/\[\[(?:([^\]\|]+)\|)?([^\s\]#]+)(?:#([^\s\]]+))?\]\]/, + wiki_link_regexp => qr{ + \[\[ # beginning of link + (?: + ([^\]\|]+) # 1: link text + \| # followed by '|' + )? # optional + + ([^\s\]#]+) # 2: page to link to + (?: + \# # '#', beginning of anchor + ([^\s\]]+) # 3: anchor text + )? # optional + + \]\] # end of link + }x, wiki_file_regexp => qr/(^[-[:alnum:]_.:\/+]+$)/, web_commit_regexp => qr/^web commit (by (.*?(?=: |$))|from (\d+\.\d+\.\d+\.\d+)):?(.*)/, verbose => 0, @@ -599,7 +613,17 @@ sub preprocess ($$$;$$) { #{{{ # Note: preserve order of params, some plugins may # consider it significant. my @params; - while ($params =~ /(?:(\w+)=)?(?:"""(.*?)"""|"([^"]+)"|(\S+))(?:\s+|$)/sg) { + while ($params =~ m{ + (?:(\w+)=)? # 1: named parameter key? + (?: + """(.*?)""" # 2: triple-quoted value + | + "([^"]+)" # 3: single-quoted value + | + (\S+) # 4: unquoted value + ) + (?:\s+|$) # delimiter to next param + }sgx) { my $key=$1; my $val; if (defined $2) { @@ -647,7 +671,27 @@ sub preprocess ($$$;$$) { #{{{ } }; - $content =~ s{(\\?)\[\[(\w+)\s+((?:(?:\w+=)?(?:""".*?"""|"[^"]+"|[^\s\]]+)\s*)*)\]\]}{$handle->($1, $2, $3)}seg; + $content =~ s{ + (\\?) # 1: escape? + \[\[ # directive open + (\w+) # 2: command + \s+ + ( # 3: 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 + }{$handle->($1, $2, $3)}sexg; return $content; } #}}} @@ -977,7 +1021,21 @@ sub pagespec_translate ($) { #{{{ # Convert spec to perl code. my $code=""; - while ($spec=~m/\s*(\!|\(|\)|\w+\([^\)]+\)|[^\s()]+)\s*/ig) { + while ($spec=~m{ + \s* # ignore whitespace + ( # 1: match a single word + \! # ! + | + \( # ( + | + \) # ) + | + \w+\([^\)]+\) # command(params) + | + [^\s()]+ # any other text + ) + \s* # ignore whitespace + }igx) { my $word=$1; if (lc $word eq "and") { $code.=" &&"; diff --git a/IkiWiki/Plugin/camelcase.pm b/IkiWiki/Plugin/camelcase.pm index 29d22b0dd..dc89f1b90 100644 --- a/IkiWiki/Plugin/camelcase.pm +++ b/IkiWiki/Plugin/camelcase.pm @@ -15,7 +15,20 @@ sub filter (@) { #{{{ # Make CamelCase links work by promoting them to fullfledged # WikiLinks. This regexp is based on the one in Text::WikiFormat. - $params{content}=~s#(?<![[|"/>=])\b((?:[A-Z][a-z0-9]\w*){2,})#[[$1]]#g; + $params{content}=~s{ + (?<![[|"/>=]) # try to avoid expanding non-links + # with a zero width negative lookbehind for + # characters that suggest it's not a link + \b # word boundry + ( + (?: + [A-Z] # Uppercase start + [a-z0-9] # followed by lowercase + \w* # and rest of word + ) + {2,} # repeated twice + ) + }{[[$1]]}gx; return $params{content}; } #}}} diff --git a/debian/changelog b/debian/changelog index 0589f5687..e0d5ee2bf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -30,8 +30,9 @@ ikiwiki (2.2) UNRELEASED; urgency=low * Correct some issues with display of unhandled preprocessor directives. * Apply a patch from Carl Worth adding support for using globs in link() in a PageSpec. + * Explode some of the more insane regexps. - -- Joey Hess <joeyh@debian.org> Mon, 28 May 2007 21:56:11 -0400 + -- Joey Hess <joeyh@debian.org> Fri, 01 Jun 2007 19:39:38 -0400 ikiwiki (2.1) unstable; urgency=low diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot index e63ead2fb..67c5356cf 100644 --- a/po/ikiwiki.pot +++ b/po/ikiwiki.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-05-30 15:53-0400\n" +"POT-Creation-Date: 2007-06-01 19:35-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -563,11 +563,11 @@ msgstr "" msgid "usage: ikiwiki [options] source dest" msgstr "" -#: ../IkiWiki.pm:108 +#: ../IkiWiki.pm:122 msgid "Must specify url to wiki with --url when using --cgi" msgstr "" -#: ../IkiWiki.pm:155 ../IkiWiki.pm:156 +#: ../IkiWiki.pm:169 ../IkiWiki.pm:170 msgid "Error" msgstr "" @@ -575,7 +575,7 @@ msgstr "" #. translators: preprocessor directive name, #. translators: the second a page name, the #. translators: third a number. -#: ../IkiWiki.pm:632 +#: ../IkiWiki.pm:656 #, perl-format msgid "%s preprocessing loop detected on %s at depth %i" msgstr "" |