| @@ -2,6 +2,7 @@ import argparse | |||||
| import os | import os | ||||
| import sys | import sys | ||||
| from subprocess import check_call, DEVNULL, STDOUT, CalledProcessError | from subprocess import check_call, DEVNULL, STDOUT, CalledProcessError | ||||
| from shutil import copyfile, rmtree | |||||
| parser = argparse.ArgumentParser(description='Convert sgf go records into a kifu format.') | parser = argparse.ArgumentParser(description='Convert sgf go records into a kifu format.') | ||||
| @@ -104,7 +105,7 @@ def generate_moves(): | |||||
| parsedHeader = { | parsedHeader = { | ||||
| "event" : get_tag_from_header("EV"), | "event" : get_tag_from_header("EV"), | ||||
| "gameName" : get_tag_from_header("GN"), | "gameName" : get_tag_from_header("GN"), | ||||
| "date" : get_tag_from_header("RD"), | |||||
| "date" : get_tag_from_header("DT"), | |||||
| "boardSize" : int(get_tag_from_header("SZ")), | "boardSize" : int(get_tag_from_header("SZ")), | ||||
| "playerBlack" : get_tag_from_header("PB"), | "playerBlack" : get_tag_from_header("PB"), | ||||
| "playerWhite" : get_tag_from_header("PW"), | "playerWhite" : get_tag_from_header("PW"), | ||||
| @@ -119,8 +120,13 @@ parsedHeader = { | |||||
| event = parsedHeader["event"] | event = parsedHeader["event"] | ||||
| date = parsedHeader["date"] | date = parsedHeader["date"] | ||||
| result = parsedHeader["result"] | result = parsedHeader["result"] | ||||
| komi = parsedHeader["komi"] | |||||
| playerWhite = parsedHeader["playerWhite"] | playerWhite = parsedHeader["playerWhite"] | ||||
| playerBlack = parsedHeader["playerBlack"] | playerBlack = parsedHeader["playerBlack"] | ||||
| if parsedHeader["rankBlack"] != "": | |||||
| playerBlack += f" ({parsedHeader['rankBlack']})" | |||||
| if parsedHeader["rankWhite"] != "": | |||||
| playerWhite += f" ({parsedHeader['rankWhite']})" | |||||
| moves = generate_moves() | moves = generate_moves() | ||||
| outText = f""" | outText = f""" | ||||
| @@ -147,7 +153,7 @@ outText = f""" | |||||
| \\begin{{tabularx}}{{\\textwidth}}{{ R | c | X }} | \\begin{{tabularx}}{{\\textwidth}}{{ R | c | X }} | ||||
| \\hline | \\hline | ||||
| \\stone{{black}} {playerBlack} & \\textbf{{{result}}} & {playerWhite} \\stone{{white}} \\\\\\hline | \\stone{{black}} {playerBlack} & \\textbf{{{result}}} & {playerWhite} \\stone{{white}} \\\\\\hline | ||||
| & 7.5 komi & \\\\\\hline | |||||
| & {komi} Komi & \\\\\\hline | |||||
| \\end{{tabularx}} | \\end{{tabularx}} | ||||
| \\vspace{{3cm}} | \\vspace{{3cm}} | ||||
| @@ -163,11 +169,19 @@ with open(f"{fileBase}.tex", 'w') as outFile: | |||||
| # should be compiled to pdf? | # should be compiled to pdf? | ||||
| if args.c: | if args.c: | ||||
| try: | try: | ||||
| check_call(['latex', f"{fileBase}.tex"], stdout=DEVNULL, stderr=STDOUT) | |||||
| check_call(['dvips', f"{fileBase}.dvi", "-P", "pdf"], stdout=DEVNULL, stderr=STDOUT) | |||||
| check_call(['ps2pdf', f"{fileBase}.ps"], stdout=DEVNULL, stderr=STDOUT) | |||||
| os.makedirs(os.path.dirname(f"{fileBase}/"), exist_ok=True) | |||||
| copyfile(f"{fileBase}.tex", f"{fileBase}/temp.tex") | |||||
| os.remove(f"{fileBase}.tex") # poor mans `move` that works on win and linux | |||||
| check_call(['latex', f"temp.tex"], | |||||
| stdout=DEVNULL, stderr=STDOUT, cwd=f'{fileBase}') | |||||
| check_call(['dvips', f"temp.dvi", "-P", "pdf"], | |||||
| stdout=DEVNULL, stderr=STDOUT, cwd=f'{fileBase}') | |||||
| check_call(['ps2pdf', f"temp.ps"], | |||||
| stdout=DEVNULL, stderr=STDOUT, cwd=f'{fileBase}') | |||||
| except CalledProcessError: | except CalledProcessError: | ||||
| print("error") | print("error") | ||||
| else: | else: | ||||
| copyfile(f"{fileBase}/temp.pdf", f"{fileBase}.pdf") | |||||
| rmtree(f"{fileBase}/") | |||||
| if args.o: | if args.o: | ||||
| os.system(f'"{fileBase}.pdf"') | os.system(f'"{fileBase}.pdf"') | ||||