Reference for all built-in template language functions

Here, we document all the built-in functions available in the calibre template language. Every function is implemented as a class in python and you can click the source links to see the source code, in case the documentation is insufficient. The functions are arranged in logical groups by type.

Aritméticas

add

class calibre.utils.formatter_functions.BuiltinAdd[fuente]

add(x [, y]*) – devuelve la suma de sus argumentos. Da un error si algún argumento no es un número. En la mayoría de los casos puede usarse el operador + en lugar de esta función.

ceiling

class calibre.utils.formatter_functions.BuiltinCeiling[fuente]

ceiling(valor) – devuelve el menor entero que es mayor o igual a valor. Da un error si valor no es un número.

divide

class calibre.utils.formatter_functions.BuiltinDivide[fuente]

divide(x, y) – devuelve x / y. Da un error si x o y no son números. Esta función puede sustituirse a menudo por el operador /.

floor

class calibre.utils.formatter_functions.BuiltinFloor[fuente]

floor(valor) – devuelve el mayor entero que es menor o igual a valor. Da un error si valor no es un número.

fractional_part

class calibre.utils.formatter_functions.BuiltinFractionalPart[fuente]

fractional_part(valor) – devuelve la parte del valor tras el punto decimal. Por ejemplo, fractional_part(3.14) devuelve 0.14. Da un error si valor no es un número.

mod

class calibre.utils.formatter_functions.BuiltinMod[fuente]

mod(valor, y) – devuelve floor del resto de valor / y. Da un error si valor o y no son números.

multiply

class calibre.utils.formatter_functions.BuiltinMultiply[fuente]

multiply(x [, y]*) – devuelve el producto de sus argumentos. Da un error si algún argumento no es un número. Esta función puede sustituirse a menudo por el operador *.

round

class calibre.utils.formatter_functions.BuiltinRound[fuente]

round(valor) – devuelve el entero más cercano a valor. Da un error si valor no es un número.

subtract

class calibre.utils.formatter_functions.BuiltinSubtract[fuente]

subtract(x, y) – devuelve x - y. Da un error si x o y no son números. Esta función puede sustituirse a menudo por el operador -.

Cambio de mayúsculas y minúsculas

capitalize

class calibre.utils.formatter_functions.BuiltinCapitalize[fuente]

capitalize(valor) – devuelve valor con la primera letra mayúscula y el resto en minúsculas.

lowercase

class calibre.utils.formatter_functions.BuiltinLowercase[fuente]

lowercase(valor) – devuelve valor en minúsculas.

titlecase

class calibre.utils.formatter_functions.BuiltinTitlecase[fuente]

titlecase(valor) – devuelve valor con las iniciales en mayúscula.

uppercase

class calibre.utils.formatter_functions.BuiltinUppercase[fuente]

uppercase(valor) – devuelve valor en mayúsculas.

Consulta de listas

identifier_in_list

class calibre.utils.formatter_functions.BuiltinIdentifierInList[fuente]

identifier_in_list(val, nombre_id [, val_encontrado, val_no_encontrado]) – trata val como una lista de identificadores separados por comas. Un identificador tiene el formato nombre_id:valor. El parámetro nombre_id es el texto de nombre de identificador a buscar, ya sea nombre_id o nombre_id:expreg. El primer caso coincide si hay algún identificador con ese nombre. El segundo caso coincide si algún identificador tiene ese nombre y la expresión regular coincide con el valor del identificador. Si se proporcionan val_encontrado y val_no_encontrado, si hay una coincidencia, se devuelve val_encontrado; de lo contrario, se devuelve val_no_encontrado. Si val_encontrado y val_no_encontrado están ausentes, si hay alguna coincidencia, se devuelve el par identificador:valor; de lo contrario, el texto vacío ('').

list_contains

class calibre.utils.formatter_functions.BuiltinInList[fuente]

list_contains(valor, separador, [ patrón, encontrado, ]* no_encontrado) – interpreta valor como una lista de elementos separados por separador y comprueba patrón para cada elemento de la lista. Si patrón coincide con algún elemento, devuelve encontrado, en caso contrario devuelve no_encontrado. La pareja de argumentos patrón y encontrado puede repetirse tantas veces como se desee, lo que permite devolver diferentes valores según el valor del elemento. Los patrones se evalúan en orden y se devuelve la primera coincidencia.

Sinónimos: in_list(), list_contains()

list_item

class calibre.utils.formatter_functions.BuiltinListitem[fuente]

list_item(valor, índice, separador) – interpreta valor como una lista de elementos separados po separador y devuelve el elemento número índice. El primer elemento es el número cero. El último elemento puede obtenerse con list_item(-1, separador). Si el elemento no está en la lista devuelve un texto vacío. El separador tiene el mismo significado que en la función count, normalmente una coma pero es un carácter «&» en listas de tipo autor.

select

class calibre.utils.formatter_functions.BuiltinSelect[fuente]

select(valor, clave) – interpreta valor como una lista de elementos separados por comas, con cada elemento de la forma id:valor_id (el formato de la columna identifier de calibre). La función encuentra la primera pareja con id igual a clave y devuelve el valor_id correspondiente. Si no se encuentra el id la función devuelve un texto vacío.

str_in_list

class calibre.utils.formatter_functions.BuiltinStrInList[fuente]

str_in_list(valor, separador, [ texto, encontrado, ]+ no_encontrado) – interpreta valor como una lista de elementos separados por separador, y compara texto con cada valor de la lista. El argumento texto no es una expresión regular. Si texto es igual a alguno de los valores (sin distinción de mayúsculas y minúsculas), devuelve el correspondiente encontrado. Si texto contiene separador, se interpreta también como una lista y se compara cada subvalor. La pareja de argumentos texto y encontrado puede repetirse tantas veces como se desee, lo que permite devolver diferentes valores según el valor de texto. Los textos se comparan en orden. Se devuelve la primera coincidencia.

Formato de valores

finish_formatting

class calibre.utils.formatter_functions.BuiltinFinishFormatting[fuente]

finish_formatting(valor, formato, prefijo, sufijo) – aplica el formato, prefijo y sufijo a valor de la misma manera que se haría en una plantilla como {series_index:05.2f| - |- }. Esta función se proporciona para facilitar la conversión de plantillas complejas en modo de función única o de plantilla a plantillas MPG. Por ejemplo, el siguiente programa produce la misma salida que la plantilla anterior:

program: finish_formatting(field("series_index"), "05.2f", " - ", " - ")

Otro ejemplo: para la plantilla:

{series:re(([^\s])[^\s]+(\s|$),\1)}{series_index:0>2s| - | - }{title}

se puede usar:

program:
    strcat(
        re(field('series'), '([^\s])[^\s]+(\s|$)', '\1'),
        finish_formatting(field('series_index'), '0>2s', ' - ', ' - '),
        field('title')
    )

format_date

class calibre.utils.formatter_functions.BuiltinFormatDate[fuente]

format_date(valor, texto_formato) – da formato a valor, que debe ser un campo de fecha, según texto_formato y devuelve un texto. Lo mejor es que la fecha esté en formato ISO, ya que el uso de otros formatos a menudo causa errores debido a que la fecha no puede determinarse sin ambigüedades. Tenga en cuenta que la función format_date_field() es más rápida y más fiable.

