diff options
author | Eevee (Alex Munroe) <eevee.git@veekun.com> | 2013-08-09 13:31:21 -0700 |
---|---|---|
committer | Eevee (Alex Munroe) <eevee.git@veekun.com> | 2013-08-09 13:31:21 -0700 |
commit | 2ef4196859ff4b436612125425c8cfb34eeb30d7 (patch) | |
tree | 97db210c6733f447abe27b3b863d21dbf88ec024 | |
parent | 794f6d8ae57383272de0efb06cc9ea9d5940559c (diff) | |
download | pyscss-2ef4196859ff4b436612125425c8cfb34eeb30d7.tar.gz |
Clean up List use in Compass helpers and compiler.
-rw-r--r-- | scss/__init__.py | 9 | ||||
-rw-r--r-- | scss/functions/compass/helpers.py | 42 | ||||
-rw-r--r-- | scss/types.py | 6 |
3 files changed, 16 insertions, 41 deletions
diff --git a/scss/__init__.py b/scss/__init__.py index 85ca173..e95051f 100644 --- a/scss/__init__.py +++ b/scss/__init__.py @@ -69,7 +69,7 @@ from scss.expression import Calculator from scss.functions import ALL_BUILTINS_LIBRARY from scss.functions.compass.sprites import sprite_map from scss.rule import UnparsedBlock, SassRule -from scss.types import BooleanValue, ListValue, Null, NumberValue, StringValue +from scss.types import BooleanValue, List, Null, NumberValue, StringValue from scss.util import depar, dequote, normalize_var, split_params, to_str, profile, print_timing log = logging.getLogger(__name__) @@ -995,18 +995,17 @@ class Scss(object): """ Implements @each """ - var, _, name = block.argument.partition(' in ') + var, _, valuestring = block.argument.partition(' in ') calculator = Calculator(rule.namespace) - name = calculator.calculate(name) + values = calculator.calculate(valuestring) if not name: return - iterable = ListValue(name) var = var.strip() var = calculator.do_glob_math(var) var = normalize_var(var) - for v in iterable: + for v in List.from_maybe(values): inner_rule = rule.copy() inner_rule.namespace = inner_rule.namespace.derive() inner_rule.unparsed_contents = block.unparsed_contents diff --git a/scss/functions/compass/helpers.py b/scss/functions/compass/helpers.py index 6a864ed..861adab 100644 --- a/scss/functions/compass/helpers.py +++ b/scss/functions/compass/helpers.py @@ -79,15 +79,8 @@ def compact(*args): @register('reject') def reject(lst, *values): """Removes the given values from the list""" - if not isinstance(lst, List): - lst = List(lst) - - if len(values) == 1: - values = values[0] - if isinstance(values, (list, tuple, List)): - values = frozenset(values) - else: - values = frozenset([values]) + lst = List.from_maybe(lst) + values = frozenset(List.from_maybe_starargs(values)) ret = [] for item in lst: @@ -112,12 +105,7 @@ def first_value_of(lst): @register('-compass-list') def dash_compass_list(*args): - use_comma = False - if len(args) == 1 and isinstance(args[0], (list, tuple, List)): - args = args[0] - if isinstance(args, List): - use_comma = args.use_comma - return List(args, use_comma=use_comma) + return List.from_maybe_starargs(args) @register('-compass-space-list') @@ -150,14 +138,9 @@ def dash_compass_slice(lst, start_index, end_index=None): @register('prefixed') def prefixed(prefix, *args): to_fnct_str = 'to_' + to_str(prefix).replace('-', '_') - for arg in args: - if isinstance(arg, List): - for iarg in arg: - if hasattr(iarg, to_fnct_str): - return BooleanValue(True) - else: - if hasattr(arg, to_fnct_str): - return BooleanValue(True) + for arg in List.from_maybe_starargs(args): + if hasattr(arg, to_fnct_str): + return BooleanValue(True) return BooleanValue(False) @@ -380,10 +363,7 @@ OPPOSITE_POSITIONS = dict( ) def _position(opposite, positions): - if isinstance(positions, List): - positions = positions.value - else: - positions = [positions] + positions = List.from_maybe(positions) ret = [] for pos in positions: @@ -415,10 +395,7 @@ def _position(opposite, positions): warnings.warn("Can't find opposite for position %r" % (pos,)) ret.append(pos) - if len(ret) == 1: - return ret[0] - else: - return List(ret, use_comma=False) + return List(ret, use_comma=False).maybe() @register('position') @@ -482,8 +459,7 @@ def _font_url(path, only_path=False, cache_buster=True, inline=False): def _font_files(args, inline): - if len(args) == 1 and isinstance(args[0], (list, tuple, List)): - args = list(args[0]) + args = List.from_maybe_starargs(args) n = 0 params = [[], []] for arg in args: diff --git a/scss/types.py b/scss/types.py index 9fe0d8b..889cf49 100644 --- a/scss/types.py +++ b/scss/types.py @@ -449,7 +449,7 @@ class List(Value): return cls(values, use_comma=use_comma) @classmethod - def from_maybe_starargs(cls, args): + def from_maybe_starargs(cls, args, use_comma=True): """If `args` has one element which appears to be a list, return it. Otherwise, return a list as normal. @@ -461,9 +461,9 @@ class List(Value): if isinstance(args[0], cls): return args[0] elif isinstance(args[0], (list, tuple)): - return cls(args[0]) + return cls(args[0], use_comma=use_comma) - return cls(args) + return cls(args, use_comma=use_comma) @property def separator(self): |