layer, which led to lots of problems; make it force read files as utf-8.
Closes: #373203
* writefile() likewise needs to use the utf8 output layer.
* Remove the -CSD from ikiwiki's hashbang since it's useless to have it
there.
* Revert some of the decode_utf8 changes in CGI.pm that seem unnecessary
given the readfile fix.
* Add utf-8 testcases for readfile and htmlize.
local $/=undef;
open (IN, $file) || error("failed to read $file: $!");
- binmode(IN) if $binary;
+ if (! $binary) {
+ binmode(IN, ":utf8");
+ }
+ else {
+ binmode(IN);
+ }
my $ret=<IN>;
close IN;
return $ret;
}
open (OUT, ">$destdir/$file") || error("failed to write $destdir/$file: $!");
- binmode(OUT) if $binary;
+ if (! $binary) {
+ binmode(OUT, ":utf8");
+ }
+ else {
+ binmode(OUT);
+ }
print OUT $content;
close OUT;
} #}}}
styleurl => styleurl(),
baseurl => "$config{url}/",
);
+ # XXX why is this needed? If it's raw utf-8 won't print DTRT?
require Encode;
print $q->header(-charset=>'utf-8'), Encode::decode_utf8($template->output);
} #}}}
}
elsif ($form->submitted eq "Preview") {
require IkiWiki::Render;
+ # Apparently FormBuilder doesn't not treat input as
+ # utf-8, so decode from it.
require Encode;
my $content = Encode::decode_utf8($form->field('editcontent'));
$form->field(name => "editcontent", value => $content, force => 1);
$form->tmpl_param("page_preview",
- Encode::decode_utf8(htmlize($config{default_pageext},
- linkify($page, $page, $content))));
+ htmlize($config{default_pageext},
+ linkify($page, $page, $content)));
}
else {
$form->tmpl_param("page_preview", "");
! length $form->field('editcontent')) {
my $content="";
if (exists $pagesources{lc($page)}) {
- require Encode;
- $content=Encode::decode_utf8(readfile(srcfile($pagesources{lc($page)})));
+ $content=readfile(srcfile($pagesources{lc($page)}));
$content=~s/\n/\r\n/g;
}
$form->field(name => "editcontent", value => $content,
}
if (defined $form->field('comments') &&
length $form->field('comments')) {
+ # Decode utf-8 since FormBuilder does not.
require Encode;
$message.=Encode::decode_utf8(": ".$form->field('comments'));
}
* YA utf-8 patch from Recai, this time to fix previewing a page so that
the text in the input box is re-encoded back to utf-8.
-
- -- Joey Hess <joeyh@debian.org> Wed, 14 Jun 2006 23:38:40 -0400
+ * -CSD does not affect modules, so readfile() was not using the utf-8 input
+ layer, which led to lots of problems; make it force read files as utf-8.
+ Closes: #373203
+ * writefile() likewise needs to use the utf8 output layer.
+ * Remove the -CSD from ikiwiki's hashbang since it's useless to have it
+ there.
+ * Revert some of the decode_utf8 changes in CGI.pm that seem unnecessary
+ given the readfile fix.
+ * Add utf-8 testcases for readfile and htmlize.
+
+ -- Joey Hess <joeyh@debian.org> Thu, 15 Jun 2006 01:46:03 -0400
ikiwiki (1.5) unstable; urgency=low
-#!/usr/bin/perl -T -CSD
+#!/usr/bin/perl -T
$ENV{PATH}="/usr/local/bin:/usr/bin:/bin";
package IkiWiki;
--- /dev/null
+#!/usr/bin/perl
+use warnings;
+use strict;
+use Test::More tests => 4;
+use Encode;
+
+BEGIN { use_ok("IkiWiki"); }
+BEGIN { use_ok("IkiWiki::Render"); }
+
+# Initialize htmlscrubber plugin
+%IkiWiki::config=IkiWiki::defaultconfig();
+$IkiWiki::config{srcdir}=$IkiWiki::config{destdir}="/dev/null";
+IkiWiki::checkconfig();
+
+is(IkiWiki::htmlize(".mdwn", "foo\n\nbar\n"), "<p>foo</p>\n\n<p>bar</p>\n",
+ "basic");
+is(IkiWiki::htmlize(".mdwn", IkiWiki::readfile("t/test1.mdwn")),
+ Encode::decode_utf8(qq{<p><img src="../images/o.jpg" alt="o" title="ó" />\nóóóóó</p>\n}),
+ "utf8; bug #373203");
--- /dev/null
+#!/usr/bin/perl
+use warnings;
+use strict;
+use Test::More tests => 3;
+use Encode;
+
+BEGIN { use_ok("IkiWiki"); }
+
+# should read files as utf8
+ok(Encode::is_utf8(IkiWiki::readfile("t/test1.mdwn"), 1));
+is(IkiWiki::readfile("t/test1.mdwn"),
+ Encode::decode_utf8('![o](../images/o.jpg "ó")'."\n".'óóóóó'."\n"));
--- /dev/null
+![o](../images/o.jpg "ó")
+óóóóó