Los códigos de formato son:

  • d    : el día como un número, sin cero inicial (de 1 a 31).

  • dd   : el día como un número, con un cero inicial si es necesario (de 01 a 31).

  • ddd  : el día de la semana abreviado según el idioma local (p. ej. de «lun» a «dom»).

  • dddd : el nombre local completo del día de la semana (p. ej. de «lunes» a «domingo»).

  • M    : el mes como un número sin cero inicial (de 1 a 12).

  • MM   : el mes como un número, con un cero inicial si es necesario (de 01 a 12).

  • MMM  : el mes abreviado según el idioma local (p. ej. de «ene» a «dic»).

  • MMMM : el nombre local completo del mes (p. ej. de «enero» a «diciembre»).

  • yy   : el año como un número de dos cifras (de 00 a 99). ­

  • yyyy : el año como un número de cuatro cifras.

  • h    : la hora sin cero inicial (de 0 a 11 o de 0 a 23, según am/pm).

  • hh   : la hora con un cero inicial si es necesario (de 00 a 11 o de 00 a 23, según am/pm).

  • m    : los minutos sin cero inicial (de 0 a 59).

  • mm   : los minutos con un cero inicial si es necesaro (de 00 a 59).

  • s    : los segundos sin cero inicial (de 0 a 59).

  • ss   : los segundos con un cero inicial si es necesario (de 00 a 59).

  • ap   : se escribe la hora en formato de 12 horas en lugar de 24, con «ap» sustituido por la forma local para am o pm.

  • AP   : se escribe la hora en formato de 12 horas en lugar de 24, con «AP» sustituido por la forma local para AM o PM.

  • iso  : la fecha con hora y zona horaria. Debe ser el único formato presente.

  • to_number   : convierte la fecha y la hora a un número decimal (un «código de tiempo»).

  • from_number : convierte un número decimal (un «código de tiempo») a una fecha con formato ISO. Si desea un formato de fecha diferente, añada el texto de formato después de from_number y dos puntos (:). Ejemplo:

    format_date(valor, 'from_number:MMM dd yyyy')
    

Puede arrojar resultados inesperados si la fecha a la que se está dando formato contiene meses en forma local, lo que puede ocurrir si se cambia el formato de fecha para que contenga MMMM. El uso de format_date_field() evita este problema.

format_date_field

class calibre.utils.formatter_functions.BuiltinFormatDateField[fuente]

format_date_field(nombre_campo, texto_formato) – da formato al valor en el campo nombre_campo, que debe ser el nombre de búsqueda de un campo de fecha, ya sea estándar o personalizado. Ver format_date() para los códigos de formato. Esta función es mucho más rápida que format_date() y debe usarse cuando se esté dando formato al valor en un campo (columna). Es también más fiable porque opera directamente sobre la fecha. No puede usarse con fechas calculadas o variables de texto. Ejemplos:

format_date_field('pubdate', 'yyyy.MM.dd')
format_date_field('#date_read', 'MMM dd, yyyy')

format_number

class calibre.utils.formatter_functions.BuiltinFormatNumber[fuente]

format_number(valor, plantilla) – interpreta valor como un número y le da formato usando una plantilla de formato de Python como {0:5.2f} o {0:,d} o ${0:5,.2f}. La plantilla de formato debe empezar por {0: y terminar por }, como en los ejemplos anteriores. Excepción: puede omitir el {0: inicial y el } final si la plantilla de formato contiene sólo un formato. Véase la documentación del lenguaje de plantillas y de Python para más ejemplos. Devuelve un texto vacío si el formato falla.

human_readable

class calibre.utils.formatter_functions.BuiltinHumanReadable[fuente]

human_readable(valor) – espera que valor sea un número y devuelve un texto que representa ese número en KB, MB, GB, etc.

rating_to_stars

class calibre.utils.formatter_functions.BuiltinRatingToStars[fuente]

rating_to_stars(valor, usar_media_estrella) – Devuelve valor como una serie de caracteres de estrella (). valor debe ser un número entre 0 y 5. Ponga usar_media_estrella a 1 si quiere caracteres de media estrella para números fraccionarios, disponibles con columnas personalizadas de calificación.

urls_from_identifiers

class calibre.utils.formatter_functions.BuiltinUrlsFromIdentifiers[fuente]

urls_from_identifiers(identificadores, ordenar_resultado) – dada una lista de identificadores separados por comas, donde cada identificador es un par de valores separados por dos puntos (nombre_id:valor_id), devuelve una lista de URL HTML separados por comas, generados a partir de los identificadores. La lista no está ordenada si ordenar_resultado es 0 (carácter o número), en caso contrario se ordena alfabéticamente según el nombre del identificador. Los URL se generan de la misma manera que la columna predefinida de identificadores cuando se muestra en los detalles del libro.

Funciones de base de datos

book_count

class calibre.utils.formatter_functions.BuiltinBookCount[fuente]

book_count(consulta, usar_bv) – devuelve el número de libros encontrados al buscar consulta. Si usar_bv es 0 (cero), no se tienen en cuenta las bibliotecas virtuales. Esta función y su complemento book_values() son especialmente útiles en búsquedas de plantilla, permitiendo búsquedas que combinan la información de varios libros, como buscar series con un solo libro. No puede usarse en columnas compuestas, a no ser que que el ajuste allow_template_database_functions_in_composites sea True. Sólo puede usarse en la interfaz gráfica.

Por ejemplo, esta búsqueda de plantilla usa esta función y su complemento para encontrar todas las series con un solo libro:

  • Definir una plantilla guardada (usando Preferencias > Avanzado > Funciones de plantilla) llamada series_un_solo_libro (el nombre es arbitrario). La plantilla es:

    program:
        vals = globals(vals='');
        if !vals then
            all_series = book_values('series', 'series:true', ',', 0);
            for series in all_series:
                if book_count('series:="' & series & '"', 0) == 1 then
                    vals = list_join(',', vals, ',', series, ',')
                fi
            rof;
            set_globals(vals)
        fi;
        str_in_list(vals, ',', $series, 1, '')
    

    La primera vez que se ejecuta la plantilla (el primer libro que se comprueba) almacena los resultados de la búsqueda de la base de daos en una variable de plantilla global llamada vals. Estos resultados se usan para comprobar los siguientes libros sin volver a realizar la búsqueda.

  • Usar la plantilla guardada en una búsqueda de plantilla:

    template:"program: series_un_solo_libro()#@#:n:1"
    

    Al usar una plantilla guardada en lugar de poner la plantilla en la búsqueda se eliminan los problemas causados por la necesidad de escapar las comillas en las expresiones de búsqueda.

book_values

class calibre.utils.formatter_functions.BuiltinBookValues[fuente]

book_values(columna, consulta, sep, usar_bv) – devuelve una lista de valores únicos contenidos en la columna columna (un nombre de consulta), separados por sep, de los libros encontrados al buscar consulta. Si usar_bv es 0 (cero), no se tienen en cuenta las bibliotecas virtuales. Esta función y su complemento book_count() son especialmente útiles en búsquedas de plantilla, permitiendo búsquedas que combinan la información de varios libros, como buscar series con un solo libro. No puede usarse en columnas compuestas, a no ser que que el ajuste allow_template_database_functions_in_composites sea True. Sólo puede usarse en la interfaz gráfica.

extra_file_modtime

class calibre.utils.formatter_functions.BuiltinExtraFileModtime[fuente]

extra_file_modtime(nombre_archivo, texto_formato) – devuelve la fecha (y hora) de modificación del archivo adicional nombre_archivo en la carpeta data/ del libro si existe, o -1 en caso contrario. El formato de la fecha se especifica en texto_formato (ver format_date() para más detalles). Si texto_formato es un texto vacío, devuelve la fecha de modificación como un número real de segundos desde el inicio de la época. Ver también las funciones has_extra_files(), extra_file_names() y extra_file_size(). El inicio de la época depende del sistema operativo. Esta función sólo puede usarse en la interfaz gráfica.

extra_file_names

class calibre.utils.formatter_functions.BuiltinExtraFileNames[fuente]

extra_file_names(sep [, patrón]) – devuelve una lista separada por sep de archivos adicionales en la carpeta data/ del libro. Si el argumento opcional patrón (una expresión regular) está presente, la lista contiene sólo archivos que coinciden con patrón. La coincidencia no distingue mayúsculas y minúsculas. Ver también las funciones has_extra_files(), extra_file_modtime() y extra_file_size(). Esta función sólo puede usarse en la interfaz gráfica.

