less 2.3.3 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (185) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +5 -0
  3. data/less.gemspec +1 -1
  4. data/lib/less/js/.gitattributes +9 -0
  5. data/lib/less/js/.gitignore +1 -0
  6. data/lib/less/js/.npmignore +1 -1
  7. data/lib/less/js/CHANGELOG.md +68 -0
  8. data/lib/less/js/CONTRIBUTING.md +33 -34
  9. data/lib/less/js/Makefile +24 -9
  10. data/lib/less/js/README.md +2 -2
  11. data/lib/less/js/bin/lessc +102 -25
  12. data/lib/less/js/build/amd.js +1 -1
  13. data/lib/less/js/build/header.js +9 -7
  14. data/lib/less/js/dist/less-1.3.3.js +2 -2
  15. data/lib/less/js/dist/less-1.3.3.min.js +2 -2
  16. data/lib/less/js/dist/less-1.4.0-beta.js +5830 -0
  17. data/lib/less/js/dist/less-1.4.0-beta.min.js +11 -0
  18. data/lib/less/js/dist/less-1.4.0.js +5830 -0
  19. data/lib/less/js/dist/less-1.4.0.min.js +11 -0
  20. data/lib/less/js/dist/less-1.4.1.js +5837 -0
  21. data/lib/less/js/dist/less-1.4.1.min.js +11 -0
  22. data/lib/less/js/dist/less-1.4.2.js +5837 -0
  23. data/lib/less/js/dist/less-1.4.2.min.js +11 -0
  24. data/lib/less/js/dist/less-rhino-1.4.0.js +4273 -0
  25. data/lib/less/js/lib/less/browser.js +131 -101
  26. data/lib/less/js/lib/less/env.js +105 -0
  27. data/lib/less/js/lib/less/extend-visitor.js +391 -0
  28. data/lib/less/js/lib/less/functions.js +174 -19
  29. data/lib/less/js/lib/less/import-visitor.js +107 -0
  30. data/lib/less/js/lib/less/index.js +70 -63
  31. data/lib/less/js/lib/less/join-selector-visitor.js +37 -0
  32. data/lib/less/js/lib/less/lessc_helper.js +13 -4
  33. data/lib/less/js/lib/less/parser.js +353 -264
  34. data/lib/less/js/lib/less/rhino.js +5 -2
  35. data/lib/less/js/lib/less/tree.js +1 -1
  36. data/lib/less/js/lib/less/tree/alpha.js +7 -3
  37. data/lib/less/js/lib/less/tree/anonymous.js +1 -0
  38. data/lib/less/js/lib/less/tree/assignment.js +4 -0
  39. data/lib/less/js/lib/less/tree/call.js +14 -8
  40. data/lib/less/js/lib/less/tree/color.js +50 -5
  41. data/lib/less/js/lib/less/tree/comment.js +1 -0
  42. data/lib/less/js/lib/less/tree/condition.js +35 -28
  43. data/lib/less/js/lib/less/tree/dimension.js +270 -16
  44. data/lib/less/js/lib/less/tree/directive.js +7 -2
  45. data/lib/less/js/lib/less/tree/element.js +57 -21
  46. data/lib/less/js/lib/less/tree/expression.js +29 -4
  47. data/lib/less/js/lib/less/tree/extend.js +43 -0
  48. data/lib/less/js/lib/less/tree/import.js +49 -28
  49. data/lib/less/js/lib/less/tree/javascript.js +1 -0
  50. data/lib/less/js/lib/less/tree/keyword.js +3 -2
  51. data/lib/less/js/lib/less/tree/media.js +20 -4
  52. data/lib/less/js/lib/less/tree/mixin.js +38 -18
  53. data/lib/less/js/lib/less/tree/negative.js +22 -0
  54. data/lib/less/js/lib/less/tree/operation.js +32 -17
  55. data/lib/less/js/lib/less/tree/paren.js +5 -1
  56. data/lib/less/js/lib/less/tree/quoted.js +5 -3
  57. data/lib/less/js/lib/less/tree/rule.js +44 -31
  58. data/lib/less/js/lib/less/tree/ruleset.js +50 -23
  59. data/lib/less/js/lib/less/tree/selector.js +49 -39
  60. data/lib/less/js/lib/less/tree/unicode-descriptor.js +1 -0
  61. data/lib/less/js/lib/less/tree/url.js +9 -5
  62. data/lib/less/js/lib/less/tree/value.js +4 -1
  63. data/lib/less/js/lib/less/tree/variable.js +4 -3
  64. data/lib/less/js/lib/less/visitor.js +54 -0
  65. data/lib/less/js/package.json +69 -19
  66. data/lib/less/js/test/browser-test-prepare.js +23 -6
  67. data/lib/less/js/test/browser/common.js +55 -3
  68. data/lib/less/js/test/browser/css/urls.css +13 -0
  69. data/lib/less/js/test/browser/less/relative-urls/urls.less +1 -1
  70. data/lib/less/js/test/browser/less/urls.less +16 -0
  71. data/lib/less/js/test/browser/phantom-runner.js +7 -5
  72. data/lib/less/js/test/browser/runner-browser.js +5 -1
  73. data/lib/less/js/test/browser/runner-errors.js +5 -0
  74. data/lib/less/js/test/browser/runner-legacy.js +6 -0
  75. data/lib/less/js/test/browser/runner-production.js +7 -0
  76. data/lib/less/js/test/browser/template.htm +6 -6
  77. data/lib/less/js/test/css/comments.css +1 -0
  78. data/lib/less/js/test/css/compression/compression.css +2 -0
  79. data/lib/less/js/test/css/css-3.css +4 -0
  80. data/lib/less/js/test/css/css.css +9 -3
  81. data/lib/less/js/test/css/extend-chaining.css +72 -0
  82. data/lib/less/js/test/css/extend-clearfix.css +19 -0
  83. data/lib/less/js/test/css/extend-exact.css +37 -0
  84. data/lib/less/js/test/css/extend-media.css +24 -0
  85. data/lib/less/js/test/css/extend-nest.css +57 -0
  86. data/lib/less/js/test/css/extend-selector.css +72 -0
  87. data/lib/less/js/test/css/extend.css +76 -0
  88. data/lib/less/js/test/css/functions.css +28 -0
  89. data/lib/less/js/test/css/import-interpolation.css +6 -0
  90. data/lib/less/js/test/css/import.css +18 -1
  91. data/lib/less/js/test/css/legacy/legacy.css +7 -0
  92. data/lib/less/js/test/css/media.css +9 -1
  93. data/lib/less/js/test/css/mixins-args.css +18 -0
  94. data/lib/less/js/test/css/mixins-guards.css +5 -0
  95. data/lib/less/js/test/css/parens.css +18 -5
  96. data/lib/less/js/test/css/selectors.css +14 -6
  97. data/lib/less/js/test/css/urls.css +17 -0
  98. data/lib/less/js/test/css/variables.css +22 -3
  99. data/lib/less/js/test/data/data-uri-fail.png +0 -0
  100. data/lib/less/js/test/data/image.jpg +0 -0
  101. data/lib/less/js/test/data/page.html +1 -0
  102. data/lib/less/js/test/less-test.js +41 -9
  103. data/lib/less/js/test/less/colors.less +4 -4
  104. data/lib/less/js/test/less/comments.less +2 -2
  105. data/lib/less/js/test/less/compression/compression.less +16 -0
  106. data/lib/less/js/test/less/css-3.less +5 -1
  107. data/lib/less/js/test/less/css.less +9 -3
  108. data/lib/less/js/test/less/errors/add-mixed-units.less +3 -0
  109. data/lib/less/js/test/less/errors/add-mixed-units.txt +2 -0
  110. data/lib/less/js/test/less/errors/add-mixed-units2.less +3 -0
  111. data/lib/less/js/test/less/errors/add-mixed-units2.txt +2 -0
  112. data/lib/less/js/test/less/errors/bad-variable-declaration1.txt +1 -1
  113. data/lib/less/js/test/less/errors/color-operation-error.less +3 -0
  114. data/lib/less/js/test/less/errors/color-operation-error.txt +2 -0
  115. data/lib/less/js/test/less/errors/comment-in-selector.txt +1 -1
  116. data/lib/less/js/test/less/errors/divide-mixed-units.less +3 -0
  117. data/lib/less/js/test/less/errors/divide-mixed-units.txt +4 -0
  118. data/lib/less/js/test/less/errors/extend-no-selector.less +3 -0
  119. data/lib/less/js/test/less/errors/extend-no-selector.txt +3 -0
  120. data/lib/less/js/test/less/errors/extend-not-at-end.less +3 -0
  121. data/lib/less/js/test/less/errors/extend-not-at-end.txt +3 -0
  122. data/lib/less/js/test/less/errors/import-missing.less +5 -0
  123. data/lib/less/js/test/less/errors/import-missing.txt +3 -3
  124. data/lib/less/js/test/less/errors/import-no-semi.txt +1 -1
  125. data/lib/less/js/test/less/errors/import-subfolder1.txt +1 -1
  126. data/lib/less/js/test/less/errors/import-subfolder2.txt +1 -1
  127. data/lib/less/js/test/less/errors/javascript-error.txt +1 -1
  128. data/lib/less/js/test/less/errors/mixed-mixin-definition-args-1.txt +1 -1
  129. data/lib/less/js/test/less/errors/mixed-mixin-definition-args-2.txt +1 -1
  130. data/lib/less/js/test/less/errors/mixin-not-defined.txt +1 -1
  131. data/lib/less/js/test/less/errors/mixin-not-matched.txt +1 -1
  132. data/lib/less/js/test/less/errors/mixin-not-matched2.txt +1 -1
  133. data/lib/less/js/test/less/errors/multiply-mixed-units.less +7 -0
  134. data/lib/less/js/test/less/errors/multiply-mixed-units.txt +4 -0
  135. data/lib/less/js/test/less/errors/parens-error-1.less +3 -0
  136. data/lib/less/js/test/less/errors/parens-error-1.txt +4 -0
  137. data/lib/less/js/test/less/errors/parens-error-2.less +3 -0
  138. data/lib/less/js/test/less/errors/parens-error-2.txt +4 -0
  139. data/lib/less/js/test/less/errors/parens-error-3.less +3 -0
  140. data/lib/less/js/test/less/errors/parens-error-3.txt +4 -0
  141. data/lib/less/js/test/less/errors/parse-error-curly-bracket.txt +1 -1
  142. data/lib/less/js/test/less/errors/parse-error-missing-bracket.txt +2 -1
  143. data/lib/less/js/test/less/errors/parse-error-with-import.txt +1 -1
  144. data/lib/less/js/test/less/errors/property-ie5-hack.txt +1 -1
  145. data/lib/less/js/test/less/errors/property-in-root.less +4 -0
  146. data/lib/less/js/test/less/errors/property-in-root.txt +4 -0
  147. data/lib/less/js/test/less/errors/property-in-root2.less +1 -0
  148. data/lib/less/js/test/less/errors/property-in-root2.txt +4 -0
  149. data/lib/less/js/test/less/errors/property-in-root3.less +4 -0
  150. data/lib/less/js/test/less/errors/property-in-root3.txt +3 -0
  151. data/lib/less/js/test/less/errors/recursive-variable.txt +1 -1
  152. data/lib/less/js/test/less/extend-chaining.less +79 -0
  153. data/lib/less/js/test/less/extend-clearfix.less +19 -0
  154. data/lib/less/js/test/less/extend-exact.less +46 -0
  155. data/lib/less/js/test/less/extend-media.less +24 -0
  156. data/lib/less/js/test/less/extend-nest.less +65 -0
  157. data/lib/less/js/test/less/extend-selector.less +84 -0
  158. data/lib/less/js/test/less/extend.less +81 -0
  159. data/lib/less/js/test/less/functions.less +37 -6
  160. data/lib/less/js/test/less/import-interpolation.less +8 -0
  161. data/lib/less/js/test/less/import-once.less +4 -4
  162. data/lib/less/js/test/less/import.less +11 -2
  163. data/lib/less/js/test/less/import/deeper/import-once-test-a.less +1 -1
  164. data/lib/less/js/test/less/import/import-interpolation.less +1 -0
  165. data/lib/less/js/test/less/import/import-interpolation2.less +5 -0
  166. data/lib/less/js/test/less/javascript.less +1 -1
  167. data/lib/less/js/test/less/legacy/legacy.less +7 -0
  168. data/lib/less/js/test/less/media.less +14 -3
  169. data/lib/less/js/test/less/mixins-args.less +43 -5
  170. data/lib/less/js/test/less/mixins-guards.less +13 -0
  171. data/lib/less/js/test/less/mixins-named-args.less +5 -5
  172. data/lib/less/js/test/less/mixins-nested.less +2 -2
  173. data/lib/less/js/test/less/mixins-pattern.less +1 -1
  174. data/lib/less/js/test/less/mixins.less +1 -1
  175. data/lib/less/js/test/less/operations.less +27 -27
  176. data/lib/less/js/test/less/parens.less +20 -5
  177. data/lib/less/js/test/less/selectors.less +14 -7
  178. data/lib/less/js/test/less/urls.less +24 -0
  179. data/lib/less/js/test/less/variables.less +42 -12
  180. data/lib/less/loader.rb +33 -0
  181. data/lib/less/version.rb +1 -1
  182. data/spec/less/parser_spec.rb +5 -5
  183. metadata +76 -6
  184. data/lib/less/js/build/ecma-5.js +0 -120
  185. data/lib/less/js/lib/less/tree/ratio.js +0 -13
