lilypond-learning: Objects and interfaces
4.1.2 Objects and interfaces
----------------------------
Tweaking involves modifying the internal operation and structures of the
LilyPond program, so we must first introduce some terms which are used
to describe those internal operations and structures.
The term ‘Object’ is a generic term used to refer to the multitude of
internal structures built by LilyPond during the processing of an input
file. So when a command like ‘\new Staff’ is encountered a new object
of type ‘Staff’ is constructed. That ‘Staff’ object then holds all the
properties associated with that particular staff, for example, its name
and its key signature, together with details of the engravers which have
been assigned to operate within that staff’s context. Similarly, there
are objects to hold the properties of all other contexts, such as
‘Voice’ objects, ‘Score’ objects, ‘Lyrics’ objects, as well as objects
to represent all notational elements such as bar lines, note heads,
ties, dynamics, etc. Every object has its own set of property values.
Some types of object are given special names. Objects which
represent items of notation on the printed output such as note heads,
stems, slurs, ties, fingering, clefs, etc are called ‘Layout objects’,
often known as ‘Graphical Objects’, or ‘Grobs’ for short. These are
still objects in the generic sense above, and so they too all have
properties associated with them, such as their position, size, color,
etc.
Some layout objects are still more specialized. Phrasing slurs,
crescendo hairpins, ottava marks, and many other grobs are not localized
in a single place – they have a starting point, an ending point, and
maybe other properties concerned with their shape. Objects with an
extended shape like these are called ‘Spanners’.
It remains to explain what ‘Interfaces’ are. Many objects, even
though they are quite different, share common features which need to be
processed in the same way. For example, all grobs have a color, a size,
a position, etc, and all these properties are processed in the same way
during LilyPond’s interpretation of the input file. To simplify these
internal operations these common actions and properties are grouped
together in an object called a ‘grob-interface’. There are many other
groupings of common properties like this, each one given a name ending
in ‘interface’. In total there are over 100 such interfaces. We shall
see later why this is of interest and use to the user.
These, then, are the main terms relating to objects which we shall
use in this chapter.