/xmlbench/trunk

To get this branch, use:
bzr branch http://darksoft.org/webbzr/xmlbench/trunk

« back to all changes in this revision

Viewing changes to parse/parabix.20090922/src/xml_chars.py

  • Committer: Suren A. Chilingaryan
  • Date: 2009-09-23 17:13:04 UTC
  • Revision ID: csa@dside.dyndns.org-20090923171304-osvtr4zqb29h11kd
Intel, Tango, Phobos, and RapidXML parsers; Memory benchmark scripts

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#    xml_chars.py
 
2
#    Copyright (c) 2008, Robert D. Cameron.
 
3
#    Licensed to the public under the Open Software License 3.0.
 
4
#    Licensed to International Characters, Inc., under the Academic
 
5
#    Free License 3.0.
 
6
 
 
7
#    Characters legal in XML names for both XML 1.0 and XML 1.1.
 
8
#    See http://www.w3.org/TR/ and http://www.w3.org/TR/xml11/
 
9
 
 
10
import re
 
11
 
 
12
BaseChar = ['#x0041-#x005A', '#x0061-#x007A', '#x00C0-#x00D6',
 
13
                '#x00D8-#x00F6', '#x00F8-#x00FF', '#x0100-#x0131', '#x0134-#x013E',
 
14
                '#x0141-#x0148', '#x014A-#x017E', '#x0180-#x01C3', '#x01CD-#x01F0',
 
15
                '#x01F4-#x01F5', '#x01FA-#x0217', '#x0250-#x02A8', '#x02BB-#x02C1',
 
16
                '#x0386', '#x0388-#x038A', '#x038C', '#x038E-#x03A1',
 
17
                '#x03A3-#x03CE', '#x03D0-#x03D6', '#x03DA', '#x03DC',
 
18
                '#x03DE', '#x03E0', '#x03E2-#x03F3', '#x0401-#x040C',
 
19
                '#x040E-#x044F', '#x0451-#x045C', '#x045E-#x0481', '#x0490-#x04C4',
 
20
                '#x04C7-#x04C8', '#x04CB-#x04CC', '#x04D0-#x04EB', '#x04EE-#x04F5',
 
21
                '#x04F8-#x04F9', '#x0531-#x0556', '#x0559', '#x0561-#x0586',
 
22
                '#x05D0-#x05EA', '#x05F0-#x05F2', '#x0621-#x063A', '#x0641-#x064A',
 
23
                '#x0671-#x06B7', '#x06BA-#x06BE', '#x06C0-#x06CE', '#x06D0-#x06D3',
 
24
                '#x06D5', '#x06E5-#x06E6', '#x0905-#x0939', '#x093D',
 
25
                '#x0958-#x0961', '#x0985-#x098C', '#x098F-#x0990', '#x0993-#x09A8',
 
26
                '#x09AA-#x09B0', '#x09B2', '#x09B6-#x09B9', '#x09DC-#x09DD',
 
27
                '#x09DF-#x09E1', '#x09F0-#x09F1', '#x0A05-#x0A0A', '#x0A0F-#x0A10',
 
28
                '#x0A13-#x0A28', '#x0A2A-#x0A30', '#x0A32-#x0A33', '#x0A35-#x0A36',
 
29
                '#x0A38-#x0A39', '#x0A59-#x0A5C', '#x0A5E', '#x0A72-#x0A74',
 
30
                '#x0A85-#x0A8B', '#x0A8D', '#x0A8F-#x0A91', '#x0A93-#x0AA8',
 
31
                '#x0AAA-#x0AB0', '#x0AB2-#x0AB3', '#x0AB5-#x0AB9', '#x0ABD',
 
32
                '#x0AE0', '#x0B05-#x0B0C', '#x0B0F-#x0B10', '#x0B13-#x0B28',
 
33
                '#x0B2A-#x0B30', '#x0B32-#x0B33', '#x0B36-#x0B39', '#x0B3D',
 
34
                '#x0B5C-#x0B5D', '#x0B5F-#x0B61', '#x0B85-#x0B8A', '#x0B8E-#x0B90',
 
35
                '#x0B92-#x0B95', '#x0B99-#x0B9A', '#x0B9C', '#x0B9E-#x0B9F',
 
36
                '#x0BA3-#x0BA4', '#x0BA8-#x0BAA', '#x0BAE-#x0BB5', '#x0BB7-#x0BB9',
 
37
                '#x0C05-#x0C0C', '#x0C0E-#x0C10', '#x0C12-#x0C28', '#x0C2A-#x0C33',
 
38
                '#x0C35-#x0C39', '#x0C60-#x0C61', '#x0C85-#x0C8C', '#x0C8E-#x0C90',
 
39
                '#x0C92-#x0CA8', '#x0CAA-#x0CB3', '#x0CB5-#x0CB9', '#x0CDE',
 
40
                '#x0CE0-#x0CE1', '#x0D05-#x0D0C', '#x0D0E-#x0D10', '#x0D12-#x0D28',
 
41
                '#x0D2A-#x0D39', '#x0D60-#x0D61', '#x0E01-#x0E2E', '#x0E30',
 
42
                '#x0E32-#x0E33', '#x0E40-#x0E45', '#x0E81-#x0E82', '#x0E84',
 
43
                '#x0E87-#x0E88', '#x0E8A', '#x0E8D', '#x0E94-#x0E97',
 
44
                '#x0E99-#x0E9F', '#x0EA1-#x0EA3', '#x0EA5', '#x0EA7',
 
45
                '#x0EAA-#x0EAB', '#x0EAD-#x0EAE', '#x0EB0', '#x0EB2-#x0EB3',
 
46
                '#x0EBD', '#x0EC0-#x0EC4', '#x0F40-#x0F47', '#x0F49-#x0F69',
 
47
                '#x10A0-#x10C5', '#x10D0-#x10F6', '#x1100', '#x1102-#x1103',
 
48
                '#x1105-#x1107', '#x1109', '#x110B-#x110C', '#x110E-#x1112',
 
49
                '#x113C', '#x113E', '#x1140', '#x114C', '#x114E', '#x1150',
 
50
                '#x1154-#x1155', '#x1159', '#x115F-#x1161', '#x1163',
 
51
                '#x1165', '#x1167', '#x1169', '#x116D-#x116E', '#x1172-#x1173',
 
52
                '#x1175', '#x119E', '#x11A8', '#x11AB', '#x11AE-#x11AF',
 
53
                '#x11B7-#x11B8', '#x11BA', '#x11BC-#x11C2', '#x11EB',
 
54
                '#x11F0', '#x11F9', '#x1E00-#x1E9B', '#x1EA0-#x1EF9',
 
55
                '#x1F00-#x1F15', '#x1F18-#x1F1D', '#x1F20-#x1F45', '#x1F48-#x1F4D',
 
56
                '#x1F50-#x1F57', '#x1F59', '#x1F5B', '#x1F5D', '#x1F5F-#x1F7D',
 
57
                '#x1F80-#x1FB4', '#x1FB6-#x1FBC', '#x1FBE', '#x1FC2-#x1FC4',
 
58
                '#x1FC6-#x1FCC', '#x1FD0-#x1FD3', '#x1FD6-#x1FDB', '#x1FE0-#x1FEC',
 
59
                '#x1FF2-#x1FF4', '#x1FF6-#x1FFC', '#x2126', '#x212A-#x212B',
 
60
                '#x212E', '#x2180-#x2182', '#x3041-#x3094', '#x30A1-#x30FA',
 
61
                '#x3105-#x312C', '#xAC00-#xD7A3']
 
