go-ansi-parser icon indicating copy to clipboard operation
go-ansi-parser copied to clipboard

WordWrap support

Open jippi opened this issue 1 year ago • 4 comments

Hello 👋

First, thank you for an amazingly useful project 🎉

It would be fantastic if there was a WordWrap function that would break up strings by a max-length, but retain the colour stop at EOL and resumed the colouring on the next line when wrapping

(using pseudo-vars rather than ANSI codes directly here)

example := "${BLUE}this is a pretty long string that should ${BOLD}MUST be wrapped${NO_BOLD}${RESET}"

if it was broken up between MUST and be wrapped the ansi would look like this

example := "${BLUE}this is a pretty long string that should ${BOLD}MUST${RESET}\n${BLUE}${BOLD} be wrapped${RESET}"

Basically stopping colouring at WordWrap, and the resume the previous colouring on the 2nd line, to retain colouring and formatting

jippi avatar Jun 09 '23 21:06 jippi

Sounds like a nice idea to me! I'd be very happy to accept a PR for this 👍

leaanthony avatar Jun 10 '23 02:06 leaanthony

I might take a stab at it - do you have any pointers on how to achieve it? I'm not super familiar with the internals of this package or it's dependencies

jippi avatar Jun 10 '23 11:06 jippi

Yeah, it's all about the Parse function. Line 277 reads characters up to the terminating escape code. You'll need to keep track of the current line count and work out if the current iteration will break that limit.

leaanthony avatar Jun 10 '23 12:06 leaanthony

Thank you, I'll give it a try next week at work if I got time 👌

jippi avatar Jun 10 '23 12:06 jippi