/*
 * SyntaxStyle.java - A simple text style class
 * Copyright (C) 1999 Slava Pestov
 *
 * You may use and modify this package for any purpose. Redistribution is
 * permitted, in both source and binary form, provided that this notice
 * remains intact in all source distributions of this package.
 */

package processing.app.syntax;

import java.awt.Color;


/**
 * A simple text style class. 
 * It can specify the color and bold flag of a run of text.
 * @author Slava Pestov
 * @version $Id$
 */
public class SyntaxStyle {
  private Color color;
//  private boolean italic;
  private boolean bold;
//  private Font lastFont;
//  private Font lastStyledFont;
//  private FontMetrics fontMetrics;

  
  /**
   * Creates a new SyntaxStyle.
   * @param color The text color
   * @param italic True if the text should be italics
   * @param bold True if the text should be bold
   */
//  public SyntaxStyle(Color color, boolean italic, boolean bold) {
  public SyntaxStyle(Color color, boolean bold) {
    this.color = color;
//    this.italic = italic;
    this.bold = bold;
  }

  
  /** Returns the color specified in this style. */
  public Color getColor() {
    return color;
  }

  
//  /**
//   * Returns true if no font styles are enabled.
//   */
//  public boolean isPlain() {
//    return !(bold || italic);
//  }

//  /**
//   * Returns true if italics is enabled for this style.
//   */
//  public boolean isItalic() {
//    return italic;
//  }

  
  /** Returns true if boldface is enabled for this style. */
  public boolean isBold() {
    return bold;
  }

  
//  /**
//   * Returns the specified font, but with the style's bold flags applied.
//   */
//  public Font getStyledFont(Font font) {
//    if (font.equals(lastFont)) {
//      return lastStyledFont;
//    }
//    lastFont = font;
//    lastStyledFont =
//      findFont(font.getFamily(), bold ? Font.BOLD : Font.PLAIN, font.getSize());
//    return lastStyledFont;
//  }
//
//  
//  /**
//   * Returns the font metrics for the styled font.
//   */
//  public FontMetrics getFontMetrics(Font font, JComponent comp) {
////    if (font == null) {
////      throw new NullPointerException("font param must not be null");
////    }
//    if (font.equals(lastFont) && fontMetrics != null) {
//      return fontMetrics;
//    }
//    lastFont = font;
////    lastStyledFont = new Font(font.getFamily(),
////                              (bold ? Font.BOLD : 0)
////                              | (italic ? Font.ITALIC : 0),
////                              font.getSize());
//    lastStyledFont =
//      findFont(font.getFamily(), bold ? Font.BOLD : Font.PLAIN, font.getSize());
//
//    //fontMetrics = Toolkit.getDefaultToolkit().getFontMetrics(lastStyledFont);
//    fontMetrics = comp.getFontMetrics(lastStyledFont);
//    return fontMetrics;
//  }
//
//  
//  /*
//    on Windows (and I presume Linux) we get something like this:
//
//    mono family Source Code Pro
//    mono fontname Source Code Pro
//    mono name Source Code Pro
//    mono psname SourceCodePro-Regular
//
//    mono family Source Code Pro Semibold
//    mono fontname Source Code Pro Semibold
//    mono name Source Code Pro Semibold
//    mono psname SourceCodePro-Semibold
//
//    ...which means that 'family' is not a usable method.
//  */
//  //private String monoFontFamily;
//
//  private Font findFont(String familyName, int style, int size) {
////    // getFamily() is too unreliable across platforms
////    if (Preferences.get("editor.font").startsWith("processing.mono")) {
////      return processing.app.Toolkit.getMonoFont(size, style);
////    } else {
//    System.out.println("creating new font for " + familyName);
//    return new Font(familyName, style, size);
////    }
//    
//    /*
//    if (monoFontFamily == null) {
//      // This should be more reliable across platforms than the
//      // family name, which only seems to work correctly on OS X.
//      // (Or perhaps only when it's installed locally.)
//      String psName =
//        processing.app.Toolkit.getMonoFont(size, style).getPSName();
//      int dash = psName.indexOf('-');
//      monoFontFamily = psName.substring(0, dash);
//
//      // Just get the font family name for comparison
//      //monoFontFamily =
//        //processing.app.Toolkit.getMonoFont(size, style).getFamily();
//      //processing.app.Toolkit.getMonoFont(size, style).getFamily();
//      Font mono = processing.app.Toolkit.getMonoFont(size, style);
//      System.out.println("mono family " + mono.getFamily());
//      System.out.println("mono fontname " + mono.getFontName());
//      System.out.println("mono name " + mono.getName());
//      System.out.println("mono psname " + mono.getPSName());
//    }
//    if (familyName.equals(monoFontFamily)) {
//      System.out.println("getting style bold? " + (style == Font.BOLD));
//      return processing.app.Toolkit.getMonoFont(size, style);
//    } else {
//      //System.out.println("name is " + name + " mono name is " + monoFontName + " " + style);
//      return new Font(familyName, style, size);
//    }
//    */
//  }
//
//  
//  /**
//   * Sets the foreground color and font of the specified graphics
//   * context to that specified in this style.
//   * @param gfx The graphics context
//   * @param font The font to add the styles to
//   */
//  public void setGraphicsFlags(Graphics gfx, Font font) {
//    Font _font = getStyledFont(font);
//    gfx.setFont(_font);
//    gfx.setColor(color);
//  }

  
  /**
   * Returns a string representation of this object.
   */
  public String toString() {
    return getClass().getName() + "[color=" + color +
//      (italic ? ",italic" : "") +
      (bold ? ",bold" : "") + "]";
  }
}
