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