# Fix for bug 25434: utf8 support
# 
# To apply this patch:
# STEP 1: Chdir to the source directory.
# STEP 2: Run the 'applypatch' program with this patch file as input.
#
# If you do not have 'applypatch', it is part of the 'makepatch' package
# that you can fetch from the Comprehensive Perl Archive Network:
# http://www.perl.com/CPAN/authors/Johan_Vromans/makepatch-x.y.tar.gz
# In the above URL, 'x' should be 2 or higher.
#
# To apply this patch without the use of 'applypatch':
# STEP 1: Chdir to the source directory.
# If you have a decent Bourne-type shell:
# STEP 2: Run the shell with this file as input.
# If you don't have such a shell, you may need to manually create
# the files as shown below.
# STEP 3: Run the 'patch' program with this file as input.
#
# These are the commands needed to create/delete files/directories:
#
touch "t/dump-file-utf8.t"
chmod 0666 "t/dump-file-utf8.t"
#
# This command terminates the shell and need not be executed manually.
exit
#
#### End of Preamble ####

#### Patch data follows ####
diff -urp --binary "YAML-0.68\MANIFEST" "YAML-0.68.RT25434\MANIFEST"
Index: ./MANIFEST
--- ./MANIFEST	Mon Dec  1 08:04:28 2008
+++ ./MANIFEST	Thu May  7 10:15:00 2009
@@ -42,6 +42,7 @@ t/dump-basics.t
 t/dump-blessed.t
 t/dump-code.t
 t/dump-file.t
+t/dump-file-utf8.t
 t/dump-nested.t
 t/dump-opts.t
 t/dump-perl-types.t
diff -urp --binary "YAML-0.68\lib\YAML.pm" "YAML-0.68.RT25434\lib\YAML.pm"
Index: ./lib/YAML.pm
--- ./lib/YAML.pm	Thu Dec  4 11:01:17 2008
+++ ./lib/YAML.pm	Wed May  6 17:43:43 2009
@@ -52,9 +52,9 @@ sub DumpFile {
         if ($filename =~ /^\s*(>{1,2})\s*(.*)$/) {
             ($mode, $filename) = ($1, $2);
         }
-        open $OUT, $mode, $filename
+        open $OUT, "$mode:utf8", $filename
           or YAML::Base->die('YAML_DUMP_ERR_FILE_OUTPUT', $filename, $!);
-    }  
+    }
     local $/ = "\n"; # reset special to "sane"
     print $OUT Dump(@_);
 }
@@ -66,7 +66,7 @@ sub LoadFile {
         $IN = $filename;
     }
     else {
-        open $IN, $filename
+        open $IN, '<:utf8', $filename
           or YAML::Base->die('YAML_LOAD_ERR_FILE_INPUT', $filename, $!);
     }
     return Load(do { local $/; <$IN> });
diff -urp --binary nul "YAML-0.68.RT25434\t\dump-file-utf8.t"
Index: ./t/dump-file-utf8.t
--- ./t/dump-file-utf8.t	Thu Jan  1 01:00:00 1970
+++ ./t/dump-file-utf8.t	Thu May  7 10:12:06 2009
@@ -0,0 +1,36 @@
+use utf8;
+use Test::YAML();
+BEGIN {
+    @Test::YAML::EXPORT =
+        grep { not /^(Dump|Load)(File)?$/ } @Test::YAML::EXPORT;
+}
+use t::TestYAML tests => 6;
+
+use YAML qw/DumpFile LoadFile/;
+
+ok defined &DumpFile,
+    'DumpFile exported';
+
+ok defined &LoadFile,
+    'LoadFile exported';
+
+my $file = 't/dump.yaml';
+
+# A scalar containing non-ASCII characters
+my $data = 'Olivier Mengu��';
+is length($data), 14, 'Test source is correctly encoded';
+
+DumpFile($file, $data);
+
+ok -e $file,
+    'Output file exists';
+
+open IN, '<:utf8', $file or die $!;
+my $yaml = join '', <IN>;
+
+is $yaml, "--- $data\n", 'DumpFile YAML encoding is correct';
+
+unlink $file;
+
+my $read = LoadFile($file);
+is $read, $data, 'LoadFile is ok';
diff -urp --binary "YAML-0.68\t\meta-yml.t" "YAML-0.68.RT25434\t\meta-yml.t"
Index: ./t/meta-yml.t
--- ./t/meta-yml.t	Thu Dec  4 11:06:34 2008
+++ ./t/meta-yml.t	Thu May  7 09:59:32 2009
@@ -1,3 +1,4 @@
+use utf8;
 use t::TestYAML tests => 1;
 
 my $node_from_yaml = LoadFile('./META.yml');
#### End of Patch data ####

#### ApplyPatch data follows ####
# Data version        : 1.0
# Date generated      : Thu May  7 10:17:05 2009
# Generated by        : makepatch 2.03
# Recurse directories : Yes
# Excluded files      : (\A|/).*\~\Z
#                       (\A|/).*\.a\Z
#                       (\A|/).*\.bak\Z
#                       (\A|/).*\.BAK\Z
#                       (\A|/).*\.elc\Z
#                       (\A|/).*\.exe\Z
#                       (\A|/).*\.gz\Z
#                       (\A|/).*\.ln\Z
#                       (\A|/).*\.o\Z
#                       (\A|/).*\.obj\Z
#                       (\A|/).*\.olb\Z
#                       (\A|/).*\.old\Z
#                       (\A|/).*\.orig\Z
#                       (\A|/).*\.rej\Z
#                       (\A|/).*\.so\Z
#                       (\A|/).*\.Z\Z
#                       (\A|/)\.del\-.*\Z
#                       (\A|/)\.make\.state\Z
#                       (\A|/)\.nse_depinfo\Z
#                       (\A|/)core\Z
#                       (\A|/)tags\Z
#                       (\A|/)TAGS\Z
# p "MANIFEST" 1260 1241684100 0100666
# p "lib/YAML.pm" 24651 1241624623 0100666
# c "t/dump-file-utf8.t" 0 1241683926 0100666
# p "t/meta-yml.t" 1007 1241683172 0100666
#### End of ApplyPatch data ####

#### End of Patch kit [created: Thu May  7 10:17:05 2009] ####
#### Patch checksum: 124 3789 51491 ####
#### Checksum: 154 4839 8734 ####