00001
00002
00003
00004
00005 """CSS Lexical Grammar rules.
00006
00007 CSS lexical grammar from http://www.w3.org/TR/CSS21/grammar.html
00008 """
00009
00010 __author__ = ['elsigh@google.com (Lindsey Simon)',
00011 'msamuel@google.com (Mike Samuel)']
00012
00013
00014 __all__ = [ "NEWLINE", "HEX", "NON_ASCII", "UNICODE", "ESCAPE", "NMSTART", "NMCHAR", "STRING1", "STRING2", "IDENT", "NAME", "HASH", "NUM", "STRING", "URL", "SPACE", "WHITESPACE", "COMMENT", "QUANTITY", "PUNC" ]
00015
00016
00017
00018
00019
00020
00021
00022 KEYWORD = r'(?:\@(?:import|page|media|charset))'
00023
00024
00025 NEWLINE = r'\n|\r\n|\r|\f'
00026
00027
00028 HEX = r'[0-9a-f]'
00029
00030
00031 NON_ASCII = r'[\200-\377]'
00032
00033
00034 UNICODE = r'(?:(?:\\' + HEX + r'{1,6})(?:\r\n|[ \t\r\n\f])?)'
00035
00036
00037 ESCAPE = r'(?:' + UNICODE + r'|\\[^\r\n\f0-9a-f])'
00038
00039
00040 NMSTART = r'(?:[_a-z]|' + NON_ASCII + r'|' + ESCAPE + r')'
00041
00042
00043 NMCHAR = r'(?:[_a-z0-9-]|' + NON_ASCII + r'|' + ESCAPE + r')'
00044
00045
00046 IDENT = r'-?' + NMSTART + NMCHAR + '*'
00047
00048
00049 NAME = NMCHAR + r'+'
00050
00051
00052 HASH = r'#' + NAME
00053
00054
00055 STRING1 = r'"(?:[^\"\\]|\\.)*"'
00056
00057
00058 STRING2 = r"'(?:[^\'\\]|\\.)*'"
00059
00060
00061 STRING = '(?:' + STRING1 + r'|' + STRING2 + ')'
00062
00063
00064 NUM = r'(?:[0-9]*\.[0-9]+|[0-9]+)'
00065
00066
00067 SPACE = r'[ \t\r\n\f]'
00068
00069
00070 WHITESPACE = '(?:' + SPACE + r'*)'
00071
00072
00073 URL_SPECIAL_CHARS = r'[!#$%&*-~]'
00074
00075
00076 URL_CHARS = r'(?:%s|%s|%s)*' % (URL_SPECIAL_CHARS, NON_ASCII, ESCAPE)
00077
00078
00079 URL = r'url\(%s(%s|%s)%s\)' % (WHITESPACE, STRING, URL_CHARS, WHITESPACE)
00080
00081
00082
00083 COMMENT = r'/\*[^*]*\*+([^/*][^*]*\*+)*/'
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101 UNIT = r'(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)'
00102
00103
00104 QUANTITY = '%s(?:%s%s|%s)?' % (NUM, WHITESPACE, UNIT, IDENT)
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114 PUNC = r'<!--|-->|~=|\|=|[\{\+>,:;]'