mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 18:24:30 -04:00
Micro-optimization
Also dont use plain asserts in tests
This commit is contained in:
parent
2d41f863b7
commit
e25d26a628
@ -414,6 +414,10 @@ def parse_selector(stream):
|
|||||||
return result, pseudo_element
|
return result, pseudo_element
|
||||||
|
|
||||||
|
|
||||||
|
special_pseudo_elements = (
|
||||||
|
'first-line', 'first-letter', 'before', 'after')
|
||||||
|
|
||||||
|
|
||||||
def parse_simple_selector(stream, inside_negation=False):
|
def parse_simple_selector(stream, inside_negation=False):
|
||||||
stream.skip_whitespace()
|
stream.skip_whitespace()
|
||||||
selector_start = len(stream.used)
|
selector_start = len(stream.used)
|
||||||
@ -462,8 +466,7 @@ def parse_simple_selector(stream, inside_negation=False):
|
|||||||
pseudo_element, parse_arguments(stream))
|
pseudo_element, parse_arguments(stream))
|
||||||
continue
|
continue
|
||||||
ident = stream.next_ident()
|
ident = stream.next_ident()
|
||||||
if ident.lower() in ('first-line', 'first-letter',
|
if ident.lower() in special_pseudo_elements:
|
||||||
'before', 'after'):
|
|
||||||
# Special case: CSS 2.1 pseudo-elements can have a single ':'
|
# Special case: CSS 2.1 pseudo-elements can have a single ':'
|
||||||
# Any new pseudo-element must have two.
|
# Any new pseudo-element must have two.
|
||||||
pseudo_element = unicode_type(ident)
|
pseudo_element = unicode_type(ident)
|
||||||
|
@ -510,32 +510,32 @@ by William Shakespeare
|
|||||||
assert len(result) == 1
|
assert len(result) == 1
|
||||||
return result[0]
|
return result[0]
|
||||||
|
|
||||||
assert parse_one('foo') == ('Element[foo]', None)
|
self.ae(parse_one('foo'), ('Element[foo]', None))
|
||||||
assert parse_one('*') == ('Element[*]', None)
|
self.ae(parse_one('*'), ('Element[*]', None))
|
||||||
assert parse_one(':empty') == ('Pseudo[Element[*]:empty]', None)
|
self.ae(parse_one(':empty'), ('Pseudo[Element[*]:empty]', None))
|
||||||
|
|
||||||
# Special cases for CSS 2.1 pseudo-elements
|
# Special cases for CSS 2.1 pseudo-elements
|
||||||
assert parse_one(':BEfore') == ('Element[*]', 'before')
|
self.ae(parse_one(':BEfore'), ('Element[*]', 'before'))
|
||||||
assert parse_one(':aftER') == ('Element[*]', 'after')
|
self.ae(parse_one(':aftER'), ('Element[*]', 'after'))
|
||||||
assert parse_one(':First-Line') == ('Element[*]', 'first-line')
|
self.ae(parse_one(':First-Line'), ('Element[*]', 'first-line'))
|
||||||
assert parse_one(':First-Letter') == ('Element[*]', 'first-letter')
|
self.ae(parse_one(':First-Letter'), ('Element[*]', 'first-letter'))
|
||||||
|
|
||||||
assert parse_one('::befoRE') == ('Element[*]', 'before')
|
self.ae(parse_one('::befoRE'), ('Element[*]', 'before'))
|
||||||
assert parse_one('::AFter') == ('Element[*]', 'after')
|
self.ae(parse_one('::AFter'), ('Element[*]', 'after'))
|
||||||
assert parse_one('::firsT-linE') == ('Element[*]', 'first-line')
|
self.ae(parse_one('::firsT-linE'), ('Element[*]', 'first-line'))
|
||||||
assert parse_one('::firsT-letteR') == ('Element[*]', 'first-letter')
|
self.ae(parse_one('::firsT-letteR'), ('Element[*]', 'first-letter'))
|
||||||
|
|
||||||
assert parse_one('::text-content') == ('Element[*]', 'text-content')
|
self.ae(parse_one('::text-content'), ('Element[*]', 'text-content'))
|
||||||
self.ae(parse_one('::attr(name)'), (
|
self.ae(parse_one('::attr(name)'), (
|
||||||
"Element[*]", "FunctionalPseudoElement[::attr(['name'])]"))
|
"Element[*]", "FunctionalPseudoElement[::attr(['name'])]"))
|
||||||
|
|
||||||
assert parse_one('::Selection') == ('Element[*]', 'selection')
|
self.ae(parse_one('::Selection'), ('Element[*]', 'selection'))
|
||||||
assert parse_one('foo:after') == ('Element[foo]', 'after')
|
self.ae(parse_one('foo:after'), ('Element[foo]', 'after'))
|
||||||
assert parse_one('foo::selection') == ('Element[foo]', 'selection')
|
self.ae(parse_one('foo::selection'), ('Element[foo]', 'selection'))
|
||||||
assert parse_one('lorem#ipsum ~ a#b.c[href]:empty::selection') == (
|
self.ae(parse_one('lorem#ipsum ~ a#b.c[href]:empty::selection'), (
|
||||||
'CombinedSelector[Hash[Element[lorem]#ipsum] ~ '
|
'CombinedSelector[Hash[Element[lorem]#ipsum] ~ '
|
||||||
'Pseudo[Attrib[Class[Hash[Element[a]#b].c][href]]:empty]]',
|
'Pseudo[Attrib[Class[Hash[Element[a]#b].c][href]]:empty]]',
|
||||||
'selection')
|
'selection'))
|
||||||
|
|
||||||
parse_pseudo('foo:before, bar, baz:after') == [
|
parse_pseudo('foo:before, bar, baz:after') == [
|
||||||
('Element[foo]', 'before'),
|
('Element[foo]', 'before'),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user