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
@@ -0,0 +1,9 @@
1
+ .class {
2
+ width: 99px;
3
+ }
4
+ .overwrite {
5
+ width: 99px;
6
+ }
7
+ .nested .class {
8
+ width: 5px;
9
+ }
@@ -0,0 +1,14 @@
1
+ .class .inner {
2
+ height: 300;
3
+ }
4
+ .class .inner .innest {
5
+ width: 30;
6
+ border-width: 60;
7
+ }
8
+ .class2 .inner {
9
+ height: 600;
10
+ }
11
+ .class2 .inner .innest {
12
+ width: 60;
13
+ border-width: 120;
14
+ }
@@ -0,0 +1,49 @@
1
+ .zero {
2
+ zero: 0;
3
+ one: 1;
4
+ two: 2;
5
+ three: 3;
6
+ }
7
+ .one {
8
+ zero: 0;
9
+ one: 1;
10
+ one-req: 1;
11
+ two: 2;
12
+ three: 3;
13
+ }
14
+ .two {
15
+ zero: 0;
16
+ one: 1;
17
+ two: 2;
18
+ three: 3;
19
+ }
20
+ .three {
21
+ zero: 0;
22
+ one: 1;
23
+ two: 2;
24
+ three-req: 3;
25
+ three: 3;
26
+ }
27
+ .left {
28
+ left: 1;
29
+ }
30
+ .right {
31
+ right: 1;
32
+ }
33
+ .border-right {
34
+ color: black;
35
+ border-right: 4px;
36
+ }
37
+ .border-left {
38
+ color: black;
39
+ border-left: 4px;
40
+ }
41
+ .only-right {
42
+ right: 33;
43
+ }
44
+ .only-left {
45
+ left: 33;
46
+ }
47
+ .left-right {
48
+ both: 330;
49
+ }
@@ -0,0 +1,50 @@
1
+ .mixin {
2
+ border: 1px solid black;
3
+ }
4
+ .mixout {
5
+ border-color: orange;
6
+ }
7
+ .borders {
8
+ border-style: dashed;
9
+ }
10
+ #namespace .borders {
11
+ border-style: dotted;
12
+ }
13
+ #namespace .biohazard {
14
+ content: "death";
15
+ }
16
+ #namespace .biohazard .man {
17
+ color: transparent;
18
+ }
19
+ #theme > .mixin {
20
+ background-color: grey;
21
+ }
22
+ #container {
23
+ color: black;
24
+ border: 1px solid black;
25
+ border-color: orange;
26
+ background-color: grey;
27
+ }
28
+ #header .milk {
29
+ color: white;
30
+ border: 1px solid black;
31
+ background-color: grey;
32
+ }
33
+ #header #cookie {
34
+ border-style: dashed;
35
+ }
36
+ #header #cookie .chips {
37
+ border-style: dotted;
38
+ }
39
+ #header #cookie .chips .calories {
40
+ color: black;
41
+ border: 1px solid black;
42
+ border-color: orange;
43
+ background-color: grey;
44
+ }
45
+ .secure-zone {
46
+ color: transparent;
47
+ }
48
+ .direct {
49
+ border-style: dotted;
50
+ }
@@ -2,6 +2,8 @@
2
2
  color: #111111;
3
3
  height: 9px;
4
4
  width: 3em;
5
+ substraction: 0;
6
+ division: 1;
5
7
  }
6
8
  #operations .spacing {
7
9
  height: 9px;
@@ -12,13 +14,20 @@
12
14
  width: 24em;
13
15
  size: 1cm;
14
16
  }
17
+ .with-functions {
18
+ color: #646464;
19
+ color: #ff8080;
20
+ color: #c94a4a;
21
+ }
15
22
  .negative {
16
23
  height: 0px;
17
24
  width: 4px;
18
25
  }
19
- .shorthands { padding: -1px 2px 0 -4px; }
26
+ .shorthands {
27
+ padding: -1px 2px 0 -4px;
28
+ }
20
29
  .colors {
21
- color: #112233;
30
+ color: #123;
22
31
  border-color: #334455;
23
32
  background-color: #000000;
24
33
  }
@@ -26,3 +35,12 @@
26
35
  color: #222222;
27
36
  border-color: #222222;
28
37
  }
