less 1.1.13 → 1.2.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. data/Rakefile +13 -41
  2. data/VERSION +1 -1
  3. data/bin/lessc +8 -2
  4. data/less.gemspec +13 -92
  5. data/lib/ext.rb +15 -19
  6. data/lib/less.rb +2 -2
  7. data/lib/less/command.rb +14 -15
  8. data/lib/less/engine.rb +3 -2
  9. data/lib/less/engine/grammar/common.tt +1 -1
  10. data/lib/less/engine/grammar/entity.tt +5 -5
  11. data/lib/less/engine/grammar/less.tt +107 -77
  12. data/lib/less/engine/nodes/element.rb +103 -24
  13. data/lib/less/engine/nodes/entity.rb +3 -3
  14. data/lib/less/engine/nodes/function.rb +11 -6
  15. data/lib/less/engine/nodes/literal.rb +8 -4
  16. data/lib/less/engine/nodes/property.rb +98 -38
  17. data/lib/less/engine/nodes/selector.rb +1 -1
  18. data/spec/css/css-3.css +14 -0
  19. data/spec/css/mixins-args.css +31 -0
  20. data/spec/css/variables.css +1 -0
  21. data/spec/css/whitespace.css +1 -0
  22. data/spec/engine_spec.rb +4 -3
  23. data/spec/less/css-3.less +30 -0
  24. data/spec/less/hidden.less +25 -0
  25. data/spec/less/import.less +1 -0
  26. data/spec/less/literal-css.less +11 -0
  27. data/spec/less/mixins-args.less +50 -0
  28. data/spec/less/variables.less +7 -1
  29. data/spec/less/whitespace.less +1 -0
  30. data/spec/spec_helper.rb +2 -2
  31. metadata +25 -94
  32. data/lib/vendor/treetop/.gitignore +0 -7
  33. data/lib/vendor/treetop/LICENSE +0 -19
  34. data/lib/vendor/treetop/README +0 -164
  35. data/lib/vendor/treetop/Rakefile +0 -19
  36. data/lib/vendor/treetop/benchmark/seqpar.gnuplot +0 -15
  37. data/lib/vendor/treetop/benchmark/seqpar.treetop +0 -16
  38. data/lib/vendor/treetop/benchmark/seqpar_benchmark.rb +0 -107
  39. data/lib/vendor/treetop/bin/tt +0 -28
  40. data/lib/vendor/treetop/lib/treetop.rb +0 -8
  41. data/lib/vendor/treetop/lib/treetop/bootstrap_gen_1_metagrammar.rb +0 -45
  42. data/lib/vendor/treetop/lib/treetop/compiler.rb +0 -6
  43. data/lib/vendor/treetop/lib/treetop/compiler/grammar_compiler.rb +0 -42
  44. data/lib/vendor/treetop/lib/treetop/compiler/lexical_address_space.rb +0 -17
  45. data/lib/vendor/treetop/lib/treetop/compiler/metagrammar.rb +0 -3097
  46. data/lib/vendor/treetop/lib/treetop/compiler/metagrammar.treetop +0 -408
  47. data/lib/vendor/treetop/lib/treetop/compiler/node_classes.rb +0 -19
  48. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/anything_symbol.rb +0 -18
  49. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/atomic_expression.rb +0 -14
  50. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/character_class.rb +0 -24
  51. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/choice.rb +0 -31
  52. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/declaration_sequence.rb +0 -24
  53. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/grammar.rb +0 -28
  54. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/inline_module.rb +0 -27
  55. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/nonterminal.rb +0 -13
  56. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/optional.rb +0 -19
  57. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/parenthesized_expression.rb +0 -9
  58. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/parsing_expression.rb +0 -138
  59. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/parsing_rule.rb +0 -55
  60. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/predicate.rb +0 -45
  61. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/repetition.rb +0 -55
  62. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/sequence.rb +0 -68
  63. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/terminal.rb +0 -20
  64. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/transient_prefix.rb +0 -9
  65. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/treetop_file.rb +0 -9
  66. data/lib/vendor/treetop/lib/treetop/compiler/ruby_builder.rb +0 -113
  67. data/lib/vendor/treetop/lib/treetop/ruby_extensions.rb +0 -2
  68. data/lib/vendor/treetop/lib/treetop/ruby_extensions/string.rb +0 -42
  69. data/lib/vendor/treetop/lib/treetop/runtime.rb +0 -5
  70. data/lib/vendor/treetop/lib/treetop/runtime/compiled_parser.rb +0 -105
  71. data/lib/vendor/treetop/lib/treetop/runtime/interval_skip_list.rb +0 -4
  72. data/lib/vendor/treetop/lib/treetop/runtime/interval_skip_list/head_node.rb +0 -15
  73. data/lib/vendor/treetop/lib/treetop/runtime/interval_skip_list/interval_skip_list.rb +0 -200
  74. data/lib/vendor/treetop/lib/treetop/runtime/interval_skip_list/node.rb +0 -164
  75. data/lib/vendor/treetop/lib/treetop/runtime/syntax_node.rb +0 -72
  76. data/lib/vendor/treetop/lib/treetop/runtime/terminal_parse_failure.rb +0 -16
  77. data/lib/vendor/treetop/lib/treetop/runtime/terminal_syntax_node.rb +0 -17
  78. data/lib/vendor/treetop/lib/treetop/version.rb +0 -9
  79. data/lib/vendor/treetop/spec/compiler/and_predicate_spec.rb +0 -36
  80. data/lib/vendor/treetop/spec/compiler/anything_symbol_spec.rb +0 -44
  81. data/lib/vendor/treetop/spec/compiler/character_class_spec.rb +0 -182
  82. data/lib/vendor/treetop/spec/compiler/choice_spec.rb +0 -80
  83. data/lib/vendor/treetop/spec/compiler/circular_compilation_spec.rb +0 -28
  84. data/lib/vendor/treetop/spec/compiler/failure_propagation_functional_spec.rb +0 -21
  85. data/lib/vendor/treetop/spec/compiler/grammar_compiler_spec.rb +0 -84
  86. data/lib/vendor/treetop/spec/compiler/grammar_spec.rb +0 -41
  87. data/lib/vendor/treetop/spec/compiler/nonterminal_symbol_spec.rb +0 -40
  88. data/lib/vendor/treetop/spec/compiler/not_predicate_spec.rb +0 -38
  89. data/lib/vendor/treetop/spec/compiler/one_or_more_spec.rb +0 -35
  90. data/lib/vendor/treetop/spec/compiler/optional_spec.rb +0 -37
  91. data/lib/vendor/treetop/spec/compiler/parenthesized_expression_spec.rb +0 -19
  92. data/lib/vendor/treetop/spec/compiler/parsing_rule_spec.rb +0 -32
  93. data/lib/vendor/treetop/spec/compiler/sequence_spec.rb +0 -115
  94. data/lib/vendor/treetop/spec/compiler/terminal_spec.rb +0 -81
  95. data/lib/vendor/treetop/spec/compiler/terminal_symbol_spec.rb +0 -37
  96. data/lib/vendor/treetop/spec/compiler/test_grammar.treetop +0 -7
  97. data/lib/vendor/treetop/spec/compiler/test_grammar.tt +0 -7
  98. data/lib/vendor/treetop/spec/compiler/test_grammar_do.treetop +0 -7
  99. data/lib/vendor/treetop/spec/compiler/zero_or_more_spec.rb +0 -56
  100. data/lib/vendor/treetop/spec/composition/a.treetop +0 -11
  101. data/lib/vendor/treetop/spec/composition/b.treetop +0 -11
  102. data/lib/vendor/treetop/spec/composition/c.treetop +0 -10
  103. data/lib/vendor/treetop/spec/composition/d.treetop +0 -10
  104. data/lib/vendor/treetop/spec/composition/f.treetop +0 -17
  105. data/lib/vendor/treetop/spec/composition/grammar_composition_spec.rb +0 -40
  106. data/lib/vendor/treetop/spec/composition/subfolder/e_includes_c.treetop +0 -15
  107. data/lib/vendor/treetop/spec/ruby_extensions/string_spec.rb +0 -32
  108. data/lib/vendor/treetop/spec/runtime/compiled_parser_spec.rb +0 -101
  109. data/lib/vendor/treetop/spec/runtime/interval_skip_list/delete_spec.rb +0 -147
  110. data/lib/vendor/treetop/spec/runtime/interval_skip_list/expire_range_spec.rb +0 -349
  111. data/lib/vendor/treetop/spec/runtime/interval_skip_list/insert_and_delete_node.rb +0 -385
  112. data/lib/vendor/treetop/spec/runtime/interval_skip_list/insert_spec.rb +0 -660
  113. data/lib/vendor/treetop/spec/runtime/interval_skip_list/interval_skip_list_spec.graffle +0 -6175
  114. data/lib/vendor/treetop/spec/runtime/interval_skip_list/interval_skip_list_spec.rb +0 -58
  115. data/lib/vendor/treetop/spec/runtime/interval_skip_list/palindromic_fixture.rb +0 -23
  116. data/lib/vendor/treetop/spec/runtime/interval_skip_list/palindromic_fixture_spec.rb +0 -164
  117. data/lib/vendor/treetop/spec/runtime/interval_skip_list/spec_helper.rb +0 -84
  118. data/lib/vendor/treetop/spec/runtime/syntax_node_spec.rb +0 -53
  119. data/lib/vendor/treetop/spec/spec_helper.rb +0 -106
  120. data/lib/vendor/treetop/spec/spec_suite.rb +0 -4
  121. data/lib/vendor/treetop/treetop.gemspec +0 -17
