less 1.2.21 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (165) hide show
  1. data/.gitignore +4 -3
  2. data/.gitmodules +6 -0
  3. data/Gemfile +3 -0
  4. data/README.md +39 -46
  5. data/Rakefile +5 -50
  6. data/bin/lessc +1 -100
  7. data/less.gemspec +21 -125
  8. data/lib/less.rb +11 -30
  9. data/{LICENSE → lib/less/js/LICENSE} +1 -1
  10. data/lib/less/js/Makefile +56 -0
  11. data/lib/less/js/README.md +20 -0
  12. data/lib/less/js/benchmark/benchmark.less +3979 -0
  13. data/lib/less/js/benchmark/less-benchmark.js +49 -0
  14. data/lib/less/js/bin/lessc +105 -0
  15. data/lib/less/js/build/ecma-5.js +120 -0
  16. data/lib/less/js/build/header.js +7 -0
  17. data/lib/less/js/build/require.js +7 -0
  18. data/lib/less/js/dist/less-1.0.44.js +2655 -0
  19. data/lib/less/js/dist/less-1.1.0.js +2695 -0
  20. data/lib/less/js/dist/less-1.1.0.min.js +16 -0
  21. data/lib/less/js/dist/less-1.1.1.js +2710 -0
  22. data/lib/less/js/dist/less-1.1.1.min.js +16 -0
  23. data/lib/less/js/dist/less-1.1.2.js +2712 -0
  24. data/lib/less/js/dist/less-1.1.2.min.js +16 -0
  25. data/lib/less/js/dist/less-1.1.3.js +2721 -0
  26. data/lib/less/js/dist/less-1.1.3.min.js +16 -0
  27. data/lib/less/js/lib/less/browser.js +369 -0
  28. data/lib/less/js/lib/less/functions.js +174 -0
  29. data/lib/less/js/lib/less/index.js +137 -0
  30. data/lib/less/js/lib/less/parser.js +1098 -0
  31. data/lib/less/js/lib/less/tree.js +13 -0
  32. data/lib/less/js/lib/less/tree/alpha.js +17 -0
  33. data/lib/less/js/lib/less/tree/anonymous.js +13 -0
  34. data/lib/less/js/lib/less/tree/call.js +45 -0
  35. data/lib/less/js/lib/less/tree/color.js +98 -0
  36. data/lib/less/js/lib/less/tree/comment.js +14 -0
  37. data/lib/less/js/lib/less/tree/dimension.js +34 -0
  38. data/lib/less/js/lib/less/tree/directive.js +33 -0
  39. data/lib/less/js/lib/less/tree/element.js +32 -0
  40. data/lib/less/js/lib/less/tree/expression.js +23 -0
  41. data/lib/less/js/lib/less/tree/import.js +77 -0
  42. data/lib/less/js/lib/less/tree/javascript.js +51 -0
  43. data/lib/less/js/lib/less/tree/keyword.js +9 -0
  44. data/lib/less/js/lib/less/tree/mixin.js +106 -0
  45. data/lib/less/js/lib/less/tree/operation.js +32 -0
  46. data/lib/less/js/lib/less/tree/quoted.js +29 -0
  47. data/lib/less/js/lib/less/tree/rule.js +38 -0
  48. data/lib/less/js/lib/less/tree/ruleset.js +179 -0
  49. data/lib/less/js/lib/less/tree/selector.js +28 -0
  50. data/lib/less/js/lib/less/tree/url.js +25 -0
  51. data/lib/less/js/lib/less/tree/value.js +24 -0
  52. data/lib/less/js/lib/less/tree/variable.js +24 -0
  53. data/lib/less/js/package.json +13 -0
  54. data/lib/less/js/test/css/colors.css +42 -0
  55. data/lib/less/js/test/css/comments.css +52 -0
  56. data/lib/less/js/test/css/css-3.css +42 -0
  57. data/lib/less/js/test/css/css-escapes.css +20 -0
  58. data/lib/less/js/test/css/css.css +82 -0
  59. data/lib/less/js/test/css/functions.css +30 -0
  60. data/{spec → lib/less/js/test}/css/import.css +4 -2
  61. data/lib/less/js/test/css/javascript.css +22 -0
  62. data/lib/less/js/test/css/lazy-eval.css +3 -0
  63. data/lib/less/js/test/css/media.css +21 -0
  64. data/lib/less/js/test/css/mixins-args.css +61 -0
  65. data/lib/less/js/test/css/mixins-closure.css +9 -0
  66. data/lib/less/js/test/css/mixins-nested.css +14 -0
  67. data/lib/less/js/test/css/mixins-pattern.css +49 -0
  68. data/lib/less/js/test/css/mixins.css +50 -0
  69. data/{spec → lib/less/js/test}/css/operations.css +20 -2
  70. data/{spec → lib/less/js/test}/css/parens.css +0 -0
  71. data/lib/less/js/test/css/rulesets.css +29 -0
  72. data/{spec → lib/less/js/test}/css/scope.css +6 -2
  73. data/lib/less/js/test/css/selectors.css +32 -0
  74. data/lib/less/js/test/css/strings.css +38 -0
  75. data/lib/less/js/test/css/variables.css +24 -0
  76. data/lib/less/js/test/css/whitespace.css +36 -0
  77. data/lib/less/js/test/less-test.js +75 -0
  78. data/{spec → lib/less/js/test}/less/colors.less +13 -2
  79. data/{spec → lib/less/js/test}/less/comments.less +19 -2
  80. data/{spec → lib/less/js/test}/less/css-3.less +4 -1
  81. data/lib/less/js/test/less/css-escapes.less +28 -0
  82. data/{spec → lib/less/js/test}/less/css.less +10 -18
  83. data/lib/less/js/test/less/functions.less +35 -0
  84. data/{spec → lib/less/js/test}/less/import.less +1 -1
  85. data/{spec → lib/less/js/test}/less/import/import-test-a.less +0 -0
  86. data/{spec → lib/less/js/test}/less/import/import-test-b.less +0 -0
  87. data/{spec → lib/less/js/test}/less/import/import-test-c.less +0 -0
  88. data/{spec → lib/less/js/test}/less/import/import-test-d.css +0 -0
  89. data/lib/less/js/test/less/javascript.less +27 -0
  90. data/{spec → lib/less/js/test}/less/lazy-eval.less +0 -0
  91. data/lib/less/js/test/less/media.less +25 -0
  92. data/lib/less/js/test/less/mixins-args.less +118 -0
  93. data/lib/less/js/test/less/mixins-closure.less +26 -0
  94. data/lib/less/js/test/less/mixins-nested.less +22 -0
  95. data/lib/less/js/test/less/mixins-pattern.less +96 -0
  96. data/{spec → lib/less/js/test}/less/mixins.less +8 -4
  97. data/{spec → lib/less/js/test}/less/operations.less +19 -0
  98. data/{spec → lib/less/js/test}/less/parens.less +0 -0
  99. data/{spec → lib/less/js/test}/less/rulesets.less +2 -2
  100. data/{spec → lib/less/js/test}/less/scope.less +1 -1
  101. data/{spec → lib/less/js/test}/less/selectors.less +1 -1
  102. data/lib/less/js/test/less/strings.less +49 -0
  103. data/lib/less/js/test/less/variables.less +50 -0
  104. data/{spec → lib/less/js/test}/less/whitespace.less +3 -0
  105. data/lib/less/loader.rb +67 -0
  106. data/lib/less/parser.rb +46 -0
  107. data/lib/less/version.rb +3 -0
  108. data/spec/less/one/one.less +1 -0
  109. data/spec/less/parser_spec.rb +30 -0
  110. data/spec/less/two/two.less +1 -0
  111. data/spec/spec_helper.rb +2 -7
  112. metadata +156 -106
  113. data/CHANGELOG +0 -62
  114. data/VERSION +0 -1
  115. data/lib/less/command.rb +0 -110
  116. data/lib/less/engine.rb +0 -52
  117. data/lib/less/engine/grammar/common.tt +0 -29
  118. data/lib/less/engine/grammar/entity.tt +0 -144
  119. data/lib/less/engine/grammar/less.tt +0 -341
  120. data/lib/less/engine/nodes.rb +0 -9
  121. data/lib/less/engine/nodes/element.rb +0 -281
  122. data/lib/less/engine/nodes/entity.rb +0 -79
  123. data/lib/less/engine/nodes/function.rb +0 -93
  124. data/lib/less/engine/nodes/literal.rb +0 -171
  125. data/lib/less/engine/nodes/property.rb +0 -232
  126. data/lib/less/engine/nodes/ruleset.rb +0 -12
  127. data/lib/less/engine/nodes/selector.rb +0 -44
  128. data/lib/less/ext.rb +0 -60
  129. data/spec/command_spec.rb +0 -102
  130. data/spec/css/accessors.css +0 -18
  131. data/spec/css/big.css +0 -3768
  132. data/spec/css/colors.css +0 -14
  133. data/spec/css/comments.css +0 -9
  134. data/spec/css/css-3.css +0 -21
  135. data/spec/css/css.css +0 -50
  136. data/spec/css/dash-prefix.css +0 -12
  137. data/spec/css/functions.css +0 -6
  138. data/spec/css/import-with-extra-paths.css +0 -8
  139. data/spec/css/import-with-partial-in-extra-path.css +0 -6
  140. data/spec/css/lazy-eval.css +0 -1
  141. data/spec/css/mixins-args.css +0 -32
  142. data/spec/css/mixins.css +0 -28
  143. data/spec/css/rulesets.css +0 -17
  144. data/spec/css/selectors.css +0 -13
  145. data/spec/css/strings.css +0 -12
  146. data/spec/css/variables.css +0 -8
  147. data/spec/css/whitespace.css +0 -7
  148. data/spec/engine_spec.rb +0 -127
  149. data/spec/less/accessors.less +0 -20
  150. data/spec/less/big.less +0 -1264
  151. data/spec/less/dash-prefix.less +0 -21
  152. data/spec/less/exceptions/mixed-units-error.less +0 -3
  153. data/spec/less/exceptions/name-error-1.0.less +0 -3
  154. data/spec/less/exceptions/syntax-error-1.0.less +0 -3
  155. data/spec/less/extra_import_path/extra.less +0 -1
  156. data/spec/less/extra_import_path/import/import-test-a.css +0 -1
  157. data/spec/less/extra_import_path/import/import-test-a.less +0 -4
  158. data/spec/less/functions.less +0 -6
  159. data/spec/less/hidden.less +0 -25
  160. data/spec/less/import-with-extra-paths.less +0 -4
  161. data/spec/less/literal-css.less +0 -11
  162. data/spec/less/mixins-args.less +0 -59
  163. data/spec/less/strings.less +0 -14
  164. data/spec/less/variables.less +0 -29
  165. data/spec/spec.css +0 -50
