less 1.0.6 → 1.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/less.gemspec +3 -2
- data/lib/less/engine/less.tt +7 -3
- data/lib/less/engine/nodes/literal.rb +18 -6
- data/lib/less/engine/parser.rb +105 -51
- data/spec/css/colors-1.0.css +6 -0
- data/spec/css/css-1.0.css +2 -0
- data/spec/css/operations-1.0.css +2 -2
- data/spec/css/scope-1.0.css +1 -1
- data/spec/css/whitespace-1.0.css +1 -0
- data/spec/engine_spec.rb +4 -0
- data/spec/less/colors-1.0.less +27 -0
- data/spec/less/css-1.0.less +5 -0
- data/spec/less/operations-1.0.less +2 -2
- data/spec/less/whitespace-1.0.less +5 -0
- metadata +3 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.8
|
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 = "1.0.
|
5
|
+
s.version = "1.0.8"
|
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-07-
|
9
|
+
s.date = %q{2009-07-15}
|
10
10
|
s.default_executable = %q{lessc}
|
11
11
|
s.description = %q{LESS is leaner CSS}
|
12
12
|
s.email = %q{self@cloudhead.net}
|
@@ -129,6 +129,7 @@ Gem::Specification.new do |s|
|
|
129
129
|
"spec/command_spec.rb",
|
130
130
|
"spec/css/accessors-1.0.css",
|
131
131
|
"spec/css/big-1.0.css",
|
132
|
+
"spec/css/colors-1.0.css",
|
132
133
|
"spec/css/comments-1.0.css",
|
133
134
|
"spec/css/css-1.0.css",
|
134
135
|
"spec/css/functions-1.0.css",
|
data/lib/less/engine/less.tt
CHANGED
@@ -113,7 +113,7 @@ grammar Less
|
|
113
113
|
# An operation or compound value
|
114
114
|
#
|
115
115
|
rule expression
|
116
|
-
entity (operator / S) expression <Builder> / entity
|
116
|
+
entity (operator / S / WS) expression <Builder> / entity
|
117
117
|
end
|
118
118
|
|
119
119
|
#
|
@@ -165,7 +165,7 @@ grammar Less
|
|
165
165
|
# div / .class / #id / input[type="text"] / lang(fr)
|
166
166
|
#
|
167
167
|
rule element
|
168
|
-
(class_id / tag / ident) attribute* ('(' ident ')')? / '@media' / '@font-face'
|
168
|
+
(class_id / tag / ident) attribute* ('(' ident ')')? / attribute+ / '@media' / '@font-face'
|
169
169
|
end
|
170
170
|
|
171
171
|
rule class_id
|
@@ -248,7 +248,7 @@ grammar Less
|
|
248
248
|
# `blue`, `small`, `normal` etc.
|
249
249
|
#
|
250
250
|
rule keyword
|
251
|
-
[
|
251
|
+
[-a-zA-Z]+ !ns {
|
252
252
|
def build env
|
253
253
|
env.identifiers.last << Node::Keyword.new(text_value)
|
254
254
|
end
|
@@ -367,6 +367,10 @@ grammar Less
|
|
367
367
|
[\n ]*
|
368
368
|
end
|
369
369
|
|
370
|
+
rule WS
|
371
|
+
[\n ]+
|
372
|
+
end
|
373
|
+
|
370
374
|
# Non-space char
|
371
375
|
rule ns
|
372
376
|
![ ;\n] .
|
@@ -13,14 +13,21 @@ module Less
|
|
13
13
|
#
|
14
14
|
class Color < DelegateClass(Fixnum)
|
15
15
|
include Literal
|
16
|
-
attr_reader :color
|
16
|
+
attr_reader :color, :opacity
|
17
17
|
|
18
18
|
def initialize color = nil, opacity = 1.0
|
19
|
+
@opacity = opacity
|
19
20
|
@color = if color.is_a? Array
|
20
21
|
rgba color
|
21
22
|
elsif color.is_a? ::String
|
22
23
|
color.delete! unit
|
23
|
-
|
24
|
+
if color.length == 3
|
25
|
+
color.split(//).map {|v| v + v }.join('').to_i 16
|
26
|
+
elsif color.length == 6
|
27
|
+
color.to_i 16
|
28
|
+
else
|
29
|
+
color
|
30
|
+
end
|
24
31
|
else
|
25
32
|
color
|
26
33
|
end
|
@@ -31,12 +38,17 @@ module Less
|
|
31
38
|
'#'
|
32
39
|
end
|
33
40
|
|
41
|
+
def hex
|
42
|
+
v = [[to_i, 0].max, 256 ** 3].min
|
43
|
+
"%06x" % [v]
|
44
|
+
end
|
45
|
+
|
34
46
|
def to_css
|
35
|
-
|
36
|
-
|
47
|
+
if opacity and opacity < 1.0
|
48
|
+
colors = hex.scan(/../).map {|v| v.to_i(16) }.join(", ")
|
49
|
+
"rgba(#{colors}, #{opacity})"
|
37
50
|
else
|
38
|
-
|
39
|
-
'0' * (6 - hex.length) + hex
|
51
|
+
unit + hex
|
40
52
|
end
|
41
53
|
end
|
42
54
|
|
data/lib/less/engine/parser.rb
CHANGED
@@ -1265,14 +1265,19 @@ module Less
|
|
1265
1265
|
if r5
|
1266
1266
|
r3 = r5
|
1267
1267
|
else
|
1268
|
-
|
1269
|
-
|
1268
|
+
r6 = _nt_WS
|
1269
|
+
if r6
|
1270
|
+
r3 = r6
|
1271
|
+
else
|
1272
|
+
@index = i3
|
1273
|
+
r3 = nil
|
1274
|
+
end
|
1270
1275
|
end
|
1271
1276
|
end
|
1272
1277
|
s1 << r3
|
1273
1278
|
if r3
|
1274
|
-
|
1275
|
-
s1 <<
|
1279
|
+
r7 = _nt_expression
|
1280
|
+
s1 << r7
|
1276
1281
|
end
|
1277
1282
|
end
|
1278
1283
|
if s1.last
|
@@ -1285,9 +1290,9 @@ module Less
|
|
1285
1290
|
if r1
|
1286
1291
|
r0 = r1
|
1287
1292
|
else
|
1288
|
-
|
1289
|
-
if
|
1290
|
-
r0 =
|
1293
|
+
r8 = _nt_entity
|
1294
|
+
if r8
|
1295
|
+
r0 = r8
|
1291
1296
|
else
|
1292
1297
|
@index = i0
|
1293
1298
|
r0 = nil
|
@@ -1754,28 +1759,47 @@ module Less
|
|
1754
1759
|
if r1
|
1755
1760
|
r0 = r1
|
1756
1761
|
else
|
1757
|
-
|
1758
|
-
|
1759
|
-
|
1760
|
-
|
1761
|
-
|
1762
|
+
s13, i13 = [], index
|
1763
|
+
loop do
|
1764
|
+
r14 = _nt_attribute
|
1765
|
+
if r14
|
1766
|
+
s13 << r14
|
1767
|
+
else
|
1768
|
+
break
|
1769
|
+
end
|
1770
|
+
end
|
1771
|
+
if s13.empty?
|
1772
|
+
@index = i13
|
1762
1773
|
r13 = nil
|
1774
|
+
else
|
1775
|
+
r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
|
1763
1776
|
end
|
1764
1777
|
if r13
|
1765
1778
|
r0 = r13
|
1766
1779
|
else
|
1767
|
-
if has_terminal?('@
|
1768
|
-
|
1769
|
-
@index +=
|
1780
|
+
if has_terminal?('@media', false, index)
|
1781
|
+
r15 = instantiate_node(SyntaxNode,input, index...(index + 6))
|
1782
|
+
@index += 6
|
1770
1783
|
else
|
1771
|
-
terminal_parse_failure('@
|
1772
|
-
|
1784
|
+
terminal_parse_failure('@media')
|
1785
|
+
r15 = nil
|
1773
1786
|
end
|
1774
|
-
if
|
1775
|
-
r0 =
|
1787
|
+
if r15
|
1788
|
+
r0 = r15
|
1776
1789
|
else
|
1777
|
-
@
|
1778
|
-
|
1790
|
+
if has_terminal?('@font-face', false, index)
|
1791
|
+
r16 = instantiate_node(SyntaxNode,input, index...(index + 10))
|
1792
|
+
@index += 10
|
1793
|
+
else
|
1794
|
+
terminal_parse_failure('@font-face')
|
1795
|
+
r16 = nil
|
1796
|
+
end
|
1797
|
+
if r16
|
1798
|
+
r0 = r16
|
1799
|
+
else
|
1800
|
+
@index = i0
|
1801
|
+
r0 = nil
|
1802
|
+
end
|
1779
1803
|
end
|
1780
1804
|
end
|
1781
1805
|
end
|
@@ -2658,41 +2682,37 @@ module Less
|
|
2658
2682
|
end
|
2659
2683
|
|
2660
2684
|
i0, s0 = index, []
|
2661
|
-
|
2662
|
-
|
2663
|
-
|
2664
|
-
|
2685
|
+
s1, i1 = [], index
|
2686
|
+
loop do
|
2687
|
+
if has_terminal?('[-a-zA-Z]', true, index)
|
2688
|
+
r2 = true
|
2689
|
+
@index += 1
|
2690
|
+
else
|
2691
|
+
r2 = nil
|
2692
|
+
end
|
2693
|
+
if r2
|
2694
|
+
s1 << r2
|
2695
|
+
else
|
2696
|
+
break
|
2697
|
+
end
|
2698
|
+
end
|
2699
|
+
if s1.empty?
|
2700
|
+
@index = i1
|
2665
2701
|
r1 = nil
|
2702
|
+
else
|
2703
|
+
r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
|
2666
2704
|
end
|
2667
2705
|
s0 << r1
|
2668
2706
|
if r1
|
2669
|
-
|
2670
|
-
|
2671
|
-
|
2672
|
-
|
2673
|
-
|
2674
|
-
|
2675
|
-
|
2676
|
-
end
|
2677
|
-
if r3
|
2678
|
-
s2 << r3
|
2679
|
-
else
|
2680
|
-
break
|
2681
|
-
end
|
2682
|
-
end
|
2683
|
-
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
|
2684
|
-
s0 << r2
|
2685
|
-
if r2
|
2686
|
-
i4 = index
|
2687
|
-
r5 = _nt_ns
|
2688
|
-
if r5
|
2689
|
-
r4 = nil
|
2690
|
-
else
|
2691
|
-
@index = i4
|
2692
|
-
r4 = instantiate_node(SyntaxNode,input, index...index)
|
2693
|
-
end
|
2694
|
-
s0 << r4
|
2707
|
+
i3 = index
|
2708
|
+
r4 = _nt_ns
|
2709
|
+
if r4
|
2710
|
+
r3 = nil
|
2711
|
+
else
|
2712
|
+
@index = i3
|
2713
|
+
r3 = instantiate_node(SyntaxNode,input, index...index)
|
2695
2714
|
end
|
2715
|
+
s0 << r3
|
2696
2716
|
end
|
2697
2717
|
if s0.last
|
2698
2718
|
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
@@ -3846,6 +3866,40 @@ module Less
|
|
3846
3866
|
r0
|
3847
3867
|
end
|
3848
3868
|
|
3869
|
+
def _nt_WS
|
3870
|
+
start_index = index
|
3871
|
+
if node_cache[:WS].has_key?(index)
|
3872
|
+
cached = node_cache[:WS][index]
|
3873
|
+
@index = cached.interval.end if cached
|
3874
|
+
return cached
|
3875
|
+
end
|
3876
|
+
|
3877
|
+
s0, i0 = [], index
|
3878
|
+
loop do
|
3879
|
+
if has_terminal?('[\\n ]', true, index)
|
3880
|
+
r1 = true
|
3881
|
+
@index += 1
|
3882
|
+
else
|
3883
|
+
r1 = nil
|
3884
|
+
end
|
3885
|
+
if r1
|
3886
|
+
s0 << r1
|
3887
|
+
else
|
3888
|
+
break
|
3889
|
+
end
|
3890
|
+
end
|
3891
|
+
if s0.empty?
|
3892
|
+
@index = i0
|
3893
|
+
r0 = nil
|
3894
|
+
else
|
3895
|
+
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
|
3896
|
+
end
|
3897
|
+
|
3898
|
+
node_cache[:WS][start_index] = r0
|
3899
|
+
|
3900
|
+
r0
|
3901
|
+
end
|
3902
|
+
|
3849
3903
|
module Ns0
|
3850
3904
|
end
|
3851
3905
|
|
data/spec/css/css-1.0.css
CHANGED
@@ -22,6 +22,7 @@ q:lang(no) { quotes: none; }
|
|
22
22
|
p + h1 { font-size: 2.2em; }
|
23
23
|
input[type="text"] { font-weight: normal; }
|
24
24
|
h2[title] { font-size: 100%; }
|
25
|
+
[disabled] { color: transparent; }
|
25
26
|
#shorthands {
|
26
27
|
border: 1px solid #000000;
|
27
28
|
font: 12px/16px Arial;
|
@@ -36,6 +37,7 @@ h2[title] { font-size: 100%; }
|
|
36
37
|
}
|
37
38
|
.misc {
|
38
39
|
-moz-border-radius: 2px;
|
40
|
+
display: -moz-inline-stack;
|
39
41
|
width: 0.1em;
|
40
42
|
background-color: #009998;
|
41
43
|
color: red !important;
|
data/spec/css/operations-1.0.css
CHANGED
data/spec/css/scope-1.0.css
CHANGED
data/spec/css/whitespace-1.0.css
CHANGED
data/spec/engine_spec.rb
CHANGED
@@ -54,6 +54,10 @@ describe Less::Engine do
|
|
54
54
|
lessify(:accessors).should == css(:accessors)
|
55
55
|
end
|
56
56
|
|
57
|
+
it "should parse colors in hex" do
|
58
|
+
lessify(:colors).should == css(:colors)
|
59
|
+
end
|
60
|
+
|
57
61
|
it "should parse mixins" do
|
58
62
|
lessify(:mixins).should == css(:mixins)
|
59
63
|
end
|
data/spec/less/colors-1.0.less
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
#yelow {
|
2
|
+
#short {
|
3
|
+
color: #fea;
|
4
|
+
}
|
5
|
+
|
6
|
+
#long {
|
7
|
+
color: #ffeeaa;
|
8
|
+
}
|
9
|
+
|
10
|
+
#rgba {
|
11
|
+
color: rgba(255, 238, 170, 0.1);
|
12
|
+
}
|
13
|
+
}
|
14
|
+
|
15
|
+
#blue {
|
16
|
+
#short {
|
17
|
+
color: #00f;
|
18
|
+
}
|
19
|
+
|
20
|
+
#long {
|
21
|
+
color: #0000ff;
|
22
|
+
}
|
23
|
+
|
24
|
+
#rgba {
|
25
|
+
color: rgba(0, 0, 255, 0.1);
|
26
|
+
}
|
27
|
+
}
|
data/spec/less/css-1.0.less
CHANGED
@@ -68,6 +68,10 @@ h2[title] {
|
|
68
68
|
font-size: 100%;
|
69
69
|
}
|
70
70
|
|
71
|
+
[disabled] {
|
72
|
+
color: transparent;
|
73
|
+
}
|
74
|
+
|
71
75
|
#shorthands {
|
72
76
|
border: 1px solid #000;
|
73
77
|
font: 12px/16px Arial;
|
@@ -84,6 +88,7 @@ h2[title] {
|
|
84
88
|
|
85
89
|
.misc {
|
86
90
|
-moz-border-radius: 2px;
|
91
|
+
display: -moz-inline-stack;
|
87
92
|
width: .1em;
|
88
93
|
background-color: #009998;
|
89
94
|
color: red !important;
|
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: 1.0.
|
4
|
+
version: 1.0.8
|
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-07-
|
12
|
+
date: 2009-07-15 00:00:00 -04:00
|
13
13
|
default_executable: lessc
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -136,6 +136,7 @@ files:
|
|
136
136
|
- spec/command_spec.rb
|
137
137
|
- spec/css/accessors-1.0.css
|
138
138
|
- spec/css/big-1.0.css
|
139
|
+
- spec/css/colors-1.0.css
|
139
140
|
- spec/css/comments-1.0.css
|
140
141
|
- spec/css/css-1.0.css
|
141
142
|
- spec/css/functions-1.0.css
|