module Middleman::Base

def registered(app)

def registered(app)
  # app.register ::Sinatra::Synchrony
  
  app.extend ClassMethods
  app.send :include, InstanceMethods
  
  # Basic Sinatra config
  app.set :app_file,    __FILE__
  app.set :root,        Dir.pwd
  app.set :sessions,    false
  app.set :logging,     false
  app.set :environment, (ENV['MM_ENV'] && ENV['MM_ENV'].to_sym) || :development
  # Middleman-specific options
  app.set :index_file,  "index.html"  # What file responds to folder requests
                                  # Such as the homepage (/) or subfolders (/about/)
  # These directories are passed directly to Compass
  app.set :js_dir,      "javascripts" # Where to look for javascript files
  app.set :css_dir,     "stylesheets" # Where to look for CSS files
  app.set :images_dir,  "images"      # Where to look for images
  app.set :build_dir,   "build"       # Which folder are builds output to
  app.set :http_prefix, nil           # During build, add a prefix for absolute paths
  # Pass all request to Middleman, even "static" files
  app.set :static, false
  app.set :views, "source"
  
  # Add Builder Callbacks
  app.register Middleman::CoreExtensions::Builder
  
  # Add Rack::Builder.map to Sinatra
  app.register Middleman::CoreExtensions::RackMap
  
  # Activate custom features
  app.register Middleman::CoreExtensions::Features
  
  # Activate Yaml Data package
  app.register Middleman::CoreExtensions::Data
  
  # Setup custom rendering
  app.register Middleman::CoreExtensions::Rendering
  
  # Compass framework
  app.register Middleman::CoreExtensions::Compass
  
  # Sprockets asset handling
  app.register Middleman::CoreExtensions::Sprockets
  
  # Setup asset path pipeline
  app.register Middleman::CoreExtensions::Assets
  
  # Activate built-in helpers
  app.register Middleman::CoreExtensions::DefaultHelpers
  
  # with_layout and page routing
  app.register Middleman::CoreExtensions::Routing
  
  # Parse YAML from templates
  app.register Middleman::CoreExtensions::FrontMatter
  app.set :default_features, [
    :lorem
  ]
  # Default layout name
  app.set :layout, :layout
  # This will match all requests not overridden in the project's config.rb
  app.not_found do
    process_request
  end
  # Custom 404 handler (to be styled)
  app.error Sinatra::NotFound do
    content_type 'text/html'
    "<html><body><h1>File Not Found</h1><p>#{request.path_info}</p></body>"
  end
  # See if Tilt cannot handle this file
  app.before_processing(:base) do |result|
    request_path = request.path_info.gsub("%20", " ")
    should_be_ignored = !(request["is_proxy"]) && settings.excluded_paths.include?("/#{request_path}")
    
    if result && !should_be_ignored
      extensionless_path, template_engine = result
      # Return static files
      if !::Tilt.mappings.has_key?(template_engine.to_s)
        matched_mime = mime_type(File.extname(request_path))
        matched_mime = "application/octet-stream" if matched_mime.nil?
        content_type matched_mime, :charset => 'utf-8'
        status 200
        send_file File.join(settings.views, request_path)
        false
      else
        true
      end
    else
      if !%w(favicon.ico).include?(request_path)
        $stderr.puts "File not found: #{request_path}"
      end
      
      status 404
      false
    end
  end
end