static WoodyRule findWoodyRuleInSource(S src, S ruleName) { L lines = lines(src); for i, S s over lines: { L tok = javaTok(s); if (jfind(tok, "RULE " + ruleName) >= 0) { new WoodyRule rule; rule.nameInFile = ruleName; rule.lineInFile = i; Explain e = explain(s, ctxParsingRules(), "rule"); if (e == null) fail("Bad rule: " + s); rule.condition = e.sub(1).str(); int opening = indexOfTrim(lines, "{", i); if (opening >= 0) { int closing = indexOfTrim(lines, "}", opening+1); rule.body = lines(subList(lines, opening+1, closing)); } ret rule; } } null; }