TyrellJ has asked for the wisdom of the Perl Monks concerning the following question:

I need help writing a function to parse strings for ansi colors (\033[33m ..etc) into information I can use to print these strings into an ncurses window. If I could get the strings seperated and a ansi color code, I could translate it, print stuff and move on.

Help would be greatly appricated. Thank you.

btw, Im pretty new to perl.

Replies are listed 'Best First'.
Re: Curses Colors
by Zaxo (Archbishop) on Nov 26, 2002 at 04:55 UTC

    Perl has a lot of documentation associated with it, and each module library brings more. Curses lists the functions available through it, and those functions are described in detail in other man pages.

    Issue 'man curs_color' on the command line to see the curses interface to color. Everything mentioned there is available through Curses. You will never have to construct a raw ANSI escape if you don't want to.

    Update: Ahh! That's different. In documents with the escape present, the regex match /\033\[(\d+)m/ will capture the color number in $1. Take care that you have a match before using it, since $1 will hang around following a previous match.

    After Compline,
    Zaxo

      The thing is, I need to translate stuff that will have ansi colors in it, that I will be recieving, and then display them in a curses style. I know how to do the curses color, i've worked with the curses library in C already. I just dont quite know how to parse a string like "this is a \033[34m string\033[0m" into something that i'll be able to print using my curses functions. ... if that makes sense, but thanks for your help.
Re: Parsing ANSI color escape sequences
by pg (Canon) on Nov 26, 2002 at 05:31 UTC
    A regexp to parse color escape sequence could be:
    m/\\033\[(\d+)(?:;(\d+)(?:;(\d+))?)?m/;
    I tested three cases:
    1. \033[0m, gives me $1 = 0, $2 and $3 undefined. Correct;
    2. \033[1;31m, gives me $1 = 1, $2 = 31, and $3 undefined. Correct;
    3. \033[1;31;44m, gives me $1 = 1, $2 = 31, and $3 = 44. Correct.