62
 
 
63
Ideographic = ['#x4E00-#x9FA5', '#x3007', '#x3021-#x3029']
 
64
 
 
65
CombiningCh = ['#x0300-#x0345', '#x0360-#x0361', '#x0483-#x0486',
 
66
                '#x0591-#x05A1', '#x05A3-#x05B9', '#x05BB-#x05BD', '#x05BF',
 
67
                '#x05C1-#x05C2', '#x05C4', '#x064B-#x0652', '#x0670',
 
68
                '#x06D6-#x06DC', '#x06DD-#x06DF', '#x06E0-#x06E4', '#x06E7-#x06E8',
 
69
                '#x06EA-#x06ED', '#x0901-#x0903', '#x093C', '#x093E-#x094C',
 
70
                '#x094D', '#x0951-#x0954', '#x0962-#x0963', '#x0981-#x0983',
 
71
                '#x09BC', '#x09BE', '#x09BF', '#x09C0-#x09C4', '#x09C7-#x09C8',
 
72
                '#x09CB-#x09CD', '#x09D7', '#x09E2-#x09E3', '#x0A02',
 
73
                '#x0A3C', '#x0A3E', '#x0A3F', '#x0A40-#x0A42', '#x0A47-#x0A48',
 
74
                '#x0A4B-#x0A4D', '#x0A70-#x0A71', '#x0A81-#x0A83', '#x0ABC',
 
75
                '#x0ABE-#x0AC5', '#x0AC7-#x0AC9', '#x0ACB-#x0ACD', '#x0B01-#x0B03',
 
76
                '#x0B3C', '#x0B3E-#x0B43', '#x0B47-#x0B48', '#x0B4B-#x0B4D',
 
77
                '#x0B56-#x0B57', '#x0B82-#x0B83', '#x0BBE-#x0BC2', '#x0BC6-#x0BC8',
 
78
                '#x0BCA-#x0BCD', '#x0BD7', '#x0C01-#x0C03', '#x0C3E-#x0C44',
 
79
                '#x0C46-#x0C48', '#x0C4A-#x0C4D', '#x0C55-#x0C56', '#x0C82-#x0C83',
 
80
                '#x0CBE-#x0CC4', '#x0CC6-#x0CC8', '#x0CCA-#x0CCD', '#x0CD5-#x0CD6',
 
81
                '#x0D02-#x0D03', '#x0D3E-#x0D43', '#x0D46-#x0D48', '#x0D4A-#x0D4D',
 
82
                '#x0D57', '#x0E31', '#x0E34-#x0E3A', '#x0E47-#x0E4E',
 
83
                '#x0EB1', '#x0EB4-#x0EB9', '#x0EBB-#x0EBC', '#x0EC8-#x0ECD',
 
84
                '#x0F18-#x0F19', '#x0F35', '#x0F37', '#x0F39', '#x0F3E',
 
85
                '#x0F3F', '#x0F71-#x0F84', '#x0F86-#x0F8B', '#x0F90-#x0F95',
 
86
                '#x0F97', '#x0F99-#x0FAD', '#x0FB1-#x0FB7', '#x0FB9',
 
87
                '#x20D0-#x20DC', '#x20E1', '#x302A-#x302F', '#x3099',
 
88
                '#x309A']
 
