protected void calculateFolding(String input) {
// TODO replace this parsing by getting this input from the parsed rule file
final List<Position> positions = new ArrayList<Position>();
Matcher matcher = RULE_PATTERN.matcher(input);
while (matcher.find()) {
positions.add(new Position(matcher.start(1), matcher.end(1) - matcher.start(1)));
}
matcher = QUERY_PATTERN.matcher(input);
while (matcher.find()) {
positions.add(new Position(matcher.start(1), matcher.end(1) - matcher.start(1)));
}
matcher = TEMPLATE_PATTERN.matcher(input);
while (matcher.find()) {
positions.add(new Position(matcher.start(1), matcher.end(1) - matcher.start(1)));
}
matcher = IMPORT_PATTERN.matcher(input);
while (matcher.find()) {
positions.add(new Position(matcher.start(1), matcher.end(1) - matcher.start(1)));
}
matcher = FUNCTION_PATTERN.matcher(input);
while (matcher.find()) {
int start = matcher.start(1);
// TODO also take comments, strings etc. in consideration
// use JavaPairMatcher or similar
int nbOpenBrackets = 1;
for (int i = matcher.end(); i < input.length(); i++) {
if (input.charAt(i) == '{') {
nbOpenBrackets++;
} else if (input.charAt(i) == '}') {
if (--nbOpenBrackets == 0) {
positions.add(new Position(start, i - start + 1));
break;
}
}
}
}