diff --git a/src/drawer/base.py b/src/drawer/base.py new file mode 100644 --- /dev/null +++ b/src/drawer/base.py @@ -0,0 +1,57 @@ +import os +from itertools import count + +from jinja2 import Environment,FileSystemLoader + + +class DiagramPoint: + def __init__(self,x,y,color="",label=""): + self.x=x + self.y=y + self.color=color + self.label=label + + def __repr__(self): + return 'DiagramPoint({0},{1},"{2}","{3}")'.format(self.x,self.y,self.color,self.label) + + +class Base: + highNumbers=True + + def __init__(self,start=0): + self.overlays=[] + self._letter="a" + + self._index=dict() + self._indexGen=count(start) + + curDir=os.path.dirname(__file__) + templateDir=os.path.join(curDir,"..","templ") + self._env=Environment(loader=FileSystemLoader(templateDir)) + self._env.trim_blocks=True + self._env.lstrip_blocks=True + + def addStone(self,x,y,color): + assert (x,y) not in self._index + self._index[(x,y)]=(next(self._indexGen),DiagramPoint(x,y,color)) + + def addMove(self,x,y,color,label): + if (not self.highNumbers) and isinstance(label,int) and label%100!=0: + label%=100 + + if (x,y) not in self._index: + self._index[(x,y)]=(next(self._indexGen),DiagramPoint(x,y,color,label)) + else: + (_,point)=self._index[(x,y)] + if not point.label: + point.label=self._letter + self._letter=chr(ord(self._letter)+1) + self.overlays.append((label, point.label)) + + def addLabel(self,x,y,label): + self._index[(x,y)]=(next(self._indexGen),DiagramPoint(x,y,"",label)) + + def save(self,filename): + notes=open(filename+".txt", 'w') + notes.write("\n".join("{0} = {1}".format(a,b) for (a,b) in self.overlays)) + notes.close()