aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2007-06-01 23:40:43 +0000
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2007-06-01 23:40:43 +0000
commit78323806ee775b8f0384255ba7cecf1e74e75e4f (patch)
tree9eab82dba37cc4642f52458d227317e520c1c893
parent348a82b7a45997b979cf75444a9b1091215c60ea (diff)
downloadikiwiki-78323806ee775b8f0384255ba7cecf1e74e75e4f.tar
ikiwiki-78323806ee775b8f0384255ba7cecf1e74e75e4f.tar.gz
* Explode some of the more insane regexps.
-rw-r--r--IkiWiki.pm66
-rw-r--r--IkiWiki/Plugin/camelcase.pm15
-rw-r--r--debian/changelog3
-rw-r--r--po/ikiwiki.pot8
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 ""