//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){
        if (useBiggerFont) fsize += 2;
		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  subscripterIT(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
        if (useBiggerFont) fsize += 2;
		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));
		g.drawString(str3,x,y);
    }
    


    
    public static void  subscripterSerIT(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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  subscripter3(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
        if (useBiggerFont) fsize += 2;
		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  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  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  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  superscripter(String str1, String str2, String str3, Graphics g, int fsize, int x, int y){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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  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(serifFont.deriveFont(Font.BOLD,(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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		
                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)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  subscripterSymMiddle2IT(String str1, String str2, String str3, String str4, String str5, Graphics g, int fsize, int x, int y){
        if (useBiggerFont) fsize += 2;
		
                FontMetrics fm;
		g.setFont(italicFont.deriveFont((float)fsize+4));
		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)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  subSymsup(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(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  subSymsupIT(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(italicFont.deriveFont((float)fsize+4));
		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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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  subscripterSSSIT(String str1, String str2, String str3, String str4, Graphics g, int fsize, int x, int y){
        if (useBiggerFont) fsize += 2;
		FontMetrics fm;
		g.setFont(italicFont.deriveFont((float)fsize+2));
		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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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  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){
        if (useBiggerFont) fsize += 2;
		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){
        if (useBiggerFont) fsize += 2;
		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 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);
   }

}