@@ -57,20 +57,20 @@ module Less
57
57
  # An anonymous node, for all the 'other' stuff
58
58
  # which doesn't need any specific functionality.
59
59
  #
60
- class Anonymous < ::String
60
+ class Anonymous < String
61
61
  include Entity
62
62
  end
63
63
 
64
64
  #
65
65
  # + * - /
66
66
  #
67
- class Operator < ::String
67
+ class Operator < String
68
68
  def to_ruby
69
69
  self
70
70
  end
71
71
  end
72
72
 
73
- class Paren < ::String
73
+ class Paren < String
74
74
  def to_ruby
75
75
  self
76
76
  end
@@ -48,17 +48,22 @@ module Less
48
48
  #
49
49
  # it calls functions from the Functions module
50
50
  #
51
- class Function < ::String
51
+ class Function < String
52
52
  include Entity
53
53
  include Functions
54
54
 
55
- def initialize name, *args
56
- @args = args.flatten
55
+ def initialize name, args
56
+ @args = if args.is_a? Array
57
+ args.map {|e| e.is_a?(Expression) ? e : Expression.new(e, self)}
58
+ else
59
+ [args]
60
+ end
61
+
57
62
  super name
58
63
  end
59
64
 
60
- def to_css
61
- self.evaluate.to_css
65
+ def to_css env = nil
66
+ self.evaluate(env).to_css *env
62
67
  end
