mirror of
https://github.com/zeldaret/mm.git
synced 2024-11-23 12:59:44 +00:00
75 lines
1.6 KiB
Python
75 lines
1.6 KiB
Python
|
#!/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()
|