diff options
Diffstat (limited to 'systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsedocument.java')
-rw-r--r-- | systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsedocument.java | 633 |
1 files changed, 633 insertions, 0 deletions
diff --git a/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsedocument.java b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsedocument.java new file mode 100644 index 0000000000..fcd9b8cbd7 --- /dev/null +++ b/systems/android/hktex/HKtex2/src/worker4math/hktex2/Parsedocument.java @@ -0,0 +1,633 @@ +// +// 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 android.util.SparseArray; +import android.util.SparseBooleanArray; +import android.graphics.Canvas; +import android.graphics.Typeface; +import android.util.SparseIntArray; + +public class Parsedocument{ + + public static SparseBooleanArray error = new SparseBooleanArray(); + public static SparseArray<String> errormessage = new SparseArray<String>(); + + public void parsedocument(Canvas canvas, Header header, Symbol symbol2, SuperBlock superblock, Block block, ParagraphBlock paragraphblock, Integer tid, Integer startline, Integer endline, Integer containerwidth, Integer containerheight, Boolean twocolumns, Float ypos, ArrayList<Typeface> tf) { + + ArrayList<String> superblocktype = new ArrayList<String>(); + SparseIntArray superblocknumline = new SparseIntArray(); + SparseIntArray superblockstartline = new SparseIntArray(); + SparseIntArray superblockendline = new SparseIntArray(); + SparseArray<ArrayList<String>> superblockline = new SparseArray<ArrayList<String>>(); + + int totalline=-1; + int superblocknumber=-1; + int centerstartline=0; + int alignrightstartline=0; + int centerendline=0; + int alignrightendline=0; + + int ii = 0; + int i=0; + int j=0; + int fontsize=0; + int tid2=tid*1000; + + int viewportwidth=containerwidth-Header.leftsidemargin-Header.rightsidemargin; + int tablelinenumber=-1; + + float indent=Header.indent; + + String line; + + error.put(tid,false); + errormessage.put(tid,""); + + ArrayList<Integer> tablehlinecounter = new ArrayList<Integer>(); + + Boolean dohyphenation=true; + String columnspec =""; + + ArrayList<String> tblockline = new ArrayList<String>(); + + String sfontsize=Integer.toString(Header.fontsize); + String attribute1=""; + String attribute0=""; + String attribute2=""; + + if (sfontsize.length()==1){ + attribute0 = "000"+sfontsize+"0000xff00000000+0.000xFF0000xFF000000"; + attribute1 = "000"+sfontsize+"0010xff00000000+0.000xFF0000xFF000000"; + attribute2 = "100"+sfontsize+"0000xff00000000+0.000xFF0000xFF000000"; + } else if (sfontsize.length()==2){ + attribute0 = "00"+sfontsize+"0000xff00000000+0.000xFF0000xFF000000"; + attribute1 = "00"+sfontsize+"0010xff00000000+0.000xFF0000xFF000000"; + attribute2 = "10"+sfontsize+"0000xff00000000+0.000xFF0000xFF000000"; + } else if (sfontsize.length()==3){ + attribute0 = "0"+sfontsize+"0000xff00000000+0.000xFF0000xFF000000"; + attribute1 = "0"+sfontsize+"0010xff00000000+0.000xFF0000xFF000000"; + attribute2 = "1"+sfontsize+"0000xff00000000+0.000xFF0000xFF000000"; + } + + for (int iii=startline;iii<=endline;iii++){ + + line=Source.lineblock.get(iii); + line.trim(); + if (line.substring(0,17).equals("!begin{lineblock}")){line=line.substring(17); line.trim();}; + j=line.indexOf("!end{lineblock}"); + if(j==-1){error.put(tid,true);errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+"The !end{lineblock} command missing, parse failed!!");return;} + + for (ii=0;j != 0; ii++){ + if (line.length()>=16 && line.substring(0,16).equals("!begin{eqnarray}") && (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))) { + + i=line.indexOf("}",16); + columnspec=line.substring(17,i); + line=line.substring(i+1); line=line.trim(); + superblocknumber++;superblocktype.add("eqnarray");superblocknumline.put(superblocknumber,0); + superblockstartline.put(superblocknumber, totalline); + + } else if (line.length()>=14 && line.substring(0,14).equals("!end{eqnarray}")&& !superblocktype.get(superblocknumber).equals("verbatim")){ + + superblockendline.put(superblocknumber,totalline); + if (superblockendline.get(superblocknumber)>superblockstartline.get(superblocknumber)){ + superblockstartline.put(superblocknumber,superblockstartline.get(superblocknumber)+1); + + Parseeqnarray eqnarray = new Parseeqnarray(); + eqnarray.parseeqnarray(canvas, block, tid, containerwidth, containerheight, superblocknumber, superblock, superblockline, superblocknumline, superblockstartline, superblockendline,tf, columnspec, ypos, attribute1); + synchronized(this){error.put(tid, Parseeqnarray.error.get(tid)); if (error.get(tid)){errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+Parseeqnarray.errormessage.get(tid)); return;};} + ypos=Parseeqnarray.thisypos.get(tid); + } + + line=line.substring(14); line=line.trim();superblocktype.set(superblocknumber,"text"); + j=line.indexOf("!end{lineblock}"); + tblockline.clear(); + + } else if (line.length()>=13 && line.substring(0,13).equals("!begin{table}")&& (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))) { + synchronized(this){superblock.addtable(tid);} + i=line.indexOf("}",13); + columnspec=line.substring(14,i); + line=line.substring(i+1); line=line.trim(); + + superblocknumber++;superblocktype.add("table");superblocknumline.put(superblocknumber,0); + superblockstartline.put(superblocknumber, totalline); + + tablehlinecounter.add(-1);tablelinenumber++; + + boolean noline=false; + for (int k=0;noline==false && k < 1000;k++){ + if (line.substring(0,6).equals("!hline")){tablehlinecounter.set(tablelinenumber, tablehlinecounter.get(tablelinenumber)+1); line=line.substring(6); line=line.trim();} + else {noline=true;}; + } + + } else if (line.length()>=11 && line.substring(0,11).equals("!end{table}")&& !superblocktype.get(superblocknumber).equals("verbatim")){ + + superblockendline.put(superblocknumber,totalline); + if (superblockendline.get(superblocknumber)>superblockstartline.get(superblocknumber)){ + superblockstartline.put(superblocknumber,superblockstartline.get(superblocknumber)+1); + + Parsetable table = new Parsetable(); + + table.parsetable(canvas, block, paragraphblock, tid, containerwidth, containerheight, tablelinenumber, tablehlinecounter, superblocknumber, superblock, superblockline, superblocknumline, superblockstartline, superblockendline,tf, columnspec, ypos, attribute2, attribute0); + error.put(tid, Parsetable.error.get(tid)); if (error.get(tid)){errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+Parsetable.errormessage.get(tid)); return;}; + ypos=Parsetable.thisypos.get(tid); + tablelinenumber=-1; + tablehlinecounter.clear(); + } + synchronized(this){totalline=SuperBlock.superblocklinenumber.get(tid);} + line=line.substring(11); line=line.trim();;superblocktype.set(superblocknumber,"text"); + j=line.indexOf("!end{lineblock}"); + tblockline.clear();tablehlinecounter.clear();tablelinenumber=-1; + + } else if (line.length()>=21 && line.substring(0,21).equals("!begin{graphicstable}")&& (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))) { + synchronized(this){superblock.addtable(tid);} + i=line.indexOf("}",21); + columnspec=line.substring(22,i); + line=line.substring(i+1); line=line.trim(); + + superblocknumber++;superblocktype.add("graphicstable");superblocknumline.put(superblocknumber,0); + superblockstartline.put(superblocknumber, totalline); + + tablehlinecounter.add(-1);tablelinenumber++; + + boolean noline=false; + for (int k=0;noline==false && k < 1000;k++){ + if (line.substring(0,6).equals("!hline")){tablehlinecounter.set(tablelinenumber, tablehlinecounter.get(tablelinenumber)+1); line=line.substring(6); line=line.trim();} + else {noline=true;}; + } + + } else if (line.length()>=19 && line.substring(0,19).equals("!end{graphicstable}")&& !superblocktype.get(superblocknumber).equals("verbatim")){ + + superblockendline.put(superblocknumber,totalline); + if (superblockendline.get(superblocknumber)>superblockstartline.get(superblocknumber)){ + superblockstartline.put(superblocknumber,superblockstartline.get(superblocknumber)+1); + + Parsegraphicstable graphicstable = new Parsegraphicstable(); + + graphicstable.parsegraphicstable(canvas, block, paragraphblock, tid, containerwidth, containerheight, tablelinenumber, tablehlinecounter, superblocknumber, superblock, superblockline, superblocknumline, superblockstartline, superblockendline,tf, columnspec, ypos, attribute2, attribute0); + error.put(tid, Parsegraphicstable.error.get(tid)); if (error.get(tid)){errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+Parsegraphicstable.errormessage.get(tid)); return;}; + ypos=Parsegraphicstable.thisypos.get(tid); + tablelinenumber=-1; + tablehlinecounter.clear(); + } + synchronized(this){totalline=SuperBlock.superblocklinenumber.get(tid);} + line=line.substring(19); line=line.trim();;superblocktype.set(superblocknumber,"text"); + j=line.indexOf("!end{lineblock}"); + tblockline.clear();tablehlinecounter.clear();tablelinenumber=-1; + + } else if (line.length()>=16 && line.substring(0,16).equals("!begin{equation}")&& (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))) { + + line=line.substring(16); line=line.trim(); + superblocknumber++;superblocktype.add("equation");superblocknumline.put(superblocknumber,0); + superblockstartline.put(superblocknumber, totalline); + + } else if (line.length()>=14 && line.substring(0,14).equals("!end{equation}")&& !superblocktype.get(superblocknumber).equals("verbatim")){ + + superblockendline.put(superblocknumber,totalline); + if (superblockendline.get(superblocknumber)>superblockstartline.get(superblocknumber)){ + superblockstartline.put(superblocknumber,superblockstartline.get(superblocknumber)+1); + Parseequation equation = new Parseequation(); + equation.parseequation(canvas, block, tid, containerwidth, containerheight, superblocknumber, superblock, superblockline, superblocknumline, superblockstartline, superblockendline,tf, columnspec, ypos, attribute1); + error.put(tid, Parseequation.error.get(tid)); if (error.get(tid)){errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+Parseequation.errormessage.get(tid)); return;}; + ypos=Parseequation.thisypos.get(tid); + } + + line=line.substring(14); line=line.trim();superblocktype.set(superblocknumber,"text"); + j=line.indexOf("!end{lineblock}"); + tblockline.clear(); + } else if (line.length()>=15 && line.substring(0,15).equals("!begin{caption}")&& (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))) { + if (superblockline.indexOfKey(superblocknumber)>=0){ + tblockline=superblockline.get(superblocknumber); + tblockline.add(line.substring(0,15));} + else { + tblockline.add(line.substring(0,15)); + } + totalline++; + superblockline.put(superblocknumber,tblockline);superblocknumline.put(superblocknumber,superblocknumline.get(superblocknumber)+1); + line=line.substring(15); line=line.trim(); + + + }else if (line.length()>=13 && line.substring(0,13).equals("!end{caption}")&& !superblocktype.get(superblocknumber).equals("verbatim")) { + if (superblockline.indexOfKey(superblocknumber)>=0){ + tblockline=superblockline.get(superblocknumber); + tblockline.add(line.substring(0,13));} + else { + tblockline.add(line.substring(0,13)); + } + totalline++; + superblockline.put(superblocknumber,tblockline);superblocknumline.put(superblocknumber,superblocknumline.get(superblocknumber)+1); + line=line.substring(13); line=line.trim(); + + }else if (line.length()>=10 && line.substring(0,10).equals("!pagebreak")&& (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))){ + + synchronized(this){SuperBlock.pagebreak.get(tid).add(SuperBlock.superblocklinenumber.get(tid)+1);} + line=line.substring(10); line=line.trim(); + + }else if (line.length()>=16 && line.substring(0,16).equals("!begin{verbatim}")) { + indent=0; + line=line.substring(16); + superblocknumber++;superblocktype.add("verbatim");superblocknumline.put(superblocknumber,0); + superblockstartline.put(superblocknumber, totalline); + + } else if (line.length()>=14 && line.substring(0,14).equals("!end{verbatim}")){ + superblockendline.put(superblocknumber,totalline); + if (superblockendline.get(superblocknumber)>superblockstartline.get(superblocknumber)){ + superblockstartline.put(superblocknumber,superblockstartline.get(superblocknumber)+1); + Parseverbatim verbatim = new Parseverbatim(); + verbatim.parseverbatim(canvas, block, tid, containerwidth, containerheight, superblocknumber, superblock, superblockline,(float)Header.leftsidemargin , ypos,tf, attribute2); + error.put(tid, Parseverbatim.error.get(tid)); if (error.get(tid)){errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+Parseverbatim.errormessage.get(tid)); return;}; + ypos=Parseverbatim.thisypos.get(tid); + } + line=line.substring(14); line=line.trim();;superblocktype.set(superblocknumber,"text"); + j=line.indexOf("!end{lineblock}"); + tblockline.clear(); + } else if (line.length()>=13 && line.substring(0,13).equals("!begin{title}")&& (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))) { + synchronized(this){superblock.addtitle(tid);} + indent=0; + line=line.substring(13); + superblocknumber++;superblocktype.add("title");superblocknumline.put(superblocknumber,0); + superblockstartline.put(superblocknumber, totalline); + + } else if (line.length()>=11 && line.substring(0,11).equals("!end{title}")&& (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))){ + superblockendline.put(superblocknumber,totalline); + if (superblockendline.get(superblocknumber)>superblockstartline.get(superblocknumber)){ + superblockstartline.put(superblocknumber,superblockstartline.get(superblocknumber)+1); + } + Parsetitle title = new Parsetitle(); + if (twocolumns){Integer containerwidth2=containerwidth*2-Header.rightsidemargin; + title.parsetitle(canvas, block, paragraphblock, tid, containerwidth2, containerheight, superblocknumber, superblock, superblockline, superblocknumline,superblockstartline,superblockendline, ypos, tf, attribute1); + } else { + title.parsetitle(canvas, block, paragraphblock, tid, containerwidth, containerheight, superblocknumber, superblock, superblockline, superblocknumline,superblockstartline,superblockendline, ypos, tf, attribute1); + } + error.put(tid, Parsetitle.error.get(tid)); if (error.get(tid)){errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+Parsetitle.errormessage.get(tid)); return;}; + synchronized(this){totalline=SuperBlock.superblocklinenumber.get(tid);} + superblockendline.put(superblocknumber, totalline); + superblocktype.set(superblocknumber,"text"); + ypos=Parsetitle.thisypos.get(tid); + line=line.substring(11); line=line.trim(); + j=line.indexOf("!end{lineblock}"); + tblockline.clear(); + } else if (line.length()>=16 && line.substring(0,16).equals("!begin{graphics}")&& (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))) { + synchronized(this){superblock.addtable(tid);} + indent=0; + line=line.substring(16); + superblocknumber++;superblocktype.add("graphics");superblocknumline.put(superblocknumber,0); + superblockstartline.put(superblocknumber, totalline); + + } else if (line.length()>=14 && line.substring(0,14).equals("!end{graphics}")&& (superblocknumber==-1 || !superblocktype.get(superblocknumber).equals("verbatim"))){ + superblockendline.put(superblocknumber,totalline); + if (superblockendline.get(superblocknumber)>superblockstartline.get(superblocknumber)){ + superblockstartline.put(superblocknumber,superblockstartline.get(superblocknumber)+1); + } + Parsegraphics graphics = new Parsegraphics(); + graphics.parsegraphics(canvas, block, paragraphblock, tid, containerwidth, containerheight, tablelinenumber, tablehlinecounter, superblocknumber, superblock, superblockline, superblocknumline, superblockstartline, superblockendline,tf, ypos, attribute2, attribute0); + error.put(tid, Parsegraphics.error.get(tid)); if (error.get(tid)){errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+Parsegraphics.errormessage.get(tid)); return;}; + superblockendline.put(superblocknumber, totalline); + superblocktype.set(superblocknumber,"text"); + ypos=Parsegraphics.thisypos.get(tid); + synchronized(this){totalline=SuperBlock.superblocklinenumber.get(tid);} + line=line.substring(14); line=line.trim(); + j=line.indexOf("!end{lineblock}"); + tblockline.clear(); + } else if (superblocknumber>=0 && superblocktype.get(superblocknumber).equals("eqnarray")){ + i=line.indexOf("!!");totalline++; + if (superblockline.indexOfKey(superblocknumber)>=0){ + tblockline=superblockline.get(superblocknumber); + tblockline.add(" "+line.substring(0,i+2));} + else { + tblockline.add(" "+line.substring(0,i+2)); + } + superblockline.put(superblocknumber,tblockline);superblocknumline.put(superblocknumber,superblocknumline.get(superblocknumber)+1); + line=line.substring(i+2); line=line.trim(); + + }else if (superblocknumber>=0 && superblocktype.get(superblocknumber).equals("table")){ + i=line.indexOf("!!");totalline++; + + if (superblockline.indexOfKey(superblocknumber)>=0){ + tblockline=superblockline.get(superblocknumber); + tblockline.add(" "+line.substring(0,i+2));} + else { + tblockline.add(" "+line.substring(0,i+2)); + } + superblockline.put(superblocknumber, tblockline);superblocknumline.put(superblocknumber,superblocknumline.get(superblocknumber)+1); + line=line.substring(i+2); line=line.trim(); + tablelinenumber++; + tablehlinecounter.add(-1); + boolean noline=false; + for (int k=0;noline==false && k < 1000;k++){ + if (line.substring(0,6).equals("!hline")){tablehlinecounter.set(tablelinenumber, tablehlinecounter.get(tablelinenumber)+1); line=line.substring(6); line=line.trim();} + else {noline=true;}; + } + }else if (superblocknumber>=0 && superblocktype.get(superblocknumber).equals("graphicstable")){ + i=line.indexOf("!!");totalline++; + + if (superblockline.indexOfKey(superblocknumber)>=0){ + tblockline=superblockline.get(superblocknumber); + tblockline.add(" "+line.substring(0,i+2));} + else { + tblockline.add(" "+line.substring(0,i+2)); + } + superblockline.put(superblocknumber, tblockline);superblocknumline.put(superblocknumber,superblocknumline.get(superblocknumber)+1); + line=line.substring(i+2); line=line.trim(); + tablelinenumber++; + tablehlinecounter.add(-1); + boolean noline=false; + for (int k=0;noline==false && k < 1000;k++){ + if (line.substring(0,6).equals("!hline")){tablehlinecounter.set(tablelinenumber, tablehlinecounter.get(tablelinenumber)+1); line=line.substring(6); line=line.trim();} + else {noline=true;}; + } + }else if (superblocknumber>=0 && superblocktype.get(superblocknumber).equals("equation")){ + i=line.indexOf("!!");totalline++; + if (superblockline.indexOfKey(superblocknumber)>=0){ + tblockline=superblockline.get(superblocknumber); + tblockline.add(" "+line.substring(0,i+2));} + else { + tblockline.add(" "+line.substring(0,i+2)); + } + superblockline.put(superblocknumber,tblockline);superblocknumline.put(superblocknumber,superblocknumline.get(superblocknumber)+1); + line=line.substring(i+2); line=line.trim(); + + }else if (superblocknumber>=0 && superblocktype.get(superblocknumber).equals("graphics")){ + i=line.indexOf("!!");totalline++; + if (superblockline.indexOfKey(superblocknumber)>=0){ + tblockline=superblockline.get(superblocknumber); + tblockline.add(line.substring(0,i+2));} + else { + tblockline.add(line.substring(0,i+2)); + } + superblockline.put(superblocknumber,tblockline);superblocknumline.put(superblocknumber,superblocknumline.get(superblocknumber)+1); + line=line.substring(i+2); + } else if (superblocknumber>=0 && superblocktype.get(superblocknumber).equals("title")){ + i=line.indexOf("!!");totalline++; + if (superblockline.indexOfKey(superblocknumber)>=0){ + tblockline=superblockline.get(superblocknumber); + tblockline.add(line.substring(0,i+2));} + else { + tblockline.add(line.substring(0,i+2)); + } + superblockline.put(superblocknumber,tblockline);superblocknumline.put(superblocknumber,superblocknumline.get(superblocknumber)+1); + line=line.substring(i+2); + } else if (superblocknumber>=0 && superblocktype.get(superblocknumber).equals("verbatim")){ + i=line.indexOf("!!");totalline++; + if (superblockline.indexOfKey(superblocknumber)>=0){ + tblockline=superblockline.get(superblocknumber); + tblockline.add(line.substring(0,i+2));} + else { + tblockline.add(line.substring(0,i+2)); + } + superblockline.put(superblocknumber,tblockline);superblocknumline.put(superblocknumber,superblocknumline.get(superblocknumber)+1); + line=line.substring(i+2); + } else if (line.length()>=3 && line.substring(0,3).equals("!mo")){ + + attribute2=attribute2.substring(0,4)+"003"+attribute2.substring(7); + line=line.substring(3); line=line.trim(); + j=line.indexOf("!end{lineblock}"); + } else if (line.length()>=3 && line.substring(0,3).equals("!bf")){ + + attribute2=attribute2.substring(0,4)+"002"+attribute2.substring(7); + line=line.substring(3); line=line.trim(); + j=line.indexOf("!end{lineblock}"); + } else if (line.length()>=3 && line.substring(0,3).equals("!it")){ + + attribute2=attribute2.substring(0,4)+"001"+attribute2.substring(7); + line=line.substring(3); line=line.trim(); + j=line.indexOf("!end{lineblock}"); + } else if (line.length()>=3 && line.substring(0,3).equals("!ss")){ + + attribute2=attribute2.substring(0,4)+"000"+attribute2.substring(7); + line=line.substring(3); line=line.trim(); + j=line.indexOf("!end{lineblock}"); + } else if (line.length()>=5 && line.substring(0,5).equals("!Huge")){ + fontsize=(int)(Header.fontsize*Header.sizefactor.get("Huge"));if (fontsize>Header.maxfontsize){fontsize=Header.maxfontsize;}; + sfontsize=Integer.toString(fontsize); + if (sfontsize.length()==1){ + attribute0 = "000"+sfontsize+attribute0.substring(4); + attribute1 = "000"+sfontsize+attribute1.substring(4); + attribute2 = "100"+sfontsize+attribute2.substring(4); + } else if (sfontsize.length()==2){ + attribute0 = "00"+sfontsize+attribute0.substring(4); + attribute1 = "00"+sfontsize+attribute1.substring(4); + attribute2 = "10"+sfontsize+attribute2.substring(4); + } else if (sfontsize.length()==3){ + attribute0 = "0"+sfontsize+attribute0.substring(4); + attribute1 = "0"+sfontsize+attribute1.substring(4); + attribute2 = "1"+sfontsize+attribute2.substring(4); + } + line=line.substring(5); line=line.trim();j=line.indexOf("!end{lineblock}"); + } else if (line.length()>=5 && line.substring(0,5).equals("!huge")){ + + fontsize=(int)(Header.fontsize*Header.sizefactor.get("huge"));if (fontsize>Header.maxfontsize){fontsize=Header.maxfontsize;}; + sfontsize=Integer.toString(fontsize); + if (sfontsize.length()==1){ + attribute0 = "000"+sfontsize+attribute0.substring(4); + attribute1 = "000"+sfontsize+attribute1.substring(4); + attribute2 = "100"+sfontsize+attribute2.substring(4); + } else if (sfontsize.length()==2){ + attribute0 = "00"+sfontsize+attribute0.substring(4); + attribute1 = "00"+sfontsize+attribute1.substring(4); + attribute2 = "10"+sfontsize+attribute2.substring(4); + } else if (sfontsize.length()==3){ + attribute0 = "0"+sfontsize+attribute0.substring(4); + attribute1 = "0"+sfontsize+attribute1.substring(4); + attribute2 = "1"+sfontsize+attribute2.substring(4); + } + line=line.substring(5); line=line.trim();j=line.indexOf("!end{lineblock}"); + } else if (line.length()>=6 && line.substring(0,6).equals("!Large")){ + + fontsize=(int)(Header.fontsize*Header.sizefactor.get("Large"));if (fontsize>Header.maxfontsize){fontsize=Header.maxfontsize;}; + sfontsize=Integer.toString(fontsize); + if (sfontsize.length()==1){ + attribute0 = "000"+sfontsize+attribute0.substring(4); + attribute1 = "000"+sfontsize+attribute1.substring(4); + attribute2 = "100"+sfontsize+attribute2.substring(4); + } else if (sfontsize.length()==2){ + attribute0 = "00"+sfontsize+attribute0.substring(4); + attribute1 = "00"+sfontsize+attribute1.substring(4); + attribute2 = "10"+sfontsize+attribute2.substring(4); + } else if (sfontsize.length()==3){ + attribute0 = "0"+sfontsize+attribute0.substring(4); + attribute1 = "0"+sfontsize+attribute1.substring(4); + attribute2 = "1"+sfontsize+attribute2.substring(4); + } + line=line.substring(6); line=line.trim();j=line.indexOf("!end{lineblock}"); + } else if (line.length()>=6 && line.substring(0,6).equals("!large")){ + + fontsize=(int)(Header.fontsize*Header.sizefactor.get("large"));if (fontsize>Header.maxfontsize){fontsize=Header.maxfontsize;}; + sfontsize=Integer.toString(fontsize); + if (sfontsize.length()==1){ + attribute0 = "000"+sfontsize+attribute0.substring(4); + attribute1 = "000"+sfontsize+attribute1.substring(4); + attribute2 = "100"+sfontsize+attribute2.substring(4); + } else if (sfontsize.length()==2){ + attribute0 = "00"+sfontsize+attribute0.substring(4); + attribute1 = "00"+sfontsize+attribute1.substring(4); + attribute2 = "10"+sfontsize+attribute2.substring(4); + } else if (sfontsize.length()==3){ + attribute0 = "0"+sfontsize+attribute0.substring(4); + attribute1 = "0"+sfontsize+attribute1.substring(4); + attribute2 = "1"+sfontsize+attribute2.substring(4); + } + line=line.substring(6); line=line.trim();j=line.indexOf("!end{lineblock}"); + } else if (line.length()>=6 && line.substring(0,6).equals("!small")){ + + fontsize=(int)(Header.fontsize*Header.sizefactor.get("small"));if (fontsize<Header.minfontsize){fontsize=Header.minfontsize;}; + sfontsize=Integer.toString(fontsize); + if (sfontsize.length()==1){ + attribute0 = "000"+sfontsize+attribute0.substring(4); + attribute1 = "000"+sfontsize+attribute1.substring(4); + attribute2 = "100"+sfontsize+attribute2.substring(4); + } else if (sfontsize.length()==2){ + attribute0 = "00"+sfontsize+attribute0.substring(4); + attribute1 = "00"+sfontsize+attribute1.substring(4); + attribute2 = "10"+sfontsize+attribute2.substring(4); + } else if (sfontsize.length()==3){ + attribute0 = "0"+sfontsize+attribute0.substring(4); + attribute1 = "0"+sfontsize+attribute1.substring(4); + attribute2 = "1"+sfontsize+attribute2.substring(4); + } + line=line.substring(6); line=line.trim();j=line.indexOf("!end{lineblock}"); + } else if (line.length()>=11 && line.substring(0,11).equals("!scriptsize")){ + + fontsize=(int)(Header.fontsize*Header.sizefactor.get("scriptsize"));if (fontsize<Header.minfontsize){fontsize=Header.minfontsize;}; + sfontsize=Integer.toString(fontsize); + if (sfontsize.length()==1){ + attribute0 = "000"+sfontsize+attribute0.substring(4); + attribute1 = "000"+sfontsize+attribute1.substring(4); + attribute2 = "100"+sfontsize+attribute2.substring(4); + } else if (sfontsize.length()==2){ + attribute0 = "00"+sfontsize+attribute0.substring(4); + attribute1 = "00"+sfontsize+attribute1.substring(4); + attribute2 = "10"+sfontsize+attribute2.substring(4); + } else if (sfontsize.length()==3){ + attribute0 = "0"+sfontsize+attribute0.substring(4); + attribute1 = "0"+sfontsize+attribute1.substring(4); + attribute2 = "1"+sfontsize+attribute2.substring(4); + } + line=line.substring(11); line=line.trim();j=line.indexOf("!end{lineblock}"); + } else if (line.length()>=5 && line.substring(0,5).equals("!tiny")){ + + fontsize=(int)(Header.fontsize*Header.sizefactor.get("tiny")); if (fontsize<Header.minfontsize){fontsize=Header.minfontsize;}; + sfontsize=Integer.toString(fontsize); + if (sfontsize.length()==1){ + attribute0 = "000"+sfontsize+attribute0.substring(4); + attribute1 = "000"+sfontsize+attribute1.substring(4); + attribute2 = "100"+sfontsize+attribute2.substring(4); + } else if (sfontsize.length()==2){ + attribute0 = "00"+sfontsize+attribute0.substring(4); + attribute1 = "00"+sfontsize+attribute1.substring(4); + attribute2 = "10"+sfontsize+attribute2.substring(4); + } else if (sfontsize.length()==3){ + attribute0 = "0"+sfontsize+attribute0.substring(4); + attribute1 = "0"+sfontsize+attribute1.substring(4); + attribute2 = "1"+sfontsize+attribute2.substring(4); + } + line=line.substring(5); line=line.trim();j=line.indexOf("!end{lineblock}"); + } else if (line.length()>=11 && line.substring(0,11).equals("!normalsize")){ + + sfontsize=Integer.toString(Header.fontsize); + if (sfontsize.length()==1){ + attribute0 = "000"+sfontsize+attribute0.substring(4); + attribute1 = "000"+sfontsize+attribute1.substring(4); + attribute2 = "100"+sfontsize+attribute2.substring(4); + } else if (sfontsize.length()==2){ + attribute0 = "00"+sfontsize+attribute0.substring(4); + attribute1 = "00"+sfontsize+attribute1.substring(4); + attribute2 = "10"+sfontsize+attribute2.substring(4); + } else if (sfontsize.length()==3){ + attribute0 = "0"+sfontsize+attribute0.substring(4); + attribute1 = "0"+sfontsize+attribute1.substring(4); + attribute2 = "1"+sfontsize+attribute2.substring(4); + } + line=line.substring(11); line=line.trim();j=line.indexOf("!end{lineblock}"); + } else if (line.length()>=7 && line.substring(0,7).equals("!vspace")){ + + int ij=line.indexOf("}",7); + float vspace=Integer.parseInt(line.substring(8,ij)); + ypos=ypos+vspace; + line=line.substring(ij+1); line=line.trim(); + + } else if (line.length()>=14 && line.substring(0,14).equals("!begin{center}")){ + synchronized(this){centerstartline=SuperBlock.superblocklinenumber.get(tid);} + dohyphenation=false; + line=line.substring(14); line=line.trim();j=line.indexOf("!end{lineblock}"); + indent=0; + } else if (line.length()>=12 && line.substring(0,12).equals("!end{center}")){ + synchronized(this){ + viewportwidth=containerwidth-Header.leftsidemargin-Header.rightsidemargin; + centerendline=SuperBlock.superblocklinenumber.get(tid); + + if (centerendline > centerstartline){centerstartline=centerstartline+1;}; + for (i=centerstartline;i<=centerendline;i++){ + float adjustx=(viewportwidth-SuperBlock.superblocklinewidth.get(tid).get(i))/2; + for (ii=0;ii<=SuperBlock.blockxpos.get(i+tid2).size()-1;ii++){ + SuperBlock.blockxpos.get(i+tid2).set(ii,SuperBlock.blockxpos.get(i+tid2).get(ii)+adjustx); + } + } + dohyphenation=true; + line=line.substring(12); line=line.trim();j=line.indexOf("!end{lineblock}"); + indent=Header.indent; + } + } else if (line.length()>=17 && line.substring(0,17).equals("!begin{alignleft}")){ + indent=0; + dohyphenation=false; + line=line.substring(17); line=line.trim(); + + } else if (line.length()>=15 && line.substring(0,15).equals("!end{alignleft}")){ + dohyphenation=true; + line=line.substring(15); line=line.trim();j=line.indexOf("!end{lineblock}"); + + } else if (line.length()>=18 && line.substring(0,18).equals("!begin{alignright}")){ + indent=0; + synchronized(this){alignrightstartline=SuperBlock.superblocklinenumber.get(tid);} + dohyphenation=false; + line=line.substring(18); line=line.trim(); + indent=0; + } else if (line.length()>=16 && line.substring(0,16).equals("!end{alignright}")){ + synchronized(this){ + viewportwidth=containerwidth-Header.leftsidemargin-Header.rightsidemargin; + alignrightendline=SuperBlock.superblocklinenumber.get(tid); + + if (alignrightendline > alignrightstartline){alignrightstartline=alignrightstartline+1;}; + for (i=alignrightstartline;i<=alignrightendline;i++){ + float adjustx=(viewportwidth-SuperBlock.superblocklinewidth.get(tid).get(i)); + for (ii=0;ii<=SuperBlock.blockxpos.get(i+tid2).size()-1;ii++){ + SuperBlock.blockxpos.get(i+tid2).set(ii,SuperBlock.blockxpos.get(i+tid2).get(ii)+adjustx); + } + } + dohyphenation=true; + line=line.substring(16); line=line.trim();j=line.indexOf("!end{lineblock}"); + indent=Header.indent; + } + } else { + i=line.indexOf("!!"); + + tblockline.add(line.substring(0,i)); + totalline++; + superblocknumber++;superblockline.put(superblocknumber,tblockline);superblocktype.add("text");superblocknumline.put(superblocknumber,0); + superblockstartline.put(superblocknumber, totalline); + Parsetext text = new Parsetext(); + text.parsetext(canvas, block, paragraphblock, tid, containerwidth, containerheight, superblocknumber, superblock, tblockline.get(0), (float)Header.leftsidemargin , ypos, tf, attribute2, attribute1, dohyphenation, indent); + error.put(tid, Parsetext.error.get(tid)); if (error.get(tid)){errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+Parsetext.errormessage.get(tid)); return;}; + synchronized(this){totalline=SuperBlock.superblocklinenumber.get(tid);} + superblockendline.put(superblocknumber, totalline); + ypos=Parsetext.thisypos.get(tid); + + tblockline.clear(); + line=line.substring(i+2); line=line.trim(); + } + j=line.indexOf("!end{lineblock}"); + if (j==0 && !superblocktype.get(superblocknumber).equals("text")){error.put(tid,true);errormessage.put(tid, "Lineblock "+Integer.toString(iii)+" : "+"The !end{"+superblocktype.get(superblocknumber)+"} "+"command missing, parse failed!!");return;} + } + } + + synchronized(this){SuperBlock.ypos.put(tid, ypos);} + return; + + }} |