Sha256: f8c58256b2a4ba32af8fc5ecc47509f974c5bc1139f8e5288db2826c2c214c1b
Contents?: true
Size: 1.85 KB
Versions: 3
Compression:
Stored size: 1.85 KB
Contents
# @Opulent module Opulent # @Parser class Parser # Analyze the input code and check for matching tokens. # In case no match was found, throw an exception. # In special cases, modify the token hash. # # @param nodes [Array] Parent node to which we append to # def root(parent = @root, min_indent = -1) while(@line = @code[(@i += 1)]) # Skip to next iteration if we have a blank line if @line =~ /\A\s*\Z/ then next end # Reset the line offset @offset = 0 # Parse the current line by trying to match each node type towards it # Add current indentation to the indent stack indent = accept(:indent).size # Stop using the current parent as root if it does not match the # minimum indentation includements unless min_indent < indent @i -= 1; break end # If last include path had a greater indentation, pop the last file path @file.pop if @file[-1][1] > indent # Try the main Opulent node types and process each one of them using # their matching evaluation procedure current_node = node(parent, indent) || text(parent, indent) || comment(parent, indent) || define(parent, indent) || control(parent, indent) || evaluate(parent, indent) || filter(parent, indent) || block_yield(parent, indent) || include_file(parent, indent)|| html_text(parent, indent) || doctype(parent, indent) # Throw an error if we couldn't find a valid node error :unknown_node_type unless current_node end return parent end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
opulent-1.4.3 | lib/opulent/parser/root.rb |
opulent-1.4.2 | lib/opulent/parser/root.rb |
opulent-1.4.1 | lib/opulent/parser/root.rb |