diff options
Diffstat (limited to 'utils/python/doc_gen/doc_gen.py')
-rw-r--r-- | utils/python/doc_gen/doc_gen.py | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/utils/python/doc_gen/doc_gen.py b/utils/python/doc_gen/doc_gen.py new file mode 100644 index 0000000..97d6e65 --- /dev/null +++ b/utils/python/doc_gen/doc_gen.py @@ -0,0 +1,93 @@ +import os, re, json, xml.etree.ElementTree +from optparse import OptionParser + +from doxygen_extractor import DoxygenExtractor +from md_converter import MarkdownConverter +from system_utils import SystemUtils + +member_func_filter = ["idleCallback", "systemCallback", "~"] + +filters = True + +utils = SystemUtils() + +### +# the trigger for generating our documentation +### +def generate_mkdocs(header_paths, type_colour = "#a71d5d", function_name_colour = "#795da3"): + + global member_func_filter + doxygen = DoxygenExtractor(os.path.abspath("."), header_paths) + markdown = MarkdownConverter(type_colour, function_name_colour, separate_defaults = True, display_defaults = False) + + doxygen.generate_doxygen() + #utils.validate_version(doxygen.working_dir, header_paths, "./docs/archive") + + file_names = utils.find_files('docs','*.md') + section_kind = ["public-func"] + meta_data_regex = re.compile( r'\[comment\]: <> \((.*?)\)', re.MULTILINE | re.DOTALL ) + + for filename in file_names: + print(filename) + + read_lines = utils.read(filename) + + file_lines = markdown.clean(read_lines, meta_data_regex) + + utils.write(filename, file_lines) + + previous = "" + + for line_number, line in enumerate(file_lines, 1): + + result = re.findall(meta_data_regex,line) + + if len(result) is not 0: + + meta_data = json.loads(result[0]) + + if previous is not "" and "end" in meta_data.keys() and meta_data['end'] == previous: + previous = "" + continue + elif previous is "": + try: + previous = meta_data['className'] + except: + raise Exception('There isn\'t a match for the meta_data '+ meta_data) + else: + raise Exception('There isn\'t a match for the meta_data \''+ previous + "'") + + local_filter = member_func_filter + + if "filter" in meta_data: + for member_function in meta_data["filter"]: + local_filter = local_filter + [ str(member_function) ] + + print "Custom filter applied: " + str(member_func_filter) + + class_xml_files = list(utils.find_files("./xml","*class*"+meta_data['className'] + ".xml")) + + print class_xml_files + + if len(class_xml_files) == 0: + raise Exception("Invalid classname: " + meta_data['className']) + elif len(class_xml_files) > 1: + class_xml_files + + doxygen_class_xml = xml.etree.ElementTree.parse(class_xml_files[0]).getroot() + + member_functions = [] + + for section_def in doxygen_class_xml.iter('sectiondef'): + if section_def.attrib['kind'] in section_kind: + for member_func in section_def.iter('memberdef'): + new_member = doxygen.extract_member_function(member_func, local_filter, filter= filters) + if new_member is not None: + member_functions.append(new_member) + + before = file_lines[:line_number] + after = file_lines[line_number:] + + between = markdown.gen_member_func_doc(meta_data['className'], member_functions) + + utils.write(filename, before + between + after) |