63
68
 
64
69
  #
@@ -67,7 +72,7 @@ module Less
67
72
  # If the function isn't found, we just print it out,
68
73
  # this is the case for url(), for example,
69
74
  #
70
- def evaluate
75
+ def evaluate context = nil
71
76
  if Functions.available.include? self.to_sym
72
77
  send to_sym, *@args
73
78
  else
@@ -17,7 +17,7 @@ module Less
17
17
 
18
18
  def initialize r, g, b, a = 1.0
19
19
  @r, @g, @b = [r, g, b].map do |c|
20
- normalize(c.is_a?(::String) ? c.to_i(16) : c)
20
+ normalize(c.is_a?(String) ? c.to_i(16) : c)
21
21
  end
22
22
  @a = normalize(a, 1.0)
23
23
  end
@@ -94,7 +94,11 @@ module Less
94
94
  def to_s
95
95
  "#{super}#@unit"
96
96
  end
97
-
97
+
98
+ def dup
99
+ self
100
+ end
101
+
98
102
  def to_ruby
99
103
  self.to_f
100
104
  end
@@ -111,7 +115,7 @@ module Less
111
115
  #
112
116
  # "hello world"
113
117
  #
114
- class String < ::String
118
+ class Quoted < String
115
119
  include Literal
116
120
 
117
121
  attr_reader :quotes, :content
@@ -152,7 +156,7 @@ module Less
152
156
  #
153
157
  # ex: red, small, border-collapse
154
158
  #
155
- class Keyword < ::String
159
+ class Keyword < String
156
160
  include Entity
157
161
 
158
162
  def to_css
@@ -1,33 +1,43 @@
1
1
  module Less
2
2
  module Node
3
- class Property < ::String
3
+ class Property < String
4
4
  include Entity
5
5
 
6
6
  attr_accessor :value
7
7
 
