Coloring terminal output.

Ary Borenszweig via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Sun Jul 27 07:16:04 PDT 2014


On 7/13/14, 5:11 PM, yamadapc wrote:
> Hello all :)
>
> I've made a simple port of ruby's colorize library for D.
> I'd greatly appreciate any feedback. Windows isn't supported,
> yet.
>
> Links:
> http://code.dlang.org/packages/colorize
> https://github.com/yamadapc/d-colorize
> https://github.com/fazibear/colorize

It's nice, but it could be more efficient.

You usually use colors as a one-time shot to then output something to 
the terminal. For example in Ruby it would be:

puts "hello".colorize.red.on_blue

In Ruby it's implemented using regular expressions, very ugly and not 
very performant. In D you implemented it as returning another string 
that contains the format, which allocates a new string that is short lived.

In Crystal we make colorize return a struct that wraps the original 
value but contains the color information. Then when that struct is 
converted to a string it appends the color codes to the output. In 
Crystal there's to_s (similar to toString()) but also to_s(io), which 
subclasses must override to append something to the given IO. That way 
memory allocations are reduced drastically without needing to create 
intermediate strings.

Here's the source code and some specs if you feel like copying this idea:

https://github.com/manastech/crystal/blob/master/src/colorize.cr
https://github.com/manastech/crystal/blob/master/spec/std/colorize_spec.cr


More information about the Digitalmars-d-announce mailing list