// returns: (CtxCase, closing line number) // or null static Pair ctxCase(L lines, int i) { new Matches m; new CtxCase c; while (i <= l(lines) && emptyAfterTrim(get(lines, i))) ++i; if (!flexMatch("CASE (*) ACTION", get(lines, i), m, false)) null; c.condition = $1; // TODO: properties int closing = indexOfClosingCurlyBracket(lines, i+1); c.action = tok_unCurlyBracket(lines(subList(lines, i+1, closing+1))); ret pair(c, closing); }