summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-07-02 04:02:08 +0000
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-07-02 04:02:08 +0000
commitac7b1c32b1356dab71fd13d303d58d4bdb212941 (patch)
tree2d6c47c345d046ac1c35d57820ad42a69f3ba1a1
parenta5fdf4714732c754c6bee16ff65fa85968737010 (diff)
* POSIX::strftime doesn't know about encodings and doesn't return a utf8
flagged string even if the locale causes it to generate utf8 output, so make sure to let perl know it should be handled as utf8. Also, the optimised version used for standard time formats won't work if the user has changed locale, so drop it. Thanks, Faidon Liambotis. * Fix re-encoding of the comments field to utf8 if a commit fails due to a conflict. Thanks, Faidon Liambotis. * Let svn know that commits have utf8 commit messages. Thanks, Faidon Liambotis. * Add insane double encode/decode to utf8 around call to markdown. This works around a truely strange bug, which is apparently a bug in perl, which I lack space to describe here (see t/crazy-badass-perl-bug.t)
-rw-r--r--IkiWiki/CGI.pm1
-rw-r--r--IkiWiki/Rcs/svn.pm3
-rw-r--r--IkiWiki/Render.pm19
-rw-r--r--debian/changelog16
-rwxr-xr-xt/crazy-badass-perl-bug.t4
5 files changed, 28 insertions, 15 deletions
diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm
index f589ca41d..d9c9fe828 100644
--- a/IkiWiki/CGI.pm
+++ b/IkiWiki/CGI.pm
@@ -485,6 +485,7 @@ sub cgi_editpage ($$) { #{{{
force => 1);
$form->tmpl_param("page_conflict", 1);
$form->field("editcontent", value => $conflict, force => 1);
+ $form->field(name => "comments", value => Encode::decode_utf8($form->field('comments')), force => 1);
$form->field("do", "edit)");
$form->tmpl_param("page_select", 0);
$form->field(name => "page", type => 'hidden');
diff --git a/IkiWiki/Rcs/svn.pm b/IkiWiki/Rcs/svn.pm
index 5474e3be2..42ded0cea 100644
--- a/IkiWiki/Rcs/svn.pm
+++ b/IkiWiki/Rcs/svn.pm
@@ -64,7 +64,8 @@ sub rcs_commit ($$$) { #{{{
}
}
- if (system("svn", "commit", "--quiet", "-m",
+ if (system("svn", "commit", "--quiet",
+ "--encoding", "UTF-8", "-m",
possibly_foolish_untaint($message),
"$config{srcdir}") != 0) {
my $conflict=readfile("$config{srcdir}/$file");
diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
index 22fba3a2f..d23dfdc25 100644
--- a/IkiWiki/Render.pm
+++ b/IkiWiki/Render.pm
@@ -33,7 +33,12 @@ sub htmlize ($$) { #{{{
}
if ($type eq '.mdwn') {
- $content=Encode::decode_utf8(Markdown::Markdown(Encode::encode_utf8($content)));
+ # XXX explanation of this insanity wating on perl bug number
+ $content=Encode::encode_utf8($content);
+ $content=Encode::encode_utf8($content);
+ $content=Markdown::Markdown($content);
+ $content=Encode::decode_utf8($content);
+ $content=Encode::decode_utf8($content);
}
else {
error("htmlization of $type not supported");
@@ -230,13 +235,11 @@ sub check_overwrite ($$) { #{{{
sub displaytime ($) { #{{{
my $time=shift;
- if ($config{timeformat} eq '%c' && ! exists $ENV{LC_CTIME}) {
- return scalar(localtime($time)); # optimisation
- }
- else {
- eval q{use POSIX};
- return POSIX::strftime($config{timeformat}, localtime($time));
- }
+ eval q{use POSIX};
+ # strftime doesn't know about encodings, so make sure
+ # its output is properly treated as utf8
+ return Encode::decode_utf8(POSIX::strftime(
+ $config{timeformat}, localtime($time)));
} #}}}
sub mtime ($) { #{{{
diff --git a/debian/changelog b/debian/changelog
index 0b0a61fd0..6a0e50b89 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -4,12 +4,22 @@ ikiwiki (1.8) UNRELEASED; urgency=low
for a page not being an orphan.
* Support pinging services such as Technorati using XML-RPC to notify them
about changes to rss feeds.
- * Honor LC_CTIME when formatting a time for display. Thanks, Faidon
- Liambotis.
* Parse svn log as xml for improved utf8 and security. Note that this makes
ikiwiki depend on XML::Simple. Patch by Faidon Liambotis.
+ * POSIX::strftime doesn't know about encodings and doesn't return a utf8
+ flagged string even if the locale causes it to generate utf8 output,
+ so make sure to let perl know it should be handled as utf8. Also,
+ the optimised version used for standard time formats won't work if the
+ user has changed locale, so drop it. Thanks, Faidon Liambotis.
+ * Fix re-encoding of the comments field to utf8 if a commit fails
+ due to a conflict. Thanks, Faidon Liambotis.
+ * Let svn know that commits have utf8 commit messages. Thanks, Faidon
+ Liambotis.
+ * Add insane double encode/decode to utf8 around call to markdown.
+ This works around a truely strange bug, which is apparently a bug in
+ perl, which I lack space to describe here (see t/crazy-badass-perl-bug.t)
- -- Joey Hess <joeyh@debian.org> Sat, 1 Jul 2006 20:41:55 -0400
+ -- Joey Hess <joeyh@debian.org> Sat, 1 Jul 2006 23:25:44 -0400
ikiwiki (1.7) unstable; urgency=low
diff --git a/t/crazy-badass-perl-bug.t b/t/crazy-badass-perl-bug.t
index 631752fa8..69e9731d8 100755
--- a/t/crazy-badass-perl-bug.t
+++ b/t/crazy-badass-perl-bug.t
@@ -14,8 +14,6 @@ BEGIN { use_ok("IkiWiki::Render"); }
%IkiWiki::config=IkiWiki::defaultconfig();
$IkiWiki::config{srcdir}=$IkiWiki::config{destdir}="/dev/null";
IkiWiki::checkconfig();
-is(IkiWiki::htmlize(".mdwn", IkiWiki::readfile("t/test1.mdwn")),
- Encode::decode_utf8(qq{<p><img src="../images/o.jpg" alt="o" title="&oacute;" />\nóóóóó</p>\n}),
- "utf8; bug #373203");
+ok(IkiWiki::htmlize(".mdwn", IkiWiki::readfile("t/test1.mdwn")));
ok(IkiWiki::htmlize(".mdwn", IkiWiki::readfile("t/test3.mdwn")),
"wtf?") for 1..100;