package fplot;

public class NodeConstructorHelp {

public static int naechstesKomma(String eingabe, int index) {
	do {
		switch(eingabe.charAt(index)) {
			case ',': return index;
			case '(': index = klammerEnde(eingabe, index);
			default: index++;
		}
	} while(index<eingabe.length());
	return -1;
}

public static String basisKlammern(String eingabe) {
	//System.out.println("Eingabe:\""+eingabe+"\"");
	String newstring = "";
	int index = 0;
	int lastindex = 0;
	do {
		index = naechstesKomma(eingabe, lastindex);
		//System.out.println("naechstes Komma bei index=="+index);
		if (index<0) index = eingabe.length();

		String sub2 = eingabe.substring(lastindex, index);
		//System.out.println("Substring: \""+sub2+"\"");

		String newsub2 = parseInfixKlammerung2(sub2);

		newstring += ",("+newsub2+")";

		lastindex = index+1;
		//System.out.println("newstring=\""+newstring+"\"");
	} while(index<eingabe.length());

	return newstring.substring(1);
}

public static int klammerEnde(String eingabe, int index) {
	int ende = index+1;
	int klammerStufe = 0;
	while (ende<eingabe.length() && klammerStufe>=0) {
		switch(eingabe.charAt(ende)) {
			case '(': klammerStufe++; break;
			case ')': klammerStufe--; break;
		}
		ende++;
	}
	return ende;
}

public static String parseInfixKlammerung2(String eingabe){
	// nichts zu tun
	if (eingabe.indexOf(",")<0)
		return eingabe;

	//System.out.println("Eingabe:"+eingabe);

	int index = 0;
	do {
		index = eingabe.indexOf("(", index);
		//System.out.println("naechste Klammer bei index=="+index);
		if (index<0) break;

		int ende = klammerEnde(eingabe, index);
		//System.out.println("Klammerende bei ende=="+ende);

		String sub1 = eingabe.substring(0, index+1);
		String sub2 = eingabe.substring(index+1, ende-1);
		String sub3 = eingabe.substring(ende-1);
		//System.out.println("Substrings: \""+sub1+"\"+\""+sub2+"\"+\""+sub3+"\"");

		String newsub2 = basisKlammern(sub2);

		eingabe = sub1+newsub2+sub3;
		index = ende;
		index+=newsub2.length()-sub2.length();
		//System.out.println("Aktualisiere index=="+index);
	} while(index<eingabe.length());

	return eingabe;
}

public static void main(String[] args) {
	//String e = "23 + f ( x , y ( x ) , z ( y ( x ) , x ) ) + t";
	String e = "f((x),(y))";

	String e2 = parseInfixKlammerung2(e);
	System.out.println(e);
	System.out.println(e2);
}
}
