Beispiel #1
0
 def __init__(self, tokens, type=None):
     self.tokens = tokens
     self.units = {}
     if tokens is None:
         self.value = 0.0
     elif isinstance(tokens, NumberValue):
         self.value = tokens.value
         self.units = tokens.units.copy()
         if tokens.units:
             type = None
     elif isinstance(tokens, (StringValue, basestring)):
         tokens = getattr(tokens, "value", tokens)
         try:
             if tokens and tokens[-1] == "%":
                 self.value = to_float(tokens[:-1]) / 100.0
                 self.units = {"%": _units_weights.get("%", 1), "_": "%"}
             else:
                 self.value = to_float(tokens)
         except ValueError:
             raise ValueError("Value is not a Number! (%s)" % tokens)
     elif isinstance(tokens, (int, float)):
         # TODO i don't like this; should store the original and only divide
         # when converting.  requires fixing __str__ though
         self.value = float(tokens) * _conv_factor.get(type, 1.0)
     else:
         raise ValueError("Can't convert to CSS number: %s" % repr(tokens))
     if type is not None:
         self.units = {type: _units_weights.get(type, 1), "_": type}
Beispiel #2
0
 def convert_to(self, type):
     val = self.value
     if not self.unit:
         val *= _conv_factor.get(type, 1.0)
     ret = NumberValue(val)
     if type == 'deg' and ret.value > 360:
         ret.value = ret.value % 360.0
     ret.units = {type: _units_weights.get(type, 1), '_': type}
     return ret
Beispiel #3
0
 def __str__(self):
     unit = self.unit
     val = self.value / _conv_factor.get(unit, 1.0)
     val = to_str(val) + unit
     return val