in freemarker-docgen-core/src/main/java/org/freemarker/docgen/core/FileUtil.java [299:342]
public static Pattern globToRegexp(String text) {
StringBuilder sb = new StringBuilder();
if (!text.startsWith("/")) {
text = "/" + text;
}
if (text.endsWith("/")) {
text += "**";
}
char[] chars = text.toCharArray();
int ln = chars.length;
for (int i = 0; i < ln; i++) {
char c = chars[i];
if (c == '\\' || c == '^' || c == '.' || c == '$' || c == '|'
|| c == '(' || c == ')' || c == '[' || c == ']'
|| c == '+' || c == '{'
|| c == '}' || c == '@') {
sb.append('\\');
sb.append(c);
} else if (i == 0 && ln > 2
&& chars[0] == '*' && chars[1] == '*'
&& chars[2] == '/') {
sb.append(".*/");
i += 2;
} else if (c == '/' && i + 2 < ln
&& chars[i + 1] == '*' && chars[i + 2] == '*') {
if (i + 3 == ln) {
sb.append("/.*");
} else {
sb.append("(/.*)?");
}
i += 2;
} else if (c == '*') {
sb.append("[^/]*");
} else if (c == '?') {
sb.append("[^/]");
} else {
sb.append(c);
}
}
return Pattern.compile(sb.toString());
}