package org.jbehave.eclipse.parser;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jbehave.eclipse.util.New;
public class RegexUtils {
public static Pattern EXAMPLE_TABLE_PATTERN = Pattern.compile("^\\s*\\|([^-]|\\-[^-]*)", Pattern.MULTILINE);
public static boolean containsExampleTable(String content) {
return EXAMPLE_TABLE_PATTERN.matcher(content).find();
}
public interface TokenizerCallback {
void token(int startOffset, int endOffset, String token, boolean isDelimiter);
}
public static Pattern LINE_PATTERN = Pattern.compile("[\r\n]+");
public static void splitLine(String input, TokenizerCallback callback) {
tokenize(LINE_PATTERN, input, callback);
}
public static void tokenize(Pattern pattern, String input, TokenizerCallback callback) {
Matcher matcher = pattern.matcher(input);
int index = 0;
while(matcher.find()) {
int start = matcher.start();
int end = matcher.end();
if(start>index) {
callback.token(index, start, input.substring(index, start), false);
}
callback.token(start, end, input.substring(start, end), true);
index = end;
}
if(index<input.length()){
callback.token(index, input.length(), input.substring(index), false);
}
}
public static Pattern COMMENT_PATTERN = Pattern.compile("^\\s*!--\\s[^\r\n]*[\r\n]{0,2}", Pattern.MULTILINE);
public static String removeComment(String input) {
return COMMENT_PATTERN.matcher(input).replaceAll("");
}
public static String removeTrailingComment(String input) {
class Token {
String content;
boolean isDelimiter;
public Token(String content, boolean isDelimiter) {
this.content = content;
this.isDelimiter = isDelimiter;
}
}
final List<Token> tokens = New.arrayList();
tokenize(COMMENT_PATTERN, input, new TokenizerCallback() {
public void token(int startOffset, int endOffset, String token, boolean isDelimiter) {
tokens.add(new Token(token, isDelimiter));
}
});
int lastIndex = tokens.size()-1;
for(;lastIndex>=0;lastIndex--) {
if(!tokens.get(lastIndex).isDelimiter){
break;
}
}
if(lastIndex == tokens.size()-1){
// nothing to remove, return as is
return input;
}
StringBuilder builder = new StringBuilder ();
for(int i=0;i<=lastIndex;i++){
builder.append(tokens.get(i).content);
}
return builder.toString();
}
}