java/ch/wlkl/env/Ut.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package ch.wlkl.env;
import static ch.wlkl.env.Env.dy;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* @author walter
*/
public class Ut {
public final static Pattern spacePlus = Pattern.compile("\\s+");
final private static Matcher xQuoteMatcher = Pattern.compile("[^\"\\\\\n]+").matcher("");
public static String xUnquote(String src) {
if (src == null || src.length() <= 1)
dy("cannot unquote this string: <" + src + ">");
StringBuilder buf = new StringBuilder("");
final char qu = src.charAt(0);
char c = 0;
int sx = 1, qx = 0, bx = 0;
while (true) {
if (qx < sx)
if ((qx = src.indexOf(qu, sx)) < 0)
qx = src.length();
if (bx < sx)
if ((bx = src.indexOf('\\', sx)) < 0)
bx = src.length();
if (bx < qx) {
if (bx + 1>= src.length())
dy("backslash at end of String: <" + src + ">");
buf.append(src, sx, bx).append((c = src.charAt(bx+1)) == 'n' ? '\n' : c == 't' ? 't' : c);
sx = bx+2;
} else {
if (qx + 1 == src.length())
return buf.append(src, sx, qx).toString();
else
dy("quote within String: <" + src + ">");
}
}
}
public static String xQuote(String src) {
if (src == null)
return "\"\"";
StringBuffer buf = new StringBuffer("\"");
int nx = 0;
xQuoteMatcher.reset(src);
while (true) {
if (xQuoteMatcher.lookingAt()) {
buf.append(xQuoteMatcher.group());
nx = xQuoteMatcher.end();
}
if (nx >= src.length())
return buf.append('"').toString();
buf.append('\\').append(src.charAt(nx) == '\n' ? 'n' : src.charAt(nx));
xQuoteMatcher.region(++nx, src.length());
}
}
public static String fill(String rep, int len) {
StringBuffer b = new StringBuffer(rep == null || rep.equals("") ? " " : rep);
while (b.length() < len)
b.append(b);
return b.substring(0, len);
}
public static <T extends ArrayList> T[] clone2(T[] s) {
T[] c = s.clone();
for (int i = 0; i < c.length; i++) {
if (c[i] != null) {
c[i] = (T) c[i].clone();
}
}
return c;
}
public static <T> T[] array(T... eles) {
return eles;
}
public static <T, C extends Collection<T>, U extends T> C add(C l, U... eles) {
for(T e: eles)
l.add(e);
return l;
}
public static <C extends Collection<String>> C addWords(C l, String s) {
return add(l, spacePlus.split(s));
}
public static <T> List<T> list(T... eles) {
T n = (T) new Object();
return add(new ArrayList<T>(), eles);
}
static StringBuilder spaces = new StringBuilder(" ");
public static CharSequence spaces(int l) {
while (l >= spaces.length())
spaces.append(spaces);
return spaces.subSequence(0, l);
}
}