@c -*- coding: utf-8; mode: texinfo; -*- @ignore Translation of GIT committish: FILL-IN-HEAD-COMMITTISH When revising a translation, copy the HEAD committish of the version that you are working on. For details, see the Contributors' Guide, node Updating translation committishes.. @end ignore @c \version "2.14.0" @node Notation manual tables @appendix Notation manual tables @menu * Chord name chart:: * Common chord modifiers:: * Predefined string tunings:: * Predefined fretboard diagrams:: * MIDI instruments:: * List of colors:: * The Feta font:: * Note head styles:: * Text markup commands:: * Text markup list commands:: * List of articulations:: * Percussion notes:: * Technical glossary:: * All context properties:: * Layout properties:: * Available music functions:: * Context modification identifiers:: * Predefined type predicates:: * Scheme functions:: @end menu @node Chord name chart @appendixsec Chord name chart The following charts shows two standard systems for printing chord names, along with the pitches they represent. @lilypondfile{chord-names-jazz.ly} @node Common chord modifiers @appendixsec Common chord modifiers The following table shows chord modifiers that can be used in @code{\chordmode} to generate standard chord structures. @multitable @columnfractions .2 .3 .2 .2 @item @b{Chord type} @tab @b{Intervals} @tab @b{Modifier(s)} @tab @b{Example} @item Major @tab Major third, perfect fifth @tab @code{5} or nothing @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:5 } @end lilypond @item Minor @tab Minor third, perfect fifth @tab @code{m} or @code{m5} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:m } @end lilypond @item Augmented @tab Major third, augmented fifth @tab @code{aug} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:aug } @end lilypond @item Diminished @tab Minor third, diminished fifth @tab @code{dim} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:dim } @end lilypond @item Dominant seventh @tab Major triad, minor seventh @tab @code{7} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:7 } @end lilypond @item Major seventh @tab Major triad, major seventh @tab @code{maj7} or @code{maj} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:maj7 } @end lilypond @item Minor seventh @tab Minor triad, minor seventh @tab @code{m7} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:m7 } @end lilypond @item Diminished seventh @tab Diminished triad, diminished seventh @tab @code{dim7} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:dim7 } @end lilypond @item Augmented seventh @tab Augmented triad, minor seventh @tab @code{aug7} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:aug7 } @end lilypond @item Half-diminished seventh @tab Diminished triad, minor seventh @tab @code{m7.5-} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:m7.5- } @end lilypond @item Minor-major seventh @tab Minor triad, major seventh @tab @code{m7+} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:m7+ } @end lilypond @item Major sixth @tab Major triad, sixth @tab @code{6} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:6 } @end lilypond @item Minor sixth @tab Minor triad, sixth @tab @code{m6} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:m6 } @end lilypond @item Dominant ninth @tab Dominant seventh, major ninth @tab @code{9} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:9 } @end lilypond @item Major ninth @tab Major seventh, major ninth @tab @code{maj9} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:maj9 } @end lilypond @item Minor ninth @tab Minor seventh, major ninth @tab @code{m9} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:m9 } @end lilypond @item Dominant eleventh @tab Dominant ninth, perfect eleventh @tab @code{11} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:11 } @end lilypond @item Major eleventh @tab Major ninth, perfect eleventh @tab @code{maj11} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:maj11 } @end lilypond @item Minor eleventh @tab Minor ninth, perfect eleventh @tab @code{m11} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:m11 } @end lilypond @item Dominant thirteenth @tab Dominant ninth, major thirteenth @tab @code{13} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:13 } @end lilypond @item Dominant thirteenth @tab Dominant eleventh, major thirteenth @tab @code{13.11} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:13.11 } @end lilypond @item Major thirteenth @tab Major eleventh, major thirteenth @tab @code{maj13.11} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:maj13.11 } @end lilypond @item Minor thirteenth @tab Minor eleventh, major thirteenth @tab @code{m13.11} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:m13.11 } @end lilypond @item Suspended second @tab Major second, perfect fifth @tab @code{sus2} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:sus2 } @end lilypond @item Suspended fourth @tab Perfect fourth, perfect fifth @tab @code{sus4} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { c1:sus4 } @end lilypond @item Power chord (two-voiced) @tab Perfect fifth @tab @code{1.5} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { \powerChords c1:1.5 } @end lilypond @item Power chord (three-voiced) @tab Perfect fifth, octave @tab @code{1.5.8} @tab @lilypond[line-width=3\cm,noragged-right, notime] \chordmode { \powerChords c1:1.5.8 } @end lilypond @end multitable @node Predefined string tunings @appendixsec Predefined string tunings The chart below shows the predefined string tunings. @lilypondfile{display-predefined-string-tunings.ly} @node Predefined fretboard diagrams @appendixsec Predefined fretboard diagrams The chart below shows the predefined fretboard diagrams for guitar. @lilypondfile{display-predefined-fretboards.ly} The chart below shows the predefined fretboard diagrams for ukulele. @lilypondfile{display-predefined-ukulele-fretboards.ly} The chart below shows the predefined fretboard diagrams for mandolin. @lilypondfile{display-predefined-mandolin-fretboards.ly} @node MIDI instruments @appendixsec MIDI instruments The following is a list of names that can be used for the @code{midiInstrument} property. The order of the instruments below, starting in the left-hand column moving down, corresponds to the General MIDI Standard's 128 Program Numbers. @example acoustic grand contrabass lead 7 (fifths) bright acoustic tremolo strings lead 8 (bass+lead) electric grand pizzicato strings pad 1 (new age) honky-tonk orchestral harp pad 2 (warm) electric piano 1 timpani pad 3 (polysynth) electric piano 2 string ensemble 1 pad 4 (choir) harpsichord string ensemble 2 pad 5 (bowed) clav synthstrings 1 pad 6 (metallic) celesta synthstrings 2 pad 7 (halo) glockenspiel choir aahs pad 8 (sweep) music box voice oohs fx 1 (rain) vibraphone synth voice fx 2 (soundtrack) marimba orchestra hit fx 3 (crystal) xylophone trumpet fx 4 (atmosphere) tubular bells trombone fx 5 (brightness) dulcimer tuba fx 6 (goblins) drawbar organ muted trumpet fx 7 (echoes) percussive organ french horn fx 8 (sci-fi) rock organ brass section sitar church organ synthbrass 1 banjo reed organ synthbrass 2 shamisen accordion soprano sax koto harmonica alto sax kalimba concertina tenor sax bagpipe acoustic guitar (nylon) baritone sax fiddle acoustic guitar (steel) oboe shanai electric guitar (jazz) english horn tinkle bell electric guitar (clean) bassoon agogo electric guitar (muted) clarinet steel drums overdriven guitar piccolo woodblock distorted guitar flute taiko drum guitar harmonics recorder melodic tom acoustic bass pan flute synth drum electric bass (finger) blown bottle reverse cymbal electric bass (pick) shakuhachi guitar fret noise fretless bass whistle breath noise slap bass 1 ocarina seashore slap bass 2 lead 1 (square) bird tweet synth bass 1 lead 2 (sawtooth) telephone ring synth bass 2 lead 3 (calliope) helicopter violin lead 4 (chiff) applause viola lead 5 (charang) gunshot cello lead 6 (voice) @end example @node List of colors @appendixsec List of colors @subsubheading Normal colors Usage syntax is detailed in @ref{Coloring objects}. @cindex List of colors @cindex Colors, list of @verbatim black white red green blue cyan magenta yellow grey darkred darkgreen darkblue darkcyan darkmagenta darkyellow @end verbatim @subsubheading X color names X color names come several variants: Any name that is spelled as a single word with capitalization (e.g. @q{LightSlateBlue}) can also be spelled as space separated words without capitalization (e.g. @q{light slate blue}). The word @q{grey} can always be spelled @q{gray} (e.g. @q{DarkSlateGray}). Some names can take a numerical suffix (e.g. @q{LightSalmon4}). @subsubheading Color Names without a numerical suffix: @verbatim snow GhostWhite WhiteSmoke gainsboro FloralWhite OldLace linen AntiqueWhite PapayaWhip BlanchedAlmond bisque PeachPuff NavajoWhite moccasin cornsilk ivory LemonChiffon seashell honeydew MintCream azure AliceBlue lavender LavenderBlush MistyRose white black DarkSlateGrey DimGrey SlateGrey LightSlateGrey grey LightGrey MidnightBlue navy NavyBlue CornflowerBlue DarkSlateBlue SlateBlue MediumSlateBlue LightSlateBlue MediumBlue RoyalBlue blue DodgerBlue DeepSkyBlue SkyBlue LightSkyBlue SteelBlue LightSteelBlue LightBlue PowderBlue PaleTurquoise DarkTurquoise MediumTurquoise turquoise cyan LightCyan CadetBlue MediumAquamarine aquamarine DarkGreen DarkOliveGreen DarkSeaGreen SeaGreen MediumSeaGreen LightSeaGreen PaleGreen SpringGreen LawnGreen green chartreuse MediumSpringGreen GreenYellow LimeGreen YellowGreen ForestGreen OliveDrab DarkKhaki khaki PaleGoldenrod LightGoldenrodYellow LightYellow yellow gold LightGoldenrod goldenrod DarkGoldenrod RosyBrown IndianRed SaddleBrown sienna peru burlywood beige wheat SandyBrown tan chocolate firebrick brown DarkSalmon salmon LightSalmon orange DarkOrange coral LightCoral tomato OrangeRed red HotPink DeepPink pink LightPink PaleVioletRed maroon MediumVioletRed VioletRed magenta violet plum orchid MediumOrchid DarkOrchid DarkViolet BlueViolet purple MediumPurple thistle DarkGrey DarkBlue DarkCyan DarkMagenta DarkRed LightGreen @end verbatim @subsubheading Color names with a numerical suffix In the following names the suffix N can be a number in the range 1-4: @verbatim snowN seashellN AntiqueWhiteN bisqueN PeachPuffN NavajoWhiteN LemonChiffonN cornsilkN ivoryN honeydewN LavenderBlushN MistyRoseN azureN SlateBlueN RoyalBlueN blueN DodgerBlueN SteelBlueN DeepSkyBlueN SkyBlueN LightSkyBlueN LightSteelBlueN LightBlueN LightCyanN PaleTurquoiseN CadetBlueN turquoiseN cyanN aquamarineN DarkSeaGreenN SeaGreenN PaleGreenN SpringGreenN greenN chartreuseN OliveDrabN DarkOliveGreenN khakiN LightGoldenrodN LightYellowN yellowN goldN goldenrodN DarkGoldenrodN RosyBrownN IndianRedN siennaN burlywoodN wheatN tanN chocolateN firebrickN brownN salmonN LightSalmonN orangeN DarkOrangeN coralN tomatoN OrangeRedN redN DeepPinkN HotPinkN pinkN LightPinkN PaleVioletRedN maroonN VioletRedN magentaN orchidN plumN MediumOrchidN DarkOrchidN purpleN MediumPurpleN thistleN @end verbatim @subsubheading Grey Scale A grey scale can be obtained using: @example greyN @end example @noindent Where N is in the range 0-100. @node The Feta font @appendixsec The Feta font @cindex Feta font @cindex Font, Feta The following symbols are available in the Emmentaler font and may be accessed directly using text markup with the name of the glyph as shown in the tables below, such as @code{g^\markup @{\musicglyph #"scripts.segno" @}} or @code{\markup @{\musicglyph #"five"@}}. For more information, see @ref{Formatting text}. @menu * Clef glyphs:: * Time Signature glyphs:: * Number glyphs:: * Accidental glyphs:: * Default Notehead glyphs:: * Special Notehead glyphs:: * Shape-note Notehead glyphs:: * Rest glyphs:: * Flag glyphs:: * Dot glyphs:: * Dynamic glyphs:: * Script glyphs:: * Arrowhead glyphs:: * Bracket-tip glyphs:: * Pedal glyphs:: * Accordion glyphs:: * Tie glyphs:: * Vaticana glyphs:: * Medicaea glyphs:: * Hufnagel glyphs:: * Mensural glyphs:: * Neomensural glyphs:: * Petrucci glyphs:: * Solesmes glyphs:: @end menu @node Clef glyphs @unnumberedsubsec Clef glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #clefs @end lilypond @node Time Signature glyphs @unnumberedsubsec Time Signature glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #timesig @end lilypond @node Number glyphs @unnumberedsubsec Number glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #numbers @end lilypond @node Accidental glyphs @unnumberedsubsec Accidental glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #accidentals @end lilypond @node Default Notehead glyphs @unnumberedsubsec Default Notehead glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #default-noteheads @end lilypond @node Special Notehead glyphs @unnumberedsubsec Special Notehead glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #special-noteheads @end lilypond @node Shape-note Notehead glyphs @unnumberedsubsec Shape-note Notehead glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #shape-note-noteheads @end lilypond @node Rest glyphs @unnumberedsubsec Rest glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #rests @end lilypond @node Flag glyphs @unnumberedsubsec Flag glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #flags @end lilypond @node Dot glyphs @unnumberedsubsec Dot glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #dots @end lilypond @node Dynamic glyphs @unnumberedsubsec Dynamic glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #dynamics @end lilypond @node Script glyphs @unnumberedsubsec Script glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #scripts @end lilypond @node Arrowhead glyphs @unnumberedsubsec Arrowhead glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #arrowheads @end lilypond @node Bracket-tip glyphs @unnumberedsubsec Bracket-tip glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #brackettips @end lilypond @node Pedal glyphs @unnumberedsubsec Pedal glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #pedal @end lilypond @node Accordion glyphs @unnumberedsubsec Accordion glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #accordion @end lilypond @node Tie glyphs @unnumberedsubsec Tie glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #ties @end lilypond @node Vaticana glyphs @unnumberedsubsec Vaticana glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #vaticana @end lilypond @node Medicaea glyphs @unnumberedsubsec Medicaea glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #medicaea @end lilypond @node Hufnagel glyphs @unnumberedsubsec Hufnagel glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #hufnagel @end lilypond @node Mensural glyphs @unnumberedsubsec Mensural glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #mensural @end lilypond @node Neomensural glyphs @unnumberedsubsec Neomensural glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #neomensural @end lilypond @node Petrucci glyphs @unnumberedsubsec Petrucci glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #petrucci @end lilypond @node Solesmes glyphs @unnumberedsubsec Solesmes glyphs @lilypond[quote] \include "font-table.ly" \markuplines \override-lines #'(word-space . 4) \doc-chars #solesmes @end lilypond @node Note head styles @appendixsec Note head styles @cindex note head styles The following styles may be used for note heads. @lilypondfile[noindent]{note-head-style.ly} @node Text markup commands @appendixsec Text markup commands @include markup-commands.tely @node Text markup list commands @appendixsec Text markup list commands The following commands can all be used with @code{\markuplines}: @include markup-list-commands.tely @node List of articulations @appendixsec List of articulations @cindex accent @cindex accentus @cindex circulus @cindex coda @cindex downbow @cindex downmordent @cindex downprall @cindex espressivo @cindex fermata @cindex flageolet @cindex halfopen @cindex ictus @cindex lheel @cindex lineprall @cindex longfermata @cindex ltoe @cindex marcato @cindex mordent @cindex open @cindex portato @cindex prall @cindex pralldown @cindex prallmordent @cindex prallprall @cindex prallup @cindex reverseturn @cindex rheel @cindex rtoe @cindex segno @cindex semicirculus @cindex shortfermata @cindex signumcongruentiae @cindex snappizzicato @cindex staccatissimo @cindex staccato @cindex stopped @cindex tenuto @cindex thumb @cindex trill @cindex turn @cindex upbow @cindex upmordent @cindex upprall @cindex varcoda @cindex verylongfermata The following scripts are available in the Feta font and may be attached to notes (eg. @samp{c\accent}). @c Articulations and ornamentations @c Fingering instructions (for "thumb") @c Common notation for unfretted strings @c Bowing indications @c Harmonics @c Snap (Bartók) pizzicato @c Custom percussion staves (for "halfopen" -- not yet funindexed) @c References for wind instruments (for "open"/"stopped" -- not yet funindexed) @menu * Articulation scripts:: * Ornament scripts:: * Fermata scripts:: * Instrument-specific scripts:: * Repeat sign scripts:: * Ancient scripts:: @end menu @node Articulation scripts @unnumberedsubsec Articulation scripts @lilypond[quote] \include "script-chart.ly" \new RhythmicStaff { \scriptStaff #articulations } @end lilypond @node Ornament scripts @unnumberedsubsec Ornament scripts @lilypond[quote] \include "script-chart.ly" \new RhythmicStaff { \scriptStaff #ornaments } @end lilypond @node Fermata scripts @unnumberedsubsec Fermata scripts @lilypond[quote] \include "script-chart.ly" \new RhythmicStaff { \scriptStaff #fermatas } @end lilypond @node Instrument-specific scripts @unnumberedsubsec Instrument-specific scripts @lilypond[quote] \include "script-chart.ly" \new RhythmicStaff { \scriptStaff #instrument-specific } @end lilypond @node Repeat sign scripts @unnumberedsubsec Repeat sign scripts @lilypond[quote] \include "script-chart.ly" \new RhythmicStaff { \scriptStaff #repeats } @end lilypond @node Ancient scripts @unnumberedsubsec Ancient scripts @lilypond[quote] \include "script-chart.ly" \include "gregorian.ly" \new VaticanaStaff { \scriptStaffAncient #ancient } @end lilypond @node Percussion notes @appendixsec Percussion notes @lilypondfile[quote]{percussion-chart.ly} @node Technical glossary @appendixsec Technical glossary A glossary of the technical terms and concepts used internally in LilyPond. These terms may appear in the manuals, on mailing lists or in the source code. @menu * alist:: * callback:: * closure:: * glyph:: * grob:: * immutable:: * interface:: * lexer:: * mutable:: * output-def:: * parser:: * parser variable:: * prob:: * simple closure:: * smob:: * stencil:: @end menu @node alist @unnumberedsubsec alist @cindex alist @cindex association list An association list or @strong{alist} for short is a Scheme pair which associates a value with a key: @w{@code{(key . value)}}. For example, in @file{scm/lily.scm}, the alist @w{@qq{type-p-name-alist}} associates certain type predicates (e.g.@tie{}@code{ly:music?}) with names (e.g.@tie{}@qq{music}) so that type-check failures can be reported with a console message that includes the name of the expected type predicate. @node callback @unnumberedsubsec callback @cindex callback A @strong{callback} is a routine, function or method whose reference is passed as an argument in a call to another routine, so allowing the called routine to invoke it. The technique enables a lower- level software layer to call a function defined in a higher layer. Callbacks are used extensively in LilyPond to permit user-level Scheme code to define how many low-level actions are performed. @node closure @unnumberedsubsec closure @cindex closure @cindex simple closure In Scheme, a @strong{closure} is created when a function, usually a lambda expression, is passed as a variable. The closure contains the function's code plus references to the lexical bindings of the function's free variables (i.e. those variables used in the expression but defined outside it). When this function is applied to different arguments later, the free variable bindings that were captured in the closure are used to obtain the values of the free variables to be used in the calculation. One useful property of closures is the retention of internal variable values between invocations, so permitting state to be maintained. A @strong{simple closure} is a closure whose expression has no free variables and hence no free variable bindings. A simple closure is represented in LilyPond by a smob containing the expression and a method to apply the expression to a passed list of arguments. @node glyph @unnumberedsubsec glyph @cindex glyph @cindex font @cindex typeface A @strong{glyph} is a particular graphical representation of a typographic character, or a combination of two characters formating a ligature. A set of glyphs with a single style and shape comprise a font, and a set of fonts covering several styles and sizes comprise a typeface. @seealso Notation Reference: @ref{Fonts}, @ref{Text encoding}. @node grob @unnumberedsubsec grob @cindex grob @cindex layout objects @cindex graphical objects LilyPond objects which represent items of notation in the printed output such as note heads, stems, slurs, ties, fingering, clefs, etc are called @q{Layout objects}, often known as @q{GRaphical OBjects}, or @strong{grobs} for short. They are represented by instances of the @code{Grob} class. @seealso Learning Manual: @rlearning{Objects and interfaces}, @rlearning{Naming conventions of objects and properties}, @rlearning{Properties of layout objects}. Internals Reference: @rinternals{grob-interface}, @rinternals{All layout objects}. @node immutable @unnumberedsubsec immutable @cindex immutable objects @cindex immutable properties @cindex shared properties An @strong{immutable} object is one whose state cannot be modified after creation, in contrast to a mutable object, which can be modified after creation. In LilyPond, immutable or shared properties define the default style and behavior of grobs. They are shared between many objects. In apparent contradiction to the name, they can be changed using @code{\override} and @code{\revert}. @seealso Notation Reference: @ref{mutable}. @node interface @unnumberedsubsec interface @cindex interface @cindex grob-interface @cindex graphical object interfaces Actions and properties which are common to a number of grobs are grouped together in an object called a @code{grob-interface}, or just @q{interface} for short. @seealso Learning Manual: @rlearning{Objects and interfaces}, @rlearning{Naming conventions of objects and properties}, @rlearning{Properties found in interfaces}. Notation Reference: @ref{Layout interfaces}. Internals Reference: @rinternals{Graphical Object Interfaces}. @node lexer @unnumberedsubsec lexer @cindex lexer @cindex Flex A @strong{lexer} is a program which converts a sequence of characters into a sequence of tokens, a process called lexical analysis. The LilyPond lexer converts the stream obtained from an input @file{.ly} file into a tokenized stream more suited to the next stage of processing - parsing, for which see @ref{parser}. The LilyPond lexer is built with Flex from the lexer file @file{lily/lexer.ll} which contains the lexical rules. This file is part of the source code and is not included in the LilyPond binary installation. @node mutable @unnumberedsubsec mutable @cindex mutable objects @cindex mutable properties A @strong{mutable} object is one whose state can be modified after creation, in contrast to an immutable object, whose state is fixed at the time of creation. In LilyPond, mutable properties contain values that are specific to one grob. Typically, lists of other objects or results from computations are stored in mutable properties. @seealso Notation Reference: @ref{immutable}. @node output-def @unnumberedsubsec output-def @cindex output-def An instance of the @code{Output-def} class contains the methods and data structures associated with an output block. Instances are created for midi, layout and paper blocks. @node parser @unnumberedsubsec parser @cindex parser @cindex Bison @cindex grammar for LilyPond @cindex BNF A @strong{parser} analyzes the sequence of tokens produced by a lexer to determine its grammatical structure, grouping the tokens progressively into larger groupings according to the rules of the grammar. If the sequence of tokens is valid the end product is a tree of tokens whose root is the grammar's start symbol. If this cannot be achieved the file is invalid and an appropriate error message is produced. The syntactic groupings and the rules for constructing the groupings from their parts for the LilyPond syntax are defined in @file{lily/parser.yy} and shown in Backus Normal Form (BNF) in @ref{LilyPond grammar}. This file is used to build the parser during the program build by the parser generator, Bison. It is part of the source code and is not included in the LilyPond binary installation. @node parser variable @unnumberedsubsec parser variable @cindex parser variable @cindex Scheme variable @cindex global variable @cindex afterGraceFraction @cindex musicQuotes @cindex mode @cindex output-count @cindex output-suffix @cindex parseStringResult @cindex partCombineListener @cindex pitchnames @cindex toplevel-bookparts @cindex toplevel-scores @cindex showLastLength @cindex showFirstLength These are variables defined directly in Scheme. Their direct use by users is strongly discouraged, because their scoping semantics can be confusing. When the value of such a variable is changed in a @file{.ly} file, the change is global, and unless explicitly reverted, the new value will persist to the end of the file, affecting subsequent @code{\score} blocks as well as external files added with the @code{\include} command. This can lead to unintended consequences and in complex typesetting projects the consequent errors can be difficult to track down. LilyPond uses the following parser variables: @itemize @item afterGraceFraction @item musicQuotes @item mode @item output-count @item output-suffix @item parseStringResult @item partCombineListener @item pitchnames @item toplevel-bookparts @item toplevel-scores @item showLastLength @item showFirstLength @end itemize @node prob @unnumberedsubsec prob @cindex prob @cindex property object PRoperty OBjects, or @strong{probs} for short, are instances of the @code{Prob} class, a simple base class for objects which have mutable and immutable property alists and the methods to manipulate them. The @code{Music} and @code{Stream_event} classes derive from @code{Prob}. Instances of the @code{Prob} class are also created to hold the formatted content of system grobs and titling blocks during page layout. @node simple closure @unnumberedsubsec simple closure See @ref{closure}. @node smob @unnumberedsubsec smob @cindex smob @cindex Scheme object @strong{Smobs}, or ScheMe OBjects, are part of the mechanism used by Guile to export C and C++ objects to Scheme code. In LilyPond, smobs are created from C++ objects through macros. There are two types of smob objects: simple smobs, intended for simple immutable objects like numbers, and complex smobs, used for objects with identities. If you have access to the LilyPond sources, more information can be found in @file{lily/includes/smob.hh}. @node stencil @unnumberedsubsec stencil @cindex stencil An instance of the @strong{stencil} class holds the information required to print a typographical object. It is a simple smob containing a confining box, which defines the vertical and horizontal extents of the object, and a Scheme expression which will print the object when evaluated. Stencils may be combined to form more complex stencils defined by a tree of Scheme expressions formed from the Scheme expressions of the component stencils. The @code{stencil} property, which connects a grob to its stencil, is defined in the @code{grob-interface} interface. @seealso Internals Reference: @rinternals{grob-interface}. @node All context properties @appendixsec All context properties @include context-properties.tely @node Layout properties @appendixsec Layout properties @include layout-properties.tely @node Available music functions @appendixsec Available music functions @include identifiers.tely @node Context modification identifiers @appendixsec Context modification identifiers The following commands are defined for use as context modifications within a @code{\layout} or @code{\with} block. @include context-mod-identifiers.tely @node Predefined type predicates @appendixsec Predefined type predicates @include type-predicates.tely @node Scheme functions @appendixsec Scheme functions @include scheme-functions.tely