diff options
| author | scoder <none@none> | 2008-06-20 09:52:39 +0200 |
|---|---|---|
| committer | scoder <none@none> | 2008-06-20 09:52:39 +0200 |
| commit | 19c8cc0f31519004866b5fac35a85c7157c05a57 (patch) | |
| tree | 14e6189fffcf7ebd1ed5bb305a0feba56f22aa91 /src/lxml | |
| parent | 3bc3fbd318dc2f25389df94b5a84326af1c1497e (diff) | |
| download | python-lxml-19c8cc0f31519004866b5fac35a85c7157c05a57.tar.gz | |
[svn r3835] r4520@delle: sbehnel | 2008-06-20 09:48:39 +0200
CSS selector parser accidentally merged non-adjacent classes
--HG--
branch : trunk
Diffstat (limited to 'src/lxml')
| -rw-r--r-- | src/lxml/cssselect.py | 7 | ||||
| -rw-r--r-- | src/lxml/tests/test_css.py | 8 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/lxml/cssselect.py b/src/lxml/cssselect.py index 25d2d44b..9e57843a 100644 --- a/src/lxml/cssselect.py +++ b/src/lxml/cssselect.py @@ -738,6 +738,8 @@ def parse_simple_selector(stream): result = Pseudo(result, type, ident) continue else: + if peek == ' ': + stream.next() break # FIXME: not sure what "negation" is return result @@ -823,7 +825,10 @@ def tokenize(s): while 1: match = _whitespace_re.match(s, pos=pos) if match: + preceding_whitespace_pos = pos pos = match.end() + else: + preceding_whitespace_pos = 0 if pos >= len(s): return match = _count_re.match(s, pos=pos) @@ -839,6 +844,8 @@ def tokenize(s): pos += 2 continue if c in '>+~,.*=[]()|:#': + if c in '.#' and preceding_whitespace_pos > 0: + yield Token(' ', preceding_whitespace_pos) yield Token(c, pos) pos += 1 continue diff --git a/src/lxml/tests/test_css.py b/src/lxml/tests/test_css.py index 608b87e8..a3cfdc76 100644 --- a/src/lxml/tests/test_css.py +++ b/src/lxml/tests/test_css.py @@ -46,6 +46,14 @@ class CSSTestCase(HelperTestCase): ('div.dialog', 51), ('div .dialog', 51), ('div.character, div.dialog', 99), + ('div.direction.dialog', 0), + ('div.dialog.direction', 0), + ('div.dialog.scene', 1), + ('div.scene.scene', 1), + ('div.scene .scene', 0), + ('div.direction .dialog ', 0), + ('div .dialog .direction', 4), + ('div.dialog .dialog .direction', 4), ('#speech5', 1), ('div#speech5', 1), ('div #speech5', 1), |
