#!/usr/bin/env python3

import argparse, re

COLORS = [
    'BLACK',
    'RED',
    'GREEN',
    'YELLOW',
    'BLUE',
    'PURPLE',
    'CYAN',
    'WHITE',
    'LIGHTGRAY',
    'DARKGRAY',
]

def re_match(exp, text):
    return re.compile(exp).match(text) is not None

def vt_fmt(text):
    curLiteral = False
    chars = ""

    i = 0
    while i < len(text):
        if text[i:i+5].lower() == '\\x1b[':
            if curLiteral:
                chars += '\"'
            if i > 0:
                chars += ' '

            i += 5

            code = text[i:text.find('m', i)]
            i += len(code)

            if re_match('^4[0-9];3[0-9]$', code):
                chars += 'VT_COL(' + COLORS[int(code[1])] + ', ' + COLORS[int(code[4])] + ')'
            elif re_match('^4[0-9]$', code):
                chars += 'VT_BGCOL(' + COLORS[int(code[1])] + ')'
            elif re_match('^3[0-9]$', code):
                chars += 'VT_FGCOL(' + COLORS[int(code[1])] + ')'
            elif len(code) == 0:
                chars += 'VT_RST'
            else:
                raise Exception('Invalid String')

            curLiteral = False
        else:
            if not curLiteral:
                chars += ' \"'
            chars += text[i]
            curLiteral = True

        i += 1

    
    if curLiteral:
        chars += '\"'

    return chars


def main():
    parser = argparse.ArgumentParser(description='Properly formats VT macros')
    parser.add_argument('string', help='String to format')
    args = parser.parse_args()
    
    print(vt_fmt(args.string))


if __name__ == "__main__":
    main()
