diff options
author | Eevee (Lexy Munroe) <eevee.git@veekun.com> | 2016-06-08 17:59:57 -0700 |
---|---|---|
committer | Eevee (Lexy Munroe) <eevee.git@veekun.com> | 2016-06-08 17:59:57 -0700 |
commit | efcbde372e9d6ddfd429a463f31cf6f37fa22d9a (patch) | |
tree | a5b953a9a41775436c2d8e340a61c197b2f8584d | |
parent | 791b05d7727006cd5a1e23a87a335b342c68540a (diff) | |
download | pyscss-efcbde372e9d6ddfd429a463f31cf6f37fa22d9a.tar.gz |
Support trailing combinators in selectors. Fixes #351
-rw-r--r-- | scss/selector.py | 24 | ||||
-rw-r--r-- | scss/tests/files/bugs/trailing-combinators.css | 11 | ||||
-rw-r--r-- | scss/tests/files/bugs/trailing-combinators.scss | 18 |
3 files changed, 48 insertions, 5 deletions
diff --git a/scss/selector.py b/scss/selector.py index e1f8994..8a6ecdf 100644 --- a/scss/selector.py +++ b/scss/selector.py @@ -91,6 +91,15 @@ class SimpleSelector(object): For lack of a better name, each of the individual parts is merely called a "token". + + Note that it's possible to have zero tokens. This isn't legal CSS, but + it's perfectly legal Sass, since you might nest blocks like so: + + body > { + div { + ... + } + } """ def __init__(self, combinator, tokens): self.combinator = combinator @@ -250,10 +259,12 @@ class SimpleSelector(object): def render(self): # TODO fail if there are no tokens, or if one is a placeholder? rendered = ''.join(self.tokens) - if self.combinator != ' ': - rendered = ' '.join((self.combinator, rendered)) - - return rendered + if self.combinator == ' ': + return rendered + elif rendered: + return self.combinator + ' ' + rendered + else: + return self.combinator class Selector(object): @@ -287,6 +298,10 @@ class Selector(object): def promote_selector(): promote_simple() + if pending['combinator'] != ' ': + pending['simples'].append( + SimpleSelector(pending['combinator'], [])) + pending['combinator'] = ' ' if pending['simples']: ret.append(cls(pending['simples'])) pending['simples'] = [] @@ -310,7 +325,6 @@ class Selector(object): if token == ',': # End current selector - # TODO what about "+ ,"? what do i even do with that promote_selector() elif token in ' +>~': # End current simple selector diff --git a/scss/tests/files/bugs/trailing-combinators.css b/scss/tests/files/bugs/trailing-combinators.css new file mode 100644 index 0000000..ee1ddda --- /dev/null +++ b/scss/tests/files/bugs/trailing-combinators.css @@ -0,0 +1,11 @@ +div ~ p, div ~ blockquote { + background-color: blue; +} + +div > p, div > blockquote { + background-color: blue; +} + +div + p, div + blockquote { + background-color: blue; +} diff --git a/scss/tests/files/bugs/trailing-combinators.scss b/scss/tests/files/bugs/trailing-combinators.scss new file mode 100644 index 0000000..1e0b0d9 --- /dev/null +++ b/scss/tests/files/bugs/trailing-combinators.scss @@ -0,0 +1,18 @@ +div ~ { + p, + blockquote { + background-color: blue; + } +} +div > { + p, + blockquote { + background-color: blue; + } +} +div + { + p, + blockquote { + background-color: blue; + } +} |