@@ -1074,6 +1074,31 @@ def append_fragment(node_dest, val):
10741074 node_dest .append (child )
10751075
10761076
1077+ def extract_label_and_title (text ):
1078+ """
1079+ Extrae el Label (Figura/Figure/Tabla/Table/Tabela + número) y el Title (resto del texto limpio).
1080+ Ignora mayúsculas y minúsculas y limpia puntuación/espacios entre el número y el título.
1081+ """
1082+ # Acepta Figura/Figure y Tabla/Table/Tabela
1083+ pattern = r'\b(Imagen|Imágen|Image|Imagem|Figura|Figure|Tabla|Table|Tabela)\s+(\d+)\b'
1084+ match = re .search (pattern , text , re .IGNORECASE )
1085+
1086+ if match :
1087+ word = match .group (1 ).capitalize () # Normaliza capitalización
1088+ number = match .group (2 )
1089+ label = f"{ word } { number } "
1090+
1091+ # Texto después del número
1092+ rest = text [match .end ():]
1093+
1094+ # Quita puntuación/espacios iniciales (.,;: guiones, etc.)
1095+ rest_clean = re .sub (r'^[\s\.,;:–—-]+' , '' , rest )
1096+
1097+ return {"label" : label , "title" : rest_clean .strip ()}
1098+ else :
1099+ return {"label" : None , "title" : text .strip ()}
1100+
1101+
10771102def proccess_special_content (text , data_body ):
10781103 # normaliza espacios no separables por si acaso
10791104 text = re .sub (r'[\u00A0\u2007\u202F]' , ' ' , text )
0 commit comments