Manual de usuario de calibre, Publicación 2.73.0
aritméticas. Es un lenguaje de programación razonablemente completo.
Puede usar las funciones documentadas anteriormente en modo de programación de plantilla. Véase más adelante para
más detalles.
Para empezar con un ejemplo, supongamos que quiere una plantilla que muestre la serie de un libro si la tiene, y en
caso contrario muestre el valor del campo personalizado «#genre». Esto no se puede hacer en el modo básico, porque
no se puede hacer referencia a otro campo en la expresión de la plantilla. En el modo de programación sí se puede. La
siguiente expresión funciona:
{#series:'ifempty($, field('#genre'))'}
El ejemplo muestra varias cosas:
el modo de programa se usa si la expresión empieza por :' y termina por '. Cualquier otra cosa se supone que
es una sola función.
la variable $ representa el campo sobre el que opera la expresión, #series en este caso.
las funciones deben llevar todos sus argumentos. No hay valores predeterminados. Por ejemplo, las funciones
estándar predefinidas deben tener un parámetro inicial que indique el campo de origen, lo que es una diferencia
importante con respecto al modo de función única.
los espacios en blanco se ignoran y se pueden utilizar en cualquier lugar dentro de la expresión.
los textos constantes se encierran en comillas del mismo tipo, ya sea ' o ".
El lenguaje es parecido a los lenguajes «funcionales», en tanto que se construye casi únicamente a base de funciones.
Una sentencia es una función. Una expresión es una función. Las constantes e identificadores pueden interpretarse
como funciones que devuelven el valor indicado por la constante o almacenado en el identificador.
La sintaxis del lenguaje se muestra en la siguiente gramática:
constant
identifier
function
expression
assignment
statement
program
::=
::=
::=
::=
::=
::=
::=
" string " | ' string ' | number
sequence of letters or ``_`` characters
identifier ( statement [ , statement ]* )
identifier | constant | function | assignment
identifier '=' expression
expression [ ; expression ]*
statement
Los comentarios son líneas que empiezan por un carácter «#».
Una expresión siempre tiene un valor, ya sea el valor de la constante, el valor contenido en el identificador o el valor
devuelto por una función. El valor de una sentencia es el valor de la última expresión de la secuencia de sentencias.
Así, el valor del siguiente programa (sentencia):
1; 2; 'foobar'; 3
es 3.
Otro ejemplo de un programa complejo pero más bien tonto podría ayudar a aclarar las cosas:
{series_index:'
substr(
strcat($, '->',
cmp(divide($, 2), 1,
assign(c, 1); substr('lt123', c, 0),
'eq', 'gt')),
0, 6)
'| prefix | suffix}
150
Capítulo 1. Secciones