extra_file_size

class calibre.utils.formatter_functions.BuiltinExtraFileSize[fuente]

extra_file_size(nombre_archivo) – devuelve el tamaño en bytes del archivo adicional nombre_archivo en la carpeta data/ del libro si existe, o -1 en caso contrario. Ver también las funciones has_extra_files(), extra_file_names() y extra­_file_modtime(). Esta función sólo puede usarse en la interfaz gráfica.

get_note

class calibre.utils.formatter_functions.BuiltinGetNote[fuente]

get_note(nombre_campo, valor_campo, texto) – obtiene la nota para el campo nombre_campo con el valor valor_campo. Si texto está vacío, devuelve el HTML de la nota, incluyendo imágenes. Si texto es 1 (o '1'), devuelve el texto plano de la nota. Si la nota no existe, devuelve un texto vacío en ambos casos. Ejemplo:

  • Devuelve el HTML de la nota adjunta a la etiqueta «Ficción»:

    program:
        get_note('tags', 'Ficción', '')
    
  • Devuelve el texto plano de la nota adjunta al autor «Isaac Asimov»:

    program:
        get_note('authors', 'Isaac Asimov', 1)
    

has_extra_files

class calibre.utils.formatter_functions.BuiltinHasExtraFiles[fuente]

has_extra_files([patrón]) devuelve el número de archivos adicionales o '' (un texto vacío). Si el argumento opcional patrón (una expresión regular) está presente, sólo se cuentan archivos que coinciden con patrón. La coincidencia no distingue mayúsculas y minúsculas. Ver también las funciones extra_file_names(), extra_file_modtime() y extra_file_size(). Esta función sólo puede usarse en la interfaz gráfica.

has_note

class calibre.utils.formatter_functions.BuiltinHasNote[fuente]

has_note(nombre_campo, valor_campo). Comprueba si el campo tiene una nota. Esta función tiene dos variantes:

  • Si valor_campo no es '' (un texto vacío), devuelve '1' si el valor valor_campo en el campo nombre_campo tiene una nota adjunta, en caso contrario devuelve ''.

    Ejemplo: has_note('tags', 'Ficción') devuelve '1' si la etiqueta «Ficción» tiene una nota adjunta, en caso contrario devuelve ''.

  • Si valor_campo es '', devuelve una lista de los valores de nombre_campo que tienen una nota. Si ningún elemento del campo tiene una nota, devuelve ''. Esta variante es útil para mostrar iconos de columna si algún valor del campo, y no un valor específico, tiene una nota.

    Ejemplo: has_note('authors', '') devuelve una lista de autores que tienen notas, o '' si ninguno la tiene.

También puede comprobar si todos los valores de nombre_campo tienen una nota comparando la longitud de la lista que devuelve esta función con la longitud de la lista de los valores de nombre_campo. Ejemplo:

list_count(has_note('authors', ''), '&') ==# list_count_field('authors')

Funciones de fecha

date_arithmetic

class calibre.utils.formatter_functions.BuiltinDateArithmetic[fuente]

date_arithmetic(valor, cálculo, fmt) – calcula una nueva fecha a partir de valor usando cálculo. Devuelve la nueva fecha con el formato opcional fmt: si no se proporciona, el resultado estará en formato ISO. El argumento cálculo es un texto formado por pares vQ (valorQué) donde v es un número que puede ser negativo y Q es una de las letras siguientes:

  • s añade v segundos a fecha

  • m: añade v minutos a fecha

  • h: añade v horas a fecha

  • d: añade v días a fecha

  • w: añade v semanas a fecha

  • y: añade v años a fecha, donde un año son 365 días

Ejemplo: '1s3d-1m' añade 1 segundo, añade 3 días y resta 1 minuto a fecha.

days_between

class calibre.utils.formatter_functions.BuiltinDaysBetween[fuente]

days_between(fecha1, fecha2) – devuelve el número de días entre fecha1 y fecha2. El número es positivo si fecha1 es posterior a fecha2, en caso contrario es negativo. Si fecha1 o fecha2 no son fechas, la función devuelve un texto vacío.

today

class calibre.utils.formatter_functions.BuiltinToday[fuente]

today() – devuelve un texto para la fecha y hora de hoy (ahora). Este valor está preparado para usarse con format_date() o days_between(), pero puede manipularse como cualquier otro texto. La fecha está en formato ISO.

Iteración sobre valores

first_non_empty

class calibre.utils.formatter_functions.BuiltinFirstNonEmpty[fuente]

first_non_empty(valor [, valor]*) – devuelve el primer valor que no esté vacío. Si todos los valores están vacíos, se devuelve también un texto vacío. Puede incluir tantos valores como quiera.

lookup

class calibre.utils.formatter_functions.BuiltinLookup[fuente]

lookup(valor, [ patrón, clave, ]* clave_alternativa) – Cada patrón se compara con valor en orden. Si un patrón coincide, se devuelve el valor del campo indicado por clave. Si no coincide ningún patrón, se devuelve el valor del campo indicado por clave_alternativa. Véase también la función switch().

switch

class calibre.utils.formatter_functions.BuiltinSwitch[fuente]

switch(valor, [patrónN, valorN,]+ otro_valor) – para cada pareja patrónN, valorN, comprueba si valor coincide con la expresión regular patrónN y, en tal caso, devuelve el valorN asociado. Si no coincide ningún patrónN, devuelve otro_valor. Pueden emplearse tantas parejas patrónN, valN como se desee. Se devuelve la primera coincidencia.

switch_if

class calibre.utils.formatter_functions.BuiltinSwitchIf[fuente]

switch_if([expresión_de prueba, expresión_de_valor,]+ otra_expresión) – para cada par expresión_de_prueba, expresión_de_valor, comprueba si expresión_de_prueba es True (no vacía) y, de ser así, devuelve el resultado de expresión_de_valor. Si ninguna expresión_de_prueba es True, se devuelve el resultado de otra_expresión. Puede haber tantos pares expresión_de_prueba, expresión_de_valor como se desee.

Lógicas

and

class calibre.utils.formatter_functions.BuiltinAnd[fuente]

and(valor [, valor]*) – devuelve el texto '1' si todos los valores son no vacíos, en caso contrario devuelve un texto vacío. Pueden usarse tantos valores como se desee. En la mayoría de los casos se puede usar el operador && en lugar de esta función. Un motivo para no sustituir and() por && es cuando la evaluación en cortocircuito puede cambiar el resultado debido a los efectos secundarios. Por ejemplo, and(a='',b=5) realizará las dos asignaciones, mientra que el operador && no realizará la segunda.

not

class calibre.utils.formatter_functions.BuiltinNot[fuente]

not(valor) – devuelve el texto '1' si el valor está vacío, en caso contrario, devuelve un texto vacío. Esta función puede sustituirse a menudo por el operador de negación unario (!).

or

class calibre.utils.formatter_functions.BuiltinOr[fuente]

or(valor [, valor]*) – devuelve el texto '1' si alguno de los valores no está vacío, en caso contrario, devuelve un texto vacío. Pueden incluirse tantos valores como se desee. Esta función puede sustituirse a menudo por el operador ||. Un motivo para no sustituirla es si la evaluación en cortocircuito puede cambiar los resultados debido a efectos secundarios.

Manipulación de listas

list_count

class calibre.utils.formatter_functions.BuiltinCount[fuente]

list_count(valor, separador) – interpreta el valor como una lista de elementos separados por separador y devuelve el número de elementos de la lista. La mayoría de las listas usan una coma como separador, pero authors usa un carácter «&».

Ejemplos: {tags:list_count(,)}, {authors,list_count(&)}.

Sinónimos: count(), list_count()

list_count_field

class calibre.utils.formatter_functions.BuiltinFieldListCount[fuente]