89
 
 
90
Digit = ['#x0030-#x0039', '#x0660-#x0669', '#x06F0-#x06F9',
 
91
                '#x0966-#x096F', '#x09E6-#x09EF', '#x0A66-#x0A6F', '#x0AE6-#x0AEF',
 
92
                '#x0B66-#x0B6F', '#x0BE7-#x0BEF', '#x0C66-#x0C6F', '#x0CE6-#x0CEF',
 
93
                '#x0D66-#x0D6F', '#x0E50-#x0E59', '#x0ED0-#x0ED9', '#x0F20-#x0F29']
 
94
 
 
95
Extender = ['#x00B7', '#x02D0', '#x02D1', '#x0387', '#x0640',
 
96
                '#x0E46', '#x0EC6', '#x3005', '#x3031-#x3035', '#x309D-#x309E',
 
97
                '#x30FC-#x30FE']
 
98
 
 
99
NameStrt = ['#x003A', '#x005F'] + BaseChar + Ideographic
 
100
NameChar = NameStrt + ['#x002D', '#x002E'] + Digit + Extender + CombiningCh
 
101
 
 
102
XML11_NameStrt = ['#x003A', '#x005F', '#x0041-#x005A', '#x0061-#x007A', '#x00C0-#x00D6',
 
103
                        '#x00D8-#x00F6', '#x00F8-#x02FF', '#x0370-#x037D', '#x037F-#x1FFF', '#x200C-#x200D',
 
104
                        '#x2070-#x218F', '#x2C00-#x2FEF', '#x3001-#xD7FF', '#xF900-#xFDCF', '#xFDF0-#xFFFD', '#x10000-#xEFFFF']
 
105
                        
 
106
XML11_NameChar = XML11_NameStrt + ['#x002D', '#x002E', '#x0030-#x0039', '#x00B7', '#x0300-#x036F', '#x203F-#x2040']
 
107
 
 
108
range_pattern = re.compile("#x([0-9A-Fa-f]+)-#x([0-9A-Fa-f]+)")
 
109
def range_from_rangespec(s):
 
110
        m = range_pattern.match(s)
 
111
        if m != None:
 
112
                return (int(m.group(1), 16), int(m.group(2), 16))
 
113
        else:   
 
114
                val = int(s[2:], 16)
 
115
                return (val, val)
 
116
        
 
117
def charclass_ranges(CharClass):
 
118
        return [range_from_rangespec(s) for s in CharClass]
 
119
 
 
120
def charclass_map(CharClass):
 
121
        map = {}
 
122
        for s in CharClass:
 
123
                r = range_from_rangespec(s)
 
124
                for c in range(r[0], r[1]+1):
 
125
                        map[c] = 1
 
126
        return map
 
127
 
 
128
 
 
129
def charclass_bitstring(map, lo_limit, hi_limit):
 
130
        bits = ''
 
131
        for x in range(lo_limit, hi_limit+1):
 
132
                if map.has_key(x): bits += '1'
 
133
                else: bits += '0'
 
134
        return bits
 
135
 
 
136
 
 
137
def bitstring2hexstring(bitstr):
 
138
        h = ""
 
139
        for q in range(0, len(bitstr)/4):
 
140
                l = 4*q
 
141
                if bitstr[l:l+4] == "0000": h += '0'
 
