Files @ cfcff53c74e6
Branch filter:

Location: Diana/src/sgfParser/node.py - annotation

Laman
little property refactoring
from . import skipWhitespace, ParserError
from .property import Property, GAME_INFO


class Node:
	def __init__(self):
		self.properties=dict()
		self._parent=None
		self._children=[]

	@staticmethod
	def create(s,start):
		res=Node()
		if s[start]!=";":
			# print("error when parsing Node")
			return (start,None)
		i=skipWhitespace(s,start+1)
		i,x=Property.create(s,start+1)
		while x is not None:
			if x.name in res.properties:
				print(res.properties)
				raise ParserError(0,0,'duplicate "{0}" property in node at position {1}. second value ignored'.format(x.name,start))
			else:
				res.properties[x.name]=x
			i=skipWhitespace(s,i)
			i,x=Property.create(s,i)
		return (i,res)

	def isGINode(self):
		return any(prop.type==GAME_INFO for prop in self.properties.values())

	def setProperty(self,name,value):
		self.properties[name]=value
		# zkontrolovat typ value

	def setParent(self,node):
		self._parent=node

	def addChild(self,node):
		if node in self._children: return node
		self._children.append(node)
		return node

	def removeChild(self,node):
		if node not in self._children:
			return None
		del self._children[self._children.index(node)]
		return node

	def removeChildAt(self,i):
		if -len(self._children)<i<len(self._children):
			res=self._children[i]
			del self._children[i]
			return res
		return None

	def getProperty(self,name):
		if name in self.properties: return self.properties[name]
		else: return None