package decompsource;
import java.io.File;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class CSV2SRG {
public static void main(String[] args) throws Exception {
if(args.length != 2) {
System.err.println("Usage: CSV2SRG methods.csv fields.csv < notch2srg.srg > srg2mcp.srg");
System.exit(1);
}
go(args[0], args[1], System.in, System.out);
}
public static void go(String methodsCsvFile, String fieldsCsvFile, InputStream referenceSrg, PrintStream outputSrg) throws Exception {
Map<String, String> methodsCsv = loadCsv(methodsCsvFile);
Map<String, String> fieldsCsv = loadCsv(fieldsCsvFile);
try (Scanner s = new Scanner(referenceSrg)) {
while(s.hasNextLine()) {
String[] parts = s.nextLine().split(" ");
switch(parts[0]) {
case "CL:":
outputSrg.println("CL: "+parts[2]+" "+parts[2]);
break;
case "FD:":
String name = parts[2].substring(parts[2].lastIndexOf('/')+1);
String owner = parts[2].substring(0, parts[2].lastIndexOf('/'));
outputSrg.println("FD: "+owner+"/"+name+" "+owner+"/"+get(fieldsCsv, name));
break;
case "MD:":
name = parts[3].substring(parts[3].lastIndexOf('/')+1);
owner = parts[3].substring(0, parts[3].lastIndexOf('/'));
String desc = parts[4];
outputSrg.println("MD: "+owner+"/"+name+" "+desc+" "+owner+"/"+get(methodsCsv, name)+" "+desc);
break;
case "PK:":
break;
default:
throw new RuntimeException("Invalid SRG line type: "+parts[0]);
}
}
}
}
private static String get(Map<String, String> csv, String name) {
return csv.containsKey(name) ? csv.get(name) : name;
}
private static Map<String, String> loadCsv(String filename) throws Exception {
Map<String, String> rv = new HashMap<>();
try (Scanner s = new Scanner(new File(filename))) {
while(s.hasNextLine()) {
String[] parts = s.nextLine().split(",");
rv.put(parts[0], parts[1]);
}
}
return rv;
}
}