8
8
  def initialize key, value = nil, parent = nil
9
9
  super key, parent
10
-
11
10
  value = if value.is_a? Array
12
- value.each {|v| v.parent = self if v.respond_to? :parent }
11
+ value.each {|v| v.parent = self if v.respond_to? :parent }.
12
+ map {|v| v.is_a?(Expression) ? v : Expression.new(v, self) }
13
13
  elsif value.nil?
14
14
  []
15
15
  else
16
16
  value
17
17
  end
18
-
19
- @value = Expression.new(value, self)
20
- @eval = false # Store the first evaluation in here
18
+ @value = value.is_a?(Expression) ? value : Expression.new(value, self)
19
+ @value.parent = self
20
+ @value.delimiter = ','
21
+ # puts "new property #{to_s}: #{value} => #{@value}, contains: #{@value[0].class}"
22
+ # puts
21
23
  end
22
-
23
- def << token
24
+
25
+ def parent= obj
26
+ @parent = obj
27
+ value.parent = self
28
+ end
29
+
30
+ def copy
31
+ clone.tap {|c| c.value = value.copy }
32
+ end
33
+
34
+ def << token
24
35
  token = Node::Anonymous.new(*token) unless token.is_a? Entity or token.respond_to? :to_ruby
25
36
  token.parent = self if token.respond_to? :parent
26
37
  @value << token
27
38
  end
28
39
 
29
40
  def empty?; !@value || @value.empty? end
30
- def eval?; @eval end
31
41
 
32
42
  def inspect
33
43
  self + (empty?? "" : ": `#{value.map {|i| i.to_s } * ' | '}`")
@@ -49,13 +59,29 @@ module Less
49
59
  parent.nearest node
50
60
  end
51
61
 
52
- # TODO: @eval and @value should be merged
53
- def evaluate
54
- @eval ||= value.evaluate
62
+ def evaluate env = nil
63
+ # puts "evaluating property `#{to_s}`: #{value.inspect}"
64
+ if value.is_a?(Expression) #Value
65
+ # puts "value is a Value"
66
+ value.map {|e| e.evaluate(env) } #6
67
+ else
68
+ # puts "value is a #{value.class}"
69
+ [value.evaluate(env)]
70
+ end
71
+
72
+
55
73
  end
56
74
 
57
- def to_css
58
- "#{self}: #{evaluate.to_css};"
75
+ def to_css env = nil
76
+ # puts "property.to_css `#{to_s}` env:#{env ? env.variables : "nil"}"
77
+ val = evaluate(env)
78
+ "#{self}: #{if val.respond_to? :to_css
79
+ val.to_css
80
+ else
81
+ # p val
82
+ # puts "#{val.class} #{val.first.class}"
83
+ val.map {|i| i.to_css }.join(", ")
84
+ end};"
59
85
  end
60
86
  end
61
87
 
@@ -75,11 +101,13 @@ module Less
75
101
  "@#{super}"
76
102
  end
77
103
 
78
- def evaluate
104
+ def evaluate env = nil
79
105
  if declaration
80
- @eval ||= value.evaluate
81
- else
82
- @eval ||= self.parent.nearest(to_s).evaluate
106
+ # puts "evaluating DEC"
107
+ value.evaluate #2
108
+ else
109
+ # puts "evaluating #{to_s} par: #{parent} env: #{env ? env.variables : "nil"}"
110
+ (env || self.parent).nearest(to_s).evaluate #3
83
111
  end
84
112
  end
85
113
 
@@ -87,20 +115,28 @@ module Less
87
115
  evaluate.to_ruby
88
116
  end
89
117
 
90
- def to_css
91
- evaluate.to_css
118
+ def to_css env = nil
119
+ val = evaluate env
120
+ if val.respond_to? :to_css
121
+ env ? val.to_css(env) : val.to_css
122
+ else
123
+ val.map {|i| env ? i.to_css(env) : i.to_css }.join ', '
124
+ end
92
125
  end
93
126
  end
94
-
127
+
95
128
  class Expression < Array
96
- attr_reader :parent
129
+ attr_accessor :parent, :delimiter
97
130
 
98
- def initialize ary, parent = nil
131
+ def initialize ary, parent = nil, delimiter = ' '
99
132
  self.parent = parent
