1 """productions for CSS 2.1
2
3 CSS2_1_MACROS and CSS2_1_PRODUCTIONS are from both
4 http://www.w3.org/TR/CSS21/grammar.html and
5 http://www.w3.org/TR/css3-syntax/#grammar0
6
7
8 """
9 __all__ = ['CSSProductions', 'MACROS', 'PRODUCTIONS']
10 __docformat__ = 'restructuredtext'
11 __author__ = '$LastChangedBy: cthedot $'
12 __date__ = '$LastChangedDate: 2007-09-01 15:55:42 +0200 (Sa, 01 Sep 2007) $'
13 __version__ = '$LastChangedRevision: 300 $'
14
15
16 MACROS = {
17 'h': r'[0-9a-f]',
18
19 'nonascii': r'[^\0-\177]',
20 'unicode': r'\\{h}{1,6}(\r\n|[ \t\r\n\f])?',
21
22 'escape': r'{unicode}|\\[^\r\n\f0-9a-f]',
23 'nmstart': r'[_a-zA-Z]|{nonascii}|{escape}',
24 'nmchar': r'[_a-zA-Z0-9-]|{nonascii}|{escape}',
25 'string1': r'\"([^\n\r\f\\"]|\\{nl}|{escape})*\"',
26 'string2': r"\'([^\n\r\f\\']|\\{nl}|{escape})*\'",
27 'invalid1': r'\"([^\n\r\f\\"]|\\{nl}|{escape})*',
28 'invalid2': r"\'([^\n\r\f\\']|\\{nl}|{escape})*",
29 'comment': r'\/\*[^*]*\*+([^/*][^*]*\*+)*\/',
30
31 'ident': r'[-]?{nmstart}{nmchar}*',
32 'name': r'{nmchar}+',
33
34 'num': r'-?[0-9]*\.[0-9]+|[0-9]+',
35 'string': r'{string1}|{string2}',
36 'invalid': r'{invalid1}|{invalid2}',
37 'url': r'([!#$%&*-~]|{nonascii}|{escape})*',
38 's': r'[ \t\r\n\f]+',
39 'w': r'{s}?',
40 'nl': r'\n|\r\n|\r|\f',
41 'range': r'\?{1,6}|{h}(\?{0,5}|{h}(\?{0,4}|{h}(\?{0,3}|{h}(\?{0,2}|{h}(\??|{h})))))',
42
43 'A': r'a|\\0{0,4}(41|61)(\r\n|[ \t\r\n\f])?',
44 'C': r'c|\\0{0,4}(43|63)(\r\n|[ \t\r\n\f])?',
45 'D': r'd|\\0{0,4}(44|64)(\r\n|[ \t\r\n\f])?',
46 'E': r'e|\\0{0,4}(45|65)(\r\n|[ \t\r\n\f])?',
47 'F': r'f|\\0{0,4}(46|66)(\r\n|[ \t\r\n\f])?',
48 'G': r'g|\\0{0,4}(47|67)(\r\n|[ \t\r\n\f])?|\\g',
49 'H': r'h|\\0{0,4}(48|68)(\r\n|[ \t\r\n\f])?|\\h',
50 'I': r'i|\\0{0,4}(49|69)(\r\n|[ \t\r\n\f])?|\\i',
51 'K': r'k|\\0{0,4}(4b|6b)(\r\n|[ \t\r\n\f])?|\\k',
52 'M': r'm|\\0{0,4}(4d|6d)(\r\n|[ \t\r\n\f])?|\\m',
53 'N': r'n|\\0{0,4}(4e|6e)(\r\n|[ \t\r\n\f])?|\\n',
54 'O': r'o|\\0{0,4}(51|71)(\r\n|[ \t\r\n\f])?|\\o',
55 'P': r'p|\\0{0,4}(50|70)(\r\n|[ \t\r\n\f])?|\\p',
56 'R': r'r|\\0{0,4}(52|72)(\r\n|[ \t\r\n\f])?|\\r',
57 'S': r's|\\0{0,4}(53|73)(\r\n|[ \t\r\n\f])?|\\s',
58 'T': r't|\\0{0,4}(54|74)(\r\n|[ \t\r\n\f])?|\\t',
59 'X': r'x|\\0{0,4}(58|78)(\r\n|[ \t\r\n\f])?|\\x',
60 'Z': r'z|\\0{0,4}(5a|7a)(\r\n|[ \t\r\n\f])?|\\z',
61 }
62
63 PRODUCTIONS = [
64 ('URI', r'url\({w}{string}{w}\)'),
65 ('URI', r'url\({w}{url}{w}\)'),
66 ('FUNCTION', r'{ident}\('),
67
68 ('IMPORT_SYM', r'@{I}{M}{P}{O}{R}{T}'),
69 ('PAGE_SYM', r'@{P}{A}{G}{E}'),
70 ('MEDIA_SYM', r'@{M}{E}{D}{I}{A}'),
71 ('FONT_FACE_SYM', r'@{F}{O}{N}{T}\-{F}{A}{C}{E}'),
72
73
74 ('CHARSET_SYM', r'@charset '),
75
76 ('NAMESPACE_SYM', r'@{N}{A}{M}{E}{S}{P}{A}{C}{E}'),
77
78
79 ('ATKEYWORD', r'\@{ident}'),
80
81 ('IDENT', r'{ident}'),
82 ('STRING', r'{string}'),
83 ('INVALID', r'{invalid}'),
84 ('HASH', r'\#{name}'),
85 ('PERCENTAGE', r'{num}%'),
86 ('LENGTH', r'{num}{E}{M}'),
87 ('LENGTH', r'{num}{E}{X}'),
88 ('LENGTH', r'{num}{P}{X}'),
89 ('LENGTH', r'{num}{C}{M}'),
90 ('LENGTH', r'{num}{M}{M}'),
91 ('LENGTH', r'{num}{I}{N}'),
92 ('LENGTH', r'{num}{P}{T}'),
93 ('LENGTH', r'{num}{P}{C}'),
94 ('ANGLE', r'{num}{D}{E}{G}'),
95 ('ANGLE', r'{num}{R}{A}{D}'),
96 ('ANGLE', r'{num}{G}{R}{A}{D}'),
97 ('TIME', r'{num}{M}{S}'),
98 ('TIME', r'{num}{S}'),
99 ('FREQ', r'{num}{H}{Z}'),
100 ('FREQ', r'{num}{K}{H}{Z}'),
101 ('DIMEN', r'{num}{ident}'),
102 ('NUMBER', r'{num}'),
103
104
105
106 ('UNICODE-RANGE', r'[0-9A-F?]{1,6}(\-[0-9A-F]{1,6})?'),
107 ('CDO', r'\<\!\-\-'),
108 ('CDC', r'\-\-\>'),
109 ('S', r'{s}'),
110
111
112
113
114 ('INCLUDES', r'\~\='),
115 ('DASHMATCH', r'\|\='),
116 ('LBRACE', r'\{'),
117 ('PLUS', r'\+'),
118 ('GREATER', r'\>'),
119 ('COMMA', r'\,'),
120 ('IMPORTANT_SYM', r'\!({w}|{comment})*{I}{M}{P}{O}{R}{T}{A}{N}{T}'),
121 ('COMMENT', '\/\*[^*]*\*+([^/][^*]*\*+)*\/'),
122 ('CLASS', r'\.'),
123
124
125 ('CHAR', r'[^"\']'),
126 ]
127
130 for i, t in enumerate(PRODUCTIONS):
131 setattr(CSSProductions, t[0].replace('-', '_'), t[0])
132