@@ -86,15 +86,26 @@ def parseClassElem(e):
86
86
def parseFile (f ):
87
87
documentable_members = 0
88
88
documented_members = 0
89
- for event , elem in ET .iterparse (f ):
90
- if event == 'end' and elem .tag == 'compounddef' :
91
- if elemIsDocumentableClass (elem ):
92
- members , documented = parseClassElem (elem )
93
- documentable_members += members
94
- documented_members += documented
95
- if documented < members :
96
- print "Class {}, {}/{} members documented" .format (elem .find ('compoundname' ).text ,documented ,members )
97
- elem .clear ()
89
+ try :
90
+ for event , elem in ET .iterparse (f ):
91
+ if event == 'end' and elem .tag == 'compounddef' :
92
+ if elemIsDocumentableClass (elem ):
93
+ members , documented = parseClassElem (elem )
94
+ documentable_members += members
95
+ documented_members += documented
96
+ if documented < members :
97
+ print "Class {}, {}/{} members documented" .format (elem .find ('compoundname' ).text ,documented ,members )
98
+ elem .clear ()
99
+ except ET .ParseError as e :
100
+ #sometimes Doxygen generates malformed xml (eg for < and > operators)
101
+ line_num , col = e .position
102
+ with open (f , 'r' ) as xml_file :
103
+ for i , l in enumerate (xml_file ):
104
+ if i == line_num - 1 :
105
+ line = l
106
+ break
107
+ caret = '{:=>{}}' .format ('^' , col )
108
+ print 'ParseError in {}\n {}\n {}\n {}' .format (f ,e ,line ,caret )
98
109
return documentable_members , documented_members
99
110
100
111
0 commit comments