On 2/19/07, Matthieu Riou <matthieu.riou / gmail.com> wrote:
> Hi,
>
> I'm not sure this is the right place to report issues about Syck but that's
> the best I've found so far :) I think I've found a problem with the way Syck
> quotes strings that could look like floats. Here is a short example:
>
> irb(main):001:0> require 'yaml'
> => true
> irb(main):002:0> YAML.dump(["1.2", "1.2.3", "1.2_3"])
> => "--- \n- \"1.2\"\n- 1.2.3\n- 1.2_3\n"
>
> The first element is quoted appropriately, the second isn't because there's
> no ambiguity but the third should be quoted. The YAML float can have
> underscores, they're used as visual separators and should be ignored by the
> parser. So when seeing 1.2_3 the parser should read the float 1.23. Then to
> disambiguates the string "1.2_3" should be quoted.
>
> Practically this isn't really a problem as YAML converts on writes so
> YAML.dump(1.2_3) gets directly written as 1.23. However it creates some
> interoperability issues when "1.2_3" gest written unquoted by Syck and then
> read by another parser as being 1.23. The string isn't a string anymore in
> that case.
>

Are you certain that 1.2_3 is a valid YAML float?

http://yaml.org/type/float.html

I do not believe underscores are valid in either YAML floats or YAML
integers. Although they are allowed in Ruby, I believe Syck is
handling your example case properly and without ambiguity.

Blessings,
TwP