import java.awt.*; import Parser; public class paintType2 extends java.applet.Applet { final int KERN = 0; final int SAFETY = 1; int col, dec, row; //column width, decent and row size (pixels) int x = 0, y = 0; int tspace = 0, ispace = 0, bspace=0, incm = 0;; int remspace = 0, maxwidth=0; boolean nline = false, tline = false; boolean moved = false, uc = false, lc=false; int margin = 0, linedown = 0; Parser p; String buff = new String(""); char[] d = new char[1]; // this is a buffer for the keyboard character Font Helvetica = new Font ("Helvetica", Font.PLAIN, 12); FontMetrics fm = getFontMetrics(Helvetica); Dimension offDimension; Image offImage; Graphics offGraphics; public void init() { System.out.println("M height="+fm.getHeight()); System.out.println("decent="+fm.getDescent()); d[0] = 0; repaint(); moved = false; p = new Parser(); p.start(); System.out.println("finished init"); } public void paint (Graphics g){ update(g); } public void update (Graphics g) { Dimension dime = size(); if ((offGraphics == null) || (dime.width != offDimension.width) || (dime.height != offDimension.height)) { offDimension = dime; offImage = createImage(dime.width, dime.height); offGraphics = offImage.getGraphics(); offGraphics.setColor(Color.white); offGraphics.fillRect(0,0,dime.width,dime.height); col = fm.stringWidth("M") + 2*KERN; dec = fm.getDescent(); row = fm.getHeight() + dec + 2*SAFETY; remspace = dime.width; maxwidth = remspace; } offGraphics.setFont(Helvetica); offGraphics.setColor(Color.black); if(buff != null) { int sp = buff.length()*(col); System.out.println("before remspace: "+remspace); System.out.println("before buff space: "+sp); if (sp > remspace) { y+=row; x=pad(margin); remspace = maxwidth - x; System.out.println("x: "+x); } char[] ch = new char[1]; for (int foo = 0; foo < buff.length(); foo++){ ch[0]=buff.charAt(foo); if (((new String("")+ch).compareTo(" "))!=0){ offGraphics.setColor(Color.white); offGraphics.fillRect (x+foo*(col+KERN),y,col,row); } offGraphics.setColor(Color.black); offGraphics.drawString(new String("")+ch, x+foo*(col+KERN),y+row-SAFETY-dec); } // close for loop x+=(int)col*buff.length(); System.out.println("buff length: "+buff.length()); remspace = remspace - sp-KERN; System.out.println("after remspace: "+remspace); System.out.println("after buff space: "+sp); } // close if null g.drawImage(offImage, 0, 0, this); } private int pad(int mar) { System.out.println("margin gotten: "+mar); int temp = incm; while(temp > 0 && mar < 540) { mar += fm.stringWidth(new String(" ")); temp--; } System.out.println("margin returned: "+mar); return mar; } public boolean mouseMove (Event evt, int xclk, int yclk) { int xnew = (int)(xclk/col)*col; int ynew = (int)(yclk/row)*row; if(xnew != x || ynew != y) moved = true; y = ynew; x = xnew; margin = xnew; remspace = maxwidth - margin; d[0]=0; return false; } public boolean keyDown (Event evt, int key ) { d[0]=process(key); System.out.println("we got back: "+d[0]); buff = p.parse(new String(d)); if(d[0] != '*') buff = massage(buff); System.out.println("we prased back: "+buff); repaint(); return true; } private char process(int key) { char ret; boolean mod = true; switch(key) { case 62: // > incm++; break; case 60: // < incm--; break; case 43: // + uc = true; break; case 45: // - lc = true; break; case 92: // \ break; case 47: // / break; case 91: // [ ispace++; break; case 93: // ] ispace--; break; case 40: // ( bspace++; break; case 41: // ) bspace--; break; case 123: // { tspace++; break; case 125: // } tspace--; break; case 35: // # nline = true; break; case 36: // $ tline = true; break; default: mod = false; break; } // System.out.println("ispace: "+ispace); // System.out.println("bspace: "+bspace); // System.out.println("tspace: "+tspace); // System.out.println("nline: "+nline); // System.out.println("tline: "+tline); System.out.println("incm: "+incm); if(mod) ret = '*'; else ret = (char)key; return ret; } private String massage(String in) { if(uc) in.toUpperCase(); if(lc) in.toLowerCase(); if(tline) { in = " "+in; tline = false; } if(nline) { remspace = 0; nline = false; } if(tspace > 0) { int tabtemp = tspace; while(tabtemp > 0) { in = " " + in; tabtemp = tabtemp - 1; } } if(ispace > 0) { int t = in.length(); char foo[] = new char[(ispace + 1)*t]; char bar[] = new char[t]; bar = in.toCharArray(); int it = 0; while(it < t){ int temp2 = it*(ispace+1); foo[temp2] = bar[it]; int temp3 = 0; while(temp3 < ispace) { foo[temp2+temp3+1] = ' '; temp3 = temp3 +1; } it = it + 1; } in = new String(foo); } if(bspace > 0) { int tempbsp = bspace; while(tempbsp > 0) { in = in + " "; tempbsp = tempbsp -1; } } return in; } }