@@ -1,3 +1,15 @@
1
+ /******************\
2
+ * *
3
+ * Comment Header *
4
+ * *
5
+ \******************/
6
+
7
+ /*
8
+
9
+ Comment
10
+
11
+ */
12
+
1
13
  /*
2
14
  * Comment Test
3
15
  *
@@ -22,7 +34,7 @@
22
34
 
23
35
  /* @group Variables
24
36
  ------------------- */
25
- #comments {
37
+ #comments /* boo */ {
26
38
  /**/ // An empty comment
27
39
  color: red; /* A C-style comment */
28
40
  background-color: orange; // A little comment
@@ -33,7 +45,7 @@
33
45
  border: 1px solid black;
34
46
 
35
47
  // padding & margin //
36
- padding: 0;
48
+ padding: 0; // }{ '"
37
49
  margin: 2em;
38
50
  } //
39
51
 
@@ -43,4 +55,9 @@
43
55
  }
44
56
  */
45
57
 
58
+ .selector /* .with */, .lots, /* of */ .comments {
59
+ color: grey, /* blue */ orange;
60
+ }
61
+
62
+ #last { color: blue }
46
63
  //
@@ -34,7 +34,6 @@ ol.comma > li:nth-last-child(2)::after {
34
34
 
35
35
  li:nth-child(4n+1),
36
36
  li:nth-child(-5n),
37
- li:nth-child(n+1),
38
37
  li:nth-child(-n+2) {
39
38
  color: white;
40
39
  }
@@ -47,6 +46,10 @@ a[href$="http://"] {
47
46
  color: black;
48
47
  }
49
48
 
49
+ form[data-disabled] {
50
+ color: black;
51
+ }
52
+
50
53
  p::before {
51
54
  color: black;
52
55
  }
@@ -0,0 +1,28 @@
1
+ @ugly: fuchsia;
2
+
3
+ .escape\|random\|char {
4
+ color: red;
5
+ }
6
+
7
+ .mixin\!tUp {
8
+ font-weight: bold;
9
+ }
10
+
11
+ // class="404"
12
+ .\34 04 {
13
+ background: red;
14
+
15
+ strong {
16
+ color: @ugly;
17
+ .mixin\!tUp;
18
+ }
19
+ }
20
+
21
+ .trailingTest\+ {
22
+ color: red;
23
+ }
24
+
25
+ /* This hideous test of hideousness checks for the selector "blockquote" with various permutations of hex escapes */
26
+ \62\6c\6f \63 \6B \0071 \000075o\74 e {
27
+ color: silver;
28
+ }
@@ -1,9 +1,4 @@
1
- /*
2
-
3
- a CSS File
4
-
5
- */
6
-
1
+ @charset "utf-8";
7
2
  div { color: black; }
8
3
  div { width: 99%; }
9
4
 
@@ -60,21 +55,10 @@ p + h1 {
60
55
  font-size: 2.2em;
61
56
  }
62
57
 
63
- input[type="text"] {
64
- font-weight: normal;
65
- }
66
-
67
- h2[title] {
68
- font-size: 100%;
69
- }
70
-
71
- [disabled] {
72
- color: transparent;
73
- }
74
-
75
58
  #shorthands {
76
59
  border: 1px solid #000;
77
60
  font: 12px/16px Arial;
61
+ font: 100%/16px Arial;
78
62
  margin: 1px 0;
79
63
  padding: 0 auto;
80
64
  background: url("http://www.lesscss.org/spec.html") no-repeat 0 4px;
@@ -94,6 +78,7 @@ h2[title] {
94
78
  background-image: url(images/image.jpg);
95
79
  background: -webkit-gradient(linear, left top, left bottom, from(red), to(blue));
96
80
  margin: ;
81
+ filter: alpha(opacity=100);
97
82
  }
98
83
 
99
84
  #important {
@@ -102,3 +87,10 @@ h2[title] {
102
87
  height: 20px ! important;
103
88
  }
104
89
 
90
+ #data-uri {
91
+ background: url(data:image/png;charset=utf-8;base64,
92
+ kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/
93
+ k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U
94
+ kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC);
95
+ background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==);
96
+ }
@@ -0,0 +1,35 @@
1
+ #functions {
2
+ @var: 10;
3
+ color: color("evil red"); // #660000
4
+ width: increment(15);
5
+ height: undefined("self");
6
+ border-width: add(2, 3);
7
+ variable: increment(@var);
8
+ }
9
+
10
+ #built-in {
11
+ @r: 32;
12
+ escaped: e("-Some::weird(#thing, y)");
13
+ lighten: lighten(#ff0000, 40%);
14
+ darken: darken(#ff0000, 40%);
15
+ saturate: saturate(#29332f, 20%);
16
+ desaturate: desaturate(#203c31, 20%);
17
+ greyscale: greyscale(#203c31);
18
+ spin-p: spin(hsl(340, 50%, 50%), 40);
19
+ spin-n: spin(hsl(30, 50%, 50%), -40);
20
+ format: %("rgb(%d, %d, %d)", @r, 128, 64);
21
+ format-string: %("hello %s", "world");
22
+ format-multiple: %("hello %s %d", "earth", 2);
23
+ format-url-encode: %('red is %A', #ff0000);
24
+ eformat: e(%("rgb(%d, %d, %d)", @r, 128, 64));
25
+
26
+ hue: hue(hsl(98, 12%, 95%));
27
+ saturation: saturation(hsl(98, 12%, 95%));
28
+ lightness: lightness(hsl(98, 12%, 95%));
29
+ rounded: round(@r/3);
30
+ roundedpx: round(10px / 3);
31
+ }
32
+
33
+ #alpha {
34
+ alpha: darken(hsla(25, 50%, 50%, 0.6), 10%);
35
+ }
@@ -1,5 +1,5 @@
1
1
  @import url("import/import-test-a.less");
2
- @import url("import/import-test-a.less");
2
+ //@import url("import/import-test-a.less");
3
3
 
4
4
  #import-test {
5
5
  .mixin;
@@ -0,0 +1,27 @@
1
+ .eval {
2
+ js: `42`;
3
+ js: `1 + 1`;
4
+ js: `"hello world"`;
5
+ js: `[1, 2, 3]`;
6
+ title: `process.title`;
7
+ ternary: `(1 + 1 == 2 ? true : false)`;
8
+ }
9
+ .scope {
10
+ @foo: 42;
11
+ var: `this.foo.toJS()`;
12
+ escaped: ~`2 + 5 + 'px'`;
13
+ }
14
+ .vars {
15
+ @var: `4 + 4`;
16
+ width: @var;
17
+ }
18
+ .escape-interpol {
19
+ @world: "world";
20
+ width: ~`"hello" + " " + @{world}`;
21
+ }
22
+ .arrays {
23
+ @ary: 1, 2, 3;
24
+ @ary2: 1 2 3;
25
+ ary: `@{ary}.join(', ')`;
26
+ ary: `@{ary2}.join(', ')`;
27
+ }
File without changes
@@ -0,0 +1,25 @@
1
+
2
+ // For now, variables can't be declared inside @media blocks.
3
+
4
+ @var: 42;
5
+
6
+ @media print {
7
+ .class {
8
+ color: blue;
9
+ .sub {
10
+ width: @var;
11
+ }
12
+ }
13
+ .top, header > h1 {
14
+ color: #222 * 2;
15
+ }
16
+ }
17
+
18
+ @media screen {
19
+ @base: 8;
20
+ body { max-width: @base * 60; }
21
+ }
22
+
23
+ @media all and (orientation:portrait) {
24
+ aside { float: none; }
25
+ }
@@ -0,0 +1,118 @@
1
+ .mixin (@a: 1px, @b: 50%) {
2
+ width: @a * 5;
3
+ height: @b - 1%;
4
+ }
5
+
6
+ .mixina (@style, @width, @color: black) {
7
+ border: @width @style @color;
8
+ }
9
+
10
+ .mixiny
11
+ (@a: 0, @b: 0) {
12
+ margin: @a;
13
+ padding: @b;
14
+ }
15
+
16
+ .hidden() {
17
+ color: transparent; // asd
18
+ }
19
+
20
+ #hidden {
21
+ .hidden;
22
+ .hidden();
23
+ }
24
+
25
+ .two-args {
26
+ color: blue;
27
+ .mixin(2px, 100%);
28
+ .mixina(dotted, 2px);
29
+ }
30
+
31
+ .one-arg {
32
+ .mixin(3px);
33
+ }
34
+
35
+ .no-parens {
36
+ .mixin;
37
+ }
38
+
39
+ .no-args {
40
+ .mixin();
41
+ }
42
+
43
+ .var-args {
44
+ @var: 9;
45
+ .mixin(@var, @var * 2);
46
+ }
47
+
48
+ .multi-mix {
49
+ .mixin(2px, 30%);
50
+ .mixiny(4, 5);
51
+ }
52
+
53
+ .maxa(@arg1: 10, @arg2: #f00) {
54
+ padding: @arg1 * 2px;
55
+ color: @arg2;
56
+ }
57
+
58
+ body {
59
+ .maxa(15);
60
+ }
61
+
62
+ @glob: 5;
63
+ .global-mixin(@a:2) {
64
+ width: @glob + @a;
65
+ }
66
+
67
+ .scope-mix {
68
+ .global-mixin(3);
69
+ }
70
+
71
+ .nested-ruleset (@width: 200px) {
72
+ width: @width;
73
+ .column { margin: @width; }
74
+ }
75
+ .content {
76
+ .nested-ruleset(600px);
77
+ }
78
+
79
+ //
80
+
81
+ .same-var-name2(@radius) {
82
+ radius: @radius;
83
+ }
84
+ .same-var-name(@radius) {
85
+ .same-var-name2(@radius);
86
+ }
87
+ #same-var-name {
88
+ .same-var-name(5px);
89
+ }
90
+
91
+ //
92
+
93
+ .var-inside () {
94
+ @var: 10px;
95
+ width: @var;
96
+ }
97
+ #var-inside { .var-inside; }
98
+
99
+ // # mixins
100
+
101
+ #id-mixin () {
102
+ color: red;
103
+ }
104
+ .id-class {
105
+ #id-mixin();
106
+ #id-mixin;
107
+ }
108
+
109
+ .mixin-arguments (@width: 0px) {
110
+ border: @arguments;
111
+ }
112
+
113
+ .arguments {
114
+ .mixin-arguments(1px, solid, black);
115
+ }
116
+ .arguments2 {
117
+ .mixin-arguments();
118
+ }
@@ -0,0 +1,26 @@
1
+ .scope {
2
+ @var: 99px;
3
+ .mixin () {
4
+ width: @var;
5
+ }
6
+ }
7
+
8
+ .class {
9
+ .scope > .mixin;
10
+ }
11
+
12
+ .overwrite {
13
+ @var: 0px;
14
+ .scope > .mixin;
15
+ }
16
+
17
+ .nested {
18
+ @var: 5px;
19
+ .mixin () {
20
+ width: @var;
21
+ }
22
+ .class {
23
+ @var: 10px;
24
+ .mixin;
25
+ }
26
+ }
@@ -0,0 +1,22 @@
1
+ .mix-inner (@var) {
2
+ border-width: @var;
3
+ }
4
+
5
+ .mix (@a: 10) {
6
+ .inner {
7
+ height: @a * 10;
8
+
9
+ .innest {
10
+ width: @a;
11
+ .mix-inner(@a * 2);
12
+ }
13
+ }
14
+ }
15
+
16
+ .class {
17
+ .mix(30);
18
+ }
19
+
20
+ .class2 {
21
+ .mix(60);
22
+ }
@@ -0,0 +1,96 @@
1
+ .mixin () {
2
+ zero: 0;
3
+ }
4
+ .mixin (@a: 1px) {
5
+ one: 1;
6
+ }
7
+ .mixin (@a) {
8
+ one-req: 1;
9
+ }
10
+ .mixin (@a: 1px, @b: 2px) {
11
+ two: 2;
12
+ }
13
+
14
+ .mixin (@a, @b, @c) {
15
+ three-req: 3;
16
+ }
17
+
18
+ .mixin (@a: 1px, @b: 2px, @c: 3px) {
19
+ three: 3;
20
+ }
21
+
22
+ .zero {
23
+ .mixin();
24
+ }
25
+
26
+ .one {
27
+ .mixin(1);
28
+ }
29
+
30
+ .two {
31
+ .mixin(1, 2);
32
+ }
33
+
34
+ .three {
35
+ .mixin(1, 2, 3);
36
+ }
37
+
38
+ //
39
+
40
+ .mixout ('left') {
41
+ left: 1;
42
+ }
43
+
44
+ .mixout ('right') {
45
+ right: 1;
46
+ }
47
+
48
+ .left {
49
+ .mixout('left');
50
+ }
51
+ .right {
52
+ .mixout('right');
53
+ }
54
+
55
+ //
56
+
57
+ .border (@side, @width) {
58
+ color: black;
59
+ .border-side(@side, @width);
60
+ }
61
+ .border-side (left, @w) {
62
+ border-left: @w;
63
+ }
64
+ .border-side (right, @w) {
65
+ border-right: @w;
66
+ }
67
+
68
+ .border-right {
69
+ .border(right, 4px);
70
+ }
71
+ .border-left {
72
+ .border(left, 4px);
73
+ }
74
+
75
+ //
76
+
77
+
78
+ .border-radius (@r) {
79
+ both: @r * 10;
80
+ }
81
+ .border-radius (@r, left) {
82
+ left: @r;
83
+ }
84
+ .border-radius (@r, right) {
85
+ right: @r;
86
+ }
87
+
88
+ .only-right {
89
+ .border-radius(33, right);
90
+ }
91
+ .only-left {
92
+ .border-radius(33, left);
93
+ }
94
+ .left-right {
95
+ .border-radius(33);
96
+ }