FreeWRL/FreeX3D  3.0.0
FWHelper.java
1 package vrml;
2 import java.io.UnsupportedEncodingException;
3 
4 public class FWHelper {
5  static String base64alphabet =
6  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-.";
7  static byte[] revBase64;
8  static {
9  revBase64 = new byte['z'+1];
10  for (int i = 0; i < 64; i++) {
11  revBase64[base64alphabet.charAt(i)] = (byte) i;
12  }
13  }
14 
15  public static String base64encode(String str) {
16  byte[] utf8;
17  try {
18  utf8 = str.getBytes("UTF-8");
19  } catch (UnsupportedEncodingException ex) {
20  throw new InternalError(ex.toString());
21  }
22  StringBuffer sb = new StringBuffer((utf8.length+2)/3 * 4);
23  int i;
24  int len = utf8.length;
25  for (i = 0; i < len - 2; i += 3) {
26  int value = (utf8[i ] & 0xff) << 16
27  | (utf8[i+1] & 0xff) << 8
28  | (utf8[i+2] & 0xff);
29  sb.append(base64alphabet.charAt(value >> 18))
30  .append(base64alphabet.charAt((value >> 12) & 0x3f))
31  .append(base64alphabet.charAt((value >> 6) & 0x3f))
32  .append(base64alphabet.charAt(value & 0x3f));
33  }
34  if (i < len) {
35  int value = utf8[i++] & 0xff;
36  sb.append(base64alphabet.charAt(value >> 2));
37  if (i < len) {
38  value = (value << 8) + (utf8[i++] & 0xff);
39  sb.append(base64alphabet.charAt((value >> 4) & 0x3f));
40  sb.append(base64alphabet.charAt((value << 2) & 0x3f));
41  } else {
42  sb.append(base64alphabet.charAt((value << 4) & 0x3f));
43  sb.append('=');
44  }
45  sb.append('=');
46  }
47  return sb.toString();
48  }
49 
50  public static String base64decode(String str) {
51  int len = str.length();
52  if ((len & 3) != 0)
53  throw new IllegalArgumentException("Not Base64: "+str);
54  int padstart = str.indexOf('=', len - 3);
55  int padding = padstart == -1 ? 0 : len - padstart;
56  byte[] utf8 = new byte[len / 4 * 3];
57 
58  for (int i = 0; i < len / 4; i++) {
59  int value = (revBase64[str.charAt(4*i)] << 18)
60  + (revBase64[str.charAt(4*i+1)] << 12)
61  + (revBase64[str.charAt(4*i+2)] << 6)
62  + revBase64[str.charAt(4*i+3)];
63  utf8[3*i+0] = (byte) (value >> 16);
64  utf8[3*i+1] = (byte) (value >> 8);
65  utf8[3*i+2] = (byte) (value );
66  }
67  try {
68  return new String(utf8, 0, utf8.length - padding, "UTF-8");
69  } catch (UnsupportedEncodingException ex) {
70  throw new InternalError(ex.toString());
71  }
72  }
73 
77  public static String quote(String str) {
78  StringBuffer result = new StringBuffer("\"");
79  for (int i=0; i< str.length(); i++) {
80  char c;
81  switch (c = str.charAt(i)) {
82  case '\0':
83  result.append("\\0");
84  break;
85  case '\\':
86  result.append("\\\\");
87  break;
88  case '\"':
89  result.append("\\\"");
90  break;
91  default:
92  result.append(str.charAt(i));
93  }
94  }
95  return result.append("\"").toString();
96  }
97 
98  public static String nodeToString(BaseNode node) {
99  return node.getType() + "{" /*XXX*/ + "}";
100  }
101 }
102 
static String quote(String str)
This is the static method, that quotes a string.
Definition: FWHelper.java:77