113 lines
3.7 KiB
Java
113 lines
3.7 KiB
Java
/*
|
|
* Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation. Oracle designates this
|
|
* particular file as subject to the "Classpath" exception as provided
|
|
* by Oracle in the LICENSE file that accompanied this code.
|
|
*
|
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
* questions.
|
|
*/
|
|
|
|
|
|
/*
|
|
* The Original Code is HAT. The Initial Developer of the
|
|
* Original Code is Bill Foote, with contributions from others
|
|
* at JavaSoft/Sun.
|
|
*/
|
|
|
|
package com.sun.tools.hat.internal.util;
|
|
import java.util.*;
|
|
|
|
/**
|
|
* Miscellaneous functions I couldn't think of a good place to put.
|
|
*
|
|
* @author Bill Foote
|
|
*/
|
|
|
|
|
|
public class Misc {
|
|
|
|
private static char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7',
|
|
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
|
|
|
|
public final static String toHex(int addr) {
|
|
char[] buf = new char[8];
|
|
int i = 0;
|
|
for (int s = 28; s >= 0; s -= 4) {
|
|
buf[i++] = digits[(addr >> s) & 0xf];
|
|
}
|
|
return "0x" + new String(buf);
|
|
}
|
|
|
|
public final static String toHex(long addr) {
|
|
return "0x" + Long.toHexString(addr);
|
|
}
|
|
|
|
public final static long parseHex(String value) {
|
|
long result = 0;
|
|
if (value.length() < 2 || value.charAt(0) != '0' ||
|
|
value.charAt(1) != 'x') {
|
|
return -1L;
|
|
}
|
|
for(int i = 2; i < value.length(); i++) {
|
|
result *= 16;
|
|
char ch = value.charAt(i);
|
|
if (ch >= '0' && ch <= '9') {
|
|
result += (ch - '0');
|
|
} else if (ch >= 'a' && ch <= 'f') {
|
|
result += (ch - 'a') + 10;
|
|
} else if (ch >= 'A' && ch <= 'F') {
|
|
result += (ch - 'A') + 10;
|
|
} else {
|
|
throw new NumberFormatException("" + ch
|
|
+ " is not a valid hex digit");
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
public static String encodeHtml(String str) {
|
|
final int len = str.length();
|
|
StringBuffer buf = new StringBuffer();
|
|
for (int i = 0; i < len; i++) {
|
|
char ch = str.charAt(i);
|
|
if (ch == '<') {
|
|
buf.append("<");
|
|
} else if (ch == '>') {
|
|
buf.append(">");
|
|
} else if (ch == '"') {
|
|
buf.append(""");
|
|
} else if (ch == '\'') {
|
|
buf.append("'");
|
|
} else if (ch == '&') {
|
|
buf.append("&");
|
|
} else if (ch < ' ') {
|
|
buf.append("&#" + Integer.toString(ch) + ";");
|
|
} else {
|
|
int c = (ch & 0xFFFF);
|
|
if (c > 127) {
|
|
buf.append("&#" + Integer.toString(c) + ";");
|
|
} else {
|
|
buf.append(ch);
|
|
}
|
|
}
|
|
}
|
|
return buf.toString();
|
|
}
|
|
}
|