# -*- encoding: iso-8859-1 -*-

"""Verwalter eines Eintrags
"""

import re, sys



class Entry:
	"""Macht die einzelnen Informationseinheiten innerhalb des 
	Eintrags zugänglich.
	
	Veränderung zur Version classEntry02: 
	liest die Wortlemmata als Liste ein. Übergibt in getZ() ein Dic 
	und keine Liste. 
	"""

	def __init__(self, entry):
		"""bekommt einen kompletten Wörterbucheintrag in einer Liste. Ruft 
		die Funktion _parse für die Zuweisung der Klassenattribute auf.
		"""
		self.zDic = {}
		self._parse(entry)


	def _parse(self, entry):
		"""bekommt einen kompletten Wörterbucheintrag in einer Liste. 
		Weist durch reguläre Ausdrücke den folgenden Klassenattributen 
		einen Wert zu: self.wl1, self.wl2, self.rectyp, 
		self.zDic. Alle anderen Wörterbuchelemente werden hier nicht 
		gebraucht.
		"""
		for line in entry:
			
			mat = re.search("ID:\s([0-9]+)", line)
			if mat:
				self.ident = mat.group(1)
					
			mat = re.search("WL1:\s(.+)", line)
			if mat:
				self.wl1 = self._transInList(mat.group(1))

			mat = re.search("WL2:\s?(.*)", line)
			if mat:
				self.wl2 = self._transInList(mat.group(1))

			mat = re.search("RECTYP:\s([0-9]+)", line)
			if mat:
				self.rectyp = mat.group(1)
				
			mat = re.search(
				"(Z[0-9]+)((\s+[0-9]+){4,4})", line)
			if mat:
				self.zDic[mat.group(1)] = tuple(mat.group(2).split()) 
	
							
	def _transInList(self, lemma):
		"""bekommt ein Lemma, das aus mehreren Lemmaversionen bestehen kann. Macht 
		daraus eine Liste: [VERSION1, VERSION2, ...]. Übergibt die Lemmaliste.
		"""
		if re.search("\t", lemma):
			return lemma.split("\t")
		else:
			return [lemma]


	def getIdent(self):
		"""gibt die ID-Nummer als String zurück
		"""	
		return self.ident
			
			
	def getWl1(self):
		"""gibt das Wortlemma1 als Liste zurück: 
		[LEMMA-Original, LEMMA-Version1, LEMMA-Version2, ...]
		"""	
		return self.wl1
		
		
	def setWl1(self,wl1):
		"""weist Wortlemma1 einen neuen Wert zu.
		"""
		self.wl1 = wl1			


	def getWl2(self):
		"""gibt das Wortlemma2 als Liste zurück: 
		[LEMMA-Original, LEMMA-Version1, LEMMA-Version2, ...]
		Ist kein Wortlemma2 angegeben, wird die leere Liste zurückgegeben.
		"""	
		return self.wl2
		
		
	def setWl2(self,wl2):
		"""weist Wortlemma2 einen neuen Wert zu.
		"""	
		self.wl2 = wl2		


	def getRectyp(self):
		"""gibt den Rektionstyp als String zurück.
		"""		
		return self.rectyp

		
	def getZ(self):
		"""gibt alle Z-Zeilen in einem Dictionary zurück. Der Key
		besteht aus dem Kopf der Zeile, das Value aus einem Quadrupel 
		mit den vier folgenden Zahlen, z.B.:
		{Z1: (0, 0, 1, 0), Z2: (1, 0, 3, 0), ...}
		"""		
		return self.zDic






