block.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import properties as props
  2. class Block(object):
  3. """
  4. A Block is a stylesheet block of the following form:
  5. <selector>,
  6. ... {
  7. <property>: <value>;
  8. ...
  9. }
  10. """
  11. def __init__(self, *args):
  12. self.selectors = sorted(set(args))
  13. self.properties = set()
  14. def add_property(self, name, value):
  15. self.properties.add((name, value))
  16. def generate_css(self, compress_whitespace=False, compress_color=False,
  17. compress_font=False, compress_dimension=False):
  18. if compress_whitespace:
  19. comma = ','
  20. colon = ':'
  21. newline = ''
  22. lbracket = '{'
  23. rbracket = '}'
  24. else:
  25. comma = ',\n'
  26. colon = ': '
  27. newline = '\n\t'
  28. lbracket = ' {'
  29. rbracket = '\n}'
  30. properties = self.properties
  31. if compress_color:
  32. properties = props.compress_color(properties)
  33. if compress_font:
  34. properties = props.compress_font(properties)
  35. if compress_dimension:
  36. properties = props.compress_dimension(properties)
  37. selector = comma.join(self.selectors)
  38. properties = [newline + name + colon + value
  39. for name, value in self.properties]
  40. inner = ';'.join(properties)
  41. if len(properties) and not compress_whitespace:
  42. inner += ';'
  43. return selector + lbracket + inner + rbracket
  44. def __repr__(self): # pragma: nocover
  45. return '<Block "%s" properties=%d>' \
  46. % (', '.join(self.selectors), len(self.properties))
  47. def __str__(self):
  48. return self.generate_css()