initial commit
This commit is contained in:
+115
@@ -0,0 +1,115 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
filePath = sys.argv[1]
|
||||||
|
splitBoardAt = [0,50,100,150,200,250,300,350,400,450]
|
||||||
|
|
||||||
|
with open(filePath, 'r') as myfile:
|
||||||
|
sgfData = myfile.read().replace("\n", "").split(";")[1:-1]
|
||||||
|
|
||||||
|
header = sgfData[0]
|
||||||
|
moves = sgfData[1:]
|
||||||
|
|
||||||
|
|
||||||
|
def get_tag_from_header(tag):
|
||||||
|
eventIdxStart = header.lower().find(tag.lower() + "[")
|
||||||
|
eventIdxEnd = -1
|
||||||
|
|
||||||
|
if eventIdxStart != -1 :
|
||||||
|
eventIdxEnd = header.find("]", eventIdxStart)
|
||||||
|
return header[len(tag) + 1 + eventIdxStart:eventIdxEnd]
|
||||||
|
return ""
|
||||||
|
|
||||||
|
def extractCoordinatesFromMove(move):
|
||||||
|
firstCoordinate = move[2]
|
||||||
|
secondCoordinate = ord(move[3])-96
|
||||||
|
if ord(move[2]) >= ord("i"):
|
||||||
|
firstCoordinate = chr(ord(firstCoordinate) + 1)
|
||||||
|
return firstCoordinate, secondCoordinate
|
||||||
|
|
||||||
|
def generateTitle():
|
||||||
|
out = parsedHeader["event"] + "\\\\"
|
||||||
|
out += parsedHeader["playerBlack"]
|
||||||
|
if parsedHeader["rankBlack"] != "":
|
||||||
|
out += "[" + parsedHeader["rankBlack"] + "]"
|
||||||
|
out += " - " + parsedHeader["playerWhite"]
|
||||||
|
if parsedHeader["rankWhite"] != "":
|
||||||
|
out += "[" + parsedHeader["rankWhite"] + "]"
|
||||||
|
|
||||||
|
return out
|
||||||
|
|
||||||
|
parsedHeader = {
|
||||||
|
"event" : get_tag_from_header("EV"),
|
||||||
|
"gameName" : get_tag_from_header("GN"),
|
||||||
|
"date" : get_tag_from_header("RD"),
|
||||||
|
"boardSize" : int(get_tag_from_header("SZ")),
|
||||||
|
"playerBlack" : get_tag_from_header("PB"),
|
||||||
|
"playerWhite" : get_tag_from_header("PW"),
|
||||||
|
"rankBlack" : get_tag_from_header("BR"),
|
||||||
|
"rankWhite" : get_tag_from_header("WR"),
|
||||||
|
"komi" : get_tag_from_header("KM"),
|
||||||
|
"result" : get_tag_from_header("RE")
|
||||||
|
}
|
||||||
|
|
||||||
|
outText = """
|
||||||
|
\\documentclass[a4paper]{article}
|
||||||
|
\\usepackage{psgo}
|
||||||
|
\\usepackage[ngerman]{babel}
|
||||||
|
\\usepackage[margin=2cm,nohead]{geometry}
|
||||||
|
|
||||||
|
\\setgounit{0.5cm}
|
||||||
|
|
||||||
|
\\author{}
|
||||||
|
\\title{%s}
|
||||||
|
\\date{%s}
|
||||||
|
|
||||||
|
\\begin{document}
|
||||||
|
\\maketitle
|
||||||
|
\\vspace{3.5cm}
|
||||||
|
\\begin{center}
|
||||||
|
""" % (generateTitle(), parsedHeader["date"])
|
||||||
|
|
||||||
|
finished = False
|
||||||
|
for i in range(len(splitBoardAt)-1):
|
||||||
|
currentSplit = splitBoardAt[i]
|
||||||
|
nextSplit = splitBoardAt[i+1]
|
||||||
|
|
||||||
|
outText += "\n\\setcounter{gomove}{0}\n"
|
||||||
|
outText += "\\begin{psgoboard}\n\t"
|
||||||
|
|
||||||
|
# old moves
|
||||||
|
for j in range(currentSplit):
|
||||||
|
firstCoordinate, secondCoordinate = extractCoordinatesFromMove(moves[j])
|
||||||
|
outText += "\\move*{%s}{%d} " % (firstCoordinate, parsedHeader["boardSize"] - secondCoordinate + 1)
|
||||||
|
if j % 5 == 4:
|
||||||
|
outText += "\n\t"
|
||||||
|
elif parsedHeader["boardSize"] - secondCoordinate < 9: # nice spacing
|
||||||
|
outText += " "
|
||||||
|
|
||||||
|
# new moves
|
||||||
|
for j in range(nextSplit-currentSplit):
|
||||||
|
firstCoordinate, secondCoordinate = extractCoordinatesFromMove(moves[currentSplit+j])
|
||||||
|
outText += "\\move{%s}{%d} " % (firstCoordinate, parsedHeader["boardSize"] - secondCoordinate + 1)
|
||||||
|
if j % 5 == 4:
|
||||||
|
outText += "\n\t"
|
||||||
|
elif parsedHeader["boardSize"] - secondCoordinate < 9: # nice spacing
|
||||||
|
outText += " "
|
||||||
|
|
||||||
|
# was it the last move?
|
||||||
|
if currentSplit+j == len(moves) -1:
|
||||||
|
finished = True
|
||||||
|
break
|
||||||
|
|
||||||
|
outText += "\n\\end{psgoboard}\n"
|
||||||
|
if finished:
|
||||||
|
break
|
||||||
|
|
||||||
|
outText += """
|
||||||
|
\\textbf{%s}
|
||||||
|
|
||||||
|
\\end{center}
|
||||||
|
\\end{document}
|
||||||
|
""" % parsedHeader["result"]
|
||||||
|
|
||||||
|
newFileName = ".".join(filePath.split(".")[:-1]) + ".tex"
|
||||||
|
with open(newFileName, 'w') as outFile:
|
||||||
|
outFile.write(outText)
|
||||||
Reference in New Issue
Block a user