@@ -87,27 +87,44 @@ def check(self):
8787 '''
8888 return answer (False , result_str )
8989
90+ def search_references_in_table (self , index_table : int , prev_ref , array_of_references , ref_sequence ) -> int :
91+ """Функция поиска ссылок в таблицах (ищет в каждой клетке)"""
92+ for cell in self .file .file .tables [index_table ]._cells :
93+ prev_ref = self .search_references_in_text (cell .text , prev_ref , array_of_references , ref_sequence )
94+ return prev_ref
95+
96+ def search_references_in_text (self , text : str , prev_ref , array_of_references , ref_sequence ) -> int :
97+ """Функция поиска ссылок в переданном тексте"""
98+ reg_exp = r'\[[\^]{0,1}[\d \-,]+\]'
99+ detected_references = re .findall (reg_exp , text )
100+ if detected_references :
101+ for reference_raw in detected_references :
102+ reference = reference_raw .replace ('^' , '' ) # TODO: kostyl'...
103+ for one_part in re .split (r'[\[\],]' , reference ):
104+ if re .match (r'\d+[ \-]+\d+' , one_part ):
105+ start , end = re .split (r'[ -]+' , one_part )
106+ for k in range (int (start ), int (end ) + 1 ):
107+ prev_ref = self .add_references (k , prev_ref , array_of_references , ref_sequence )
108+ elif one_part != '' :
109+ prev_ref = self .add_references (int (one_part ), prev_ref , array_of_references , ref_sequence )
110+ return prev_ref
111+
90112 def search_references (self , start_par ):
113+ """Функция поиска ссылок в документе"""
91114 prev_ref = 0
92115 ref_sequence = []
93116 array_of_references = set ()
94- reg_exp = r'\[[\^]{0,1}[\d \-,]+\]' # md can use [^5] format for hyperlink
95117 for i in range (0 , start_par ):
96- if isinstance (self .file .paragraphs [i ], str ):
97- detected_references = re .findall (reg_exp , self .file .paragraphs [i ])
98- else :
99- detected_references = re .findall (reg_exp , self .file .paragraphs [i ].paragraph_text )
100-
101- if detected_references :
102- for reference_raw in detected_references :
103- reference = reference_raw .replace ('^' , '' ) # TODO: kostyl'...
104- for one_part in re .split (r'[\[\],]' , reference ):
105- if re .match (r'\d+[ \-]+\d+' , one_part ):
106- start , end = re .split (r'[ -]+' , one_part )
107- for k in range (int (start ), int (end ) + 1 ):
108- prev_ref = self .add_references (k , prev_ref , array_of_references , ref_sequence )
109- elif one_part != '' :
110- prev_ref = self .add_references (int (one_part ), prev_ref , array_of_references , ref_sequence )
118+ text = self .file .paragraphs [i ] if isinstance (self .file .paragraphs [i ], str ) else self .file .paragraphs [i ].paragraph_text
119+ match = re .search (r'Таблица ([.\d]+)' , text )
120+ if match :
121+ index_table = int (match .group (1 )) - 1
122+ prev_ref = self .search_references_in_table (index_table , prev_ref , array_of_references , ref_sequence )
123+ text = None
124+
125+ if text is not None :
126+ prev_ref = self .search_references_in_text (text , prev_ref , array_of_references , ref_sequence )
127+
111128 if ref_sequence :
112129 if ref_sequence [0 ][1 ] == '0' :
113130 ref_sequence [0 ] = ref_sequence [0 ].replace ('[0],' , '' )
0 commit comments