class PseudoHiki::InlineParser

Attributes

token_pat[R]

Public Class Methods

new(str) click to toggle source
Calls superclass method TreeStack::new
# File lib/pseudohiki/inlineparser.rb, line 73
def initialize(str)
  @tokens = PseudoHiki.split_into_tokens(str, self.class.token_pat)
  super()
end
parse(str) click to toggle source
# File lib/pseudohiki/inlineparser.rb, line 105
def self.parse(str)
  new(str).parse.tree # parser = new(str)
end

Public Instance Methods

convert_last_node_into_leaf() click to toggle source
# File lib/pseudohiki/inlineparser.rb, line 78
def convert_last_node_into_leaf
  last_node = remove_current_node
  tag_head = NodeTypeToHead[last_node.class]
  push InlineLeaf.create(tag_head)
  last_node.each {|leaf| push_as_leaf leaf }
end
node_in_ancestors?(node_class) click to toggle source
# File lib/pseudohiki/inlineparser.rb, line 85
def node_in_ancestors?(node_class)
  not @stack.select {|node| node_class == node.class }.empty?
end
parse() click to toggle source
# File lib/pseudohiki/inlineparser.rb, line 96
def parse
  while token = @tokens.shift
    next if TAIL[token] and treated_as_node_end(token)
    next if HEAD[token] and push HEAD[token].new
    push InlineLeaf.create(token)
  end
  self
end
treated_as_node_end(token) click to toggle source
# File lib/pseudohiki/inlineparser.rb, line 89
def treated_as_node_end(token)
  return pop if current_node.class == TAIL[token]
  return nil unless node_in_ancestors?(TAIL[token])
  convert_last_node_into_leaf until current_node.class == TAIL[token]
  pop
end