| Index: third_party/pyscss/scss/value.py
|
| diff --git a/third_party/pyscss/scss/value.py b/third_party/pyscss/scss/value.py
|
| deleted file mode 100644
|
| index 55a3759798051ae33624b59aa614698a878121b1..0000000000000000000000000000000000000000
|
| --- a/third_party/pyscss/scss/value.py
|
| +++ /dev/null
|
| @@ -1,294 +0,0 @@
|
| -" SCSS Values."
|
| -
|
| -from colorsys import rgb_to_hls, hls_to_rgb
|
| -from pyparsing import ParseResults
|
| -
|
| -from scss import OPRT, CONV_FACTOR, COLORS
|
| -from scss.base import Node
|
| -
|
| -
|
| -hex2rgba = {
|
| - 8: lambda c: (int(c[0:2], 16), int(c[2:4], 16), int(c[4:6], 16), int(c[6:8], 16)),
|
| - 6: lambda c: (int(c[0:2], 16), int(c[2:4], 16), int(c[4:6], 16), 1.0),
|
| - 4: lambda c: (int(c[0]*2, 16), int(c[1]*2, 16), int(c[2]*2, 16), int(c[3]*2, 16)),
|
| - 3: lambda c: (int(c[0]*2, 16), int(c[1]*2, 16), int(c[2]*2, 16), 1.0),
|
| -}
|
| -
|
| -
|
| -def hsl_op(op, color, h, s, l):
|
| - color = ColorValue(color)
|
| - h, s, l = map(NumberValue, (h, s, l))
|
| - h.units = 'deg'
|
| - s.units = l.units = '%'
|
| - other_hls = map(float, (h, l, s))
|
| - self_hls = rgb_to_hls(*map(lambda x: x / 255.0, color.value[:3]))
|
| - res_hls = map(lambda x, y: op(x, y) if op else y if y else x, self_hls, other_hls)
|
| - res_hls = map(lambda x: 1 if x > 1 else 0 if x < 0 else x, res_hls)
|
| - res = hls_to_rgb(*res_hls)
|
| - return ColorValue((res[0] * 255.0, res[1] * 255.0, res[2] * 255.0, color.value[3]))
|
| -
|
| -
|
| -def rgba_op(op, color, r, g, b, a):
|
| - other = (float(r), float(g), float(b), float(a))
|
| - res = map(op or ( lambda x, y: x or y ), color.value, other)
|
| - res[3] = 1 if float(a) == color.value[3] == 1 else res[3]
|
| - return ColorValue(res)
|
| -
|
| -
|
| -class Value(Node):
|
| - """ Abstract value.
|
| - """
|
| - @classmethod
|
| - def _do_op(cls, self, other, op):
|
| - first, second = cls(self), cls(other)
|
| - return op(first.value, second.value)
|
| -
|
| - @classmethod
|
| - def _do_cmps(cls, first, second, op):
|
| - return op(first.value, second.value)
|
| -
|
| - # Math operation
|
| - def __add__(self, other):
|
| - return self._do_op(self, other, OPRT['+'])
|
| -
|
| - __radd__ = __add__
|
| -
|
| - def __div__(self, other):
|
| - return self._do_op(self, other, OPRT['/'])
|
| -
|
| - def __rdiv__(self, other):
|
| - return self._do_op(other, self, OPRT['/'])
|
| -
|
| - def __sub__(self, other):
|
| - return self._do_op(self, other, OPRT['-'])
|
| -
|
| - def __rsub__(self, other):
|
| - return self._do_op(other, self, OPRT['-'])
|
| -
|
| - def __mul__(self, other):
|
| - return self._do_op(self, other, OPRT['*'])
|
| -
|
| - def __lt__(self, other):
|
| - return self._do_cmps(self, other, OPRT['<'])
|
| -
|
| - __rmul__ = __mul__
|
| -
|
| - # Compare operation
|
| - def __le__(self, other):
|
| - return self._do_cmps(self, other, OPRT['<='])
|
| -
|
| - def __gt__(self, other):
|
| - return self._do_cmps(self, other, OPRT['>='])
|
| -
|
| - def __ge__(self, other):
|
| - return self._do_cmps(self, other, OPRT['>'])
|
| -
|
| - def __eq__(self, other):
|
| - return self._do_cmps(self, other, OPRT['=='])
|
| -
|
| - def __ne__(self, other):
|
| - return self._do_cmps(self, other, OPRT['!='])
|
| -
|
| - # Boolean
|
| - def __nonzero__(self):
|
| - return getattr(self, 'value') and True or False
|
| -
|
| - def __bool__(self):
|
| - return bool(self.value) if self.value != 'false' else False
|
| -
|
| - def __str__(self):
|
| - return str(self.value)
|
| -
|
| - def __float__(self):
|
| - return float(self.value)
|
| -
|
| -
|
| -class StringValueMeta(type):
|
| -
|
| - def __call__(mcs, *args, **kwargs):
|
| - test = mcs.__new__(mcs)
|
| - test.__init__(*args, **kwargs)
|
| -
|
| - if test.value in ('true', 'false'):
|
| - return BooleanValue(test.value)
|
| -
|
| - elif COLORS.has_key(test.value):
|
| - return ColorValue(COLORS.get(test.value))
|
| -
|
| - return test
|
| -
|
| -
|
| -class StringValue(Value):
|
| -
|
| - __metaclass__ = StringValueMeta
|
| -
|
| - def_value = ''
|
| -
|
| - def __init__(self, t):
|
| - super(StringValue, self).__init__(None, None, t)
|
| -
|
| - self.value = self.def_value
|
| -
|
| - if isinstance(t, ParseResults):
|
| - self.value = ''.join(str(s) for s in t)
|
| -
|
| - elif isinstance(t, StringValue):
|
| - self.value = t.value
|
| -
|
| - elif isinstance(t, Node):
|
| - self.value = str(t.value).strip('"\'')
|
| -
|
| - elif isinstance(t, (str, int, float)):
|
| - self.value = str(t)
|
| -
|
| - def __div__(self, other):
|
| - self.value = '/'.join((str(self), str(other)))
|
| - return self
|
| -
|
| - def __str__(self):
|
| - return self.value
|
| -
|
| -
|
| -class PointValue(Value):
|
| -
|
| - @property
|
| - def value(self):
|
| - return ' '.join(map(str, self.data))
|
| -
|
| - def __str__(self):
|
| - return self.value
|
| -
|
| -class RepeatValue(Value):
|
| - @property
|
| - def value(self):
|
| - return ''.join(map(str, self.data))
|
| -
|
| - def __str__(self):
|
| - return '[%s]' % self.value
|
| -
|
| -class QuotedStringValue(StringValue):
|
| -
|
| - def __init__(self, t):
|
| - super(QuotedStringValue, self).__init__(t)
|
| - self.value = self.value.strip('"\'')
|
| -
|
| - def __str__(self):
|
| - return "'%s'" % self.value
|
| -
|
| -
|
| -class ColorValue(Value):
|
| -
|
| - def_value = (255.0, 255.0, 255.0, 1)
|
| -
|
| - def __init__(self, t):
|
| - super(ColorValue, self).__init__(None, None, t)
|
| - self.value = self.def_value
|
| -
|
| - if isinstance(t, ParseResults):
|
| - val = t[0][1:]
|
| - self.value = hex2rgba[len(val)](val)
|
| -
|
| - elif isinstance(t, (list, tuple)):
|
| - r = self.value
|
| - c = map(lambda x, y: x if not x is None else y, t, r)
|
| - c = tuple(0.0 if c[i] < 0 else r[i] if c[i] > r[i] else c[i] for i in range(4))
|
| - self.value = c
|
| -
|
| - elif isinstance(t, str):
|
| - val = t[1:]
|
| - self.value = hex2rgba[len(val)](val)
|
| -
|
| - elif isinstance(t, ColorValue):
|
| - self.value = t.value
|
| -
|
| - def __float__(self):
|
| - return float( sum(self.value[:3], 0.0) / 3 * self.value[3] )
|
| -
|
| - def __str__(self):
|
| - if self.value[3] == 1:
|
| - v = '%02x%02x%02x' % self.value[:3]
|
| - if v[0] == v[1] and v[2] == v[3] and v[4] == v[5]:
|
| - v = v[0] + v[2] + v[4]
|
| - return '#%s' % v
|
| - return 'rgba(%d,%d,%d,%.2f)' % self.value
|
| -
|
| - __repr__ = __str__
|
| -
|
| - @classmethod
|
| - def _do_op(cls, self, other, op):
|
| - if isinstance(other, ColorValue):
|
| - return rgba_op(op, self, *other.value)
|
| -
|
| - elif isinstance(other, ( NumberValue, int )):
|
| - if op in (OPRT['*'], OPRT['/']):
|
| - return ColorValue(map(lambda x: op(x, float(other)), self.value[:3]))
|
| - return hsl_op(op, self, 0, other, 0)
|
| -
|
| - else:
|
| - return self
|
| -
|
| -
|
| -class BooleanValue(Value):
|
| -
|
| - def_value = True
|
| -
|
| - def __init__(self, t):
|
| - super(BooleanValue, self).__init__(None, None, t)
|
| - self.value = self.def_value
|
| -
|
| - if isinstance(t, (str, bool)):
|
| - self.value = bool(t) if t != 'false' else False
|
| -
|
| - elif isinstance(t, Node):
|
| - self.value = bool(t)
|
| -
|
| - def __str__(self):
|
| - return 'true' if self.value else 'false'
|
| -
|
| - __repr__ = __str__
|
| -
|
| - def __float__(self):
|
| - return 1.0 if self.value else 0.0
|
| -
|
| -
|
| -class NumberValue(Value):
|
| -
|
| - def_value = 0.0
|
| -
|
| - def __init__(self, t):
|
| - super(NumberValue, self).__init__(None, None, t)
|
| - self.value = self.def_value
|
| - self.units = ''
|
| -
|
| - if isinstance(t, (ParseResults, list, tuple)):
|
| - if len(t) > 1:
|
| - self.units = t[1]
|
| - self.value = float(t[0])
|
| -
|
| - elif isinstance(t, NumberValue):
|
| - self.value, self.units = t.value, t.units
|
| -
|
| - elif isinstance(t, Node):
|
| - self.value = float(t.value)
|
| - self.units = getattr(t.value, 'units', '')
|
| -
|
| - elif isinstance(t, (int, float, str)):
|
| - self.value = float(t)
|
| -
|
| - def __float__(self):
|
| - return self.value * CONV_FACTOR.get(self.units, 1.0)
|
| -
|
| - def __str__(self):
|
| - value = ("%0.03f" % self.value).strip('0').rstrip('.') or 0
|
| - # Don't emit unit suffix for 0 unless it's a percentage. Necessary in
|
| - # animation keyframe selectors.
|
| - theUnits = self.units if (self.value or self.units == '%') else ''
|
| - return "%s%s" % (value, theUnits)
|
| -
|
| - @classmethod
|
| - def _do_op(cls, self, other, op):
|
| - first, second = cls(self), cls(other)
|
| - units = second.units or first.units
|
| - value = op(float(first), float(second))
|
| - value /= CONV_FACTOR.get(units, 1.0)
|
| - return cls((value, units))
|
|
|