module Middleman::CoreExtensions::FrontMatter

def parse_front_matter(content)

def parse_front_matter(content)
  yaml_regex = /^(---\s*\n.*?\n?)^(---\s*$\n?)/m
  if content =~ yaml_regex
    begin
      data = YAML.load($1)
    rescue => e
      puts "YAML Exception: #{e.message}"
    end
    content = content.split(yaml_regex).last
  end
  data ||= {}
  [data, content]
end

def registered(app)

def registered(app)
  app.extend ClassMethods
  
  ::Tilt::register RDiscountTemplate, 'markdown', 'mkd', 'md'
  ::Tilt::register RedcarpetTemplate, 'markdown', 'mkd', 'md'
  app.set :markdown_engine, RDiscountTemplate
  
  ::Tilt::register RedClothTemplate,  'textile'
  ::Tilt.prefer(RedClothTemplate)
  
  ::Tilt::register ERBTemplate,       'erb', 'rhtml'
  ::Tilt.prefer(ERBTemplate)
  
  ::Tilt::register SlimTemplate,      'slim'
  ::Tilt.prefer(SlimTemplate)
  
  ::Tilt::register HamlTemplate,      'haml'
  ::Tilt.prefer(HamlTemplate)
  
  app.after_feature_init do
    app.before do
      result = resolve_template(request.path_info, :raise_exceptions => false)
      
      if result && Tilt.mappings.has_key?(result[1].to_s)
        extensionless_path, template_engine = result
        full_file_path = "#{extensionless_path}.#{template_engine}"
        system_path = File.join(settings.views, full_file_path)
        data, content = app.parse_front_matter(File.read(system_path))

        request['custom_options'] = {}
        %w(layout layout_engine).each do |opt|
          if data.has_key?(opt)
            request['custom_options'][opt.to_sym] = data.delete(opt)
          end
        end

        # Forward remaining data to helpers
        app.data_content("page", data)
      end
    end
  end
end