* 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)
master
joey 2006-07-02 04:02:08 +00:00
parent a5fdf47147
commit ac7b1c32b1
5 changed files with 28 additions and 15 deletions

View File

@ -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');

View File

@ -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");

View File

@ -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 ($) { #{{{

16
debian/changelog vendored
View File

@ -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

View File

@ -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;