package railo.commons.lang.font; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.GraphicsEnvironment; import java.awt.image.BufferedImage; import java.util.Iterator; import railo.runtime.exp.ExpressionException; import railo.runtime.op.Duplicator; import railo.runtime.type.Array; import railo.runtime.type.ArrayImpl; public class FontUtil { private static Array fonts; private static Graphics2D graphics; public synchronized static Array getAvailableFontsAsStringArray() { Iterator<Object> it = getAvailableFonts(false).valueIterator(); Array arr=new ArrayImpl(); while(it.hasNext()) { arr.appendEL(((Font)it.next()).getFontName()); } return arr; } private synchronized static Array getAvailableFonts(boolean duplicate) { if (fonts == null) { fonts = new ArrayImpl(); GraphicsEnvironment graphicsEvn = GraphicsEnvironment.getLocalGraphicsEnvironment(); Font[] availableFonts = graphicsEvn.getAllFonts(); for (int i = 0; i < availableFonts.length; i++) { fonts.appendEL(availableFonts[i]); } } if(!duplicate) return fonts; return (Array) Duplicator.duplicate(fonts,false); } public static String toString(Font font) { if(font==null) return null; return font.getFontName(); } public static Font getFont(String font, Font defaultValue) { Font f=Font.decode(font); if(f!=null) return f; // font name Iterator<Object> it = getAvailableFonts(false).valueIterator(); while(it.hasNext()) { f=(Font) it.next(); if(f.getFontName().equalsIgnoreCase(font)) return f; } // family it = getAvailableFonts(false).valueIterator(); while(it.hasNext()) { f=(Font) it.next(); if(f.getFamily().equalsIgnoreCase(font)) return f; } return defaultValue; } public static Font getFont(String font) throws ExpressionException { Font f = getFont(font,null); if(f!=null) return f; throw new ExpressionException("no font with name ["+font+"] available" ,"to get available fonts call function ImageFonts()"); } public static FontMetrics getFontMetrics(Font font) { if(graphics==null) { graphics = new BufferedImage(1, 1,BufferedImage.TYPE_INT_ARGB).createGraphics(); } return graphics.getFontMetrics(font); } }