static L splitIntoSentences_v2(S s) { ret splitIntoSentences_v2_tok(nlTok3(s)); } static L splitIntoSentences_v2_tok(L s) { int i = 0; new L l; while (i < l(s)) { int j; if (emptyAfterTrim(l.get(i)) && isRoundBracketed(get(l, i+1))) j = i+2; else j = smartIndexOfAny(s, i, ".", "?")+1; addIfNempty(l, trim(join(subList(s, i, j)))); i = j; } ret l; }