Files @ afabea7d0e61
Branch filter:

Location: Diana/src/diana/drawer/base.py

Laman
renamed sgfparser, game_record, prop_values
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()