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.util.Hashtable;
- import java.util.Properties;
- import java.util.Vector;
- import sun.io.CharToByteConverter;
-
- public abstract class PlatformFont implements FontPeer {
- protected FontDescriptor[] componentFonts;
- protected char defaultChar;
- protected Properties props;
- protected FontDescriptor defaultFont;
- protected static Hashtable charsetRegistry = new Hashtable(5);
- protected String aliasName;
- protected String styleString;
- 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 var21 = 0; var21 < var4; ++var21) {
- this.componentFonts[var21] = (FontDescriptor)var3.elementAt(var21);
- }
-
- try {
- var22 = Integer.parseInt(this.props.getProperty("default.char", "003f"), 16);
- } catch (NumberFormatException var18) {
- var22 = 63;
- }
-
- this.defaultChar = '?';
- if (this.componentFonts.length > 0) {
- this.defaultFont = this.componentFonts[0];
- }
-
- for(int var23 = 0; var23 < this.componentFonts.length; ++var23) {
- if (!this.componentFonts[var23].isExcluded((char)var22) && this.componentFonts[var23].fontCharset.canConvert((char)var22)) {
- this.defaultFont = this.componentFonts[var23];
- this.defaultChar = (char)var22;
- return;
- }
- }
-
- 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 var24 = 0;
-
- label106:
- while(true) {
- var24 = var9.indexOf(44, var24);
- if (var24 == -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 var20) {
- var10 = new int[0];
- break label106;
- }
-
- try {
- var16 = Integer.parseInt(var14, 16);
- var17 = Integer.parseInt(var15, 16);
- } catch (NumberFormatException var19) {
- var10 = new int[0];
- break label106;
- }
-
- var10[var13] = var16 << 16 | var17;
- }
- break;
- }
-
- ++var24;
- ++var11;
- }
- }
-
- var3.addElement(new FontDescriptor(var6, var8, var10));
- ++var4;
- }
- }
- }
-
- public boolean mightHaveMultiFontMetrics() {
- return this.props != null;
- }
-
- 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;
- }
- }
-
- protected abstract CharToByteConverter getFontCharset(String var1, String var2);
-
- public static String styleStr(int var0) {
- switch (var0) {
- case 1:
- return "bold";
- case 2:
- return "italic";
- case 3:
- return "bolditalic";
- default:
- return "plain";
- }
- }
-
- static {
- 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");
-
- try {
- File var5 = null;
- if (var3 != null) {
- var5 = new File(var0 + File.separator + "lib" + File.separator + "font.properties." + var2 + "_" + var3 + "_" + var4);
- if (var5 == null || !var5.canRead()) {
- var5 = new File(var0 + File.separator + "lib" + File.separator + "font.properties." + var2 + "_" + var3);
- }
- }
-
- if (var5 == null || !var5.canRead()) {
- var5 = new File(var0 + File.separator + "lib" + File.separator + "font.properties." + var2 + "_" + var4);
- if (var5 == null || !var5.canRead()) {
- var5 = new File(var0 + File.separator + "lib" + File.separator + "font.properties." + var2);
- }
-
- if (!var5.canRead()) {
- var5 = new File(var0 + File.separator + "lib" + File.separator + "font.properties");
- if (!var5.canRead()) {
- if (var3 != null) {
- var5 = new File(var1 + File.separator + "lib" + File.separator + "font.properties." + var2 + "_" + var3 + "_" + var4);
- if (var5 == null || !var5.canRead()) {
- var5 = new File(var1 + File.separator + "lib" + File.separator + "font.properties." + var2 + "_" + var3);
- }
- }
-
- if (!var5.canRead()) {
- var5 = new File(var1 + File.separator + "font.properties." + var2 + "_" + var4);
- if (var5 == null || !var5.canRead()) {
- var5 = new File(var1 + File.separator + "font.properties." + var2);
- }
-
- if (!var5.canRead()) {
- var5 = new File(var1 + File.separator + "font.properties");
- if (!var5.canRead()) {
- throw new Exception();
- }
- }
- }
- }
- }
- }
-
- Properties var6 = new Properties();
- ((Hashtable)var6).put("serif.0", "unknown");
- ((Hashtable)var6).put("sansserif.0", "unknown");
- ((Hashtable)var6).put("monospaced.0", "unknown");
- ((Hashtable)var6).put("dialog.0", "unknown");
- ((Hashtable)var6).put("dialoginput.0", "unknown");
- fprops = new Properties(var6);
- BufferedInputStream var7 = new BufferedInputStream(new FileInputStream(var5.getPath()));
- fprops.load(var7);
- ((InputStream)var7).close();
- } catch (Exception var8) {
- }
- }
- }
- }
-