class Scribble::Parsing::Nester
Public Class Methods
new(nodes)
click to toggle source
# File lib/scribble/parsing/nester.rb, line 4 def initialize nodes @nodes = nodes end
Public Instance Methods
nodes(root = true)
click to toggle source
# File lib/scribble/parsing/nester.rb, line 8 def nodes root = true [].tap do |nodes| while step(root) nodes << node if node.block? @current = node node.nodes = nodes false end end end end
Private Instance Methods
node()
click to toggle source
# File lib/scribble/parsing/nester.rb, line 36 def node @nodes[@cursor] end
step(root)
click to toggle source
# File lib/scribble/parsing/nester.rb, line 22 def step root @cursor = @cursor ? @cursor + 1 : 0 if node.is_a? Nodes::Ending raise unexpected_end if root false elsif node.nil? raise unexpected_eot unless root false else true end end
unexpected_end()
click to toggle source
# File lib/scribble/parsing/nester.rb, line 40 def unexpected_end Errors::Syntax.new "Unexpected 'end' #{node.line_and_column}; no block currently open" end
unexpected_eot()
click to toggle source
# File lib/scribble/parsing/nester.rb, line 44 def unexpected_eot Errors::Syntax.new "Unexpected end of template; unclosed '#{@current.name}' block #{@current.line_and_column}" end