docs: def stylesheet_declarations(string, is_merc=False, scale=1):
      """ Parse a string representing a stylesheet into a list of declarations.
      
          Required boolean is_merc indicates whether the projection should
          be interpreted as spherical mercator, so we know what to do with
          zoom/scale-denominator in parse_rule().
      """
      # everything is display: map by default
      display_map = Declaration(Selector(SelectorElement(['*'], [])),
                                Property('display'), Value('map', False),
                                (False, (0, 0, 0), (0, 0)))
      
      declarations = [display_map]
  
      tokens = cssTokenizer().tokenize(string)
      variables = {}
      
      while True:
          try:
              for declaration in parse_rule(tokens, variables, [], [], is_merc):
                  if scale != 1:
                      declaration.scaleBy(scale)
              
                  declarations.append(declaration)
          except StopIteration:
              break
      
      # sort by a css-like method
      return sorted(declarations, key=operator.attrgetter('sort_key'))