summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEevee (Alex Munroe) <eevee.git@veekun.com>2013-08-09 13:31:21 -0700
committerEevee (Alex Munroe) <eevee.git@veekun.com>2013-08-09 13:31:21 -0700
commit2ef4196859ff4b436612125425c8cfb34eeb30d7 (patch)
tree97db210c6733f447abe27b3b863d21dbf88ec024
parent794f6d8ae57383272de0efb06cc9ea9d5940559c (diff)
downloadpyscss-2ef4196859ff4b436612125425c8cfb34eeb30d7.tar.gz
Clean up List use in Compass helpers and compiler.
-rw-r--r--scss/__init__.py9
-rw-r--r--scss/functions/compass/helpers.py42
-rw-r--r--scss/types.py6
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):