diff --git a/lesscpy/plib/deferred.py b/lesscpy/plib/deferred.py index dc02441..53a86f0 100644 --- a/lesscpy/plib/deferred.py +++ b/lesscpy/plib/deferred.py @@ -42,18 +42,18 @@ class Deferred(Node): ident.parse(None) mixins = scope.mixins(ident.raw()) + if not mixins: - store = [t for t in scope.deferred.tokens] - while scope.deferred.tokens: + store = [t for t in scope.deferred.parsed[-1]] + while scope.deferred.parsed[-1]: scope.current = scope.deferred ident.parse(scope) mixins = scope.mixins(ident.raw()) scope.current = None if mixins: - scope.deferred.tokens = store break - scope.deferred.tokens.pop() - scope.deferred.parse(None) + scope.deferred.parsed[-1].pop() + scope.deferred.parsed[-1] = store if mixins: for mixin in mixins: @@ -64,7 +64,7 @@ class Deferred(Node): res = [p.parse(scope) for p in res if p] while(any(t for t in res if type(t) is Deferred)): res = [p.parse(scope) for p in res if p] - scope.deferred = None + if error and not res: raise SyntaxError('NameError `%s`' % mixin.raw(True)) return res diff --git a/lesscpy/plib/identifier.py b/lesscpy/plib/identifier.py index dacbd36..6665f7e 100644 --- a/lesscpy/plib/identifier.py +++ b/lesscpy/plib/identifier.py @@ -72,7 +72,7 @@ class Identifier(Node): parent = parent[-1] if parent.parsed: return [self._pscn(part, n) - if part[0] not in self._subp + if part and part[0] not in self._subp else n for part in parent.parsed for n in names] diff --git a/lesscpy/test/css/mixin-args-local-calls.css b/lesscpy/test/css/mixin-args-local-calls.css index 4d666b7..3a53942 100644 --- a/lesscpy/test/css/mixin-args-local-calls.css +++ b/lesscpy/test/css/mixin-args-local-calls.css @@ -4,3 +4,42 @@ span { padding: 2px; padding: 1px; } +input, textarea, .uneditable-input { + margin-left: 0; +} +input.span12, textarea.span12, .uneditable-input.span12 { + width: 354; +} +input.span11, textarea.span11, .uneditable-input.span11 { + width: 322; +} +input.span10, textarea.span10, .uneditable-input.span10 { + width: 290; +} +input.span9, textarea.span9, .uneditable-input.span9 { + width: 258; +} +input.span8, textarea.span8, .uneditable-input.span8 { + width: 226; +} +input.span7, textarea.span7, .uneditable-input.span7 { + width: 194; +} +input.span6, textarea.span6, .uneditable-input.span6 { + width: 162; +} +input.span5, textarea.span5, .uneditable-input.span5 { + width: 130; +} +input.span4, textarea.span4, .uneditable-input.span4 { + width: 98; +} +input.span3, textarea.span3, .uneditable-input.span3 { + width: 66; +} +input.span2, textarea.span2, .uneditable-input.span2 { + width: 34; +} +input.span1, textarea.span1, .uneditable-input.span1 { + width: 2; +} \ No newline at end of file diff --git a/lesscpy/test/css/mixin-args-local-calls.min.css b/lesscpy/test/css/mixin-args-local-calls.min.css index c929c0f..4c2c9e1 100644 --- a/lesscpy/test/css/mixin-args-local-calls.min.css +++ b/lesscpy/test/css/mixin-args-local-calls.min.css @@ -1 +1,14 @@ span{padding:1px;padding:2px;padding:2px;padding:1px;} +input,textarea,.uneditable-input{margin-left:0;} +input.span12,textarea.span12,.uneditable-input.span12{width:354;} +input.span11,textarea.span11,.uneditable-input.span11{width:322;} +input.span10,textarea.span10,.uneditable-input.span10{width:290;} +input.span9,textarea.span9,.uneditable-input.span9{width:258;} +input.span8,textarea.span8,.uneditable-input.span8{width:226;} +input.span7,textarea.span7,.uneditable-input.span7{width:194;} +input.span6,textarea.span6,.uneditable-input.span6{width:162;} +input.span5,textarea.span5,.uneditable-input.span5{width:130;} +input.span4,textarea.span4,.uneditable-input.span4{width:98;} +input.span3,textarea.span3,.uneditable-input.span3{width:66;} +input.span2,textarea.span2,.uneditable-input.span2{width:34;} +input.span1,textarea.span1,.uneditable-input.span1{width:2;} diff --git a/lesscpy/test/less/mixin-args-local-calls.less b/lesscpy/test/less/mixin-args-local-calls.less index 8ad370d..f9a0263 100644 --- a/lesscpy/test/less/mixin-args-local-calls.less +++ b/lesscpy/test/less/mixin-args-local-calls.less @@ -18,4 +18,36 @@ span { .a .b(); // 2px .a .c(); // 2px .a .d(); // 1px -} \ No newline at end of file +} +/* + Bootstrap style funkyness +*/ +@gridColumnWidth: 20; +@gridGutterWidth: 20; +@gridColumns: 12; + +#grid { + .input(@gridColumnWidthx, @gridGutterWidthx) { + + .spanX (@index) when (@index > 0) { + (~"input.span@{index}, textarea.span@{index}, .uneditable-input.span@{index}") { .span(@index); } + .spanX(@index - 1); + } + .spanX (0) {} + + .span(@columns) { + width: ((@gridColumnWidthx) * @columns) + (@gridGutterWidthx * (@columns - 1)) - 10; + } + + input, + textarea, + .uneditable-input { + margin-left: 0; // override margin-left from core grid system + } + + // generate .spanX + .spanX (@gridColumns); + + } +} +#grid > .input (12, 20); \ No newline at end of file