From d2679de965a0300474341139871855bbccc61612 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 4 Sep 2008 14:13:10 -0400 Subject: [PATCH] For fine control over what characters are allowed, unescaped in source filenames, the wiki_file_chars setting is added. For example, set to "-[:alnum:]+/._" to disable colons from being used in source files (which can cause trouble om Windows). --- IkiWiki.pm | 21 ++++++++-- debian/changelog | 4 ++ ...lons_cause_problems_for_Windows_users.mdwn | 7 +++- po/ikiwiki.pot | 42 +++++++++---------- 4 files changed, 48 insertions(+), 26 deletions(-) diff --git a/IkiWiki.pm b/IkiWiki.pm index 64ef6585f..7553ae3db 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -312,9 +312,15 @@ sub getsetup () { #{{{ safe => 0, rebuild => 1, }, + wiki_file_chars => { + type => "string", + description => "specifies the characters that are allowed in source filenames", + default => "-[:alnum:]+/.:_", + safe => 0, + rebuild => 1, + }, wiki_file_regexp => { type => "internal", - default => qr/(^[-[:alnum:]_.:\/+]+$)/, description => "regexp of legal source files", safe => 0, rebuild => 1, @@ -413,6 +419,10 @@ sub checkconfig () { #{{{ $gettext_obj=undef; } } + + if (! defined $config{wiki_file_regexp}) { + $config{wiki_file_regexp}=qr/(^[$config{wiki_file_chars}]+$)/; + } if (ref $config{ENV} eq 'HASH') { foreach my $val (keys %{$config{ENV}}) { @@ -770,7 +780,7 @@ sub bestlink ($$) { #{{{ elsif (exists $pagecase{lc $l}) { return $pagecase{lc $l}; } - } while $cwd=~s!/?[^/]+$!!; + } while $cwd=~s{/?[^/]+$}{}; if (length $config{userdir}) { my $l = "$config{userdir}/".lc($link); @@ -808,13 +818,16 @@ sub pagetitle ($;$) { #{{{ sub titlepage ($) { #{{{ my $title=shift; - $title=~s/([^-[:alnum:]:+\/.])/$1 eq ' ' ? '_' : "__".ord($1)."__"/eg; + # support use w/o %config set + my $chars = defined $config{wiki_file_chars} ? $config{wiki_file_chars} : "-[:alnum:]+/.:_"; + $title=~s/([^$chars]|_)/$1 eq ' ' ? '_' : "__".ord($1)."__"/eg; return $title; } #}}} sub linkpage ($) { #{{{ my $link=shift; - $link=~s/([^-[:alnum:]:+\/._])/$1 eq ' ' ? '_' : "__".ord($1)."__"/eg; + my $chars = defined $config{wiki_file_chars} ? $config{wiki_file_chars} : "-[:alnum:]+/.:_"; + $link=~s/([^$chars])/$1 eq ' ' ? '_' : "__".ord($1)."__"/eg; return $link; } #}}} diff --git a/debian/changelog b/debian/changelog index 590e06654..6565d6325 100644 --- a/debian/changelog +++ b/debian/changelog @@ -11,6 +11,10 @@ ikiwiki (2.63) UNRELEASED; urgency=low if no mime type is detected. * table: Support header=column to make the table header be the first column of the data. (AlexandreDupas) + * For fine control over what characters are allowed, unescaped in source filenames, + the wiki_file_chars setting is added. For example, set to "-[:alnum:]+/._" to + disable colons from being used in source files (which can cause trouble + om Windows). -- Joey Hess Thu, 28 Aug 2008 16:08:18 -0400 diff --git a/doc/bugs/Filenames_with_colons_cause_problems_for_Windows_users.mdwn b/doc/bugs/Filenames_with_colons_cause_problems_for_Windows_users.mdwn index 8460f0c83..0fccd1dcb 100644 --- a/doc/bugs/Filenames_with_colons_cause_problems_for_Windows_users.mdwn +++ b/doc/bugs/Filenames_with_colons_cause_problems_for_Windows_users.mdwn @@ -60,6 +60,11 @@ Windows does not support filenames containing any of these characters: `/ \ * : >>> source on windows systems is desired, you'd have to remember to turn >>> that on when setting up a wiki, even if the wiki was hosted on unix. >>> +>>> Ok, `wiki_file_chars` config option added, set to +>>> `"-[:alnum:]+/._"` to exclude colons from filenames read or written by +>>> ikiwiki. [[done]] +>>> >>> BTW, I suspect there are lots of other problems with actually running >>> ikiwiki on windows, including its assumption that the directory ->>> separator is "/". --[[Joey]] +>>> separator is "/". Windows will be supported when someone sends me a +>>> comprehansive and not ugly or performance impacting patch. :-) --[[Joey]] diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot index 15eab3905..cf19ba425 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: 2008-08-28 13:05-0400\n" +"POT-Creation-Date: 2008-09-04 14:10-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,62 +16,62 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: ../IkiWiki/CGI.pm:139 +#: ../IkiWiki/CGI.pm:140 msgid "You need to log in first." msgstr "" -#: ../IkiWiki/CGI.pm:171 +#: ../IkiWiki/CGI.pm:172 msgid "login failed, perhaps you need to turn on cookies?" msgstr "" -#: ../IkiWiki/CGI.pm:189 ../IkiWiki/CGI.pm:538 +#: ../IkiWiki/CGI.pm:190 ../IkiWiki/CGI.pm:539 msgid "Your login session has expired." msgstr "" -#: ../IkiWiki/CGI.pm:210 +#: ../IkiWiki/CGI.pm:211 msgid "Login" msgstr "" -#: ../IkiWiki/CGI.pm:211 +#: ../IkiWiki/CGI.pm:212 msgid "Preferences" msgstr "" -#: ../IkiWiki/CGI.pm:212 +#: ../IkiWiki/CGI.pm:213 msgid "Admin" msgstr "" -#: ../IkiWiki/CGI.pm:279 +#: ../IkiWiki/CGI.pm:280 msgid "Preferences saved." msgstr "" -#: ../IkiWiki/CGI.pm:338 +#: ../IkiWiki/CGI.pm:339 #, perl-format msgid "%s is not an editable page" msgstr "" -#: ../IkiWiki/CGI.pm:449 ../IkiWiki/Plugin/brokenlinks.pm:33 +#: ../IkiWiki/CGI.pm:450 ../IkiWiki/Plugin/brokenlinks.pm:33 #: ../IkiWiki/Plugin/inline.pm:310 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:78 #: ../IkiWiki/Render.pm:148 msgid "discussion" msgstr "" -#: ../IkiWiki/CGI.pm:505 +#: ../IkiWiki/CGI.pm:506 #, perl-format msgid "creating %s" msgstr "" -#: ../IkiWiki/CGI.pm:523 ../IkiWiki/CGI.pm:551 ../IkiWiki/CGI.pm:561 -#: ../IkiWiki/CGI.pm:596 ../IkiWiki/CGI.pm:641 +#: ../IkiWiki/CGI.pm:524 ../IkiWiki/CGI.pm:552 ../IkiWiki/CGI.pm:562 +#: ../IkiWiki/CGI.pm:597 ../IkiWiki/CGI.pm:642 #, perl-format msgid "editing %s" msgstr "" -#: ../IkiWiki/CGI.pm:666 +#: ../IkiWiki/CGI.pm:667 msgid "You are banned." msgstr "" -#: ../IkiWiki/CGI.pm:783 ../IkiWiki/CGI.pm:784 ../IkiWiki.pm:1117 +#: ../IkiWiki/CGI.pm:784 ../IkiWiki/CGI.pm:785 ../IkiWiki.pm:1132 msgid "Error" msgstr "" @@ -673,11 +673,11 @@ msgstr "" msgid "empty data" msgstr "" -#: ../IkiWiki/Plugin/table.pm:101 +#: ../IkiWiki/Plugin/table.pm:100 msgid "Direct data download" msgstr "" -#: ../IkiWiki/Plugin/table.pm:135 +#: ../IkiWiki/Plugin/table.pm:134 #, perl-format msgid "parse fail at line %d: %s" msgstr "" @@ -865,20 +865,20 @@ msgstr "" msgid "refreshing wiki.." msgstr "" -#: ../IkiWiki.pm:434 +#: ../IkiWiki.pm:444 msgid "Must specify url to wiki with --url when using --cgi" msgstr "" -#: ../IkiWiki.pm:478 +#: ../IkiWiki.pm:490 msgid "cannot use multiple rcs plugins" msgstr "" -#: ../IkiWiki.pm:1100 +#: ../IkiWiki.pm:1115 #, perl-format msgid "preprocessing loop detected on %s at depth %i" msgstr "" -#: ../IkiWiki.pm:1588 +#: ../IkiWiki.pm:1603 msgid "yes" msgstr "" -- 2.32.0.93.g670b81a890