@@ -1,6 +1,6 @@
1
1
  .mixin (@a: 1px, @b: 50%) {
2
- width: @a * 5;
3
- height: @b - 1%;
2
+ width: (@a * 5);
3
+ height: (@b - 1%);
4
4
  }
5
5
 
6
6
  .mixina (@style, @width, @color: black) {
@@ -45,7 +45,7 @@
45
45
 
46
46
  .var-args {
47
47
  @var: 9;
48
- .mixin(@var, @var * 2);
48
+ .mixin(@var, (@var * 2));
49
49
  }
50
50
 
51
51
  .multi-mix {
@@ -54,7 +54,7 @@
54
54
  }
55
55
 
56
56
  .maxa(@arg1: 10, @arg2: #f00) {
57
- padding: @arg1 * 2px;
57
+ padding: (@arg1 * 2px);
58
58
  color: @arg2;
59
59
  }
60
60
 
@@ -64,7 +64,7 @@ body {
64
64
 
65
65
  @glob: 5;
66
66
  .global-mixin(@a:2) {
67
- width: @glob + @a;
67
+ width: (@glob + @a);
68
68
  }
69
69
 
70
70
  .scope-mix {
@@ -129,6 +129,15 @@ body {
129
129
  .mixin-arguments("{");
130
130
  }
131
131
 
132
+ // Division vs. Literal Slash
133
+ .border-radius(@r: 2px/5px) {
134
+ border-radius: @r;
135
+ }
136
+ .slash-vs-math {
137
+ .border-radius();
138
+ .border-radius(5px/10px);
139
+ .border-radius((3px * 2));
140
+ }
132
141
  // semi-colon vs comma for delimiting
133
142
 
134
143
  .mixin-takes-one(@a) {
@@ -164,4 +173,33 @@ body {
164
173
  #named-conflict {
165
174
  .mixin-conflict(11, 12, 13, @a:a);
166
175
  .mixin-conflict(@a:a, 21, 22, 23);
176
+ }
177
+ @a: 3px;
178
+ .mixin-default-arg(@a: 1px, @b: @a, @c: @b) {
179
+ defaults: 1px 1px 1px;
180
+ defaults: 2px 2px 2px;
181
+ }
182
+
183
+ .test-mixin-default-arg {
184
+ .mixin-default-arg();
185
+ .mixin-default-arg(2px);
186
+ }
187
+
188
+ .mixin-comma-default1(@color; @padding; @margin: 2, 2, 2, 2) {
189
+ margin: @margin;
190
+ }
191
+ .selector {
192
+ .mixin-comma-default1(#33acfe; 4);
193
+ }
194
+ .mixin-comma-default2(@margin: 2, 2, 2, 2;) {
195
+ margin: @margin;
196
+ }
197
+ .selector2 {
198
+ .mixin-comma-default2();
199
+ }
200
+ .mixin-comma-default3(@margin: 2, 2, 2, 2) {
201
+ margin: @margin;
202
+ }
203
+ .selector3 {
204
+ .mixin-comma-default3(4,2,2,2);
167
205
  }
@@ -121,4 +121,17 @@
121
121
  .stringguard("theme1");
122
122
  .stringguard("theme2");
123
123
  .stringguard(theme1);
124
+ }
125
+
126
+ .mixin(...) {
127
+ catch:all;
128
+ }
129
+ .mixin(@var) when (@var=4) {
130
+ declare: 4;
131
+ }
132
+ .mixin(@var) when (@var=4px) {
133
+ declare: 4px;
134
+ }
135
+ #tryNumberPx {
136
+ .mixin(4px);
124
137
  }
@@ -1,6 +1,6 @@
1
1
  .mixin (@a: 1px, @b: 50%) {
2
- width: @a * 5;
3
- height: @b - 1%;
2
+ width: (@a * 5);
3
+ height: (@b - 1%);
4
4
  args: @arguments;
5
5
  }
6
6
  .mixin (@a: 1px, @b: 50%) when (@b > 75%){
@@ -22,9 +22,9 @@
22
22
  }
23
23
 
24
24
  .mixin2 (@a: 1px, @b: 50%, @c: 50) {
25
- width: @a * 5;
26
- height: @b - 1%;
27
- color: #000000 + @c;
25
+ width: (@a * 5);
26
+ height: (@b - 1%);
27
+ color: (#000000 + @c);
28
28
  }
29
29
 
30
30
  .named-args2 {
@@ -4,11 +4,11 @@
4
4
 
5
5
  .mix (@a: 10) {
6
6
  .inner {
7
- height: @a * 10;
7
+ height: (@a * 10);
8
8
 
9
9
  .innest {
10
10
  width: @a;
11
- .mix-inner(@a * 2);
11
+ .mix-inner((@a * 2));
12
12
  }
13
13
  }
14
14
  }
@@ -79,7 +79,7 @@
79
79
 
80
80
 
81
81
  .border-radius (@r) {
82
- both: @r * 10;
82
+ both: (@r * 10);
83
83
  }
84
84
  .border-radius (@r, left) {
85
85
  left: @r;
@@ -110,5 +110,5 @@ h3 { .margin_between(15px, 5px); }
110
110
  .button {
111
111
  .paddingFloat(((10px + 12) * 2));
112
112
 
113
- &.large { .paddingFloat((10em * 2) * 2); }
113
+ &.large { .paddingFloat(((10em * 2) * 2)); }
114
114
  }
@@ -1,35 +1,35 @@
1
1
  #operations {
2
- color: #110000 + #000011 + #001100; // #111111
3
- height: 10px / 2px + 6px - 1px * 2; // 9px
4
- width: 2 * 4 - 5em; // 3em
2
+ color: (#110000 + #000011 + #001100); // #111111
3
+ height: (10px / 2px + 6px - 1px * 2); // 9px
4
+ width: (2 * 4 - 5em); // 3em
5
5
  .spacing {
6
- height: 10px / 2px+6px-1px*2;
7
- width: 2 * 4-5em;
6
+ height: (10px / 2px+6px-1px*2);
7
+ width: (2 * 4-5em);
8
8
  }
9
- substraction: 20 - 10 - 5 - 5; // 0
10
- division: 20 / 5 / 4; // 1
9
+ substraction: (20 - 10 - 5 - 5); // 0
10
+ division: (20 / 5 / 4); // 1
11
11
  }
12
12
 
13
13
  @x: 4;
14
14
  @y: 12em;
15
15
 
16
16
  .with-variables {
17
- height: @x + @y; // 16em
18
- width: 12 + @y; // 24em
19
- size: 5cm - @x; // 1cm
17
+ height: (@x + @y); // 16em
18
+ width: (12 + @y); // 24em
19
+ size: (5cm - @x); // 1cm
20
20
  }
21
21
 
22
22
  .with-functions {
23
- color: rgb(200, 200, 200) / 2;
24
- color: 2 * hsl(0, 50%, 50%);
25
- color: rgb(10, 10, 10) + hsl(0, 50%, 50%);
23
+ color: (rgb(200, 200, 200) / 2);
24
+ color: (2 * hsl(0, 50%, 50%));
25
+ color: (rgb(10, 10, 10) + hsl(0, 50%, 50%));
26
26
  }
27
27
 
28
28
  @z: -2;
29
29
 
30
30
  .negative {
31
- height: 2px + @z; // 0px
32
- width: 2px - @z; // 4px
31
+ height: (2px + @z); // 0px
32
+ width: (2px - @z); // 4px
33
33
  }
34
34
 
35
35
  .shorthands {
@@ -37,26 +37,26 @@
37
37
  }
38
38
 
39
39
  .rem-dimensions {
40
- font-size: 20rem / 5 + 1.5rem; // 5.5rem
40
+ font-size: (20rem / 5 + 1.5rem); // 5.5rem
41
41
  }
42
42
 
43
43
  .colors {
44
44
  color: #123; // #112233
45
- border-color: #234 + #111111; // #334455
46
- background-color: #222222 - #fff; // #000000
45
+ border-color: (#234 + #111111); // #334455
46
+ background-color: (#222222 - #fff); // #000000
47
47
  .other {
48
- color: 2 * #111; // #222222
49
- border-color: #333333 / 3 + #111; // #222222
48
+ color: (2 * #111); // #222222
49
+ border-color: (#333333 / 3 + #111); // #222222
50
50
  }
51
51
  }
52
52
 
53
53
  .negations {
54
54
  @var: 4px;
55
- variable: -@var; // 4
56
- variable1: -@var + @var; // 0
57
- variable2: @var + -@var; // 0
58
- variable3: @var - -@var; // 8
59
- variable4: -@var - -@var; // 0
60
- paren: -(@var); // -4px
61
- paren2: -(2 + 2) * -@var; // 16
55
+ variable: (-@var); // 4
56
+ variable1: (-@var + @var); // 0
57
+ variable2: (@var + -@var); // 0
58
+ variable3: (@var - -@var); // 8
59
+ variable4: (-@var - -@var); // 0
60
+ paren: (-(@var)); // -4px
61
+ paren2: (-(2 + 2) * -@var); // 16
62
62
  }
@@ -3,21 +3,36 @@
3
3
  border: (@var * 2) solid black;
4
4
  margin: (@var * 1) (@var + 2) (4 * 4) 3;
5
5
  width: (6 * 6);
6
- padding: 2px (6px * 6px);
6
+ padding: 2px (6 * 6px);
7
7
  }
8
8
 
9
9
  .more-parens {
10
10
  @var: (2 * 2);
11
11
  padding: (2 * @var) 4 4 (@var * 1px);
12
- width: (@var * @var) * 6;
13
- height: (7 * 7) + (8 * 8);
14
- margin: 4 * (5 + 5) / 2 - (@var * 2);
12
+ width-all: ((@var * @var) * 6);
13
+ width-first: ((@var * @var)) * 6;
14
+ width-keep: (@var * @var) * 6;
15
+ height-keep: (7 * 7) + (8 * 8);
16
+ height-all: ((7 * 7) + (8 * 8));
17
+ height-parts: ((7 * 7)) + ((8 * 8));
18
+ margin-keep: (4 * (5 + 5) / 2) - (@var * 2);
19
+ margin-parts: ((4 * (5 + 5) / 2)) - ((@var * 2));
20
+ margin-all: ((4 * (5 + 5) / 2) + (-(@var * 2)));
21
+ border-radius-keep: 4px * (1 + 1) / @var + 3px;
22
+ border-radius-parts: ((4px * (1 + 1))) / ((@var + 3px));
23
+ border-radius-all: (4px * (1 + 1) / @var + 3px);
15
24
  //margin: (6 * 6)px;
16
25
  }
17
26
 
27
+ .negative {
28
+ @var: 1;
29
+ neg-var: -@var; // -1 ?
30
+ neg-var-paren: -(@var); // -(1) ?
31
+ }
32
+
18
33
  .nested-parens {
19
34
  width: 2 * (4 * (2 + (1 + 6))) - 1;
20
- height: ((2+3)*(2+3) / (9-4)) + 1;
35
+ height: ((2 + 3) * (2 + 3) / (9 - 4)) + 1;
21
36
  }
22
37
 
23
38
  .mixed-units {
@@ -107,12 +107,8 @@ a {
107
107
  ::bnord {color: red }
108
108
  &::bnord {color: red }
109
109
  }
110
- // selector interpolation - deprecated
110
+ // selector interpolation
111
111
  @theme: blood;
112
- (~".@{theme}") {
113
- color: red;
114
- }
115
- // selector interpolation - new format
116
112
  @selector: ~".@{theme}";
117
113
  @{selector} {
118
114
  color:red;
@@ -126,11 +122,22 @@ a {
126
122
  }
127
123
  }
128
124
  @num: 3;
129
- :nth-child(@{num}):nth-child(@num) {
130
- second-use: deprecated;
125
+ :nth-child(@{num}) {
126
+ selector: interpolated;
131
127
  }
132
128
  .test {
133
129
  &:nth-child(odd):not(:nth-child(3)) {
134
130
  color: #ff0000;
135
131
  }
132
+ }
133
+ [prop],
134
+ [prop="value@{num}"],
135
+ [prop*="val@{num}"],
136
+ [|prop~="val@{num}"],
137
+ [*|prop$="val@{num}"],
138
+ [ns|prop^="val@{num}"],
139
+ [@{num}^="val@{num}"],
140
+ [@{num}=@{num}],
141
+ [@{num}] {
142
+ attributes: yes;
136
143
  }
@@ -5,6 +5,8 @@
5
5
  }
6
6
  #shorthands {
7
7
  background: url("http://www.lesscss.org/spec.html") no-repeat 0 4px;
8
+ background: url("img.jpg") center / 100px;
9
+ background: #fff url(image.png) center / 1px 100px repeat-x scroll content-box padding-box;
8
10
  }
9
11
  #misc {
10
12
  background-image: url(images/image.jpg);
@@ -31,3 +33,25 @@
31
33
  }
32
34
 
33
35
  @import "import/import-and-relative-paths-test";
36
+
37
+ #data-uri {
38
+ uri: data-uri('image/jpeg;base64', '../data/image.jpg');
39
+ }
40
+
41
+ #data-uri-guess {
42
+ uri: data-uri('../data/image.jpg');
43
+ }
44
+
45
+ #data-uri-ascii {
46
+ uri-1: data-uri('text/html', '../data/page.html');
47
+ uri-2: data-uri('../data/page.html');
48
+ }
49
+
50
+ #data-uri-toobig {
51
+ uri: data-uri('../data/data-uri-fail.png');
52
+ }
53
+ .add_an_import(@file_to_import) {
54
+ @import "@{file_to_import}";
55
+ }
56
+
57
+ .add_an_import("file.css");
@@ -1,10 +1,11 @@
1
1
  @a: 2;
2
- @x: @a * @a;
3
- @y: @x + 1;
4
- @z: @x * 2 + @y;
2
+ @x: (@a * @a);
3
+ @y: (@x + 1);
4
+ @z: (@x * 2 + @y);
5
+ @var: -1;
5
6
 
6
7
  .variables {
7
- width: @z + 1cm; // 14cm
8
+ width: (@z + 1cm); // 14cm
8
9
  }
9
10
 
10
11
  @b: @a * 10;
@@ -15,22 +16,28 @@
15
16
 
16
17
  @quotes: "~" "~";
17
18
  @q: @quotes;
19
+ @onePixel: 1px;
18
20
 
19
21
  .variables {
20
- height: @b + @x + 0px; // 24px
22
+ height: (@b + @x + 0px); // 24px
21
23
  color: @c;
22
24
  font-family: @f;
23
25
  quotes: @q;
24
26
  }
25
27
 
26
- .redefinition {
27
- @var: 4;
28
- @var: 2;
29
- @var: 3;
30
- three: @var;
28
+ .redef {
29
+ @var: 0;
30
+ .inition {
31
+ @var: 4;
32
+ @var: 2;
33
+ three: @var;
34
+ @var: 3;
35
+ }
36
+ zero: @var;
31
37
  }
32
38
 
33
39
  .values {
40
+ minus-one: @var;
34
41
  @a: 'Trebuchet';
35
42
  @multi: 'A', B, C;
36
43
  font-family: @a, @a, @a;
@@ -43,11 +50,34 @@
43
50
  @name: 'var';
44
51
  name: @@name;
45
52
  }
53
+
46
54
  .alpha {
47
55
  @var: 42;
48
56
  filter: alpha(opacity=@var);
49
57
  }
50
58
 
51
- a:nth-child(@a) {
52
- border: 1px;
59
+ .polluteMixin() {
60
+ @a: 'pollution';
61
+ }
62
+ .testPollution {
63
+ @a: 'no-pollution';
64
+ a: @a;
65
+ .polluteMixin();
66
+ a: @a;
67
+ }
68
+
69
+ .units {
70
+ width: @onePixel;
71
+ same-unit-as-previously: (@onePixel / @onePixel);
72
+ square-pixel-divided: (@onePixel * @onePixel / @onePixel);
73
+ odd-unit: unit((@onePixel * 4em / 2cm));
74
+ percentage: (10 * 50%);
75
+ pixels: (50px * 10);
76
+ conversion-metric-a: (20mm + 1cm);
77
+ conversion-metric-b: (1cm + 20mm);
78
+ conversion-imperial: (1in + 72pt + 6pc);
79
+ custom-unit: (42octocats * 10);
80
+ custom-unit-cancelling: (8cats * 9dogs / 4cats);
81
+ mix-units: (1px + 1em);
82
+ invalid-units: (1px * 1px);
53
83
  }