[ << Gravat musical ] | [Top][Contents][Index] | [ Llista de referències bibliogràfiques >> ] |
[ < Quins símbols s’han de gravar? ] | [ Up : Construcció de programari ] | [ Putting LilyPond to work > ] |
Arquitectura flexible
Quan vam començar, vam escriure el programa LilyPond enterament en el llenguatge de programació C++; les funcionalitats del programa estaven gravades en pedra per als programadors. Això va demostrar-se insatisfactori per un nombre de raons:
- Quan el LilyPond fa errors, els usuaris han de cancel·lar les decisions de format. Consegüentment, l’usuari ha de tenir accés al motor de formatat. En conseqüència, no podem fixar les regles i les configuracions al moment de la compilació sinó que han de ser accessibles per als usuaris al moment de l’execució.
- El gravat és una qüestió de judici visual, i consegüentment una qüestió de gustos. Tot i que siguem coneixedors, els usuaris poden no estar d’acord amb les nostres decisions personals. Així, les definicions sobre l’estil de tipografia també han d’estar accessibles per a l’usuari.
- Finally, we continually refine the formatting algorithms, so we need a flexible approach to rules. The C++ language forces a certain method of grouping rules that cannot readily be applied to formatting music notation.
These problems have been addressed by integrating an interpreter for the Scheme programming language and rewriting parts of LilyPond in Scheme. The current formatting architecture is built around the notion of graphical objects, described by Scheme variables and functions. This architecture encompasses formatting rules, typographical style and individual formatting decisions. The user has direct access to most of these controls.
Scheme variables control layout decisions. For example, many graphical objects have a direction variable that encodes the choice between up and down (or left and right). Here you see two chords, with accents and arpeggios. In the first chord, the graphical objects have all directions down (or left). The second chord has all directions up (right).
The process of formatting a score consists of reading and writing the variables of graphical objects. Some variables have a preset value. For example, the thickness of many lines – a characteristic of typographical style – is a variable with a preset value. You are free to alter this value, giving your score a different typographical impression.
Formatting rules are also preset variables: each object has variables containing procedures. These procedures perform the actual formatting, and by substituting different ones, we can change the appearance of objects. In the following example, the rule governing which note head objects are used to produce the note head symbol is changed during the music fragment.
[ << Gravat musical ] | [Top][Contents][Index] | [ Llista de referències bibliogràfiques >> ] |
[ < Quins símbols s’han de gravar? ] | [ Up : Construcció de programari ] | [ Putting LilyPond to work > ] |