// // Latex Project Public Licence (lppl1.3) applies // Originally written by Kwanleung Tse // First Release : 1st July, 2014 // Last Update : 25th September, 2014 // // package worker4math.hktex2; import java.util.ArrayList; import java.util.HashMap; public class Parsepreparation { public String parsepreparation(String molecule2, HashMap symboltype, HashMap matchsymbol) { char temp1,temp2; int length=0; int i=0; int j=-1; int ii=0; boolean insidetabular=false; String molecule = ""; String key=""; length = molecule2.length(); Fontfile font = new Fontfile(); font.fontfile(); Textattributefile text = new Textattributefile(); text.textattributefile(); Colorfile color = new Colorfile(); color.colorfile(); ArrayList atom = new ArrayList(); int i2=0; molecule2 = molecule2+"!!!!"; for (i=0;i2<=length;i++){ temp1=molecule2.charAt(i2); temp2=molecule2.charAt(i2+1); if (temp1=='!' && temp2=='!'){i2=length+1;} else if (temp1!='!' && temp1 !='}' && temp1 !='{'){molecule=molecule+temp1; i2++;} else if (temp1=='!'){ key=""; for (ii=i2+1;!(molecule2.charAt(ii)==' ' ||molecule2.charAt(ii)=='}' || molecule2.charAt(ii)=='{'|| molecule2.charAt(ii)=='!'|| molecule2.charAt(ii)=='('|| molecule2.charAt(ii)==')');ii++){ key = key + molecule2.charAt(ii); } if (key.equals("frac")){molecule = molecule + "!fra!onb{"; j++; atom.add("onb"); i2=i2+key.length()+2;} else if (key.equals("odb")){molecule = molecule + "!odb{"; j++; atom.add("odb"); i2=i2+key.length()+2;} else if (key.equals("tabular")){ molecule = molecule + "!bta{"; j++; atom.add("bta"); i2=i2+key.length()+2; int i4=molecule2.indexOf("{",i2); molecule=molecule+molecule2.substring(i2,i4+1); for (i=i2;i<=i4-2;i++){ if (molecule2.charAt(i)=='l' || molecule2.charAt(i)=='c' || molecule2.charAt(i)=='r'){ } } i2=i4+1; insidetabular=true; } else if (key.equals("line")){ molecule = molecule + "!bln{"; j++; atom.add("bln"); i2=i2+key.length()+2; if (molecule2.charAt(i2)=='}'){molecule=molecule+"!dno"; i2++;}; } else if (key.equals("block")){molecule = molecule +"!openblock ";j++; atom.add("block"); i2=i2+key.length()+2;} else if (key.equals("vspace")){molecule = molecule + "!vsp{"; i2=i2+key.length()+2; key=""; for (ii=i2;!(molecule2.charAt(ii)=='}');ii++){ key = key + molecule2.charAt(ii);} molecule = molecule + key+"}"; i2=i2+key.length()+1; } else if (key.equals("hspace")){molecule = molecule + "!hsp{" ; i2=i2+key.length()+2; key=""; for (ii=i2;!(molecule2.charAt(ii)=='}');ii++){ key = key + molecule2.charAt(ii);} molecule = molecule + key+"}"; i2=i2+key.length()+1; } else if (key.equals("^")){molecule = molecule + "!osp{" ; j++; atom.add(key); i2=i2+key.length()+2;} else if (key.equals("_")){molecule = molecule + "!osu{"; j++; atom.add(key); i2=i2+key.length()+2;} else if (key.equals("mbox")){molecule = molecule + "!obx{"; j++; atom.add(key); i2=i2+key.length()+2;} else if (key.equals("dno")){molecule = molecule + "!dno ";i2=i2+key.length()+2;} else if (key.equals("noindent")){i2=i2+key.length()+2;} else if (symboltype.containsKey(key) && symboltype.get(key) < 10 ){ molecule = molecule + "!V" + key +"{"; j++; atom.add(key); i2=i2+key.length()+2; temp1=molecule2.charAt(i2); temp2=molecule2.charAt(i2+1); if (temp1 == '!' && temp2 == '.'){molecule = molecule +"!."; i2=i2+2;}; } else if (symboltype.containsKey(key) && symboltype.get(key) >= 10 ){ i2=i2+key.length()+1; if (molecule2.charAt(i2)==' '){i2++; molecule = molecule + "!" + key +" ";} else if (molecule2.charAt(i2)=='!' || molecule2.charAt(i2)=='}' ){molecule = molecule + "!" + key;} } else if (text.attribute.contains(key)){ if (molecule2.charAt(i2+key.length()+1)=='('){molecule = molecule + "!Ao"+key+molecule2.substring(i2+key.length()+1,molecule2.indexOf(")",i2+key.length()+1)+2); j++; atom.add(key); i2=molecule2.indexOf(")",i2+key.length()+1)+2; } else {molecule = molecule + "!Ao"+key+"{"; j++; atom.add(key); i2=i2+key.length()+2;}; } else if (Header.sizefactor.containsKey(key)){molecule = molecule + "!Xo"+key+"{"; j++; atom.add(key); i2=i2+key.length()+2;} else if (font.fontname.contains(key)){molecule = molecule + "!Fo"+key+"{"; j++; atom.add(key); i2=i2+key.length()+2;} else if (color.colorinteger.containsKey(key)){molecule = molecule + "!Co"+key+"{"; j++; atom.add(key); i2=i2+key.length()+2;} } else if (temp1=='{' && insidetabular){ molecule=molecule+"!olb{"; j++; atom.add("olb"); i2++; }else if (temp1=='}'){ key = atom.get(j); atom.remove(j); j--; if (symboltype.containsKey(key) && symboltype.get(key) == 1){ molecule = molecule + "!V" + matchsymbol.get(key) +"}"; i2=i2+1; temp1=molecule2.charAt(i2); temp2=molecule2.charAt(i2+1); if (temp1 == '!' && temp2 == '.'){molecule = molecule +"!."; i2=i2+2;}; } else if (symboltype.containsKey(key) && symboltype.get(key) < 10){ molecule = molecule + "!V" + key +"}"; i2=i2+1; } else if (key.equals("onb")){ molecule = molecule + "!cnb}!odb{"; j++; atom.add("odb"); i2=i2+2; } else if (key.equals("odb")){ molecule = molecule + "!cdb}"; i2=i2+1; } else if (key.equals("bta")){ molecule = molecule + "!eta}"; i2=i2+1; insidetabular=false; } else if (key.equals("bln")){ molecule = molecule + "!eln}"; i2=i2+1; } else if (key.equals("^")){ molecule = molecule + "!csp}"; i2=i2+1; } else if (key.equals("_")){ molecule = molecule + "!csu}"; i2=i2+1; } else if (key.equals("olb")){ molecule = molecule + "!clb}"; i2=i2+1; } else if (key.equals("mbox")){ molecule = molecule + "!cbx}"; i2=i2+1; } else if (key.equals("block")){ molecule = molecule +"!closeblock "; i2=i2+1; } else if (text.attribute.contains(key)){ molecule = molecule + "!Ac"+key+"}"; i2=i2+1; } else if (Header.sizefactor.containsKey(key)){ molecule = molecule + "!Xc"+key+"}"; i2=i2+1; } else if (font.fontname.contains(key)){ molecule = molecule + "!Fc"+key+"}"; i2=i2+1; } else if (color.colorinteger.containsKey(key)){ molecule = molecule + "!Cc"+key+"}"; i2=i2+1; } } } return molecule; }}