leaanthony / go-ansi-parser

Go Parser for ANSI strings
MIT License
63 stars 8 forks source link

WordWrap support #9

Open jippi opened 1 year ago

jippi commented 1 year ago

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

leaanthony commented 1 year ago

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

jippi commented 1 year ago

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

leaanthony commented 1 year ago

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.

jippi commented 1 year ago

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