Example #1
0
def parse_document(document: QTextDocument, document_info: dict):
    """Parses the document line by line for tags matching regexp of objects in identifier_parsers. Updates the
    provided document_info dictionary with the parsed information"""

    line_count = document.blockCount()
    header_index = -1

    for i in range(line_count):
        current_line = document.findBlockByNumber(i).text()

        for parser in identifier_parsers:
            index = parser.regexp.indexIn(current_line)

            while index >= 0:
                identifier, parsed_info = parser.extract()

                # Add additional fields
                parsed_info[identifier]["block_number"] = i
                parsed_info[identifier]["current_header_index"] = header_index
                parsed_info[identifier]["project_filepath"] = document.baseUrl().toLocalFile()

                if parser.category == "headings":
                    header_index += 1

                document_info[parser.category].update(parsed_info)
                length = parser.regexp.matchedLength()
                index = parser.regexp.indexIn(current_line, index + length)