!7 sclass InputGrouper > DynPrintLog { InputChooser inputChooser = new(this); transient Set phrases; start { dm_onTopInput(r update); } visualize { ret northAndCenter(wrap(inputChooser), super.visualize()); } void update { if (inputChooser.update()) { S s = inputChooser.input(); phrases = getPhrases(); print("< " + s); print("> " + join(mapCodeTokens curlyBraceIfMoreThanOneToken(ai_tok_combinePhrases(javaTok(s), func(S s) { contains(phrases, s) })))); } } Set getPhrases() { Set set = ciSet(); set.addAll(collect input((L) dm_requireAndCallModule("#1020901/NounList", 'data))); ret set; } }