142
                elif bitstr[l:l+4] == "0001": h += '1'
 
143
                elif bitstr[l:l+4] == "0010": h += '2'
 
144
                elif bitstr[l:l+4] == "0011": h += '3'
 
145
                elif bitstr[l:l+4] == "0100": h += '4'
 
146
                elif bitstr[l:l+4] == "0101": h += '5'
 
147
                elif bitstr[l:l+4] == "0110": h += '6'
 
148
                elif bitstr[l:l+4] == "0111": h += '7'
 
149
                elif bitstr[l:l+4] == "1000": h += '8'
 
150
                elif bitstr[l:l+4] == "1001": h += '9'
 
151
                elif bitstr[l:l+4] == "1010": h += 'A'
 
152
                elif bitstr[l:l+4] == "1011": h += 'B'
 
153
                elif bitstr[l:l+4] == "1100": h += 'C'
 
154
                elif bitstr[l:l+4] == "1101": h += 'D'
 
155
                elif bitstr[l:l+4] == "1110": h += 'E'
 
156
                elif bitstr[l:l+4] == "1111": h += 'F'
 
157
        return h
 
158
                
 
159
def make_C_bit_map(name, map, lo_codepoint, hi_codepoint):
 
160
        c_str = "uint8_t " + name + "[] = {\n    "
 
161
        codepoint = lo_codepoint
 
162
        groups_on_line = 0
 
163
        while (codepoint <= hi_codepoint):
 
164
                bits = charclass_bitstring(map, codepoint, codepoint+7)
 
165
                c_str += "0x" + bitstring2hexstring(bits)
 
166
                groups_on_line += 1
 
167
                codepoint += 8
 
168
                if (codepoint <= hi_codepoint):
 
169
                        if (groups_on_line < 8): c_str += ', '
 
170
                        else:
 
171
                                c_str += ',\n    '
 
172
                                groups_on_line = 0
 
173
        c_str += "};\n\n"
 
174
        return c_str
 
175
        
 
176
namechars_header = r"""/* namechars.h - Bitset maps for name characters.
 
177
    Copyright (c) 2008, Robert D. Cameron.
 
178
    Licensed to the public under the Open Software License 3.0.
 
179
    Licensed to International Characters, Inc., under the Academic
 
180
    Free License 3.0.
 
181
    
 
182
    This is a generated file using xml_chars.py.  Do not edit.
 
183
    
 
184
    The XML10 maps apply to XML 1.0 4th edition and prior.
 
185
    The XML11 maps apply to XML 1.1 and the proposed XML 1.0 5th edition.
 
186
 
 
187
*/
 
188
#ifndef NAMECHARS_H
 
189
#define NAMECHARS_H
 
190
 
 
191
#ifndef _MSC_VER
 
192
#include <stdint.h>
 
193
#endif
 
194
#ifdef _MSC_VER
 
195
#include "../../lib/stdint.h"
 
196
#endif
 
197
 
 
198
"""
 
199
 
 
200
def gen_NS_bitmaps(filename):
 
201
        ncm = charclass_map(NameChar)
 
202
        nsm = charclass_map(NameStrt)
 
203
        f = open(filename, "w")
 
204
        f.write(namechars_header)
 
205
        f.write(make_C_bit_map('NameStrt_XML10_0000_11FF', nsm, 0, 0x11FF))
 
206
        f.write(make_C_bit_map('NameStrt_XML10_1E00_1FFF', nsm, 0x1E00, 0x1FFF))
 
207
        f.write(make_C_bit_map('NameStrt_XML10_2000_21FF', nsm, 0x2000, 0x21FF))
 
208
        f.write(make_C_bit_map('NameStrt_XML10_3000_31FF', nsm, 0x3000, 0x31FF))
 
209
        f.write(make_C_bit_map('NameChar_XML10_0000_11FF', ncm, 0, 0x11FF))
 
210
        f.write(make_C_bit_map('NameChar_XML10_2000_21FF', ncm, 0x2000, 0x21FF))
 
211
        f.write(make_C_bit_map('NameChar_XML10_3000_31FF', ncm, 0x3000, 0x31FF))
 
212
        
 
213
        ncm11 = charclass_map(XML11_NameChar)
 
214
        nsm11 = charclass_map(XML11_NameStrt)
 
215
        f.write(make_C_bit_map('NameStrt_XML11_0000_03FF', nsm11, 0, 0x03FF))
 
216
        f.write(make_C_bit_map('NameChar_XML11_0000_03FF', ncm11, 0, 0x03FF))
 
217
        f.write("#endif\n");
 
218
        f.close()
 
219
 
 
220
if __name__ == "__main__":
 
221
        gen_NS_bitmaps("namechars.h")
 
222