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 Drawer:
high_numbers = True
def __init__(self, start=0):
self.overlays = []
self._letter = "a"
self._index = dict()
self._index_gen = count(start)
cur_dir = os.path.dirname(__file__)
template_dir = os.path.join(cur_dir, "..", "templ")
self._env = Environment(loader=FileSystemLoader(template_dir))
self._env.trim_blocks = True
self._env.lstrip_blocks = True
def add_stone(self, x, y, color):
assert (x, y) not in self._index
self._index[(x, y)] = (next(self._index_gen), DiagramPoint(x, y, color))
def add_move(self, x, y, color, label):
if (not self.high_numbers) and isinstance(label, int) and label%100 != 0:
label %= 100
if (x, y) not in self._index:
self._index[(x, y)] = (next(self._index_gen), 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 add_label(self, x, y, label):
self._index[(x, y)] = (next(self._index_gen), 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()