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

"""überführt die neue Wortlemmaliste in das Lexikon
"""

import re, time, os, sys
sys.path.append("../04newLex")
import classEntry04
import classWlList
import classSuffixManager


	
def printTxt(p):
	"""bekommt ein Objekt der Klasse Entry04. Druckt die neue Wörterbuchversion
	04WAT.txt. Sie enthält zu jeder Wortlemmaversion die Trefferanzahl der 
	IDS-Korpora.
	"""
	f = open("../../res/04WAT.txt", "a")
	f.write("ID: " + p.getIdent() + "\n")
	f.write("WL1: ")
	[f.write(lem[0] + "µ" + lem[1] + "\t") for lem in p.getWl1()]
	f.write('\n')
	f.write("WL2: ")
	[f.write(lem[0] + "µ" + lem[1] + "\t") for lem in p.getWl2()]
	f.write('\n')	
	f.write("IBED: " + p.getIbed() + "\n")
	f.write("RECTYP: " + p.getRectyp() + "\n")
	zList = p.getZ().items()
	zList.sort(cmpKey)
	for zLine in zList:
		f.write(zLine[0] + "\t" + zLine[1][0] + "\t" + zLine[1][1] + 
			"\t" + zLine[1][2] + "\t" + zLine[1][3] + "\n" )
	qList = p.getQ()
	qList.sort(cmpKey)
	for qLine in qList:
		f.write(qLine[0] + "\t" + qLine[1][0] + "\t" + qLine[1][1] + 
			"\t" + qLine[1][2] + "\t" + qLine[1][3] + "\n" )
	if p.getUnknown():
			f.write("UNBEKANNT: " + p.getUnknown() + "\n")
	f.write("AUTOR: " + p.getAuthor() + "\n")
	f.write("DATUM: "+ p.getDate() + "\n")
	f.write("\n")
	
	
def cmpKey(tup1, tup2):
	"""bekommt zwei Tupel, in deren erstem Element ein Buchstabe und eine Zahl als
	String gespeichert stehen. Vergleicht die Zahlen der beiden Tupel miteinander.
	"""
	num1 = re.search("[0-9]+", tup1[0]).group()
	num2 = re.search("[0-9]+", tup2[0]).group()
	return cmp(int(num1), int(num2))	


def insertWlInEntry(p, wlList, i):
	"""bekommt ein Objekt der Klasse Entry04, die Wortlemmaliste und einen Index. 
	Sucht anhand des Indexes das richtige Wortlemma aus der wlOutputList für 
	den Eintrag. Setzt das neue Wl1 und Wl2 durch die Klasse Entry04. Ruft 
	die Klasse SuffixManager auf.
	"""
	wl1 = []
	wl2 = []
	emptyLine = 0
	while emptyLine < 2:
		if wlList[i] == "":
			emptyLine += 1
		elif emptyLine == 0:
			wl1.append(wlList[i])
		elif emptyLine == 1:
			wl2.append(wlList[i])
			if len(wlList) > i+1 and wlList[i+1] == "":
				emptyLine -= 1
		else:
			sys.stderr.write("Fehler in der wlOutputList")
		i += 1
	p.setWl1(wl1)
	p.setWl2(wl2)
	s = classSuffixManager.SuffixManager(p)
	p.setWl1(s.rmInsertedSuffix())
	return i
	
	
def rmOldVersions():
	"""löscht, wenn vorhanden, Dateien, die durch dieses Programm neu erstellt werden.
	Da die Dateien im append-Modus geöffnet werden, werden die alten Versionen 
	nicht automatisch überschrieben.
	"""
	if os.path.exists("../../res/04WAT.txt"): 
		os.unlink("../../res/04WAT.txt")

	if os.path.exists("../../res/teilergebnisse/03listNotEqual.txt"):
		os.unlink("../../res/teilergebnisse/03listNotEqual.txt")


if __name__ == "__main__":
	"""öffnet die modifizierte Wörterbuchversion version03.txt und die 
	Wortlemmaliste, die hinter jedem Wortlemma die Trefferhäufigkeit
	aufgeführt hat.
	Übergibt alle Wörterbucheinträge einzeln an die Funktion 
	insertWlInEntry() und an die print-Funktion. 
	"""
	time1 =  time.time()
	lexicon = open("../../res/03WAT.txt")
	rmOldVersions()	
	r = classWlList.WlList("../../res/wortlemmaListe/wlOutputList.txt")
	wlList = r.getWlList()
	wholeEntry = []
	i = 0
	countEntry = 1
	line = lexicon.readline()
	while line:
		line = line.strip()
		if re.search("ID:", line):
			if wholeEntry and wholeEntry[0] is not "":
				countEntry += 1
				p = classEntry04.Entry(wholeEntry)
				i = insertWlInEntry(p, wlList, i)
				printTxt(p)
			wholeEntry = []
		wholeEntry.append(line)
		line = lexicon.readline()
	p = classEntry04.Entry(wholeEntry)	
	i = insertWlInEntry(p, wlList, i)
	printTxt(p)
	print "Anzahl der Einträge: ", countEntry
	time2 =  time.time()
	print "Laufzeit in Minuten: ", (time2-time1)/60