list_count_field(nombre_búsqueda) – devuelve el número de elementos en el campo con el nombre de búsqueda nombre_búsqueda. El campo debe tener varios valores, como authors o tags, de lo contrario, la función genera un error. Esta función es mucho más rápida que list_count() porque opera directamente sobre los datos de calibre sin convertirlos primero a texto. Ejemplo: list_count_field('tags').

list_count_matching

class calibre.utils.formatter_functions.BuiltinListCountMatching[fuente]

TRANSLATION INVALID

list_difference

class calibre.utils.formatter_functions.BuiltinListDifference[fuente]

list_difference(lista1, lista2, separador) – devuelve una lista construida eliminando de lista1 cualquier elemento que aparezca en lista2, sin distinguir mayúsculas y minúsculas. Los elementos de lista1 y lista2 están separados por separador, así como los de la lista resultante.

list_equals

class calibre.utils.formatter_functions.BuiltinListEquals[fuente]

list_equals(lista1, sep1, lista2, sep2, val_sí, val_no) – devuelve val_sí si lista1 y lista2 contienen los mismos elementos, en caso contrario devuelve val_no. Los elementos se determinan dividiendo cada lista por el correspondiente carácter separador (sep1 o sep2). El orden de los elementos no es relevante. La comparación no distingue mayúsculas y minúsculas.

list_intersection

class calibre.utils.formatter_functions.BuiltinListIntersection[fuente]

list_intersection(lista1, lista2, separador) – devuelve una lista construida eliminando de lista1 cualquier elemento que no aparezca en lista2, sin distinguir mayúsculas y minúsculas. Los elementos de lista1 y lista2 están separados por separador, así como los de la lista resultante.

list_join

class calibre.utils.formatter_functions.BuiltinListJoin[fuente]

list_join(con_separador, lista1, separador1 [, lista2, separador2]*) – devuelve una lista formada por unión de los elementos en las listas de origen (lista1, etc.) usando con_separador entre los elementos de la lista resultante. Los elementos de cada lista de origen lista[123...] están separador por el correspondiente separador[123...]. Una lista puede contener cero elementos. Puede ser un campo como publisher que contiene un solo valor, una lista de un elemento en la práctica. Los duplicados se eliminan sin distinción de mayúsculas y minúsculas. Los elementos se devuelven en el orden en que aparecen en las listas de origen. Si los elementos difieren sólo en mayúsculas y minúsculas, se usa la última aparición. Todos los separadores pueden ser de más de un carácter. Ejemplo:

program:
    list_join('#@#', $authors, '&', $tags, ',')

Puede usar list_join() sobre los resultados de ejecuciones previas de list_join() de la siguiente manera:

