// // Latex Project Public Licence (lppl1.3) applies // Originally written by Kwanleung Tse // First Release : 1st July, 2014 // Last Update : 27th September, 2014 // // package worker4math.hktex2; import java.util.ArrayList; import android.util.SparseArray; public class Initdraw { public static int ii=0; public static int showpagenumber=0; SuperBlock superblock = new SuperBlock(); Parsedocument parsedocument = new Parsedocument(); public static SparseArray> pageline = new SparseArray>(); public static SparseArray> pageline2 = new SparseArray>(); public static Integer pagenumber = -1; public static Integer totalline=-1; public static float containerwidth2; public static float containerheight2; public static float height=0; public void initdraw(float containerwidth,float containerheight){ containerwidth2=containerwidth; containerheight2=containerheight; float ypos=Header.firstypos+Header.topsidemargin+SuperBlock.superblocklineheight.get(0).get(0)-SuperBlock.superblocklinedepth.get(0).get(0); float viewportheight=containerheight-Header.topsidemargin-Header.bottomsidemargin; for (int i=0;i<=Header.nthread-1;i++){ for (int ii=0;ii<=SuperBlock.superblocklinenumber.get(i);ii++){ int index=i*1000+ii; for (int iii=0;iii<=SuperBlock.blockatom.get(index).size()-1;iii++){ float t=SuperBlock.blockypos.get(index).get(iii)+ypos; SuperBlock.blockypos.get(index).set(iii, t); } } ypos=ypos+SuperBlock.ypos.get(i); } pagenumber++; pageline.put(pagenumber, new ArrayList()); ypos=0.0f; float adjusty=0.0f; for (int i=0;i<=Header.nthread-1;i++){ int i2=i*1000; int tablenumber=1; for (int ii=0;ii<=SuperBlock.superblocklinenumber.get(i);ii++){ int index=i2+ii; if (tablenumber <=SuperBlock.tablenumber.get(i) && ii==SuperBlock.tablestartline.get(tablenumber+i2)){ float height2=SuperBlock.blockypos.get(index).get(0)-(SuperBlock.superblocklineheight.get(i).get(ii)-SuperBlock.superblocklinedepth.get(i).get(ii))+SuperBlock.tableheight.get(i2+tablenumber)-ypos; if (height2>viewportheight && !SuperBlock.pagebreak.get(i).contains(ii)){ // If there is table which does not fit into current page, move the line behind the table ahead. int j=i; int j2=j*1000; int jj=SuperBlock.tableendline.get(tablenumber+j2)+1; if(jj>SuperBlock.superblocklinenumber.get(j) &&(tablenumber+1<=SuperBlock.tablenumber.get(j) && jj !=SuperBlock.tablestartline.get(tablenumber+j2+1)) && jSuperBlock.tablenumber.get(j) || jj !=SuperBlock.tablestartline.get(tablenumber+j2+1))){ index=j2+jj; if (SuperBlock.blockatom.indexOfKey(index)<0){j++;j2=j*1000;jj=0;index=j2+jj;} while (SuperBlock.blockypos.get(index).size()==0){jj++;index=j2+jj;totalline2++;}; float height=SuperBlock.blockypos.get(index).get(0)+SuperBlock.superblocklinedepth.get(j).get(jj)-SuperBlock.tableheight.get(i2+tablenumber)-ypos; while(heightSuperBlock.tablenumber.get(j) || jj !=SuperBlock.tablestartline.get(tablenumber+j2+1)) && !(jj== SuperBlock.superblocklinenumber.get(j) && j==Header.nthread-1) && !SuperBlock.pagebreak.get(j).contains(jj)){ pageline.get(pagenumber).add(totalline2); if (SuperBlock.blockypos.get(index).size()>0){ adjusty=SuperBlock.superblocklineheight.get(j).get(jj)+adjusty; for (int jjj=0;jjj<=SuperBlock.blockatom.get(index).size()-1;jjj++){ float t=SuperBlock.blockypos.get(index).get(jjj)-ypos-SuperBlock.tableheight.get(i2+tablenumber); SuperBlock.blockypos.get(index).set(jjj, t); }} jj++;if(jj>SuperBlock.superblocklinenumber.get(j) && j0){ adjusty=SuperBlock.superblocklineheight.get(j).get(jj)+adjusty; for (int jjj=0;jjj<=SuperBlock.blockatom.get(index).size()-1;jjj++){ float t=SuperBlock.blockypos.get(index).get(jjj)-ypos-SuperBlock.tableheight.get(i2+tablenumber); SuperBlock.blockypos.get(index).set(jjj, t); }} } } // Now adjust the table pagenumber++; pageline.put(pagenumber,new ArrayList()); index=i2+ii; float t=Header.topsidemargin+SuperBlock.superblocklineheight.get(i).get(ii)-SuperBlock.superblocklinedepth.get(i).get(ii); ypos=SuperBlock.blockypos.get(index).get(0)-t; if (((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)) && pagenumber==1){ypos=ypos-SuperBlock.titleheight.get(0);} for (ii=SuperBlock.tablestartline.get(i2+tablenumber);ii<=SuperBlock.tableendline.get(i2+tablenumber);ii++){ index=i2+ii; totalline++;pageline.get(pagenumber).add(totalline); for (int iii=0;iii<=SuperBlock.blockatom.get(index).size()-1;iii++){ t=SuperBlock.blockypos.get(index).get(iii)-ypos; SuperBlock.blockypos.get(index).set(iii, t); } } totalline=totalline2-1; i=j; i2=i*1000; tablenumber++; if (jj== SuperBlock.superblocklinenumber.get(j) && j==Header.nthread-1) {ii=jj;} else{ii=jj-1;} index=i2+ii; if (SuperBlock.pagebreak.get(i).contains(ii)){ pagenumber++; if (SuperBlock.pagebreak.get(i).contains(ii) && ((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)) && pagenumber%2==1){pagenumber++;}; pageline.put(pagenumber, new ArrayList()); t=Header.topsidemargin+SuperBlock.superblocklineheight.get(i).get(ii)-SuperBlock.superblocklinedepth.get(i).get(ii); ypos=SuperBlock.blockypos.get(index).get(0)-t; } else { ypos=ypos+adjusty; adjusty=0.0f; } } else if (!SuperBlock.pagebreak.get(i).contains(ii)){ // table can fit into current page. totalline++; if (SuperBlock.blockypos.get(index).size()>0){ float height=SuperBlock.blockypos.get(index).get(0)+SuperBlock.superblocklinedepth.get(i).get(ii)-ypos; if (height>viewportheight && SuperBlock.pagebreak.get(i).contains(ii)){ pagenumber++; if (SuperBlock.pagebreak.get(i).contains(ii) && ((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)) && pagenumber%2==1){pagenumber++;}; pageline.put(pagenumber, new ArrayList()); float t=Header.topsidemargin+SuperBlock.superblocklineheight.get(i).get(ii)-SuperBlock.superblocklinedepth.get(i).get(ii); ypos=SuperBlock.blockypos.get(index).get(0)-t; if (((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)) && pagenumber==1){ypos=ypos-SuperBlock.titleheight.get(0);} } pageline.get(pagenumber).add(totalline); for (int iii=0;iii<=SuperBlock.blockatom.get(index).size()-1;iii++){ float t=SuperBlock.blockypos.get(index).get(iii)-ypos; SuperBlock.blockypos.get(index).set(iii, t); }} }else { // pagebreak, new page for table or graphics totalline++; if (SuperBlock.blockypos.get(index).size()>0){ float height=SuperBlock.blockypos.get(index).get(0)+SuperBlock.superblocklinedepth.get(i).get(ii)-ypos; if (height>viewportheight || SuperBlock.pagebreak.get(i).contains(ii)){ pagenumber++; if (SuperBlock.pagebreak.get(i).contains(ii) && ((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)) && pagenumber%2==1){pagenumber++;}; pageline.put(pagenumber, new ArrayList()); float t=Header.topsidemargin+SuperBlock.superblocklineheight.get(i).get(ii)-SuperBlock.superblocklinedepth.get(i).get(ii); ypos=SuperBlock.blockypos.get(index).get(0)-t; if (((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)) && pagenumber==1){ypos=ypos-SuperBlock.titleheight.get(0)-Header.firstypos;} } pageline.get(pagenumber).add(totalline); for (int iii=0;iii<=SuperBlock.blockatom.get(index).size()-1;iii++){ float t=SuperBlock.blockypos.get(index).get(iii)-ypos; SuperBlock.blockypos.get(index).set(iii, t); }} } } else { // Not table nor graphics totalline++; if (SuperBlock.blockypos.get(index).size()>0){ float height=SuperBlock.blockypos.get(index).get(0)+SuperBlock.superblocklinedepth.get(i).get(ii)-ypos; if (height>viewportheight || SuperBlock.pagebreak.get(i).contains(ii)){ pagenumber++; if (SuperBlock.pagebreak.get(i).contains(ii) && ((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)) && pagenumber%2==1){pagenumber++;}; pageline.put(pagenumber, new ArrayList()); float t=Header.topsidemargin+SuperBlock.superblocklineheight.get(i).get(ii)-SuperBlock.superblocklinedepth.get(i).get(ii); ypos=SuperBlock.blockypos.get(index).get(0)-t; if (((Header.tablet && Header.tablet_twocolumns) || (!Header.tablet && Header.phone_twocolumns)) && pagenumber==1){ypos=ypos-SuperBlock.titleheight.get(0)-Header.firstypos;} } pageline.get(pagenumber).add(totalline); for (int iii=0;iii<=SuperBlock.blockatom.get(index).size()-1;iii++){ float t=SuperBlock.blockypos.get(index).get(iii)-ypos; SuperBlock.blockypos.get(index).set(iii, t); }} } } } return; } }