diff --git a/src/sgfParser/property.py b/src/sgfParser/property.py --- a/src/sgfParser/property.py +++ b/src/sgfParser/property.py @@ -5,6 +5,29 @@ GAME_INFO=1 UNKNOWN=99 +class Composed: + def __init__(self,a=None,b=None): + self.a=a + self.b=b + + def __str__(self): + return "{0}:{1}".format(self.a,self.b) + + +class Point: + def __init__(self,c,r): + self.r=r + self.c=c + + def __iter__(self): + yield self.c + yield self.r + + def __str__(self): + a=ord("a") + return chr(a+self.c)+chr(a+self.r) + + def choose(*vTypes): def f(s,start): for vType in vTypes: @@ -45,7 +68,7 @@ def compose(vTypeA,vTypeB): if a==None or s[i]!=":": return (start,None) i,b=vTypeB(s,i+1) if b==None: return start,None - return (i,(a,b)) + return (i,Composed(a,b)) return f @@ -126,9 +149,9 @@ def point(s,start): return (m.end(),tuple()) col=m.group(0)[0] row=m.group(0)[1] - col=ord(col) - (ord("a") if "a"<=col<="z" else ord("A")-26) - row=ord(row) - (ord("a") if "a"<=row<="z" else ord("A")-26) - return (m.end(),(col,row)) + col=ord(col)-(ord("a") if "a"<=col<="z" else ord("A")-26) + row=ord(row)-(ord("a") if "a"<=row<="z" else ord("A")-26) + return (m.end(),Point(col,row)) move=point stone=point @@ -177,10 +200,13 @@ class Property: def copy(self): res=Property() res.name=self.name - # !! wouldn't work for listOf(listOf()) res.value=self.value if not isinstance(self.value,list) else self.value[:] return res + def __str__(self): + val="[{0}]".format(self.value) if not isinstance(self.value,list) else "".join("[{0}]".format(x) for x in self.value) + return "{0}{1}".format(self.name,val) + patterns={ "B":singleton(move), "KO":singleton(empty),