Statistics
| Revision:

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])