   DEFAULT_OPTIONS =
     src: 'src/coffee'        # directory to take .coffee files from
     target: 'Resources'      # directory to put .js files into
-    atomic: false            # should create a file task for each .js target?
     name: 'compile:coffee'   # name of the compiler task to generate
 
 

    return false if sources.length == 0
    compiled = (c for s, c of map)

    if options.atomic
      for s, c of map
        file c, [s], (->
          compile @prereqs, path.dirname(@name), -> complete()
        ), async: true

    Tintan.$.onTaskNamespace options.name, (name)->
      desc "Compile coffee-script sources into #{options.target}"
      if options.atomic
        task name, compiled, (->
          console.log 'compiled'.green + ' coffee-script sources into ' + options.target
        ), async: true
      else
        task name, (->
          console.log 'compile'.bold + ' coffee-script sources into ' + options.target
          jake.mkdirP(path.dirname c) for c in compiled
          compile [from], target, -> complete()
        ), async: true

    Tintan.$.onTaskNamespace options.name + ':clean', ->
      desc "Clean coffee-script produced files from #{options.target}"

        fs.unlink c for c in compiled
    true

   compile: (source, target, cb)->
     jake.mkdirP path.dirname(target)
     c = fs.readFileSync source, 'utf-8'
     j = coffee.compile c
     fs.writeFileSync target, j, 'utf-8'
     cb()

   invokeTask: ->
     jake.Task[@options.name].invoke()
