# File lib/math_ml/latex.rb, line 950 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)/, 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
# File lib/math_ml/latex.rb, line 1023 def env_array_row(layout) l = Scanner.new(layout) r = Tr.new first_column = true vlined = l.check(/\|/) until l.eos? c = l.scan(/./) if c=='|' r << Td.new if vlined vlined = true next else vlined = false case c when 'r', 'l', 'c' when '@' r << parse_into(l.scan_any, Td.new) next end if first_column first_column = false else raise ParseError.new("Need more column.", @scanner.matched.to_s) unless @scanner.scan(/&/) end r << push_container(Td.new) do |td| td << parse_to_element(true) until @scanner.peek_command=="end" || @scanner.check(/(&|\\\\)/) || @scanner.eos? end end end r << Td.new if vlined raise ParseError.new("Too many column.") if @scanner.check(/&/) r end
# File lib/math_ml/latex.rb, line 1057 def env_matrix t = Table.new hlines = Array.new hlined = false row_parsed = 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 << (r = Tr.new) r << (td=Td.new) until @scanner.check(RE::WBSLASH) || @scanner.peek_command=="end" || @scanner.eos? push_container(td) do |e| e << parse_to_element(true) until @scanner.peek_command=="end" || @scanner.check(/(&|\\\\)/) || @scanner.eos? end r << (td=Td.new) if @scanner.scan(/&/) end @scanner.scan(RE::WBSLASH) row_parsed = true hlined = false end end t.hlines = hlines t << Tr.new if hlined raise ParseError.new("Need \\end{array}.") unless @scanner.peek_command=="end" @scanner.scan_command raise ParseError.new("Environment mismatched.") unless @scanner.check_block && @scanner[1]=="matrix" @scanner.scan_block t end
# File lib/math_ml/latex.rb, line 1096 def env_matrix_row r = Tr.new until @scanner.check(RE::WBSLASH) || @scanner.peek_command=="end" r << push_container(Td.new) do |td| td << parse_to_element(true) until @scanner.peek_command=="end" || @scanner.check(/(&|\\\\)/) || @scanner.eos? end end end
Generated with the Darkfish Rdoc Generator 2.