So here you're going to have to push an `:array` state of some kind, that pushes/pops when it encounters square brackets.  A good example of this is the `:funclist` state from Haskell: https://github.com/jayferd/rouge/blob/master/lib/rouge/lexers/haskell.rb#L137

It could mix in `:value`, except for that first line where it pops if it gets a newline - which is something that doesn't happen until the brackets are balanced.