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