| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | require 'sprockets/eco_template'require 'sprockets/ejs_template'require 'sprockets/jst_processor'require 'sprockets/utils'require 'tilt'module Sprockets  # `Engines` provides a global and `Environment` instance registry.  #  # An engine is a type of processor that is bound to an filename  # extension. `application.js.coffee` indicates that the  # `CoffeeScriptTemplate` engine will be ran on the file.  #  # Extensions can be stacked and will be evaulated from right to  # left. `application.js.coffee.erb` will first run `ERBTemplate`  # then `CoffeeScriptTemplate`.  #  # All `Engine`s must follow the `Tilt::Template` interface. It is  # recommended to subclass `Tilt::Template`.  #  # Its recommended that you register engine changes on your local  # `Environment` instance.  #  #     environment.register_engine '.foo', FooProcessor  #  # The global registry is exposed for plugins to register themselves.  #  #     Sprockets.register_engine '.sass', SassTemplate  #  module Engines    # Returns an `Array` of `Engine`s registered on the    # `Environment`. If an `ext` argument is supplied, the `Engine`    # register under that extension will be returned.    #    #     environment.engines    #     # => [CoffeeScriptTemplate, SassTemplate, ...]    #    #     environment.engines('.coffee')    #     # => CoffeeScriptTemplate    #    def engines(ext = nil)      if ext        ext = Sprockets::Utils.normalize_extension(ext)        @engines[ext]      else        @engines.dup      end    end    # Returns an `Array` of engine extension `String`s.    #    #     environment.engine_extensions    #     # => ['.coffee', '.sass', ...]    def engine_extensions      @engines.keys    end    # Registers a new Engine `klass` for `ext`. If the `ext` already    # has an engine registered, it will be overridden.    #    #     environment.register_engine '.coffee', CoffeeScriptTemplate    #    def register_engine(ext, klass)      ext = Sprockets::Utils.normalize_extension(ext)      @engines[ext] = klass    end    private      def deep_copy_hash(hash)        initial = Hash.new { |h, k| h[k] = [] }        hash.inject(initial) { |h, (k, a)| h[k] = a.dup; h }      end  endend
 |