# File lib/math_ml/latex.rb, line 948
                        def env_array
                                layout = @scanner.scan_block ? @scanner.matched : @scanner.scan(/./)
                                l = Scanner.new(layout=~RE::BLOCK ? layout[RE::BLOCK, 1] : layout)
                                t = Table.new
                                aligns = Array.new
                                vlines = Array.new
                                vlined = l.check(/\|/)
                                columned = false
                                until l.eos?
                                        c = l.scan_any
                                        raise ParseError.new("Syntax error.", layout[/\A.*(#{Regexp.escape(c+l.rest)}.*\z)/m, 1]) unless c=~/[clr\|@]/

                                        if c=='|'
                                                aligns << Align::CENTER if vlined
                                                vlines << Line::SOLID
                                                vlined = true
                                                columned = false
                                        else
                                                vlines << Line::NONE if columned
                                                vlined = false
                                                columned = true
                                                case c
                                                when 'l'
                                                        aligns << Align::LEFT
                                                when 'c'
                                                        aligns << Align::CENTER
                                                when 'r'
                                                        aligns << Align::RIGHT
                                                when '@'
                                                        aligns << Align::CENTER
                                                        l.scan_any
                                                end
                                        end
                                end
                                t.aligns = aligns
                                t.vlines = vlines

                                layout = layout[RE::BLOCK, 1] if layout=~RE::BLOCK
                                raise ParseError.new('Need parameter here.') if layout==""

                                hlines = Array.new
                                row_parsed = false
                                hlined = false
                                until @scanner.peek_command=="end"
                                        raise ParseError.new('Matching \end not exist.') if @scanner.eos?
                                        if @scanner.peek_command=="hline"
                                                @scanner.scan_command
                                                t << Tr.new unless row_parsed
                                                hlines << Line::SOLID
                                                row_parsed = false
                                                hlined = true
                                        else
                                                hlines << Line::NONE if row_parsed
                                                t << env_array_row(l.string)
                                                @scanner.scan(RE::WBSLASH)
                                                row_parsed = true
                                                hlined = false
                                        end
                                end
                                t.hlines = hlines

                                if hlined
                                        tr = Tr.new
                                        (0..vlines.size).each {|i| tr << Td.new}
                                        t << tr
                                end

                                @scanner.scan_command
                                raise ParseError.new("Environment mismatched.") unless @scanner.check_block && @scanner[1]=="array"
                                @scanner.scan_block
                                t
                        end