2002/07/01 21:02:57
[org.ibex.core.git] / src / org / xwt / plat / POSIX.java
index 0be6ced..f8766ba 100644 (file)
@@ -52,14 +52,65 @@ public class POSIX extends GCJ {
     protected native void eventThread();
     private native void natInit();
 
-    /** returns the $BROWSER environment variable, since System.getenv() is useless */
-    private static native String getBrowserEnvString();
+    /** returns the $BROWSER environment variable, since System.getEnv() is useless */
+    private static native String getEnv(String key);
 
     /** spawns a process which is immune to SIGHUP */
     private static native void spawnChildProcess(String[] command);
 
+    protected synchronized HTTP.ProxyInfo _detectProxy() {
+
+        HTTP.ProxyInfo ret = new HTTP.ProxyInfo();
+
+        ret.httpProxyHost = getEnv("http_proxy");
+        if (ret.httpProxyHost != null) {
+            if (ret.httpProxyHost.startsWith("http://")) ret.httpProxyHost = ret.httpProxyHost.substring(7);
+            if (ret.httpProxyHost.endsWith("/")) ret.httpProxyHost = ret.httpProxyHost.substring(0, ret.httpProxyHost.length() - 1);
+            if (ret.httpProxyHost.indexOf(':') != -1) {
+                ret.httpProxyPort = Integer.parseInt(ret.httpProxyHost.substring(ret.httpProxyHost.indexOf(':') + 1));
+                ret.httpProxyHost = ret.httpProxyHost.substring(0, ret.httpProxyHost.indexOf(':'));
+            } else {
+                ret.httpProxyPort = 80;
+            }
+        }
+
+        ret.httpsProxyHost = getEnv("https_proxy");
+        if (ret.httpsProxyHost != null) {
+            if (ret.httpsProxyHost.startsWith("https://")) ret.httpsProxyHost = ret.httpsProxyHost.substring(7);
+            if (ret.httpsProxyHost.endsWith("/")) ret.httpsProxyHost = ret.httpsProxyHost.substring(0, ret.httpsProxyHost.length() - 1);
+            if (ret.httpsProxyHost.indexOf(':') != -1) {
+                ret.httpsProxyPort = Integer.parseInt(ret.httpsProxyHost.substring(ret.httpsProxyHost.indexOf(':') + 1));
+                ret.httpsProxyHost = ret.httpsProxyHost.substring(0, ret.httpsProxyHost.indexOf(':'));
+            } else {
+                ret.httpsProxyPort = 80;
+            }
+        }
+
+        ret.socksProxyHost = getEnv("socks_proxy");
+        if (ret.socksProxyHost != null) {
+            if (ret.socksProxyHost.startsWith("socks://")) ret.socksProxyHost = ret.socksProxyHost.substring(7);
+            if (ret.socksProxyHost.endsWith("/")) ret.socksProxyHost = ret.socksProxyHost.substring(0, ret.socksProxyHost.length() - 1);
+            if (ret.socksProxyHost.indexOf(':') != -1) {
+                ret.socksProxyPort = Integer.parseInt(ret.socksProxyHost.substring(ret.socksProxyHost.indexOf(':') + 1));
+                ret.socksProxyHost = ret.socksProxyHost.substring(0, ret.socksProxyHost.indexOf(':'));
+            } else {
+                ret.socksProxyPort = 80;
+            }
+        }
+
+        String noproxy = getEnv("no_proxy");
+        if (noproxy != null) {
+            StringTokenizer st = new StringTokenizer(noproxy, ",");
+            ret.excluded = new String[st.countTokens()];
+            for(int i=0; st.hasMoreTokens(); i++) ret.excluded[i] = st.nextToken();
+        }
+
+        if (ret.httpProxyHost == null && ret.socksProxyHost == null) return null;
+        return ret;
+    }
+
     protected void _newBrowserWindow(String url) {
-        String browserString = getBrowserEnvString();
+        String browserString = getEnv("BROWSER");
         if (browserString == null) {
             browserString = "netscape " + url;
         } else if (browserString.indexOf("%s") != -1) {
@@ -256,6 +307,7 @@ public class POSIX extends GCJ {
     public void initFonts() {
         // use the font list to build nativeFontList
         String[] fonts = listNativeFonts();
+
         for(int k=0; k<fonts.length; k++) {
             String s = fonts[k].toLowerCase();
             StringTokenizer st = new StringTokenizer(s, "-", false);
@@ -263,9 +315,16 @@ public class POSIX extends GCJ {
             
             try {
                 for(int i=0; st.hasMoreTokens(); i++) font[i] = st.nextToken();
+
+                // limit to iso8559 until we can do I18N properly....
+                if (font.length > 13) {
+                    if (!font[13].equals("iso8559")) continue;
+                    if (font.length < 15 || !font[14].equals("1")) continue;
+                }
+
                 String name = font[1];
                 String size = font[6];
-                String slant = font[3].equals("i") ? "i" : "";
+                String slant = (font[3].equals("i") || font[3].equals("o")) ? "i" : "";
                 String bold = font[2].equals("bold") ? "b" : "";
                 String tail = s.substring(1 + font[0].length() + 1 + font[1].length() + 1 + font[2].length() + 1 +
                                           font[3].length() + 1 + font[4].length() + 1);