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(s.get(i)) && isRoundBracketed(get(s, i+1))) j = i+2; else j = smartIndexOfAny(s, i, ".", "?", "!")+1; addIfNempty(l, trimJoinSubList(s, i, j)); i = j; } ret l; }