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