#! /usr/bin/env python
# -*- coding: utf8 -*-
import sys

#Én a mintában szereplő sorvégi szóközöket nem raktam ki

#Négy féle utasítást kezelek:
# függvénynév(paraméterek) begin utasítás_1;;;utasítás_2;;;utasítás_n end;
# if feltétel begin utasítás_1;;;utasítás_2;;;utasítás_n end;
# sima utasítás
# utasítás_n lehet if is, ekkor 8 szóköz az indent 4 helyett (if-en belül szerencsére nem lehet nested if, bár jelenlegi megoldásom könnyen módosítható, hogy azt is kezelje: számon tarthatnám az indent szintjét a cutUp függvényben is.)

def rreplace(s, old, new, occurrence):
#Forrás: http://stackoverflow.com/questions/2556108/rreplace-how-to-replace-the-last-occurence-of-an-expression-in-a-string
	li = s.rsplit(old, occurrence)
	return new.join(li)

def cutUp(s):
	#begin  print x;;;  print y ;;; return x + y + z end;

	s=rreplace(s.replace("begin","",1),"end;","",1)
	#print x;;;  print y ;;; return x + y + z

	lines=s.split(";;;")
	#['  print x', '  print y ', ' return x + y + z ']

	ret=""
	for line in lines:
		line=line.strip()
		if iffelKezdodik(line):
			ret+="\n"+ifBlokk("    ",line)
		else:
			ret+="\n"+"    "+line
	return ret

def ifBlokk(p,s):
	#if x < 0 begin print "Kisebb!" end;

	s=s.replace("end;","")
	#if x < 0 begin print "Kisebb!"

	cutInHalf=s.split("begin",1)
	ret=p+cutInHalf[0].strip()+" :"
	#if x < 0 :

	lines=cutInHalf[1].split(";;;")
	for line in lines:
		line=line.strip()
		ret+="\n"+p+"    "+line
	if p=="":#Ha belső ciklus, nem rakunk extra entert a végére
		return ret+"\n"
	else:
		return ret

def defBlokk(s):
	cutInHalf=s.split(")",1)
	nameAndArgs=cutInHalf[0]+")"
	#def ﻿fv (x,y,z) :
	return "def "+nameAndArgs+" :" + cutUp(cutInHalf[1].strip())+"\n"

def vanBenneBegin(s):
	return "begin" in s and "end" in s and ";" in s# and "(" in s and ")" in s

def iffelKezdodik(s):
	return s.startswith("if")

def parse(s):
	if vanBenneBegin(s):
		if iffelKezdodik(s):
			return ifBlokk("",s)
		else:
			return defBlokk(s)
	else:#nincs benne begin, sima utasítás
		return s+"\n"

if len(sys.argv)<2:
	print "Nincs argumentum!"
else:
	try: lines = open(sys.argv[1])
	except:
		print "Nincs ilyen file!"
	else:
		o=open("eredmeny.txt","w")
		for line in lines:
			line=line.strip()
			o.write(parse(line))