1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2024-12-27 15:16:13 +00:00
oot/tools/vt_fmt.py
2020-07-28 13:19:24 -04:00

78 lines
1.6 KiB
Python
Executable file

#!/usr/bin/python3
import os
import sys
import struct
import argparse
import 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()