package uva.qls.ast.style;
import uva.qls.ast.CodeLines;
import uva.qls.ast.literal.StringLiteral;
import uva.qls.ast.statements.visitor.StatementVisitor;
import uva.qls.ast.value.StringValue;
import java.util.ArrayList;
import java.util.List;
import java.awt.GraphicsEnvironment;
public class FontName extends Font{
private StringLiteral value;
public FontName(StringLiteral _value, CodeLines _codeLines) {
super(_codeLines);
this.value = new StringLiteral(this.fontValid(_value.toString()), _codeLines);
}
private String fontValid(String _value){
List<Object> availableFonts = new ArrayList<Object>();
String fonts[] = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
for (int i=0; i< fonts.length; i++){
availableFonts.add(fonts[i]);
}
return availableFonts.contains(_value) ? _value : "Arial";
}
@Override
public <T> T accept(StatementVisitor<T> visitor) {
return visitor.visitFontName(this);
}
@Override
public StringValue evaluate() {
return new StringValue(this.value.toString());
}
@Override
public String getStyleType() {
return this.getClass().getName();
}
@Override
public String toString() {
return "FontName(" + this.value + ")";
}
}