diff --git a/lib/less/tree/comment.js b/lib/less/tree/comment.js index 29aece4d..8998b961 100644 --- a/lib/less/tree/comment.js +++ b/lib/less/tree/comment.js @@ -11,7 +11,7 @@ tree.Comment.prototype = { if (this.debugInfo) { output.add(tree.debugInfo(env, this)); } - output.add(this.value); + output.add(this.value.trim()); //TODO shouldn't need to trim, we shouldn't grab the \n }, toCSS: tree.toCSS, isSilent: function(env) { diff --git a/lib/less/tree/directive.js b/lib/less/tree/directive.js index 8ccb1ae4..e66a21ad 100644 --- a/lib/less/tree/directive.js +++ b/lib/less/tree/directive.js @@ -31,9 +31,9 @@ tree.Directive.prototype = { css += tabRuleStr + this.rules[i].toCSS(env) + (env.compress ? "" : "\n"); } env.tabLevel--; - return this.name + (env.compress ? '{' : ' {\n') + css + (env.compress ? '}': (tabSetStr + '}\n')); + return this.name + (env.compress ? '{' : ' {\n') + css + (env.compress ? '}': (tabSetStr + '}')); } else { - return this.name + ' ' + this.value.toCSS() + ';\n'; + return this.name + ' ' + this.value.toCSS() + ';'; } }, eval: function (env) { diff --git a/lib/less/tree/media.js b/lib/less/tree/media.js index 1eadce1a..1dd06f17 100644 --- a/lib/less/tree/media.js +++ b/lib/less/tree/media.js @@ -28,13 +28,13 @@ tree.Media.prototype = { tabSetStr = env.compress ? '' : Array(env.tabLevel).join(" "); var css = ""; for(var i = 0; i < this.rules.length; i++) { - css += tabRuleStr + this.rules[i].toCSS(env) + (env.compress ? '\n' : ''); + css += tabRuleStr + this.rules[i].toCSS(env) + (env.compress ? '' : '\n'); } env.tabLevel--; if (css.match(/\S/)) { return '@media ' + features + (env.compress ? '{' : ' {\n') + css + - (env.compress ? '}': '}\n'); + '}'; } else { return ""; } diff --git a/lib/less/tree/ruleset.js b/lib/less/tree/ruleset.js index 6a5e2c6f..813791cb 100644 --- a/lib/less/tree/ruleset.js +++ b/lib/less/tree/ruleset.js @@ -189,7 +189,8 @@ tree.Ruleset.prototype = { rulesets = [], // node.Ruleset instances selector, // The fully rendered selector debugInfo, // Line number debugging - rule; + rule, + ruleCSS; this.mergeRules(); @@ -218,7 +219,10 @@ tree.Ruleset.prototype = { rules.push(rule.value.toString()); } } - } + } + + rules = rules.filter(function(rule) { return !!rule; }); + rulesets = rulesets.filter(function(rule) { return !!rule; }); // Remove last semicolon if (env.compress && rules.length) { @@ -231,14 +235,14 @@ tree.Ruleset.prototype = { var tabRuleStr = env.compress ? '' : Array(env.tabLevel + 1).join(" "), tabSetStr = env.compress ? '' : Array(env.tabLevel).join(" "); - rulesets = rulesets.join(this.root ? tabRuleStr : tabSetStr); + rulesets = rulesets.join('\n' + (this.root ? tabRuleStr : tabSetStr)); // If this is the root node, we don't render // a selector, or {}. // Otherwise, only output if this ruleset has rules. if (this.root) { if (rules.length > 0) { - css.push(rules.join(env.compress ? '' : ('\n' + tabRuleStr))); + css.push(rules.join(env.compress ? '' : ('\n' + tabRuleStr))/* + '\n'*/); } } else { if (rules.length > 0) { @@ -267,7 +271,7 @@ tree.Ruleset.prototype = { css.push(selector + (env.compress ? '{' : ' {\n') + tabRuleStr + rules.join(env.compress ? '' : ('\n' + tabRuleStr)) + - (env.compress ? '}' : '\n' + tabSetStr + '}\n')); + (env.compress ? '}' : '\n' + tabSetStr + '}')); } } } @@ -282,7 +286,7 @@ tree.Ruleset.prototype = { css.push(rulesets); - return css.join('') + (env.compress ? '\n' : ''); + return css.join('') + (!env.compress && this.firstRoot ? '\n' : ''); }, toCSSRoot: function (env) { diff --git a/test/less-test.js b/test/less-test.js index 50b868ca..a8cfa401 100644 --- a/test/less-test.js +++ b/test/less-test.js @@ -136,7 +136,8 @@ function diff(left, right) { sys.puts(""); require('diff').diffLines(left, right).forEach(function(item) { if(item.added || item.removed) { - sys.print(stylize(item.value, item.added ? 'green' : 'red')); + var text = item.value.replace("\n", String.fromCharCode(182) + "\n");; + sys.print(stylize(text, item.added ? 'green' : 'red')); } else { sys.print(item.value); }