diff --git a/libsass b/libsass index 6de5050d..60f83915 160000 --- a/libsass +++ b/libsass @@ -1 +1 @@ -Subproject commit 6de5050d11a1789d9922eb24e2925047ecbb499b +Subproject commit 60f839158eff1f1bb84cb44f0f0c4bce3ed86a6d diff --git a/pysass.cpp b/pysass.cpp index e4f284f1..5cbf6fc7 100644 --- a/pysass.cpp +++ b/pysass.cpp @@ -68,6 +68,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; @@ -87,7 +89,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; } @@ -151,6 +153,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; @@ -159,7 +162,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)) @@ -170,6 +174,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 cce296cc..54047ee9 100644 --- a/sass.py +++ b/sass.py @@ -702,12 +702,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 7ff2b17e..c2c807a8 100644 --- a/sasstests.py +++ b/sasstests.py @@ -921,16 +921,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 @@ -1004,6 +1000,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'} @@ -1035,6 +1037,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), @@ -1054,6 +1057,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, @@ -1073,6 +1077,7 @@ def identity(x): returns_color, returns_comma_list, returns_space_list, + returns_bracketed_list, returns_py_dict, returns_map, identity, @@ -1237,6 +1242,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( @@ -1307,6 +1318,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( pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

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:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy