1 """productions for CSS 3
2
3 CSS3_MACROS and CSS3_PRODUCTIONS are from http://www.w3.org/TR/css3-syntax
4 """
5 __all__ = ['CSSProductions', 'MACROS', 'PRODUCTIONS']
6 __docformat__ = 'restructuredtext'
7 __version__ = '$Id: css3productions.py 1116 2008-03-05 13:52:23Z cthedot $'
8
9
10 MACROS = {
11 'ident': r'[-]?{nmstart}{nmchar}*',
12 'name': r'{nmchar}+',
13 'nmstart': r'[_a-zA-Z]|{nonascii}|{escape}',
14 'nonascii': r'[^\0-\177]',
15 'unicode': r'\\[0-9a-f]{1,6}{wc}?',
16 'escape': r'{unicode}|\\[ -~\200-\777]',
17
18 'nmchar': r'[-_a-zA-Z0-9]|{nonascii}|{escape}',
19
20
21 'num': r'-?[0-9]*\.[0-9]+|[0-9]+',
22 'string': r'''\'({stringchar}|\")*\'|\"({stringchar}|\')*\"''',
23 'stringchar': r'{urlchar}| |\\{nl}',
24 'urlchar': r'[\x09\x21\x23-\x26\x27-\x7E]|{nonascii}|{escape}',
25
26 'nl': r'\n|\r\n|\r|\f',
27 'w': r'{wc}*',
28 'wc': r'\t|\r|\n|\f|\x20'
29 }
30
31
32 PRODUCTIONS = [
33 ('BOM', r'\xFEFF'),
34 ('URI', r'url\({w}({string}|{urlchar}*){w}\)'),
35 ('FUNCTION', r'{ident}\('),
36 ('ATKEYWORD', r'\@{ident}'),
37 ('IDENT', r'{ident}'),
38 ('STRING', r'{string}'),
39 ('HASH', r'\#{name}'),
40 ('PERCENTAGE', r'{num}\%'),
41 ('DIMENSION', r'{num}{ident}'),
42 ('NUMBER', r'{num}'),
43
44 ('UNICODE-RANGE', ur'[0-9A-F?]{1,6}(\-[0-9A-F]{1,6})?'),
45 ('CDO', r'\<\!\-\-'),
46 ('CDC', r'\-\-\>'),
47 ('S', r'{wc}+'),
48 ('INCLUDES', '\~\='),
49 ('DASHMATCH', r'\|\='),
50 ('PREFIXMATCH', r'\^\='),
51 ('SUFFIXMATCH', r'\$\='),
52 ('SUBSTRINGMATCH', r'\*\='),
53 ('COMMENT', r'\/\*[^*]*\*+([^/][^*]*\*+)*\/'),
54 ('CHAR', r'[^"\']'),
55 ]
56
58 "has attributes for all PRODUCTIONS"
59 pass
60
61 for i, t in enumerate(PRODUCTIONS):
62 setattr(CSSProductions, t[0].replace('-', '_'), t[0])
63