public static java.util.List<RDNEntry> parse(String data) throws ParseException { java.util.List<RDNEntry> results = new java.util.LinkedList<>(); RDNEntry current = new RDNEntry(); ParseState state = new ParseState(); state.data = data; state.pos = 0; while (state.pos < state.data.length()) { eatWhite(state); if (state.pos < state.data.length() && state.data.charAt(state.pos) == '!') { if (!current.rdn.isEmpty()) { throw new ParseException("negation symbol '!' must appear at start of list"); } ++state.pos; current.negate = true; } current.rdn.add(parseNameComponent(state)); eatWhite(state); if (state.pos < state.data.length() && state.data.charAt(state.pos) == ',') { ++state.pos; } else if (state.pos < state.data.length() && state.data.charAt(state.pos) == ';') { ++state.pos; results.add(current); current = new RDNEntry(); } else if (state.pos < state.data.length()) { throw new ParseException( "expected ',' or ';' at `" + state.data.substring(state.pos) + "'"); } } if (!current.rdn.isEmpty()) { results.add(current); } return results; }
public static java.util.List<RDNPair> parseStrict(String data) throws ParseException { java.util.List<RDNPair> results = new java.util.LinkedList<>(); ParseState state = new ParseState(); state.data = data; state.pos = 0; while (state.pos < state.data.length()) { results.add(parseNameComponent(state)); eatWhite(state); if (state.pos < state.data.length() && (state.data.charAt(state.pos) == ',' || state.data.charAt(state.pos) == ';')) { ++state.pos; } else if (state.pos < state.data.length()) { throw new ParseException( "expected ',' or ';' at `" + state.data.substring(state.pos) + "'"); } } return results; }