//MaestroG.java
/* A Java class for
 * SingleStub.java
 * Electromagnetic Transmission Line Applet
 * Applet without Smith Chart - Prepared by Umberto Ravaioli 
 * for 6th edition of Fundamentals of Applied Electromagnetics Book
 * June 2009 - All Rights Reserved
 */   

import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;

public class MaestroG{
    public static boolean useBiggerFont = false;
    public static Font serifFont, sanSerifFont, symbolFont, italicFont;
    MaestroG(){};
    //tipo=1 arrow up
    //
    public static final void drawArrow(int x, int y, int tipo, Graphics g){
        Graphics2D g2d = (Graphics2D)g;
	 switch (tipo){
	   case 1://ArrowUp
	  	g.drawLine(x,y,x,y-8);
		g.drawLine(x-3,y-2,x+3,y-2);
		g.drawLine(x-2,y-3,x+2,y-3);
		g.drawLine(x-2,y-4,x+2,y-4);
		g.drawLine(x-1,y-5,x+1,y-5);
		g.drawLine(x-1,y-6,x+1,y-6);
	   break;
	   case 2://Down
		g.drawLine(x,y,x,y+8);
		g.drawLine(x-1,y+6,x+1,y+6);
		g.drawLine(x-1,y+5,x+1,y+5);
		g.drawLine(x-2,y+4,x+2,y+4);
		g.drawLine(x-2,y+3,x+2,y+3);
		g.drawLine(x-3,y+2,x+3,y+2);
	   break;
	   case 3://ArrowRight
		g.drawLine(x,y,x+8,y);
		g.drawLine(x+6,y-1,x+6,y+1);
		g.drawLine(x+5,y-1,x+5,y+1);
		g.drawLine(x+4,y-2,x+4,y+2);
		g.drawLine(x+3,y-2,x+3,y+2);
		g.drawLine(x+2,y-3,x+2,y+3);
	   break;
	   case 4://ArrowLeft
		g.drawLine(x,y,x-8,y);
		g.drawLine(x-2,y-3,x-2,y+3);
		g.drawLine(x-3,y-2,x-3,y+2);
		g.drawLine(x-4,y-2,x-4,y+2);
		g.drawLine(x-5,y-1,x-5,y+1);
		g.drawLine(x-6,y-1,x-6,y+1); 
	  break;
          
          case 5://ArrowUpSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                g.drawLine(x,y,x,y-8);
		//draw oblique arrow head
		Polygon pH = new Polygon();
		pH.addPoint(x-2, y-2);
		pH.addPoint(x+2, y-2);
		pH.addPoint(x,y-8);
		g.drawPolygon(pH);
		g.fillPolygon(pH);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
        
          break;
          
          case 6://ArrowDownSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                g.drawLine(x,y,x,y+8);
		//draw oblique arrow head
		Polygon pJ = new Polygon();
		pJ.addPoint(x-2, y+2);
		pJ.addPoint(x+2, y+2);
		pJ.addPoint(x,y+8);
		g.drawPolygon(pJ);
		g.fillPolygon(pJ);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
	   break;
           
           case 7://ArrowRightSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                g.drawLine(x,y,x+8,y);
		//draw oblique arrow head
		Polygon pK = new Polygon();
		pK.addPoint(x+2, y-2);
		pK.addPoint(x+2, y+2);
		pK.addPoint(x+8,y);
		g.drawPolygon(pK);
		g.fillPolygon(pK);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
	   
	   break;
           
           case 8://ArrowLeftSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                g.drawLine(x,y,x-8,y);
		//draw oblique arrow head
		Polygon pL = new Polygon();
		pL.addPoint(x-2, y-2);
		pL.addPoint(x-2, y+2);
		pL.addPoint(x-8,y);
		g.drawPolygon(pL);
		g.fillPolygon(pL);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
 
	   break;
           
           case 9://ArrowOblique 45 degrees NE
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
		//draw oblique arrow head
		Polygon pM = new Polygon();
                //draw oblique arrow head
                
                //pM.addPoint(x+6,y-6);
		//pM.addPoint(x-2,y-2);
		//pM.addPoint(x+2,y+2);
                
		pM.addPoint(x+5,y-5);
		pM.addPoint(x-1,y-2);
		pM.addPoint(x+2,y+1);
		
                g.drawPolygon(pM);
		g.fillPolygon(pM);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
                 
           break;
           
           case 10://ArrowOblique 45 degrees SW
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
		//draw oblique arrow head
		Polygon pX = new Polygon();
                //draw oblique arrow head
                
                pX.addPoint(x-5,y+5);
		pX.addPoint(x+1,y+2);
		pX.addPoint(x-2,y-1);
		
                g.drawPolygon(pX);
		g.fillPolygon(pX);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
                 
           break;
	}	
    } 
    
