home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1999 November / PCONLINE_11_99.ISO / filesbbs / OS2 / APCHSSL2.ZIP / OS2HTTPD / jserv / com / netscape / javascript / NativeGlobal.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-09  |  6.0 KB  |  322 lines

  1. package com.netscape.javascript;
  2.  
  3. import java.io.IOException;
  4. import java.io.StringReader;
  5.  
  6. public class NativeGlobal {
  7.    private static int URL_XALPHAS = 1;
  8.    private static int URL_XPALPHAS = 2;
  9.    private static int URL_PATH = 4;
  10.    // $FF: synthetic field
  11.    private static Class class$com$netscape$javascript$NativeGlobal;
  12.  
  13.    public static Object isNaN(Context var0, Scriptable var1, Object[] var2, Function var3) {
  14.       if (var2.length < 1) {
  15.          return Boolean.TRUE;
  16.       } else {
  17.          double var4 = ScriptRuntime.toNumber(var2[0]);
  18.          return var4 != var4 ? Boolean.TRUE : Boolean.FALSE;
  19.       }
  20.    }
  21.  
  22.    public static Object parseInt(String var0, int var1) {
  23.       int var2 = var0.length();
  24.       if (var2 == 0) {
  25.          return ScriptRuntime.NaNobj;
  26.       } else {
  27.          boolean var3 = false;
  28.          int var4 = 0;
  29.  
  30.          char var5;
  31.          do {
  32.             var5 = var0.charAt(var4);
  33.             if (!Character.isWhitespace(var5)) {
  34.                break;
  35.             }
  36.  
  37.             ++var4;
  38.          } while(var4 < var2);
  39.  
  40.          if (var5 == '+' || (var3 = var5 == '-')) {
  41.             ++var4;
  42.          }
  43.  
  44.          boolean var6 = true;
  45.          if (var1 == 0) {
  46.             var1 = -1;
  47.          } else {
  48.             if (var1 < 2 || var1 > 36) {
  49.                return ScriptRuntime.NaNobj;
  50.             }
  51.  
  52.             if (var1 == 16 && var2 - var4 > 1 && var0.charAt(var4) == '0') {
  53.                var5 = var0.charAt(var4 + 1);
  54.                if (var5 == 'x' || var5 == 'X') {
  55.                   var4 += 2;
  56.                }
  57.             }
  58.          }
  59.  
  60.          if (var1 == -1) {
  61.             var1 = 10;
  62.             if (var2 - var4 > 1 && var0.charAt(var4) == '0') {
  63.                var5 = var0.charAt(var4 + 1);
  64.                if (var5 != 'x' && var5 != 'X') {
  65.                   var1 = 8;
  66.                   ++var4;
  67.                } else {
  68.                   var1 = 16;
  69.                   var4 += 2;
  70.                }
  71.             }
  72.          }
  73.  
  74.          double var7 = ScriptRuntime.stringToNumber(var0, var4, var1);
  75.          return new Double(var3 ? -var7 : var7);
  76.       }
  77.    }
  78.  
  79.    public static Object parseFloat(Context var0, Scriptable var1, Object[] var2, Function var3) {
  80.       if (var2.length < 1) {
  81.          return ScriptRuntime.NaNobj;
  82.       } else {
  83.          String var4 = ScriptRuntime.toString(var2[0]);
  84.          int var5 = var4.length();
  85.          if (var5 == 0) {
  86.             return ScriptRuntime.NaNobj;
  87.          } else {
  88.             int var6;
  89.             char var7;
  90.             for(var6 = 0; TokenStream.isJSSpace(var7 = var4.charAt(var6)) && var6 + 1 < var5; ++var6) {
  91.             }
  92.  
  93.             int var8 = var6;
  94.             if (var7 == '+' || var7 == '-') {
  95.                ++var6;
  96.                var7 = var4.charAt(var6);
  97.             }
  98.  
  99.             if (var7 == 'I') {
  100.                if (var6 + 8 <= var5 && var4.substring(var6, var6 + 8).equals("Infinity")) {
  101.                   double var13 = var4.charAt(var8) == '-' ? Double.NEGATIVE_INFINITY : Double.POSITIVE_INFINITY;
  102.                   return new Double(var13);
  103.                } else {
  104.                   return ScriptRuntime.NaNobj;
  105.                }
  106.             } else {
  107.                int var9 = -1;
  108.  
  109.                label66:
  110.                for(int var10 = -1; var6 < var5; ++var6) {
  111.                   switch (var4.charAt(var6)) {
  112.                      case '+':
  113.                      case '-':
  114.                         if (var10 != var6 - 1) {
  115.                            break label66;
  116.                         }
  117.                         break;
  118.                      case '.':
  119.                         if (var9 != -1) {
  120.                            break label66;
  121.                         }
  122.  
  123.                         var9 = var6;
  124.                      case '0':
  125.                      case '1':
  126.                      case '2':
  127.                      case '3':
  128.                      case '4':
  129.                      case '5':
  130.                      case '6':
  131.                      case '7':
  132.                      case '8':
  133.                      case '9':
  134.                         break;
  135.                      case 'E':
  136.                      case 'e':
  137.                         if (var10 == -1) {
  138.                            var10 = var6;
  139.                            break;
  140.                         }
  141.                      default:
  142.                         break label66;
  143.                   }
  144.                }
  145.  
  146.                var4 = var4.substring(var8, var6);
  147.  
  148.                try {
  149.                   return Double.valueOf(var4);
  150.                } catch (NumberFormatException var11) {
  151.                   return ScriptRuntime.NaNobj;
  152.                }
  153.             }
  154.          }
  155.       }
  156.    }
  157.  
  158.    // $FF: synthetic method
  159.    private static Class class$(String var0) {
  160.       try {
  161.          return Class.forName(var0);
  162.       } catch (ClassNotFoundException var2) {
  163.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  164.       }
  165.    }
  166.  
  167.    public static Object unescape(Context var0, Scriptable var1, Object[] var2, Function var3) {
  168.       if (var2.length < 1) {
  169.          var2 = ScriptRuntime.padArguments(var2, 1);
  170.       }
  171.  
  172.       String var4 = ScriptRuntime.toString(var2[0]);
  173.       StringBuffer var5 = new StringBuffer();
  174.  
  175.       label45:
  176.       for(int var6 = 0; var6 < var4.length(); ++var6) {
  177.          char var7 = var4.charAt(var6);
  178.          if (var7 == '%' && var6 != var4.length() - 1) {
  179.             int var9;
  180.             int var10;
  181.             if (var4.charAt(var6 + 1) == 'u') {
  182.                var10 = var6 + 2;
  183.                var9 = var6 + 6;
  184.             } else {
  185.                var10 = var6 + 1;
  186.                var9 = var6 + 3;
  187.             }
  188.  
  189.             if (var9 > var4.length()) {
  190.                var5.append('%');
  191.             } else {
  192.                String var8 = var4.substring(var10, var9);
  193.  
  194.                for(int var11 = 0; var11 < var8.length(); ++var11) {
  195.                   if (!TokenStream.isXDigit(var8.charAt(var11))) {
  196.                      var5.append('%');
  197.                      continue label45;
  198.                   }
  199.                }
  200.  
  201.                var6 = var9 - 1;
  202.                var5.append(new Character((char)Integer.valueOf(var8, 16)));
  203.             }
  204.          } else {
  205.             var5.append(var7);
  206.          }
  207.       }
  208.  
  209.       return var5.toString();
  210.    }
  211.  
  212.    public static void init(Scriptable var0) throws PropertyException {
  213.       String[] var1 = new String[]{"eval", "parseInt", "parseFloat", "escape", "unescape", "isNaN", "isFinite"};
  214.       ScriptableObject var2 = (ScriptableObject)var0;
  215.       var2.defineFunctionProperties(var1, class$com$netscape$javascript$NativeGlobal != null ? class$com$netscape$javascript$NativeGlobal : (class$com$netscape$javascript$NativeGlobal = class$("com.netscape.javascript.NativeGlobal")), 2);
  216.       var2.defineProperty("NaN", ScriptRuntime.NaNobj, 2);
  217.       var2.defineProperty("Infinity", new Double(Double.POSITIVE_INFINITY), 2);
  218.       var2.defineProperty("undefined", Undefined.instance, 2);
  219.    }
  220.  
  221.    public static Object isFinite(Context var0, Scriptable var1, Object[] var2, Function var3) {
  222.       if (var2.length < 1) {
  223.          return Boolean.FALSE;
  224.       } else {
  225.          double var4 = ScriptRuntime.toNumber(var2[0]);
  226.          return var4 == var4 && var4 != Double.POSITIVE_INFINITY && var4 != Double.NEGATIVE_INFINITY ? Boolean.TRUE : Boolean.FALSE;
  227.       }
  228.    }
  229.  
  230.    public static Object eval(Context var0, Scriptable var1, Object[] var2, Function var3) throws JavaScriptException {
  231.       Object[] var4 = new Object[]{"eval"};
  232.       throw Context.reportRuntimeError(Context.getMessage("msg.cant.call.indirect", var4));
  233.    }
  234.  
  235.    public static Object evalSpecial(Context var0, Scriptable var1, Object var2, Object[] var3, String var4, int var5) throws JavaScriptException {
  236.       if (var3.length < 1) {
  237.          return Undefined.instance;
  238.       } else {
  239.          Object var6 = var3[0];
  240.          if (!(var6 instanceof String)) {
  241.             String var15 = Context.getMessage("msg.eval.nonstring", (Object[])null);
  242.             Context.reportWarning(var15);
  243.             return var6;
  244.          } else {
  245.             int[] var7 = new int[]{var5};
  246.             if (var4 == null) {
  247.                var4 = Context.getSourcePositionFromStack(var7);
  248.                if (var4 == null) {
  249.                   var4 = "<eval'ed string>";
  250.                   var7[0] = 1;
  251.                }
  252.             }
  253.  
  254.             try {
  255.                StringReader var8 = new StringReader((String)var6);
  256.                Object var9 = var0.getSecurityDomainForStackDepth(3);
  257.                int var10 = var0.getOptimizationLevel();
  258.                var0.setOptimizationLevel(-1);
  259.                Script var11 = var0.compileReader((Scriptable)null, var8, var4, var7[0], var9);
  260.                var0.setOptimizationLevel(var10);
  261.                if (var11 == null) {
  262.                   String var16 = Context.getMessage("msg.syntax", (Object[])null);
  263.                   throw new EvaluatorException(var16);
  264.                } else {
  265.                   InterpretedScript var12 = (InterpretedScript)var11;
  266.                   Object var13 = var12.call(var0, var1, (Scriptable)var2, (Object[])null);
  267.                   return var13;
  268.                }
  269.             } catch (IOException var14) {
  270.                throw new RuntimeException("unexpected io exception");
  271.             }
  272.          }
  273.       }
  274.    }
  275.  
  276.    public static Object escape(Context var0, Scriptable var1, Object[] var2, Function var3) {
  277.       char[] var4 = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
  278.       if (var2.length < 1) {
  279.          var2 = ScriptRuntime.padArguments(var2, 1);
  280.       }
  281.  
  282.       String var5 = ScriptRuntime.toString(var2[0]);
  283.       int var6 = URL_XALPHAS | URL_XPALPHAS | URL_PATH;
  284.       if (var2.length > 1) {
  285.          double var7 = ScriptRuntime.toNumber(var2[1]);
  286.          if (var7 != var7 || (double)(var6 = (int)var7) != var7 || (var6 & ~(URL_XALPHAS | URL_XPALPHAS | URL_PATH)) != 0) {
  287.             String var9 = Context.getMessage("msg.bad.esc.mask", (Object[])null);
  288.             Context.reportError(var9);
  289.             var6 = URL_XALPHAS | URL_XPALPHAS | URL_PATH;
  290.          }
  291.       }
  292.  
  293.       StringBuffer var10 = new StringBuffer();
  294.  
  295.       for(int var8 = 0; var8 < var5.length(); ++var8) {
  296.          char var11 = var5.charAt(var8);
  297.          if (var6 == 0 || (var11 < '0' || var11 > '9') && (var11 < 'A' || var11 > 'Z') && (var11 < 'a' || var11 > 'z') && var11 != '@' && var11 != '*' && var11 != '_' && var11 != '-' && var11 != '.' && (var11 != '/' && var11 != '+' || var6 <= 3)) {
  298.             if (var11 < 256) {
  299.                if (var11 == ' ' && var6 == URL_XPALPHAS) {
  300.                   var10.append('+');
  301.                } else {
  302.                   var10.append('%');
  303.                   var10.append(var4[var11 >> 4]);
  304.                   var10.append(var4[var11 & 15]);
  305.                }
  306.             } else {
  307.                var10.append('%');
  308.                var10.append('u');
  309.                var10.append(var4[var11 >> 12]);
  310.                var10.append(var4[(var11 & 3840) >> 8]);
  311.                var10.append(var4[(var11 & 240) >> 4]);
  312.                var10.append(var4[var11 & 15]);
  313.             }
  314.          } else {
  315.             var10.append(var11);
  316.          }
  317.       }
  318.  
  319.       return var10.toString();
  320.    }
  321. }
  322.