package com.smtscript.lib;
import java.io.ByteArrayOutputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.reflect.Field;
import java.net.URLDecoder;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.NativeArray;
import org.mozilla.javascript.NativeFunction;
import org.mozilla.javascript.NativeObject;
import org.mozilla.javascript.Wrapper;
import com.smtscript.utils.Json;
import com.smtscript.utils.SMTStatic;
import com.smtscript.utils.SMTStatic.StringNamedFormat;
public class JSStaticString extends JSStaticAbstract
{
private static Pattern _patTime2Second = Pattern.compile("^(\\d+)\\:(\\d+)(?:\\:(\\d+))?");
public String decodeURL(String str) throws Exception
{
return URLDecoder.decode(str, "UTF-8");
}
public String toUpperCase(String str)
{
return str.toUpperCase();
}
public String toLowerCase(String str)
{
return str.toLowerCase();
}
public String trim(String str)
{
return str.trim();
}
public int length(String str)
{
return str.length();
}
public boolean startWith(String str, String prefix)
{
return str.startsWith(prefix);
}
public boolean endWith(String str, String suffix)
{
return str.endsWith(suffix);
}
public String replace(String str, String...replaces)
{
for(int i = 0; i < replaces.length; i += 2)
{
str = str.replace(replaces[i + 0], replaces[i + 1]);
}
return str;
}
public NativeArray splitLine(String str)
{
String[] sp = str.replace("\r", "").split("\n", -1);
return new NativeArray(sp);
}
public String join(NativeArray arr, String joinStr)
{
StringBuilder sb = new StringBuilder();
if(arr.size() > 0)
{
sb.append(arr.get(0).toString());
for(int i = 1; i < arr.size(); i ++)
{
if(joinStr.length() > 0)
sb.append(joinStr);
sb.append(arr.get(i).toString());
}
}
return sb.toString();
}
public NativeArray split(String str, String split)
{
String[] sp = str.split(split);
return new NativeArray(sp);
}
public NativeArray split(String str, String split, int limit)
{
String[] sp = str.split(split, limit);
return new NativeArray(sp);
}
public String md5(String str, String encode, boolean lowcase) throws Exception
{
// 初始化md5引擎
MessageDigest m = MessageDigest.getInstance("MD5");
m.update(str.getBytes(encode));
byte sign[] = m.digest();
StringBuilder sbSign = new StringBuilder();
for(byte c : sign)
{
sbSign.append(String.format(lowcase ? "%02x" : "%02X", c));
}
return sbSign.toString();
}
public String printfs(String fmt, String[] sargs) throws Exception
{
Object[] oargs = new Object[sargs.length];
for(int i = 0; i < sargs.length; i ++)
{
String value = sargs[i].substring(1);
switch(sargs[i].charAt(0))
{
case 'S':
oargs[i] = value;
break;
case 'I':
oargs[i] = Integer.parseInt(value);
break;
case 'L':
oargs[i] = Long.parseLong(value);
break;
case 'D':
oargs[i] = Double.parseDouble(value);
break;
default:
throw new Exception("con't conv type : " + sargs[i]);
}
}
return String.format(fmt, oargs);
}
public String printf(String fmt, Object...args)
{
return String.format(fmt, args);
}
@JSComment(
"
\n" +
"@param args - \n" +
" array : array params\n" +
" map : named map params params\n" +
" function(name): named function params params\n" +
"
"
)
public String format(String fmt, Object...args)
{
final Context[] cx = new Context[]{null};
try
{
if(args.length == 0)
return fmt;
List