css2less 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,9 @@
1
+ === 0.0.2 / 2013-02-03
2
+
3
+ * implement a new test to check if css @font-face rules are correctly handled
4
+ * fix: correctly handle css @import rules ( #10 )
5
+ * fix: correctly handle css child selectors ( #12 )
6
+
1
7
  === 0.0.1 / 2013-02-02
2
8
 
3
9
  * Reformat the source code using Ruby conventions.
@@ -71,11 +71,23 @@ module Css2Less
71
71
  def generate_tree
72
72
  @css.split("\n").map { |l| l.strip }.join.gsub(/\/\*+[^\*]*\*+\//, '').split(/[\{\}]/).each_slice(2) do |style|
73
73
  rules = style[0].strip
74
+ # handle child selector case - step1
75
+ if rules.include?('>')
76
+ rules = rules.gsub(/\s*>\s*/, ' &>')
77
+ end
78
+ if rules.include?("@import")
79
+ import_rule = rules.match(/@import.*;/)[0]
80
+ rules = rules.gsub(/@import.*;/, '')
81
+ add_rule(@tree, [], import_rule)
82
+ end
74
83
  # leave multiple rules alone
75
84
  if rules.include?(',')
76
85
  add_rule(@tree, [rules], style[1])
77
86
  else
78
- add_rule(@tree, rules.split(/\s+/), style[1])
87
+ rules_split = rules.split(/\s+/)
88
+ # handle child selector case - step2
89
+ rules_split.map! {|rule| rule.gsub('&>', '& > ')}
90
+ add_rule(@tree, rules_split, style[1])
79
91
  end
80
92
  end
81
93
  end
@@ -85,13 +97,17 @@ module Css2Less
85
97
  tree = @tree
86
98
  end
87
99
  tree.each do |element, children|
88
- @less = @less + ' ' * indent + element + " {\n"
89
- style = children.delete(:style)
90
- if style
91
- @less = @less + style.split(';').map { |s| s.strip }.reject { |s| s.empty? }.map { |s| ' ' * (indent+4) + s + ";" }.join("\n") + "\n"
100
+ if element == :style
101
+ @less = @less + children.split(';').map { |s| s.strip }.reject { |s| s.empty? }.map { |s| s + ";" }.join("\n") + "\n"
102
+ else
103
+ @less = @less + ' ' * indent + element + " {\n"
104
+ style = children.delete(:style)
105
+ if style
106
+ @less = @less + style.split(';').map { |s| s.strip }.reject { |s| s.empty? }.map { |s| ' ' * (indent+4) + s + ";" }.join("\n") + "\n"
107
+ end
108
+ render_less(children, indent + 4)
109
+ @less = @less + ' ' * indent + "}\n"
92
110
  end
93
- render_less(children, indent + 4)
94
- @less = @less + ' ' * indent + "}\n"
95
111
  end
96
112
  end
97
113
 
@@ -1,3 +1,3 @@
1
1
  module Css2Less
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -6,3 +6,127 @@ describe Css2Less do
6
6
  subject.const_get('VERSION').should_not be_empty
7
7
  end
8
8
  end
9
+
10
+ describe Css2Less::Converter do
11
+ it "should convert basic css structure into less structure" do
12
+ css = <<EOF
13
+ #hello {
14
+ color: blue;
15
+ }
16
+
17
+ #hello #buddy {
18
+ background: red;
19
+ }
20
+ EOF
21
+ less = <<EOF
22
+ #hello {
23
+ color: blue;
24
+ #buddy {
25
+ background: red;
26
+ }
27
+ }
28
+ EOF
29
+ converter = Css2Less::Converter.new(css)
30
+ converter.process_less
31
+ converter.get_less.should eq(less)
32
+ end
33
+
34
+ it "should correctly handle css child selectors" do
35
+ css = <<EOF
36
+ body .navbar .nav > li > a {
37
+ color: #333;
38
+ font-weight: bold;
39
+ }
40
+ EOF
41
+ less = <<EOF
42
+ body {
43
+ .navbar {
44
+ .nav {
45
+ & > li {
46
+ & > a {
47
+ color: #333;
48
+ font-weight: bold;
49
+ }
50
+ }
51
+ }
52
+ }
53
+ }
54
+ EOF
55
+ converter = Css2Less::Converter.new(css)
56
+ converter.process_less
57
+ converter.get_less.should eq(less)
58
+ end
59
+
60
+ it "should correctly handle css @import rules" do
61
+ css = <<EOF
62
+ @import "style1.css";
63
+ @import "style2.css";
64
+
65
+ @import "style3.css";
66
+
67
+ #hello {
68
+ color: blue;
69
+ }
70
+
71
+ @import "style4.css";
72
+
73
+ #hello #buddy {
74
+ background: red;
75
+ }
76
+ @import "style5.css";
77
+ EOF
78
+ less = <<EOF
79
+ @import "style1.css";
80
+ @import "style2.css";
81
+ @import "style3.css";
82
+ @import "style4.css";
83
+ @import "style5.css";
84
+ #hello {
85
+ color: blue;
86
+ #buddy {
87
+ background: red;
88
+ }
89
+ }
90
+ EOF
91
+ converter = Css2Less::Converter.new(css)
92
+ converter.process_less
93
+ converter.get_less.should eq(less)
94
+ end
95
+
96
+ it "should correctly handle @font-face rules" do
97
+ css = <<EOF
98
+ @font-face {
99
+ font-family: 'MyWebFont';
100
+ src: url('webfont.eot'); /* IE9 Compat Modes */
101
+ src: url('webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
102
+ url('webfont.woff') format('woff'), /* Modern Browsers */
103
+ url('webfont.ttf') format('truetype'), /* Safari, Android, iOS */
104
+ url('webfont.svg#svgFontName') format('svg'); /* Legacy iOS */
105
+ }
106
+
107
+ #hello {
108
+ color: blue;
109
+ }
110
+
111
+ #hello #buddy {
112
+ background: red;
113
+ }
114
+ EOF
115
+ less = <<EOF
116
+ @font-face {
117
+ font-family: 'MyWebFont';
118
+ src: url('webfont.eot');
119
+ src: url('webfont.eot?#iefix') format('embedded-opentype'), url('webfont.woff') format('woff'), url('webfont.ttf') format('truetype'), url('webfont.svg#svgFontName') format('svg');
120
+ }
121
+ #hello {
122
+ color: blue;
123
+ #buddy {
124
+ background: red;
125
+ }
126
+ }
127
+ EOF
128
+ converter = Css2Less::Converter.new(css)
129
+ converter.process_less
130
+ converter.get_less.should eq(less)
131
+ end
132
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: css2less
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-02-02 00:00:00.000000000 Z
13
+ date: 2013-02-03 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rdoc