    public static final void drawArrowScaled(int x, int y, int tipo, double sfactor, Graphics g){
	Graphics2D g2d = (Graphics2D)g;
        double s;
        s = sfactor;
        
        switch (tipo){
	   
          case 1://ArrowUpSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                g.drawLine(x,y-1,x,y+(int)(s*5));
		//draw oblique arrow head
		Polygon pH = new Polygon();
		pH.addPoint(x-(int)(s*2), y-(int)(s*2));
		pH.addPoint(x+(int)(s*2), y-(int)(s*2));
		pH.addPoint(x,y-(int)(s*7));
		g.drawPolygon(pH);
		g.fillPolygon(pH);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
        
          break;
          
          case 2://ArrowDownSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                g.drawLine(x,y+1,x,y-(int)(s*5));
		//draw oblique arrow head
		Polygon pJ = new Polygon();
		pJ.addPoint(x-(int)(s*2), y+(int)(s*2));
		pJ.addPoint(x+(int)(s*2), y+(int)(s*2));
		pJ.addPoint(x,y+(int)(s*7));
		g.drawPolygon(pJ);
		g.fillPolygon(pJ);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
	   break;
           
           case 3://ArrowRightSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                g.drawLine(x+1,y,x-(int)(s*5),y);
		//draw oblique arrow head
		Polygon pK = new Polygon();
		pK.addPoint(x+(int)(s*2), y-(int)(s*2));
		pK.addPoint(x+(int)(s*2), y+(int)(s*2));
		pK.addPoint(x+(int)(s*7),y);
		g.drawPolygon(pK);
		g.fillPolygon(pK);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
	   
	   break;
           
           case 4://ArrowLeftSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                g.drawLine(x-1,y,x+(int)(s*5),y);
		//draw oblique arrow head
		Polygon pL = new Polygon();
		pL.addPoint(x-(int)(s*2), y-(int)(s*2));
		pL.addPoint(x-(int)(s*2), y+(int)(s*2));
		pL.addPoint(x-(int)(s*7),y);
		g.drawPolygon(pL);
		g.fillPolygon(pL);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
 
	   break;
           
           case 5://ArrowOblique 45 degrees NE
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
		//draw oblique arrow head
		Polygon pM = new Polygon();
                
                //pM.addPoint(x+(int)(s*5),y-(int)(s*5)); // longer arrow
		pM.addPoint(x+(int)(s*4),y-(int)(s*4));
		pM.addPoint(x-(int)(s*1),y-(int)(s*2));
		pM.addPoint(x+(int)(s*2),y+(int)(s*1));
		
                g.drawPolygon(pM);
		g.fillPolygon(pM);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
                 
           break;
           
           case 7://Larger ArrowRightSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                Polygon pR = new Polygon();
		pR.addPoint(x, y-(int)(s*3));
		pR.addPoint(x, y+(int)(s*3));
		pR.addPoint(x+(int)(s*7),y);
		g.drawPolygon(pR);
		g.fillPolygon(pR);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
	   
	   break;
           
           case 8://Larger ArrowLeftSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                Polygon pS = new Polygon();
		pS.addPoint(x, y-(int)(s*3));
		pS.addPoint(x, y+(int)(s*3));
		pS.addPoint(x-(int)(s*7),y);
		g.drawPolygon(pS);
		g.fillPolygon(pS);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
 
	   break;
           
           case 9://ArrowUpSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                Polygon pU = new Polygon();
		pU.addPoint(x-(int)(s*3), y);
		pU.addPoint(x+(int)(s*3), y);
		pU.addPoint(x,y-(int)(s*7));
		g.drawPolygon(pU);
		g.fillPolygon(pU);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
        
          break;
          
          case 10://ArrowDownSmooth
               g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
                Polygon pD = new Polygon();
                pD.addPoint(x-(int)(s*3), y);
		pD.addPoint(x+(int)(s*3), y);
		pD.addPoint(x,y+(int)(s*7));
		g.drawPolygon(pD);
		g.fillPolygon(pD);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
	   break;
	}		
    }
    
    
    public static final void drawArrowtip(int x, int y, int tipo, Graphics g){
	 switch (tipo){
	   case 1://ArrowUp
	  	g.drawLine(x,y-4,x,y-8);
		g.drawLine(x-3,y-2,x+3,y-2);
		g.drawLine(x-2,y-3,x+2,y-3);
		g.drawLine(x-2,y-4,x+2,y-4);
		g.drawLine(x-1,y-5,x+1,y-5);
		g.drawLine(x-1,y-6,x+1,y-6);
	   break;
	   case 2://Down
		g.drawLine(x,y+4,x,y+8);
		g.drawLine(x-1,y+6,x+1,y+6);
		g.drawLine(x-1,y+5,x+1,y+5);
		g.drawLine(x-2,y+4,x+2,y+4);
		g.drawLine(x-2,y+3,x+2,y+3);
		g.drawLine(x-3,y+2,x+3,y+2);
	   break;
	   case 3://ArrowRight
		g.drawLine(x+4,y,x+8,y);
		g.drawLine(x+6,y-1,x+6,y+1);
		g.drawLine(x+5,y-1,x+5,y+1);
		g.drawLine(x+4,y-2,x+4,y+2);
		g.drawLine(x+3,y-2,x+3,y+2);
		g.drawLine(x+2,y-3,x+2,y+3);
	   break;
	   case 4://ArrowLeft
		g.drawLine(x-4,y,x-8,y);
		g.drawLine(x-2,y-3,x-2,y+3);
		g.drawLine(x-3,y-2,x-3,y+2);
		g.drawLine(x-4,y-2,x-4,y+2);
		g.drawLine(x-5,y-1,x-5,y+1);
		g.drawLine(x-6,y-1,x-6,y+1); 
	  break;
	}		
    }  

    
    public static void addComponent(Container container, Component component, int gridx, int gridy,
	int gridwidth, int gridheight, int fill, int anchor) throws AWTException{
	    LayoutManager lm = container.getLayout();
	    if(!(lm instanceof GridBagLayout)){
		throw new AWTException ("Invalid layout"+lm);
	    }
	    else{
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.gridx = gridx;
		gbc.gridy = gridy;
		gbc.gridwidth = gridwidth;
		gbc.gridheight = gridheight;
		gbc.fill = fill;
		gbc.anchor = anchor;
		((GridBagLayout)lm).setConstraints(component, gbc);
		container.add(component);
	    }
    }
    
