Module: MathML::LaTeX::BuiltinCommands

Included in:
Parser
Defined in:
lib/math_ml/latex.rb,
lib/math_ml/latex.rb

Constant Summary collapse

OVERS =
{'hat'=>'circ', 'breve'=>'smile', 'grave'=>'grave',
'acute'=>'acute', 'dot'=>'sdot', 'ddot'=>'nldr', 'dddot'=>'mldr', 'tilde'=>'tilde',
'bar'=>'macr', 'vec'=>'rightarrow', 'check'=>'vee', 'widehat'=>'circ',
'overline'=>'macr', 'widetilde'=>'tilde', 'overbrace'=>'OverBrace'}
UNDERS =
{'underbrace'=>'UnderBrace', 'underline'=>'macr'}

Instance Method Summary collapse

Instance Method Details

#cmd_backslashObject



725
726
727
# File 'lib/math_ml/latex.rb', line 725

def cmd_backslash
	@ds ? nil : XMLElement.new("br", "xmlns"=>"http://www.w3.org/1999/xhtml")
end

#cmd_entityObject

Raises:



739
740
741
742
743
744
745
746
747
748
# File 'lib/math_ml/latex.rb', line 739

def cmd_entity
	param = @scanner.scan_block ? @scanner[1] : @scanner.scan(/./)
	raise ParseError.new("Need parameter.") unless param
	unless @unsecure_entity || @entities[param]
		param =@scanner.matched[/\A\{#{RE::SPACE}*(.*\})\z/, 1] if @scanner.matched=~RE::BLOCK
		@scanner.pos = @scanner.pos-(param.size)
		raise ParseError.new("Unregistered entity.")
	end
	Operator.new << entitize(param)
end

#cmd_fracObject



805
806
807
808
# File 'lib/math_ml/latex.rb', line 805

def cmd_frac
	n = parse_any; d = parse_any
	Frac.new(n, d)
end

#cmd_hat_etcObject



729
730
731
732
# File 'lib/math_ml/latex.rb', line 729

def cmd_hat_etc
	com = @scanner[1]
	Over.new(parse_any, Operator.new << entitize(OVERS[com]))
end

#cmd_it_etcObject



774
775
776
777
778
779
780
781
782
783
784
# File 'lib/math_ml/latex.rb', line 774

def cmd_it_etc
	case @scanner[1]
	when 'it'
		@font = Font::NORMAL
	when 'rm'
		@font = Font::ROMAN
	when 'bf'
		@font = Font::BOLD
	end
	nil
end

#cmd_mathit_etcObject



786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
# File 'lib/math_ml/latex.rb', line 786

def cmd_mathit_etc
	case @scanner[1]
	when 'mathit'
		parse_mathfont(Font::NORMAL)
	when 'mathrm'
		parse_mathfont(Font::ROMAN)
	when 'mathbf'
		parse_mathfont(Font::BOLD)
	when 'bm'
		parse_mathfont(Font::BOLD_ITALIC)
	when 'mathbb'
		parse_mathfont(Font::BLACKBOLD)
	when 'mathscr'
		parse_mathfont(Font::SCRIPT)
	when 'mathfrak'
		parse_mathfont(Font::FRAKTUR)
	end
end

#cmd_mboxObject



821
822
823
824
# File 'lib/math_ml/latex.rb', line 821

def cmd_mbox
	@scanner.scan_any
	Text.new << (@scanner.matched =~ RE::BLOCK ? @scanner[1] : @scanner.matched)
end

#cmd_quad_etcObject



755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
# File 'lib/math_ml/latex.rb', line 755

def cmd_quad_etc
	case @scanner[1]
	when ' '
		Space.new("1em")
	when 'quad'
		Space.new("1em")
	when 'qquad'
		Space.new("2em")
	when ','
		Space.new("0.167em")
	when ':'
		Space.new("0.222em")
	when ';'
		Space.new("0.278em")
	when '!'
		Space.new("-0.167em")
	end
end

#cmd_sqrtObject



810
811
812
813
814
815
816
817
818
819
# File 'lib/math_ml/latex.rb', line 810

def cmd_sqrt
	if @scanner.scan_option
		i = parse_into(@scanner[1], Array.new)
		i = i.size==1 ? i[0] : (Row.new << i)
		b = parse_any
		Root.new(i, b)
	else
		Sqrt.new << parse_any
	end
end

#cmd_stackrelObject



750
751
752
753
# File 'lib/math_ml/latex.rb', line 750

def cmd_stackrel
	o = parse_any; b = parse_any
	Over.new(b, o)
end

#cmd_underbrace_etcObject



734
735
736
737
# File 'lib/math_ml/latex.rb', line 734

def cmd_underbrace_etc
	com = @scanner[1]
	Under.new(parse_any, Operator.new << entitize(UNDERS[com]))
end

#initializeObject



711
712
713
714
715
716
717
718
719
720
721
722
723
# File 'lib/math_ml/latex.rb', line 711

def initialize
	add_commands("\\"=>:backslash)
	add_commands("entity", "stackrel", "frac", "sqrt", "mbox")
	add_multi_command(:hat_etc, *OVERS.keys)
	add_multi_command(:underbrace_etc, *UNDERS.keys)
	add_multi_command(:quad_etc, " ", "quad", "qquad", ",", ":", ";", "!")
	add_multi_command(:it_etc, "it", "rm", "bf")
	add_multi_command(:mathit_etc, "mathit", "mathrm", "mathbf", "bm", "mathbb", "mathscr", "mathfrak")
	add_sym_cmd(Builtin::Symbol::MAP)
	add_delimiter(Builtin::Symbol::DELIMITERS)

	super
end