package org.jbehave.eclipse.util;
import static org.jbehave.eclipse.util.IO.CR;
import static org.jbehave.eclipse.util.IO.LF;
import java.util.Collection;
import java.util.regex.Pattern;
public class Strings {
public static String[] array(String... args) {
return args;
}
public static String substringUntilOffset(String text, int offset) {
String analyzedPart = text
.substring(0, Math.min(offset, text.length()));
String[] lines = analyzedPart.split("[\\n\\r]+");
int lineNo = lines.length - 1;
return lines[lineNo];
}
public static String escapeNL(String token) {
return token.replace("\n", "\\n").replace("\r", "\\r");
}
public static String[] toArray(Collection<String> values) {
if (values == null)
return new String[0];
return values.toArray(new String[values.size()]);
}
public static boolean startsWithSame(CharSequence sequence,
CharSequence prefix) {
int len = Math.min(sequence.length(), prefix.length());
for (int i = 0; i < len; i++) {
if (sequence.charAt(i) != prefix.charAt(i))
return false;
}
// still there
return true;
}
public static boolean startsWith(CharSequence sequence, CharSequence prefix) {
int slen = sequence.length();
int plen = prefix.length();
if (slen < plen)
return false;
return startsWithSame(sequence, prefix);
}
public static String removeLeadingSpaces(String string) {
if (string == null)
return null;
int len = string.length();
int st = 0;
while ((st < len) && (string.charAt(st) == ' ')) {
st++;
}
return (st > 0) ? string.substring(st) : string;
}
public static String removeTrailingNewlines(String string) {
if (string == null)
return null;
int index = string.length();
while (index > 0) {
index--;
char c = string.charAt(index);
if (c == CR || c == LF)
continue;
else {
index++;
break;
}
}
if (index < string.length())
return string.substring(0, index);
else
return string;
}
public static String times(int count, String what) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < count; i++) {
builder.append(what);
}
return builder.toString();
}
public static Pattern convertGlobToPattern(String line) {
return Pattern.compile(convertGlobToRegex(line));
}
public static String convertGlobToRegex(String line) {
line = line.trim();
int strLen = line.length();
StringBuilder sb = new StringBuilder(strLen);
boolean escaping = false;
int inCurlies = 0;
for (char currentChar : line.toCharArray()) {
switch (currentChar) {
case '*':
if (escaping)
sb.append("\\*");
else
sb.append(".*");
escaping = false;
break;
case '?':
if (escaping)
sb.append("\\?");
else
sb.append('.');
escaping = false;
break;
case '.':
case '(':
case ')':
case '+':
case '|':
case '^':
case '$':
case '@':
case '%':
sb.append('\\');
sb.append(currentChar);
escaping = false;
break;
case '\\':
if (escaping) {
sb.append("\\\\");
escaping = false;
} else
escaping = true;
break;
case '{':
if (escaping) {
sb.append("\\{");
} else {
sb.append('(');
inCurlies++;
}
escaping = false;
break;
case '}':
if (inCurlies > 0 && !escaping) {
sb.append(')');
inCurlies--;
} else if (escaping)
sb.append("\\}");
else
sb.append("}");
escaping = false;
break;
case ',':
if (inCurlies > 0 && !escaping) {
sb.append('|');
} else if (escaping)
sb.append("\\,");
else
sb.append(",");
break;
default:
escaping = false;
sb.append(currentChar);
}
}
return sb.toString();
}
public static int indexOf(CharSequence sequence, char c) {
final int len = sequence.length();
for (int i = 0; i < len; i++) {
if (sequence.charAt(i) == c)
return i;
}
return -1;
}
}