less 0.8.9 → 0.8.10
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/VERSION +1 -1
- data/less.gemspec +3 -2
- data/lib/less/engine.rb +12 -12
- data/spec/css/less-0.9.0.css +30 -0
- data/spec/spec.css +4 -0
- data/spec/spec.less +24 -0
- metadata +3 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.8.
|
1
|
+
0.8.10
|
data/less.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{less}
|
5
|
-
s.version = "0.8.
|
5
|
+
s.version = "0.8.10"
|
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-06-
|
9
|
+
s.date = %q{2009-06-18}
|
10
10
|
s.default_executable = %q{lessc}
|
11
11
|
s.description = %q{LESS is leaner CSS}
|
12
12
|
s.email = %q{alexis@cloudhead.net}
|
@@ -32,6 +32,7 @@ Gem::Specification.new do |s|
|
|
32
32
|
"spec/css/less-0.8.6.css",
|
33
33
|
"spec/css/less-0.8.7.css",
|
34
34
|
"spec/css/less-0.8.8.css",
|
35
|
+
"spec/css/less-0.9.0.css",
|
35
36
|
"spec/engine_spec.rb",
|
36
37
|
"spec/spec.css",
|
37
38
|
"spec/spec.less",
|
data/lib/less/engine.rb
CHANGED
@@ -4,7 +4,7 @@ module Less
|
|
4
4
|
COMPOUND = {'font' => true, 'background' => false, 'border' => false }
|
5
5
|
REGEX = {
|
6
6
|
:path => /([#.][->#.\w ]+)?( ?> ?)?/, # #header > .title
|
7
|
-
:selector => /[-\w
|
7
|
+
:selector => /[-\w #.,*>:\(\)]/, # .cow .milk > a
|
8
8
|
:variable => /@([-\w]+)/, # @milk-white
|
9
9
|
:property => /@[-\w]+|[-a-z]+/, # font-size
|
10
10
|
:color => /#([a-zA-Z0-9]{3,6})\b/, # #f0f0f0
|
@@ -39,7 +39,7 @@ module Less
|
|
39
39
|
end
|
40
40
|
node.delete key if matched # Delete the property if it's LESS-specific
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
#
|
44
44
|
# Evaluate mixins
|
45
45
|
#
|
@@ -69,8 +69,8 @@ module Less
|
|
69
69
|
# Units are: 1px, 1em, 1%, #111
|
70
70
|
@tree = @tree.traverse :leaf do |key, value, path, node|
|
71
71
|
node[ key ] = value.gsub /(#{REGEX[:operand]}(\s?)[-+\/*](\4))+(#{REGEX[:operand]})/ do |operation|
|
72
|
-
# Disallow operations certain compound declarations
|
73
|
-
if COMPOUND[key]
|
72
|
+
# Disallow operations on certain compound declarations
|
73
|
+
if COMPOUND[ key ]
|
74
74
|
next value
|
75
75
|
else
|
76
76
|
raise CompoundOperationError, "#{key}: #{value}"
|
@@ -138,17 +138,17 @@ module Less
|
|
138
138
|
# less: color: black;
|
139
139
|
# hashify: "color" => "black"
|
140
140
|
#
|
141
|
-
hash = self.gsub(/\
|
142
|
-
gsub(
|
143
|
-
gsub(/\/\/.*/, ''). # Comments //
|
141
|
+
hash = self.gsub(/\r\n/, "\n"). # m$
|
142
|
+
gsub(/\/\/.*\n/, ''). # Comments //
|
144
143
|
gsub(/\/\*.*?\*\//m, ''). # Comments /*
|
145
|
-
gsub(
|
146
|
-
gsub(/
|
147
|
-
gsub(/(
|
144
|
+
gsub(/\s+/, ' '). # Replace \t\n
|
145
|
+
gsub(/"/, "'"). # " to '
|
146
|
+
gsub(/("|')(.*?)(\1)/) { $1 + CGI.escape( $2 ) + $1 }. # Escape string values
|
147
|
+
gsub(/(#{REGEX[:property]}): *([^\{\}]+?) *(;|(?=\}))/,'"\1"=>"\2",'). # Rules
|
148
148
|
gsub(/\}/, "},"). # Closing }
|
149
|
-
gsub(/( *)(#{REGEX[:selector]}+?)[ \n]*(?=\{)
|
149
|
+
gsub(/([, ]*)(#{REGEX[:selector]}+?)[ \n]*(?=\{)/, '\1"\2"=>'). # Selectors
|
150
150
|
gsub(/([.#][->\w .#]+);/, '"\\1" => :mixin,') # Mixins
|
151
|
-
eval "{
|
151
|
+
eval "{#{ hash }}" # Return {hash}
|
152
152
|
end
|
153
153
|
end
|
154
154
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
ul li:first-child { border-top: none; }
|
2
|
+
.duplicate { color: blue; width: 11px; }
|
3
|
+
q:lang(no) { quotes: '~' '~'; }
|
4
|
+
.no-semi-column { color: orange; }
|
5
|
+
body { text-shadow: #333 -1px 1px 2px; border-color: #888; font-size: 10px; margin: -5px 0 5px 10px; background-color: #aaa; border: solid 1px #000; -moz-border-radius: 3px; font-family: 'Lucida Grande', 'Helvetica', Verdana, sans-serif; color: #ccc; }
|
6
|
+
td, tr, table { border-width: 4px; }
|
7
|
+
div > a, a span { color: grey; }
|
8
|
+
.space { color: purple; font-color: yellow; }
|
9
|
+
blockquote:before { color: red; }
|
10
|
+
.root a:hover, a:focus { color: orange; }
|
11
|
+
.root a { display: none; color: blue; }
|
12
|
+
.root .first .second .third { border-color: blue; font-size: 8px; background-color: blue; color: red; }
|
13
|
+
.root .first .second { }
|
14
|
+
.root .first { color: green; }
|
15
|
+
.root { }
|
16
|
+
.p:first-letter { color: red; }
|
17
|
+
.extra .dark-borders { border-color: #444444; }
|
18
|
+
.extra .light-borders { border-color: #888; }
|
19
|
+
.extra { }
|
20
|
+
a:link, a:hover { color: brown; }
|
21
|
+
ul li:first-child, ul li:last-child { background-color: #333; }
|
22
|
+
div { color: purple; }
|
23
|
+
.borders { }
|
24
|
+
.root:hover a { display: block; }
|
25
|
+
.operations div { width: 80px; }
|
26
|
+
.operations { colorb: #333333; font-size: 66; colorc: #777777; line-height: 7px; border-width: 16px; color: #eeeeee; font: 12px/16px; width: 110px; }
|
27
|
+
:focus { outline: 0; content: '*}#f~ '; }
|
28
|
+
.theme { background-color: #aaa; color: #ccc; }
|
29
|
+
blockquote:before, blockquote:after, q:before, q:after { content: ''; }
|
30
|
+
.transparent_box { opacity: 0.6; background-color: #FFF; filter: alpha(opacity=60); }
|
data/spec/spec.css
CHANGED
@@ -14,12 +14,16 @@ body { font-size: 10px; font-family: 'Lucida Grande', 'Helvetica', Verdana, sans
|
|
14
14
|
.operations > div { width: 80px; }
|
15
15
|
.operations { font: 12px/16px; width: 110px; border-width: 16px; font-size: 66; line-height: 7px; color: #eeeeee; colorb: #333333; colorc: #777777; }
|
16
16
|
td, tr, table { border-width: 4px; }
|
17
|
+
blockquote:before, blockquote:after, q:before, q:after { content: ''; }
|
18
|
+
a:link, a:hover { color: brown; }
|
17
19
|
ul li:first-child { border-top: none; }
|
18
20
|
ul li:first-child, ul li:last-child { background-color: #333; }
|
19
21
|
.p:first-letter { color: red; }
|
20
22
|
:focus { outline: 0; content: '*}#f~ '; }
|
21
23
|
q:lang(no) { quotes: '~' '~'; }
|
22
24
|
blockquote:before { color: red; }
|
25
|
+
div { color: purple; }
|
26
|
+
.duplicate { width: 11px; color: blue; }
|
23
27
|
.transparent_box { background-color: #FFF; filter: alpha(opacity=60); opacity: 0.6; }
|
24
28
|
.space { color: purple; font-color: yellow; }
|
25
29
|
.no-semi-column { color: orange; }
|
data/spec/spec.less
CHANGED
@@ -92,6 +92,14 @@ td, tr, table {
|
|
92
92
|
}
|
93
93
|
|
94
94
|
// More complex CSS selectors
|
95
|
+
blockquote:before, blockquote:after, q:before, q:after { content: ""; }
|
96
|
+
a:link,
|
97
|
+
a:hover {
|
98
|
+
color:brown;
|
99
|
+
}
|
100
|
+
div > a, a span {
|
101
|
+
color: grey;
|
102
|
+
}
|
95
103
|
ul li:first-child {
|
96
104
|
border-top: none;
|
97
105
|
}
|
@@ -112,6 +120,22 @@ blockquote:before {
|
|
112
120
|
color: red;
|
113
121
|
}
|
114
122
|
|
123
|
+
// Duplicates
|
124
|
+
div {
|
125
|
+
width: 9px;
|
126
|
+
}
|
127
|
+
div {
|
128
|
+
color: purple;
|
129
|
+
}
|
130
|
+
.duplicate {
|
131
|
+
width: 9px;
|
132
|
+
height: 11px;
|
133
|
+
}
|
134
|
+
.duplicate {
|
135
|
+
width: 11px;
|
136
|
+
color: blue;
|
137
|
+
}
|
138
|
+
|
115
139
|
/*input[type="text"] {
|
116
140
|
background-color: blue;
|
117
141
|
}*/
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: less
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- cloudhead
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-06-
|
12
|
+
date: 2009-06-18 00:00:00 -04:00
|
13
13
|
default_executable: lessc
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -39,6 +39,7 @@ files:
|
|
39
39
|
- spec/css/less-0.8.6.css
|
40
40
|
- spec/css/less-0.8.7.css
|
41
41
|
- spec/css/less-0.8.8.css
|
42
|
+
- spec/css/less-0.9.0.css
|
42
43
|
- spec/engine_spec.rb
|
43
44
|
- spec/spec.css
|
44
45
|
- spec/spec.less
|