!7 sS data = [[ -- Rule What does a driver do? => He drives, dummie. -- Test What does a catcher do? => He catches, dummie. -- Helper Table driver, drive, drives, driving sleeper, sleep, sleeps, sleeping murderer, murder, murders, murdering catcher, catch, catches, catching ]]; p-exp { SS sections = minusSignSectionsCI(data); pnlStruct(sections); LPair rules = ai_findDoubleArrowRulesAsPairs(sections.get("Rule")); GazelleEvalContext ctx = gazelle_stdEvalContext(map(rules, func(PairS inOut) -> T3 { t3(joinPairWithDoubleArrow(inOut), "", aGlobalID()) })); //pnlStruct(ctx.engine.rules); final LL helperTable = map splitAtComma(tlft(sections.get("Helper Table"))); //pnlStruct(helperTable); RuleEngine2.Rule rule = first(ctx.engine.rules); rule.massageMap = func(SS map, LS tokC, LS tokI) -> SS { print("Massaging: " + map + " " + sfu(tokC) + " / " + sfu(tokI)); for (S t : codeTokens(tokC)) { Pair idx = twoDIndexOfIC(helperTable, t); if (idx == null) continue; for (S key, val : cloneMap(map)) { int idx2 = indexOfIC(helperTable.get(idx.a), key); print("idx2 for " + key + " = " + idx2); } } ret map; }; for (PairS inOut : ai_findDoubleArrowRulesAsPairs(sections.get("Test"))) { nlPrintNL(inOut.a); pnl(gazelle_getChildren(GazelleTree(ctx, inOut.a))); } }