module MathML::LaTeX::BuiltinEnvironments
Public Class Methods
new()
click to toggle source
Calls superclass method
# File lib/math_ml/latex.rb 967 def initialize 968 add_environment('array', 'matrix') 969 970 super 971 end
Public Instance Methods
env_array()
click to toggle source
# File lib/math_ml/latex.rb 973 def env_array 974 layout = @scanner.scan_block ? @scanner.matched : @scanner.scan(/./) 975 l = Scanner.new(layout =~ RE::BLOCK ? layout[RE::BLOCK, 1] : layout) 976 t = Table.new 977 aligns = [] 978 vlines = [] 979 vlined = l.check(/\|/) 980 columned = false 981 until l.eos? 982 c = l.scan_any 983 unless c =~ /[clr|@]/ 984 raise ParseError.new( 985 'Syntax error.', 986 layout[/\A.*(#{Regexp.escape(c + l.rest)}.*\z)/m, 1] 987 ) 988 end 989 990 if c == '|' 991 aligns << Align::CENTER if vlined 992 vlines << Line::SOLID 993 vlined = true 994 columned = false 995 else 996 vlines << Line::NONE if columned 997 vlined = false 998 columned = true 999 case c 1000 when 'l' 1001 aligns << Align::LEFT 1002 when 'c' 1003 aligns << Align::CENTER 1004 when 'r' 1005 aligns << Align::RIGHT 1006 when '@' 1007 aligns << Align::CENTER 1008 l.scan_any 1009 end 1010 end 1011 end 1012 t.aligns = aligns 1013 t.vlines = vlines 1014 1015 layout = layout[RE::BLOCK, 1] if layout =~ RE::BLOCK 1016 raise ParseError, 'Need parameter here.' if layout == '' 1017 1018 hlines = [] 1019 row_parsed = false 1020 hlined = false 1021 until @scanner.peek_command == 'end' 1022 raise ParseError, 'Matching \end not exist.' if @scanner.eos? 1023 1024 if @scanner.peek_command == 'hline' 1025 @scanner.scan_command 1026 t << Tr.new unless row_parsed 1027 hlines << Line::SOLID 1028 row_parsed = false 1029 hlined = true 1030 else 1031 hlines << Line::NONE if row_parsed 1032 t << env_array_row(l.string) 1033 @scanner.scan(RE::WBSLASH) 1034 row_parsed = true 1035 hlined = false 1036 end 1037 end 1038 t.hlines = hlines 1039 1040 if hlined 1041 tr = Tr.new 1042 (0..vlines.size).each { |_i| tr << Td.new } 1043 t << tr 1044 end 1045 1046 @scanner.scan_command 1047 raise ParseError, 'Environment mismatched.' unless @scanner.check_block && @scanner[1] == 'array' 1048 1049 @scanner.scan_block 1050 t 1051 end
env_array_row(layout)
click to toggle source
# File lib/math_ml/latex.rb 1053 def env_array_row(layout) 1054 l = Scanner.new(layout) 1055 r = Tr.new 1056 first_column = true 1057 vlined = l.check(/\|/) 1058 until l.eos? 1059 c = l.scan(/./) 1060 if c == '|' 1061 r << Td.new if vlined 1062 vlined = true 1063 next 1064 else 1065 vlined = false 1066 case c 1067 when 'r', 'l', 'c' 1068 when '@' 1069 r << parse_into(l.scan_any, Td.new) 1070 next 1071 end 1072 if first_column 1073 first_column = false 1074 else 1075 raise ParseError.new('Need more column.', @scanner.matched.to_s) unless @scanner.scan(/&/) 1076 end 1077 r << push_container(Td.new) do |td| 1078 td << parse_to_element(true) until @scanner.peek_command == 'end' || 1079 @scanner.check(/(&|\\\\)/) || @scanner.eos? 1080 end 1081 end 1082 end 1083 r << Td.new if vlined 1084 raise ParseError, 'Too many column.' if @scanner.check(/&/) 1085 1086 r 1087 end
env_matrix()
click to toggle source
# File lib/math_ml/latex.rb 1089 def env_matrix 1090 t = Table.new 1091 hlines = [] 1092 hlined = false 1093 row_parsed = false 1094 until @scanner.peek_command == 'end' 1095 raise ParseError, 'Matching \end not exist.' if @scanner.eos? 1096 1097 if @scanner.peek_command == 'hline' 1098 @scanner.scan_command 1099 t << Tr.new unless row_parsed 1100 hlines << Line::SOLID 1101 row_parsed = false 1102 hlined = true 1103 else 1104 hlines << Line::NONE if row_parsed 1105 t << (r = Tr.new) 1106 r << (td = Td.new) 1107 until @scanner.check(RE::WBSLASH) || @scanner.peek_command == 'end' || @scanner.eos? 1108 push_container(td) do |e| 1109 e << parse_to_element(true) until @scanner.peek_command == 'end' || 1110 @scanner.check(/(&|\\\\)/) || @scanner.eos? 1111 end 1112 r << (td = Td.new) if @scanner.scan(/&/) 1113 end 1114 @scanner.scan(RE::WBSLASH) 1115 row_parsed = true 1116 hlined = false 1117 end 1118 end 1119 t.hlines = hlines 1120 1121 t << Tr.new if hlined 1122 1123 raise ParseError, 'Need \\end{array}.' unless @scanner.peek_command == 'end' 1124 1125 @scanner.scan_command 1126 raise ParseError, 'Environment mismatched.' unless @scanner.check_block && @scanner[1] == 'matrix' 1127 1128 @scanner.scan_block 1129 t 1130 end
env_matrix_row()
click to toggle source
# File lib/math_ml/latex.rb 1132 def env_matrix_row 1133 r = Tr.new 1134 until @scanner.check(RE::WBSLASH) || @scanner.peek_command == 'end' 1135 r << push_container(Td.new) do |td| 1136 td << parse_to_element(true) until @scanner.peek_command == 'end' || 1137 @scanner.check(/(&|\\\\)/) || @scanner.eos? 1138 end 1139 end 1140 end