/** * Implements the CFML Function jsstringformat */ package railo.runtime.functions.string; import railo.runtime.PageContext; import railo.runtime.ext.function.Function; public final class JSStringFormat implements Function { public static String call(PageContext pc , String str) { return invoke(str); } public static String invoke(String str) { int len=str.length(); StringBuffer rtn=new StringBuffer(len+10); //char[] arr=str.toCharArray(); //StringBuffer rtn=new StringBuffer(arr.length); char c; for(int i=0;i<len;i++) { c=str.charAt(i); switch(c) { case '\\': rtn.append("\\\\"); break; case '\n': rtn.append("\\n"); break; case '\r': rtn.append("\\r"); break; case '\f': rtn.append("\\f"); break; case '\b': rtn.append("\\b"); break; case '\t': rtn.append("\\t"); break; case '"' : rtn.append("\\\""); break; case '\'': rtn.append("\\\'"); break; default : rtn.append(c); break; } } return rtn.toString(); } public static String callx(PageContext pc , String jsString) {// MUST ???? int len=jsString.length(); //StringBuffer sb=new StringBuffer(len); int plus=0; for(int pos=0;pos<len;pos++) { char chr = jsString.charAt(pos); switch(chr){ case '\\': case '\n': case '\r': case '\f': case '\b': case '\t': case '"' : case '\'': plus++; break; } } if(plus==0) return jsString; char[] chars=new char[len+plus]; int count=0; for(int pos=0;pos<len;pos++) { char chr = jsString.charAt(pos); switch(chr){ case '\\': chars[count++]='\\'; chars[count++]='\\'; break; case '\'': chars[count++]='\\'; chars[count++]='\''; break; case '"': chars[count++]='\\'; chars[count++]='"'; break; case '\n': chars[count++]='\\'; chars[count++]='n'; break; case '\r': chars[count++]='\\'; chars[count++]='r'; break; case '\f': chars[count++]='\\'; chars[count++]='f'; break; case '\b': chars[count++]='\\'; chars[count++]='b'; break; case '\t': chars[count++]='\\'; chars[count++]='t'; break; default: chars[count++]=chr; break; } } return new String(chars); } }