import java.io.*;
import java.util.*;
public class SSAMarkup{
	public static void main(String[]args)throws Exception{
		if(args.length!=1){
			System.out.println("java SSAMarkup <ssa file>");
			System.exit(1);
		}
		new SSAMarkup(args[0]);
	}
	public SSAMarkup(String fileName)throws Exception{
		BufferedReader in=new BufferedReader(new FileReader(fileName));
		BufferedWriter out=new BufferedWriter(new FileWriter(fileName+".txt"));
		String line="";
		//[Events]
		boolean eventsFound=false;
		while((line=in.readLine())!=null){
			if(line.equals("[Events]")){
				eventsFound=true;
				break;
			}
		}
		if(!eventsFound){
			System.out.println("\"[Events]\" section not found");
			System.exit(1);
		}
		//Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
		String format=in.readLine();
		String[]fbits=format.split(", ");
		int startPos=-1;
		int textPos=-1;
		for(int i=0;i<fbits.length;i++){
			//System.out.println(i+"|"+fbits[i]);
			if(fbits[i].equals("Start"))
				startPos=i;
			else if(fbits[i].equals("Text"))
				textPos=i;
		}
		if(startPos==-1){
			System.out.println("\"Start\" not found");
			System.exit(1);
		}
		if(textPos==-1){
			System.out.println("\"Text\" not found");
			System.exit(1);
		}
		//Dialogue: Marked=0,0:00:00.00,0:00:05.00,Default,,0000,0000,0000,,bla bla
		out.write("<ul class=\"seekingtranscript\">");
		out.newLine();
		while((line=in.readLine())!=null){
			int estart=xIndexOf(line,',',startPos)+1;
			int eend=line.indexOf(',',estart);
			String time=line.substring(estart,eend);
			String text=line.substring(xIndexOf(line,',',textPos)+1);
			text=prepareText(text);
			System.out.println(time+"(s:"+toSeconds(time)+")|"+text);
			if(text.length()>0){
				out.write("<li onclick=\"");
				out.write("p.Seek("+toSeconds(time)+")\"");
				out.write(" title=\""+"jump to "+time.substring(0,time.length()-3)+"\"");
				out.write(">");
				out.write(text);
				out.write("</li>");
				out.newLine();
			}
		}
		out.write("</ul>");
		out.flush();
		out.close();
	}
	private int xIndexOf(String s,int ch,int count){
		int r=-1;
		int from=0;
		for(int c=0;c<count;c++){
			r=s.indexOf(ch,from);
			if(r==-1)
				return -1;
			from=r+1;
		}
		return r;
	}
	private int toSeconds(String str){
		Scanner sc=new Scanner(str).useDelimiter(":|\\.");

		int h=sc.nextInt();
		int m=sc.nextInt();
		int s=sc.nextInt();
		//int u=sc.nextInt();

		return h*60*60 + m*60 + s;// + Math.round(u/100f);
	}
	private String prepareText(String s){
		//commands
		int cs=-1;
		while((cs=s.indexOf("{\\"))!=-1){
			int ce=s.indexOf('}',cs+1);
			if(ce==-1)
				break;
			String a=s.substring(0,cs);
			String b=s.substring(ce+1);
			s=a+b;
		}
		//html
		s=s.replace("&","&amp;");
		s=s.replace("<","&lt;");
		s=s.replace(">","&lt;");
		//special chars
		s=s.replace("\\n"," ");
		s=s.replace("\\N"," ");
		s=s.replaceAll("[\\p{javaWhitespace}]{2,}"," ");
		s=s.trim();
		return s;
	}
}