static WoodyRule getWoodyRuleFromSource(L lines, int lineIndex) { S s = lines.get(lineIndex); Explain e = explain(s, ctxParsingRules(), "rule"); if (e == null) fail("Bad rule: " + s); new WoodyRule rule; rule.nameInFile = e.sub(0).string(); rule.lineInFile = lineIndex; rule.condition = e.sub(1).string(); int opening = indexOfTrim(lines, "{", i); if (opening >= 0) { for (i++; i < opening; i++) { L tok2 = javaTok(lines.get(i)); if (eqGet(tok2, 1, "[") && eqGet(tok2, 5, "]") && eqGet(tok2, 7, "=")) rule.properties.put(tok2.get(3), unquoteCtx(trim(join(subList(tok2, 9))))); } int closing = indexOfClosingCurlyBracket(lines, opening); rule.body = lines(subList(lines, opening+1, closing)); } ret rule; }