Revision: 2825 http://trac.macosforge.org/projects/ruby/changeset/2825 Author: neeracher@apple.com Date: 2009-10-15 18:30:42 -0700 (Thu, 15 Oct 2009) Log Message: ----------- Handle UTF-16 encoded strings passed to YAML Modified Paths: -------------- MacRuby/trunk/ext/libyaml/rubyext.c MacRuby/trunk/spec/frozen/library/yaml/to_yaml_spec.rb Modified: MacRuby/trunk/ext/libyaml/rubyext.c =================================================================== --- MacRuby/trunk/ext/libyaml/rubyext.c 2009-10-16 01:27:38 UTC (rev 2824) +++ MacRuby/trunk/ext/libyaml/rubyext.c 2009-10-16 01:30:42 UTC (rev 2825) @@ -162,10 +162,10 @@ rb_bytestring_length(input)); } else if (TYPE(input) == T_STRING) { - // TODO: Make sure that this is Unicode-aware. + const char * instring = RSTRING_PTR(input); yaml_parser_set_input_string(parser, - (const unsigned char *)(RSTRING_PTR(input)), - RSTRING_LEN(input)); + (const unsigned char *)(instring), + strlen(instring)); } else if (TYPE(input) == T_FILE) { yaml_parser_set_input(parser, rb_yaml_io_read_handler, @@ -729,7 +729,7 @@ int can_omit_tag = 0; yaml_char_t *tag = rb_yaml_tag_or_null(taguri, &can_omit_tag); - yaml_scalar_event_initialize(&ev, NULL, tag, output, RSTRING_LEN(val), + yaml_scalar_event_initialize(&ev, NULL, tag, output, strlen(output), can_omit_tag, can_omit_tag, rb_symbol_to_scalar_style(style)); yaml_emitter_emit(emitter, &ev); Modified: MacRuby/trunk/spec/frozen/library/yaml/to_yaml_spec.rb =================================================================== --- MacRuby/trunk/spec/frozen/library/yaml/to_yaml_spec.rb 2009-10-16 01:27:38 UTC (rev 2824) +++ MacRuby/trunk/spec/frozen/library/yaml/to_yaml_spec.rb 2009-10-16 01:30:42 UTC (rev 2825) @@ -53,6 +53,14 @@ "I love Ruby".to_yaml.should == "--- I love Ruby\n" end + it "returns correct escape characters for non-ASCII Unicode characters" do + # + # Not sure if this belongs here? MN + # + str = YAML.load('--- "\U000000A9\U00002117\U0001D122"') + str.to_yaml.chomp.should == '--- "\xA9\u2117\U0001D122"' + end + it "returns the YAML representation of a Struct object" do Person = Struct.new(:name, :gender) Person.new("Jane", "female").to_yaml.should match_yaml("--- !ruby/struct:Person\nname: Jane\ngender: female\n")
participants (1)
-
source_changes@macosforge.org