For fine control over what characters are allowed, unescaped in source filenames...
authorJoey Hess <joey@kodama.kitenet.net>
Thu, 4 Sep 2008 18:13:10 +0000 (14:13 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Thu, 4 Sep 2008 18:13:10 +0000 (14:13 -0400)
IkiWiki.pm
debian/changelog
doc/bugs/Filenames_with_colons_cause_problems_for_Windows_users.mdwn
po/ikiwiki.pot

index 64ef6585f00b351b952008f1f21ff2fb40cfee07..7553ae3db7c67efc3be926270ba6b35aad27dd0b 100644 (file)
@@ -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;
 } #}}}
 
index 590e066545ae6a74a7ab9e7c29a3aefd879df8bb..6565d632574b5ba78a1d8200ee3e820b89f289a4 100644 (file)
@@ -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 <joeyh@debian.org>  Thu, 28 Aug 2008 16:08:18 -0400
 
index 8460f0c8390c18b32145d32692d158309f37235f..0fccd1dcb01a3c7d1a074fb814d6ce323749386c 100644 (file)
@@ -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]]
index 15eab39057f373b63c2db6074864c2c82c2a89a5..cf19ba4255d71247589f51097491af5be4c39592 100644 (file)
@@ -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 <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\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 ""