/******************************************************************************* * Copyright (c) 2006 Sybase, Inc. and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Sybase, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.jst.jsf.common.ui.internal.utils; /** * TODO: this class doesn't seem to be in use * @author mengbo * @version 1.5 */ public final class UTF8Util { private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; /** * @param s * @return the unwound string */ public static String unwindEscapeChars(String s) { StringBuffer sb = new StringBuffer(s.length()); int length = s.length(); for (int i = 0; i < length; i++) { char c = s.charAt(i); sb.append(getUnwoundString(c)); } return sb.toString(); } private static String getUnwoundString(char c) { switch (c) { case '\b': return "\\b";//$NON-NLS-1$ case '\t': return "\\t";//$NON-NLS-1$ case '\n': return "\\n";//$NON-NLS-1$ case '\f': return "\\f";//$NON-NLS-1$ case '\r': return "\\r";//$NON-NLS-1$ // These can be used unescaped in properties file: case '\"': return "\\\"";//$NON-NLS-1$ case '\'': return "\\\'";//$NON-NLS-1$ case '\\': return "\\\\";//$NON-NLS-1$ case '=': return "\\=";//$NON-NLS-1$ // This is only done when writing to the .properties file in // #unwindValue(String) // case '!': // return "\\!";//$NON-NLS-1$ // case '#': // return "\\#";//$NON-NLS-1$ default: if (((c < 0x0020) || (c > 0x007e))) { return new StringBuffer().append('\\').append('u').append( toHex((c >> 12) & 0xF)).append(toHex((c >> 8) & 0xF)) .append(toHex((c >> 4) & 0xF)).append(toHex(c & 0xF)) .toString(); } return String.valueOf(c); } } private static char toHex(int halfByte) { return HEX_DIGITS[(halfByte & 0xF)]; } private UTF8Util() { // no instantiation } }