MathML::LaTeX::BuiltinGroups

Public Class Methods

new() click to toggle source
     # File lib/math_ml/latex.rb, line 827
827:                         def initialize
828:                                 add_group("begin", "end")
829:                                 add_group("left", "right", :left_etc)
830:                                 add_group("bigg", "bigg", :left_etc)
831:                                 @environments = Hash.new
832: 
833:                                 super
834:                         end

Public Instance Methods

add_environment(*a) click to toggle source
     # 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
grp_begin() click to toggle source
     # 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
grp_left_etc() click to toggle source
     # 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.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.