summaryrefslogtreecommitdiff
path: root/src/lxml
diff options
context:
space:
mode:
authorscoder <none@none>2008-06-20 09:52:39 +0200
committerscoder <none@none>2008-06-20 09:52:39 +0200
commit19c8cc0f31519004866b5fac35a85c7157c05a57 (patch)
tree14e6189fffcf7ebd1ed5bb305a0feba56f22aa91 /src/lxml
parent3bc3fbd318dc2f25389df94b5a84326af1c1497e (diff)
downloadpython-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.py7
-rw-r--r--src/lxml/tests/test_css.py8
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),