[ << Notationsübersicht ] | [Anfang][Inhalt][Index] | [ Befehlsübersicht >> ] |
[ < Schlagzeugnoten ] | [ Nach oben : Notationsübersicht ] | [ alist > ] |
A.15 Technisches Glossar
Ein Glossar der technischen Ausdrücke und Konzepte, die von LilyPond intern benutzt werden. Die Ausdrücke kommen in den Handbüchern, auf den Mailinglisten oder im Quellcode vor.
alist | ||
callback | ||
closure | ||
glyph | ||
grob | ||
immutable | ||
interface | ||
lexer | ||
mutable | ||
output-def | ||
parser | ||
parser variable | ||
prob | ||
simple closure | ||
smob | ||
stencil |
[ << Notationsübersicht ] | [Anfang][Inhalt][Index] | [ Befehlsübersicht >> ] |
[ < Technisches Glossar ] | [ Nach oben : Technisches Glossar ] | [ callback > ] |
alist
Eine assoziative Liste oder alist in kurz ist ein
Scheme-Paar, das einen Wert mit einem Schlüssel assoziiert:
(Schlüssel . Wert)
. In der Datei ‘scm/lily.scm’
beispielsweise assoziiert die alist „type-p-name-alist“
bestimmte Prädikate (etwa ly:music?
) mit
Bezeichnungen (wie „music“) sodass Fehler der
Typüberprüfung über eine Konsolennachricht mitgeteilt werden
können, die auch die Bezeichnung des erwarteten Typprädikats
mitteilt.
[ << Notationsübersicht ] | [Anfang][Inhalt][Index] | [ Befehlsübersicht >> ] |
[ < alist ] | [ Nach oben : Technisches Glossar ] | [ closure > ] |
callback
Ein callback ist eine Routine, Funktion oder Methode, deren Referenz in einem Aufruf als Argument an eine andere Routine weitergereicht wird, sodass die aufgerufene Routine ermöglicht wird, das Argument zu aktivieren. Die Technik ermöglicht es einer niedrigeren Ebene des Programmes, eine Funktion aufzurufen, die auf höherer Ebene definiert wurde. Callbacks werden sehr ausgiebig in LilyPond eingesetzt, um es Scheme-Code auf der Benutzerebene zu erlauben, wie viele Funktionen der niedrigeren Ebene ausgeführt werden sollen.
[ << Notationsübersicht ] | [Anfang][Inhalt][Index] | [ Befehlsübersicht >> ] |
[ < callback ] | [ Nach oben : Technisches Glossar ] | [ glyph > ] |
closure
In Scheme entsteht ein closure (Abschluss), wenn eine Funktion, normalerweise ein Lambda-Ausdruck, als Variable weitergegeben wird. Das closure enthält den Code der Funktion plus Verweise zu den lexikalischen Verknüpfungen der freien Variablen der Funktion (also die Variablen, die in Ausdrücken benutzt werden, aber außerhalb von ihnen definiert werden). Wenn diese Funktion später einem anderen Argument zugewiesen wird, werden die freien Variabel-Verknüpfungend, die in das closure eingeschlossen sind, benutzt um die Werte der freien Variablen, die in der Rechnung benutzt werden sollen, zu errechnen. Eine nützliche Eigenschaft von closures ist, dass man interne variable Werte zwischen den Aufrufen wiederverwerten kann, sodass ein Status erhalten bleiben kann.
Ein simple closure (einfacher Abschluss) ist ein closure, dessen Ausdruck keine freien Variablen und auch keine freien Variablel-Verknüpfungen hat.
Ein simple closure wird in LilyPond von einem smob dargestellt, der den Ausdruck und eine Methode, wie der Ausdruck auf eine Liste von Argumenten angewendet werden soll, enthält.
[ << Notationsübersicht ] | [Anfang][Inhalt][Index] | [ Befehlsübersicht >> ] |
[ < closure ] | [ Nach oben : Technisches Glossar ] | [ grob > ] |
glyph
Ein glyph (Glyphe) ist eine bestimmte graphische Repräsentation eines typographischen Charakters oder einer Kombination von zwei oder mehr Charakteren, die dann eine Ligatur bilden. Eine Gruppe an Glyphen des gleichen Stils bilden ein Font, und eine Gruppe an Fonts, die mehrere Stile darstellen, bilden eine Schriftfamilie (engl. typeface).
Siehe auch
Notationsreferenz: Schriftarten, Sonderzeichen.
[ << Notationsübersicht ] | [Anfang][Inhalt][Index] | [ Befehlsübersicht >> ] |
[ < glyph ] | [ Nach oben : Technisches Glossar ] | [ immutable > ] |
grob
LilyPond-Objekte, die Elemente der Notation in der graphischen Ausgabe des Programmen darstellen, wie etwa Notenköpfe, Hälse, Bögen, Bindebögen, Fingersatz, Schlüssel usw., werden „Layout-Objekte“ genannt, auch oft als „GRaphische OBjekte“ bezeichnet, was dann zu grob abgekürzt wird.
Siehe auch
Handbuch zum Lernen: Objects and interfaces, Naming conventions of objects and properties, Properties of layout objects.
Referenz der Interna: All layout objects.
[ << Notationsübersicht ] | [Anfang][Inhalt][Index] | [ Befehlsübersicht >> ] |
[ < grob ] | [ Nach oben : Technisches Glossar ] | [ interface > ] |
immutable
Ein immutable (unberührbares) Objekt ist ein, dessen Status nach der Erstellung nicht mehr verändert werden kann, entgegen einem mutable Objekt, das nach der Erstellung noch verändert werden kann.
In LilyPond sind unberührbare oder geteilte Eigenschaften das
Standardverhalten von Grobs. Sie werden zwischen vielen Objekten
geteilt. Entgegen ihrer Bezeichnung können sie jedoch mit
\override
und \revert
verändert werden.
Siehe auch
Notationsreferenz: mutable.
[ << Notationsübersicht ] | [Anfang][Inhalt][Index] | [ Befehlsübersicht >> ] |
[ < immutable ] | [ Nach oben : Technisches Glossar ] | [ lexer > ] |
interface
Aktionen und Eigenschaften, die eine Gruppe von Grobs gemeinsam
haben, werden in ein Objekt gesammelt, das als grob-interface
oder auch „Schnittstelle“ (engl. interface) bezeichnet wird.
Siehe auch
Handbuch zum Lernen: Objekte und Schnittstellen, Regeln zur Benennung von Objekten und Eigenschaften, die Schnittstellen besitzen können.
Notationsreferenz: Layout-Schnittstellen.
Referenz der Interna: Graphical Object Interfaces.
[ << Notationsübersicht ] | [Anfang][Inhalt][Index] | [ Befehlsübersicht >> ] |
[ < interface ] | [ Nach oben : Technisches Glossar ] | [ mutable > ] |
lexer
Ein lexer ist ein Programm, das eine Charaktersequenz in eines Sequenz von Tokens übersetzt. Dieser Prozess wird als lexikalische Analyse bezeichnet. Der LilyPond-Lexer konvertiert eine Eingabedatei (‘.ly’ in eine Datei mit Tokens, die sich besser für den nächsten Schritt der Verarbeitung, nämlich das Parsen, eignet. Siehe parser.
[ << Notationsübersicht ] | [Anfang][Inhalt][Index] | [ Befehlsübersicht >> ] |
[ < lexer ] | [ Nach oben : Technisches Glossar ] | [ output-def > ] |
mutable
Ein mutable (veränderbares) Objekt ist ein Objekt, dessen Status verändert werden kann, im Gegenteil zu einem immutable Objekt, dessen Status zur Entstehungszeit festgelegt ist.
In LilyPond enthalten mutable Eigenschaften Werte, die nur für einen Grob gelten. Normalerweise werden Listen von anderen Objekten oder Resultate einer Berechnung in mutablen Eigenschaften gespeichert.
Siehe auch
Notationsreferenz: immutable.
[ << Notationsübersicht ] | [Anfang][Inhalt][Index] | [ Befehlsübersicht >> ] |
[ < mutable ] | [ Nach oben : Technisches Glossar ] | [ parser > ] |
output-def
Eine Instanz der Output-def
-Klasse enthält die Methoden und
Datenstruktur, die mit einem Ausgabeabschnitt assoziiert wird.
Instanzen werden für midi
, layout
und paper
-Umgebungen
erstellt.
[ << Notationsübersicht ] | [Anfang][Inhalt][Index] | [ Befehlsübersicht >> ] |
[ < output-def ] | [ Nach oben : Technisches Glossar ] | [ parser variable > ] |
parser
Ein parser (Syntaxanalysierer) analysiert die Tokensequenzen, die von einem Lexer erstellt wurden, um deren grammatikalische Struktur zu entschlüsseln, wie sie von den Regeln des Eingabeformates vorgegeben werden. Dabei werden die Sequenzen in immer größere Gruppen entsprechend den grammatischen Regeln zusammengefasst. Wenn die Kette der Tokens gültig ist, ist das Endprodukt ein Token-Baum, dessen Wurzel das Startsymbol der Grammatik ist. Wenn dies nicht erreicht werden kann, ist die Datei nicht korrekt und ensprechende Fehlermeldungen werden ausgegeben. Die syntaktischen Gruppierungen und die Regeln, nach welchen die Gruppen aus ihren Einzelteilen nach der LilyPond-Syntax erstellt werden, finden sich in der Datei ‘lily/parser.yy’ und werden in der Backus Normal Form (BNF) in LilyPond-Grammatik gezeigt. Diese Datei wird benutzt, um den Parser während der Programmkompilation zu erstellen. Hierzu wird der Parser-Ersteller Bison verwendet. Er ist Teil des Quellcodes und nicht in die binäre Installation von LilyPond integriert.
[ << Notationsübersicht ] | [Anfang][Inhalt][Index] | [ Befehlsübersicht >> ] |
[ < parser ] | [ Nach oben : Technisches Glossar ] | [ prob > ] |
parser variable
Diese Variablen werden direkt in Scheme definiert. Von ihrer direkten Benutzung durch den Benutzer wird streng abgeraten, weil ihre Semantikzuordnung sehr verwirrend sein kann.
Wenn der Wert einer derartigen Variable in einer ‘.ly’-Datei
verändert wird, ist diese Änderung global, und wenn sie nicht
explizit rückgängig gemacht wird, wird der neue Wert bis zum Ende
der Datei gelten und dabei sowohl aufeinander folgende
\score
-Umgebungen als auch externe Dateien, die mit
\include
geladen werden, beeinflussen. Das kann zu nicht
gewollten Konsequenzen führen, und in komplizierteren Projekten
kann es sehr schwer sein, die immer wieder auftretenden Fehler
zu beheben.
LilyPond benutzt folgende Parser-Variablen:
- afterGraceFraction
- musicQuotes
- mode
- output-count
- output-suffix
- partCombineListener
- pitchnames
- toplevel-bookparts
- toplevel-scores
- showLastLength
- showFirstLength
[ << Notationsübersicht ] | [Anfang][Inhalt][Index] | [ Befehlsübersicht >> ] |
[ < parser variable ] | [ Nach oben : Technisches Glossar ] | [ simple closure > ] |
prob
Property OBjects, also Eigenschaftsobjekte, oder kurz Prob,
sind Mitglieder der Prob
-Klasse, eine einfache Basisklasse für
Objekte, die mutable oder immutable alists haben und die Methoden,
mit denen sie verändert werden können. Die Music
- und
Stream_event
-Klassen stammen von Prob
ab. Verkörperungen
der Prob
-Klasse werden auch erstellt, um formatierte Inhalte von
Systemgrobs und Titelblöcken während der Erstellung des Seitenlayouts zu
speichern.
[ << Notationsübersicht ] | [Anfang][Inhalt][Index] | [ Befehlsübersicht >> ] |
[ < prob ] | [ Nach oben : Technisches Glossar ] | [ smob > ] |
simple closure
Siehe closure.
[ << Notationsübersicht ] | [Anfang][Inhalt][Index] | [ Befehlsübersicht >> ] |
[ < simple closure ] | [ Nach oben : Technisches Glossar ] | [ stencil > ] |
smob
Smobs sind ScheMe-OBjekte, Teile des Mechanismus von Guile, um C- und C++-Ojekte in Scheme-Code zu exportieren. In LilyPond werden Smobs von C++-Objekten mithilfe von Makros erstellt. Es gibt zwei Arten von Smob-Objekten: einfache Smobs, die da sind für einfach immutable Objekte wie Nummern, und komplexe Smobs, benutzt für Objekte mit einer Identität. Wenn Sie auf die LilyPond-Quellen zurückgreifen können, findet sich mehr Information hierzu in ‘lily/includes/smob.hh’.
[ << Notationsübersicht ] | [Anfang][Inhalt][Index] | [ Befehlsübersicht >> ] |
[ < smob ] | [ Nach oben : Technisches Glossar ] | [ Erhältliche Musikfunktionen > ] |
stencil
Eine Einheit der stencil-Klasse enthält die Information, die benötigt wird um ein typographisches Objekt zu setzen. Es handelt sich um einen sehr einfachen Smob, der eine begrenzende Box enthält, welche die vertikale und horizontale Ausdehnung des Objekt beschreibt, und einen Scheme-Ausdruck, der das Objekt ausgibt, nachdem es ausgewertet wurde. Stencil-Objekte können kombiniert werden, um komplexere Stencil zu bilden, die aus einem Baum von Scheme-Ausdrücken des Typs Stencil bestehen.
Die stencil
-Eigenschaft, die einen Grob mit seinem Stencil
verbindet, ist in der grob-interface
-Schnittstelle definiert.
Siehe auch
Referenz der Interna: grob-interface.
[ << Notationsübersicht ] | [Anfang][Inhalt][Index] | [ Befehlsübersicht >> ] |
[ < smob ] | [ Nach oben : Technisches Glossar ] | [ Erhältliche Musikfunktionen > ] |