All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fr.inria.edelweiss.rif.javacc.EscapeUtils Maven / Gradle / Ivy

The newest version!
/**
 * 
 */
package fr.inria.edelweiss.rif.javacc;

/**
 * Some tools to deal with escaped characters in input stream to parse
 */
public final class EscapeUtils {
	public static String unescape(String escapedString) {
		StringBuffer unescapedString = new StringBuffer(escapedString.length());
		StringBuffer unicodeCache = new StringBuffer(8);
		boolean escaped = false, isUnicode = false;
		for (int i = 0; i < escapedString.length(); i++) {
			char current = escapedString.charAt(i);
			if (isUnicode) {
				// If we just hit a backslash-u
				if (Character.isLetterOrDigit(current)) {
					unicodeCache.append(current);
				} else {
					unescapedString.append((char) Integer.parseInt(unicodeCache.toString(), 16));
					unicodeCache.setLength(0);
					unicodeCache.setLength(8);
					isUnicode = false;
				}
			} else if (escaped) {
				// If we just hit a backslash
				switch (current) {
					case '\\':
						unescapedString.append('\\');
						break;
					case 't':
						unescapedString.append('\t');
						break;
					case 'b':
						unescapedString.append('\b');
						break;
					case 'n':
						unescapedString.append('\n');
						break;
					case 'r':
						unescapedString.append('\r');
						break;
					case 'f':
						unescapedString.append('\f');
						break;
					case '"':
						unescapedString.append('"');
						break;
					case '\'':
						unescapedString.append('\'');
						break;
					case 'u':
						isUnicode = true;
				}
				escaped = false;
			} else {				
				// Normal behavior
				switch (current) {
					case '\\':
						escaped = true;
						break;
					default:
						unescapedString.append(current);
				}
			}
		}
		return unescapedString.toString();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy