# File lib/math_ml/latex.rb, line 947
947: def env_array
948: layout = @scanner.scan_block ? @scanner.matched : @scanner.scan(/./)
949: l = Scanner.new(layout=~RE::BLOCK ? layout[RE::BLOCK, 1] : layout)
950: t = Table.new
951: aligns = Array.new
952: vlines = Array.new
953: vlined = l.check(/\|/)
954: columned = false
955: until l.eos?
956: c = l.scan_any
957: raise ParseError.new("Syntax error.", layout[/\A.*(#{Regexp.escape(c+l.rest)}.*\z)/, 1]) unless c=~/[clr\|@]/
958:
959: if c=='|'
960: aligns << Align::CENTER if vlined
961: vlines << Line::SOLID
962: vlined = true
963: columned = false
964: else
965: vlines << Line::NONE if columned
966: vlined = false
967: columned = true
968: case c
969: when 'l'
970: aligns << Align::LEFT
971: when 'c'
972: aligns << Align::CENTER
973: when 'r'
974: aligns << Align::RIGHT
975: when '@'
976: aligns << Align::CENTER
977: l.scan_any
978: end
979: end
980: end
981: t.aligns = aligns
982: t.vlines = vlines
983:
984: layout = layout[RE::BLOCK, 1] if layout=~RE::BLOCK
985: raise ParseError.new('Need parameter here.') if layout==""
986:
987: hlines = Array.new
988: row_parsed = false
989: hlined = false
990: until @scanner.peek_command=="end"
991: raise ParseError.new('Matching \end not exist.') if @scanner.eos?
992: if @scanner.peek_command=="hline"
993: @scanner.scan_command
994: t << Tr.new unless row_parsed
995: hlines << Line::SOLID
996: row_parsed = false
997: hlined = true
998: else
999: hlines << Line::NONE if row_parsed
1000: t << env_array_row(l.string)
1001: @scanner.scan(RE::WBSLASH)
1002: row_parsed = true
1003: hlined = false
1004: end
1005: end
1006: t.hlines = hlines
1007:
1008: if hlined
1009: tr = Tr.new
1010: (0..vlines.size).each {|i| tr << Td.new}
1011: t << tr
1012: end
1013:
1014: @scanner.scan_command
1015: raise ParseError.new("Environment mismatched.") unless @scanner.check_block && @scanner[1]=="array"
1016: @scanner.scan_block
1017: t
1018: end
# File lib/math_ml/latex.rb, line 1020
1020: def env_array_row(layout)
1021: l = Scanner.new(layout)
1022: r = Tr.new
1023: first_column = true
1024: vlined = l.check(/\|/)
1025: until l.eos?
1026: c = l.scan(/./)
1027: if c=='|'
1028: r << Td.new if vlined
1029: vlined = true
1030: next
1031: else
1032: vlined = false
1033: case c
1034: when 'r', 'l', 'c'
1035: when '@'
1036: r << parse_into(l.scan_any, Td.new)
1037: next
1038: end
1039: if first_column
1040: first_column = false
1041: else
1042: raise ParseError.new("Need more column.", @scanner.matched.to_s) unless @scanner.scan(/&/)
1043: end
1044: r << push_container(Td.new) do |td|
1045: td << parse_to_element(true) until @scanner.peek_command=="end" || @scanner.check(/(&|\\\\)/) || @scanner.eos?
1046: end
1047: end
1048: end
1049: r << Td.new if vlined
1050: raise ParseError.new("Too many column.") if @scanner.check(/&/)
1051: r
1052: end
# File lib/math_ml/latex.rb, line 1054
1054: def env_matrix
1055: t = Table.new
1056: hlines = Array.new
1057: hlined = false
1058: row_parsed = false
1059: until @scanner.peek_command=="end"
1060: raise ParseError.new('Matching \end not exist.') if @scanner.eos?
1061: if @scanner.peek_command=="hline"
1062: @scanner.scan_command
1063: t << Tr.new unless row_parsed
1064: hlines << Line::SOLID
1065: row_parsed = false
1066: hlined = true
1067: else
1068: hlines << Line::NONE if row_parsed
1069: t << (r = Tr.new)
1070: r << (td=Td.new)
1071: until @scanner.check(RE::WBSLASH) || @scanner.peek_command=="end" || @scanner.eos?
1072: push_container(td) do |e|
1073: e << parse_to_element(true) until @scanner.peek_command=="end" || @scanner.check(/(&|\\\\)/) || @scanner.eos?
1074: end
1075: r << (td=Td.new) if @scanner.scan(/&/)
1076: end
1077: @scanner.scan(RE::WBSLASH)
1078: row_parsed = true
1079: hlined = false
1080: end
1081: end
1082: t.hlines = hlines
1083:
1084: t << Tr.new if hlined
1085:
1086: raise ParseError.new("Need \\end{array}.") unless @scanner.peek_command=="end"
1087: @scanner.scan_command
1088: raise ParseError.new("Environment mismatched.") unless @scanner.check_block && @scanner[1]=="matrix"
1089: @scanner.scan_block
1090: t
1091: end
# File lib/math_ml/latex.rb, line 1093
1093: def env_matrix_row
1094: r = Tr.new
1095: until @scanner.check(RE::WBSLASH) || @scanner.peek_command=="end"
1096: r << push_container(Td.new) do |td|
1097: td << parse_to_element(true) until @scanner.peek_command=="end" || @scanner.check(/(&|\\\\)/) || @scanner.eos?
1098: end
1099: end
1100: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.