package jeql.syntax.util; public class StringLiteralUtil { public static String decodeRichString(String tokenImage) { // strip quotes String str = tokenImage.substring(2, tokenImage.length()-1); return decodeEscapedString(str); } public static String decodeRawString(String tokenImage) { return tokenImage.substring(2, tokenImage.length() - 1); } /** * Decodes a raw string supporting escaped quote. * No longer used. * * @param tokenImage * @return */ private static String OLDdecodeRawString(String tokenImage) { // strip quotes String val = tokenImage.substring(2, tokenImage.length() - 1); // only escape allowed is escape-quote if (val.indexOf("\\\"") < 0) { return val; } // convert escape-quotes StringBuffer buf = new StringBuffer(val.length()); int len = val.length(); for (int i = 0; i < len; i++) { char c = val.charAt(i); if (c != '\\') { buf.append(c); } else { // handle escaped-quote if (i < len - 1 && val.charAt(i + 1) == '"') { buf.append('"'); i++; } else { buf.append(c); } } } return buf.toString(); } public static String decodeEscapedString(String val) { // check for no escapes (simple case) if (val.indexOf("\\") < 0) { return val; } // convert escaped chars StringBuffer buf = new StringBuffer(val.length()); int len = val.length(); for (int i = 0; i < len; i++) { char c = val.charAt(i); // escaped char if (c == '\\') { i++; c = unescape(val.charAt(i)); } buf.append(c); } return buf.toString(); } private static char unescape(char c) { switch (c) { case '"': return '"'; case '\'': return '\''; case '\\': return '\\'; case 'b': return '\b'; case 't': return '\t'; case 'n': return '\n'; case 'r': return '\r'; case 'f': return '\f'; } // MD - is this right? Or throw an error? return c; } }