File tree 3 files changed +42
-12
lines changed
3 files changed +42
-12
lines changed Original file line number Diff line number Diff line change 8
8
*/
9
9
10
10
module . exports = function ( node ) {
11
+ var indents = 0 ;
11
12
12
13
return visit ( node ) ;
13
14
15
+ /**
16
+ * Visit `node`.
17
+ */
18
+
14
19
function visit ( node ) {
15
20
switch ( node [ 0 ] ) {
16
21
case 'root' :
@@ -26,15 +31,30 @@ module.exports = function(node){
26
31
}
27
32
}
28
33
34
+ /**
35
+ * Visit block.
36
+ */
37
+
29
38
function block ( node ) {
30
39
var props = node [ 1 ] ;
31
- return props . map ( visit ) . join ( ';\n' ) ;
40
+ ++ indents ;
41
+ var ret = props . map ( visit ) . join ( ';\n' ) ;
42
+ -- indents ;
43
+ return ret ;
32
44
}
33
45
46
+ /**
47
+ * Visit prop.
48
+ */
49
+
34
50
function prop ( node ) {
35
- return ' ' + node [ 1 ] ;
51
+ return Array ( indents ) . join ( ' ' ) + node [ 1 ] ;
36
52
}
37
53
54
+ /**
55
+ * Visit rule.
56
+ */
57
+
38
58
function rule ( node ) {
39
59
var rule = node [ 1 ] ;
40
60
var block = node [ 2 ] ;
@@ -46,6 +66,10 @@ module.exports = function(node){
46
66
+ '\n}' ;
47
67
}
48
68
69
+ /**
70
+ * Visit root.
71
+ */
72
+
49
73
function root ( node ) {
50
74
var buf = [ ] ;
51
75
for ( var i = 0 ; i < node [ 1 ] . length ; ++ i ) {
Original file line number Diff line number Diff line change @@ -44,6 +44,7 @@ module.exports = function(str) {
44
44
function next ( ) {
45
45
return stashed ( )
46
46
|| indentation ( )
47
+ || prop ( )
47
48
|| rule ( ) ;
48
49
}
49
50
@@ -97,6 +98,17 @@ module.exports = function(str) {
97
98
return stashed ( ) ;
98
99
}
99
100
101
+ /**
102
+ * <prop>: <val>
103
+ */
104
+
105
+ function prop ( ) {
106
+ var m = str . match ( / ^ * ( [ ^ : ] + ) : * ( [ ^ \n ] + ) / ) ;
107
+ if ( ! m ) return ;
108
+ str = str . slice ( m [ 0 ] . length ) ;
109
+ return [ 'prop' , m [ 1 ] , m [ 2 ] ] ;
110
+ }
111
+
100
112
/**
101
113
* (^ newline)+
102
114
*/
Original file line number Diff line number Diff line change @@ -65,25 +65,19 @@ module.exports = function(str) {
65
65
function block ( ) {
66
66
var props = [ ] ;
67
67
expect ( 'indent' ) ;
68
- while ( ! is ( 'outdent' ) ) props . push ( prop ( ) ) ;
68
+ while ( ! is ( 'outdent' ) ) props . push ( stmt ( ) ) ;
69
69
expect ( 'outdent' ) ;
70
70
return [ 'block' , props ] ;
71
71
}
72
72
73
73
/**
74
- * prop
75
- */
76
-
77
- function prop ( ) {
78
- return [ 'prop' , next ( ) [ 1 ] ] ;
79
- }
80
-
81
- /**
82
- * rule
74
+ * rule
75
+ * | prop
83
76
*/
84
77
85
78
function stmt ( ) {
86
79
if ( is ( 'rule' ) ) return rule ( ) ;
80
+ if ( is ( 'prop' ) ) return next ( ) ;
87
81
}
88
82
89
83
/**
You can’t perform that action at this time.
0 commit comments