Escaping control in formatting

kenji hara k.hara.pg at gmail.com
Mon Apr 23 07:54:20 PDT 2012


2012年4月23日21:36 Denis Shelomovskij <verylonglogin.reg at gmail.com>:
> I've never used new excellent range formatting syntax by Kenji Hara until
> now. And I've met with difficulties, because "%(%(%c%), %)" is the most
> common format for string array for me and it neither obvious nor elegant. It
> occurs that "%c" disables character escaping. What the hell? Why? Not
> obvious at all.
>
> So I think it will be good to add 'Escaping' part after 'Precision' in
> format specifications:
>
> Escaping:
>  empty
>  !-
>  !+
>  !'
>  !"
>  !?'
>  !?"
>  !?!
>
> Escaping affect formatting depending on the specifier as follows.
>
> Escaping    Semantics
>  !-      disable escaping, for a range it also disables [,]
>  !+      enable escaping using single quotes for chars and double quotes for
> strings
>  !'      enable escaping using single quotes
>  !"      enable escaping using double quotes
>  !?'     like !' but without adding the quotes and [,] for a range
>  !?"     like !" but without adding the quotes and [,] for a range
>  !?!     enable escaping, both single and double quotes will be escaped
> without adding any quotes and [,] for a range
>
> Escaping is enabled by default only for associative arrays, ranges (not
> strings), user-defined types, and all its sub-elements.
>
> I'd like to remove "%c"'s ability to magically disable escaping and it looks
> possible until it is documented.
>
> Look at the example:
> ---
> import std.stdio;
>
> void main() {
>    writeln("    char");
>    char c = '\'';
>    writefln("unescaped: %s."  ,   c  );
>    writefln(`escaped+': %(%).`, [ c ]); // proposal: %!+s or %!'s
>    writefln(`escaped+": %(%).`, [[c]]); // proposal: %!"s
>    writeln (`  escaped: \t.`);          // proposal: %!?'s
>    writeln();
>    writeln("    string");
>    string s = "a\tb";
>    writefln("unescaped: %s."  ,  s );
>    writefln(`escaped+": %(%).`, [s]); // proposal: %!+s or %!"s
>    writeln (`  escaped: a\tb.`);      // proposal: %!?"s
>    writeln();
>    writeln("    strings");
>    string[] ss = ["a\tb", "cd"];
>    writefln("unescaped: %(%(%c%)%).", ss); // proposal: %!-s
>    writefln(`escaped+": %(%).`      , ss);
>    writeln (`  escaped: a\tbcd.`    , ss); // proposal: %!?"s
> }
> ---
>
> If it will be accepted, I can volunteer to try to implement it. If not,
> escaping should be at least documented (and do not forget about "%c"'s
> magic!).
>
> Any thoughts?

Please give us use cases.
I cannot imagine why you want to change/remove quotations but keep
escaped contents.

> P.S.
> If it has already been discussed, please give me a link.

As far as I know, there is not yet discussions.

Kenji Hara


More information about the Digitalmars-d mailing list