# File lib/math_ml/latex.rb, line 836
836: def add_environment(*a)
837: @environments = Hash.new unless @environments
838: if a.size==1 && Hash===a[0]
839: @environments.merge!(hash)
840: else
841: a.each{|i| @environments[i] = false}
842: end
843: end
# File lib/math_ml/latex.rb, line 845
845: def grp_begin
846: matched = @scanner.matched
847: begin_pos = @scanner.pos-matched.size
848: en = @scanner.scan_block ? @scanner[1] : @scanner.scan_any
849: raise ParseError.new('Environment name not exist.') unless en
850:
851: macro = @macro.environments(en)
852: if macro
853: begin
854: flg = @expanded_environment.include?(en)
855: @expanded_environment.push(en)
856: raise CircularReferenceEnvironment if flg
857:
858: pos = @scanner.pos
859: option = (macro.option && @scanner.scan_option) ? @scanner[1] : nil
860: params = Array.new
861: (1..macro.num).each do
862: params << (@scanner.scan_block ? @scanner[1] : @scanner.scan_any)
863: raise ParseError.new("Need more parameter.") unless params.last
864: end
865: body = ""
866: grpnest = 0
867: until @scanner.peek_command=="end" && grpnest==0
868: if @scanner.eos?
869: @scanner.pos = pos
870: raise ParseError.new('Matching \end not exist.')
871: end
872: com = @scanner.peek_command
873: grpnest += 1 if @group_begins.has_key?(com)
874: grpnest -=1 if @group_ends.has_key?(com) && @group_begins[com]
875: raise ParseError.new("Syntax error.") if grpnest<0
876:
877: body << @scanner.scan_any(true)
878: end
879: @scanner.scan_command
880: raise ParseError.new("Environment mismatched.", @scanner.matched) unless en==(@scanner.scan_block ? @scanner[1] : @scanner.scan_any)
881: begin
882: return parse_into(@macro.expand_environment(en, body, params, option), Array.new)
883: rescue CircularReferenceEnvironment
884: if @expanded_environment.size>1
885: raise
886: else
887: @scanner.pos = begin_pos
888: raise ParseError.new("Circular reference.")
889: end
890: rescue ParseError => e
891: if @expanded_environment.size>1
892: raise
893: else
894: @scanner.pos = begin_pos
895: raise ParseError.new(%[Error in macro(#{e.message} "#{e.rest.strip}").])
896: end
897: end
898: ensure
899: @expanded_environment.pop
900: end
901: end
902:
903: raise ParseError.new("Undefined environment.") unless @environments.has_key?(en)
904: e = @environments[en]
905: e = en unless e # default method name
906: __send__("env_#{e.to_s}")
907: end
# File lib/math_ml/latex.rb, line 909
909: def grp_left_etc
910: right =
911: case @scanner[1]
912: when "left"
913: "right"
914: when "bigg"
915: "bigg"
916: end
917:
918: f = Fenced.new
919: p = @scanner.pos
920: o = @scanner.scan_any
921: raise ParseError.new('Need brace here.') unless o && (o=~RE::BRACES || @delimiters.include?(o[RE::COMMANDS, 1]))
922: f.open = (o=~RE::BRACES ? o : parse_symbol_command(o[RE::COMMANDS, 1], true))
923: f << push_container(Row.new) do |r|
924: until @scanner.peek_command==right
925: if @scanner.eos?
926: @scanner.pos = p
927: raise ParseError.new('Brace not closed.')
928: end
929: r << parse_to_element(true)
930: end
931: end
932: @scanner.scan_command # skip right
933: c = @scanner.scan_any
934: raise ParseError.new('Need brace here.') unless c=~RE::BRACES || @delimiters.include?(c[RE::COMMANDS, 1])
935: f.close = (c=~RE::BRACES ? c : parse_symbol_command(c[RE::COMMANDS, 1], true))
936: f
937: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.