source: proto/charsetcompiler/charsets.py @ 3968

Last change on this file since 3968 was 915, checked in by ksherdy, 8 years ago

Modularize charset compiler and character set definitions.

File size: 7.7 KB
Line 
1# -*- coding: utf-8 -*-
2import charset_def
3# Alias
4CharDef = charset_def.CharDef
5CharSetDef = charset_def.CharSetDef
6
7#
8# UTF-8 bytes occurring in the additional XML 1.1 line break
9# characters NEL and LS.
10
11UTF8_XML11_WS_bytes = [CharDef('NEL1', chr(0xC2)),
12                        CharDef('NEL2', chr(0x85)),
13                        CharDef('LS1', chr(0xE2)),
14                        CharDef('LS2', chr(0x80)),
15                        CharDef('LS3', chr(0xA8))]
16           
17DefinitionSet = {}
18
19DefinitionSet['WS_Control_10'] = [CharSetDef('control.x00_x1F', ['\x00-\x1F']),
20                                  CharDef('control.CR', '\x0D'),
21                                  CharDef('control.LF', '\x0A'),
22                                  CharDef('control.HT', '\x09'),
23                                  CharDef('control.SP', ' '),
24                                  CharSetDef('lex.WS', ['\x0D', '\x0A', '\x09', ' '])]
25
26DefinitionSet['WS_Control_10_EBCDIC'] = [CharSetDef('Control', ['\x00-\x03', '\x37',
27                                                                '\x2d-\x2f', '\x16',
28                                                                '\x0b-\x13', '\x3c-\x3d',
29                                                                '\x32', '\x26-\x27',
30                                                                '\x18-\x19', '\x3f', 
31                                                                '\x1c-\x1f']),
32                                         CharDef('CR', '\x0D'),
33                                         CharDef('LF', '\x25'),
34                                         CharDef('HT', '\x05'),
35                                         CharDef('SP', '\x40')]
36
37DefinitionSet['WS_Control_11_EBCDIC'] = [CharSetDef('Control', ['\x00-\x3f']),
38                                         CharDef('CR', '\x0D'),
39                                         CharDef('LF', '\x25'),
40                                         CharDef('HT', '\x05'),
41                                         CharDef('SP', '\x40'),
42                                         CharDef('NEL', '\x15')]
43
44
45DefinitionSet['WS_Control_11_ISO8859'] = [CharSetDef('Control', ['\x00-\x1F', '\x7F', '\x80-\x9F']),
46                                          CharDef('CR', '\x0D'),
47                                          CharDef('LF', '\x0A'),
48                                          CharDef('HT', '\x09'),
49                                          CharDef('SP', ' '),
50                                          CharDef('NEL', '\x85')]
51
52DefinitionSet['Markup'] = [CharDef('RefStart', '&'),
53                           CharDef('Semicolon', ';'),
54                           CharDef('LAngle', '<'),
55                           CharDef('RAngle', '>'),
56                           CharDef('RBracket', ']'),
57                           CharDef('Hyphen', '-'),
58                           CharDef('QMark', '?'),
59                           CharDef('Equals', "="),
60                           CharDef('SQuote', "'"),
61                           CharDef('DQuote', '"'),
62                           CharDef('Slash', '/')
63                           ]
64
65DefinitionSet['Digit_and_Hex'] = [CharSetDef('Digit', ['0-9']),
66                                  CharSetDef('Hex', ['0-9', 'A-F', 'a-f'])]
67
68DefinitionSet['Markup2'] = DefinitionSet['Markup'] + DefinitionSet['Digit_and_Hex']
69
70DefinitionSet['LexicalItems'] = [CharSetDef('MarkupStart', ['<', '&']),
71                                 CharDef('RAngle', '>'),
72                                 CharDef('RBracket', ']'),
73                                 CharDef('Hyphen', '-'),
74                                 CharDef('QMark', '?'),
75                                 CharSetDef('Quote', ['"', "'", '<', '&']),
76                                 CharSetDef('NameFollow', [';', '=', '/', '>', '?', ')', '[', '|', '?', '*', '+', ','])
77                                 ]
78DefinitionSet['LexicalItems2'] = [CharSetDef('MarkupStart', ['<', '&']),
79                                 CharDef('RAngle', '>'),
80                                 CharDef('RBracket', ']'),
81                                 CharDef('Hyphen', '-'),
82                                 CharDef('QMark', '?'),
83                                 CharSetDef('Quote', ['"', "'", '<', '&']),
84                                 CharSetDef('NameFollow', [' -,', '/', ';-?', '[-^', '{-~'])
85                                 ]
86
87DefinitionSet['Digit_and_Hex'] = [CharSetDef('lex.Digit', ['0-9']),
88                                  CharSetDef('lex.Hex', ['0-9', 'A-F', 'a-f'])]
89                                 
90DefinitionSet['LexicalItems_with_Digit'] = DefinitionSet['LexicalItems2'] + DefinitionSet['Digit_and_Hex']
91
92DefinitionSet['LI_with_MarkupPass'] = DefinitionSet['LexicalItems_with_Digit'] + [CharSetDef('AmpHashSlash', ['&', '#', '/'])]
93
94#
95# Byte classifications in UTF-8 validation.
96DefinitionSet['UTF8'] =         [
97                                CharSetDef('u8.unibyte', ['\x00-\x7F']),
98                                CharSetDef('u8.prefix', ['\xC0-\xFF']),
99                                CharSetDef('u8.prefix2', ['\xC0-\xDF']),
100                                CharSetDef('u8.prefix3', ['\xE0-\xEF']),
101                                CharSetDef('u8.prefix4', ['\xF0-\xFF']),
102                                CharSetDef('u8.suffix', ['\x80-\xBF']),
103                                CharSetDef('u8.badprefix', ['\xC0-\xC1', '\xF5-\xFF']),
104                                CharDef('u8.xE0', '\xE0'),
105                                CharDef('u8.xED', '\xED'),
106                                CharDef('u8.xF0', '\xF0'),
107                                CharDef('u8.xF4', '\xF4'),
108                                CharSetDef('u8.xA0_xBF', ['\xA0-\xBF']),
109                                CharSetDef('u8.x80_x9F', ['\x80-\x9F']),
110                                CharSetDef('u8.x90_xBF', ['\x90-\xBF']),
111                                CharSetDef('u8.x80_x8F', ['\x80-\x8F']) 
112                                ]
113
114DefinitionSet['JSON_Control'] = [
115                                #Control characters
116                                CharSetDef('Ctrl.x00_x1F', ['\x00-\x1F']),
117                                CharDef('Ctrl.CR', '\x0D'),
118                                CharDef('Ctrl.LF', '\x0A'),
119                                CharDef('Ctrl.HT', '\x09'),
120                                CharDef('Ctrl.SP', ' '),
121                                ]
122
123DefinitionSet['JSON_Lexical'] = [
124                                # Object
125                                CharDef('Lex.LCurlyBrace','{'),
126                                CharDef('Lex.Colon',':'),
127                                CharDef('Lex.Comma',','),
128                                CharDef('Lex.RCurlyBrace','}'),
129                               
130                                # Array
131                                CharDef('Lex.LSquareBracket','['),
132                                CharDef('Lex.RSquareBracket',']'),
133                               
134                                # Number
135                                CharDef('Lex.Minus', '-'),
136                                CharDef('Lex.Zero', '0'),
137                                CharSetDef('Lex.Digit1_9', ['1-9']),
138                                CharSetDef('Lex.Digit0_9', ['0-9']),
139                                CharDef('Lex.DecimalPoint', '.'),
140                                CharSetDef('Lex.Ee', ['E','e']),
141                                CharSetDef('Lex.PlusMinus', ['+','-']),
142                                CharSetDef('Lex.Number',['-','0-9','.','E','e','+','-']),
143                               
144                                # String
145                                CharDef('Lex.DQuote','\"'),
146                                CharDef('Lex.RSolidus','\\'),
147                                #CharDef('Lex.Solidus','/'),
148                                #CharDef('Lex.b','b'),
149                                #CharDef('Lex.f','f'),
150                                #CharDef('Lex.n','n'),
151                                #CharDef('Lex.r','r'),
152                                #CharDef('Lex.t','t'),
153                                CharDef('Lex.u','u'),
154                                CharSetDef('Lex.Escape', ['\"','\\','/','b','f','n','r','t','u']),
155                                CharSetDef('Lex.HexDigit', ['0-9','a-f','A-F']),
156                                                               
157                                # WS
158                                CharSetDef('Lex.WS', ['\x0D', '\x0A', '\x09', ' ']),
159                               
160                                # true
161                                CharDef('Lex.t','t'),
162                                CharDef('Lex.r','r'),
163                                #CharDef('Lex.u','u'),
164                                CharDef('Lex.e','e'),
165                                CharSetDef('Lex.True', ['t','r','u','e']),
166                               
167                                # false
168                                CharDef('Lex.f','f'),
169                                CharDef('Lex.a','a'),
170                                CharDef('Lex.l','l'),
171                                CharDef('Lex.s','s'),
172                                #CharDef('Lex.e','e'),
173                                CharSetDef('Lex.False', ['f','a','l','s','e']),
174                               
175                                # null
176                                CharDef('Lex.n','n'),
177                                #CharDef('Lex.u','u'),
178                                #CharDef('Lex.l','l'),
179                                #CharDef('Lex.l','l')                           
180                                CharSetDef('Lex.Null', ['n','u','l'])
181]
182
183
184DefinitionSet['JSON'] = DefinitionSet['UTF8'] + DefinitionSet['JSON_Control'] + DefinitionSet['JSON_Lexical'] 
185
186#
187# Following definitions for the parabix2 unbounded bitstream prototype
188#
189# First all the special characters in the XML delimiters.
190
191xml_marks =    [CharDef('lex.RefStart', '&'),
192                CharDef('lex.Semicolon', ';'),
193                CharDef('lex.LAngle', '<'),
194                CharDef('lex.RAngle', '>'),
195                CharDef('lex.LBracket', '['),
196                CharDef('lex.RBracket', ']'),
197                CharDef('lex.Exclam', '!'),
198                CharDef('lex.QMark', '?'),
199                CharDef('lex.Hyphen', '-'),
200                CharDef('lex.Equals', "="),
201                CharDef('lex.SQuote', "'"),
202                CharDef('lex.DQuote', '"'),
203                CharDef('lex.Slash', '/'),
204                CharDef('lex.Hash', '#'),
205                CharDef('lex.x', 'x'),
206                CharDef('lex.Colon', ':')
207                ]
208#
209# NameFollow: all characters that may legally follow an XML name, plus
210# any others that may not be used in names.
211# 1. All non-WS characters that may legally follow an XML name.
212namefollow = [CharSetDef('lex.NameFollow', [';', '=', '/', '>', '?', ')', '[', '|', '?', '*', '+', ','])]
213#
214# NameScan: all ASCII characters that may legally occur in a Name,
215# plus all UTF-8 prefix and suffix bytes.
216namescan = [CharSetDef('lex.NameScan', ['_', '-', '.', '0-:', 'A-Z', 'a-z', '\x80-\xFF'])]
217
218#
219namelex = [CharSetDef('lex.ASCII_name_start', ['_', ':', 'A-Z', 'a-z']),
220           CharSetDef('lex.ASCII_name_char', ['_', '-', '.', '0-:', 'A-Z', 'a-z']),
221           CharSetDef('lex.NameScan', ['_', '-', '.', '0-:', 'A-Z', 'a-z', '\x80-\xFF'])]
222
223#
224UTF8_BOM_bytes = [CharDef('u8.xEF', '\xEF'), CharDef('u8.xBF', '\xBF'), CharDef('u8.xBE', '\xBE')]
225
226DefinitionSet['Parabix2'] = (xml_marks + namelex + DefinitionSet['WS_Control_10']
227                             + DefinitionSet['Digit_and_Hex'] + DefinitionSet['UTF8'] + UTF8_BOM_bytes)
228
229DefinitionSet['CSV'] = [CharDef('BackSlash', '\\'),
230                        CharDef('DQuote', '"'),
231                        CharDef('SQuote', '\''),
232                        CharDef('CR', '\x0D'),
233                        CharDef('LF', '\x0A'),
234                        CharDef('Comma', ','),
235                        CharDef('HT', '\x09'),
236                        CharDef('Period', '.')]
237
Note: See TracBrowser for help on using the repository browser.