Re: FormatSpec struct

2012-04-13 Thread Paul D. Anderson

On Friday, 13 April 2012 at 09:10:37 UTC, James Miller wrote:

So I made the pull request, the documentation you need to read 
is here:


https://github.com/Aatch/phobos/commit/cda3c079ee32d98a017f88949c10097840baa075

Hopefully it helps.

--
James Miller


Thanks. That did the trick.

Paul



Re: FormatSpec struct

2012-04-13 Thread James Miller
* James Miller  [2012-04-13 19:16:48 +1200]:
> * Paul D. Anderson  
> [2012-04-13 07:50:31 +0200]:
> > I'm trying to add formatted output to my decimal arithmetic module.
> > Decimals should format like floating point, using 'E', 'F' and 'G',
> > etc.
> > 
> > I would expect a format string like "%9.6e" to parse as width = 9,
> > precision = 6, using exponential notation.
> > 
> 
> Hey Paul, so some investigation has led me to believe that FormatSpec is
> really just for internal usage. The documentation is a bit misleading
> (to the point of being possibly completely false).
> 
> FormatSpec, AFAICT, is essentially just a parser for the standard format
> specifier, but its not very clear as to proper usage. I'm going to try
> to improve it and submit a pull request, until then looking at the
> source code for std.format should give you some idea of how to best use
> it.
> 
> --
> James Miller
> 

So I made the pull request, the documentation you need to read is here:

https://github.com/Aatch/phobos/commit/cda3c079ee32d98a017f88949c10097840baa075

Hopefully it helps.

--
James Miller


Re: FormatSpec struct

2012-04-13 Thread James Miller
* Paul D. Anderson  [2012-04-13 
07:50:31 +0200]:
> I'm trying to add formatted output to my decimal arithmetic module.
> Decimals should format like floating point, using 'E', 'F' and 'G',
> etc.
> 
> I would expect a format string like "%9.6e" to parse as width = 9,
> precision = 6, using exponential notation.
> 
> In std.format there is a FormatSpec struct that looks as if it will
> do the parsing for me. As far as I can tell the usage is:
> 
>  auto spec = std.format.FormatSpec!char("9.6e");
>  writeln("fmtspec = ", fmtspec);
> 
> But it doesn't do what I think it should do.
> 
> The output of the method is:
> 
> fmtspec = address = 1637116
> width = 0
> precision = 2147483646
> spec = s
> indexStart = 0
> indexEnd = 0
> flDash = false
> flZero = false
> flSpace = false
> flPlus = false
> flHash = false
> nested =
> trailing = 9.6e
> 
> The width field should be 9, the precision field should be 6, and
> the spec field should be 'e'. Instead it seems to disregard the
> input string and return a default FormatSpec, with only the
> 'trailing' field populated, containing the input.
> 
> What am I missing here? I've tried variations -- "%9.6e", "s", "%s",
> etc, but the input is always relegated to the trailing field.
> 
> Paul
> 
> 

Hey Paul, so some investigation has led me to believe that FormatSpec is
really just for internal usage. The documentation is a bit misleading
(to the point of being possibly completely false).

FormatSpec, AFAICT, is essentially just a parser for the standard format
specifier, but its not very clear as to proper usage. I'm going to try
to improve it and submit a pull request, until then looking at the
source code for std.format should give you some idea of how to best use
it.

--
James Miller


FormatSpec struct

2012-04-12 Thread Paul D. Anderson
I'm trying to add formatted output to my decimal arithmetic 
module. Decimals should format like floating point, using 'E', 
'F' and 'G', etc.


I would expect a format string like "%9.6e" to parse as width = 
9, precision = 6, using exponential notation.


In std.format there is a FormatSpec struct that looks as if it 
will do the parsing for me. As far as I can tell the usage is:


 auto spec = std.format.FormatSpec!char("9.6e");
 writeln("fmtspec = ", fmtspec);

But it doesn't do what I think it should do.

The output of the method is:

fmtspec = address = 1637116
width = 0
precision = 2147483646
spec = s
indexStart = 0
indexEnd = 0
flDash = false
flZero = false
flSpace = false
flPlus = false
flHash = false
nested =
trailing = 9.6e

The width field should be 9, the precision field should be 6, and 
the spec field should be 'e'. Instead it seems to disregard the 
input string and return a default FormatSpec, with only the 
'trailing' field populated, containing the input.


What am I missing here? I've tried variations -- "%9.6e", "s", 
"%s", etc, but the input is always relegated to the trailing 
field.


Paul