import os import re import sys import go import sgf from drawer.svg import Svg from drawer.tikz import Tikz if len(sys.argv)>1: files=sys.argv[1:] else: sys.exit("no input file specified") movesPerDiagram=75 minMovesPerDiagram=10 t=sys.stdout def processFile(fileName): shortName="".join(re.split(r'[/\\]',fileName)[-1].split('.')[:-1]) game=go.Go() global t record=sgf.Sgf(open(fileName, 'r', encoding="utf-8").read()) moves=record.getMoves() localBoard=dict() overlays="" letters=dict() letter='a' diagramsNeeded=(len(moves)-minMovesPerDiagram)//movesPerDiagram+1 moveNumber=0 for i in range(diagramsNeeded): # inicializuj diagram diagram=Tikz() for lineNumber,line in enumerate(game.board): for itemNumber,item in enumerate(line): if item==1: diagram.drawStone(itemNumber,lineNumber,"b") if item==-1: diagram.drawStone(itemNumber,lineNumber,"w") localBoard={(a,b):game.board[b][a]-1 for a in range(19) for b in range(19) if game.board[b][a]!=0} for j in range(movesPerDiagram): # kresli tahy if moveNumber>=len(moves): break c,(x,y)=moves[moveNumber] c=c.lower() if not game.move(1 if c=='b' else -1,x,y): print("illegal move: {0} at {1},{2}".format(moveNumber+1,x,y)) moveNumber+=1 continue # zapíšu tah na volný průsečík if not (x,y) in localBoard: localBoard[(x,y)]=moveNumber+1 diagram.drawMove(x,y,moveNumber+1,c) # průsečík je obsazený nepopsaným kamenem elif localBoard[(x,y)]<1: # průsečík není popsaný ani písmenem if not (x,y) in letters: letters[(x,y)]=letter color='b' if localBoard[(x,y)]==0 else 'w' diagram.drawMove(x,y,letter,color) letter=chr(ord(letter)+1) overlays+="{0} = {1}\n".format(moveNumber+1,letters[(x,y)]) # průsečík je obsazený očíslovaným kamenem else: overlays+="{0} = {1}\n".format(moveNumber+1,localBoard[(x,y)]) moveNumber+=1 # dokonči a ulož diagram # TODO rozumně pracovat s adresáři t=open(os.path.join(os.path.dirname(__file__),"out","{0}-{1}.{2}".format(shortName,i+1,diagram.extension)),'w') # nový soubor t.write(diagram.getContent()) t.close() notes=open(os.path.join(os.path.dirname(__file__),"out","{0}.txt".format(shortName)),'w') notes.write(overlays) notes.close() print("processing:") for item in files: # relativně vůči work directory nebo vůči skriptu? # item=os.path.join(os.path.dirname(__file__),item) if os.path.isfile(item): print("{0}... ".format(item),end="") processFile(item) print("done") elif os.path.isdir(item): files+=[os.path.join(item,child) for child in os.listdir(item)] print("contents of the '{0}' directory added to the queue".format(item)) else: print("the '{0}' path could not be resolved to either a file nor a directory".format(item))