5.1.2 Objekte und Schnittstellen
Optimierung bedeutet, die internen Operationen und Strukturen des LilyPond-Programms zu verändern, darum sollen hier zunächst die wichtigsten Begriffe erklärt werden, die zur Beschreibung dieser Operationen und Strukturen benutzt werden.
Der Begriff „Objekt“ ist ein allgemeiner Begriff, mit dem
die Vielzahl an internen Strukturen bezeichnet wird, die LilyPond
während der Bearbeitung des Quelltextes erstellt. Wenn etwa
ein Befehl wie \new Staff
auftritt, wird ein neues Objekt
vom Typ Staff
erstellt. Dieses Objekt Staff
enthält
dann alle Eigenschaften, die mit diesem speziellen Notensystem
verknüpft sind, wie beispielsweise seine Bezeichnung, Tonart und
spezifische Angaben über die Engraver, die innerhalb dieses Systems
eingesetzt werden. Für alle anderen Kontexte gibt es genauso
Objekte, die deren Eigenschaften beinhalten, beispielsweise für
Voice
-Objekte, Score
-Objekte, Lyrics
-Objekte,
aber auch für Objekte, die Notationselemente wie die Taktstriche,
Notenköpfe, Bögen und Dynamikbezeichnung enthalten. Jedes
Objekt hat eine eigene Gruppe an Eigenschaftswerten.
Bestimmte Objekttypen tragen besondere Bezeichnungen. Objekte, die Notationselemente der gesetzten Ausgabe repräsentieren, also Notenköpfe, Hälse, Bögen, Fingersatz, Schlüssel usw., werden „Layout-Objekte“, oft auch „Graphische Objekte“ genannt. Daraus resultiert die künstliche Abkürzung „Grob“. Diese sind auch Objekte im allgemeinen Sinn und haben genauso Eigenschaften, die mit ihnen verknüpft sind, wie etwa Größe, Position, Farbe usw.
Einige Layout-Objekte sind etwas spezieller. Phrasierungsbögen, Crescendo-Klammern, Oktavierungszeichen und viele andere Grobs sind nicht an einer Stelle platziert – sie haben vielmehr einen Anfangspunkt, einen Endpunkt und eventuell noch andere Eigenschaften, die ihre Form bestimmen. Objekte mit solch einer erweiterten Gestalt werden als „Strecker“ (engl. Spanners) bezeichnet.
Strecker können nach ihrer Erzeugung nicht verändert werden. Dies
schließt StaffSymbol
und LedgerLineSpanner
ein, die
sich über die ganze Partitur fortsetzen, außer wenn sie durch den
Befehlt \stopStaff
beendet und dann mit \startStaff
neu erzeugt werden.
Darüber hinaus gibt es ‚abstrakte‘ Grobs, die selbst keinen Ausdruck
irgendwelcher Art erzeugen. Vielmehr sammeln sie, positionieren oder
verwalten andere Grobs. Typische Beispiele hierfür sind
DynamicLineSpanner
, BreakAlignment
,
NoteColumn
, VerticalAxisGroup
,
NonMusicalPaperColumn
und Ähnliche. Wir werden uns später
mit einigen von ihnen noch näher befassen.
Es bleibt uns noch übrig zu erklären, was „Schnittstellen“
(engl. interface) sind. Wenn auch viele Objekte sehr unterschiedlich
sind, haben sie doch oft gemeinsame Eigenschaften, die auf
die gleiche Weise verarbeitet werden. Alle Grobs beispielsweise
haben eine Farbe, eine Größe, eine Position usw. und alle
diese Eigenschaften werden von LilyPond auf die gleiche Weise
verarbeitet, während der Quelltext in Notensatz umgesetzt wird.
Um die internen Operationen zu vereinfachen, sind alle diese
gemeinsamen Prozesse und Eigenschaften in einem Objekt
mit der Bezeichnung grob-interface
(Schnittstelle eines
graphischen Objektes) zusammengefasst. Es gibt viele andere
Gruppen gemeinsamer Eigenschaften, die jede eine Bezeichnung
besitzen, welche auf -interface
endet. Insgesamt
gibt es über 100 dieser Schnittstellen. Wir werden später sehen,
was es damit auf sich hat.
Dies waren die Hauptbegriffe, die in diesem Kapitel zur Anwendung kommen sollen.