Sha256: df85150cd87d01b104baf836a978483d01ae93a53942ca6ccd59258f47f0bc1b

Contents?: true

Size: 1.85 KB

Versions: 10

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

10 entries across 10 versions & 1 rubygems

Version Path
opulent-1.5.5 lib/opulent/parser/root.rb
opulent-1.5.4 lib/opulent/parser/root.rb
opulent-1.5.3 lib/opulent/parser/root.rb
opulent-1.5.2 lib/opulent/parser/root.rb
opulent-1.5.1 lib/opulent/parser/root.rb
opulent-1.5.0 lib/opulent/parser/root.rb
opulent-1.4.8 lib/opulent/parser/root.rb
opulent-1.4.7 lib/opulent/parser/root.rb
opulent-1.4.6 lib/opulent/parser/root.rb
opulent-1.4.5 lib/opulent/parser/root.rb