From 1799f482bc42b06a25d932d8bcbb35ab2f593b49 Mon Sep 17 00:00:00 2001 From: jtm Date: Sun, 26 Feb 2012 17:04:50 +0000 Subject: [PATCH] checkpoint nested --- lesscpy/lessc/parser.py | 3 ++- lesscpy/lessc/scope.py | 7 ++++++- lesscpy/plib/block.py | 7 ++----- lesscpy/plib/expression.py | 2 +- lesscpy/plib/identifier.py | 12 ++++-------- lesscpy/test/css/variables.css | 6 +++--- lesscpy/test/css/variables.min.css | 6 +++--- 7 files changed, 21 insertions(+), 22 deletions(-) diff --git a/lesscpy/lessc/parser.py b/lesscpy/lessc/parser.py index 60123fd..924b96e 100644 --- a/lesscpy/lessc/parser.py +++ b/lesscpy/lessc/parser.py @@ -202,7 +202,8 @@ class LessParser(object): def p_block_open(self, p): """ block_open : identifier brace_open """ - p[0] = p[1] + p[0] = p[1].parse(self.scope) + self.scope.current = p[1].real def p_media_open(self, p): """ block_open : css_media t_ws identifier brace_open diff --git a/lesscpy/lessc/scope.py b/lesscpy/lessc/scope.py index 990eb15..af82a2c 100644 --- a/lesscpy/lessc/scope.py +++ b/lesscpy/lessc/scope.py @@ -28,7 +28,12 @@ class Scope(list): @property def scopename(self): - return [r['__current__'] for r in self if r['__current__']] + """ + """ + return [r['__current__'] + for r in self + if r['__current__']] + def add_block(self, block): """ diff --git a/lesscpy/plib/block.py b/lesscpy/plib/block.py index 732c19c..1752db5 100644 --- a/lesscpy/plib/block.py +++ b/lesscpy/plib/block.py @@ -1,6 +1,6 @@ """ """ -import copy, re +import re from .node import Node from lesscpy.lessc import utility class Block(Node): @@ -10,8 +10,7 @@ class Block(Node): """ """ if not self.parsed: - ident, inner = self.tokens - self.name = ident.parse(scope) + self.name, inner = self.tokens if not inner: inner = [] self.parsed = [p.parse(scope) for p in inner @@ -22,8 +21,6 @@ class Block(Node): self. inner = [p for p in inner if p and type(p) is type(self)] if self.inner: - scope = copy.deepcopy(scope) - scope.current = self.name self.inner = [p.parse(scope) for p in self.inner] return self diff --git a/lesscpy/plib/expression.py b/lesscpy/plib/expression.py index fd1b6d4..020ea5b 100644 --- a/lesscpy/plib/expression.py +++ b/lesscpy/plib/expression.py @@ -16,7 +16,7 @@ class Expression(Node): if type(e) is tuple else e for e in expr - if e != ' '] + if str(e).strip()] try: a, ua = utility.analyze_number(A, 'Illegal element in expression') b, ub = utility.analyze_number(B, 'Illegal element in expression') diff --git a/lesscpy/plib/identifier.py b/lesscpy/plib/identifier.py index 2c75b40..c821952 100644 --- a/lesscpy/plib/identifier.py +++ b/lesscpy/plib/identifier.py @@ -6,15 +6,11 @@ class Identifier(Node): def parse(self, scope): """ """ - scopename = [] - if scope: - scopename.extend(scope.scopename) - scopename = ''.join(scopename) + scopename = scope.scopename if scope else [] name = ''.join([t + ' ' if t in '*>~+' else t for t in utility.flatten(self.tokens)]) - if name.startswith('&'): - scopename = scopename.strip() - name = name[1:] - return scopename + name + self.real = name + scopename.append(name) + return ''.join(scopename).replace(' &', '') diff --git a/lesscpy/test/css/variables.css b/lesscpy/test/css/variables.css index 66a0ac9..c0130d0 100644 --- a/lesscpy/test/css/variables.css +++ b/lesscpy/test/css/variables.css @@ -29,14 +29,14 @@ color: blue; border-color: black; } -.scope2 { +.scope1 .scope2 { color: blue; } -.scope3 { +.scope1 .scope2 .scope3 { color: red; border-color: black; background-color: white; } -.scope4 { +.scope1 .scope2 .scope3 .scope4 { color: black; } diff --git a/lesscpy/test/css/variables.min.css b/lesscpy/test/css/variables.min.css index 4b909e6..a690ecd 100644 --- a/lesscpy/test/css/variables.min.css +++ b/lesscpy/test/css/variables.min.css @@ -6,6 +6,6 @@ .alpha{filter:alpha(opacity=42);} .lazy-eval{width:100%;} .scope1{color:blue;border-color:black;} -.scope2{color:blue;} -.scope3{color:red;border-color:black;background-color:white;} -.scope4{color:black;} +.scope1 .scope2{color:blue;} +.scope1 .scope2 .scope3{color:red;border-color:black;background-color:white;} +.scope1 .scope2 .scope3 .scope4{color:black;}