static L splitIntoSentences_v2(S s, O... _) { ret splitIntoSentences_v2_tok(nlTok3(s), _); } static Cl splitIntoSentences_v2_tok_endMarkers = litset(".", "?", "!"); static L splitIntoSentences_v2_tok(L s, O... _) { optPar Cl endMarkers = splitIntoSentences_v2_tok_endMarkers; int i = 0; new L l; while (i < l(s)) { int j; if (emptyAfterTrim(s.get(i)) && isRoundBracketed(get(s, i+1))) j = i+2; else j = smartIndexOfAny(s, i, endMarkers)+1; addIfNempty(l, trimJoinSubList(s, i, j)); i = j; } ret l; }