PercentEscaper.java 4.04 KB
package com.google.common.net;

import com.google.common.annotations.Beta;
import com.google.common.annotations.GwtCompatible;
import com.google.common.base.Preconditions;
import com.google.common.escape.UnicodeEscaper;

@Beta
@GwtCompatible
public final class PercentEscaper
  extends UnicodeEscaper
{
  private static final char[] a = { '+' };
  private static final char[] b = "0123456789ABCDEF".toCharArray();
  private final boolean c;
  private final boolean[] d;
  
  public PercentEscaper(String paramString, boolean paramBoolean)
  {
    Preconditions.checkNotNull(paramString);
    if (paramString.matches(".*[0-9A-Za-z].*")) {
      throw new IllegalArgumentException("Alphanumeric characters are always 'safe' and should not be explicitly specified");
    }
    paramString = String.valueOf(paramString).concat("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
    if ((paramBoolean) && (paramString.contains(" "))) {
      throw new IllegalArgumentException("plusForSpace cannot be specified when space is a 'safe' character");
    }
    this.c = paramBoolean;
    this.d = a(paramString);
  }
  
  private static boolean[] a(String paramString)
  {
    int k = 0;
    paramString = paramString.toCharArray();
    int m = paramString.length;
    int j = -1;
    int i = 0;
    while (i < m)
    {
      j = Math.max(paramString[i], j);
      i += 1;
    }
    boolean[] arrayOfBoolean = new boolean[j + 1];
    j = paramString.length;
    i = k;
    while (i < j)
    {
      arrayOfBoolean[paramString[i]] = true;
      i += 1;
    }
    return arrayOfBoolean;
  }
  
  public final String escape(String paramString)
  {
    Preconditions.checkNotNull(paramString);
    int j = paramString.length();
    int i = 0;
    for (;;)
    {
      String str = paramString;
      if (i < j)
      {
        int k = paramString.charAt(i);
        if ((k >= this.d.length) || (this.d[k] == 0)) {
          str = escapeSlow(paramString, i);
        }
      }
      else
      {
        return str;
      }
      i += 1;
    }
  }
  
  protected final char[] escape(int paramInt)
  {
    if ((paramInt < this.d.length) && (this.d[paramInt] != 0)) {
      return null;
    }
    if ((paramInt == 32) && (this.c)) {
      return a;
    }
    int i;
    if (paramInt <= 127)
    {
      i = b[(paramInt & 0xF)];
      return new char[] { '%', b[(paramInt >>> 4)], i };
    }
    int j;
    int k;
    if (paramInt <= 2047)
    {
      i = b[(paramInt & 0xF)];
      paramInt >>>= 4;
      j = b[(paramInt & 0x3 | 0x8)];
      paramInt >>>= 2;
      k = b[(paramInt & 0xF)];
      return new char[] { '%', b[(paramInt >>> 4 | 0xC)], k, '%', j, i };
    }
    int m;
    if (paramInt <= 65535)
    {
      i = b[(paramInt & 0xF)];
      paramInt >>>= 4;
      j = b[(paramInt & 0x3 | 0x8)];
      paramInt >>>= 2;
      k = b[(paramInt & 0xF)];
      paramInt >>>= 4;
      m = b[(paramInt & 0x3 | 0x8)];
      return new char[] { '%', 'E', b[(paramInt >>> 2)], '%', m, k, '%', j, i };
    }
    if (paramInt <= 1114111)
    {
      i = b[(paramInt & 0xF)];
      paramInt >>>= 4;
      j = b[(paramInt & 0x3 | 0x8)];
      paramInt >>>= 2;
      k = b[(paramInt & 0xF)];
      paramInt >>>= 4;
      m = b[(paramInt & 0x3 | 0x8)];
      paramInt >>>= 2;
      int n = b[(paramInt & 0xF)];
      paramInt >>>= 4;
      int i1 = b[(paramInt & 0x3 | 0x8)];
      return new char[] { '%', 'F', b[(paramInt >>> 2 & 0x7)], '%', i1, n, '%', m, k, '%', j, i };
    }
    throw new IllegalArgumentException(43 + "Invalid unicode character value " + paramInt);
  }
  
  protected final int nextEscapeIndex(CharSequence paramCharSequence, int paramInt1, int paramInt2)
  {
    Preconditions.checkNotNull(paramCharSequence);
    while (paramInt1 < paramInt2)
    {
      int i = paramCharSequence.charAt(paramInt1);
      if ((i >= this.d.length) || (this.d[i] == 0)) {
        break;
      }
      paramInt1 += 1;
    }
    return paramInt1;
  }
}


/* Location:              /home/merong/decompile/hackery-dex2jar.jar!/com/google/common/net/PercentEscaper.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       0.7.1
 */