예제 #1
0
    def parse(self, scope):
        """Parse Node within scope.
        the functions ~( and e( map to self.escape
        and %( maps to self.sformat
        args:
            scope (Scope): Current scope
        """
        name = ''.join(self.tokens[0])
        parsed = self.process(self.tokens[1:], scope)

        if name == '%(':
            name = 'sformat'
        elif name in ('~', 'e'):
            name = 'escape'
        color = Color.Color()
        args = [
            t for t in parsed
            if not isinstance(t, six.string_types) or t not in '(),'
        ]
        if hasattr(self, name):
            try:
                return getattr(self, name)(*args)
            except ValueError:
                pass

        if hasattr(color, name):
            try:
                result = getattr(color, name)(*args)
                try:
                    return result + ' '
                except TypeError:
                    return result
            except ValueError:
                pass
        return name + ''.join([p for p in parsed])
예제 #2
0
 def parse(self, scope):
     """ Parse Node
     args:
         scope (Scope): Scope object
     raises:
         SyntaxError
     returns:
         str
     """
     assert(len(self.tokens) == 3)
     expr = self.process(self.tokens, scope)
     expr = [self.neg(t, scope) for t in expr]
     A, O, B = [e[0]
                if isinstance(e, tuple)
                else e
                for e in expr
                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')
     except SyntaxError:
         return ' '.join([str(A), str(O), str(B)])
     if(a is False or b is False):
         return ' '.join([str(A), str(O), str(B)])
     if ua == 'color' or ub == 'color':
         return color.Color().process((A, O, B))
     if a == 0 and O == '/':
         # NOTE(saschpe): The ugliest but valid CSS since sliced bread: 'font: 0/1 a;'
         return ''.join([str(A), str(O), str(B), ' '])
     out = self.operate(a, b, O)
     if isinstance(out, bool):
         return out
     return self.with_units(out, ua, ub)
예제 #3
0
 def setUp(self):
     self.color = color.Color()