diff --git a/app/main/checks/report_checks/literature_references.py b/app/main/checks/report_checks/literature_references.py index bcd89792..9ae0d6f7 100644 --- a/app/main/checks/report_checks/literature_references.py +++ b/app/main/checks/report_checks/literature_references.py @@ -87,27 +87,44 @@ def check(self): ''' return answer(False, result_str) + def search_references_in_table(self, index_table: int, prev_ref, array_of_references, ref_sequence) -> int: + """Функция поиска ссылок в таблицах (ищет в каждой клетке)""" + for cell in self.file.file.tables[index_table]._cells: + prev_ref = self.search_references_in_text(cell.text, prev_ref, array_of_references, ref_sequence) + return prev_ref + + def search_references_in_text(self, text: str, prev_ref, array_of_references, ref_sequence) -> int: + """Функция поиска ссылок в переданном тексте""" + reg_exp = r'\[[\^]{0,1}[\d \-,]+\]' + detected_references = re.findall(reg_exp, text) + if detected_references: + for reference_raw in detected_references: + reference = reference_raw.replace('^', '') # TODO: kostyl'... + for one_part in re.split(r'[\[\],]', reference): + if re.match(r'\d+[ \-]+\d+', one_part): + start, end = re.split(r'[ -]+', one_part) + for k in range(int(start), int(end) + 1): + prev_ref = self.add_references(k, prev_ref, array_of_references, ref_sequence) + elif one_part != '': + prev_ref = self.add_references(int(one_part), prev_ref, array_of_references, ref_sequence) + return prev_ref + def search_references(self, start_par): + """Функция поиска ссылок в документе""" prev_ref = 0 ref_sequence = [] array_of_references = set() - reg_exp = r'\[[\^]{0,1}[\d \-,]+\]' # md can use [^5] format for hyperlink for i in range(0, start_par): - if isinstance(self.file.paragraphs[i], str): - detected_references = re.findall(reg_exp, self.file.paragraphs[i]) - else: - detected_references = re.findall(reg_exp, self.file.paragraphs[i].paragraph_text) - - if detected_references: - for reference_raw in detected_references: - reference = reference_raw.replace('^', '') # TODO: kostyl'... - for one_part in re.split(r'[\[\],]', reference): - if re.match(r'\d+[ \-]+\d+', one_part): - start, end = re.split(r'[ -]+', one_part) - for k in range(int(start), int(end) + 1): - prev_ref = self.add_references(k, prev_ref, array_of_references, ref_sequence) - elif one_part != '': - prev_ref = self.add_references(int(one_part), prev_ref, array_of_references, ref_sequence) + text = self.file.paragraphs[i] if isinstance(self.file.paragraphs[i], str) else self.file.paragraphs[i].paragraph_text + match = re.search(r'Таблица ([.\d]+)', text) + if match: + index_table = int(match.group(1)) - 1 + prev_ref = self.search_references_in_table(index_table, prev_ref, array_of_references, ref_sequence) + text = None + + if text is not None: + prev_ref = self.search_references_in_text(text, prev_ref, array_of_references, ref_sequence) + if ref_sequence: if ref_sequence[0][1] == '0': ref_sequence[0] = ref_sequence[0].replace('[0],', '')