Manual de Calibre | Page 104

Manual de usuario de calibre, Publicación 2.73.0 <(h[12]) [^<>]* id=['"]([^'"]+)['"][^<>]*>([^<>]+) Ejecutamos la búsqueda sobre Todos los archivos de texto y al final de la búsqueda se abrirá una ventana con «Salida de depuración de la función», que contendrá el índice HTML, listo par copiarlo en toc.html. La función de arriba está muy comentada, así que debe ser fácil de seguir. La principal nueva característica es el uso de un argumento adicional de la función replace(), el objeto data. El objeto data es un diccionario python que sobrevive entre sucesivas llamadas a la función replace() durante una única operación Sustituir todo. Otra característica nueva es el uso de call_after_last_match. Establecerlo en True en la función replace() significa que el editor ejecutará replace() una vez adicional después de haber encontrado todas las coincidencias. En esa ejecución adicional el objeto de coincidencia será None. Esto ha sido sólo una demostración de la potencia del modo de función, si realmente necesita generar un índice a partir de encabezados en un libro, es mejor usar la herramienta específica para índices en Herramientas > Índice. La API para el modo de función Todas las funciones del modo función deben ser funciones python con el nombre «replace» y con la siguiente firma: def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, ˓→**kwargs): return a_string Cuando se realiza una búsqueda y sustitución, la función replace() se ejecuta para cada coincidencia, debe devolver el texto de sustitución para dicha coincidencia. Si no se ha de efectuar ninguna sustitución, debe devolver match.group(), que es el texto original. Los distintos argumentos de la función replace() se documentan a continuación. El argumento match El argumento match representa la coincidencia actual. Es un objeto Match de python35 . Su método más útil es group(), que puede emplearse para obtener el texto correspondiente a los grupos de captura individuales en la expresión regular de búsqueda. El argumento number El argumento number es el número de la coincidencia actual. Al ejecutar Sustituir todo, cada coincidencia sucesiva da lugar a una ejecución de replace(), con un número que va en aumento. La primera coincidencia tiene el número 1. El argumento file_name Éste es el nombre del archivo donde se encontró la coincidencia actual. Al buscar un texto marcado, file_name está vacío. El argumento file_name está en forma canónica: una ruta de acceso relativa a la raíz del libro, usando / como separador. 35 https://docs.python.org/2.7/library/re.html#match-objects 100 Capítulo 1. Secciones