sclass BEACalculations { GazelleBEA mod; *(GazelleBEA *mod) {} /*void reactAllInputsWithSomePatterns() { forEach reactInputWithSomePatterns(mod.beaObjectsOfType("input")); }*/ class ReactInputWithSomePatterns implements Steppable { BEAObject input; Concepts ccOut; int max = 3, n; Iterator patterns; void start { n = countConceptsWhereIC(ccOut, BEAObject, +input, type := "match"); patterns = iterator(conceptsWhereIC BEAObject(type := "Pattern")); } public bool step() { if (n >= max) false; if (!patterns.hasNext()) false; if (reactInputWithPattern(input, patterns.next(), ccOut) != null) ++n; true; } } SS matchInputWithPattern(BEAObject input, BEAObject pattern) { ret flexMatchAngleBracketVarsIC_first(getString text(pattern), getString text(input)); } BEAObject reactInputWithPattern(BEAObject input, BEAObject pattern, Concepts ccOut) { SS mapping = matchInputWithPattern(pattern, input); if (mapping == null) null; ret cnew(ccOut, BEAObject, type := "Match", +input, +pattern, +mapping); } O serveAnalyzeInput(GazelleBEA.Req req) { S text = req.get("q"); new Concepts ccOut; BEAObject input = cnew(ccOut, BEAObject, type := "Input", +text); new ReactInputWithSomePatterns r; r.input = input; r.ccOut = ccOut; r.max = 1000; r.start(); stepAllWithTimeout(10.0, r); ret p("Input: " + htmlEncode(text)) + p("Matches") + ul_htmlEncode(conceptsWhereIC(ccOut, BEAObject, type := "Match")); } }