digitalmars.D.bugs - [Issue 16336] New: Inconsistent flag handling of std.format.FormatSpec
- via Digitalmars-d-bugs (40/40) Jul 29 2016 https://issues.dlang.org/show_bug.cgi?id=16336
https://issues.dlang.org/show_bug.cgi?id=16336 Issue ID: 16336 Summary: Inconsistent flag handling of std.format.FormatSpec Product: D Version: D2 Hardware: x86_64 OS: Windows Status: NEW Severity: minor Priority: P1 Component: phobos Assignee: nobody puremagic.com Reporter: r.97all gmail.com import std.format; struct FormatSpecPrinter { void toString(scope void delegate(const(char)[]) sink, FormatSpec!char fmt) { sink.formattedWrite("%s", fmt); } } void main() { import std.stdio; "%(%(%s%)%)".writefln(FormatSpecPrinter()); // just fine. "%-(%-(%s%)%)".writefln(FormatSpecPrinter()); // dash is nicely handled. "%+(%(%s%)%)".writefln(FormatSpecPrinter()); // OK: plus flag for outer %(..%). "%(%+(%s%)%)".writefln(FormatSpecPrinter()); // inner plus flag crashes: first "%)" matches "%(" and the second "%)" left orphan. } Like in the example in the wiki article, I'd like to use '+' flag for another meaning, in a nested way. https://wiki.dlang.org/Defining_custom_print_format_specifiers So, I'd like '+' flags to be allowed both for outermost and nested '(' specifier. However, current implementation considers only "%-(" when looking for the matching "%)" of outer "%(". https://github.com/dlang/phobos/blob/f75eeb596d44544e98a23ee1fd0b60f9ae8b0956/std/format.d#L918 --
Jul 29 2016