module MathML::LaTeX::BuiltinGroups

Public Class Methods

new() click to toggle source
Calls superclass method
    # File lib/math_ml/latex.rb
846 def initialize
847   add_group('begin', 'end')
848   add_group('left', 'right', :left_etc)
849   add_group('bigg', 'bigg', :left_etc)
850   @environments = {}
851 
852   super
853 end

Public Instance Methods

add_environment(*a) click to toggle source
    # File lib/math_ml/latex.rb
855 def add_environment(*a)
856   @environments ||= {}
857   if a.size == 1 && a[0].is_a?(Hash)
858     @environments.merge!(hash)
859   else
860     a.each { |i| @environments[i] = false }
861   end
862 end
grp_begin() click to toggle source
    # File lib/math_ml/latex.rb
864 def grp_begin
865   matched = @scanner.matched
866   begin_pos = @scanner.pos - matched.size
867   en = @scanner.scan_block ? @scanner[1] : @scanner.scan_any
868   raise ParseError, 'Environment name not exist.' unless en
869 
870   macro = @macro.environments(en)
871   if macro
872     begin
873       flg = @expanded_environment.include?(en)
874       @expanded_environment.push(en)
875       raise CircularReferenceEnvironment if flg
876 
877       pos = @scanner.pos
878       option = macro.option && @scanner.scan_option ? @scanner[1] : nil
879       params = []
880       (1..macro.num).each do
881         params << (@scanner.scan_block ? @scanner[1] : @scanner.scan_any)
882         raise ParseError, 'Need more parameter.' unless params.last
883       end
884       body = ''
885       grpnest = 0
886       until @scanner.peek_command == 'end' && grpnest == 0
887         if @scanner.eos?
888           @scanner.pos = pos
889           raise ParseError, 'Matching \end not exist.'
890         end
891         com = @scanner.peek_command
892         grpnest += 1 if @group_begins.has_key?(com)
893         grpnest -= 1 if @group_ends.has_key?(com) && @group_begins[com]
894         raise ParseError, 'Syntax error.' if grpnest < 0
895 
896         body << @scanner.scan_any(true)
897       end
898       @scanner.scan_command
899       unless en == (@scanner.scan_block ? @scanner[1] : @scanner.scan_any)
900         raise ParseError.new('Environment mismatched.',
901                              @scanner.matched)
902       end
903 
904       begin
905         return parse_into(@macro.expand_environment(en, body, params, option), [])
906       rescue CircularReferenceEnvironment
907         if @expanded_environment.size > 1
908           raise
909         else
910           @scanner.pos = begin_pos
911           raise ParseError, 'Circular reference.'
912         end
913       rescue ParseError => e
914         if @expanded_environment.size > 1
915           raise
916         else
917           @scanner.pos = begin_pos
918           raise ParseError, %[Error in macro(#{e.message} "#{e.rest.strip}").]
919         end
920       end
921     ensure
922       @expanded_environment.pop
923     end
924   end
925 
926   raise ParseError, 'Undefined environment.' unless @environments.has_key?(en)
927 
928   e = @environments[en]
929   e ||= en # default method name
930   __send__("env_#{e}")
931 end
grp_left_etc() click to toggle source
    # File lib/math_ml/latex.rb
933 def grp_left_etc
934   right =
935     case @scanner[1]
936     when 'left'
937       'right'
938     when 'bigg'
939       'bigg'
940     end
941 
942   f = Fenced.new
943   p = @scanner.pos
944   o = @scanner.scan_any
945   raise ParseError, 'Need brace here.' unless o && (o =~ RE::BRACES || @delimiters.include?(o[RE::COMMANDS, 1]))
946 
947   f.open = (o =~ RE::BRACES ? o : parse_symbol_command(o[RE::COMMANDS, 1], true))
948   f << push_container(Row.new) do |r|
949     until @scanner.peek_command == right
950       if @scanner.eos?
951         @scanner.pos = p
952         raise ParseError, 'Brace not closed.'
953       end
954       r << parse_to_element(true)
955     end
956   end
957   @scanner.scan_command # skip right
958   c = @scanner.scan_any
959   raise ParseError, 'Need brace here.' unless c =~ RE::BRACES || @delimiters.include?(c[RE::COMMANDS, 1])
960 
961   f.close = (c =~ RE::BRACES ? c : parse_symbol_command(c[RE::COMMANDS, 1], true))
962   f
963 end