cloudhead-less 0.5.2 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Rakefile CHANGED
@@ -6,8 +6,36 @@ begin
6
6
  s.email = "alexis@cloudhead.net"
7
7
  s.summary = "LESS compiler"
8
8
  s.homepage = "http://www.lesscss.org"
9
- s.description = "Compiles LESS files into CSS"
9
+ s.description = "LESS is leaner CSS"
10
+ s.rubyforge_project = 'less'
10
11
  end
11
12
  rescue LoadError
12
13
  puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
14
+ end
15
+
16
+ # rubyforge
17
+ begin
18
+ require 'rake/contrib/sshpublisher'
19
+ namespace :rubyforge do
20
+
21
+ desc "Release gem and RDoc documentation to RubyForge"
22
+ task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
23
+
24
+ namespace :release do
25
+ desc "Publish RDoc to RubyForge."
26
+ task :docs => [:rdoc] do
27
+ config = YAML.load(
28
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
29
+ )
30
+ options << '--line-numbers' << '--inline-source'
31
+ host = "#{config['username']}@rubyforge.org"
32
+ remote_dir = "/var/www/gforge-projects/the-perfect-gem/"
33
+ local_dir = 'rdoc'
34
+
35
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
36
+ end
37
+ end
38
+ end
39
+ rescue LoadError
40
+ puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
13
41
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.2
1
+ 0.7.0
data/bin/lessc CHANGED
@@ -38,7 +38,7 @@ opts = OptionParser.new do |o|
38
38
 
39
39
  # Version
40
40
  o.on_tail("-v", "--version", "show version") do
41
- puts "Less Compiler " + Less::VERSION
41
+ puts "lessc " + Less.version
42
42
  exit
43
43
  end
44
44
  end
data/less.gemspec CHANGED
@@ -2,13 +2,13 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{less}
5
- s.version = "0.5.2"
5
+ s.version = "0.7.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["cloudhead"]
9
- s.date = %q{2009-05-19}
9
+ s.date = %q{2009-05-20}
10
10
  s.default_executable = %q{lessc}
11
- s.description = %q{Compiles LESS files into CSS}
11
+ s.description = %q{LESS is leaner CSS}
12
12
  s.email = %q{alexis@cloudhead.net}
13
13
  s.executables = ["lessc"]
