mirror of https://github.com/pmret/papermario.git
46 lines
958 B
Python
46 lines
958 B
Python
import sys
|
|
from typing import NoReturn, Optional
|
|
|
|
from colorama import Fore, init, Style
|
|
|
|
init(autoreset=True)
|
|
|
|
newline = True
|
|
|
|
Status = Optional[str]
|
|
|
|
|
|
def write(*args, status=None, **kwargs):
|
|
global newline
|
|
|
|
if not newline:
|
|
print("")
|
|
newline = True
|
|
|
|
print(status_to_ansi(status) + str(args[0]), *args[1:], **kwargs)
|
|
|
|
|
|
def error(*args, **kwargs) -> NoReturn:
|
|
write(*args, **kwargs, status="error")
|
|
sys.exit(2)
|
|
|
|
|
|
# The line_num is expected to be zero-indexed
|
|
def parsing_error_preamble(path, line_num, line):
|
|
write("")
|
|
write(f"error reading {path}, line {line_num + 1}:", status="error")
|
|
write(f"\t{line}")
|
|
|
|
|
|
def status_to_ansi(status: Status):
|
|
if status == "ok":
|
|
return Fore.GREEN
|
|
elif status == "warn":
|
|
return Fore.YELLOW + Style.BRIGHT
|
|
elif status == "error":
|
|
return Fore.RED + Style.BRIGHT
|
|
elif status == "skip":
|
|
return Style.DIM
|
|
else:
|
|
return ""
|