Manual de Calibre | Page 154

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