begin
  require 'jeweler'
  Jeweler::Tasks.new do |s|
    s.name        = "less"
    s.authors     = ["cloudhead"]
    s.email       = "self@cloudhead.net"
    s.summary     = "LESS compiler"
    s.homepage    = "http://www.lesscss.org"
    s.description = "LESS is leaner CSS"
    s.rubyforge_project = 'less'
  end
rescue LoadError
  puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
end

# rubyforge
begin
  require 'rake/contrib/sshpublisher'
  namespace :rubyforge do
    desc "Release gem and RDoc documentation to RubyForge"
    task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]

    namespace :release do
      desc "Publish RDoc to RubyForge."
      task :docs => [:rdoc] do
        config = YAML.load(
            File.read(File.expand_path('~/.rubyforge/user-config.yml'))
        )
        options << '--line-numbers' << '--inline-source'
        host = "#{config['username']}@rubyforge.org"
        remote_dir = "/var/www/gforge-projects/the-perfect-gem/"
        local_dir = 'rdoc'

        Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
      end
    end
  end
rescue LoadError
  puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
end

begin
  require 'spec/rake/spectask'

  Spec::Rake::SpecTask.new("spec") do |t|
    t.spec_files = FileList['spec/**/*_spec.rb']
    t.spec_opts = ['--color', '--format=specdoc']
  end

  task :test do
    Rake::Task['spec'].invoke
  end

  Spec::Rake::SpecTask.new("rcov_spec") do |t|
    t.spec_files = FileList['spec/**/*_spec.rb']
    t.spec_opts = ['--color']
    t.rcov = true
    t.rcov_opts = ['--exclude', '^spec,/gems/']
  end
end

begin
  require 'lib/less'
  require 'benchmark'
  
  task :compile do
    abort "compiling isn't necessary anymore."
    puts "compiling #{LESS_GRAMMAR.split('/').last}..."
    File.open(LESS_PARSER, 'w') {|f| f.write Treetop::Compiler::GrammarCompiler.new.ruby_source(LESS_GRAMMAR) }
  end
  
  task :benchmark do
    #require 'profile'
    puts "benchmarking... "
    less, tree = File.read("spec/less/big.less"), nil
    
    parse = Benchmark.measure do
      tree = Less::Engine.new(less).parse(false)
    end.total.round(2)
    
    build = Benchmark.measure do
      tree.build(Less::Node::Element.new)
    end.total.round(2)
    
    puts "parse: #{parse}s\nbuild: #{build}s"
    puts "------------"
    puts "total: #{parse + build}s"
  end
end