100
- super ary
133
+ self.delimiter = delimiter
134
+ # puts "new expression #{ary} |#{delimiter}|"
135
+ super(ary.is_a?(Array) ? ary : [ary].flatten)
101
136
  end
102
137
 
103
138
  def expressions; select {|i| i.kind_of? Expression } end
139
+ def variables; select {|i| i.kind_of? Variable } end
104
140
  def operators; select {|i| i.is_a? Operator } end
105
141
  def entities; select {|i| i.kind_of? Entity } end
106
142
  def literals; select {|i| i.kind_of? Literal } end
@@ -114,14 +150,23 @@ module Less
114
150
  '[' + map {|i| i.inspect }.join(', ') + ']'
115
151
  end
116
152
 
153
+ def delimiter= d
154
+ @delimiter = d.strip + ' '
155
+ end
156
+
157
+ def flatten
158
+ self
159
+ end
160
+
117
161
  def terminal?
118
- expressions.empty?
162
+ expressions.empty? #&& variables.empty?
119
163
  end
120
-
121
- def to_css
164
+
165
+ def to_css env = nil
166
+ # puts "TOCSS, delim: |#{@delimiter}|"
122
167
  map do |i|
123
- i.respond_to?(:to_css) ? i.to_css : i.to_s
124
- end * ' '
168
+ i.respond_to?(:to_css) ? i.to_css(*env) : i.to_s
169
+ end * @delimiter
125
170
  end
126
171
 
127
172
  def to_ruby
@@ -134,27 +179,42 @@ module Less
134
179
  # Evaluates the expression and instantiates a new Literal with the result
135
180
  # ex: [#111, +, #111] will evaluate to a Color node, with value #222
136
181
  #
137
- def evaluate
182
+ def evaluate env = nil
183
+ # puts "expression #{self.inspect} env: #{env ? env.variables : "nil"}"
138
184
  if size > 2 or !terminal?
185
+ # puts " SIZE > 2 or !terminal"
186
+
187
+ # puts "--- sub evaluation ---"
188
+
139
189
  # Replace self with an evaluated sub-expression
140
- replace map {|e| e.respond_to?(:evaluate) ? e.evaluate : e }
190
+ evaled = self.class.new(map {|e| e.respond_to?(:evaluate) ? e.evaluate(env) : e }, parent, delimiter) #5
191
+
192
+ # puts "======================"
193
+ # puts "evaled => #{evaled.inspect}"
141
194
 
142
- unit = literals.map do |node|
195
+ unit = evaled.literals.map do |node|
143
196
  node.unit
144
197
  end.compact.uniq.tap do |ary|
145
- raise MixedUnitsError, self * ' ' if ary.size > 1 && !operators.empty?
198
+ raise MixedUnitsError, evaled * ' ' if ary.size > 1 && !evaled.operators.empty?
146
199
  end.join
147
200
 
148
- entity = literals.find {|e| e.unit == unit } || entities.first
149
- result = operators.empty?? self : eval(to_ruby.join)
150
-
201
+ entity = evaled.literals.find {|e| e.unit == unit } || evaled.literals.first || evaled.entities.first
202
+ result = evaled.operators.empty?? evaled : eval(evaled.to_ruby.join)
203
+
204
+ # puts "entity is a #{entity.class}"
205
+ # puts "delimiter is |#{@delimiter}|"
206
+
151
207
  case result
152
208
  when Entity then result
153
- when Expression then result.one?? result.first : self.class.new(result)
209
+ when Expression then result.one?? result.first : self.class.new(result, parent, delimiter)
154
210
  else entity.class.new(result, *(unit if entity.class == Node::Number))
155
211
  end
156
212
  elsif size == 1
157
- first
213
+ if first.is_a? Variable
214
+ first.evaluate(env)
215
+ else
216
+ first
217
+ end
158
218
  else
159
219
  self
160
220
  end
@@ -1,6 +1,6 @@
1
1
  module Less
2
2
  module Node
3
- class Selector < ::String
3
+ class Selector < String
4
4
  include Entity
5
5
 
