Module: Mathemagical::LaTeX::BuiltinCommands

Included in:
Parser
Defined in:
lib/mathemagical/latex.rb,
lib/mathemagical/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



726
727
728
# File 'lib/mathemagical/latex.rb', line 726

def cmd_backslash
	@ds ? nil : Break.new
end

#cmd_entityObject

Raises:



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

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



806
807
808
809
# File 'lib/mathemagical/latex.rb', line 806

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

#cmd_hat_etcObject



730
731
732
733
# File 'lib/mathemagical/latex.rb', line 730

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

#cmd_it_etcObject



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

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



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

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



822
823
824
825
# File 'lib/mathemagical/latex.rb', line 822

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

#cmd_quad_etcObject



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

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



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

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



751
752
753
754
# File 'lib/mathemagical/latex.rb', line 751

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

#cmd_underbrace_etcObject



735
736
737
738
# File 'lib/mathemagical/latex.rb', line 735

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

#initializeObject



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

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