Class: MathML::LaTeX::Parser

Inherits:
Object
  • Object
show all
Includes:
MathML::LaTeX, BuiltinCommands, BuiltinEnvironments, BuiltinGroups
Defined in:
lib/math_ml/latex.rb

Defined Under Namespace

Classes: CircularReferenceCommand

Constant Summary collapse

BUILTIN_MACRO =
"\\newenvironment{smallmatrix}{\\begin{matrix}}{\\end{matrix}}\n\\newenvironment{pmatrix}{\\left(\\begin{matrix}}{\\end{matrix}\\right)}\n\\newenvironment{bmatrix}{\\left[\\begin{matrix}}{\\end{matrix}\\right]}\n\\newenvironment{Bmatrix}{\\left\\{\\begin{matrix}}{\\end{matrix}\\right\\}}\n\\newenvironment{vmatrix}{\\left|\\begin{matrix}}{\\end{matrix}\\right|}\n\\newenvironment{Vmatrix}{\\left\\|\\begin{matrix}}{\\end{matrix}\\right\\|}\n"

Constants included from BuiltinCommands

BuiltinCommands::OVERS, BuiltinCommands::UNDERS

Constants included from MathML::LaTeX

MBEC

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from BuiltinCommands

#cmd_backslash, #cmd_entity, #cmd_frac, #cmd_hat_etc, #cmd_it_etc, #cmd_mathit_etc, #cmd_mbox, #cmd_quad_etc, #cmd_sqrt, #cmd_stackrel, #cmd_underbrace_etc

Methods included from BuiltinGroups

#add_environment, #grp_begin, #grp_left_etc

Methods included from BuiltinEnvironments

#env_array, #env_array_row, #env_matrix, #env_matrix_row

Constructor Details

#initialize(opt = {}) ⇒ Parser

Returns a new instance of Parser.



365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
# File 'lib/math_ml/latex.rb', line 365

def initialize(opt={})
  @unsecure_entity = false
  @entities = Hash.new
  @commands = Hash.new
  @symbols = Hash.new
  @delimiters = Array.new
  @group_begins = Hash.new
  @group_ends = Hash.new
  @macro = Macro.new
  @macro.parse(BUILTIN_MACRO)
  @expanded_command = Array.new
  @expanded_environment = Array.new
  @symbol_table = opt[:symbol] || MathML::Symbol::Default
  @symbol_table = MathML::Symbol::MAP[@symbol_table] if @symbol_table.is_a?(::Symbol)

  super()
end

Instance Attribute Details

#macroObject (readonly)

Returns the value of attribute macro.



362
363
364
# File 'lib/math_ml/latex.rb', line 362

def macro
  @macro
end

#symbol_tableObject (readonly)

Returns the value of attribute symbol_table.



363
364
365
# File 'lib/math_ml/latex.rb', line 363

def symbol_table
  @symbol_table
end

#unsecure_entityObject

Returns the value of attribute unsecure_entity.



361
362
363
# File 'lib/math_ml/latex.rb', line 361

def unsecure_entity
  @unsecure_entity
end

Instance Method Details

#add_commands(*a) ⇒ Object



414
415
416
417
418
419
420
# File 'lib/math_ml/latex.rb', line 414

def add_commands(*a)
  if a.size==1 && Hash===a[0]
    @commands.merge!(a[0])
  else
    a.each{|i| @commands[i] = false}
  end
end

#add_delimiter(list) ⇒ Object



430
431
432
# File 'lib/math_ml/latex.rb', line 430

def add_delimiter(list)
  @delimiters.concat(list)
end

#add_entity(list) ⇒ Object



383
384
385
386
387
# File 'lib/math_ml/latex.rb', line 383

def add_entity(list)
  list.each do |i|
    @entities[i] = true
  end
end

#add_group(begin_name, end_name, method = nil) ⇒ Object



434
435
436
437
# File 'lib/math_ml/latex.rb', line 434

def add_group(begin_name, end_name, method=nil)
  @group_begins[begin_name] = method
  @group_ends[end_name] = begin_name
end

#add_multi_command(m, *a) ⇒ Object



422
423
424
# File 'lib/math_ml/latex.rb', line 422

def add_multi_command(m, *a)
  a.each{|i| @commands[i] = m}
end

#add_plugin(plugin) ⇒ Object



410
411
412
# File 'lib/math_ml/latex.rb', line 410

def add_plugin(plugin)
  self.extend(plugin)
end

#add_sym_cmd(hash) ⇒ Object



426
427
428
# File 'lib/math_ml/latex.rb', line 426

def add_sym_cmd(hash)
  @symbols.merge!(hash)
end

#parse(src, displaystyle = false) ⇒ Object



389
390
391
392
393
394
395
396
397
# File 'lib/math_ml/latex.rb', line 389

def parse(src, displaystyle=false)
  @ds = displaystyle
  begin
    parse_into(src, Math.new(@ds), Font::NORMAL)
  rescue ParseError => e
    e.done = src[0...(src.size - e.rest.size)]
    raise
  end
end

#push_container(container, scanner = @scanner, font = @font) ⇒ Object



399
400
401
402
403
404
405
406
407
408
# File 'lib/math_ml/latex.rb', line 399

def push_container(container, scanner=@scanner, font=@font)
  data = [@container, @scanner, @font]
  @container, @scanner, @font = [container, scanner, font]
  begin
    yield container
    container
  ensure
    @container, @scanner, @font = data
  end
end