6
6
  Selectors = {
@@ -1,3 +1,17 @@
1
+ .comma-delimited {
2
+ background: url(bg.jpg) no-repeat, url(bg.png) repeat-x top left, url(bg);
3
+ text-shadow: -1px -1px 1px red, 6px 5px 5px yellow;
4
+ -moz-box-shadow: 0pt 0pt 2px rgba(255, 255, 255, 0.4) inset, 0pt 4px 6px rgba(255, 255, 255, 0.4) inset;
5
+ }
6
+ @font-face {
7
+ font-family: Headline;
8
+ src: local(Futura-Medium), url(fonts.svg#MyGeometricModern) format("svg");
9
+ }
10
+ .other { -moz-transform: translate(0, 11em) rotate(-90deg); }
1
11
  p:not([class*="lead"]) { color: black; }
12
+ input[type="text"].class#id[attr=32]:not(1) { color: white; }
13
+ div#id.class[a=1][b=2].class:not(1) { color: white; }
14
+ ul.comma > li:not(:only-child)::after { color: white; }
15
+ ol.comma > li:nth-last-child(2)::after { color: white; }
2
16
  a[href^="http://"], a[href$="http://"] { color: black; }
3
17
  p::before { color: black; }
@@ -0,0 +1,31 @@
1
+ .two-args {
2
+ color: blue;
3
+ width: 10px;
4
+ height: 99%;
5
+ }
6
+ .one-arg {
7
+ width: 15px;
8
+ height: 49%;
9
+ }
10
+ .no-parens {
11
+ width: 5px;
12
+ height: 49%;
13
+ }
14
+ .no-args {
15
+ width: 5px;
16
+ height: 49%;
17
+ }
18
+ .var-args {
19
+ width: 45;
20
+ height: 17%;
21
+ }
22
+ .multi-mix {
23
+ width: 10px;
24
+ height: 29%;
25
+ margin: 4;
26
+ padding: 5;
27
+ }
28
+ body {
29
+ padding: 30px;
30
+ color: #ff0000;
31
+ }
@@ -3,4 +3,5 @@
3
3
  height: 24px;
4
4
  color: #888888;
5
5
  font-family: "Trebuchet MS", Verdana, sans-serif;
6
+ quotes: "~" "~";
6
7
  }
@@ -3,4 +3,5 @@
3
3
  color: white;
4
4
  white-space: pre;
5
5
  }
6
+ .no-semi-column { border: 2px solid white; }
6
7
  .newlines { border: 2px solid black; }
@@ -84,16 +84,17 @@ describe Less::Engine do
84
84
 
85
85
  it "should handle custom functions" do
86
86
  module Less::Functions
87
- def color arg
87
+ def color args
88
+ arg = args.first
88
89
  Less::Node::Color.new("99", "99", "99") if arg == "evil red"
89
90
  end
90
91
 
91
92
  def increment a
92
- Less::Node::Number.new(a.to_i + 1)
93
+ Less::Node::Number.new(a.evaluate.to_i + 1)
93
94
  end
94
95
 
95
96
  def add a, b
96
- Less::Node::Number.new(a + b)
97
+ Less::Node::Number.new(a.evaluate + b.evaluate)
97
98
  end
98
99
  end
99
100
  lessify(:functions).should == css(:functions)
@@ -1,7 +1,37 @@
1
+ .comma-delimited {
2
+ background: url(bg.jpg) no-repeat, url(bg.png) repeat-x top left, url(bg);
3
+ text-shadow: -1px -1px 1px red, 6px 5px 5px yellow;
4
+ -moz-box-shadow: 0pt 0pt 2px rgba(255, 255, 255, 0.4) inset,
5
+ 0pt 4px 6px rgba(255, 255, 255, 0.4) inset;
6
+ }
7
+ @font-face {
8
+ font-family: Headline;
9
+ src: local(Futura-Medium),
10
+ url(fonts.svg#MyGeometricModern) format("svg");
11
+ }
12
+ .other {
13
+ -moz-transform: translate(0, 11em) rotate(-90deg);
14
+ }
1
15
  p:not([class*="lead"]) {
2
16
  color: black;
3
17
  }
4
18
 
19
+ input[type="text"].class#id[attr=32]:not(1) {
20
+ color: white;
21
+ }
22
+
23
+ div#id.class[a=1][b=2].class:not(1) {
24
+ color: white;
25
+ }
26
+
27
+ ul.comma > li:not(:only-child)::after {
28
+ color: white;
29
+ }
30
+
31
+ ol.comma > li:nth-last-child(2)::after {
32
+ color: white;
33
+ }
34
+
5
35
  a[href^="http://"] {
6
36
  color: black;
7
37
  }