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)