14
14
  s.extra_rdoc_files = [
@@ -33,6 +33,7 @@ Gem::Specification.new do |s|
33
33
  s.homepage = %q{http://www.lesscss.org}
34
34
  s.rdoc_options = ["--charset=UTF-8"]
35
35
  s.require_paths = ["lib"]
36
+ s.rubyforge_project = %q{less}
36
37
  s.rubygems_version = %q{1.3.1}
37
38
  s.summary = %q{LESS compiler}
38
39
 
data/lib/less.rb CHANGED
@@ -3,7 +3,12 @@ require 'less/engine'
3
3
  require 'less/tree'
4
4
 
5
5
  module Less
6
- VERSION = '0.1'
6
+ class MixedUnitsError < Exception
7
+ end
8
+
9
+ def self.version
10
+ File.read( File.join( File.dirname(__FILE__), '..', 'VERSION') )
11
+ end
7
12
  end
8
13
 
9
14
  class Hash
data/lib/less/command.rb CHANGED
@@ -33,16 +33,9 @@ module Less
33
33
  # Error loop
34
34
  #
35
35
  loop do
36
- begin
37
- compile
38
- rescue SyntaxError
39
- error = $!.message.split("\n")[1..-1].collect {|e| e.gsub(/\(eval\)\:\d+\:\s/, '') } * "\n"
40
- log " errors were found in the .less file! \n#{error}\n"
36
+ unless compile
41
37
  log "Press [enter] to continue..."
42
- watch do
43
- $stdin.gets
44
- print "} "
45
- end
38
+ watch { $stdin.gets }
46
39
  next # continue within the error loop, until the error is fixed
47
40
  end
48
41
  break # break to main loop, as no errors were encountered
@@ -59,12 +52,20 @@ module Less
59
52
  # Create a new Less object with the contents of a file
60
53
  css = Less::Engine.new( File.read( @source ) ).to_css
61
54
  css = css.delete " \n" if compress?
55
+
62
56
  File.open( @destination, "w" ) do |file|
63
57
  file.write css
64
58
  end
65
59
  puts "#{@destination.split('/').last} was updated!" if watch?
66
60
  rescue Errno::ENOENT => e
67
61
  abort "#{e}"
62
+ rescue SyntaxError
63
+ error = $!.message.split("\n")[1..-1].collect {|e| e.gsub(/\(eval\)\:\d+\:\s/, '') } * "\n"
64
+ log " !! errors were found in the .less file! \n#{error}\n"
65
+ rescue MixedUnitsError
66
+ log "!! You're mixing units together! what do you expect?\n"
67
+ else
68
+ true
68
69
  end
69
70
  end
70
71
 
data/lib/less/engine.rb CHANGED
@@ -3,7 +3,7 @@ module Less
3
3
  REGEXP = {
4
4
  :path => /([#.][->#.\w]+)?( ?> ?)?@([\w\-]+)/, # #header > .title > @var
5
5
  :selector => /[-\w #.>*_:]/, # .cow .milk > a
6
- :values => /[-\w @>\/*+#%.,'"]/, # 10px solid #fff
6
+ :values => /[-\w \(\)@>\/*+#%.,'"]/, # 10px solid #fff
7
7
  :variable => /^@([\w\-]+)/ # @milk-white
8
8
  }
9
9
 
@@ -45,24 +45,24 @@ module Less
45
45
  end
46
46
 
47
47
  #
48
- # Evaluate the variables
48
+ # Evaluate variables
49
49
  #
50
50
  @tree = @tree.traverse :leaf do |key, value, path, node|
51
- convert = lambda do |key, value, node| # We declare this as a lambda, for re-use
52
- if value.is_a?(String) && value.include?('@') # There's a var to evaluate
51
+ convert = lambda do |key, value, node| # We declare this as a lambda, for re-use
52
+ if value.is_a?(String) && value.include?('@') # There's a var to evaluate
53
53
 
54
54
  # Find its value
55
55
  var = value.delete(' ').match( REGEXP[:path] ).captures.join
56
56
  var = unless var.include? '>'
57
- node.var( var ) || @tree.var( var ) # Try local first, then global
57
+ node.var( var ) || @tree.var( var ) # Try local first, then global
58
58
  else
59
- @tree.find :var, var.split('>') # Try finding it in a specific namespace
59
+ @tree.find :var, var.split('>') # Try finding it in a specific namespace
60
60
  end
61
61
 
62
62
  if var
63
- node[ key ] = value.gsub REGEXP[:path], var # substitute variable with value
63
+ node[ key ] = value.gsub REGEXP[:path], var # Substitute variable with value
64
64
  else
65
- node.delete key # discard the declaration if the variable wasn't found
65
+ node.delete key # Discard the declaration if the variable wasn't found
66
66
  end
67
67
  end
68
68
  end
@@ -76,7 +76,34 @@ module Less
76
76
  convert.call key, value, node
77
77
  end
78
78
  end
79
- end
79
+ end
80
+
81
+ #
82
+ # Evaluate operations (2+2)
83
+ #
84
+ # Units are: 1px, 1em, 1%, #111
85
+ @tree = @tree.traverse :leaf do |key, value, path, node|
86
+ if value.match /[-+\/*]/
87
+ if (unit = value.scan(/(%)|\d+(px)|\d+(em)|(#)/i).flatten.compact.uniq).size <= 1
88
+ unit = unit.join
89
+ value = if unit == '#'
90
+ value.gsub(/#([a-z0-9]+)/i) do
91
+ hex = $1 * ( $1.size == 3 ? 2 : 1 )
92
+ hex.to_i(16)
93
+ end.delete unit
94
+ evaluate = lambda {|v| unit + eval( v ).to_s(16) }
95
+ else
96
+ value.gsub(/px|em|%/, '')
97
+ evaluate = lambda {|v| eval( v ).to_s + unit }
98
+ end.to_s
99
+ next if value.match /[a-z]/i
100
+ node[ key ] = evaluate.call value
101
+ else
102
+ raise MixedUnitsError
103
+ end
104
+ end
105
+ end
106
+
80
107
  end
81
108
  alias render compile
82
109
 
@@ -84,10 +111,6 @@ module Less
84
111
  self.compile.to_css
85
112
  end
86
113
 
87
- def evaluate s
88
- eval( s )
89
- end
90
-
91
114
  def hashify
92
115
  #
93
116
  # Parse the LESS structure into a hash
data/spec/spec.less CHANGED
@@ -14,18 +14,6 @@
14
14
  color: @fa;
15
15
  line-height: 1999px;
16
16
  }
17
- .ccc {
18
- color: black;
19
- }
20
- .ddd {
21
- color: black;
22
- }
23
- .bbb {
24
- color: black;
25
- }
26
- .aaa {
27
- color: red;
28
- }
29
17
  .alt {
30
18
  @base-color: green;
31
19
  @darker-color: @base-color / 2;
@@ -33,13 +21,15 @@
33
21
  }
34
22
  .altfoo { color: .alt > @base-color; }
35
23
  .foo { border: 1px solid black; color: @base-color; }
36
-
24
+ .foo2 {
25
+ width: 10px * 2;
26
+ }
37
27
  #content {
38
28
  font-size: 12px;
39
29
  @some-color: blue;
40
30
  #header {
41
31
  .foo;
42
- font-size: #ffffff * 2;
32
+ font-size: #222 / 2;
43
33
  }
44
34
  #main-page {
45
35
  #content > .small;
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudhead-less
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - cloudhead
@@ -9,11 +9,11 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-19 00:00:00 -07:00
12
+ date: 2009-05-20 00:00:00 -07:00
13
13
  default_executable: lessc
14
14
  dependencies: []
15
15
 
16
- description: Compiles LESS files into CSS
16
+ description: LESS is leaner CSS
17
17
  email: alexis@cloudhead.net
18
18
  executables:
19
19
  - lessc
@@ -56,7 +56,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
56
56
  version:
57
57
  requirements: []
58
58
 
59
- rubyforge_project:
59
+ rubyforge_project: less
60
60
  rubygems_version: 1.2.0
61
61
  signing_key:
62
62
  specification_version: 2