@@ -29,12 +29,53 @@ def __init__(self, name):
29
29
self .tags = None
30
30
self .modificators = None
31
31
32
+ class TypeDef :
33
+ def __init__ (self , name ):
34
+ self .name = name
35
+ self .description = None # type: Optional[str]
36
+ self .enumValues = None # ype: Optional[List]
37
+
32
38
class ClassDef :
33
39
def __init__ (self , name ):
34
40
self .name = name
35
- self .inherits = None # type: Optional[str]
36
- self .description = None # type: Optional[str]
37
- self .methods = OrderedDict () # type: OrderedDict[str, List[MethodDef]]
41
+ self .inherits = None # type: Optional[str]
42
+ self .description = None # type: Optional[str]
43
+ self .methods = OrderedDict () # type: OrderedDict[str, List[MethodDef]]
44
+ self .types = list () # type: List[TypeDef]
45
+
46
+ def extractTypes (element , classDef ):
47
+ content = list (element )
48
+ methods = element .findall (".//*[@class='fn']" )
49
+
50
+ for fn in methods :
51
+ result = re .search (r'(.*) (?:(.*))?' , "" .join (fn .itertext ()))
52
+ if result is not None :
53
+ #Retrieve name
54
+ group2 = result .group (2 )
55
+ nameIndex = group2 .rfind ("::" ) + 2
56
+ typedDef = TypeDef (group2 [nameIndex :])
57
+
58
+ #Retrieve description fields
59
+ typedDef .description = list ()
60
+
61
+ index = content .index (fn ) + 1
62
+ while (len (element ) > index and element [index ].tag != "h3" ): #Extract enums
63
+ table = element [index ].find (".//*[@class='valuelist']" )
64
+ if table is not None :
65
+ typedDef .enumValues = list ()
66
+ for row in table :
67
+ rowList = list ()
68
+ for column in row :
69
+ rowList .append ("" .join (column .itertext ()))
70
+ typedDef .enumValues .append (rowList )
71
+
72
+ else :
73
+ desc = DescriptionDef ("" .join (element [index ].itertext ()))
74
+ typedDef .description .append (desc )
75
+
76
+ index += 1
77
+
78
+ classDef .types .append (typedDef )
38
79
39
80
def extractMembers (element , classDef ):
40
81
content = list (element )
@@ -100,12 +141,22 @@ def extractMembers(element, classDef):
100
141
classDef .methods [methodDef .name ].append (methodDef )
101
142
102
143
def parseFile (file ):
103
- tree = ET .parse (file )
104
- root = tree .getroot ()
144
+ print (file )
145
+
146
+ f = open (file , "r" )
147
+ data = f .read ()
148
+ f .close ()
149
+
150
+ data = data .replace ("<meta charset=\" utf-8\" >" , "<meta charset=\" utf-8\" />" )
151
+ data = data .replace ("…" , "..." )
152
+
153
+ root = ET .fromstring (data )
154
+
155
+ #tree = ET.parse(file)
156
+ #root = tree.getroot()
105
157
106
158
descr = root .find (".//*[@class='descr']" )
107
159
if descr is not None :
108
- print (file )
109
160
title = root .find (".//*[@class='title']" )
110
161
classDef = ClassDef (title .text .replace (" Class" , "" ))
111
162
@@ -114,6 +165,10 @@ def parseFile(file):
114
165
for p in elements :
115
166
classDef .description .append ("" .join (p .itertext ()))
116
167
168
+ types = root .find (".//*[@class='types']" )
169
+ if types is not None :
170
+ extractTypes (types , classDef )
171
+
117
172
func = root .find (".//*[@class='func']" )
118
173
if func is not None :
119
174
extractMembers (func , classDef )
@@ -131,10 +186,19 @@ def parseFile(file):
131
186
return None
132
187
133
188
def parseModule (file , files ):
134
- tree = ET .parse (file )
135
- root = tree .getroot ()
189
+ print ("module " + file )
190
+
191
+ f = open (file , "r" )
192
+ data = f .read ()
193
+ f .close ()
194
+
195
+ data = data .replace ("<meta charset=\" utf-8\" >" , "<meta charset=\" utf-8\" />" )
196
+ data = data .replace ("…" , "..." )
197
+
198
+ root = ET .fromstring (data )
136
199
137
- print ("parseModule " + file )
200
+ #tree = ET.parse(file)
201
+ #root = tree.getroot()
138
202
139
203
result = list ()
140
204
for td in root .findall (".//*[@class='tblName']" ):
0 commit comments