private String fetchArg()

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;
    }