CSS 3 Modules¶
Selectors 3¶
On RuleSet.selector
, the as_css()
method
can be used to serialize a selector back to an Unicode string.
>>> import tinycss
>>> stylesheet = tinycss.make_parser().parse_stylesheet(
... 'div.error, #root > section:first-letter { color: red }')
>>> selector_string = stylesheet.rules[0].selector.as_css()
>>> selector_string
'div.error, #root > section:first-letter'
This string can be parsed by cssselect. The parsed objects have information about pseudo-elements and selector specificity.
>>> import cssselect
>>> selectors = cssselect.parse(selector_string)
>>> [s.specificity() for s in selectors]
[(0, 1, 1), (1, 0, 2)]
>>> [s.pseudo_element for s in selectors]
[None, 'first-letter']
These objects can in turn be translated to XPath expressions. Note that the translation ignores pseudo-elements, you have to account for them somehow or reject selectors with pseudo-elements.
>>> xpath = cssselect.HTMLTranslator().selector_to_xpath(selectors[1])
>>> xpath
"descendant-or-self::*[@id = 'root']/section"
Finally, the XPath expressions can be used with lxml to find the matching elements.
>>> from lxml import etree
>>> compiled_selector = etree.XPath(xpath)
>>> document = etree.fromstring('''<section id="root">
... <section id="head">Title</section>
... <section id="content">
... Lorem <section id="sub-section">ipsum</section>
... </section>
... </section>''')
>>> [el.get('id') for el in compiled_selector(document)]
['head', 'content']
Find more details in the cssselect documentation.
Color 3¶
This module implements parsing for the <color> values, as defined in CSS 3 Color.
The (deprecated) CSS2 system colors are not supported, but you can
easily test for them if you want as they are simple IDENT
tokens.
For example:
if token.type == 'IDENT' and token.value == 'ButtonText':
return ...
All other values types are supported:
Basic, extended (X11) and transparent color keywords;
3-digit and 6-digit hexadecimal notations;
rgb()
,rgba()
,hsl()
andhsla()
functional notations.currentColor
This module does not integrate with a parser class. Instead, it provides
a function that can parse tokens as found in css21.Declaration.value
,
for example.
- tinycss.color3.parse_color(token)[source]¶
Parse single token as a color value.
- Parameters:
token – A single
Token
orContainerToken
, as found eg. in a property value.- Returns:
None
, if the token is not a valid CSS 3 color value. (No exception is raised.)For the currentColor keyword: the string
'currentColor'
Every other values (including keywords, HSL and HSLA) is converted to RGBA and returned as an
RGBA
object (a 4-tuple with attribute access). The alpha channel is clipped to [0, 1], but R, G, or B can be out of range (eg.rgb(-51, 306, 0)
is represented as(-.2, 1.2, 0, 1)
.)
- tinycss.color3.parse_color_string(css_string)[source]¶
Parse a CSS string as a color value.
This is a convenience wrapper around
parse_color()
in case you have a string that is not from a CSS stylesheet.- Parameters:
css_string – An unicode string in CSS syntax.
- Returns:
Same as
parse_color()
.
Paged Media 3¶
- class tinycss.page3.CSSPage3Parser[source]¶
Extend
CSS21Parser
for CSS 3 Paged Media syntax.Compared to CSS 2.1, the
at_rules
andselector
attributes ofPageRule
objects are modified:at_rules
is not always empty, it is a list ofMarginRule
objects.selector
, instead of a single string, is a tuple of the page name and the pseudo class. Each of these may be aNone
or a string.
CSS
Parsed selectors
@page {} @page :first {} @page chapter {} @page table:right {}
(None, None) (None, 'first') ('chapter', None) ('table', 'right')
- class tinycss.page3.MarginRule(at_keyword, declarations, line, column)[source]¶
A parsed at-rule for margin box.
- at_keyword¶
One of the 16 following strings:
@top-left-corner
@top-left
@top-center
@top-right
@top-right-corner
@bottom-left-corner
@bottom-left
@bottom-center
@bottom-right
@bottom-right-corner
@left-top
@left-middle
@left-bottom
@right-top
@right-middle
@right-bottom
- declarations¶
A list of
Declaration
objects.
- line¶
Source line where this was read.
- column¶
Source column where this was read.
Fonts 3¶
- class tinycss.fonts3.CSSFonts3Parser[source]¶
Extend
CSS21Parser
for CSS 3 Fonts syntax.
- class tinycss.fonts3.FontFaceRule(at_keyword, declarations, line, column)[source]¶
A parsed at-rule for font faces.
- at_keyword¶
Always
'@font-face'
.
- declarations¶
A list of
Declaration
objects.
- line¶
Source line where this was read.
- column¶
Source column where this was read.
- class tinycss.fonts3.FontFeatureValuesRule(at_keyword, at_rules, family_names, line, column)[source]¶
A parsed at-rule for font feature values.
- at_keyword¶
Always
'@font-feature-values'
.
- line¶
Source line where this was read.
- column¶
Source column where this was read.
- at_rules¶
The list of parsed at-rules inside the @font-feature-values block, in source order.
- family_names¶
A list of strings representing font families.
- class tinycss.fonts3.FontFeatureRule(at_keyword, declarations, line, column)[source]¶
A parsed at-rule for font features.
- at_keyword¶
One of the 16 following strings:
@stylistic
@styleset
@character-variant
@swash
@ornaments
@annotation
- declarations¶
A list of
Declaration
objects.
- line¶
Source line where this was read.
- column¶
Source column where this was read.
Other CSS modules¶
To add support for new CSS syntax, see Extending the parser.