B.19 Glosario técnico
Este glosario relaciona los términos técnicos y conceptos que se utilizan internamente en LilyPond. Estos términos pueden aparecer en los manuales, en las listas de distribución de correo o en el código fuente.
- alist (lista-A)
Una lista asociativa o abreviadamente una lista-A (alist en inglés) es una pareja de Scheme que asocia un valor con una clave:
(clave . valor). Por ejemplo, en scm/lily.scm, la lista-Atype-p-name-alistasocia ciertos predicadps de tipo (p.ej.ly:music?) con nombres (p.ej. “music”) de forma que se pueda informar de los fallos de comprobación de tipo con un mensaje de consola que incluye el nombre del predicado de tipo esperado.- callback
Una callback es una rutina, función o método cuya referencia se pasa como argumento en una llamada a otra rutina, permitiendo así que la runtina llamada invoque a aquélla. La técnica permite que una capa de software de nivel más bajo llame a una función definida en una capa de nivel más alto. Las funciones de callback se usan ampliamente en LilyPond para hacer que el código de Scheme del nivel de usuario controle muchas acciones de bajo nivel.
- closure (cerradura)
En Scheme, se crea una cerradura cuando una función, por lo general una expresión lambda (esto es, una función anónima ad-hoc), se pasa como variable. La cerradura contiene el codigo de la función y referencias a las ligaduras léxicas de las variables libres de la función (es decir, las variables que se usan en la expresión pero se definen fuera de ella). Cuando más tarde se aplica esta función a diferentes argumentos, las ligaduras de variables libres que se capturaron dentro de la cerradura se utilizan para obtener los valores de las variables libres, que a su vez se usarán en el cálculo. Una propiedad útil de las cerraduras es la preservación de los valores internos de las variables de una invocación a otra, permitiendo así que se pueda mantener un estado.
- glifo
Un glifo es una representación gráfica particular de un carácter tipográfico, o una combinación de dos o más caracteres que forman una ligadura. Un conjunto de glifos con un estilo y forma uniformes forman una fuente tipográfica, y un conjunto de fuentes tipográficas que abarcan varios estilos forman un tipo.
Véase también: Fuentes tipográficas, Caracteres especiales.
- grob (objeto gráfico)
Los objetos de LilyPond que representan elementos de la notación en la salida impresa tales como la cabeza y la plica de las notas, ligaduras de unión y de expresión, digitaciones, claves, etc. se denominan ‘objetos de presentación’, a menudo conocidos como ‘OBjetos GRáficos’, o abreviadamente grobs. Se representan mediante instancias de la clase
Grob.See also: Manual de aprendizaje: Objetos e interfaces, Propiedades de los objetos de presentación.
Convenciones de nombres.
grob-interface, All layout objects.- inmutable
Un objeto inmutable es aquel cuyo estado no se puede modificar después de su creación, en contraste con los objetos mutables, que se pueden modificar después de su creación.
En LilyPond, las propiedades inmutables o compartidas definen el estilo y comportamiento predeterminados de los grobs. Se comparten por parte de muchos objetos. En aparente contradicción con su nombre, se pueden cambiar utilizando
\overridey\revert.Véase también más abajo acerca de los objetos mutables.
- interfaz
Las acciones y propiedades comunes a un conjunto de grobs se agrupan en un objeto denominado
interfaz de grob (grob-inerface), o abreviadamente interfaz.Véase también: Convenciones de nomenclatura, Interfaces de la presentación.
Objetos e interfaces, Propiedades de los interfaces.
Graphical Object Interfaces.- lexer (analizador léxico)
Un lexer o analizador léxico es un programa que convierte una secuencia de caracteres en una serie de elementos o tokens, en un proceso que se llama análisis léxico. El analizador léxico de LilyPond convierte el flujo obtenido a partir de un archivo de entrada .ly en un flujo descompuesto en tokens más apto para la siguiente fase del procesado: el análisis sintáctico (véase parser más adelante). El analizador léxico de LilyPond está construido con el programa
flexa partir del archivo de lexer lily/lexer.ll que contiene las reglas léxicas. Este archivo es parte del código fuente y no se incluye dentro de la instalación binaria de LilyPond.- mutable
Un objeto mutable es aquel cuyo estado se puede modificar después de su creación, en contraste con un objeto inmutable, cuyo estado se fija en el momento de la creación.
En LilyPond, las propiedades mutables contienen valores específicos de un grob. Por lo general, las listas de otros objetos o los resultados de los cálculos se almacenan en propiedades mutables.
See also above for immutable objects.
- output-def (definición de salida)
Una instancia de la clase
Output-defcontiene los métodos y estructuras de datos asociados con un bloque de salida. Se crean instancias para los bloques midi, layout y paper.- parser (analizador sintáctico)
Un parser o analizador sintáctico analiza la secuencia de tokens o elementos léxicos producida por un analizador léxico para determinar su estructura gramatical, agrupando los elementos léxicos en conjuntos mayores según las reglas de la gramática. Si la secuencia de elementos léxicos es válida, el producto final es un árbol de tokens cuya raíz es el símbolo inicial de la gramática. Si no se puede conseguir esto, el archivo es inválido y se produce un mensaje de error adecuado. Las agrupaciones sintácticas y las reglas para construir estas agrupaciones a partir de sus elementos constituyentes para la sintaxis de LilyPond están definidas en lily/parser.yy. Durante el proceso de compilación, este archivo se procesa por parte de un generador sintáctico,
bison, para crear el analizador. Es parte del código fuente y no se incluye dentro de la instalación binaria de LilyPond.- variable del analizador sintáctico
Son variables definidas directamente dentro de Scheme. Su uso directo por parte de los usuarios está fuertemente desaconsejado, porque su semántica de ámbito puede ser confusa.
Cuando el valor de una de estas variables se modifica dentro de un archivo .ly, el cambio es global, y a no ser que se revierta explícitamente, el nuevo valor persiste hasta el final del archivo, afectando a todos los bloques
\scoreasí como a los archivos externos añadidos con la instrucción\include. Esto puede conducir a consecuencias imprevistas y en proyectos de composición tipográfica complejos puede ser difícil de rastrear.LilyPond utiliza las siguientes variables del analizador sintáctico, entre otras:
-
afterGraceFraction -
musicQuotes -
output-count -
output-suffix -
partCombineListener -
pitchnames -
toplevel-bookparts -
toplevel-scores -
showLastLength -
showFirstLength
-
- prob (objeto de propiedades)
Los OBjetos de PRopiedades, o abreviadamente probs, son instancias de la clase
Prob, que es una sencilla clase básica que tiene listas-A de propiedades mutables e inmutables y los métodos para manipularlas. Las clasesMusicyStream_eventderivan deProb. También se crean instancias de la claseProbpara almacenar el contenido formateado de los grobs del sistema y los bloques de títulos durante el proceso de disposición de la página.- smob (objeto de Scheme)
Los Smobs, u OBjetos de ScheMe, forman parte del mecanismo utilizado por Guile para exportar objetos de C y de C++ al código de Scheme. En LilyPond, se crean smobs a partir de objetos de C++ por medio de macros. Hay dos tipos de objetos smob: los smobs simples, orientados a objetos inmutables simples como números, y los smobs complejos, usados para objetos con identidades. Si tiene acceso a las fuentes de LilyPond sources, encontrará más información en el archivo lily/includes/smob.hh.
- spanner (objeto de extensión)
Los Spanners, elementos u objetos de extensión, son una clase de objetos gráficos que no están situados en un lugar fijo de la partitura sino que se extienden de un punto a otro. Entre ellos podemos encontrar las barras de corchea, las ligaduras de unión y las ligaduras de expresión, así como los reguladores y las líneas de pentagrama. Así como los objetos que no son spanners slo se pueden dividir en un máximo de dos piezas visibles (por ejemplo, una clave duplicada al final de una línea y el comienzo de la siguiente), los spanners u objetos de extensión se dividen en tantas partes como sea necesario dependiendo de sus puntos de comienzo y final (como un crescendo largo que se extiende a lo largo de tres sistemas, o las líneas del pentagrama, que siempre se extienden a lo largo de la partitura completa).
Técnicamente, los objetos de extensión se definen como objetjos gráficos que tienen la interfaz
spanner-interface; en la parte C++ de LilyPond, son instancias de la subclaseSpannerde la claseGrob. Los extremos izquierdo y derecho de un objeto de extensión se pueden obtener y modificar usandoly:spanner-boundyly:spanner-set-bound!, respectivamente. Los extremos sismpre son items o elementos. El ancestro X de un elemento extenso tiene poco sentido musical, pero se establece normalmente al extremo de la izquierda.Véase también: Spanners.
All layout objects, spanner-interface.- stencil (sello)
Las instancias de la clase
Stencilcontienen la información necesaria para imprimir un objeto tipográfico, un stencil o sello. Es un smob simple que contiene una caja de confinamiento, que a su vez define las dimensiones vertical y horizontal del objeto, y una expresión de Scheme que imprime el objeto cuendo se evalúa. Los stencils o sellos se pueden combinar para formar sellos más complejos definidos por un árbol de expresiones de Scheme, que a su vez está formado a partir de las expresiones de Scheme de los sellos que lo componen.La propiedad
stencil, que conecta a un grob con su sello, se define dentro de la interfazgrob-interface.Véase también grob-interface.