home *** CD-ROM | disk | FTP | other *** search
- package sun.awt;
-
- import java.awt.peer.FontPeer;
- import java.io.BufferedInputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.InputStream;
- import java.security.AccessController;
- import java.util.Hashtable;
- import java.util.Properties;
- import java.util.Vector;
- import sun.io.CharToByteConverter;
- import sun.io.CharacterEncoding;
- import sun.io.ConversionBufferFullException;
- import sun.io.MalformedInputException;
-
- public abstract class PlatformFont implements FontPeer {
- protected FontDescriptor[] componentFonts;
- protected char defaultChar;
- protected Properties props;
- protected FontDescriptor defaultFont;
- protected static Hashtable charsetRegistry;
- protected String aliasName;
- protected String styleString;
- private Object[] fontCache;
- protected static int FONTCACHESIZE;
- protected static int FONTCACHEMASK;
- protected static String osVersion;
- private static Properties fprops;
-
- public PlatformFont(String var1, int var2) {
- if (fprops == null) {
- this.props = null;
- } else {
- this.props = fprops;
- this.aliasName = this.props.getProperty("alias." + var1.toLowerCase());
- if (this.aliasName == null) {
- this.aliasName = var1.toLowerCase();
- }
-
- if (this.props.getProperty(this.aliasName + ".0") == null && this.props.getProperty(this.aliasName + ".plain.0") == null) {
- this.aliasName = "sansserif";
- }
-
- this.styleString = styleStr(var2);
- Vector var3 = new Vector(5);
- int var4 = 0;
-
- while(true) {
- String var5 = String.valueOf(var4);
- String var6 = this.props.getProperty(this.aliasName + "." + this.styleString + "." + var5);
- if (var6 == null) {
- var6 = this.props.getProperty(this.aliasName + "." + var5);
- if (var6 == null) {
- this.componentFonts = new FontDescriptor[var4];
-
- for(int var22 = 0; var22 < var4; ++var22) {
- this.componentFonts[var22] = (FontDescriptor)var3.elementAt(var22);
- }
-
- try {
- var23 = Integer.parseInt(this.props.getProperty("default.char", "003f"), 16);
- } catch (NumberFormatException var19) {
- var23 = 63;
- }
-
- this.defaultChar = '?';
- if (this.componentFonts.length > 0) {
- this.defaultFont = this.componentFonts[0];
- }
-
- for(int var24 = 0; var24 < this.componentFonts.length; ++var24) {
- if (!this.componentFonts[var24].isExcluded((char)var23) && this.componentFonts[var24].fontCharset.canConvert((char)var23)) {
- this.defaultFont = this.componentFonts[var24];
- this.defaultChar = (char)var23;
- break;
- }
- }
-
- return;
- }
- }
-
- String var7 = this.props.getProperty("fontcharset." + this.aliasName + "." + this.styleString + "." + var5);
- if (var7 == null) {
- var7 = this.props.getProperty("fontcharset." + this.aliasName + "." + var5);
- if (var7 == null) {
- var7 = "default";
- }
- }
-
- CharToByteConverter var8 = this.getFontCharset(var7.trim(), var6);
- String var9 = this.props.getProperty("exclusion." + this.aliasName + "." + this.styleString + "." + var5);
- if (var9 == null) {
- var9 = this.props.getProperty("exclusion." + this.aliasName + "." + var5);
- if (var9 == null) {
- var9 = "none";
- }
- }
-
- int[] var10;
- if (var9.equals("none")) {
- var10 = new int[0];
- } else {
- int var11 = 1;
- int var25 = 0;
-
- label110:
- while(true) {
- var25 = var9.indexOf(44, var25);
- if (var25 == -1) {
- var10 = new int[var11];
-
- for(int var13 = 0; var13 < var11; ++var13) {
- int var16 = 0;
- int var17 = 0;
-
- String var14;
- String var15;
- try {
- var14 = var9.substring(var13 * 10, var13 * 10 + 4);
- var15 = var9.substring(var13 * 10 + 5, var13 * 10 + 9);
- } catch (StringIndexOutOfBoundsException var21) {
- var10 = new int[0];
- break label110;
- }
-
- try {
- var16 = Integer.parseInt(var14, 16);
- var17 = Integer.parseInt(var15, 16);
- } catch (NumberFormatException var20) {
- var10 = new int[0];
- break label110;
- }
-
- var10[var13] = var16 << 16 | var17;
- }
- break;
- }
-
- ++var25;
- ++var11;
- }
- }
-
- var3.addElement(new FontDescriptor(var6, var8, var10));
- ++var4;
- }
- }
- }
-
- private static File tryOpeningFontProp(File var0, String var1, String var2, String var3) {
- if (var0 != null) {
- return var0;
- } else {
- String var4 = var1 + File.separator + "lib" + File.separator + "font.properties";
- if (var2 != null) {
- var4 = var4 + "." + var2;
- if (var3 != null) {
- var4 = var4 + "_" + var3;
- }
- }
-
- File var5 = new File(var4 + "." + osVersion);
- if (var5 != null && var5.canRead()) {
- return var5;
- } else {
- var5 = new File(var4);
- return var5 != null && var5.canRead() ? var5 : null;
- }
- }
- }
-
- private static void initializeProps() {
- String var0 = System.getProperty("java.home");
- String var1 = System.getProperty("user.home");
- if (var0 == null) {
- throw new Error("java.home property not set");
- } else {
- String var2 = System.getProperty("user.language", "en");
- String var3 = System.getProperty("user.region");
- String var4 = System.getProperty("file.encoding");
- String var5 = CharacterEncoding.aliasName(var4);
- if (var5 == null) {
- var5 = var4;
- }
-
- if (osVersion == null) {
- osVersion = System.getProperty("os.version");
- }
-
- try {
- File var6 = null;
- if (var3 != null) {
- var6 = tryOpeningFontProp(var6, var1, var2, var3 + "_" + var5);
- var6 = tryOpeningFontProp(var6, var0, var2, var3 + "_" + var5);
- var6 = tryOpeningFontProp(var6, var1, var2, var3);
- var6 = tryOpeningFontProp(var6, var0, var2, var3);
- }
-
- var6 = tryOpeningFontProp(var6, var1, var2, var5);
- var6 = tryOpeningFontProp(var6, var0, var2, var5);
- var6 = tryOpeningFontProp(var6, var1, var2, (String)null);
- var6 = tryOpeningFontProp(var6, var0, var2, (String)null);
- var6 = tryOpeningFontProp(var6, var1, var5, (String)null);
- var6 = tryOpeningFontProp(var6, var0, var5, (String)null);
- var6 = tryOpeningFontProp(var6, var1, (String)null, (String)null);
- var6 = tryOpeningFontProp(var6, var0, (String)null, (String)null);
- Properties var7 = new Properties();
- ((Hashtable)var7).put("serif.0", "unknown");
- ((Hashtable)var7).put("sansserif.0", "unknown");
- ((Hashtable)var7).put("monospaced.0", "unknown");
- ((Hashtable)var7).put("dialog.0", "unknown");
- ((Hashtable)var7).put("dialoginput.0", "unknown");
- fprops = new Properties(var7);
- BufferedInputStream var8 = new BufferedInputStream(new FileInputStream(var6.getPath()));
- fprops.load(var8);
- ((InputStream)var8).close();
- } catch (Exception var9) {
- }
-
- }
- }
-
- public CharsetString[] makeMultiCharsetString(String var1) {
- return this.makeMultiCharsetString(var1.toCharArray(), 0, var1.length());
- }
-
- public CharsetString[] makeMultiCharsetString(char[] var1, int var2, int var3) {
- if (var3 < 1) {
- return new CharsetString[0];
- } else {
- Vector var4 = null;
- char[] var5 = new char[var3];
- char var6 = this.defaultChar;
- FontDescriptor var7 = this.defaultFont;
-
- for(int var8 = 0; var8 < this.componentFonts.length; ++var8) {
- if (!this.componentFonts[var8].isExcluded(var1[var2]) && this.componentFonts[var8].fontCharset.canConvert(var1[var2])) {
- var7 = this.componentFonts[var8];
- var6 = var1[var2];
- break;
- }
- }
-
- var5[0] = var6;
- int var9 = 0;
-
- for(int var10 = 1; var10 < var3; ++var10) {
- char var11 = var1[var2 + var10];
- FontDescriptor var12 = this.defaultFont;
- var6 = this.defaultChar;
-
- for(int var13 = 0; var13 < this.componentFonts.length; ++var13) {
- if (!this.componentFonts[var13].isExcluded(var11) && this.componentFonts[var13].fontCharset.canConvert(var11)) {
- var12 = this.componentFonts[var13];
- var6 = var11;
- break;
- }
- }
-
- var5[var10] = var6;
- if (var7 != var12) {
- if (var4 == null) {
- var4 = new Vector(3);
- }
-
- var4.addElement(new CharsetString(var5, var9, var10 - var9, var7));
- var7 = var12;
- var12 = this.defaultFont;
- var9 = var10;
- }
- }
-
- CharsetString var17 = new CharsetString(var5, var9, var3 - var9, var7);
- CharsetString[] var15;
- if (var4 == null) {
- var15 = new CharsetString[]{var17};
- } else {
- var4.addElement(var17);
- var15 = new CharsetString[var4.size()];
-
- for(int var18 = 0; var18 < var4.size(); ++var18) {
- var15[var18] = (CharsetString)var4.elementAt(var18);
- }
- }
-
- return var15;
- }
- }
-
- public boolean mightHaveMultiFontMetrics() {
- return this.props != null;
- }
-
- public Object[] makeConvertedMultiFontString(String var1) throws MalformedInputException, ConversionBufferFullException {
- return this.makeConvertedMultiFontChars(var1.toCharArray(), 0, var1.length());
- }
-
- public Object[] makeConvertedMultiFontChars(char[] var1, int var2, int var3) throws MalformedInputException, ConversionBufferFullException {
- Object[] var4 = new Object[2];
- byte[] var6 = null;
- int var7 = var2;
- int var8 = 0;
- int var9 = 0;
- Object var11 = null;
- FontDescriptor var12 = null;
- int var15 = var2 + var3;
- if (var2 >= 0 && var15 <= var1.length) {
- if (var2 >= var15) {
- return null;
- } else {
- for(; var7 < var15; ++var7) {
- char var13 = var1[var7];
- int var10 = var13 & FONTCACHEMASK;
- PlatformFontCache var14 = (PlatformFontCache)this.getFontCache()[var10];
- if (var14 == null || var14.uniChar != var13) {
- FontDescriptor var32 = this.defaultFont;
- var13 = this.defaultChar;
- char var16 = var1[var7];
- int var17 = this.componentFonts.length;
-
- for(int var18 = 0; var18 < var17; ++var18) {
- FontDescriptor var19 = this.componentFonts[var18];
- var19.fontCharset.reset();
- var19.fontCharset.setSubstitutionMode(false);
- if (!var19.isExcluded(var16) && var19.fontCharset.canConvert(var16)) {
- var32 = var19;
- var13 = var16;
- break;
- }
- }
-
- try {
- char[] var35 = new char[]{var13};
- var14 = new PlatformFontCache(this);
- var14.encodingSize = (byte)var32.fontCharset.convert(var35, 0, 1, var14.encoding, 0, 3);
- var14.fontDescriptor = var32;
- var14.uniChar = var1[var7];
- this.getFontCache()[var10] = var14;
- } catch (Exception var20) {
- System.err.println(var20);
- ((Throwable)var20).printStackTrace();
- return null;
- }
- }
-
- if (var12 != var14.fontDescriptor) {
- if (var12 != null) {
- var4[var9++] = var12;
- var4[var9++] = var6;
- if (var6 != null) {
- var8 -= 4;
- var6[0] = (byte)(var8 >> 24);
- var6[1] = (byte)(var8 >> 16);
- var6[2] = (byte)(var8 >> 8);
- var6[3] = (byte)var8;
- }
-
- if (var9 >= var4.length) {
- Object[] var34 = new Object[var4.length * 2];
- System.arraycopy(var4, 0, var34, 0, var4.length);
- var4 = var34;
- }
- }
-
- var6 = new byte[(var15 - var7 + 1) * var14.fontDescriptor.fontCharset.getMaxBytesPerChar() + 4];
- var8 = 4;
- var12 = var14.fontDescriptor;
- }
-
- if (var14.encodingSize == 1) {
- var6[var8++] = var14.encoding[0];
- } else if (var14.encodingSize == 2) {
- var6[var8++] = var14.encoding[0];
- var6[var8++] = var14.encoding[1];
- } else if (var14.encodingSize == 3) {
- var6[var8++] = var14.encoding[0];
- var6[var8++] = var14.encoding[1];
- var6[var8++] = var14.encoding[2];
- } else if (var14.encodingSize == 4) {
- var6[var8++] = var14.encoding[0];
- var6[var8++] = var14.encoding[1];
- var6[var8++] = var14.encoding[2];
- var6[var8++] = var14.encoding[3];
- }
- }
-
- var4[var9++] = var12;
- var4[var9++] = var6;
- if (var6 != null) {
- var8 -= 4;
- var6[0] = (byte)(var8 >> 24);
- var6[1] = (byte)(var8 >> 16);
- var6[2] = (byte)(var8 >> 8);
- var6[3] = (byte)var8;
- }
-
- return var4;
- }
- } else {
- throw new ArrayIndexOutOfBoundsException();
- }
- }
-
- protected abstract CharToByteConverter getFontCharset(String var1, String var2);
-
- protected final Object[] getFontCache() {
- if (this.fontCache == null) {
- this.fontCache = new Object[FONTCACHESIZE];
- }
-
- return this.fontCache;
- }
-
- public static String styleStr(int var0) {
- switch (var0) {
- case 1:
- return "bold";
- case 2:
- return "italic";
- case 3:
- return "bolditalic";
- default:
- return "plain";
- }
- }
-
- private static native void initIDs();
-
- // $FF: synthetic method
- static void access$000() {
- initializeProps();
- }
-
- static {
- NativeLibLoader.loadLibraries();
- initIDs();
- charsetRegistry = new Hashtable(5);
- FONTCACHESIZE = 256;
- FONTCACHEMASK = FONTCACHESIZE - 1;
- AccessController.doPrivileged(new 1());
- }
- }
-