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'
  ::Tilt::register MarukuTemplate, 'markdown', 'mkd', 'md'
  ::Tilt::register KramdownTemplate, 'markdown', 'mkd', 'md'
  app.set :markdown_engine_prefix, ::Middleman::CoreExtensions::FrontMatter
  
  ::Tilt::register RedClothTemplate,  'textile'
  ::Tilt.prefer(RedClothTemplate)
  
  ::Tilt::register ERBTemplate,       'erb', 'rhtml'
  ::Tilt.prefer(ERBTemplate)
  
  ::Tilt::register LiquidTemplate,    'liquid'
  ::Tilt.prefer(LiquidTemplate)
  
  ::Tilt::register SlimTemplate,      'slim'
  ::Tilt.prefer(SlimTemplate)
  
  ::Tilt::register HamlTemplate,      'haml'
  ::Tilt.prefer(HamlTemplate)
  
  app.after_configuration do
    app.before_processing(:front_matter, 0) do |result|
      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
    
      true
    end
  end
end