program:
    a = list_join('#@#', $authors, '&', $tags, ',');
    b = list_join('#@#', a, '#@#', $#genre, ',', $#people, '&')

Puede usar expresiones para generar una lista. Por ejemplo, supongamos que quiere los elementos de authors y #genero, pero con estos últimos reemplazados por la palabra «Género: » seguida de la primera letra del elemento, es decir con «Ficción» convertido en «Género: F». Esto se consigue con lo siguiente:

program:
    list_join('#@#', $authors, '&', list_re($#genero, ',', '^(.).*$', 'Género: \1'), ',')

list_re

class calibre.utils.formatter_functions.BuiltinListRe[fuente]

list_re(lista_orig, separador, incluir, sust_opc) – construye una lista separando primero lista_orig en elementos usando el carácter separador. Para cada elemento en la lista, comprueba si coincide con la expresión regular incluir. Si coincide, se añade a la lista final. Si sust_opc no es un texto vacío, se aplica la sustitución antes de añadir el elemento a la lista final.

list_re_group

class calibre.utils.formatter_functions.BuiltinListReGroup[fuente]

list_re_group(lista_orig, separador, incluir, búsqueda [, plantilla_grupo]*) – como list_re(), pero las sustituciones no son opcionales. Usa re_group(elemento, búsqueda, plantilla_grupo ...) para hacer sustituciones.

list_remove_duplicates

class calibre.utils.formatter_functions.BuiltinListRemoveDuplicates[fuente]

list_remove_duplicates(lista, separador) – devuelve una lista construida por eliminación de los duplicados en lista. No distingue mayúsculas y minúsculas, se mantiene la última versión. Los elementos de lista están separados por separador, así como los de la lista resultante.

list_sort

class calibre.utils.formatter_functions.BuiltinListSort[fuente]

list_sort(valor, dirección, separador) – devuelve la lista valor ordenada lexicográficamente sin distinción de mayúsculas y minúsculas. Si dirección es cero (número o carácter), la lista se ordena de manera ascendente, en caso contrario, de manera descendente. Los elementos de valor están separados por separador, así como los de la lista resultante.

list_split

class calibre.utils.formatter_functions.BuiltinListSplit[fuente]

list_split(lista, sep, prefijo_id) – divide la lista``lista`` en valores separados por sep y asigna los valores a variables con nombre prefijo_id_N, donde N es la posición del valor en la lista. El primer elemento tiene posición 0 (cero). La función devuelve el último elemento de la lista.

Ejemplo:

list_split('uno:dos:bla', ':', 'var')

es equivalente a:

var_0 = 'uno';
    var_1 = 'dos';
    var_2 = 'bla'

list_union

class calibre.utils.formatter_functions.BuiltinListUnion[fuente]

list_union(lista1, lista2, separador) – devuelve una lista construida por combinación de los elementos en lista1 y lista2, eliminando los duplicados de lista2 (no distingue mayúsculas y minúsculas, se mantiene la versión de lista1). Los elementos de lista1 y lista2 están separados por separador, así como los de la lista resultante. Sinónimos: merge_list(), list_union()

range

class calibre.utils.formatter_functions.BuiltinRange[fuente]

range(inicio, fin, paso, límite) – devuelve una lista de números generados por iteración en el intervalo especificado por los argumentos inicio, fin y paso, con una longitud máxima de límite. El primer elemento generado es inicio. Los valores siguientes son valor_sig = valor_act + paso. El proceso continúa mientras valor_sig < fin, suponiendo que paso sea positivo, en caso contrario mientras valor_sig > fin. Si inicio no cumple la condición, es decir si inicio >= fin (en caso de que paso sea positivo), se devuelve una lista vacía. El límite establece la longitud máxima de la lista y tiene un valor predeterminado de 1000. Los argumentos inicio, paso y límite son opcionales. Si se ejecuta range() con un argumento, se interpreta como fin. Dos argumentos especifican inicio y fin. Tres argumentos especifican inicio, fin y paso. Cuatro argumentos especifican inicio, fin, paso y límite.

Ejemplos:

range(5) -> '0,1,2,3,4'
range(0,5) -> '0,1,2,3,4'
range(-1,5) -> '-1,0,1,2,3,4'
range(1,5) -> '1,2,3,4'
range(1,5,2) -> '1,3'
range(1,5,2,5) -> '1,3'
range(1,5,2,1) -> error(límite superado).

subitems

class calibre.utils.formatter_functions.BuiltinSubitems[fuente]

subitems(valor, índice_inicio, índice_fin) – Esta función separa listas de elementos jerárquicos de tipo etiqueta, tales como los géneros. Interpreta valor como una lista de elementos separados por comas, donde cada elemento es a su vez una lista de elementos separados por puntos. Devuelve una nueva lista formada tomando de cada elemento los componentes entre las posiciones índice_inicio e índice_fin y combinando los resultados. Se eliminan los duplicados. El primer subelemento de cada lista separada por puntos ocupa la posición cero. Si un índice es negativo, se cuenta desde el final de la lista. Como caso especial, si índice_fin es cero, se considera que es el final de la lista.

Ejemplos:

  • Suponiendo que la columna #genero contiene «A.B.C»:

    • {#genero:subitems(0,1)} devuelve «A»

    • {#genero:subitems(0,2)} devuelve «A.B»

    • {#genero:subitems(1,0)} devuelve «B.C»

  • Suponiendo que la columna #genero contiene «A.B.C, D.E»:

    • {#genero:subitems(0,1)} devuelve «A, D»

    • {#genero:subitems(0,2)} devuelve «A.B, D.E»

sublist

class calibre.utils.formatter_functions.BuiltinSublist[fuente]

sublist(valor, índice_inicio, índice_fin, separador) – interpreta valor como una lista de elementos separados por separador y devuelve una nueva lista con los elementos comprendidos entre la posición índice_inicio e índice_fin. El primer elemento ocupa la posición cero. Si un índice es negativo, se cuenta desde el final de la lista. Como caso especial, si índice_fin es cero, se considera que es el final de la lista. Ejemplos suponiendo que la columna de etiquetas (definida como valores separados por comas) contiene «A, B, C»:

  • {tags:sublist(0,1,\,)} devuelve «A»

  • {tags:sublist(-1,0,\,)} devuelve «C»

  • {tags:sublist(0,-1,\,)} devuelve «A, B»

Manipulación de textos

character

class calibre.utils.formatter_functions.BuiltinCharacter[fuente]

character(nombre_carácter) – devuelve el carácter con nombre nombre_carácter. Por ejemplo, character('newline') devuelve un carácter de salto de línea ('\n'”). Los nombres de carácter admitidos son newline (salto de línea), return (retorno de carro), tab (tabulación) y backslash (barra invertida).

check_yes_no

class calibre.utils.formatter_functions.BuiltinCheckYesNo[fuente]

check_yes_no(nombre_de_campo, no_definido, es_false, es_true) – comprueba si el valor del campo de tipo sí o no identificado por la clave de búsqueda nombre_de campo coincide con el valor especificado en los parámetros. Devuelve 'Yes' si coincide, y un texto vació en caso contrario. Establezca el parámetro no_definido, es_false o es_true a 1 (el número) para comprobar dicha condición, en caso contrario establézcalos a 0.

Ejemplo: check_yes_no("#bool", 1, 0, 1) devuelve 'Yes' si el campo de tipo sí o no #bool es True o no está definido (no es ni True ni False).

Más de uno de no_definido, es_false y es_true puede ser 1.

contains

class calibre.utils.formatter_functions.BuiltinContains[fuente]

contains(valor, patrón, texto_si_coincide, texto_si_no_coincide) – comprueba si valor coincide con la expresión regular patrón. Devuelve texto_si_coincide si el patrón coincide con el valor, en caso contrario devuelve texto_si_no_coincide.

field_exists

class calibre.utils.formatter_functions.BuiltinFieldExists[fuente]

field_exists(nombre_búsqueda) – comprueba si existe un campo (columna) con el nombre de búsqueda nombre_búsqueda, devuelve '1' si es así y un texto vacío si no.

ifempty

class calibre.utils.formatter_functions.BuiltinIfempty[fuente]

ifempty(valor, texto_si_vacío) – si valor no está vacío, devuelve dicho valor, en caso contrario devuelve texto_si_vacío.

re

class calibre.utils.formatter_functions.BuiltinRe[fuente]

re(valor, patrón, sustitución) – devuelve valor después de aplicar la expresión regular. Todas las veces que aparezca patrón en el valor se sustituirá por sustitución. El lenguaje de plantillas usa expresiones regulares de Python, sin distinguir mayúsculas y minúsculas.

re_group

class calibre.utils.formatter_functions.BuiltinReGroup[fuente]

re_group(valor, patrón [, plantilla_para_grupo]*) – devuelve un texto formado por aplicación de la expresión regular patrón a valor, sustituyendo cada coincidencia con el texto devuelto por la correspondiente plantilla. En el modo de programación de plantillas, como en las funciones template y eval, debe usarse [[ en lugar de { y ]] en lugar de }.

El siguiente ejemplo busca un nombre de serie con más de una palabra y pone la primera palabra en mayúsculas:

program: re_group(field('series'), "(\S* )(.*)", "{$:uppercase()}", "{$}")'}

shorten

class calibre.utils.formatter_functions.BuiltinShorten[fuente]

shorten(valor, car_izq, texto_medio, car_der) – devuelve una versión abreviada valor, consistente en un número car_izq de caracteres del principio de valor, seguidos de texto_medio, seguido de un número car_der de caracteres del final de valor. car_izq y car_der deben ser números enteros no negativos.

Ejemplo, supongamos que quiere mostrar el título con una longitud máxima de 15 caracteres. Una plantilla que hace esto es {title:shorten(9,-,5)}. Para un libro con el título Novísima recopilación de las leyes de España el resultado será Novísima -spaña: los primeros 9 caracteres del título, un - y los últimos 5 caracteres. Si la longitud del valor es menor que car_izq + car_der + la longitud de texto_medio, se usará el valor intacto. Por ejemplo, el título La colmena no se cambiará.

strcat

class calibre.utils.formatter_functions.BuiltinStrcat[fuente]

strcat(a [, b]*) – devuelve un texto formado por concatenación de todos los argumentos. Puede tomar cualquier número de argumentos. En la mayoría de los casos puede usarse el operador & en lugar de esta función.

strcat_max

class calibre.utils.formatter_functions.BuiltinStrcatMax[fuente]

strcat_max(máx, texto1 [, prefijo2, texto2]*) – devuelve un texto formado por concatenación de los argumentos. El valor devuelto es inicialmente texto1. Se van añadiendo textos formados por parejas prefijo, texto al final del valor mientras la longitud del resultado sea menor que máx. Los prefijos pueden estar vacíos. El resultado es siempre al menos texto1, aunque su longitud sea mayor que máx. Pueden especificarse tantas parejas prefijo, texto como se desee.

strlen

class calibre.utils.formatter_functions.BuiltinStrlen[fuente]

strlen(valor) – Devuelve la longitud del texto valor.

substr

class calibre.utils.formatter_functions.BuiltinSubstr[fuente]

substr(valor, inicio, fin) – devuelve los caracteres entre la posición inicio y fin de valor. El primer carácter de valor está en la posición cero. Si fin es negativo, entonces indica la posición contando desde la derecha. Si fin es cero, indica el último carácter. Por ejemplo, substr('12345', 1, 0) devuelve '2345', y substr('12345', 1, -1) devuelve '234'.

swap_around_articles

class calibre.utils.formatter_functions.BuiltinSwapAroundArticles[fuente]

swap_around_articles(valor, separador) – devuelve valor con los artículos puestos al final. valor puede ser una lista, en cuyo caso se procesará cada elemento de la lista. Si valor es una lista, debe proporcionar el separador de los elementos de la lista. Si no se proporciona ningún separador, valor se trata como un único valor, no una lista. Los «artículos» son los que calibre usa para generar el orden de título.

swap_around_comma

class calibre.utils.formatter_functions.BuiltinSwapAroundComma[fuente]

swap_around_comma(valor) – dado un valor de la forma B, A, devuelve A B. Esto es útil para convertir nombres en formato APELLIDO, NOMBRE a NOMBRE APELLIDO. Si no hay ninguna coma en valor, la función devuelve valor sin cambios.

test

class calibre.utils.formatter_functions.BuiltinTest[fuente]

test(valor, texto_si_no_vacío, texto_si_vacío) – devuelve texto_si_no_vacío si valor no está vacío, devuelve texto_si_vacío en caso contrario.

to_hex

class calibre.utils.formatter_functions.BuiltinToHex[fuente]

to_hex(valor) – devuelve el texto valor codificado en hexadecimal. Esto es útil al construir URL de calibre.

transliterate

class calibre.utils.formatter_functions.BuiltinTransliterate[fuente]

transliterate(valor) – Devuelve un texto en el alfabeto latino formado por aproximación del sonido de las palabras en valor. Por ejemplo, si valor es Фёдор Миха́йлович Достоевский la función devuelve Fiodor Mikhailovich Dostoievskii.

Obtención de valores de metadatos

annotation_count

class calibre.utils.formatter_functions.BuiltinAnnotationCount[fuente]

annotation_count() – devuelve el número total de anotaciones de todos los tipos en el libro actual. Esta función sólo funciona en la interfaz gráfica.

approximate_formats

class calibre.utils.formatter_functions.BuiltinApproximateFormats[fuente]

approximate_formats() – devuelve una lista separada por comas de formatos que en algún momento estuvieron asociados con el libro. Dado que la lista viene de la base de datos de calibre y no del sistema de archivos, no hay garantía de que esta lista sea correcta, aunque probablemente lo sea. Tenga en cuenta que los nombres de formato están siempre en mayúsculas, como en «EPUB». La funcion``approximate_formats()`` es mucho más rápida que las funciones formats_....

Esta función funciona sólo en la interfaz gráfica. Si quiere usar estos valores en las plantillas para guardar en el disco o enviar al dispositivo, debe crear una columna personalizada de tipo «Columna generada a partir de otras columnas», usar la función en la plantilla de dicha columna y usar el valor de la columna en las plantillas para guardar o enviar.

author_sorts

class calibre.utils.formatter_functions.BuiltinAuthorSorts[fuente]

author_sorts(separador) – devuelve un texto que contiene la lista de valores de orden de autor para los autores del libro. El orden de autor es el que figura en los metadatos de información autores (diferente del valor de orden de autor del libro). La lista devuelta es de la forma orden_de_autor_1 separador orden_de_autor_2, etc. Los valores de orden de autor en la lista están en el mismo orden que los autores del libro. Si quiere espacios alrededor de separador, inclúyalos en el valor de separador.

booksize

class calibre.utils.formatter_functions.BuiltinBooksize[fuente]

booksize() – devuelve el valor del campo de calibre size (tamaño). Devuelve '' si el libro no tiene formatos.

Esta función funciona sólo en la interfaz gráfica. Si quiere usar estos valores en las plantillas para guardar en el disco o enviar al dispositivo, debe crear una columna personalizada de tipo «Columna generada a partir de otras columnas», usar la función en la plantilla de dicha columna y usar el valor de la columna en las plantillas para guardar o enviar

connected_device_name

class calibre.utils.formatter_functions.BuiltinConnectedDeviceName[fuente]

connected_device_name(ubicación_de_almacenamiento) – si hay un dispositivo conectado, devuelve el nombre del dispositivo, en caso contrario devuelve un texto vacío. Cada ubicación de almacenamiento de un dispositivo tiene un nombre diferente. Los nombres de ubicación_de_almacenamiento son 'main', 'carda' y 'cardb'. Esta función sólo está disponible en la interfaz gráfica.

connected_device_uuid

class calibre.utils.formatter_functions.BuiltinConnectedDeviceUUID[fuente]

connected_device_uuid(ubicación_de_almacenamiento) – si un dispositivo está conectado, entonces devuelve el uuid (identificador único) del dispositivo, de lo contrario devuelve un texto vacío. Cada ubicación de almacenamiento de un dispositivo tiene un uuid diferente. Los nombres de ubicación_de_almacenamiento son 'main', 'carda' y 'cardb'. Esta función sólo está disponible en la interfaz gráfica.

current_library_name

class calibre.utils.formatter_functions.BuiltinCurrentLibraryName[fuente]

current_library_name() – devuelve la última parte de la ruta a la biblioteca de calibre actual.

current_library_path

class calibre.utils.formatter_functions.BuiltinCurrentLibraryPath[fuente]

current_library_path() – devuelve la ruta completa a la biblioteca de calibre actual.

current_virtual_library_name

class calibre.utils.formatter_functions.BuiltinCurrentVirtualLibraryName[fuente]

current_virtual_library_name() – devuelve el nombre de la biblioteca virtual actual si hay alguna, en caso contrario devuelve un texto vacío. Se conservan mayúsculas y minúsculas. Ejemplo:

program: current_virtual_library_name()``

Esta función sólo funciona en la interfaz gráfica.

field

class calibre.utils.formatter_functions.BuiltinField[fuente]

field(nombre_de_búsqueda) – devuelve el campo de metadatos identificado por nombre_de_búsqueda. Puede usarse el prefijo $ en lugar de la función, como en $tags.

formats_modtimes

class calibre.utils.formatter_functions.BuiltinFormatsModtimes[fuente]

formats_modtimes(formato_fecha) – devuelve una lista separada por comas de elementos separados por dos puntos (FMT:FECHA) que contienan las fechas de modificación para los formatos de un libro. El argumento formato_fecha especifica cómo se da formato a la fecha. Véase la función format_date() para más detalles. Puede usar la función select() para obtener la fecha de modificación de un formato específico. Tenga en cuenta que los nombres de formato siempre están en mayúsculas, como en «EPUB».

formats_paths

class calibre.utils.formatter_functions.BuiltinFormatsPaths[fuente]

formats_paths() – devuelve una lista separada por comas de elementos separados por dos puntos (FMT:RUTA) que contienen la ruta completa a los formatos de un libro. Puede usar la función select() para obtener la ruta a un formato específico. Tenga en cuenta que los nombres de formato están siempre en mayúsculas, como en «EPUB».

formats_sizes

class calibre.utils.formatter_functions.BuiltinFormatsSizes[fuente]

formats_sizes() – devuelve una lista separada por comas de elementos separados por dos puntos (FMT:TAMAÑO) que contienen los tamaños en bytes de los formatos de un libro. Puede usar la función select() para obtener el tamaño de un formato específico. Tenga en cuenta que los nombres de formato siempre están en mayúsculas, como en «EPUB».

has_cover

class calibre.utils.formatter_functions.BuiltinHasCover[fuente]

has_cover() – devuelve 'Yes' si el libro tiene portada, en caso contrario devuelve un texto vacío.

is_marked

class calibre.utils.formatter_functions.BuiltinIsMarked[fuente]

is_marked() – comprueba si el libro está «marcado» en calibre. Si lo está, devuelve el valor de la marca, bien 'true' (en minúsculas) o bien una lista separada por comas de los nombres de marca. Devuelve '' (un texto vacío) si el libro no está marcado. Esta función sólo está disponible en la interfaz gráfica.

language_codes

class calibre.utils.formatter_functions.BuiltinLanguageCodes[fuente]

language_codes(nombres) – devuelve los códigos de idioma correspondientes a los nombres de idioma en nombres. Los nombres deben estar en el idioma actual. El argumento nombres es una lista separada por comas.

language_strings

class calibre.utils.formatter_functions.BuiltinLanguageStrings[fuente]

language_strings(valor, localizar) – devuelve los nombres de los idiomas identificados por los códigos de idioma (ver aquí los nombres y códigos) pasados como valor. Ejemplo: {languages:language_strings()}. Si localizar es cero, devuelve los nombres en inglés. Si localizar no es cero, devuelve los nombres en el idioma actual. El argumento códigos_idioma es una lista separada por comas.

ondevice

class calibre.utils.formatter_functions.BuiltinOndevice[fuente]

ondevice() – devuelve el texto 'Yes' si ondevice está activado, si no, devuelve un texto vacío. Esta función funciona sólo en la interfaz gráfica. Si quiere usar estos valores en las plantillas para guardar en el disco o enviar al dispositivo, debe crear una columna personalizada de tipo «Columna generada a partir de otras columnas», usar la función en la plantilla de dicha columna y usar el valor de la columna en las plantillas para guardar o enviar.

raw_field

class calibre.utils.formatter_functions.BuiltinRawField[fuente]

raw_field(nombre_de_búsqueda [, predeterminado_opcional]) – devuelve el campo de metadatos nombrado por nombre_de_búsqueda sin aplicar ningún formato. Evalúa y devuelve el segundo argumento opcional predeterminado_opcional si el campo no está definido (None). Puede usarse el prefijo $$ en lugar de la función, como en $$pubdate.

raw_list

class calibre.utils.formatter_functions.BuiltinRawList[fuente]

raw_list(nombre_de_búsqueda, separador) – devuelve la lista de metadatos nombrada por nombre_de_búsqueda sin aplicar ningún formato ni ordenación, con los elementos separados por separador.

series_sort

class calibre.utils.formatter_functions.BuiltinSeriesSort[fuente]

series_sort() – devuelve el valor de orden de serie.

user_categories

class calibre.utils.formatter_functions.BuiltinUserCategories[fuente]

user_categories() – devuelve una lista separada por comas de las categorías de usuario que contiene este libro. Esta función sólo funciona en la interfaz gráfica. Si desea utilizar estos valores en las plantillas para guardar en el disco o enviar al dispositivo, deberá crear una plantilla personalizada «Columna generada a partir de otras columnas», utilice la función en la plantilla de esa columna y use el valor de esa columna en las plantillas para guardar o enviar.

virtual_libraries

class calibre.utils.formatter_functions.BuiltinVirtualLibraries[fuente]

virtual_libraries() – devuelve una lista separada por comas de bibliotecas virtuales que contienen este libro. Esta función funciona sólo en la interfaz gráfica. Si quiere usar estos valores en las plantillas para guardar en el disco o enviar al dispositivo, debe crear una columna personalizada de tipo «Columna generada a partir de otras columnas», usar la función en la plantilla de dicha columna y usar el valor de la columna en las plantillas para guardar o enviar.

Otros

arguments

class calibre.utils.formatter_functions.BuiltinArguments[fuente]

arguments(id[=expresión] [, id[=expresión]]*) – usada en una plantilla guardada para obtener el valor de los argumentos pasados en la invocación. Esta función declara e inicializa las variables locales con los nombres suministrados (los id), parámetros en la práctica. Las variables son posicionales: obtienen el valor del argumento usado en la misma posición en la invocación. Si el argumento correspondiente no aparece en la invocación, arguments() asigna a esa variable el valor predeterminado suministrado. Si no hay valor predeterminado, será un texto vacío.

assign

class calibre.utils.formatter_functions.BuiltinAssign[fuente]

assign(id, valor) – asigna valor a id y devuelve valor. id debe ser un identificador, no una expresión. En la mayoría de los casos puede usarse el operador = en lugar de esta función.

globals

class calibre.utils.formatter_functions.BuiltinGlobals[fuente]

globals(id[=expresión] [, id[=expressión]]*) – Obtiene «variables globales» que pueden pasarse al formateador. El nombre id es el nombre de la variable global. Esta función declara e inicializa variables locales con los nombres de las variables globales que se le pasan. Si la variable correspondiente no está presente en las variables globales creadas, asignará a dicha variable el valor predeterminado suministrado. Si no hay valor predeterminado, se asigna a la variable el texto vacío.

is_dark_mode

class calibre.utils.formatter_functions.BuiltinIsDarkMode[fuente]

is_dark_mode() - devuelve '1' si calibre se ejecuta en modo oscuro, '' (un texto vacío) en caso contrario. Esta función se puede utilizar en reglas avanzadas de color e iconos para elegir diferentes colores colores o iconos según el modo. Ejemplo:

if is_dark_mode() then 'dark.png' else 'light.png' fi

print

class calibre.utils.formatter_functions.BuiltinPrint[fuente]

print(a [, b]*) – escribe los argumentos en la salida estándar. Sólo será visible si inicia calibre a partir de línea de órdenes (calibre-debug -g). La función print siempre devuelve su primer argumento.

set_globals

class calibre.utils.formatter_functions.BuiltinSetGlobals[fuente]

set_globals(id[=expresión] [, id[=expresión]]*) – Establece las «variables globales» que se pueden pasar al formateador. Las variables globales toman el nombre del id indicado. Se usa el valor del id a no ser que se suministre una expresión.

Recursivas

eval

class calibre.utils.formatter_functions.BuiltinEval[fuente]

eval(texto) – evalúa texto como un programa, pasando las variables locales. Esto permite usar el procesador de plantillas para elaborar resultados complejos a partir de variables locales. En el modo de programación de plantillas, dado que los caracteres { y } se interpretan antes de evaluar la plantilla, debe usarse [[ en lugar de { y ]] para }. Se convertirán automáticamente. Tenga en cuenta que los prefijos y sufijos (la sintaxis |prefijo|sufijo) no pueden usarse en el argumento de esta función en el modo de programación de plantillas.

template

class calibre.utils.formatter_functions.BuiltinTemplate[fuente]

template(x) – evalúa x como una plantilla. La evaluación se realiza en un contexto propio, lo que significa que las variables no se comparten entre el proceso que llama a la función y la evaluación de la plantilla. Si no se usa el modo de programación general, dado que los caracteres { y } tienen un uso especial, debe usar [[ en lugar de { y ]] para }; se convertirán automáticamente. Por ejemplo, template(\'[[title_sort]]\') evaluará la plantilla {title_sort} y devolverá su valor. Tenga en cuenta que los prefijos y sufijos (la sintaxis |prefijo|sufijo) no pueden usarse en el argumento de esta función en el modo de programación de plantillas.

Relacionales

cmp

class calibre.utils.formatter_functions.BuiltinCmp[fuente]

cmp(valor, y, mn, ig, my) – compara valor e y después de convertirlas en números. Devuelve mn si valor <# y, ig si valor ==# y y my en caso contrario. Esta función puede sustituirse normalmente por uno de los operadores de comparación numérica (==#, <#, >#, etc.).

first_matching_cmp

class calibre.utils.formatter_functions.BuiltinFirstMatchingCmp[fuente]

first_matching_cmp(val, [ cmp, resultado, ]* otro_resultado) – compara val < cmp consecutivamente y devuelve el resultado asociado para la primera comparación que sea cierta. Devuelve otro_resultado si ninguna comparación es cierta.

Ejemplo:

i = 10;
first_matching_cmp(i,5,"pequeño",10,"mediano",15,"grande","enorme")

devuelve "grande". El mismo ejemplo con un primer valor de 16 devuelve "enorme".

strcmp

class calibre.utils.formatter_functions.BuiltinStrcmp[fuente]

strcmp(x, y, mn, ig, my) – hace una comparación lexicográfica sin distinción de mayúsculas y minúsculas entre x e y como textos. Devuelve mn si x < y, ig si x == y, my en otros casos. Esta función puede sustituirse a menudo por los operadores de comparación lexicográfica (==, >, <, etc.)

strcmpcase

class calibre.utils.formatter_functions.BuiltinStrcmpcase[fuente]

strcmpcase(x, y, mn, ig, my) – hace una comparación con distinción de mayúsculas y minúsculas entre x e y. Devuelve mn si x < y. Devuelve ig si x = y, o my en caso contrario. Atención:

Éste NO es el comportamiento predeterminado usado por calibre, por ejemplo, en los operadores de comparación léxica (==, >, <, etc.). Esta función podría dar resultados inesperados, use preferentemente strcmp() siempre que sea posible.

API of the Metadata objects

The python implementation of the template functions is passed in a Metadata object. Knowing it’s API is useful if you want to define your own template functions.

class calibre.ebooks.metadata.book.base.Metadata(title, authors=('Desconocido',), other=None, template_cache=None, formatter=None)[fuente]

A class representing all the metadata for a book. The various standard metadata fields are available as attributes of this object. You can also stick arbitrary attributes onto this object.

Metadata from custom columns should be accessed via the get() method, passing in the lookup name for the column, for example: «#mytags».

Use the is_null() method to test if a field is null.

This object also has functions to format fields into strings.

The list of standard metadata fields grows with time is in STANDARD_METADATA_FIELDS.

Please keep the method based API of this class to a minimum. Every method becomes a reserved field name.

is_null(field)[fuente]

Return True if the value of field is null in this object. “null” means it is unknown or evaluates to False. So a title of _(“Unknown”) is null or a language of “und” is null.

Be careful with numeric fields since this will return True for zero as well as None.

Also returns True if the field does not exist.

deepcopy(class_generator=<function Metadata.<lambda>>)[fuente]

Do not use this method unless you know what you are doing, if you want to create a simple clone of this object, use deepcopy_metadata() instead. Class_generator must be a function that returns an instance of Metadata or a subclass of it.

get_identifiers()[fuente]

Return a copy of the identifiers dictionary. The dict is small, and the penalty for using a reference where a copy is needed is large. Also, we don’t want any manipulations of the returned dict to show up in the book.

set_identifiers(identifiers)[fuente]

Set all identifiers. Note that if you previously set ISBN, calling this method will delete it.

set_identifier(typ, val)[fuente]

If val is empty, deletes identifier of type typ

standard_field_keys()[fuente]

return a list of all possible keys, even if this book doesn’t have them

custom_field_keys()[fuente]

return a list of the custom fields in this book

all_field_keys()[fuente]

All field keys known by this instance, even if their value is None

metadata_for_field(key)[fuente]

return metadata describing a standard or custom field.

all_non_none_fields()[fuente]

Return a dictionary containing all non-None metadata fields, including the custom ones.

get_standard_metadata(field, make_copy)[fuente]

return field metadata from the field if it is there. Otherwise return None. field is the key name, not the label. Return a copy if requested, just in case the user wants to change values in the dict.

get_all_standard_metadata(make_copy)[fuente]

return a dict containing all the standard field metadata associated with the book.

get_all_user_metadata(make_copy)[fuente]

return a dict containing all the custom field metadata associated with the book.

get_user_metadata(field, make_copy)[fuente]

return field metadata from the object if it is there. Otherwise return None. field is the key name, not the label. Return a copy if requested, just in case the user wants to change values in the dict.

set_all_user_metadata(metadata)[fuente]

store custom field metadata into the object. Field is the key name not the label

set_user_metadata(field, metadata)[fuente]

store custom field metadata for one column into the object. Field is the key name not the label

remove_stale_user_metadata(other_mi)[fuente]

Remove user metadata keys (custom column keys) if they don’t exist in “other_mi”, which must be a metadata object

template_to_attribute(other, ops)[fuente]

Takes a list [(src,dest), (src,dest)], evaluates the template in the context of other, then copies the result to self[dest]. This is on a best-efforts basis. Some assignments can make no sense.

smart_update(other, replace_metadata=False)[fuente]

Merge the information in other into self. In case of conflicts, the information in other takes precedence, unless the information in other is NULL.

format_field(key, series_with_index=True)[fuente]

Returns the tuple (display_name, formatted_value)

to_html()[fuente]

A HTML representation of this object.

calibre.ebooks.metadata.book.base.STANDARD_METADATA_FIELDS

The set of standard metadata fields.


'''
All fields must have a NULL value represented as None for simple types,
an empty list/dictionary for complex types and (None, None) for cover_data
'''

SOCIAL_METADATA_FIELDS = frozenset((
    'tags',             # Ordered list
    'rating',           # A floating point number between 0 and 10
    'comments',         # A simple HTML enabled string
    'series',           # A simple string
    'series_index',     # A floating point number
    # Of the form { scheme1:value1, scheme2:value2}
    # For example: {'isbn':'123456789', 'doi':'xxxx', ... }
    'identifiers',
))

'''
The list of names that convert to identifiers when in get and set.
'''

TOP_LEVEL_IDENTIFIERS = frozenset((
    'isbn',
))

PUBLICATION_METADATA_FIELDS = frozenset((
    'title',            # title must never be None. Should be _('Unknown')
    # Pseudo field that can be set, but if not set is auto generated
    # from title and languages
    'title_sort',
    'authors',          # Ordered list. Must never be None, can be [_('Unknown')]
    'author_sort_map',  # Map of sort strings for each author
    # Pseudo field that can be set, but if not set is auto generated
    # from authors and languages
    'author_sort',
    'book_producer',
    'timestamp',        # Dates and times must be timezone aware
    'pubdate',
    'last_modified',
    'rights',
    # So far only known publication type is periodical:calibre
    # If None, means book
    'publication_type',
    'uuid',             # A UUID usually of type 4
    'languages',        # ordered list of languages in this publication
    'publisher',        # Simple string, no special semantics
    # Absolute path to image file encoded in filesystem_encoding
    'cover',
    # Of the form (format, data) where format is, e.g. 'jpeg', 'png', 'gif'...
    'cover_data',
    # Either thumbnail data, or an object with the attribute
    # image_path which is the path to an image file, encoded
    # in filesystem_encoding
    'thumbnail',
))

BOOK_STRUCTURE_FIELDS = frozenset((
    # These are used by code, Null values are None.
    'toc', 'spine', 'guide', 'manifest',
))

USER_METADATA_FIELDS = frozenset((
    # A dict of dicts similar to field_metadata. Each field description dict
    # also contains a value field with the key #value#.
    'user_metadata',
))

DEVICE_METADATA_FIELDS = frozenset((
    'device_collections',   # Ordered list of strings
    'lpath',                # Unicode, / separated
    'size',                 # In bytes
    'mime',                 # Mimetype of the book file being represented
))

CALIBRE_METADATA_FIELDS = frozenset((
    'application_id',   # An application id, currently set to the db_id.
    'db_id',            # the calibre primary key of the item.
    'formats',          # list of formats (extensions) for this book
    # a dict of user category names, where the value is a list of item names
    # from the book that are in that category
    'user_categories',
    # a dict of items to associated hyperlink
    'link_maps',
))

ALL_METADATA_FIELDS =      SOCIAL_METADATA_FIELDS.union(
                           PUBLICATION_METADATA_FIELDS).union(
                           BOOK_STRUCTURE_FIELDS).union(
                           USER_METADATA_FIELDS).union(
                           DEVICE_METADATA_FIELDS).union(
                           CALIBRE_METADATA_FIELDS)

# All fields except custom fields
STANDARD_METADATA_FIELDS = SOCIAL_METADATA_FIELDS.union(
                           PUBLICATION_METADATA_FIELDS).union(
                           BOOK_STRUCTURE_FIELDS).union(
                           DEVICE_METADATA_FIELDS).union(
                           CALIBRE_METADATA_FIELDS)

# Metadata fields that smart update must do special processing to copy.
SC_FIELDS_NOT_COPIED =     frozenset(('title', 'title_sort', 'authors',
                                      'author_sort', 'author_sort_map',
                                      'cover_data', 'tags', 'languages',
                                      'identifiers'))

# Metadata fields that smart update should copy only if the source is not None
SC_FIELDS_COPY_NOT_NULL =  frozenset(('device_collections', 'lpath', 'size', 'comments', 'thumbnail'))

# Metadata fields that smart update should copy without special handling
SC_COPYABLE_FIELDS =       SOCIAL_METADATA_FIELDS.union(
                           PUBLICATION_METADATA_FIELDS).union(
                           BOOK_STRUCTURE_FIELDS).union(
                           DEVICE_METADATA_FIELDS).union(
                           CALIBRE_METADATA_FIELDS) - \
                           SC_FIELDS_NOT_COPIED.union(
                           SC_FIELDS_COPY_NOT_NULL)

SERIALIZABLE_FIELDS =      SOCIAL_METADATA_FIELDS.union(
                           USER_METADATA_FIELDS).union(
                           PUBLICATION_METADATA_FIELDS).union(
                           CALIBRE_METADATA_FIELDS).union(
                           DEVICE_METADATA_FIELDS) - \
                           frozenset(('device_collections', 'formats',
                               'cover_data'))
# these are rebuilt when needed