79 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
| import os
 | |
| import os.path as path
 | |
| import xml.etree.ElementTree as ET
 | |
| 
 | |
| from docs.docs import ClassDoc, Doc, Docs, FreeDoc
 | |
| 
 | |
| DOXYGEN_CONF = 'doxygen.conf'
 | |
| 
 | |
| 
 | |
| class ParseDoxygenXML():
 | |
|     def __init__(self, input_path, output_path):
 | |
|         """Parse the Doxygen generated XML files.
 | |
| 
 | |
|         Arguments:
 | |
|         input_path -- path to the input folder or file
 | |
|         output_path -- path to the output folder
 | |
|         """
 | |
|         self.input_path = input_path
 | |
|         self.output_path = output_path
 | |
| 
 | |
|     def run(self, quiet=True):
 | |
|         """Run the Doxygen XML parser.
 | |
| 
 | |
|         Arguments:
 | |
|         quiet -- turn on/off the messages that are generated to standard
 | |
|                  output by Doxygen (default = True)
 | |
| 
 | |
|         Returns:
 | |
|             A Docs template storing all the class and free documentation in the
 | |
|             file.
 | |
|         """
 | |
|         class_docs = {}
 | |
|         free_docs = {}
 | |
| 
 | |
|         for root, dirs, files in os.walk(self.output_path):
 | |
|             for f in files:
 | |
|                 if f.endswith('.xml'):
 | |
|                     file_path = path.join(root, f)
 | |
|                     tree = ET.parse(file_path)
 | |
| 
 | |
|                     if tree.getroot().tag == 'compounddef':
 | |
|                         first_compound_def = tree.getroot()
 | |
|                     else:
 | |
|                         first_compound_def = tree.find(
 | |
|                             './/{}'.format('compounddef'))
 | |
| 
 | |
|                     if first_compound_def is None:
 | |
|                         continue
 | |
| 
 | |
|                     category = first_compound_def.get('kind')
 | |
| 
 | |
|                     if category == 'class':
 | |
|                         class_docs[file_path] = ClassDoc(tree)
 | |
| 
 | |
|         return Docs(class_docs, free_docs)
 | |
| 
 | |
| 
 | |
| # TODO: This should be done in the make file.
 | |
| def generate_xml(input_path, output_path, quiet=False):
 | |
|     '''Parse the file for documentation and output it as in an xml format'''
 | |
|     if not quiet:
 | |
|         print('--------------Generating XML--------------')
 | |
| 
 | |
|     input_path = path.relpath(input_path, os.getcwd())
 | |
|     conf_path = path.relpath(path.join(path.dirname(__file__), DOXYGEN_CONF))
 | |
|     output_path = path.relpath(output_path)
 | |
| 
 | |
|     if not path.isdir(output_path):
 | |
|         os.mkdir(output_path)
 | |
| 
 | |
|     command = '( cat {conf_path} ; echo "INPUT={input_path}" ; echo "OUTPUT_DIRECTORY={output_path}" ; echo "EXTRACT_ALL={quiet}" ) | doxygen -'.format(
 | |
|         conf_path=conf_path,
 | |
|         input_path=input_path,
 | |
|         output_path=output_path,
 | |
|         quiet='YES' if quiet else 'NO'
 | |
|     )
 | |
| 
 | |
|     os.system(command)
 |