38
+ .negations {
39
+ variable: -4px;
40
+ variable1: 0px;
41
+ variable2: 0px;
42
+ variable3: 8px;
43
+ variable4: 0px;
44
+ paren: -4px;
45
+ paren2: 16px;
46
+ }
File without changes
@@ -0,0 +1,29 @@
1
+ #first > .one {
2
+ font-size: 2em;
3
+ }
4
+ #first > .one > #second .two > #deux {
5
+ width: 50%;
6
+ }
7
+ #first > .one > #second .two > #deux #third {
8
+ height: 100%;
9
+ }
10
+ #first > .one > #second .two > #deux #third:focus {
11
+ color: black;
12
+ }
13
+ #first > .one > #second .two > #deux #third:focus #fifth > #sixth .seventh #eighth + #ninth {
14
+ color: purple;
15
+ }
16
+ #first > .one > #second .two > #deux #fourth, #first > .one > #second .two > #deux #five, #first > .one > #second .two > #deux #six {
17
+ color: #110000;
18
+ }
19
+ #first > .one > #second .two > #deux #fourth .seven,
20
+ #first > .one > #second .two > #deux #five .seven,
21
+ #first > .one > #second .two > #deux #six .seven,
22
+ #first > .one > #second .two > #deux #fourth .eight > #nine,
23
+ #first > .one > #second .two > #deux #five .eight > #nine,
24
+ #first > .one > #second .two > #deux #six .eight > #nine {
25
+ border: 1px solid black;
26
+ }
27
+ #first > .one > #second .two > #deux #fourth #ten, #first > .one > #second .two > #deux #five #ten, #first > .one > #second .two > #deux #six #ten {
28
+ color: red;
29
+ }
@@ -1,9 +1,13 @@
1
- .tiny-scope { color: #998899; }
1
+ .tiny-scope {
2
+ color: #998899;
3
+ }
2
4
  .scope1 {
3
5
  color: blue;
4
6
  border-color: black;
5
7
  }
6
- .scope1 .scope2 { color: blue; }
8
+ .scope1 .scope2 {
9
+ color: blue;
10
+ }
7
11
  .scope1 .scope2 .scope3 {
8
12
  color: red;
9
13
  border-color: black;
@@ -0,0 +1,32 @@
1
+ h1 a:hover,
2
+ h2 a:hover,
3
+ h3 a:hover,
4
+ h1 p:hover,
5
+ h2 p:hover,
6
+ h3 p:hover {
7
+ color: red;
8
+ }
9
+ #all {
10
+ color: blue;
11
+ }
12
+ #the {
13
+ color: blue;
14
+ }
15
+ #same {
16
+ color: blue;
17
+ }
18
+ ul,
19
+ li,
20
+ div,
21
+ q,
22
+ blockquote,
23
+ textarea {
24
+ margin: 0;
25
+ }
26
+ td {
27
+ margin: 0;
28
+ padding: 0;
29
+ }
30
+ td, input {
31
+ line-height: 1em;
32
+ }
@@ -0,0 +1,38 @@
1
+ #strings {
2
+ background-image: url("http://son-of-a-banana.com");
3
+ quotes: "~" "~";
4
+ content: "#*%:&^,)!.(~*})";
5
+ empty: "";
6
+ brackets: "{" "}";
7
+ }
8
+ #comments {
9
+ content: "/* hello */ // not-so-secret";
10
+ }
11
+ #single-quote {
12
+ quotes: "'" "'";
13
+ content: '""#!&""';
14
+ empty: '';
15
+ semi-colon: ';';
16
+ }
17
+ #escaped {
18
+ filter: DX.Transform.MS.BS.filter(opacity=50);
19
+ }
20
+ #one-line {
21
+ image: url(http://tooks.com);
22
+ }
23
+ #crazy {
24
+ image: url(http://), "}", url("http://}");
25
+ }
26
+ #interpolation {
27
+ url: "http://lesscss.org/dev/image.jpg";
28
+ url2: "http://lesscss.org/image-256.jpg";
29
+ url3: "http://lesscss.org#445566";
30
+ url4: "http://lesscss.org/hello";
31
+ url5: "http://lesscss.org/54.4";
32
+ }
33
+ .mix-mul-class {
34
+ color: blue;
35
+ color: red;
36
+ color: blue;
37
+ color: orange;
38
+ }
@@ -0,0 +1,24 @@
1
+ .variables {
2
+ width: 14cm;
3
+ }
4
+ .variables {
5
+ height: 24px;
6
+ color: #888888;
7
+ font-family: "Trebuchet MS", Verdana, sans-serif;
8
+ quotes: "~" "~";
9
+ }
10
+ .redefinition {
11
+ three: 3;
12
+ }
13
+ .values {
14
+ font-family: 'Trebuchet', 'Trebuchet', 'Trebuchet';
15
+ color: #888888 !important;
16
+ url: url('Trebuchet');
17
+ multi: something 'A', B, C, 'Trebuchet';
18
+ }
19
+ .variable-names {
20
+ name: 'hello';
21
+ }
22
+ .alpha {
23
+ filter: alpha(opacity=42);
24
+ }
@@ -0,0 +1,36 @@
1
+ .whitespace {
2
+ color: white;
3
+ }
4
+ .whitespace {
5
+ color: white;
6
+ }
7
+ .whitespace {
8
+ color: white;
9
+ }
10
+ .whitespace {
11
+ color: white;
12
+ }
13
+ .whitespace {
14
+ color: white ;
15
+ }
16
+ .white, .space, .mania {
17
+ color: white;
18
+ }
19
+ .no-semi-column {
20
+ color: white;
21
+ }
22
+ .no-semi-column {
23
+ color: white;
24
+ white-space: pre;
25
+ }
26
+ .no-semi-column {
27
+ border: 2px solid white;
28
+ }
29
+ .newlines {
30
+ background: the,
31
+ great,
32
+ wall;
33
+ border: 2px
34
+ solid
35
+ black;
36
+ }
@@ -0,0 +1,75 @@
1
+ var path = require('path'),
2
+ fs = require('fs'),
3
+ sys = require('sys');
4
+
5
+ require.paths.unshift(__dirname, path.join(__dirname, '..'));
6
+
7
+ var less = require('lib/less');
8
+
9
+ less.tree.functions.add = function (a, b) {
10
+ return new(less.tree.Dimension)(a.value + b.value);
11
+ }
12
+ less.tree.functions.increment = function (a) {
13
+ return new(less.tree.Dimension)(a.value + 1);
14
+ }
15
+ less.tree.functions.color = function (str) {
16
+ if (str.value === "evil red") { return new(less.tree.Color)("600") }
17
+ }
18
+
19
+ sys.puts("\n" + stylize("LESS", 'underline') + "\n");
20
+
21
+ fs.readdirSync('test/less').forEach(function (file) {
22
+ if (! /\.less/.test(file)) { return }
23
+
24
+ toCSS('test/less/' + file, function (err, less) {
25
+ var name = path.basename(file, '.less');
26
+
27
+ fs.readFile(path.join('test/css', name) + '.css', 'utf-8', function (e, css) {
28
+ sys.print("- " + name + ": ")
29
+ if (less === css) { sys.print(stylize('OK', 'green')) }
30
+ else if (err) {
31
+ sys.print(stylize("ERROR: " + (err && err.message), 'red'));
32
+ } else {
33
+ sys.print(stylize("FAIL", 'yellow'));
34
+ }
35
+ sys.puts("");
36
+ });
37
+ });
38
+ });
39
+
40
+ function toCSS(path, callback) {
41
+ var tree, css;
42
+ fs.readFile(path, 'utf-8', function (e, str) {
43
+ if (e) { return callback(e) }
44
+
45
+ new(less.Parser)({
46
+ paths: [require('path').dirname(path)],
47
+ optimization: 0
48
+ }).parse(str, function (err, tree) {
49
+ if (err) {
50
+ callback(err);
51
+ } else {
52
+ try {
53
+ css = tree.toCSS();
54
+ callback(null, css);
55
+ } catch (e) {
56
+ callback(e);
57
+ }
58
+ }
59
+ });
60
+ });
61
+ }
62
+
63
+ // Stylize a string
64
+ function stylize(str, style) {
65
+ var styles = {
66
+ 'bold' : [1, 22],
67
+ 'inverse' : [7, 27],
68
+ 'underline' : [4, 24],
69
+ 'yellow' : [33, 39],
70
+ 'green' : [32, 39],
71
+ 'red' : [31, 39]
72
+ };
73
+ return '\033[' + styles[style][0] + 'm' + str +
74
+ '\033[' + styles[style][1] + 'm';
75
+ }
@@ -22,6 +22,10 @@
22
22
  }
23
23
  }
24
24
 
25
+ #alpha #hsla {
26
+ color: hsla(11, 20%, 20%, 0.6);
27
+ }
28
+
25
29
  #overflow {
26
30
  .a { color: #111111 - #444444; } // #000000
27
31
  .b { color: #eee + #fff; } // #ffffff
@@ -31,5 +35,12 @@
31
35
 
32
36
  #grey {
33
37
  color: rgb(200, 200, 200);
34
- background-color: hsl(50, 0, 50);
35
- }
38
+ }
39
+
40
+ #808080 {
41
+ color: hsl(50, 0%, 50%);
42
+ }
43
+
44
+ #00ff00 {
45
+ color: hsl(120, 100%, 50%);
46
+ }