[RFC] ColorD

Chad J chadjoan at __spam.is.bad__gmail.com
Tue Oct 23 13:55:09 PDT 2012


On 10/23/2012 04:42 PM, Jens Mueller wrote:
> Jens Mueller wrote:
>> Chad J wrote:
>>>
>>> That's a reasonable suggestion.  The only thing that can't be solved
>>> is the trailing ) enclosing the text to be formatted.  That needs a
>>> % before it to prevent ambiguity with parentheses in the text
>>> itself.  So I could make your example:
>>>
>>>> writefln("The %c(red,white)(widgetometer%) is a device
>>> formeasuring"); // for writing red on white
>>>
>>> I was also considering the possibility of separating layout and
>>> style by allowing some kind of style specification before the
>>> printing, with a limited formatting spec for using the styles:
>>>
>>> stdout.addTermTextStyle("id=myStyle, fg=red, bg=white, dark, underline");
>>>
>>> writefln("The %c(myStyle)(widgetometer%) is a device for measuring");
>>
>> Ideally, we get some users and ask them what they find easy to read. Or
>> look how other languages solve this.
>> Because I myself don't color my terminals that much I find it hard to
>> imagine.
>> I searched for some ruby libraries. I find ruby syntax often very easy.
>> We could use UFCS, e.g.
>> "some string".red
>> or
>> "some string".foreground(Color.red)
>>
>> What do you think?
>> I find this way easier than format strings.
>
> Just read the other post. This has the same problem.
>
> Jens

Also I'm intentionally shooting for something very concise.  If 
verbosity conflicts, then it loses.  I say verbosity because I find that 
things get /less/ readable in situations like these if the syntax/naming 
is lengthy.  It causes alignment issues, text wrapping, noise, etc.

The thing I liked about the styling notion is that it allows things to 
be spelled out more, but places this noise outside of the string being 
formatted.

More thoughts:

// Do style parsing at compile-time if desired.
const myStyle = parseTermTextStyle("id=myStyle, fg=red, bg=white, dark, 
underline"

// At runtime, stdout is told to use this.
stdout.addTermTextStyle(myStyle);

// I'm thinking it might look better by dropping a pair of parens,
//   but using a . to make it clear where the formatter type ends
//   and the style id begins.
writefln("The %C.myStyle(widgetometer%) is a device for measuring");

// Overloaded for convenience.
stdout.addTermTextStyle("id=rw, fg=red, bg=white, dark, underline");

// The user can choose how verbose they want their formatter to look.
// This is a very concise one.
writefln("The %C.rw(widgetometer%) is a device for measuring");

// Other note: %C is necessary.  %c can't be used because that is
//   already used for formatting single characters.


More information about the Digitalmars-d mailing list