On 07/12/2010 03:04 AM, Lars Tandle Kyllingstad wrote:
(Sorry, sent this to Andrei's private address.  Resending to list.)

That sounds like a good idea.  Should fmt include the '%' character of
the format specifier?

I'd think so. Also, types could define their own format specifiers if they want to.

BTW I've changed the grammar of the format specifiers to allow unlimited nesting. A format string may contain a nested format string by enclosing it in %( and %). The intent is to print elaborate types comfortably. For example, this:

int[string] a = ["abc":1, "def":5];
writefln("Here's the map:\n"
    "%(=== %2$ is mapped by %1$ ===\n%) ===\n\nThat was it", a);

produces:

Here's the map:
=== 1 is mapped by abc ===
=== 2 is mapped by def ===

(I've also showcased positional parameters.) Note how the nested specifier is used for each <key,value> pair in the map. The last time around the trailing specifier is not printed in order to allow e.g. printing arrays without a trailing comma. This time I did want the trailing portion to be present for the last element, so I added it after the nested specifier.

The format string above is parsed correctly but the current version doesn't support associative arrays yet.

Now getting back to types defining their own format specifiers, for example Data could define its own spec that understands %D, %M, and %Y. Then you could print stuff like this:

Date d;
double x;
writefln("I paid $%g on %(%M/%D/%Y%)", x, d);

producing:

I paid $5 on 07/12/2010

The nested specifier is passed to Date's toString function along with a delegate that writes to the standard output.


Andrei
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to