gvsig-scripting / org.gvsig.scripting / trunk / org.gvsig.scripting / org.gvsig.scripting.app / org.gvsig.scripting.app.mainplugin / src / main / resources-plugin / scripting / lib / cssutils / css2productions.py @ 475
History | View | Annotate | Download (5.96 KB)
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 |
__version__ = '$Id$'
|
12 |
|
13 |
# option case-insensitive
|
14 |
MACROS = { |
15 |
'h': r'[0-9a-f]', |
16 |
#'nonascii': r'[\200-\377]',
|
17 |
'nonascii': r'[^\0-\177]', # CSS3 |
18 |
'unicode': r'\\{h}{1,6}(\r\n|[ \t\r\n\f])?', |
19 |
|
20 |
'escape': r'{unicode}|\\[^\r\n\f0-9a-f]', |
21 |
'nmstart': r'[_a-zA-Z]|{nonascii}|{escape}', |
22 |
'nmchar': r'[_a-zA-Z0-9-]|{nonascii}|{escape}', |
23 |
'string1': r'\"([^\n\r\f\\"]|\\{nl}|{escape})*\"', |
24 |
'string2': r"\'([^\n\r\f\\']|\\{nl}|{escape})*\'", |
25 |
'invalid1': r'\"([^\n\r\f\\"]|\\{nl}|{escape})*', |
26 |
'invalid2': r"\'([^\n\r\f\\']|\\{nl}|{escape})*", |
27 |
'comment': r'\/\*[^*]*\*+([^/*][^*]*\*+)*\/', |
28 |
# CSS list 080725 19:43
|
29 |
# \/\*([^*\\]|{escape})*\*+(([^/*\\]|{escape})[^*]*\*+)*\/
|
30 |
|
31 |
'ident': r'[-]?{nmstart}{nmchar}*', |
32 |
'name': r'{nmchar}+', |
33 |
# CHANGED TO SPEC: added "-?"
|
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}\)'), #"url("{w}{string}{w}")" {return URI;} |
65 |
('URI', r'url\({w}{url}{w}\)'), #"url("{w}{url}{w}")" {return URI;} |
66 |
('FUNCTION', r'{ident}\('), #{ident}"(" {return FUNCTION;} |
67 |
|
68 |
('IMPORT_SYM', r'@{I}{M}{P}{O}{R}{T}'), #"@import" {return IMPORT_SYM;} |
69 |
('PAGE_SYM', r'@{P}{A}{G}{E}'), #"@page" {return PAGE_SYM;} |
70 |
('MEDIA_SYM', r'@{M}{E}{D}{I}{A}'), #"@media" {return MEDIA_SYM;} |
71 |
('FONT_FACE_SYM', r'@{F}{O}{N}{T}\-{F}{A}{C}{E}'), #"@font-face" {return FONT_FACE_SYM;} |
72 |
|
73 |
# CHANGED TO SPEC: only @charset
|
74 |
('CHARSET_SYM', r'@charset '), #"@charset " {return CHARSET_SYM;} |
75 |
|
76 |
('NAMESPACE_SYM', r'@{N}{A}{M}{E}{S}{P}{A}{C}{E}'), #"@namespace" {return NAMESPACE_SYM;} |
77 |
|
78 |
# CHANGED TO SPEC: ATKEYWORD
|
79 |
('ATKEYWORD', r'\@{ident}'), |
80 |
|
81 |
('IDENT', r'{ident}'), #{ident} {return IDENT;} |
82 |
('STRING', r'{string}'), #{string} {return STRING;} |
83 |
('INVALID', r'{invalid}'), # {return INVALID; /* unclosed string */} |
84 |
('HASH', r'\#{name}'), #"#"{name} {return HASH;} |
85 |
('PERCENTAGE', r'{num}%'), #{num}% {return PERCENTAGE;} |
86 |
('LENGTH', r'{num}{E}{M}'), #{num}em {return EMS;} |
87 |
('LENGTH', r'{num}{E}{X}'), #{num}ex {return EXS;} |
88 |
('LENGTH', r'{num}{P}{X}'), #{num}px {return LENGTH;} |
89 |
('LENGTH', r'{num}{C}{M}'), #{num}cm {return LENGTH;} |
90 |
('LENGTH', r'{num}{M}{M}'), #{num}mm {return LENGTH;} |
91 |
('LENGTH', r'{num}{I}{N}'), #{num}in {return LENGTH;} |
92 |
('LENGTH', r'{num}{P}{T}'), #{num}pt {return LENGTH;} |
93 |
('LENGTH', r'{num}{P}{C}'), #{num}pc {return LENGTH;} |
94 |
('ANGLE', r'{num}{D}{E}{G}'), #{num}deg {return ANGLE;} |
95 |
('ANGLE', r'{num}{R}{A}{D}'), #{num}rad {return ANGLE;} |
96 |
('ANGLE', r'{num}{G}{R}{A}{D}'), #{num}grad {return ANGLE;} |
97 |
('TIME', r'{num}{M}{S}'), #{num}ms {return TIME;} |
98 |
('TIME', r'{num}{S}'), #{num}s {return TIME;} |
99 |
('FREQ', r'{num}{H}{Z}'), #{num}Hz {return FREQ;} |
100 |
('FREQ', r'{num}{K}{H}{Z}'), #{num}kHz {return FREQ;} |
101 |
('DIMEN', r'{num}{ident}'), #{num}{ident} {return DIMEN;} |
102 |
('NUMBER', r'{num}'), #{num} {return NUMBER;} |
103 |
#('UNICODERANGE', r'U\+{range}'), #U\+{range} {return UNICODERANGE;}
|
104 |
#('UNICODERANGE', r'U\+{h}{1,6}-{h}{1,6}'), #U\+{h}{1,6}-{h}{1,6} {return UNICODERANGE;}
|
105 |
# --- CSS3 ---
|
106 |
('UNICODE-RANGE', r'[0-9A-F?]{1,6}(\-[0-9A-F]{1,6})?'), |
107 |
('CDO', r'\<\!\-\-'), #"<!--" {return CDO;} |
108 |
('CDC', r'\-\-\>'), #"-->" {return CDC;} |
109 |
('S', r'{s}'),# {return S;} |
110 |
|
111 |
# \/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
|
112 |
# {s}+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ {unput(' '); /*replace by space*/}
|
113 |
|
114 |
('INCLUDES', r'\~\='), #"~=" {return INCLUDES;} |
115 |
('DASHMATCH', r'\|\='), #"|=" {return DASHMATCH;} |
116 |
('LBRACE', r'\{'), #{w}"{" {return LBRACE;} |
117 |
('PLUS', r'\+'), #{w}"+" {return PLUS;} |
118 |
('GREATER', r'\>'), #{w}">" {return GREATER;} |
119 |
('COMMA', r'\,'), #{w}"," {return COMMA;} |
120 |
('IMPORTANT_SYM', r'\!({w}|{comment})*{I}{M}{P}{O}{R}{T}{A}{N}{T}'), #"!{w}important" {return IMPORTANT_SYM;} |
121 |
('COMMENT', '\/\*[^*]*\*+([^/][^*]*\*+)*\/'), # /* ignore comments */ |
122 |
('CLASS', r'\.'), #. {return *yytext;} |
123 |
|
124 |
# --- CSS3! ---
|
125 |
('CHAR', r'[^"\']'), |
126 |
] |
127 |
|
128 |
class CSSProductions(object): |
129 |
pass
|
130 |
for i, t in enumerate(PRODUCTIONS): |
131 |
setattr(CSSProductions, t[0].replace('-', '_'), t[0]) |