static L paragraphsFromText(S text) { L lines = toLinesTrim2(text); L> paragraphs = paragraphsFromText_groupParagraphs(lines); ret map(paragraphs, func(L p) { fromLines(p) }); } static L> paragraphsFromText_groupParagraphs(L lines) { ret groupNonEmpty(lines, func(S line) { empty(line) }); }