diff --git a/libsass b/libsass index b28de012..82c49d88 160000 --- a/libsass +++ b/libsass @@ -1 +1 @@ -Subproject commit b28de01270a663b3e89427a18816732c4d573c1d +Subproject commit 82c49d88a57c29d579b69ea99451c9b1d20fcfd5 diff --git a/pysass.cpp b/pysass.cpp index c4748615..aeea61df 100644 --- a/pysass.cpp +++ b/pysass.cpp @@ -77,6 +77,8 @@ static PyObject* _to_py_value(const union Sass_Value* value) { size_t i = 0; PyObject* items = PyTuple_New(sass_list_get_length(value)); PyObject* separator = sass_comma; + int is_bracketed = sass_list_get_is_bracketed(value); + PyObject* bracketed = PyBool_FromLong(is_bracketed); switch (sass_list_get_separator(value)) { case SASS_COMMA: separator = sass_comma; @@ -96,7 +98,7 @@ static PyObject* _to_py_value(const union Sass_Value* value) { ); } retv = PyObject_CallMethod( - types_mod, "SassList", "OO", items, separator + types_mod, "SassList", "OOO", items, separator, bracketed ); break; } @@ -160,6 +162,7 @@ static union Sass_Value* _list_to_sass_value(PyObject* value) { Py_ssize_t i = 0; PyObject* items = PyObject_GetAttrString(value, "items"); PyObject* separator = PyObject_GetAttrString(value, "separator"); + PyObject* bracketed = PyObject_GetAttrString(value, "bracketed"); Sass_Separator sep = SASS_COMMA; if (separator == sass_comma) { sep = SASS_COMMA; @@ -168,7 +171,8 @@ static union Sass_Value* _list_to_sass_value(PyObject* value) { } else { assert(0); } - retv = sass_make_list(PyTuple_Size(items), sep); + int is_bracketed = bracketed == Py_True; + retv = sass_make_list(PyTuple_Size(items), sep, is_bracketed); for (i = 0; i < PyTuple_Size(items); i += 1) { sass_list_set_value( retv, i, _to_sass_value(PyTuple_GET_ITEM(items, i)) @@ -179,6 +183,7 @@ static union Sass_Value* _list_to_sass_value(PyObject* value) { Py_DECREF(sass_space); Py_DECREF(items); Py_DECREF(separator); + Py_DECREF(bracketed); return retv; } diff --git a/sass.py b/sass.py index d25a762a..2ce5b90f 100644 --- a/sass.py +++ b/sass.py @@ -694,12 +694,15 @@ def __new__(cls, r, g, b, a): SEPARATORS = frozenset((SASS_SEPARATOR_COMMA, SASS_SEPARATOR_SPACE)) -class SassList(collections.namedtuple('SassList', ('items', 'separator'))): +class SassList(collections.namedtuple( + 'SassList', ('items', 'separator', 'bracketed'), +)): - def __new__(cls, items, separator): + def __new__(cls, items, separator, bracketed=False): items = tuple(items) - assert separator in SEPARATORS - return super(SassList, cls).__new__(cls, items, separator) + assert separator in SEPARATORS, separator + assert isinstance(bracketed, bool), bracketed + return super(SassList, cls).__new__(cls, items, separator, bracketed) class SassError(collections.namedtuple('SassError', ('msg',))): diff --git a/sasstests.py b/sasstests.py index 8c68cc9f..440d448a 100644 --- a/sasstests.py +++ b/sasstests.py @@ -942,16 +942,12 @@ def test_color_conversion(self): assert type(color.a) is float, type(color.a) def test_sass_list_no_conversion(self): - lst = sass.SassList( - ('foo', 'bar'), sass.SASS_SEPARATOR_COMMA, - ) + lst = sass.SassList(('foo', 'bar'), sass.SASS_SEPARATOR_COMMA) assert type(lst.items) is tuple, type(lst.items) assert lst.separator is sass.SASS_SEPARATOR_COMMA, lst.separator def test_sass_list_conversion(self): - lst = sass.SassList( - ['foo', 'bar'], sass.SASS_SEPARATOR_SPACE, - ) + lst = sass.SassList(['foo', 'bar'], sass.SASS_SEPARATOR_SPACE) assert type(lst.items) is tuple, type(lst.items) assert lst.separator is sass.SASS_SEPARATOR_SPACE, lst.separator @@ -1025,6 +1021,12 @@ def returns_space_list(): return sass.SassList(('medium', 'none'), sass.SASS_SEPARATOR_SPACE) +def returns_bracketed_list(): + return sass.SassList( + ('hello', 'ohai'), sass.SASS_SEPARATOR_SPACE, bracketed=True, + ) + + def returns_py_dict(): return {'foo': 'bar'} @@ -1056,6 +1058,7 @@ def identity(x): sass.SassFunction('returns_color', (), returns_color), sass.SassFunction('returns_comma_list', (), returns_comma_list), sass.SassFunction('returns_space_list', (), returns_space_list), + sass.SassFunction('returns_bracketed_list', (), returns_bracketed_list), sass.SassFunction('returns_py_dict', (), returns_py_dict), sass.SassFunction('returns_map', (), returns_map), sass.SassFunction('identity', ('$x',), identity), @@ -1075,6 +1078,7 @@ def identity(x): 'returns_color': returns_color, 'returns_comma_list': returns_comma_list, 'returns_space_list': returns_space_list, + 'returns_bracketed_list': returns_bracketed_list, 'returns_py_dict': returns_py_dict, 'returns_map': returns_map, 'identity': identity, @@ -1094,6 +1098,7 @@ def identity(x): returns_color, returns_comma_list, returns_space_list, + returns_bracketed_list, returns_py_dict, returns_map, identity, @@ -1258,6 +1263,12 @@ def test_space_list(self): 'a{border-right:medium none}\n', ) + def test_bracketed_list(self): + self.assertEqual( + compile_with_func('a { content: returns_bracketed_list(); }'), + 'a{content:[hello ohai]}\n' + ) + def test_py_dict(self): self.assertEqual( compile_with_func( @@ -1328,6 +1339,14 @@ def test_identity_space_list(self): 'a{border-right:medium none}\n', ) + def test_identity_bracketed_list(self): + self.assertEqual( + compile_with_func( + 'a { content: identity(returns_bracketed_list()); }', + ), + 'a{content:[hello ohai]}\n', + ) + def test_identity_py_dict(self): self.assertEqual( compile_with_func(
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: