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 __author__ = '$LastChangedBy: cthedot $'
8 __date__ = '$LastChangedDate: 2007-09-01 15:55:42 +0200 (Sa, 01 Sep 2007) $'
9 __version__ = '$LastChangedRevision: 300 $'
10
11
12 MACROS = {
13 'ident': r'[-]?{nmstart}{nmchar}*',
14 'name': r'{nmchar}+',
15 'nmstart': r'[_a-zA-Z]|{nonascii}|{escape}',
16 'nonascii': r'[^\0-\177]',
17 'unicode': r'\\[0-9a-f]{1,6}{wc}?',
18 'escape': r'{unicode}|\\[ -~\200-\777]',
19
20 'nmchar': r'[-_a-zA-Z0-9]|{nonascii}|{escape}',
21
22
23 'num': r'-?[0-9]*\.[0-9]+|[0-9]+',
24 'string': r'''\'({stringchar}|\")*\'|\"({stringchar}|\')*\"''',
25 'stringchar': r'{urlchar}| |\\{nl}',
26 'urlchar': r'[\x09\x21\x23-\x26\x27-\x7E]|{nonascii}|{escape}',
27
28 'nl': r'\n|\r\n|\r|\f',
29 'w': r'{wc}*',
30 'wc': r'\t|\r|\n|\f|\x20'
31 }
32
33
34 PRODUCTIONS = [
35 ('BOM', r'\xFEFF'),
36 ('URI', r'url\({w}({string}|{urlchar}*){w}\)'),
37 ('FUNCTION', r'{ident}\('),
38 ('ATKEYWORD', r'\@{ident}'),
39 ('IDENT', r'{ident}'),
40 ('STRING', r'{string}'),
41 ('HASH', r'\#{name}'),
42 ('PERCENTAGE', r'{num}\%'),
43 ('DIMENSION', r'{num}{ident}'),
44 ('NUMBER', r'{num}'),
45
46 ('UNICODE-RANGE', ur'[0-9A-F?]{1,6}(\-[0-9A-F]{1,6})?'),
47 ('CDO', r'\<\!\-\-'),
48 ('CDC', r'\-\-\>'),
49 ('S', r'{wc}+'),
50 ('INCLUDES', '\~\='),
51 ('DASHMATCH', r'\|\='),
52 ('PREFIXMATCH', r'\^\='),
53 ('SUFFIXMATCH', r'\$\='),
54 ('SUBSTRINGMATCH', r'\*\='),
55 ('COMMENT', r'\/\*[^*]*\*+([^/][^*]*\*+)*\/'),
56 ('CHAR', r'[^"\']'),
57 ]
58
60 "has attributes for all PRODUCTIONS"
61 pass
62
63 for i, t in enumerate(PRODUCTIONS):
64 setattr(CSSProductions, t[0].replace('-', '_'), t[0])
65