!7 cmodule WordAutoSplitter { S typingText, text, html; enhanceFrame { minFrameSize(f, 300, 300); } visualize { ret northAndCenterWithMargins(dm_bigInputAndSubmit('typingText, "Split", rThread { setText(typingText) }), fontSizePlus(5, dm_centeredLabel('html))); } void setText(S text) enter { setField(+text); NavigableSet words = asCISet((LS) dm_call(dm_actualWordsCRUD(), 'actualWords)); new LS out; S s = text; for (S part : prefixesInCISet(words, s)) out.add(part + " " + unicode_middleDot() + " " + substring(s, l(part))); sortByCalculatedFieldDesc_inPlace(out, func(S s) -> bool { contains(words, afterLastSpace(s)) }); setField(html := jlabel_textAsHTML_center(lines_rtrim(out)); } }