!7 sclass Entry { S pattern; Map params; // null if not matched } cmodule MatchingInputPatterns > DynObjectTable { start { dm_onTopInput_q(vf process); } void process(S s) { LS patterns = collect pattern((L) dm_requireAndCallModule("#1020518/InputPatterns", 'data)); print("Processing input " + quote(s) + " with " + n2(patterns, "pattern")); new Matches m; data = new L; for (S pat : patterns) if (match(pat, s, m)) data.add(nu(Entry, pattern := pat, params := matchesToMap(m))); setData(data); } }