    public static void  SansPLAIN(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize+1));
		fm = g.getFontMetrics();
		g.drawString(str2,x,y);
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }
    
    public static void  subscripterInfinityOne(String str1, String str2, String str3, String str4, Graphics g, int fsize, int x, int y){
        
		FontMetrics fm;
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
                
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
		
                //Change back to the actual symbol, but use extra-large font or infinity is too small
                //string str4 is not used
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize+6));
		fm = g.getFontMetrics();
                g.drawString("\u221e",x,y);
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
    }
    
    public static void  subscripterInfinityTwo(String str1, String str2, String str3, String str4, String str5, Graphics g, int fsize, int x, int y){
        
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
		//symbol for "infinity".
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize+6));
		
                fm = g.getFontMetrics();
                g.drawString("\u221e",x,y);
                
                x = x + fm.stringWidth("oo") + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str5,x,y);
    }

 public static void  subscripterInfinityThree(String str1, String str2, String str3, String str4, Graphics g, int fsize, int x, int y){
        
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
                
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
		
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize+6));
		fm = g.getFontMetrics();
                g.drawString("\u221e",x,y);
                
                g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
    }
  
    public static void  subscripter(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		g.drawString(str3,x,y);
    }

    public static void ImgSubTxtTxt(BufferedImage img, String str1, String str2, String str3, Graphics g, int fsize, int x, int y, ImageObserver observer) {
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();

		g.drawImage(img,x,y-img.getHeight(),observer);
		x = x + img.getWidth() + 1;

		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;

		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		g.drawString(str3,x,y);
    }


    public static void TxtImgTxt(String str1, BufferedImage img, String str3, Graphics g, int fsize, int x, int y, ImageObserver observer){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		//g.setFont(new Font("SanSerif",Font.ITALIC,fsize+1));
		//fm = g.getFontMetrics();
		//g.drawString(str2,x,y);

		x = x + fm.stringWidth("  ");
		g.drawImage(img,x,y-img.getHeight(),observer);
		x = x + fm.stringWidth(" ") + img.getWidth() + 1;
		
		//x = x + fm.stringWidth(str2) + 1;
		//g.setFont(new Font("SanSerif",Font.PLAIN,fsize));
                //fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }
    
    public static void  subscripterSerIT(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(italicFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		g.drawString(str3,x,y);
    }
    
    public static void  subscripter2types(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }
    
    public static void  subscripterB(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont(Font.BOLD,(float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont(Font.BOLD,(float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont(Font.BOLD,(float)fsize));
		g.drawString(str3,x,y);
    }
    
    public static void  subscripterOhms(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3+" [ ",x,y);
		
		x = x + fm.stringWidth(str3+" [ ") + 1;
		g.setFont(symbolFont.deriveFont((float)fsize+1));
		fm = g.getFontMetrics();
		g.drawString("\u03a9",x,y);
		int space = fm.stringWidth("\u03a9");
		
		x = x + space + 2;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(" ]",x,y);		
    }
    
    public static void  subscripter2(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(serifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(serifFont.deriveFont(Font.BOLD,(float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(serifFont.deriveFont((float)fsize));
		g.drawString(str3,x,y);
    }
    
    public static void  subscripter4(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("SanSerif",Font.BOLD,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(serifFont.deriveFont(Font.BOLD,(float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(serifFont.deriveFont((float)fsize));
		g.drawString(str3,x,y);
    }
    public static void  SerifBoldItalic(String str1,Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("Serif",Font.BOLD + Font.ITALIC,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
    }
    
    public static void  SerifItalic(String str1,Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(new Font("Serif",Font.ITALIC,fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
    }
    
    public static void  subsubSerifBoldItalic(String str1, String str2, String str3, String str4, String str5, String str6, String str7, Graphics g, int fsize, int x, int y){
        if (useBiggerFont) fsize += 2;
		FontMetrics fm;
		g.setFont(serifFont.deriveFont(Font.BOLD + Font.ITALIC, (float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(serifFont.deriveFont(Font.BOLD + Font.ITALIC, (float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str5,x,y);
		
		x = x + fm.stringWidth(str5) + 1;
		g.setFont(sanSerifFont.deriveFont(Font.BOLD,(float)fsize-3));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str6,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str6) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str7,x,y);
		
    } 
    
    
    public static void  subscripter3(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		g.drawString(str3,x,y);
    }  
     
    public static void  superscripter(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		g.drawString(str3,x,y);
    }
    public static void  superscripterB(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont(Font.BOLD,(float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont(Font.BOLD,(float)fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont(Font.BOLD,(float)fsize));
		g.drawString(str3,x,y);
    }
    
    public static void  subsup(String str1, String str2, String str3, String str4, String str5, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str5,x,y);
    } 
    
    public static void  subsupsub(String str1, String str2, String str3, String str4, String str5, String str6, String str7, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str5,x,y);
		
		x = x + fm.stringWidth(str5) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str6,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str6) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str7,x,y);
		
    } 
    
    public static void  subsubsub(String str1, String str2, String str3, String str4, String str5, String str6, String str7, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str5,x,y);
		
		x = x + fm.stringWidth(str5) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str6,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str6) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str7,x,y);
		
    } 
    
    public static void  subsubsup(String str1, String str2, String str3, String str4, String str5, String str6, String str7, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str5,x,y);
		
		x = x + fm.stringWidth(str5) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str6,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str6) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str7,x,y);
		
    } 
    
    public static void  subsubscripter(String str1, String str2, String str3, String str4, String str5, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str2,x,y);
		
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str5,x,y);
    }
    
    public static void  subscripterSS3(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(serifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }
    
    public static void  subscripterSymbol(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(serifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(symbolFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(serifFont.deriveFont((float)fsize+1));
		g.drawString(str3,x,y);
    }
    
    public static void  subscripterSanSym2(String str1, String str2, String str3, String str4, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
                
		g.setFont(serifFont.deriveFont((float)fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
                g.setFont(sanSerifFont.deriveFont((float)fsize));
    } 

    public static void  subscripterSanSym3(String str1, String str2, String str3, String str3b, String str4, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(serifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                y = y - fm.getHeight()/3;
                x = x + fm.stringWidth(str3) + 1;
                
                g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3b,x,y);
                x = x + fm.stringWidth(str3b) + 1;
                
               g.setFont(serifFont.deriveFont((float)fsize+2));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
                g.setFont(sanSerifFont.deriveFont((float)fsize));
    } 

    public static void  subscripterSanSym4(String str1, String str2, String str3, String str3b, String str4, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(serifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                y = y - fm.getHeight()/3;
                x = x + fm.stringWidth(str3) + 1;
                
                g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3b,x,y);
                x = x + fm.stringWidth(str3b) + 1;
                
               g.setFont(serifFont.deriveFont((float)fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
                g.setFont(sanSerifFont.deriveFont((float)fsize));
    } 
    
    public static void  subscripterSymFirst(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(serifFont.deriveFont((float)fsize+1));
                
                fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }

    public static void  subscripterSymFirst3(String str1, String str2, String str3, String str4, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(serifFont.deriveFont((float)fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		
                x = x + fm.stringWidth(str1) + 1;
                g.setFont(sanSerifFont.deriveFont((float)fsize-1));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		
                x = x + fm.stringWidth(str2) + 1;
                g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		
                
                y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
    }

    public static void  subscripterSymSubSym(String str1, String str2, String str3, String str4, String str5, String str6, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
                
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str1,x,y);
                
                x = x + fm.stringWidth(str1) + 1;
                g.setFont(serifFont.deriveFont((float)fsize+1));
		fm = g.getFontMetrics();
		g.drawString(str2,x,y);
		
                x = x + fm.stringWidth(str2) + 1;
                g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		
                y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
                
                y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str5,x,y);
                
                x = x + fm.stringWidth(str5) + 1;
                g.setFont(serifFont.deriveFont((float)fsize+2));
		fm = g.getFontMetrics();
		g.drawString(str6,x,y);
		
    }
    
    public static void  subscripterSymMiddle2(String str1, String str2, String str3, String str4, String str5, Graphics g, int fsize, int x, int y){
		
                FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
                g.setFont(serifFont.deriveFont((float)fsize+1));
		//g.setFont(symbolFont.deriveFont((float)size+1));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
                x = x + fm.stringWidth(str4) + 1;
                g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str5,x,y);
                
    }

    public static void  subSymsup(String str1, String str2, String str3, String str4, String str5, String str6, String str7, Graphics g, int fsize, int x, int y){
		
                FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
                g.setFont(serifFont.deriveFont((float)fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
                x = x + fm.stringWidth(str4) + 1;
                g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str5,x,y);
                y = y - fm.getHeight()/3;
                x = x + fm.stringWidth(str5) + 1;
		
                g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		g.drawString(str6,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str6) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str7,x,y);
                
                
    }
 

    
    public static void  subscripterSymFirst2(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		//g.setFont(serifFont.deriveFont((float)fsize));
                g.setFont(serifFont.deriveFont((float)fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }
    
    public static void  subscripterSS2(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(serifFont.deriveFont((float)fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
    }

    public static void  subscripterSSS(String str1, String str2, String str3, String str4, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
		g.setFont(serifFont.deriveFont((float)fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
                g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
    }
    
    public static void  subscripterSSSS(String str1, String str2, String str3, String str4, String str5, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
		g.setFont(serifFont.deriveFont((float)fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
                x = x + fm.stringWidth(str4) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str5,x,y);
    }
    
    public static void  subscripterSSSnew(String str1, String str2, String str3, String str4, String str5, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
		g.setFont(serifFont.deriveFont((float)fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
                x = x + fm.stringWidth(str4) + 1;
                g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
                g.drawString(str5,x,y);
                
    }
    
    public static void  subsubsubSymbol(String str1, String str2, String str3, String str4, String str5, String str6, String str7, String str8, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str5,x,y);
		
		x = x + fm.stringWidth(str5) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str6,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str6) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str7,x,y);
		x = x + fm.stringWidth(str7) + 1;
		g.setFont(serifFont.deriveFont((float)fsize+1)); 
		fm = g.getFontMetrics();
		g.drawString(str8,x,y);
                g.setFont(sanSerifFont.deriveFont((float)fsize));
    }

    public static void  subsubsubSymbol2(String str1, String str2, String str3, String str4, String str5, String str6, String str7, String str8, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str5,x,y);
		
		x = x + fm.stringWidth(str5) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str6,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str6) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str7,x,y);
		x = x + fm.stringWidth(str7) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize)); 
		fm = g.getFontMetrics();
		g.drawString(str8,x,y);
                g.setFont(sanSerifFont.deriveFont((float)fsize));
    }
    
    public static void  subsupsubSymbol(String str1, String str2, String str3, String str4, String str5, String str6, String str7, String str8, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str5,x,y);
		
		x = x + fm.stringWidth(str5) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str6,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str6) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str7,x,y);
		x = x + fm.stringWidth(str7) + 1;
		g.setFont(serifFont.deriveFont((float)fsize+1)); 
		fm = g.getFontMetrics();
		g.drawString(str8,x,y);
                g.setFont(sanSerifFont.deriveFont((float)fsize));
    }
    
    public static void  subsubsupSymbol(String str1, String str2, String str3, String str4, String str5, String str6, String str7, String str8, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str5,x,y);
		
		x = x + fm.stringWidth(str5) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str6,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str6) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str7,x,y);
                
                x = x + fm.stringWidth(str7) + 1;
		g.setFont(serifFont.deriveFont((float)fsize+1));
		fm = g.getFontMetrics();
		g.drawString(str8,x,y);
		g.setFont(sanSerifFont.deriveFont((float)fsize));
    }
    
    public static void  subsubsubsupSymbol(String strA, String strB, String str1, String str2, String str3, String str4, String str5, String str6, String str7, String str8, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
                g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(strA,x,y);
		x = x + fm.stringWidth(strA) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(strB,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(strB) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str5,x,y);
		
		x = x + fm.stringWidth(str5) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str6,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str6) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str7,x,y);
                
                x = x + fm.stringWidth(str7) + 1;
		g.setFont(serifFont.deriveFont((float)fsize+1));
		fm = g.getFontMetrics();
		g.drawString(str8,x,y);
		g.setFont(sanSerifFont.deriveFont((float)fsize));
    }
    
    public static void  subsubsupSymbol2(String str1, String str2, String str3, String str4, String str5, String str6, String str7, String str8, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str5,x,y);
		
		x = x + fm.stringWidth(str5) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str6,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str6) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str7,x,y);
                
                x = x + fm.stringWidth(str7) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str8,x,y);
		g.setFont(sanSerifFont.deriveFont((float)fsize));
    }
    
    public static void drawCircle(int x, int y, int radius, Graphics g){
		g.drawOval(x-radius/2,y-radius/2,radius,radius);
    }
    
    public static void fillCircle(int x, int y, int radius, Graphics g){
		g.fillOval(x-radius/2,y-radius/2,radius,radius);
    } 
    
    public static void drawArcThick(Graphics g, double xCenter, double yCenter, double Radius, double startangle, double endangle, int thick, Color color){
	
            Graphics2D g2d = (Graphics2D)g;
            g2d.setPaint(color);
            g2d.setStroke(new BasicStroke(thick));
        
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
            Arc2D.Double arc_one = new Arc2D.Double(xCenter,yCenter,Radius,Radius,startangle,endangle,0);
            g2d.draw(arc_one);
  
            g2d.setStroke(new BasicStroke(1));
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
    }

}

/*
//MaestroG.java

import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.net.*;
import java.awt.event.*;
import java.lang.*;


public class MaestroG{
    MaestroG(){};
    //tipo=1 arrow up
    //
    public static final void drawArrow(int x, int y, int tipo, Graphics g){
	 switch (tipo){
	   case 1://ArrowUp
	  	g.drawLine(x,y,x,y-8);
		g.drawLine(x-3,y-2,x+3,y-2);
		g.drawLine(x-2,y-3,x+2,y-3);
		g.drawLine(x-2,y-4,x+2,y-4);
		g.drawLine(x-1,y-5,x+1,y-5);
		g.drawLine(x-1,y-6,x+1,y-6);
	   break;
	   case 2://Down
		g.drawLine(x,y,x,y+8);
		g.drawLine(x-1,y+6,x+1,y+6);
		g.drawLine(x-1,y+5,x+1,y+5);
		g.drawLine(x-2,y+4,x+2,y+4);
		g.drawLine(x-2,y+3,x+2,y+3);
		g.drawLine(x-3,y+2,x+3,y+2);
	   break;
	   case 3://ArrowRight
		g.drawLine(x,y,x+8,y);
		g.drawLine(x+6,y-1,x+6,y+1);
		g.drawLine(x+5,y-1,x+5,y+1);
		g.drawLine(x+4,y-2,x+4,y+2);
		g.drawLine(x+3,y-2,x+3,y+2);
		g.drawLine(x+2,y-3,x+2,y+3);
	   break;
	   case 4://ArrowLeft
		g.drawLine(x,y,x-8,y);
		g.drawLine(x-2,y-3,x-2,y+3);
		g.drawLine(x-3,y-2,x-3,y+2);
		g.drawLine(x-4,y-2,x-4,y+2);
		g.drawLine(x-5,y-1,x-5,y+1);
		g.drawLine(x-6,y-1,x-6,y+1); 
	  break;
	}	
    }  
    
    public static final void drawArrowtip(int x, int y, int tipo, Graphics g){
	 switch (tipo){
	   case 1://ArrowUp
	  	g.drawLine(x,y-4,x,y-8);
		g.drawLine(x-3,y-2,x+3,y-2);
		g.drawLine(x-2,y-3,x+2,y-3);
		g.drawLine(x-2,y-4,x+2,y-4);
		g.drawLine(x-1,y-5,x+1,y-5);
		g.drawLine(x-1,y-6,x+1,y-6);
	   break;
	   case 2://Down
		g.drawLine(x,y+4,x,y+8);
		g.drawLine(x-1,y+6,x+1,y+6);
		g.drawLine(x-1,y+5,x+1,y+5);
		g.drawLine(x-2,y+4,x+2,y+4);
		g.drawLine(x-2,y+3,x+2,y+3);
		g.drawLine(x-3,y+2,x+3,y+2);
	   break;
	   case 3://ArrowRight
		g.drawLine(x+4,y,x+8,y);
		g.drawLine(x+6,y-1,x+6,y+1);
		g.drawLine(x+5,y-1,x+5,y+1);
		g.drawLine(x+4,y-2,x+4,y+2);
		g.drawLine(x+3,y-2,x+3,y+2);
		g.drawLine(x+2,y-3,x+2,y+3);
	   break;
	   case 4://ArrowLeft
		g.drawLine(x-4,y,x-8,y);
		g.drawLine(x-2,y-3,x-2,y+3);
		g.drawLine(x-3,y-2,x-3,y+2);
		g.drawLine(x-4,y-2,x-4,y+2);
		g.drawLine(x-5,y-1,x-5,y+1);
		g.drawLine(x-6,y-1,x-6,y+1); 
	  break;
	}		
    }  
    
    public static void addComponent(Container container, Component component, int gridx, int gridy,
	int gridwidth, int gridheight, int fill, int anchor) throws AWTException{
	    LayoutManager lm = container.getLayout();
	    if(!(lm instanceof GridBagLayout)){
		throw new AWTException ("Invalid layout"+lm);
	    }
	    else{
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.gridx = gridx;
		gbc.gridy = gridy;
		gbc.gridwidth = gridwidth;
		gbc.gridheight = gridheight;
		gbc.fill = fill;
		gbc.anchor = anchor;
		((GridBagLayout)lm).setConstraints(component, gbc);
		container.add(component);
	    }
    }
    
  
    public static void  subscripter(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		g.drawString(str3,x,y);
    }
    
    public static void  subscripterB(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont(Font.BOLD,(float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont(Font.BOLD,(float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont(Font.BOLD,(float)fsize));
		g.drawString(str3,x,y);
    }
    
    public static void  subscripterOhms(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3+" [ ",x,y);
		
		x = x + fm.stringWidth(str3+" [ ") + 1;
		g.setFont(symbolFont.deriveFont((float)size+1));
		fm = g.getFontMetrics();
		g.drawString("\u03a9",x,y);
		int space = fm.stringWidth("\u03a9");
		
		x = x + space + 2;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(" ]",x,y);
		
		
    }
    
    public static void  subscripter2(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(serifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(serifFont.deriveFont(Font.BOLD,(float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(serifFont.deriveFont((float)fsize));
		g.drawString(str3,x,y);
    }  
    public static void  superscripter(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		g.drawString(str3,x,y);
    }
    public static void  superscripterB(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont(Font.BOLD,(float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont(Font.BOLD,(float)fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont(Font.BOLD,(float)fsize));
		g.drawString(str3,x,y);
    }
    
    public static void  subsup(String str1, String str2, String str3, String str4, String str5, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str5,x,y);
    } 
    
    public static void  subsupsub(String str1, String str2, String str3, String str4, String str5, String str6, String str7, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str5,x,y);
		
		x = x + fm.stringWidth(str5) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str6,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str6) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str7,x,y);
		
    } 
    
    public static void  subsubsub(String str1, String str2, String str3, String str4, String str5, String str6, String str7, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str5,x,y);
		
		x = x + fm.stringWidth(str5) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str6,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str6) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str7,x,y);
		
    } 
    
    public static void  subsubsup(String str1, String str2, String str3, String str4, String str5, String str6, String str7, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str5,x,y);
		
		x = x + fm.stringWidth(str5) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str6,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str6) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str7,x,y);
		
    } 
    
    public static void  subsubscripter(String str1, String str2, String str3, String str4, String str5, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str2,x,y);
		
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str3,x,y);
		
		x = x + fm.stringWidth(str3) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y - fm.getHeight()/3;
		g.drawString(str4,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str4) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str5,x,y);
    } 
    
    public static void  subscripterSymbol(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(serifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(serifFont.deriveFont((float)fsize+1));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(serifFont.deriveFont((float)fsize));
		g.drawString(str3,x,y);
    }
    
    public static void  subscripterSymFirst(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(serifFont.deriveFont((float)fsize+1));
                
                fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }
    
    public static void  subscripterSymFirst2(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		
                g.setFont(serifFont.deriveFont((float)fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }
    
    public static void  subscripterSymMiddle2(String str1, String str2, String str3, String str4, String str5, Graphics g, int fsize, int x, int y){
		
                FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
                g.setFont(serifFont.deriveFont((float)fsize+1));
		//g.setFont(symbolFont.deriveFont((float)size+1));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
                x = x + fm.stringWidth(str4) + 1;
                g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str5,x,y);
                
    }

    public static void  subSymsup(String str1, String str2, String str3, String str4, String str5, String str6, String str7, Graphics g, int fsize, int x, int y){
		
                FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
                g.setFont(serifFont.deriveFont((float)fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
                x = x + fm.stringWidth(str4) + 1;
                g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str5,x,y);
                y = y - fm.getHeight()/3;
                x = x + fm.stringWidth(str5) + 1;
		
                g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		g.drawString(str6,x,y);
		y = y + fm.getHeight()/3;
		x = x + fm.stringWidth(str6) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str7,x,y);
                
                
    }
    
    public static void  SansMiditalic(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(italicFont.deriveFont((float)fsize+1));
		fm = g.getFontMetrics();
		g.drawString(str2,x,y);
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }

    public static void  subscripterSS3(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(serifFont.deriveFont((float)fsize+1));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
    }

    public static void  subscripterSS2(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(serifFont.deriveFont((float)fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
    }

    public static void  subscripterSSS(String str1, String str2, String str3, String str4, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
		g.setFont(serifFont.deriveFont((float)fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
                g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
    }
    
    public static void  subscripterSSSS(String str1, String str2, String str3, String str4, String str5, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
		fm = g.getFontMetrics();
		g.drawString(str1,x,y);
		x = x + fm.stringWidth(str1) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize-2));
		fm = g.getFontMetrics();
		y = y + fm.getHeight()/3;
		g.drawString(str2,x,y);
		y = y - fm.getHeight()/3;
		x = x + fm.stringWidth(str2) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str3,x,y);
                x = x + fm.stringWidth(str3) + 1;
		g.setFont(serifFont.deriveFont((float)fsize+1));
                fm = g.getFontMetrics();
		g.drawString(str4,x,y);
                x = x + fm.stringWidth(str4) + 1;
		g.setFont(sanSerifFont.deriveFont((float)fsize));
                fm = g.getFontMetrics();
		g.drawString(str5,x,y);
    }
    
    public static void drawCircle(int x, int y, int radius, Graphics g){
		g.drawOval(x-radius/2,y-radius/2,radius,radius);
    }
    
    public static void fillCircle(int x, int y, int radius, Graphics g){
		g.fillOval(x-radius/2,y-radius/2,radius,radius);
    } 
    
    public static void drawArcThick(Graphics g, double xCenter, double yCenter, double Radius, double startangle, double endangle, int thick, Color color){
	
            Graphics2D g2d = (Graphics2D)g;
            g2d.setPaint(color);
            g2d.setStroke(new BasicStroke(thick));
        
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
            Arc2D.Double arc_one = new Arc2D.Double(xCenter,yCenter,Radius,Radius,startangle,endangle,0);
            g2d.draw(arc_one);
  
            g2d.setStroke(new BasicStroke(1));
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
   }

}*/
