def main():
	'''
	main() -> None
	Nimmt eine Textdatei als String entgegen, liest den Text aus, tokenisiert ihn und 
	speichert ihn wieder. Dabei steht jedes Wort und jedes Satzzeichen in einer neuen Zeile. 
	Nach jedem Satz eine Leerzeile. Der Text wird normalisiert. also alle Anführungszeichen in englische umgewandelt und
	Unterstriche entfernt.
	Getestet für Englisch, Deutsch, Französisch, Italienisch und Latein.
	>>> main()
	>>> Welcher Text?
	>>> beispiel.txt
	>>> Ausgabe in Token.txt geschrieben.
	'''

	filename = input("Welcher Text?\n")
	infile = open("C:/Texte/" + filename, "r", encoding = "utf8")
	
	textstring = infile.read()
	
	#Header und Footer entfernen
	textstring = remove_header_and_footer(textstring)	
	
	#Text tokenisieren
	textstring = tokenize(textstring)
	
	#Text normalisieren
	textstring = normalize(textstring)
	
	#Ausgabe
	outfile = open("Token.txt", "w", encoding = "utf8")
	print(textstring, file = outfile)
	print("Ausgabe in Token.txt geschrieben.")
	infile.close()
	outfile.close()

def remove_header_and_footer(textstring):
	'''
	remove_header_and_footer(String) -> String
	Entfernt Header und Footer von Gutenbergprojekten.
	>>> text_new = remove_header_and_footer(text)
	'''
	
	#Header entfernen
	textstring_new = textstring[textstring.find("Produced by "):]
	textstring_new = textstring_new[textstring_new.find("\n\n\n\n\n"):]
	
	#Footer entfernen
	e = 0
	e = textstring_new.find("\n\n\n\n\nEnd of")

	textstring_new = textstring_new[:e]
	
	#Whitespace an Anfang und Ende entfernen
	textstring_new = textstring_new.strip()

	return textstring_new

def tokenize(textstring):
	'''
	tokenize(String) -> String
	Alle Wörter in einzelne Zeilen, eine Leerzeile nach Satzende.
	>>> text_new = tokenize(text)
	'''
	
	textstring = textstring.replace(",", "\n,")
	textstring = textstring.replace("\"", '\n\"\n')
	textstring = textstring.replace("--", '\n -- \n')
	textstring = textstring.replace(":", "\n:")
	textstring = textstring.replace(";", "\n;")
	
	textstring = textstring.replace(".", "\n. +++")
	textstring = textstring.replace("!", "\n! +++")
	textstring = textstring.replace("?", "\n? +++")
        
	tokenList = list(textstring)
	
	tokenList = textstring.split()
        
	textstring_new = "\n".join(tokenList)
	textstring_new = textstring_new.replace("+++", "")
	return textstring_new

def normalize(textstring):
	'''
	normalize(string) -> string
	Text normalisieren: Alle Anführungszeichen in englische ändern, Unterstriche entfernen.
	>>> text_new = normalize(text)
	'''
        
	textstring = textstring.replace("«", "\"")	
	textstring = textstring.replace("»", "\"")
	textstring = textstring.replace("_", "")
	return textstring

main()
