module Pufferfish::Parser

Parser

Public Class Methods

parse_file(file, base_dir) click to toggle source

Parses html

### Params file: String

# File lib/pufferfish.rb, line 8
def self.parse_file(file, base_dir)
    contents = File.read(file)
    
    # ^\\ -> don't count escape characters \%
    # ? -> smallest possible match
    contents = contents.gsub(/%(.*?[^\\])%/) { |_|
        match = Regexp.last_match.captures
        file = match[0]
        file = file
        if file != ""
            # Append file extension (TODO: set in config)
            if not (file =~ /.*\..*/)
                file.concat(".html")
            end

            # Parse base dir
            if not base_dir.nil?
                if file =~ /\A\/.*\z/ # ?
                    parse_file(file, base_dir)
                elsif base_dir =~ /\A.*\/\z/
                    parse_file("#{base_dir}#{file}", base_dir)
                else
                    parse_file("#{base_dir}/#{file}", base_dir)
                end
            else
                parse_file(file, base_dir)
            end
        else
            STDERR.puts "found empty template identifier %%. If this is intential, consider escaping: \\%\\%"
        end
    }

    # Replace escape characters and return
    contents.gsub(/\\%/, "%")
end