//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.net.*;
import java.awt.event.*;
import java.lang.*;

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;

	}	
	
    }  
    
    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  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  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  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  subSerifBoldItalic(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		//g.setFont(new Font("Serif",Font.BOLD + Font.ITALIC,fsize));
                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(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  subSerifItalic(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
		FontMetrics fm;
		//g.setFont(new Font("Serif",Font.BOLD + Font.ITALIC,fsize));
                g.setFont(serifFont.deriveFont(Font.ITALIC,(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);
		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  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);
   }

}

