On 1/07/2015 6:33 a.m., Taylor Hillegeist wrote:
So I am aware that Unicode is not simple... I have been working on a
boxes like project http://boxes.thomasjensen.com/

it basically puts a pretty border around stdin characters. like so:
  ________________________
/\                       \
\_|Different all twisty a|
   |of in maze are you,   |
   |passages little.      |
   |   ___________________|_
    \_/_____________________/

but I find that I need to know a bit more than the length of the string
because of encoding differences

I had a thought at one point to do this:

MyString.splitlines.map!(a => a.toUTF32.length).reduce!max();

Should get me the longest line.

but this has a problem too because control characters might not take up
space (backspace?).

https://en.wikipedia.org/wiki/Unicode_control_characters

leaving an unwanted nasty space :( or take weird amount of space \t. And
perhaps the first isn't really something to worry about.

Or should i do something like:

MyString.splitLines
         .map!(a => a
               .map!(a => a
                     .isGraphical)
               .map!(a => cast(int) a?1:0)
               .array
               .reduce!((a,b) => a+b))
         .reduce!max

Mostly I am just curious of best practice in this situation.

Both of the above fail with the input:
"hello \n People \nP\u0008ofEARTH"
on my command prompt at least.


Well I would personally use isWhite[0].
I would also use filter and count along with it.

So something like this:
size_t[] lengths = MyString.splitLines
.filter!isWhite
.count
.array;

Untested of course, but may give you ideas :)

[0] http://dlang.org/phobos/std_uni.html#.isWhite

Reply via email to