public List<String> splitUntil(final Predicate<Character> parseStopper, final Predicate<Character> tokenStopper, final boolean endIsDelim, final Character escapeChar, final boolean escapeDoubledStoppers) {
        final List<String> result = new ArrayList<>();
        while (ch != END_CHAR) {
            final Pair<String, Character> nextToken =
                    parseUntilWithDelim(c -> tokenStopper.test(c) || parseStopper.test(c), endIsDelim, escapeChar, escapeDoubledStoppers);
            if (nextToken == null) {
                break;
            }
            result.add(nextToken.first);
            if (parseStopper.test(nextToken.second)) {
                break;
            }
        }
        return result;
    }
Parses text until a 'stopper' char is reached. Places pos after this stopper char and returns parsed text.
Returns null if no stopper char is found

@param stopper               chars to stop parsing at
@param endIsDelim            if true, then 'end-of-expression' is treated like finding a stopper char
@param escapeChar            if not null, then characters escapced with this char will not be considered stopper chars but parsed as literal char
@param escapeDoubledStoppers if true, then doubled up stopper chars will not be considered stoppers but parsed as single literal chars
main/src/main/java/cgeo/geocaching/utils/TextParser.java