idl-parser 0.0.10__py2.7.egg

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
idl_parser/struct.py ADDED
@@ -0,0 +1,145 @@
1
+ import os, sys, traceback
2
+
3
+ from . import node
4
+ from . import type as idl_type
5
+
6
+
7
+ class IDLMember(node.IDLNode):
8
+ def __init__(self, parent):
9
+ super(IDLMember, self).__init__('IDLMember', '', parent)
10
+ self._verbose = True
11
+ self._type = None
12
+ self.sep = '::'
13
+
14
+ @property
15
+ def full_path(self):
16
+ return self.parent.full_path + self.sep + self.name
17
+
18
+ def parse_blocks(self, blocks, filepath=None):
19
+ self._filepath = filepath
20
+ name, typ = self._name_and_type(blocks)
21
+ if name.find('[') >= 0:
22
+ name_ = name[:name.find('[')]
23
+ typ = typ.strip() + ' ' + name[name.find('['):]
24
+ name = name_
25
+ self._name = name
26
+ self._type = idl_type.IDLType(typ, self)
27
+
28
+ def to_simple_dic(self, recursive=False, member_only=False):
29
+ if recursive:
30
+ if self.type.is_primitive:
31
+ return str(self.type) + ' ' + self.name
32
+ elif self.type.obj.is_enum:
33
+ return str('enum') + ' ' + self.name
34
+ dic = {str(self.type) +' ' + self.name :
35
+ self.type.obj.to_simple_dic(recursive=recursive, member_only=True)}
36
+ return dic
37
+ dic = {self.name : str(self.type) }
38
+ return dic
39
+
40
+ def to_dic(self):
41
+ dic = { 'name' : self.name,
42
+ 'filepath' : self.filepath,
43
+ 'classname' : self.classname,
44
+ 'type' : str(self.type) }
45
+ return dic
46
+
47
+ @property
48
+ def type(self):
49
+ if self._type.classname == 'IDLBasicType': # Struct
50
+ return self.root_node.find_types(self._type.name)[0]
51
+ return self._type
52
+
53
+ def get_type(self, extract_typedef=False):
54
+ if extract_typedef:
55
+ if self.type.is_typedef:
56
+ return self.type.type
57
+ return self.type
58
+
59
+
60
+ def post_process(self):
61
+ #self._type = self.refine_typename(self.type)
62
+ pass
63
+
64
+
65
+ class IDLStruct(node.IDLNode):
66
+
67
+ def __init__(self, name, parent):
68
+ super(IDLStruct, self).__init__('IDLStruct', name.strip(), parent)
69
+ self._verbose = True
70
+ self._members = []
71
+ self.sep = '::'
72
+
73
+ @property
74
+ def full_path(self):
75
+ return (self.parent.full_path + self.sep + self.name).strip()
76
+
77
+ def to_simple_dic(self, quiet=False, full_path=False, recursive=False, member_only=False):
78
+ name = self.full_path if full_path else self.name
79
+ if quiet:
80
+ return 'struct %s' % name
81
+
82
+ dic = { 'struct %s' % name : [v.to_simple_dic(recursive=recursive) for v in self.members] }
83
+
84
+ if member_only:
85
+ return dic.values()[0]
86
+ return dic
87
+
88
+
89
+ def to_dic(self):
90
+ dic = { 'name' : self.name,
91
+ 'classname' : self.classname,
92
+ 'members' : [v.to_dic() for v in self.members] }
93
+ return dic
94
+
95
+ def parse_tokens(self, token_buf, filepath=None):
96
+ self._filepath = filepath
97
+ kakko = token_buf.pop()
98
+ if not kakko == '{':
99
+ if self._verbose: sys.stdout.write('# Error. No kakko "{".\n')
100
+ raise InvalidIDLSyntaxError()
101
+
102
+ block_tokens = []
103
+ while True:
104
+
105
+ token = token_buf.pop()
106
+ if token == None:
107
+ if self._verbose: sys.stdout.write('# Error. No kokka "}".\n')
108
+ raise InvalidIDLSyntaxError()
109
+
110
+ elif token == '}':
111
+ token = token_buf.pop()
112
+ if not token == ';':
113
+ if self._verbose: sys.stdout.write('# Error. No semi-colon after "}".\n')
114
+ raise InvalidIDLSyntaxError()
115
+ break
116
+
117
+ if token == ';':
118
+ self._parse_block(block_tokens)
119
+ block_tokens = []
120
+ continue
121
+ block_tokens.append(token)
122
+
123
+ self._post_process()
124
+
125
+ def _parse_block(self, blocks):
126
+ v = IDLMember(self)
127
+ v.parse_blocks(blocks, self.filepath)
128
+ self._members.append(v)
129
+
130
+ def _post_process(self):
131
+ self.forEachMember(lambda m : m.post_process())
132
+
133
+ @property
134
+ def members(self):
135
+ return self._members
136
+
137
+ def member_by_name(self, name):
138
+ for m in self._members:
139
+ if m.name == name:
140
+ return m
141
+
142
+ return None
143
+ def forEachMember(self, func):
144
+ for m in self._members:
145
+ func(m)
idl_parser/struct.pyc ADDED
Binary file
@@ -0,0 +1,25 @@
1
+
2
+
3
+ class TokenBuffer():
4
+
5
+ def __init__(self, lines):
6
+ self._tokens = []
7
+ self._token_offset = 0
8
+ for line in lines:
9
+ ts = line.split(' ')
10
+ for t in ts:
11
+ if len(t.strip()) != 0:
12
+ self._tokens.append(t.strip())
13
+
14
+ @property
15
+ def t_debug(self):
16
+ return self._tokens
17
+
18
+ def pop(self):
19
+ if len(self._tokens) == self._token_offset:
20
+ return None
21
+ t = self._tokens[self._token_offset].strip()
22
+ self._token_offset = self._token_offset + 1
23
+ return t.strip()
24
+
25
+
Binary file
idl_parser/type.py ADDED
@@ -0,0 +1,249 @@
1
+ import os, sys, traceback
2
+
3
+ from . import node
4
+
5
+ sep = '::'
6
+
7
+ primitive = [
8
+ 'boolean',
9
+ 'char', 'byte', 'octet',
10
+ 'short', 'wchar',
11
+ 'long',
12
+ 'float',
13
+ 'double',
14
+ 'string',
15
+ 'wstring']
16
+
17
+ def is_primitive(name):
18
+ for n in name.split(' '):
19
+ if n in primitive:
20
+ return True
21
+ return False
22
+
23
+ def IDLType(name, parent):
24
+ if name == 'void':
25
+ return IDLVoid(name, parent)
26
+
27
+ elif name.find('sequence') >= 0:
28
+ return IDLSequence(name, parent)
29
+ elif name.find('[') >= 0:
30
+ return IDLArray(name, parent)
31
+
32
+ if is_primitive(name):
33
+ return IDLPrimitive(name, parent)
34
+
35
+ return IDLBasicType(name, parent)
36
+
37
+ class IDLTypeBase(node.IDLNode):
38
+ def __init__(self, classname, name, parent):
39
+ super(IDLTypeBase, self).__init__(classname, name, parent.root_node)
40
+ self._is_sequence = False
41
+ self._is_primitive = False
42
+
43
+ def __str__(self):
44
+ return self.name
45
+
46
+ @property
47
+ def is_sequence(self):
48
+ return self._is_sequence
49
+
50
+ @property
51
+ def is_primitive(self):
52
+ return self._is_primitive
53
+
54
+
55
+ class IDLVoid(IDLTypeBase):
56
+ def __init__(self, name, parent):
57
+ super(IDLVoid, self).__init__('IDLVoid', name, parent.root_node)
58
+ self._verbose = True
59
+
60
+ class IDLSequence(IDLTypeBase):
61
+ def __init__(self, name, parent):
62
+ super(IDLSequence, self).__init__('IDLSequence', name, parent.root_node)
63
+ self._verbose = True
64
+ if name.find('sequence') < 0:
65
+ raise InvalidIDLSyntaxError()
66
+ typ_ = name[name.find('<')+1 : name.find('>')]
67
+ self._type = IDLType(typ_, parent)
68
+ self._is_primitive = False #self.inner_type.is_primitive
69
+ self._is_sequence = True
70
+
71
+ @property
72
+ def inner_type(self):
73
+ return self._type
74
+
75
+ def __str__(self):
76
+ return 'sequence<%s>' % str(self.inner_type)
77
+
78
+ @property
79
+ def obj(self):
80
+ return self
81
+
82
+
83
+ def __hoge(self):
84
+ global_module = self.root_node
85
+ typs = global_module.find_types(self.inner_type)
86
+ # print self.inner_type
87
+ if len(typs) == 0:
88
+ # print 'None'
89
+ return None
90
+ else:
91
+ # print typs[0]
92
+ return typs[0]
93
+
94
+ @property
95
+ def type(self):
96
+ return self._type
97
+
98
+ @property
99
+ def full_path(self):
100
+ return self.parent.full_path + sep + self.name
101
+
102
+ def to_simple_dic(self, quiet=False, full_path=False, recursive=False, member_only=False):
103
+ name = self.full_path if full_path else self.name
104
+ if quiet:
105
+ return 'sequence<%s>' % str(self.inner_type)
106
+
107
+ if recursive:
108
+ if self.type.is_primitive:
109
+ return { 'sequence<%s>' % str(self.type) : str(self.type)}
110
+ else:
111
+ return { 'sequence<%s>' % str(self.type) : self.type.obj.to_simple_dic(recursive=recursive, member_only=True)}
112
+ """
113
+ n = 'typedef ' + str(self.type) +' ' + name
114
+ if not self.type.is_primitive:
115
+ dic = { n : (self.type.obj.to_simple_dic(recursive=recursive, member_only=True))}
116
+ else:
117
+ dic = { n : str(self.type) }
118
+ if member_only:
119
+ return dic
120
+ return {name : dic}
121
+
122
+ dic = 'typedef %s %s' % (self.type, name)
123
+ return dic
124
+ """
125
+
126
+ def to_dic(self):
127
+ dic = { 'name' : self.name,
128
+ 'classname' : self.classname,
129
+ 'type' : str(self.type) }
130
+ return dic
131
+
132
+ class IDLArray(IDLTypeBase):
133
+ def __init__(self, name, parent):
134
+ super(IDLArray, self).__init__('IDLArray', name.strip(), parent.root_node)
135
+
136
+ self._verbose = True
137
+ if name.find('[') < 0:
138
+ raise InvalidIDLSyntaxError()
139
+ primitive_type_name = name[:name.find('[')]
140
+ size = name[name.find('[')+1 : name.find(']')]
141
+ inner_type_name = primitive_type_name + name[name.find(']')+1:]
142
+ self._size = int(size)
143
+ self._type = IDLType(inner_type_name.strip(), parent)
144
+ self._is_primitive = False #self.inner_type.is_primitive
145
+ self._is_sequence = False
146
+ self._is_array = True
147
+
148
+
149
+ @property
150
+ def inner_type(self):
151
+ return self._type
152
+
153
+ @property
154
+ def primitive_type(self):
155
+ if self.inner_type.is_array:
156
+ return self.inner_type.primitive_type
157
+ else:
158
+ return self.inner_type
159
+
160
+ def __str__(self):
161
+ n = ['%s' % self.primitive_type.name]
162
+ def _apply_size(typ):
163
+ n[0] = n[0] + '[%s]' % typ.size
164
+ if typ.inner_type.is_array:
165
+ _apply_size(typ.inner_type)
166
+
167
+ _apply_size(self)
168
+ return n[0]
169
+
170
+ @property
171
+ def obj(self):
172
+ return self
173
+
174
+ @property
175
+ def size(self):
176
+ return self._size
177
+
178
+ def __hoge(self):
179
+ global_module = self.root_node
180
+ typs = global_module.find_types(self.inner_type)
181
+ # print self.inner_type
182
+ if len(typs) == 0:
183
+ # print 'None'
184
+ return None
185
+ else:
186
+ # print typs[0]
187
+ return typs[0]
188
+
189
+ @property
190
+ def type(self):
191
+ return self._type
192
+
193
+ @property
194
+ def full_path(self):
195
+ return self.parent.full_path + sep + self.name
196
+
197
+ def to_simple_dic(self, quiet=False, full_path=False, recursive=False, member_only=False):
198
+ name = self.full_path if full_path else self.name
199
+ if quiet:
200
+ return str(self)
201
+
202
+ if recursive:
203
+ if self.type.is_primitive:
204
+ return str(self)
205
+ else:
206
+ return str(self)
207
+ """
208
+ n = 'typedef ' + str(self.type) +' ' + name
209
+ if not self.type.is_primitive:
210
+ dic = { n : (self.type.obj.to_simple_dic(recursive=recursive, member_only=True))}
211
+ else:
212
+ dic = { n : str(self.type) }
213
+ if member_only:
214
+ return dic
215
+ return {name : dic}
216
+
217
+ dic = 'typedef %s %s' % (self.type, name)
218
+ return dic
219
+ """
220
+
221
+ def to_dic(self):
222
+ dic = { 'name' : self.name,
223
+ 'classname' : self.classname,
224
+ 'type' : str(self.type) }
225
+ return dic
226
+
227
+
228
+ class IDLPrimitive(IDLTypeBase):
229
+ def __init__(self, name, parent):
230
+ super(IDLPrimitive, self).__init__('IDLPrimitive', name, parent.root_node)
231
+ self._verbose = True
232
+ self._is_primitive = True
233
+
234
+ class IDLBasicType(IDLTypeBase):
235
+ def __init__(self, name, parent):
236
+ super(IDLBasicType, self).__init__('IDLBasicType', name, parent.root_node)
237
+ self._verbose = True
238
+ #if self.name.find('['):
239
+ # self._name = self.name[self.name.find('[')+1:]
240
+ self._name = self.refine_typename(self.name)
241
+
242
+ @property
243
+ def obj(self):
244
+ global_module = self.root_node
245
+ typs = global_module.find_types(self.name)
246
+ if len(typs) == 0:
247
+ return None
248
+ else:
249
+ return typs[0]
idl_parser/type.pyc ADDED
Binary file
idl_parser/typedef.py ADDED
@@ -0,0 +1,85 @@
1
+ from . import node
2
+ from . import type as idl_type
3
+ sep = '::'
4
+
5
+ class IDLTypedef(node.IDLNode):
6
+
7
+ def __init__(self, parent):
8
+ super(IDLTypedef, self).__init__('IDLTypedef', '', parent)
9
+ self._verbose = True
10
+ self._type = None
11
+
12
+ @property
13
+ def full_path(self):
14
+ return self.parent.full_path + sep + self.name
15
+
16
+ def to_simple_dic(self, quiet=False, full_path=False, recursive=False, member_only=False):
17
+ name = self.full_path if full_path else self.name
18
+ if quiet:
19
+ return 'typedef ' + name
20
+
21
+ if recursive:
22
+ n = 'typedef ' + str(self.type) +' ' + name
23
+ if not self.type.is_primitive:
24
+ dic = { n : (self.type.obj.to_simple_dic(recursive=recursive, member_only=True))}
25
+ else:
26
+ dic = { n : str(self.type) }
27
+ if member_only:
28
+ return dic
29
+ return {name : dic}
30
+
31
+ dic = 'typedef %s %s' % (self.type, name)
32
+ return dic
33
+
34
+ def to_dic(self):
35
+ dic = { 'name' : self.name,
36
+ 'classname' : self.classname,
37
+ 'type' : str(self.type) }
38
+ return dic
39
+
40
+ @property
41
+ def type(self):
42
+ if self._type.classname == 'IDLBasicType': # Struct
43
+ return self.root_node.find_types(self._type.name)[0]
44
+ return self._type
45
+
46
+ def get_type(self, extract_typedef=False):
47
+ if extract_typedef:
48
+ if self.type.is_typedef:
49
+ return self.type.type
50
+ return self.type
51
+
52
+
53
+ def parse_blocks(self, blocks, filepath=None):
54
+ self._filepath = filepath
55
+ type_name_ = ''
56
+ rindex = 1
57
+ name = blocks[-rindex]
58
+ while True:
59
+ if name.find('[') < 0:
60
+ break
61
+
62
+ if name.find('[') > 0:
63
+ type_name_ = name[name.find('['):]
64
+ name = name[:name.find('[')]
65
+ #rindex = rindex + 1
66
+ break
67
+
68
+ type_name_ = name + type_name_
69
+ rindex = rindex + 1
70
+ name = blocks[-rindex]
71
+
72
+ type_name = ''
73
+ for t in blocks[:-rindex]:
74
+ type_name = type_name + ' ' + t
75
+ type_name = type_name + ' ' + type_name_
76
+ type_name = type_name.strip()
77
+
78
+ self._type = idl_type.IDLType(type_name, self)
79
+ self._name = name
80
+
81
+ self._post_process()
82
+
83
+ def _post_process(self):
84
+ #self._type = self.refine_typename(self.type)
85
+ pass
idl_parser/typedef.pyc ADDED
Binary file