in freemarker-docgen-core/src/main/java/org/freemarker/docgen/core/BashCommandLineArgsParser.java [54:100]
private String fetchArg() {
StringBuilder arg = new StringBuilder();
int startPos = pos;
char openedQuote = 0;
boolean escaped = false;
while (pos < src.length()) {
char c = src.charAt(pos);
// Get rid of Windows and Mac line-breaks:
if (c == '\r') {
if (pos + 1 < src.length()) {
if (src.charAt(pos + 1) == '\n') {
pos++;
}
}
c = '\n';
}
if (escaped) {
if (openedQuote == '"' && !(c == '"' || c == '\\' || c == '$' || c == '\n')) {
arg.append('\\');
arg.append(c);
} else if (c != '\n') { // Otherwise it's an escaped line-break, so we just drop it to join lines.
arg.append(c);
}
escaped = false;
} else {
if (c == '"' || c == '\'') {
if (openedQuote == 0) {
openedQuote = c;
} else if (openedQuote == c) {
openedQuote = 0;
} else {
arg.append(c);
}
} else if (c == '\\' && openedQuote != '\'') {
escaped = true;
} else if (openedQuote == 0 && isWS(c)) {
break;
} else {
arg.append(c);
}
}
pos++;
}
return startPos != pos ? arg.toString() : null;
}