]> git.donarmstrong.com Git - lilypond.git/blob - scm/define-grobs.scm
Merge branch 'master' into translation
[lilypond.git] / scm / define-grobs.scm
1 ;;;; This file is part of LilyPond, the GNU music typesetter.
2 ;;;;
3 ;;;; Copyright (C) 1998--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
4 ;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
5 ;;;;
6 ;;;; LilyPond is free software: you can redistribute it and/or modify
7 ;;;; it under the terms of the GNU General Public License as published by
8 ;;;; the Free Software Foundation, either version 3 of the License, or
9 ;;;; (at your option) any later version.
10 ;;;;
11 ;;;; LilyPond is distributed in the hope that it will be useful,
12 ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 ;;;; GNU General Public License for more details.
15 ;;;;
16 ;;;; You should have received a copy of the GNU General Public License
17 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
18
19 ;;;; distances are given in line-thickness (thicknesses) and
20 ;;;; staff-space (distances)
21
22 ;;;; WARNING: the meta field should be the last one.
23 ;;;; WARNING: don't use anonymous functions for initialization.
24
25 ;; TODO: junk the meta field in favor of something more compact?
26
27
28 (define-session-public all-grob-descriptions
29   `(
30     (Accidental
31      . (
32         (after-line-breaking . ,ly:accidental-interface::remove-tied)
33         (alteration . ,accidental-interface::calc-alteration)
34         (avoid-slur . inside)
35         (extra-spacing-width . (-0.2 . 0.0))
36         (glyph-name . ,accidental-interface::glyph-name)
37         (glyph-name-alist . ,standard-alteration-glyph-name-alist)
38         (stencil . ,ly:accidental-interface::print)
39         (horizontal-skylines . ,(ly:make-unpure-pure-container ly:accidental-interface::horizontal-skylines))
40         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
41         (Y-extent . ,accidental-interface::height)
42         (meta . ((class . Item)
43                  (interfaces . (accidental-interface
44                                 inline-accidental-interface
45                                 font-interface))))))
46
47     (AccidentalCautionary
48      . (
49         (after-line-breaking . ,ly:accidental-interface::remove-tied)
50         (alteration . ,accidental-interface::calc-alteration)
51         (avoid-slur . inside)
52         (glyph-name-alist . ,standard-alteration-glyph-name-alist)
53         (parenthesized . #t)
54         (stencil . ,ly:accidental-interface::print)
55         (Y-extent . ,accidental-interface::height)
56         (meta . ((class . Item)
57                  (interfaces . (accidental-interface
58                                 inline-accidental-interface
59                                 font-interface))))))
60
61     (AccidentalPlacement
62      . (
63         (direction .  ,LEFT)
64         (positioning-done . ,ly:accidental-placement::calc-positioning-done)
65
66         ;; this is quite small, but it is very ugly to have
67         ;; accs closer to the previous note than to the next one.
68         (right-padding . 0.15)
69
70         ;; for horizontally stacked scripts.
71         (script-priority .  -100)
72
73         (X-extent . ,ly:axis-group-interface::width)
74         (meta . ((class . Item)
75                  (interfaces . (accidental-placement-interface))))))
76
77     (AccidentalSuggestion
78      . (
79         (after-line-breaking . ,ly:accidental-interface::remove-tied)
80         (alteration . ,accidental-interface::calc-alteration)
81         (direction . ,UP)
82         (font-size . -2)
83         (glyph-name-alist . ,standard-alteration-glyph-name-alist)
84         (outside-staff-priority . 0)
85         (parent-alignment-X . ,CENTER)
86         (script-priority . 0)
87         (self-alignment-X . ,CENTER)
88         (side-axis . ,Y)
89         (staff-padding . 0.25)
90         (stencil . ,ly:accidental-interface::print)
91         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
92         (Y-extent . ,accidental-interface::height)
93         (Y-offset . ,side-position-interface::y-aligned-side)
94         (meta . ((class . Item)
95                  (interfaces . (accidental-interface
96                                 accidental-suggestion-interface
97                                 font-interface
98                                 outside-staff-interface
99                                 script-interface
100                                 self-alignment-interface
101                                 side-position-interface))))))
102
103     (Ambitus
104      . (
105         (axes . (,X ,Y))
106         (break-align-symbol . ambitus)
107         (break-visibility . ,begin-of-line-visible)
108         (non-musical . #t)
109         (space-alist . (
110                         (cue-end-clef . (extra-space . 0.5))
111                         (clef . (extra-space . 0.5))
112                         (cue-clef . (extra-space . 0.5))
113                         (key-signature . (extra-space . 0.0))
114                         (staff-bar . (extra-space . 0.0))
115                         (time-signature . (extra-space . 0.0))
116                         (first-note . (fixed-space . 0.0))))
117         (X-extent . ,ly:axis-group-interface::width)
118         (Y-extent . ,axis-group-interface::height)
119         (meta . ((class . Item)
120                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
121                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
122                  (interfaces . (ambitus-interface
123                                 axis-group-interface
124                                 break-aligned-interface))))))
125
126     (AmbitusAccidental
127      . (
128         (direction . ,LEFT)
129         (glyph-name-alist . ,standard-alteration-glyph-name-alist)
130         (padding . 0.5)
131         (side-axis . ,X)
132         (stencil . ,ly:accidental-interface::print)
133         (X-offset . ,ly:side-position-interface::x-aligned-side)
134         (Y-extent . ,accidental-interface::height)
135         (meta . ((class . Item)
136                  (interfaces . (accidental-interface
137                                 break-aligned-interface
138                                 font-interface
139                                 side-position-interface))))))
140
141     (AmbitusLine
142      . (
143         (gap . ,ambitus-line::calc-gap)
144         (length-fraction . 0.7)
145         (maximum-gap . 0.45)
146         (stencil . ,ambitus::print)
147         (thickness . 2)
148         (X-offset . ,ly:self-alignment-interface::centered-on-x-parent)
149         (meta . ((class . Item)
150                  (interfaces . (ambitus-interface
151                                 font-interface))))))
152
153     (AmbitusNoteHead
154      . (
155         (duration-log . 2)
156         (glyph-name . ,note-head::calc-glyph-name)
157         (ignore-ambitus . #t)
158         (stencil . ,ly:note-head::print)
159         (Y-offset . ,staff-symbol-referencer::callback)
160         (Y-extent . ,grob::always-Y-extent-from-stencil)
161         (meta . ((class . Item)
162                  (interfaces . (ambitus-interface
163                                 font-interface
164                                 ledgered-interface
165                                 note-head-interface
166                                 rhythmic-head-interface
167                                 staff-symbol-referencer-interface))))))
168
169     (Arpeggio
170      . (
171         (cross-staff . ,ly:arpeggio::calc-cross-staff)
172         (direction . ,LEFT)
173         (padding . 0.5)
174         (positions . ,ly:arpeggio::calc-positions)
175         (protrusion . 0.4)
176         (script-priority . 0)
177         (side-axis . ,X)
178         (staff-position . 0.0)
179         (stencil . ,ly:arpeggio::print)
180         (X-extent . ,ly:arpeggio::width)
181         (Y-extent . ,(grob::unpure-Y-extent-from-stencil ly:arpeggio::pure-height))
182         (X-offset . ,ly:side-position-interface::x-aligned-side)
183         (Y-offset . ,staff-symbol-referencer::callback)
184         (meta . ((class . Item)
185                  (interfaces . (arpeggio-interface
186                                 font-interface
187                                 side-position-interface
188                                 staff-symbol-referencer-interface))))))
189
190     (BalloonTextItem
191      . (
192         (annotation-balloon . #t)
193         (annotation-line . #t)
194         (extra-spacing-width . (+inf.0 . -inf.0))
195         (stencil . ,ly:balloon-interface::print)
196         (text . ,(grob::calc-property-by-copy 'text))
197         (X-offset . ,(grob::calc-property-by-copy 'X-offset))
198         (Y-offset . ,(grob::calc-property-by-copy 'Y-offset))
199         (Y-extent . ,grob::always-Y-extent-from-stencil)
200         (meta . ((class . Item)
201                  (interfaces . (balloon-interface
202                                 font-interface
203                                 text-interface))))))
204
205     (BarLine
206      . (
207         (allow-span-bar . #t)
208         (bar-extent . ,ly:bar-line::calc-bar-extent)
209         (break-align-anchor . ,ly:bar-line::calc-anchor)
210         (break-align-symbol . staff-bar)
211         (break-visibility . ,bar-line::calc-break-visibility)
212         (extra-spacing-height . ,pure-from-neighbor-interface::account-for-span-bar)
213         (gap . 0.4)
214         (glyph . "|")
215         (glyph-name . ,bar-line::calc-glyph-name)
216
217         ;;
218         ;; Ross. page 151 lists other values, we opt for a leaner look
219         ;;
220         ;; TODO:
221         ;; kern should scale with line-thickness too.
222         (kern . 3.0)
223         (segno-kern . 3.0)
224         (hair-thickness . 1.9)
225         (thick-thickness . 6.0)
226
227         (layer . 0)
228         (non-musical . #t)
229         (rounded . #f)
230         (space-alist . (
231                         (time-signature . (extra-space . 0.75))
232                         (custos . (minimum-space . 2.0))
233                         (clef . (minimum-space . 1.0))
234                         (key-signature . (extra-space . 1.0))
235                         (key-cancellation . (extra-space . 1.0))
236                         (first-note . (fixed-space . 1.3))
237                         (next-note . (semi-fixed-space . 0.9))
238                         (right-edge . (extra-space . 0.0))))
239         (stencil . ,ly:bar-line::print)
240         (Y-extent . ,grob::always-Y-extent-from-stencil)
241         (meta . ((class . Item)
242                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
243                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
244                  (interfaces . (bar-line-interface
245                                 break-aligned-interface
246                                 font-interface
247                                 pure-from-neighbor-interface))))))
248
249     (BarNumber
250      . (
251         (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff)
252         ;; want the bar number before the clef at line start.
253         (break-align-symbols . (left-edge staff-bar))
254
255         (break-visibility . ,begin-of-line-visible)
256         (direction . ,UP)
257         (extra-spacing-width . (+inf.0 . -inf.0))
258         (font-family . roman)
259         (font-size . -2)
260         (non-musical . #t)
261         ;; w/o padding, bars numbers are not positioned over the staff as
262         ;; they are slightly to the left. so we add just a bit.
263         (horizon-padding . 0.05)
264         (outside-staff-priority . 100)
265         (padding . 1.0)
266         (self-alignment-X . ,RIGHT)
267         (side-axis . ,Y)
268         (stencil . ,ly:text-interface::print)
269         (X-offset . ,self-alignment-interface::self-aligned-on-breakable)
270         (Y-offset . ,side-position-interface::y-aligned-side)
271         (Y-extent . ,grob::always-Y-extent-from-stencil)
272         (meta .
273               ((class . Item)
274                (interfaces . (break-alignable-interface
275                               font-interface
276                               outside-staff-interface
277                               self-alignment-interface
278                               side-position-interface
279                               text-interface))))))
280
281     (BassFigure
282      . (
283         (stencil . ,ly:text-interface::print)
284         (Y-extent . ,grob::always-Y-extent-from-stencil)
285         (meta . ((class . Item)
286                  (interfaces . (bass-figure-interface
287                                 font-interface
288                                 rhythmic-grob-interface
289                                 text-interface))))))
290
291     (BassFigureAlignment
292      . (
293         (axes . (,Y))
294         (padding . 0.2)
295         (positioning-done . ,ly:align-interface::align-to-minimum-distances)
296         (stacking-dir . ,DOWN)
297         (X-extent . ,ly:axis-group-interface::width)
298         (Y-extent . ,axis-group-interface::height)
299         (meta . ((class . Spanner)
300                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
301                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
302                  (interfaces . (align-interface
303                                 axis-group-interface
304                                 bass-figure-alignment-interface))))))
305
306     (BassFigureAlignmentPositioning
307      . (
308         (axes . (,Y))
309         (direction . ,UP)
310         (padding . 0.5)
311         (side-axis . ,Y)
312         (staff-padding . 1.0)
313         (X-extent . ,ly:axis-group-interface::width)
314         (Y-extent . ,axis-group-interface::height)
315         (Y-offset . ,side-position-interface::y-aligned-side)
316         (meta . ((class . Spanner)
317                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
318                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
319                  (interfaces . (axis-group-interface
320                                 outside-staff-interface
321                                 side-position-interface))))))
322
323     (BassFigureBracket
324      . (
325         (edge-height . (0.2 . 0.2))
326         (stencil . ,ly:enclosing-bracket::print)
327         (X-extent . ,ly:enclosing-bracket::width)
328         (meta . ((class . Item)
329                  (interfaces . (enclosing-bracket-interface))))))
330
331     (BassFigureContinuation
332      . (
333         (stencil . ,ly:figured-bass-continuation::print)
334         (Y-offset . ,ly:figured-bass-continuation::center-on-figures)
335         (meta . ((class . Spanner)
336                  (interfaces . (figured-bass-continuation-interface))))))
337
338     (BassFigureLine
339      . (
340         (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights)
341         (axes . (,Y))
342         (vertical-skylines . ,ly:axis-group-interface::calc-skylines)
343         (X-extent . ,ly:axis-group-interface::width)
344         (Y-extent . ,axis-group-interface::height)
345         (meta . ((class . Spanner)
346                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
347                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
348                  (interfaces . (axis-group-interface
349                                 outside-staff-axis-group-interface))))))
350
351
352     (Beam
353      . (
354         ;; todo: clean this up a bit: the list is getting
355         ;; rather long.
356         (auto-knee-gap . 5.5)
357         (beam-segments . ,ly:beam::calc-beam-segments)
358         (beam-thickness . 0.48) ; in staff-space
359
360         ;; We have some unreferenced problems here.
361         ;;
362         ;; If we shorten beamed stems less than normal stems (1 staff-space),
363         ;; or high order less than 8th beams, patterns like
364         ;;     c''4 [c''8 c''] c''4 [c''16 c]
365         ;; are ugly (different stem lengths).
366         ;;
367         ;; But if we shorten 16th beams as much as 8th beams, a single
368         ;; forced 16th beam looks *very* short.
369
370         ;; We choose to shorten 8th beams the same as single stems,
371         ;; and high order beams less than 8th beams, so that all
372         ;; isolated shortened beams look nice and a bit shortened,
373         ;; sadly possibly breaking patterns with high order beams.
374         (beamed-stem-shorten . (1.0 0.5 0.25))
375
376         (beaming . ,ly:beam::calc-beaming)
377         (clip-edges . #t)
378         (collision-interfaces . (beam-interface
379                                  clef-interface
380                                  clef-modifier-interface
381                                  flag-interface
382                                  inline-accidental-interface
383                                  key-signature-interface
384                                  note-head-interface
385                                  stem-interface
386                                  time-signature-interface))
387         (cross-staff . ,ly:beam::calc-cross-staff)
388         (damping . 1)
389         (details
390          .(
391            (secondary-beam-demerit . 10)
392            (stem-length-demerit-factor . 5)
393            (region-size . 2)
394            (beam-eps . 0.001)
395            (stem-length-limit-penalty . 5000)
396            (damping-direction-penalty . 800)
397            (hint-direction-penalty . 20)
398            (musical-direction-factor . 400)
399            (ideal-slope-factor . 10)
400            (collision-penalty . 500)
401            (collision-padding . 0.35)
402            (round-to-zero-slope . 0.02)))
403         (direction . ,ly:beam::calc-direction)
404
405         (normalized-endpoints . ,ly:spanner::calc-normalized-endpoints)
406         ;; only for debugging.
407         (font-family . roman)
408
409         (gap . 0.8)
410         (neutral-direction . ,DOWN)
411         (positions . ,beam::place-broken-parts-individually)
412         (X-positions . ,ly:beam::calc-x-positions)
413         (transparent . ,(grob::inherit-parent-property
414                          X 'transparent))
415
416         ;; this is a hack to set stem lengths, if positions is set.
417         (quantized-positions . ,ly:beam::set-stem-lengths)
418
419         (shorten . ,ly:beam::calc-stem-shorten)
420         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
421         (stencil . ,ly:beam::print)
422
423         (meta . ((class . Spanner)
424                  (object-callbacks . ((normal-stems . ,ly:beam::calc-normal-stems)))
425                  (interfaces . (beam-interface
426                                 font-interface
427                                 staff-symbol-referencer-interface
428                                 unbreakable-spanner-interface))))))
429
430     (BendAfter
431      . (
432         (minimum-length . 0.5)
433         (stencil . ,bend::print)
434         (thickness . 2.0)
435         (meta . ((class . Spanner)
436                  (interfaces . (bend-after-interface
437                                 spanner-interface))))))
438
439     (BreakAlignGroup
440      . (
441         (axes . (,X))
442         (break-align-anchor . ,ly:break-aligned-interface::calc-average-anchor)
443         (break-visibility . ,ly:break-aligned-interface::calc-break-visibility)
444         (X-extent . ,ly:axis-group-interface::width)
445         (meta . ((class . Item)
446                  (interfaces . (axis-group-interface
447                                 break-aligned-interface))))))
448
449     (BreakAlignment
450      . (
451         (axes . (,X))
452         (break-align-orders . ;; end of line
453                             #((
454                                left-edge
455                                cue-end-clef
456                                ambitus
457                                breathing-sign
458                                clef
459                                cue-clef
460                                staff-bar
461                                key-cancellation
462                                key-signature
463                                time-signature
464                                custos)
465
466                               ;; unbroken
467                               (
468                                left-edge
469                                cue-end-clef
470                                ambitus
471                                breathing-sign
472                                clef
473                                cue-clef
474                                staff-bar
475                                key-cancellation
476                                key-signature
477                                time-signature
478                                custos)
479
480                               ;; begin of line
481                               (
482                                left-edge
483                                ambitus
484                                breathing-sign
485                                clef
486                                key-cancellation
487                                key-signature
488                                time-signature
489                                staff-bar
490                                cue-clef
491                                custos)))
492         (non-musical . #t)
493         (positioning-done . ,ly:break-alignment-interface::calc-positioning-done)
494         (stacking-dir . 1)
495         (X-extent . ,ly:axis-group-interface::width)
496         (meta . ((class . Item)
497                  (interfaces . (axis-group-interface
498                                 break-alignment-interface))))))
499
500     (BreathingSign
501      . (
502         (break-align-symbol . breathing-sign)
503         (break-visibility . ,begin-of-line-invisible)
504         (non-musical . #t)
505         (space-alist . (
506                         (ambitus . (extra-space . 2.0))
507                         (custos . (minimum-space . 1.0))
508                         (key-signature . (minimum-space . 1.5))
509                         (time-signature . (minimum-space . 1.5))
510                         (staff-bar . (minimum-space . 1.5))
511                         (clef . (minimum-space . 2.0))
512                         (cue-clef . (minimum-space . 2.0))
513                         (cue-end-clef . (minimum-space . 2.0))
514                         (first-note . (fixed-space . 1.0)) ;huh?
515                         (right-edge . (extra-space . 0.1))))
516         (stencil . ,ly:text-interface::print)
517         (text . ,(make-musicglyph-markup "scripts.rcomma"))
518         (Y-offset . ,ly:breathing-sign::offset-callback)
519         (Y-extent . ,grob::always-Y-extent-from-stencil)
520         (meta . ((class . Item)
521                  (interfaces . (break-aligned-interface
522                                 breathing-sign-interface
523                                 font-interface
524                                 outside-staff-interface
525                                 text-interface))))))
526
527     (ChordName
528      . (
529         (after-line-breaking . ,ly:chord-name::after-line-breaking)
530         (font-family . sans)
531         (font-size . 1.5)
532         (stencil . ,ly:text-interface::print)
533         (extra-spacing-height . (0.2 . -0.2))
534         (extra-spacing-width . (-0.5 . 0.5))
535         (word-space . 0.0)
536         (Y-extent . ,grob::always-Y-extent-from-stencil)
537         (meta . ((class . Item)
538                  (interfaces . (chord-name-interface
539                                 font-interface
540                                 outside-staff-interface
541                                 rhythmic-grob-interface
542                                 text-interface))))))
543
544     (Clef
545      . (
546         (avoid-slur . inside)
547         (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
548         (break-align-anchor-alignment . ,RIGHT)
549         (break-align-symbol . clef)
550         (break-visibility . ,begin-of-line-visible)
551         (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-at-beginning-of-line)
552         (glyph-name . ,ly:clef::calc-glyph-name)
553         (non-musical . #t)
554         (space-alist . ((cue-clef . (extra-space . 2.0))
555                         (staff-bar . (extra-space . 0.7))
556                         (key-cancellation . (minimum-space . 3.5))
557                         (key-signature . (minimum-space . 3.5))
558                         (time-signature . (minimum-space . 4.2))
559                         (first-note . (minimum-fixed-space . 5.0))
560                         (next-note . (extra-space . 1.0))
561                         (right-edge . (extra-space . 0.5))))
562         (stencil . ,ly:clef::print)
563         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
564         (Y-offset . ,staff-symbol-referencer::callback)
565         (Y-extent . ,grob::always-Y-extent-from-stencil)
566         (meta . ((class . Item)
567                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
568                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
569                  (interfaces . (break-aligned-interface
570                                 clef-interface
571                                 font-interface
572                                 pure-from-neighbor-interface
573                                 staff-symbol-referencer-interface))))))
574
575     (ClefModifier
576      . (
577         (break-visibility . ,(grob::inherit-parent-property
578                               X 'break-visibility))
579         (clef-alignments . ((G . (-0.2 . 0.1))
580                             (F . (-0.3 . -0.2))
581                             (C . (0 . 0))))
582         (color . ,(grob::inherit-parent-property
583                    X 'color))
584         (font-shape . italic)
585         (font-size . -4)
586         (parent-alignment-X . ,ly:clef-modifier::calc-parent-alignment)
587         (self-alignment-X . ,CENTER)
588         (staff-padding . 0.7)
589         (stencil . ,ly:text-interface::print)
590         (transparent . ,(grob::inherit-parent-property
591                          X 'transparent))
592         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
593         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
594         (Y-extent . ,grob::always-Y-extent-from-stencil)
595         (Y-offset . ,side-position-interface::y-aligned-side)
596         (meta . ((class . Item)
597                  (interfaces . (clef-modifier-interface
598                                 font-interface
599                                 outside-staff-interface
600                                 self-alignment-interface
601                                 side-position-interface
602                                 text-interface))))))
603
604     (ClusterSpanner
605      . (
606         (cross-staff . ,ly:cluster::calc-cross-staff)
607         (minimum-length . 0.0)
608         (padding . 0.25)
609         (springs-and-rods . ,ly:spanner::set-spacing-rods)
610         (stencil . ,ly:cluster::print)
611         (style . ramp)
612         (meta . ((class . Spanner)
613                  (interfaces . (cluster-interface))))))
614
615     (ClusterSpannerBeacon
616      . (
617         (Y-extent . ,ly:cluster-beacon::height)
618         (meta . ((class . Item)
619                  (interfaces . (cluster-beacon-interface
620                                 rhythmic-grob-interface))))))
621
622     (CombineTextScript
623      . (
624         (avoid-slur . outside)
625         (baseline-skip . 2)
626         (direction . ,UP)
627         (extra-spacing-width . (+inf.0 . -inf.0))
628         (font-series . bold)
629         (outside-staff-priority . 450)
630         (padding . 0.5)
631         (parent-alignment-X . #f)
632         (script-priority . 200)
633         (self-alignment-X . #f)
634         (side-axis . ,Y)
635         (staff-padding . 0.5)
636         (stencil . ,ly:text-interface::print)
637         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
638         (Y-offset . ,side-position-interface::y-aligned-side)
639         (Y-extent . ,grob::always-Y-extent-from-stencil)
640         (meta . ((class . Item)
641                  (interfaces . (font-interface
642                                 outside-staff-interface
643                                 self-alignment-interface
644                                 side-position-interface
645                                 text-interface
646                                 text-script-interface))))))
647
648     (CueClef
649      . (
650         (avoid-slur . inside)
651         (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
652         (break-align-symbol . cue-clef)
653         (break-visibility . ,begin-of-line-visible)
654         (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-at-beginning-of-line)
655         (font-size . -4)
656         (glyph-name . ,ly:clef::calc-glyph-name)
657         (non-musical . #t)
658         (full-size-change . #t)
659         (space-alist . ((staff-bar . (minimum-space . 2.7))
660                         (key-cancellation . (minimum-space . 3.5))
661                         (key-signature . (minimum-space . 3.5))
662                         (time-signature . (minimum-space . 4.2))
663                         (custos . (minimum-space . 0.0))
664                         (first-note . (minimum-fixed-space . 3.0))
665                         (next-note . (extra-space . 1.0))
666                         (right-edge . (extra-space . 0.5))))
667         (stencil . ,ly:clef::print)
668         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
669         (Y-offset . ,staff-symbol-referencer::callback)
670         (Y-extent . ,grob::always-Y-extent-from-stencil)
671         (meta . ((class . Item)
672                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
673                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
674                  (interfaces . (break-aligned-interface
675                                 clef-interface
676                                 font-interface
677                                 pure-from-neighbor-interface
678                                 staff-symbol-referencer-interface))))))
679
680     (CueEndClef
681      . (
682         (avoid-slur . inside)
683         (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
684         (break-align-symbol . cue-end-clef)
685         (break-visibility . ,begin-of-line-invisible)
686         (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-at-beginning-of-line)
687         (font-size . -4)
688         (glyph-name . ,ly:clef::calc-glyph-name)
689         (non-musical . #t)
690         (full-size-change . #t)
691         (space-alist . ((clef . (extra-space . 0.7))
692                         (cue-clef . (extra-space . 0.7))
693                         (staff-bar . (extra-space . 0.7))
694                         (key-cancellation . (minimum-space . 3.5))
695                         (key-signature . (minimum-space . 3.5))
696                         (time-signature . (minimum-space . 4.2))
697                         (first-note . (minimum-fixed-space . 5.0))
698                         (next-note . (extra-space . 1.0))
699                         (right-edge . (extra-space . 0.5))))
700         (stencil . ,ly:clef::print)
701         (Y-offset . ,staff-symbol-referencer::callback)
702         (Y-extent . ,grob::always-Y-extent-from-stencil)
703         (meta . ((class . Item)
704                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
705                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
706                  (interfaces . (break-aligned-interface
707                                 clef-interface
708                                 font-interface
709                                 pure-from-neighbor-interface
710                                 staff-symbol-referencer-interface))))))
711
712     (Custos
713      . (
714         (break-align-symbol . custos)
715         (break-visibility . ,end-of-line-visible)
716         (neutral-direction . ,DOWN)
717         (non-musical . #t)
718         (space-alist . (
719                         (first-note . (minimum-fixed-space . 0.0))
720                         (right-edge . (extra-space . 0.1))))
721         (stencil . ,ly:custos::print)
722         (style . vaticana)
723         (Y-offset . ,staff-symbol-referencer::callback)
724         (meta . ((class . Item)
725                  (interfaces  . (break-aligned-interface
726                                  custos-interface
727                                  font-interface
728                                  staff-symbol-referencer-interface))))))
729
730     (DotColumn
731      . (
732         (axes . (,X))
733         (chord-dots-limit . 3)
734         (direction . ,RIGHT)
735         (positioning-done . ,ly:dot-column::calc-positioning-done)
736         (X-extent . ,ly:axis-group-interface::width)
737         (meta . ((class . Item)
738                  (interfaces . (axis-group-interface
739                                 dot-column-interface))))))
740
741     (Dots
742      . (
743         (avoid-slur . inside)
744         (dot-count . ,dots::calc-dot-count)
745         (staff-position . ,dots::calc-staff-position)
746         (stencil . ,ly:dots::print)
747         (Y-extent . ,grob::always-Y-extent-from-stencil)
748         (extra-spacing-height . (-0.5 . 0.5))
749         (extra-spacing-width . (0.0 . 0.2))
750         (meta . ((class . Item)
751                  (interfaces . (dots-interface
752                                 font-interface
753                                 staff-symbol-referencer-interface))))))
754
755     (DoublePercentRepeat
756      . (
757         (break-align-symbol . staff-bar)
758         (break-visibility . ,begin-of-line-invisible)
759         (dot-negative-kern . 0.75)
760         (font-encoding . fetaMusic)
761         (non-musical . #t)
762         (slash-negative-kern . 1.6)
763         (slope . 1.0)
764         (stencil . ,ly:percent-repeat-item-interface::double-percent)
765         (Y-extent . ,grob::always-Y-extent-from-stencil)
766         (thickness . 0.48)
767         (meta . ((class . Item)
768                  (interfaces . (break-aligned-interface
769                                 font-interface
770                                 percent-repeat-interface
771                                 percent-repeat-item-interface))))))
772
773     (DoublePercentRepeatCounter
774      . (
775         (direction . ,UP)
776         (font-encoding . fetaText)
777         (font-size . -2)
778         (padding . 0.2)
779         (parent-alignment-X . ,CENTER)
780         (self-alignment-X . ,CENTER)
781         (side-axis . ,Y)
782         (staff-padding . 0.25)
783         (stencil . ,ly:text-interface::print)
784         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
785         (Y-extent . ,grob::always-Y-extent-from-stencil)
786         (Y-offset . ,side-position-interface::y-aligned-side)
787         (meta . ((class . Item)
788                  (interfaces . (font-interface
789                                 outside-staff-interface
790                                 percent-repeat-interface
791                                 percent-repeat-item-interface
792                                 self-alignment-interface
793                                 side-position-interface
794                                 text-interface))))))
795
796     (DoubleRepeatSlash
797      . (
798         (dot-negative-kern . 0.75)
799         (font-encoding . fetaMusic)
800         (slash-negative-kern . 1.6)
801         (slope . 1.0)
802         (stencil . ,ly:percent-repeat-item-interface::beat-slash)
803         (Y-extent . ,grob::always-Y-extent-from-stencil)
804         (thickness . 0.48)
805         (meta . ((class . Item)
806                  (interfaces . (font-interface
807                                 outside-staff-interface
808                                 percent-repeat-interface
809                                 percent-repeat-item-interface
810                                 rhythmic-grob-interface))))))
811
812     (DynamicLineSpanner
813      . (
814         (axes . (,Y))
815         (cross-staff . ,ly:side-position-interface::calc-cross-staff)
816         (direction . ,DOWN)
817         (minimum-space . 1.2)
818         (outside-staff-priority . 250)
819         (padding . 0.6)
820         (side-axis . ,Y)
821         (slur-padding . 0.3)
822         (staff-padding . 0.1)
823         (vertical-skylines . ,grob::always-vertical-skylines-from-element-stencils)
824         (X-extent . ,ly:axis-group-interface::width)
825         (Y-extent . ,axis-group-interface::height)
826         (Y-offset . ,side-position-interface::y-aligned-side)
827         (meta . ((class . Spanner)
828                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
829                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
830                  (interfaces . (axis-group-interface
831                                 dynamic-interface
832                                 dynamic-line-spanner-interface
833                                 outside-staff-interface
834                                 side-position-interface))))))
835
836     (DynamicText
837      . (
838
839         ;; todo.
840
841         (direction . ,ly:script-interface::calc-direction)
842         (extra-spacing-width . (+inf.0 . -inf.0))
843         (font-encoding . fetaText)
844         (font-series . bold)
845         (font-shape . italic)
846         (parent-alignment-X . ,CENTER)
847         (positioning-done . ,ly:script-interface::calc-positioning-done)
848         (right-padding . 0.5)
849         (self-alignment-X . ,CENTER)
850         (stencil . ,ly:text-interface::print)
851         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
852         (Y-extent . ,grob::always-Y-extent-from-stencil)
853         (X-align-on-main-noteheads . #t)
854         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
855         (Y-offset . ,(scale-by-font-size -0.6)) ; center on an 'm'
856         (meta . ((class . Item)
857                  (interfaces . (dynamic-interface
858                                 dynamic-text-interface
859                                 font-interface
860                                 outside-staff-interface
861                                 script-interface
862                                 self-alignment-interface
863                                 text-interface))))))
864
865     (DynamicTextSpanner
866      . (
867         (before-line-breaking . ,dynamic-text-spanner::before-line-breaking)
868         (bound-details . ((right . ((attach-dir .  ,LEFT)
869                                     (Y . 0)
870                                     (padding . 0.75)
871                                     ))
872                           (right-broken . ((attach-dir .  ,RIGHT)
873                                            (padding . 0.0)
874                                            ))
875
876                           (left . ((attach-dir .  ,LEFT)
877                                    (Y . 0)
878                                    (stencil-offset . (-0.75 . -0.5))
879                                    (padding . 0.75)
880                                    ))
881                           (left-broken . ((attach-dir .  ,RIGHT)
882                                           ))
883                           ))
884         (dash-fraction . 0.2)
885         (dash-period . 3.0)
886
887         ;; rather ugh with NCSB
888         ;; (font-series . bold)
889         (font-shape . italic)
890
891         ;; need to blend with dynamic texts.
892         (font-size . 1)
893
894         (left-bound-info . ,ly:line-spanner::calc-left-bound-info-and-text)
895
896         (minimum-length . 2.0)
897         ;; make sure the spanner doesn't get too close to notes
898         (minimum-Y-extent . (-1 . 1))
899
900         (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
901         (skyline-horizontal-padding . 0.2)
902         (springs-and-rods . ,ly:spanner::set-spacing-rods)
903         (stencil . ,ly:line-spanner::print)
904         (style . dashed-line)
905         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
906         (meta . ((class . Spanner)
907                  (interfaces . (dynamic-interface
908                                 dynamic-text-spanner-interface
909                                 font-interface
910                                 line-interface
911                                 line-spanner-interface
912                                 ;for now, LilyPond never will typeset
913                                 ;these without a DynamicLineSpanner
914                                 ;as their controlling element
915                                 ;so, they do not need the
916                                 ;outside-staff-interface
917                                 spanner-interface
918                                 text-interface))))))
919
920
921     (Episema
922      . (
923         (bound-details . ((left . ((Y . 0)
924                                    (padding . 0)
925                                    (attach-dir . ,LEFT)
926                                    ))
927                           (right . ((Y . 0)
928                                     (padding . 0)
929                                     (attach-dir . ,RIGHT)
930                                     ))
931                           ))
932         (direction . ,UP)
933         (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
934         (quantize-position . #t)
935         (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
936         (side-axis . ,Y)
937         (stencil . ,ly:line-spanner::print)
938         (style . line)
939         (Y-offset . ,side-position-interface::y-aligned-side)
940         (meta . ((class . Spanner)
941                  (interfaces . (episema-interface
942                                 font-interface
943                                 line-interface
944                                 line-spanner-interface
945                                 side-position-interface))))))
946
947
948     (Fingering
949      . (
950
951         ;; sync with TextScript (?)
952         (add-stem-support . ,only-if-beamed)
953         (avoid-slur . around)
954         (cross-staff . ,script-or-side-position-cross-staff)
955         (direction . ,ly:script-interface::calc-direction)
956         (font-encoding . fetaText)
957         (font-size . -5)                ; don't overlap when next to heads.
958         (padding . 0.5)
959         (parent-alignment-X . ,CENTER)
960         (parent-alignment-Y . ,CENTER)
961         (positioning-done . ,ly:script-interface::calc-positioning-done)
962         (script-priority . 100)
963         (self-alignment-X . ,CENTER)
964         (self-alignment-Y . ,CENTER)
965         (slur-padding . 0.2)
966         (staff-padding . 0.5)
967         (stencil . ,ly:text-interface::print)
968         (text . ,fingering::calc-text)
969         (Y-extent . ,grob::always-Y-extent-from-stencil)
970         (meta . ((class . Item)
971                  (interfaces . (finger-interface
972                                 font-interface
973                                 outside-staff-interface
974                                 self-alignment-interface
975                                 side-position-interface
976                                 text-interface
977                                 text-script-interface))))))
978
979     (FingeringColumn
980      . (
981         (padding . 0.2)
982         (positioning-done . ,ly:fingering-column::calc-positioning-done)
983         (snap-radius . 0.3)
984         (meta . ((class . Item)
985                  (interfaces . (fingering-column-interface))))))
986
987     (Flag
988      . (
989         (glyph-name . ,ly:flag::glyph-name)
990         (stencil . ,ly:flag::print)
991         (transparent . ,(grob::inherit-parent-property
992                          X 'transparent))
993         (color . ,(grob::inherit-parent-property
994                    X 'color))
995         (X-extent . ,ly:flag::width)
996         (X-offset . ,ly:flag::calc-x-offset)
997         (Y-offset . ,(ly:make-unpure-pure-container ly:flag::calc-y-offset ly:flag::pure-calc-y-offset))
998         (Y-extent . ,grob::always-Y-extent-from-stencil)
999         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1000         (meta . ((class . Item)
1001                  (interfaces . (flag-interface
1002                                 font-interface))))))
1003
1004     (FootnoteItem
1005      . (
1006         (annotation-balloon . #f)
1007         (annotation-line . #t)
1008         (automatically-numbered . ,(grob::calc-property-by-copy 'automatically-numbered))
1009         (break-visibility . ,(grob::inherit-parent-property
1010                               X 'break-visibility))
1011         (footnote . #t)
1012         (footnote-text . ,(grob::calc-property-by-copy 'footnote-text))
1013         (stencil . ,ly:balloon-interface::print)
1014         (text . ,(grob::calc-property-by-copy 'text))
1015         (X-extent . #f)
1016         (Y-extent . #f)
1017         (X-offset . ,(grob::calc-property-by-copy 'X-offset))
1018         (Y-offset . ,(grob::calc-property-by-copy 'Y-offset))
1019         (meta . ((class . Item)
1020                  (interfaces . (balloon-interface
1021                                 footnote-interface
1022                                 font-interface
1023                                 text-interface))))))
1024
1025     (FootnoteSpanner
1026      . (
1027         (annotation-balloon . #f)
1028         (annotation-line . #t)
1029         (automatically-numbered . ,(grob::calc-property-by-copy 'automatically-numbered))
1030         (footnote . #t)
1031         (footnote-text . ,(grob::calc-property-by-copy 'footnote-text))
1032         (spanner-placement . ,LEFT)
1033         (stencil . ,ly:balloon-interface::print-spanner)
1034         (text . ,(grob::calc-property-by-copy 'text))
1035         (X-extent . #f)
1036         (Y-extent . #f)
1037         (X-offset . ,(grob::calc-property-by-copy 'X-offset))
1038         (Y-offset . ,(grob::calc-property-by-copy 'Y-offset))
1039         (meta . ((class . Spanner)
1040                  (interfaces . (balloon-interface
1041                                 footnote-interface
1042                                 footnote-spanner-interface
1043                                 font-interface
1044                                 text-interface))))))
1045
1046     (FretBoard
1047      . (
1048         (after-line-breaking . ,ly:chord-name::after-line-breaking)
1049         (fret-diagram-details . ((finger-code . below-string)))
1050         (stencil . ,fret-board::calc-stencil)
1051         (extra-spacing-height . (0.2 . -0.2))
1052         (extra-spacing-width . (-0.5 . 0.5))
1053         (Y-extent . ,grob::always-Y-extent-from-stencil)
1054         (meta . ((class . Item)
1055                  (interfaces . (chord-name-interface
1056                                 font-interface
1057                                 fret-diagram-interface
1058                                 outside-staff-interface
1059                                 rhythmic-grob-interface))))))
1060
1061
1062     (Glissando
1063      . (
1064         (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
1065         (bound-details . ((right . ((attach-dir .  ,LEFT)
1066                                     (end-on-accidental . #t)
1067                                     (padding . 0.5)
1068                                     ))
1069                           (left . ((attach-dir .  ,RIGHT)
1070                                    (padding . 0.5)
1071                                    (start-at-dot . #t)
1072                                    ))
1073                           ))
1074         (cross-staff . ,ly:line-spanner::calc-cross-staff)
1075         (gap . 0.5)
1076         (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
1077         (normalized-endpoints . ,ly:spanner::calc-normalized-endpoints)
1078         (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
1079         (simple-Y . #t)
1080         (stencil . ,ly:line-spanner::print)
1081         (style . line)
1082         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1083         (X-extent . #f)
1084         (Y-extent . #f)
1085         (zigzag-width . 0.75)
1086         (meta . ((class . Spanner)
1087                  (interfaces . (glissando-interface
1088                                 line-interface
1089                                 line-spanner-interface
1090                                 unbreakable-spanner-interface))))))
1091
1092     (GraceSpacing
1093      . (
1094         (common-shortest-duration . ,grace-spacing::calc-shortest-duration)
1095         (shortest-duration-space . 1.6)
1096         (spacing-increment . 0.8)
1097         (meta . ((class . Spanner)
1098                  (interfaces . (grace-spacing-interface
1099                                 spacing-options-interface
1100                                 spanner-interface))))))
1101
1102     (GridLine
1103      . (
1104         (layer . 0)
1105         (parent-alignment-X . ,CENTER)
1106         (self-alignment-X . ,CENTER)
1107         (stencil . ,ly:grid-line-interface::print)
1108         (X-extent . ,ly:grid-line-interface::width)
1109         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
1110         (meta . ((class . Item)
1111                  (interfaces . (grid-line-interface
1112                                 self-alignment-interface))))))
1113
1114     (GridPoint
1115      . (
1116         (X-extent . (0 . 0))
1117         (Y-extent . (0 . 0))
1118         (meta . ((class . Item)
1119                  (interfaces . (grid-point-interface))))))
1120
1121
1122     (Hairpin
1123      . (
1124         (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
1125         (bound-padding . 1.0)
1126         (broken-bound-padding . ,ly:hairpin::broken-bound-padding)
1127         (circled-tip . #f)
1128         (grow-direction . ,hairpin::calc-grow-direction)
1129         (height . 0.6666)
1130         (minimum-length . 2.0)
1131         (self-alignment-Y . ,CENTER)
1132         (springs-and-rods . ,ly:spanner::set-spacing-rods)
1133         (stencil . ,ly:hairpin::print)
1134         (thickness . 1.0)
1135         (to-barline . #t)
1136         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1137         (Y-extent . ,(grob::unpure-Y-extent-from-stencil ly:hairpin::pure-height))
1138         (Y-offset . ,self-alignment-interface::y-aligned-on-self)
1139         (meta . ((class . Spanner)
1140                  (interfaces . (dynamic-interface
1141                                 hairpin-interface
1142                                 line-interface
1143                                 outside-staff-interface
1144                                 self-alignment-interface
1145                                 spanner-interface))))))
1146
1147     (HorizontalBracket
1148      . (
1149         (bracket-flare . (0.5 . 0.5))
1150         (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors)
1151         (direction . ,DOWN)
1152         (padding . 0.2)
1153         (side-axis . ,Y)
1154         (staff-padding . 0.2)
1155         (stencil . ,ly:horizontal-bracket::print)
1156         (thickness . 1.0)
1157         (Y-offset . ,side-position-interface::y-aligned-side)
1158         (meta . ((class . Spanner)
1159                  (interfaces . (horizontal-bracket-interface
1160                                 line-interface
1161                                 outside-staff-interface
1162                                 side-position-interface
1163                                 spanner-interface))))))
1164
1165
1166     (InstrumentName
1167      . (
1168         (direction . ,LEFT)
1169         (padding . 0.3)
1170         (self-alignment-X . ,CENTER)
1171         (self-alignment-Y . ,CENTER)
1172         (stencil . ,system-start-text::print)
1173         (X-offset . ,system-start-text::calc-x-offset)
1174         (Y-offset . ,system-start-text::calc-y-offset)
1175         (meta . ((class . Spanner)
1176                  (interfaces . (font-interface
1177                                 self-alignment-interface
1178                                 side-position-interface
1179                                 system-start-text-interface
1180                                 text-interface))))))
1181
1182     (InstrumentSwitch
1183      . (
1184         (direction . ,UP)
1185         (extra-spacing-width . (+inf.0 . -inf.0))
1186         (outside-staff-priority . 500)
1187         (padding . 0.5)
1188         (parent-alignment-X . #f)
1189         (self-alignment-X . ,LEFT)
1190         (side-axis . ,Y)
1191         (staff-padding . 0.5)
1192         (stencil . ,ly:text-interface::print)
1193         (Y-extent . ,grob::always-Y-extent-from-stencil)
1194         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
1195         (Y-offset . ,side-position-interface::y-aligned-side)
1196         (meta . ((class . Item)
1197                  (interfaces . (font-interface
1198                                 outside-staff-interface
1199                                 self-alignment-interface
1200                                 side-position-interface
1201                                 text-interface))))))
1202
1203
1204     (KeyCancellation
1205      . (
1206         (break-align-symbol . key-cancellation)
1207         (break-visibility . ,begin-of-line-invisible)
1208         (glyph-name-alist . ,cancellation-glyph-name-alist)
1209         (non-musical . #t)
1210         (flat-positions . (2 3 4 2 1 2 1))
1211         (sharp-positions . (4 5 4 2 3 2 3))
1212         (space-alist . (
1213                         (time-signature . (extra-space . 1.25))
1214                         (staff-bar . (extra-space . 0.6))
1215                         (key-signature . (extra-space . 0.5))
1216                         (cue-clef . (extra-space . 0.5))
1217                         (right-edge . (extra-space . 0.5))
1218                         (first-note . (fixed-space . 2.5))
1219                         (custos . (extra-space . 1.0))))
1220         (stencil . ,ly:key-signature-interface::print)
1221         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1222         (Y-extent . ,grob::always-Y-extent-from-stencil)
1223         (extra-spacing-width . (0.0 . 1.0))
1224         (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-including-staff)
1225         (Y-offset . ,staff-symbol-referencer::callback)
1226         (meta . ((class . Item)
1227                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
1228                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
1229                  (interfaces . (break-aligned-interface
1230                                 font-interface
1231                                 key-cancellation-interface
1232                                 key-signature-interface
1233                                 pure-from-neighbor-interface
1234                                 staff-symbol-referencer-interface))))))
1235
1236     (KeySignature
1237      . (
1238         (avoid-slur . inside)
1239         (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
1240         (break-align-anchor-alignment . ,RIGHT)
1241         (break-align-symbol . key-signature)
1242         (break-visibility . ,begin-of-line-visible)
1243         (glyph-name-alist . ,standard-alteration-glyph-name-alist)
1244         (non-musical . #t)
1245         (flat-positions . (2 3 4 2 1 2 1))
1246         (sharp-positions . (4 5 4 2 3 2 3))
1247         (space-alist . (
1248                         (time-signature . (extra-space . 1.15))
1249                         (staff-bar . (extra-space . 1.1))
1250                         (cue-clef . (extra-space . 0.5))
1251                         (right-edge . (extra-space . 0.5))
1252                         (first-note . (fixed-space . 2.5))))
1253         (stencil . ,ly:key-signature-interface::print)
1254         (Y-extent . ,grob::always-Y-extent-from-stencil)
1255         (extra-spacing-width . (0.0 . 1.0))
1256         (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-including-staff)
1257         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1258         (Y-offset . ,staff-symbol-referencer::callback)
1259         (meta . ((class . Item)
1260                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
1261                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
1262                  (interfaces . (break-aligned-interface
1263                                 font-interface
1264                                 key-signature-interface
1265                                 pure-from-neighbor-interface
1266                                 staff-symbol-referencer-interface))))))
1267
1268     (KievanLigature
1269      . (
1270         (springs-and-rods . ,ly:spanner::set-spacing-rods)
1271         (stencil . ,ly:kievan-ligature::print)
1272         (padding . 0.5)
1273         (meta . ((class . Spanner)
1274                  (interfaces . (font-interface
1275                                 kievan-ligature-interface))))))
1276
1277     (LaissezVibrerTie
1278      . (
1279         (control-points . ,ly:semi-tie::calc-control-points)
1280         (cross-staff . ,semi-tie::calc-cross-staff)
1281         (details . ((ratio . 0.333)
1282                     (height-limit . 1.0)))
1283         (direction . ,ly:tie::calc-direction)
1284         (head-direction . ,LEFT)
1285         (stencil  . ,laissez-vibrer::print)
1286         (thickness . 1.0)
1287         (extra-spacing-height . (-0.5 . 0.5))
1288         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1289         (Y-extent . ,grob::always-Y-extent-from-stencil)
1290         (meta . ((class . Item)
1291                  (interfaces . (semi-tie-interface))))))
1292
1293     (LaissezVibrerTieColumn
1294      . (
1295         (head-direction . ,ly:semi-tie-column::calc-head-direction)
1296         (positioning-done . ,ly:semi-tie-column::calc-positioning-done)
1297         (X-extent . #f)
1298         (Y-extent . #f)
1299         (meta . ((class . Item)
1300                  (interfaces . (semi-tie-column-interface))))))
1301
1302     (LedgerLineSpanner
1303      . (
1304         (layer . 0)
1305         (length-fraction . 0.25)
1306         (minimum-length-fraction . 0.25)
1307         (springs-and-rods . ,ly:ledger-line-spanner::set-spacing-rods)
1308         (stencil . ,ly:ledger-line-spanner::print)
1309         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1310         (X-extent . #f)
1311         (Y-extent . #f)
1312         (meta . ((class . Spanner)
1313                  (interfaces . (ledger-line-spanner-interface))))))
1314
1315     (LeftEdge
1316      . (
1317         (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
1318         (break-align-symbol . left-edge)
1319         (break-visibility . ,begin-of-line-visible)
1320         (non-musical . #t)
1321         (space-alist . (
1322                         (ambitus . (extra-space . 2.0))
1323                         (breathing-sign . (minimum-space . 0.0))
1324                         (cue-end-clef . (extra-space . 0.8))
1325                         (clef . (extra-space . 0.8))
1326                         (cue-clef . (extra-space . 0.8))
1327                         (staff-bar . (extra-space . 0.0))
1328                         (key-cancellation . (extra-space . 0.0))
1329                         (key-signature . (extra-space . 0.8))
1330                         (time-signature . (extra-space . 1.0))
1331                         (custos . (extra-space . 0.0))
1332                         (first-note . (fixed-space . 2.0))
1333                         (right-edge . (extra-space . 0.0))
1334                         ))
1335         (X-extent . (0 . 0))
1336         (Y-extent . (0 . 0))
1337         (meta . ((class . Item)
1338                  (interfaces . (break-aligned-interface))))))
1339
1340     (LigatureBracket
1341      . (
1342         ;; ugh.  A ligature bracket is totally different from
1343         ;; a tuplet bracket.
1344
1345         (bracket-visibility . #t)
1346         (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors)
1347         (direction . ,UP)
1348         (edge-height . (0.7 . 0.7))
1349         (padding . 2.0)
1350         (positions . ,ly:tuplet-bracket::calc-positions)
1351         (shorten-pair . (-0.2 . -0.2))
1352         (staff-padding . 0.25)
1353         (stencil . ,ly:tuplet-bracket::print)
1354         (thickness . 1.6)
1355         (X-positions . ,ly:tuplet-bracket::calc-x-positions)
1356         (meta . ((class . Spanner)
1357                  (interfaces . (line-interface
1358                                 tuplet-bracket-interface))))))
1359
1360     (LyricExtender
1361      . (
1362         (minimum-length . 1.5)
1363         (stencil . ,ly:lyric-extender::print)
1364         (thickness . 0.8) ; line-thickness
1365         (Y-extent . (0 . 0))
1366         (meta . ((class . Spanner)
1367                  (interfaces . (lyric-extender-interface
1368                                 lyric-interface))))))
1369
1370     (LyricHyphen
1371      . (
1372         (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
1373         (dash-period . 10.0)
1374         (height . 0.42)
1375         (length . 0.66)
1376         (minimum-distance . 0.1)
1377         (minimum-length . 0.3)
1378         (padding . 0.07)
1379         (springs-and-rods . ,ly:lyric-hyphen::set-spacing-rods)
1380         (stencil . ,ly:lyric-hyphen::print)
1381         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1382         (thickness . 1.3)
1383         (Y-extent . (0 . 0))
1384         (meta . ((class . Spanner)
1385                  (interfaces . (font-interface
1386                                 lyric-hyphen-interface
1387                                 lyric-interface
1388                                 spanner-interface))))))
1389
1390     (LyricSpace
1391      . (
1392         (minimum-distance . 0.45)
1393         (padding . 0.0)
1394         (springs-and-rods . ,ly:lyric-hyphen::set-spacing-rods)
1395         (X-extent . #f)
1396         (Y-extent . #f)
1397         (meta . ((class . Spanner)
1398                  (interfaces . (lyric-hyphen-interface
1399                                 spanner-interface))))))
1400
1401     (LyricText
1402      . (
1403         (extra-spacing-width . (0.0 . 0.0))
1404         ;; Recede in height for purposes of note spacing,
1405         ;; so notes in melismata can be freely spaced above lyrics
1406         (extra-spacing-height . (0.2 . -0.2))
1407         (font-series . medium)
1408         (font-size . 1.0)
1409         (parent-alignment-X . ())
1410         (self-alignment-X . ,CENTER)
1411         (stencil . ,lyric-text::print)
1412         (text . ,(grob::calc-property-by-copy 'text))
1413         (word-space . 0.6)
1414         (skyline-horizontal-padding . 0.1)
1415         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1416         (X-align-on-main-noteheads . #t)
1417         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
1418         (Y-extent . ,grob::always-Y-extent-from-stencil)
1419         (meta . ((class . Item)
1420                  (interfaces . (font-interface
1421                                 lyric-syllable-interface
1422                                 rhythmic-grob-interface
1423                                 self-alignment-interface
1424                                 text-interface))))))
1425
1426     (MeasureCounter
1427      . (
1428         (count-from . 1)
1429         (direction . ,UP)
1430         (font-encoding . fetaText)
1431         (font-size . -2)
1432         (outside-staff-horizontal-padding . 0.5)
1433         (outside-staff-priority . 750)
1434         (self-alignment-X . ,CENTER)
1435         (side-axis . ,Y)
1436         (staff-padding . 0.5)
1437         (stencil . ,measure-counter-stencil)
1438         (meta . ((class . Spanner)
1439                  (interfaces . (font-interface
1440                                 measure-counter-interface
1441                                 outside-staff-interface
1442                                 self-alignment-interface
1443                                 side-position-interface
1444                                 text-interface))))))
1445
1446     (MeasureGrouping
1447      . (
1448         (direction . ,UP)
1449         (height . 2.0)
1450         (padding . 2)
1451         (side-axis . ,Y)
1452         (staff-padding . 3)
1453         (stencil . ,ly:measure-grouping::print)
1454         (thickness . 1)
1455         (Y-offset . ,side-position-interface::y-aligned-side)
1456         (meta . ((class . Spanner)
1457                  (interfaces . (measure-grouping-interface
1458                                 outside-staff-interface
1459                                 side-position-interface))))))
1460
1461     (MelodyItem
1462      . (
1463         (neutral-direction . ,DOWN)
1464         (meta . ((class . Item)
1465                  (interfaces . (melody-spanner-interface))))))
1466
1467     (MensuralLigature
1468      . (
1469         (springs-and-rods . ,ly:spanner::set-spacing-rods)
1470         (stencil . ,ly:mensural-ligature::print)
1471         (thickness . 1.3)
1472         (meta . ((class . Spanner)
1473                  (interfaces . (font-interface
1474                                 mensural-ligature-interface))))))
1475
1476     (MetronomeMark
1477      . (
1478         (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff)
1479         (break-visibility . ,end-of-line-invisible)
1480         (direction . ,UP)
1481         (extra-spacing-width . (+inf.0 . -inf.0))
1482         (flag-style . default)
1483         (outside-staff-horizontal-padding . 0.2)
1484         (outside-staff-priority . 1000)
1485         (padding . 0.8)
1486         (side-axis . ,Y)
1487         (stencil . ,ly:text-interface::print)
1488         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1489         (Y-offset . ,side-position-interface::y-aligned-side)
1490         (X-offset . ,self-alignment-interface::self-aligned-on-breakable)
1491         (self-alignment-X . ,LEFT)
1492         (break-align-symbols . (time-signature))
1493         (non-break-align-symbols . (paper-column-interface))
1494         (Y-extent . ,grob::always-Y-extent-from-stencil)
1495         (meta . ((class . Item)
1496                  (interfaces . (break-alignable-interface
1497                                 font-interface
1498                                 metronome-mark-interface
1499                                 outside-staff-interface
1500                                 self-alignment-interface
1501                                 side-position-interface
1502                                 text-interface))))))
1503
1504     (MultiMeasureRest
1505      . (
1506         (expand-limit . 10)
1507         (hair-thickness . 2.0)
1508         (round-up-exceptions . ())
1509         (bound-padding . 0.5)
1510         (space-increment . 2.0)
1511         (spacing-pair . (break-alignment . break-alignment))
1512         (springs-and-rods . ,ly:multi-measure-rest::set-spacing-rods)
1513         (stencil . ,ly:multi-measure-rest::print)
1514         (thick-thickness . 6.6)
1515         ;; See Wanske pp. 125
1516         (usable-duration-logs . ,(iota 4 -3))
1517         (voiced-position . 4)
1518         (Y-extent . ,(ly:make-unpure-pure-container ly:multi-measure-rest::height))
1519         (Y-offset . ,staff-symbol-referencer::callback)
1520         (meta . ((class . Spanner)
1521                  (interfaces . (font-interface
1522                                 multi-measure-interface
1523                                 outside-staff-interface
1524                                 multi-measure-rest-interface
1525                                 rest-interface
1526                                 staff-symbol-referencer-interface))))))
1527
1528     (MultiMeasureRestNumber
1529      . (
1530         (bound-padding  . 1.0)
1531         (direction . ,UP)
1532         (font-encoding . fetaText)
1533         (padding . 0.4)
1534         (parent-alignment-X . ,CENTER)
1535         (self-alignment-X . ,CENTER)
1536         (side-axis . ,Y)
1537         (springs-and-rods . ,ly:multi-measure-rest::set-text-rods)
1538         (staff-padding . 0.4)
1539         (stencil . ,ly:text-interface::print)
1540         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1541         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
1542         (Y-extent . ,grob::always-Y-extent-from-stencil)
1543         (Y-offset . ,side-position-interface::y-aligned-side)
1544         (meta . ((class . Spanner)
1545                  (interfaces . (font-interface
1546                                 multi-measure-interface
1547                                 outside-staff-interface
1548                                 self-alignment-interface
1549                                 side-position-interface
1550                                 text-interface))))))
1551
1552     (MultiMeasureRestText
1553      . (
1554         (direction . ,UP)
1555         (outside-staff-priority . 450)
1556         (padding . 0.2)
1557         (parent-alignment-X . ,CENTER)
1558         (self-alignment-X . ,CENTER)
1559         (skyline-horizontal-padding . 0.2)
1560         (staff-padding . 0.25)
1561         (stencil . ,ly:text-interface::print)
1562         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1563         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
1564         (Y-extent . ,grob::always-Y-extent-from-stencil)
1565         (Y-offset . ,side-position-interface::y-aligned-side)
1566         (meta . ((class . Spanner)
1567                  (interfaces . (font-interface
1568                                 multi-measure-interface
1569                                 outside-staff-interface
1570                                 self-alignment-interface
1571                                 side-position-interface
1572                                 text-interface))))))
1573
1574
1575     (NonMusicalPaperColumn
1576      . (
1577         (allow-loose-spacing . #t)
1578         (axes . (,X))
1579         (before-line-breaking . ,ly:paper-column::before-line-breaking)
1580         (bound-alignment-interfaces . (break-alignment-interface))
1581         ;; used by Paper_column::print when debugging columns:
1582         (font-size . -7.5)
1583         (full-measure-extra-space . 1.0)
1584         (horizontal-skylines . ,ly:separation-item::calc-skylines)
1585         ;;                    (stencil . ,ly:paper-column::print)
1586
1587         (keep-inside-line . #t)
1588         ;; used by Paper_column::print when debugging columns:
1589         (layer . 1000)
1590         (line-break-permission . allow)
1591         (non-musical . #t)
1592         (page-break-permission . allow)
1593         (X-extent . ,ly:axis-group-interface::width)
1594         (meta . ((class . Paper_column)
1595                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
1596                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
1597                  (interfaces . (axis-group-interface
1598                                 font-interface
1599                                 paper-column-interface
1600                                 separation-item-interface
1601                                 spaceable-grob-interface))))))
1602
1603     (NoteCollision
1604      . (
1605         (axes . (,X ,Y))
1606         (positioning-done . ,ly:note-collision-interface::calc-positioning-done)
1607         (prefer-dotted-right . #t)
1608         (X-extent . ,ly:axis-group-interface::width)
1609         (Y-extent . ,axis-group-interface::height)
1610         (meta . ((class . Item)
1611                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
1612                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
1613                  (interfaces . (axis-group-interface
1614                                 note-collision-interface))))))
1615
1616     (NoteColumn
1617      . (
1618         (axes . (,X ,Y))
1619         (bound-alignment-interfaces . (rhythmic-head-interface stem-interface))
1620         (horizontal-skylines . ,ly:separation-item::calc-skylines)
1621         (skyline-vertical-padding . 0.15)
1622         (X-extent . ,ly:axis-group-interface::width)
1623         (Y-extent . ,axis-group-interface::height)
1624         (meta . ((class . Item)
1625                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
1626                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
1627                  (interfaces . (axis-group-interface
1628                                 note-column-interface
1629                                 separation-item-interface))))))
1630
1631     (NoteHead
1632      . (
1633         (flexa-width . 2.0)
1634         (duration-log . ,note-head::calc-duration-log)
1635         (extra-spacing-height . ,ly:note-head::include-ledger-line-height)
1636         (glyph-name . ,note-head::calc-glyph-name)
1637         (ligature-flexa . #f)
1638         (parenthesis-friends . (accidental-grob dot))
1639         (stem-attachment . ,ly:note-head::calc-stem-attachment)
1640         (stencil . ,ly:note-head::print)
1641         (X-offset . ,ly:note-head::stem-x-shift)
1642         (Y-offset . ,staff-symbol-referencer::callback)
1643         (Y-extent . ,grob::always-Y-extent-from-stencil)
1644         (meta . ((class . Item)
1645                  (interfaces . (font-interface
1646                                 gregorian-ligature-interface
1647                                 ledgered-interface
1648                                 ligature-head-interface
1649                                 mensural-ligature-interface
1650                                 note-head-interface
1651                                 rhythmic-grob-interface
1652                                 rhythmic-head-interface
1653                                 staff-symbol-referencer-interface
1654                                 vaticana-ligature-interface))))))
1655
1656     (NoteName
1657      . (
1658         (stencil . ,ly:text-interface::print)
1659         (Y-extent . ,grob::always-Y-extent-from-stencil)
1660         (meta . ((class . Item)
1661                  (interfaces . (font-interface
1662                                 note-name-interface
1663                                 text-interface))))))
1664
1665     (NoteSpacing
1666      . (
1667         ;; Changed this from 0.75.
1668         ;; If you ever change this back, please document! --hwn
1669         (knee-spacing-correction . 1.0)
1670         (same-direction-correction . 0.25)
1671         (space-to-barline . #t)
1672         (stem-spacing-correction . 0.5)
1673         (meta . ((class . Item)
1674                  (interfaces . (note-spacing-interface
1675                                 spacing-interface))))))
1676
1677     (OttavaBracket
1678      . (
1679         (dash-fraction . 0.3)
1680         (direction . ,UP)
1681         (edge-height . (0 . 0.8))
1682         (font-shape . italic)
1683         (minimum-length . 0.3)
1684         (outside-staff-priority . 400)
1685         (padding . 0.5)
1686         (shorten-pair . (-0.8 . -0.6))
1687         (staff-padding . 2.0)
1688         (stencil . ,ly:ottava-bracket::print)
1689         (style . dashed-line)
1690         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1691         (Y-offset . ,side-position-interface::y-aligned-side)
1692         (meta . ((class . Spanner)
1693                  (interfaces . (font-interface
1694                                 horizontal-bracket-interface
1695                                 line-interface
1696                                 outside-staff-interface
1697                                 ottava-bracket-interface
1698                                 side-position-interface
1699                                 text-interface))))))
1700
1701
1702     (PaperColumn
1703      . (
1704         (allow-loose-spacing . #t)
1705         (axes . (,X))
1706         (before-line-breaking . ,ly:paper-column::before-line-breaking)
1707         (bound-alignment-interfaces . (note-column-interface))
1708         ;; used by Paper_column::print when debugging columns:
1709         (font-size . -7.5)
1710         (horizontal-skylines . ,ly:separation-item::calc-skylines)
1711         (keep-inside-line . #t)
1712         ;; used by Paper_column::print when debugging columns:
1713         (layer . 1000)
1714         ;; 0.08 comes from spacing-horizontal-skyline.ly
1715         ;; allows double flat of F to be nestled over dots of C
1716         (skyline-vertical-padding . 0.08)
1717         ;; (stencil . ,ly:paper-column::print)
1718         (X-extent . ,ly:axis-group-interface::width)
1719         (meta . ((class . Paper_column)
1720                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
1721                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
1722                  (interfaces . (axis-group-interface
1723                                 font-interface
1724                                 paper-column-interface
1725                                 separation-item-interface
1726                                 spaceable-grob-interface))))))
1727
1728     (ParenthesesItem
1729      . (
1730         (font-size . -6)
1731         (padding . 0.2)
1732         (stencil . ,parentheses-item::print)
1733         (stencils . ,parentheses-item::calc-parenthesis-stencils)
1734         ;; X-extent needs to be non-empty in order to allow proper
1735         ;; horizontal attachment.  ParenthesesItem does not reserve
1736         ;; space of its own, however.
1737         (X-extent . (0 . 0))
1738         (Y-extent . ,parentheses-item::y-extent)
1739         (meta . ((class . Item)
1740                  (interfaces . (font-interface
1741                                 parentheses-interface))))))
1742
1743     (PercentRepeat
1744      . (
1745         (dot-negative-kern . 0.75)
1746         (font-encoding . fetaMusic)
1747         (slope . 1.0)
1748         (spacing-pair . (break-alignment . staff-bar))
1749         (springs-and-rods . ,ly:multi-measure-rest::set-spacing-rods)
1750         (stencil . ,ly:multi-measure-rest::percent)
1751         (thickness . 0.48)
1752         (meta . ((class . Spanner)
1753                  (interfaces . (font-interface
1754                                 multi-measure-rest-interface
1755                                 percent-repeat-interface))))))
1756
1757     (PercentRepeatCounter
1758      . (
1759         (direction . ,UP)
1760         (font-encoding . fetaText)
1761         (font-size . -2)
1762         (padding . 0.2)
1763         (parent-alignment-X . ,CENTER)
1764         (self-alignment-X . ,CENTER)
1765         (staff-padding . 0.25)
1766         (stencil . ,ly:text-interface::print)
1767         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
1768         (Y-extent . ,grob::always-Y-extent-from-stencil)
1769         (Y-offset . ,side-position-interface::y-aligned-side)
1770         (meta . ((class . Spanner)
1771                  (interfaces . (font-interface
1772                                 percent-repeat-interface
1773                                 outside-staff-interface
1774                                 self-alignment-interface
1775                                 side-position-interface
1776                                 text-interface))))))
1777
1778     (PhrasingSlur
1779      . (
1780         (control-points . ,ly:slur::calc-control-points)
1781         (cross-staff . ,ly:slur::calc-cross-staff)
1782         (details . ,default-slur-details)
1783         (direction . ,ly:slur::calc-direction)
1784         (height-limit . 2.0)
1785         (minimum-length . 1.5)
1786         (ratio . 0.333)
1787         (spanner-id . "")
1788         (springs-and-rods . ,ly:spanner::set-spacing-rods)
1789         (stencil . ,ly:slur::print)
1790         (thickness . 1.1)
1791         (vertical-skylines . ,(ly:make-unpure-pure-container ly:slur::vertical-skylines ly:grob::pure-simple-vertical-skylines-from-extents))
1792         (Y-extent . ,slur::height)
1793         (meta . ((class . Spanner)
1794                  (interfaces . (outside-staff-interface
1795                                 slur-interface))))))
1796
1797     ;; an example of a text spanner
1798     (PianoPedalBracket
1799      . (
1800         (bound-padding . 1.0)
1801         (bracket-flare . (0.5 . 0.5))
1802         (direction . ,DOWN)
1803         (edge-height . (1.0 . 1.0))
1804         (shorten-pair . (0.0 . 0.0))
1805         (stencil . ,ly:piano-pedal-bracket::print)
1806         (style . line)
1807         (thickness .  1.0)
1808         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1809         (meta . ((class . Spanner)
1810                  (interfaces . (line-interface
1811                                 piano-pedal-bracket-interface
1812                                 piano-pedal-interface))))))
1813
1814
1815     (RehearsalMark
1816      . (
1817         (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff)
1818         (baseline-skip . 2)
1819         (break-align-symbols . (staff-bar key-signature clef))
1820         (break-visibility . ,end-of-line-invisible)
1821         (direction . ,UP)
1822         (extra-spacing-width . (+inf.0 . -inf.0))
1823         (font-size . 2)
1824         (non-musical . #t)
1825         (outside-staff-horizontal-padding . 0.2)
1826         (outside-staff-priority . 1500)
1827         (padding . 0.8)
1828         (self-alignment-X . ,CENTER)
1829         (stencil . ,ly:text-interface::print)
1830         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1831         (X-offset . ,self-alignment-interface::self-aligned-on-breakable)
1832         (Y-offset . ,side-position-interface::y-aligned-side)
1833         (Y-extent . ,grob::always-Y-extent-from-stencil)
1834         (meta . ((class . Item)
1835                  (interfaces . (break-alignable-interface
1836                                 font-interface
1837                                 mark-interface
1838                                 outside-staff-interface
1839                                 self-alignment-interface
1840                                 side-position-interface
1841                                 text-interface))))))
1842
1843     (RepeatSlash
1844      . (
1845         (slash-negative-kern . 0.85)
1846         (slope . 1.7)
1847         (stencil . ,ly:percent-repeat-item-interface::beat-slash)
1848         (Y-extent . ,grob::always-Y-extent-from-stencil)
1849         (thickness . 0.48)
1850         (meta . ((class . Item)
1851                  (interfaces . (percent-repeat-interface
1852                                 percent-repeat-item-interface
1853                                 rhythmic-grob-interface))))))
1854
1855     (RepeatTie
1856      . (
1857         (cross-staff . ,semi-tie::calc-cross-staff)
1858         (control-points . ,ly:semi-tie::calc-control-points)
1859         (details . ((ratio . 0.333)
1860                     (height-limit . 1.0)))
1861         (direction . ,ly:tie::calc-direction)
1862         (head-direction . ,RIGHT)
1863         (stencil  . ,ly:tie::print)
1864         (thickness . 1.0)
1865         (extra-spacing-height . (-0.5 . 0.5))
1866         (Y-extent . ,grob::always-Y-extent-from-stencil)
1867         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1868         (meta . ((class . Item)
1869                  (interfaces . (semi-tie-interface))))))
1870
1871     (RepeatTieColumn
1872      . (
1873         (direction . ,ly:tie::calc-direction)
1874         (head-direction . ,ly:semi-tie-column::calc-head-direction)
1875         (positioning-done . ,ly:semi-tie-column::calc-positioning-done)
1876         (X-extent . #f)
1877         (Y-extent . #f)
1878         (meta . ((class . Item)
1879                  (interfaces . (semi-tie-column-interface))))))
1880
1881     (Rest
1882      . (
1883         (cross-staff . ,ly:rest::calc-cross-staff)
1884         (duration-log . ,stem::calc-duration-log)
1885         (minimum-distance . 0.25)
1886         (parenthesis-friends . (dot))
1887         (stencil . ,ly:rest::print)
1888         (voiced-position . 4)
1889         (X-extent . ,ly:rest::width)
1890         (Y-extent . ,(ly:make-unpure-pure-container ly:rest::height ly:rest::pure-height))
1891         (Y-offset . ,(ly:make-unpure-pure-container ly:rest::y-offset-callback))
1892         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1893         (meta . ((class . Item)
1894                  (interfaces . (font-interface
1895                                 rest-interface
1896                                 rhythmic-grob-interface
1897                                 rhythmic-head-interface
1898                                 staff-symbol-referencer-interface))))))
1899
1900     (RestCollision
1901      . (
1902         (minimum-distance . 0.75)
1903         (positioning-done . ,ly:rest-collision::calc-positioning-done)
1904         (meta . ((class . Item)
1905                  (interfaces . (rest-collision-interface))))))
1906
1907
1908     (Script
1909      . (
1910         (add-stem-support . #t)
1911         (cross-staff . ,ly:script-interface::calc-cross-staff)
1912         (direction . ,ly:script-interface::calc-direction)
1913         (font-encoding . fetaMusic)
1914         (horizon-padding . 0.1) ; to avoid interleaving with accidentals
1915         (positioning-done . ,ly:script-interface::calc-positioning-done)
1916         (self-alignment-X . ,CENTER)
1917         (side-axis . ,Y)
1918
1919         ;; padding set in script definitions.
1920         (slur-padding . 0.2)
1921         (staff-padding . 0.25)
1922
1923         (stencil . ,ly:script-interface::print)
1924         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1925         (Y-extent . ,grob::always-Y-extent-from-stencil)
1926         (X-offset . ,script-interface::calc-x-offset)
1927         (Y-offset . ,side-position-interface::y-aligned-side)
1928         (meta . ((class . Item)
1929                  (interfaces . (font-interface
1930                                 outside-staff-interface
1931                                 script-interface
1932                                 self-alignment-interface
1933                                 side-position-interface))))))
1934
1935     (ScriptColumn
1936      . (
1937         (before-line-breaking . ,ly:script-column::before-line-breaking)
1938         (meta . ((class . Item)
1939                  (interfaces . (script-column-interface))))))
1940
1941     (ScriptRow
1942      . (
1943         (before-line-breaking . ,ly:script-column::row-before-line-breaking)
1944         (meta . ((class . Item)
1945                  (interfaces . (script-column-interface))))))
1946
1947     (Slur
1948      . (
1949         (avoid-slur . inside)
1950         (control-points . ,ly:slur::calc-control-points)
1951         (cross-staff . ,ly:slur::calc-cross-staff)
1952         (details . ,default-slur-details)
1953         (direction . ,ly:slur::calc-direction)
1954         (height-limit . 2.0)
1955         (line-thickness . 0.8)
1956         (minimum-length . 1.5)
1957         (ratio . 0.25)
1958         (spanner-id . "")
1959         (springs-and-rods . ,ly:spanner::set-spacing-rods)
1960         (stencil . ,ly:slur::print)
1961         (thickness . 1.2)
1962         (vertical-skylines . ,(ly:make-unpure-pure-container ly:slur::vertical-skylines ly:grob::pure-simple-vertical-skylines-from-extents))
1963         (Y-extent . ,slur::height)
1964         (meta . ((class . Spanner)
1965                  (interfaces . (outside-staff-interface
1966                                 slur-interface))))))
1967
1968     (SostenutoPedal
1969      . (
1970         (direction . ,RIGHT)
1971         (extra-spacing-width . (+inf.0 . -inf.0))
1972         (font-shape . italic)
1973         (padding . 0.0) ;; padding relative to SostenutoPedalLineSpanner
1974         (parent-alignment-X . #f)
1975         (self-alignment-X . ,CENTER)
1976         (stencil . ,ly:text-interface::print)
1977         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1978         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
1979         (Y-extent . ,grob::always-Y-extent-from-stencil)
1980         (meta . ((class . Item)
1981                  (interfaces . (font-interface
1982                                 piano-pedal-script-interface
1983                                 self-alignment-interface
1984                                 text-interface))))))
1985
1986     (SostenutoPedalLineSpanner
1987      . (
1988         (axes . (,Y))
1989         (direction . ,DOWN)
1990         (minimum-space . 1.0)
1991         (outside-staff-priority . 1000)
1992         (padding . 1.2)
1993         (side-axis . ,Y)
1994         (staff-padding . 1.0)
1995         (vertical-skylines . ,grob::always-vertical-skylines-from-element-stencils)
1996         (X-extent . ,ly:axis-group-interface::width)
1997         (Y-extent . ,axis-group-interface::height)
1998         (Y-offset . ,side-position-interface::y-aligned-side)
1999         (meta . ((class . Spanner)
2000                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2001                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
2002                  (interfaces . (axis-group-interface
2003                                 outside-staff-interface
2004                                 piano-pedal-interface
2005                                 side-position-interface))))))
2006
2007     (SpacingSpanner
2008      . (
2009         (average-spacing-wishes . #t)
2010         (base-shortest-duration . ,(ly:make-moment 3 16))
2011         (common-shortest-duration . ,ly:spacing-spanner::calc-common-shortest-duration)
2012         (shortest-duration-space . 2.0)
2013         (spacing-increment . 1.2)
2014         (springs-and-rods . ,ly:spacing-spanner::set-springs)
2015         (meta . ((class . Spanner)
2016                  (interfaces . (spacing-options-interface
2017                                 spacing-spanner-interface))))))
2018
2019     (SpanBar
2020      . (
2021         (allow-span-bar . #t)
2022         (bar-extent . ,axis-group-interface::height)
2023         (before-line-breaking . ,ly:span-bar::before-line-breaking)
2024         (break-align-symbol . staff-bar)
2025         (cross-staff . #t)
2026         (glyph-name . ,ly:span-bar::calc-glyph-name)
2027         (layer . 0)
2028         (non-musical . #t)
2029         (stencil . ,ly:span-bar::print)
2030         (X-extent . ,ly:span-bar::width)
2031         (Y-extent . (+inf.0 . -inf.0))
2032         (meta . ((class . Item)
2033                  (interfaces . (bar-line-interface
2034                                 font-interface
2035                                 span-bar-interface))))))
2036
2037     (SpanBarStub
2038      . (
2039         (X-extent . ,(grob::inherit-parent-property
2040                       X 'X-extent))
2041         (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height)
2042         ;; we want this to be ignored, so empty, but the extra spacing height
2043         ;; should preserve the span bar's presence for horizontal spacing
2044         (Y-extent . ,pure-from-neighbor-interface::height-if-pure)
2045         (meta . ((class . Item)
2046                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2047                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
2048                  (interfaces . (pure-from-neighbor-interface))))))
2049
2050     (StaffGrouper
2051      . (
2052         (staff-staff-spacing . ((basic-distance . 9)
2053                                 (minimum-distance . 7)
2054                                 (padding . 1)
2055                                 (stretchability . 5)))
2056         (staffgroup-staff-spacing . ((basic-distance . 10.5)
2057                                      (minimum-distance . 8)
2058                                      (padding . 1)
2059                                      (stretchability . 9)))
2060         (meta . ((class . Spanner)
2061                  (interfaces . (staff-grouper-interface))))))
2062
2063     (StaffSpacing
2064      . (
2065         (non-musical . #t)
2066         (stem-spacing-correction . 0.4)
2067         (meta . ((class . Item)
2068                  (interfaces . (spacing-interface
2069                                 staff-spacing-interface))))))
2070
2071     (StaffSymbol
2072      . (
2073         (break-align-symbols . (staff-bar break-alignment))
2074         (layer . 0)
2075         (ledger-line-thickness . (1.0 . 0.1))
2076         (line-count . 5)
2077         (stencil . ,ly:staff-symbol::print)
2078         (Y-extent . ,(ly:make-unpure-pure-container ly:staff-symbol::height))
2079         (meta . ((class . Spanner)
2080                  (interfaces . (staff-symbol-interface))))))
2081
2082     (StanzaNumber
2083      . (
2084         (direction . ,LEFT)
2085         (font-series . bold)
2086         (padding . 1.0)
2087         (side-axis . ,X)
2088         (stencil . ,ly:text-interface::print)
2089         (X-offset . ,ly:side-position-interface::x-aligned-side)
2090         (Y-extent . ,grob::always-Y-extent-from-stencil)
2091         (meta . ((class . Item)
2092                  (interfaces . (font-interface
2093                                 side-position-interface
2094                                 stanza-number-interface
2095                                 text-interface))))))
2096
2097     (Stem
2098      . (
2099         (beamlet-default-length . (1.1 . 1.1))
2100         (beamlet-max-length-proportion . (0.75 . 0.75))
2101         (cross-staff . ,ly:stem::calc-cross-staff)
2102         (default-direction . ,ly:stem::calc-default-direction)
2103         (details
2104          . (
2105             ;; 3.5 (or 3 measured from note head) is standard length
2106             ;; 32nd, 64th, 128th flagged stems should be longer
2107             (lengths . (3.5 3.5 3.5 4.25 5.0 6.0))
2108
2109             ;; FIXME.  3.5 yields too long beams (according to Ross and
2110             ;; looking at Baerenreiter examples) for a number of common
2111             ;; boundary cases.  Subtracting half a beam thickness fixes
2112             ;; this, but the bug may well be somewhere else.
2113
2114             ;; FIXME this should come from 'lengths
2115             (beamed-lengths . (3.26 3.5 3.6))
2116
2117             ;; The 'normal' minima
2118             (beamed-minimum-free-lengths . (1.83 1.5 1.25))
2119             ;;(beamed-minimum-free-lengths . (2.0 1.83 1.25))
2120
2121             ;; The 'extreme case' minima
2122             (beamed-extreme-minimum-free-lengths . (2.0 1.25))
2123
2124             ;; Stems in unnatural (forced) direction should be shortened by
2125             ;; one staff space, according to [Roush & Gourlay].
2126             ;; Flagged stems we shorten only half a staff space.
2127             (stem-shorten . (1.0 0.5 0.25))
2128
2129             ))
2130
2131         ;; We use the normal minima as minimum for the ideal lengths,
2132         ;; and the extreme minima as abolute minimum length.
2133
2134         (direction . ,ly:stem::calc-direction)
2135         (double-stem-separation . 0.5)
2136         (duration-log . ,stem::calc-duration-log)
2137         (length . ,(ly:make-unpure-pure-container ly:stem::calc-length ly:stem::pure-calc-length))
2138         (neutral-direction . ,DOWN)
2139         (positioning-done . ,ly:stem::calc-positioning-done)
2140         (stem-info . ,ly:stem::calc-stem-info)
2141         (stem-begin-position . ,(ly:make-unpure-pure-container ly:stem::calc-stem-begin-position ly:stem::pure-calc-stem-begin-position))
2142         (stencil . ,ly:stem::print)
2143         (thickness . 1.3)
2144         (X-extent . ,ly:stem::width)
2145         (X-offset . ,ly:stem::offset-callback)
2146         (Y-extent . ,(ly:make-unpure-pure-container ly:stem::height ly:stem::pure-height))
2147         (Y-offset . ,staff-symbol-referencer::callback)
2148         (meta . ((class . Item)
2149                  (interfaces . (stem-interface))))))
2150
2151     (StemStub
2152      . (
2153         (X-extent . ,stem-stub::width)
2154         (extra-spacing-height . ,stem-stub::extra-spacing-height)
2155         (Y-extent . ,(ly:make-unpure-pure-container #f stem-stub::pure-height))
2156         (meta . ((class . Item)
2157                  (interfaces . ())))))
2158
2159     (StemTremolo
2160      . (
2161         (beam-thickness . 0.48) ; staff-space
2162         (beam-width . ,ly:stem-tremolo::calc-width) ; staff-space
2163         (direction . ,ly:stem-tremolo::calc-direction)
2164         (parent-alignment-X . ,CENTER)
2165         (slope . ,ly:stem-tremolo::calc-slope)
2166         (stencil . ,ly:stem-tremolo::print)
2167         (shape . ,ly:stem-tremolo::calc-shape)
2168         (X-extent . ,ly:stem-tremolo::width)
2169         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
2170         (Y-extent . ,(grob::unpure-Y-extent-from-stencil ly:stem-tremolo::pure-height))
2171         (Y-offset . ,(ly:make-unpure-pure-container ly:stem-tremolo::calc-y-offset ly:stem-tremolo::pure-calc-y-offset))
2172         (meta . ((class . Item)
2173                  (interfaces . (self-alignment-interface
2174                                 stem-tremolo-interface))))))
2175
2176     (StringNumber
2177      . (
2178         (avoid-slur . around)
2179         (cross-staff . ,script-or-side-position-cross-staff)
2180         (font-encoding . fetaText)
2181         (font-size . -5)                ; don't overlap when next to heads.
2182         (number-type . arabic)
2183         (padding . 0.5)
2184         (parent-alignment-X . ,CENTER)
2185         (script-priority . 100)
2186         (self-alignment-X . ,CENTER)
2187         (self-alignment-Y . ,CENTER)
2188         (staff-padding . 0.5)
2189         (stencil . ,print-circled-text-callback)
2190         (text . ,string-number::calc-text)
2191         (Y-extent . ,grob::always-Y-extent-from-stencil)
2192         (meta . ((class . Item)
2193                  (interfaces . (font-interface
2194                                 self-alignment-interface
2195                                 outside-staff-interface
2196                                 side-position-interface
2197                                 number-interface
2198                                 string-number-interface
2199                                 text-interface
2200                                 text-script-interface))))))
2201
2202     (StrokeFinger
2203      . (
2204         (digit-names . #("p" "i" "m" "a" "x"))
2205         (font-shape . italic)
2206         (font-size . -4)                ; don't overlap when next to heads.
2207         (padding . 0.5)
2208         (parent-alignment-X . ,CENTER)
2209         (script-priority . 100)
2210         (self-alignment-X . ,CENTER)
2211         (self-alignment-Y . ,CENTER)
2212         (staff-padding . 0.5)
2213         (stencil . ,ly:text-interface::print)
2214         (text . ,stroke-finger::calc-text)
2215         (Y-extent . ,grob::always-Y-extent-from-stencil)
2216         (meta . ((class . Item)
2217                  (interfaces . (font-interface
2218                                 outside-staff-interface
2219                                 self-alignment-interface
2220                                 side-position-interface
2221                                 stroke-finger-interface
2222                                 text-interface
2223                                 text-script-interface))))))
2224
2225     (SustainPedal
2226      . (
2227         (extra-spacing-width . (+inf.0 . -inf.0))
2228         (padding . 0.0)  ;; padding relative to SustainPedalLineSpanner
2229         (parent-alignment-X . #f)
2230         (self-alignment-X . ,CENTER)
2231         (stencil . ,ly:sustain-pedal::print)
2232         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
2233         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
2234         (Y-extent . ,grob::always-Y-extent-from-stencil)
2235         (meta . ((class . Item)
2236                  (interfaces . (font-interface
2237                                 piano-pedal-interface
2238                                 piano-pedal-script-interface
2239                                 self-alignment-interface
2240                                 text-interface))))))
2241
2242     (SustainPedalLineSpanner
2243      . (
2244         (axes . (,Y))
2245         (direction . ,DOWN)
2246         (minimum-space . 1.0)
2247         (outside-staff-priority . 1000)
2248         (padding . 1.2)
2249         (side-axis . ,Y)
2250         (staff-padding . 1.2)
2251         (vertical-skylines . ,grob::always-vertical-skylines-from-element-stencils)
2252         (X-extent . ,ly:axis-group-interface::width)
2253         (Y-extent . ,axis-group-interface::height)
2254         (Y-offset . ,side-position-interface::y-aligned-side)
2255         (meta . ((class . Spanner)
2256                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2257                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
2258                  (interfaces . (axis-group-interface
2259                                 outside-staff-interface
2260                                 piano-pedal-interface
2261                                 side-position-interface))))))
2262
2263     (System
2264      . (
2265         (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights)
2266         (axes . (,X ,Y))
2267         (outside-staff-placement-directive . left-to-right-polite)
2268         (skyline-horizontal-padding . 1.0)
2269         (vertical-skylines . ,ly:axis-group-interface::calc-skylines)
2270         (X-extent . ,ly:axis-group-interface::width)
2271         (Y-extent . ,(ly:make-unpure-pure-container ly:system::height ly:system::calc-pure-height))
2272         (meta . ((class . System)
2273                  (object-callbacks . ((footnotes-before-line-breaking . ,ly:system::footnotes-before-line-breaking)
2274                                       (footnotes-after-line-breaking . ,ly:system::footnotes-after-line-breaking)
2275                                       (pure-relevant-grobs . ,ly:system::calc-pure-relevant-grobs)
2276                                       (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2277                                       (vertical-skyline-elements . ,ly:system::vertical-skyline-elements)
2278                                       (vertical-alignment . ,ly:system::get-vertical-alignment)))
2279                  (interfaces . (axis-group-interface
2280                                 system-interface
2281                                 outside-staff-axis-group-interface))))))
2282
2283     (SystemStartBar
2284      . (
2285         (collapse-height . 5.0)
2286         (direction . ,LEFT)
2287
2288         ;; ugh--hardcoded.
2289         (padding . -0.1)  ;; bar must cover rounded ending of staff line.
2290         (stencil . ,ly:system-start-delimiter::print)
2291         (style . bar-line)
2292         (thickness . 1.6)
2293         (X-offset . ,ly:side-position-interface::x-aligned-side)
2294         (meta . ((class . Spanner)
2295                  (interfaces . (side-position-interface
2296                                 system-start-delimiter-interface))))))
2297
2298     (SystemStartBrace
2299      . (
2300         (collapse-height . 5.0)
2301         (direction . ,LEFT)
2302         (font-encoding . fetaBraces)
2303         (padding . 0.3)
2304         (stencil . ,ly:system-start-delimiter::print)
2305         (style . brace)
2306         (X-offset . ,ly:side-position-interface::x-aligned-side)
2307         (meta . ((class . Spanner)
2308                  (interfaces . (font-interface
2309                                 side-position-interface
2310                                 system-start-delimiter-interface))))))
2311
2312     (SystemStartBracket
2313      . (
2314         (collapse-height . 5.0)
2315         (direction . ,LEFT)
2316         (padding . 0.8)
2317         (stencil . ,ly:system-start-delimiter::print)
2318         (style . bracket)
2319         (thickness . 0.45)
2320         (X-offset . ,ly:side-position-interface::x-aligned-side)
2321         (meta . ((class . Spanner)
2322                  (interfaces . (font-interface
2323                                 side-position-interface
2324                                 system-start-delimiter-interface))))))
2325
2326     (SystemStartSquare
2327      . (
2328         (direction . ,LEFT)
2329         (stencil . ,ly:system-start-delimiter::print)
2330         (style . line-bracket)
2331         (thickness . 1.0)
2332         (X-offset . ,ly:side-position-interface::x-aligned-side)
2333         (meta . ((class . Spanner)
2334                  (interfaces . (font-interface
2335                                 side-position-interface
2336                                 system-start-delimiter-interface))))))
2337
2338
2339     (TabNoteHead
2340      . (
2341         (details . ((cautionary-properties . ((angularity . 0.4)
2342                                               (half-thickness . 0.075)
2343                                               (padding . 0)
2344                                               (procedure . ,parenthesize-stencil)
2345                                               (width . 0.25)))
2346                     (head-offset . 3/5)
2347                     (harmonic-properties . ((angularity . 2)
2348                                             (half-thickness . 0.075)
2349                                             (padding . 0)
2350                                             (procedure . ,parenthesize-stencil)
2351                                             (width . 0.25)))
2352                     (repeat-tied-properties . ((note-head-visible . #t)
2353                                                (parenthesize . #t)))
2354                     (tied-properties . ((break-visibility . ,begin-of-line-visible)
2355                                         (parenthesize . #t)))))
2356
2357         (direction . ,CENTER)
2358         (duration-log . ,note-head::calc-duration-log)
2359         (font-series . bold)
2360         (font-size . -2)
2361         (parenthesis-friends . (dot))
2362         (stem-attachment . (0.0 . 1.35))
2363         (stencil . ,tab-note-head::print)
2364         (whiteout . #t)
2365         (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
2366         (Y-offset . ,staff-symbol-referencer::callback)
2367         (Y-extent . ,grob::always-Y-extent-from-stencil)
2368         (meta . ((class . Item)
2369                  (interfaces  . (font-interface
2370                                  note-head-interface
2371                                  rhythmic-grob-interface
2372                                  rhythmic-head-interface
2373                                  staff-symbol-referencer-interface
2374                                  tab-note-head-interface
2375                                  text-interface))))))
2376
2377     (TextScript
2378      . (
2379         (avoid-slur . around)
2380         (cross-staff . #f)
2381         (direction . ,DOWN)
2382         (extra-spacing-width . (+inf.0 . -inf.0))
2383         (outside-staff-horizontal-padding . 0.2)
2384         (outside-staff-priority . 450)
2385
2386         ;; sync with Fingering ?
2387         (padding . 0.3)
2388
2389         (parent-alignment-X . #f)
2390         (script-priority . 200)
2391         ;; self-alignment cannot be LEFT because of fingering diagrams.
2392         (self-alignment-X . #f)
2393         (side-axis . ,Y)
2394         (slur-padding . 0.5)
2395         (staff-padding . 0.5)
2396         (stencil . ,ly:text-interface::print)
2397         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
2398         (Y-extent . ,grob::always-Y-extent-from-stencil)
2399         (X-align-on-main-noteheads . #t)
2400         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
2401         (Y-offset . ,side-position-interface::y-aligned-side)
2402         (meta . ((class . Item)
2403                  (interfaces . (font-interface
2404                                 instrument-specific-markup-interface
2405                                 outside-staff-interface
2406                                 self-alignment-interface
2407                                 side-position-interface
2408                                 text-interface
2409                                 text-script-interface))))))
2410
2411     (TextSpanner
2412      . (
2413         (bound-details . ((left . ((Y . 0)
2414                                    (padding . 0.25)
2415                                    (attach-dir . ,LEFT)
2416                                    ))
2417                           (left-broken . ((attach-dir . ,RIGHT)))
2418                           (right . ((Y . 0)
2419                                     (padding . 0.25)
2420                                     ))
2421                           ))
2422         (dash-fraction . 0.2)
2423         (dash-period . 3.0)
2424         (direction . ,UP)
2425         (font-shape . italic)
2426         (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
2427         (outside-staff-priority . 350)
2428         (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
2429         (side-axis . ,Y)
2430         (staff-padding . 0.8)
2431         (stencil . ,ly:line-spanner::print)
2432         (style . dashed-line)
2433         (Y-offset . ,side-position-interface::y-aligned-side)
2434
2435         (meta . ((class . Spanner)
2436                  (interfaces . (font-interface
2437                                 line-interface
2438                                 line-spanner-interface
2439                                 outside-staff-interface
2440                                 side-position-interface))))))
2441
2442     (Tie
2443      . (
2444         (avoid-slur . inside)
2445         (control-points . ,ly:tie::calc-control-points)
2446         (details . (
2447                     ;; for a full list, see tie-details.cc
2448                     (ratio . 0.333)
2449                     (center-staff-line-clearance . 0.6)
2450                     (tip-staff-line-clearance . 0.45)
2451                     (note-head-gap . 0.2)
2452                     (stem-gap . 0.35)
2453                     (height-limit . 1.0)
2454                     (horizontal-distance-penalty-factor . 10)
2455                     (same-dir-as-stem-penalty . 8)
2456                     (min-length-penalty-factor . 26)
2457                     (tie-tie-collision-distance . 0.45)
2458                     (tie-tie-collision-penalty . 25.0)
2459                     (intra-space-threshold . 1.25)
2460                     (outer-tie-vertical-distance-symmetry-penalty-factor . 10)
2461                     (outer-tie-length-symmetry-penalty-factor . 10)
2462                     (vertical-distance-penalty-factor . 7)
2463                     (outer-tie-vertical-gap . 0.25)
2464                     (multi-tie-region-size . 3)
2465                     (single-tie-region-size . 4)
2466                     (between-length-limit . 1.0)))
2467
2468         (direction . ,ly:tie::calc-direction)
2469         (font-size . -6)
2470         (line-thickness . 0.8)
2471         (neutral-direction . ,UP)
2472         (springs-and-rods . ,ly:spanner::set-spacing-rods)
2473         (stencil . ,ly:tie::print)
2474         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
2475         (thickness . 1.2)
2476         (meta . ((class . Spanner)
2477                  (interfaces . (tie-interface))))))
2478
2479     (TieColumn
2480      . (
2481         (before-line-breaking . ,ly:tie-column::before-line-breaking)
2482         (positioning-done . ,ly:tie-column::calc-positioning-done)
2483         (X-extent . #f)
2484         (Y-extent . #f)
2485         (meta . ((class . Spanner)
2486                  (interfaces . (tie-column-interface))))))
2487
2488     (TimeSignature
2489      . (
2490         (avoid-slur . inside)
2491         (break-align-anchor
2492          . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
2493         (break-align-symbol . time-signature)
2494         (break-align-anchor-alignment . ,LEFT)
2495         (break-visibility . ,all-visible)
2496         (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-including-staff)
2497         (extra-spacing-width . (0.0 . 0.8))
2498         (non-musical . #t)
2499         (space-alist . (
2500                         (cue-clef . (extra-space . 1.5))
2501                         (first-note . (fixed-space . 2.0))
2502                         (right-edge . (extra-space . 0.5))
2503                         (staff-bar . (extra-space . 1.0))))
2504         (stencil . ,ly:time-signature::print)
2505         (Y-extent . ,grob::always-Y-extent-from-stencil)
2506         (style . C)
2507         (meta . ((class . Item)
2508                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2509                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
2510                  (interfaces . (break-aligned-interface
2511                                 font-interface
2512                                 pure-from-neighbor-interface
2513                                 time-signature-interface))))))
2514
2515     (TrillPitchAccidental
2516      . (
2517         (direction . ,LEFT)
2518         (font-size . -4)
2519         (glyph-name-alist . ,standard-alteration-glyph-name-alist)
2520         (padding . 0.2)
2521         (side-axis . ,X)
2522         (stencil . ,ly:accidental-interface::print)
2523         (X-offset . ,ly:side-position-interface::x-aligned-side)
2524         (Y-extent . ,accidental-interface::height)
2525         (meta . ((class . Item)
2526                  (interfaces . (accidental-interface
2527                                 font-interface
2528                                 inline-accidental-interface
2529                                 side-position-interface
2530                                 trill-pitch-accidental-interface))))))
2531
2532     (TrillPitchGroup
2533      . (
2534         (axes . (,X))
2535         (direction . ,RIGHT)
2536         (font-size . -4)
2537         ;; minimum shift to the right, in case the parent note has no stem
2538         (minimum-space . 2.5)
2539         (horizon-padding . 0.1) ; to avoid interleaving with augmentation dots
2540         (padding . 0.3)
2541         (side-axis . ,X)
2542         (stencil . ,parenthesize-elements)
2543         (stencils . ,parentheses-item::calc-parenthesis-stencils)
2544         (X-offset . ,ly:side-position-interface::x-aligned-side)
2545         (Y-extent . ,grob::always-Y-extent-from-stencil)
2546         (meta . ((class . Item)
2547                  (interfaces . (axis-group-interface
2548                                 font-interface
2549                                 note-head-interface
2550                                 parentheses-interface
2551                                 side-position-interface))))))
2552
2553     (TrillPitchHead
2554      . (
2555         (duration-log . 2)
2556         (font-size . -4)
2557         (stencil . ,ly:note-head::print)
2558         (Y-offset . ,staff-symbol-referencer::callback)
2559         (Y-extent . ,grob::always-Y-extent-from-stencil)
2560         (meta . ((class . Item)
2561                  (interfaces . (font-interface
2562                                 ledgered-interface
2563                                 pitched-trill-interface
2564                                 rhythmic-head-interface
2565                                 staff-symbol-referencer-interface))))))
2566
2567     (TrillSpanner
2568      . (
2569         (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
2570         (bound-details . ((left . ((text . ,(make-musicglyph-markup "scripts.trill"))
2571                                    (Y . 0)
2572                                    (stencil-offset . (-0.5 . -1))
2573                                    (padding . 0.5)
2574                                    (attach-dir . ,CENTER)
2575                                    ))
2576                           (left-broken . ((end-on-note . #t)))
2577                           (right . ((Y . 0)))
2578                           ))
2579         (direction . ,UP)
2580         (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
2581         (outside-staff-priority . 50)
2582         (padding . 0.5)
2583         (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
2584         (side-axis . ,Y)
2585         (staff-padding . 1.0)
2586         (stencil . ,ly:line-spanner::print)
2587         (style . trill)
2588         (Y-offset . ,side-position-interface::y-aligned-side)
2589         (meta . ((class . Spanner)
2590                  (interfaces . (font-interface
2591                                 line-interface
2592                                 line-spanner-interface
2593                                 outside-staff-interface
2594                                 side-position-interface
2595                                 trill-spanner-interface))))))
2596
2597     (TupletBracket
2598      . (
2599         (avoid-scripts . #t)
2600         (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors)
2601         (cross-staff . ,ly:tuplet-bracket::calc-cross-staff)
2602         (direction  . ,ly:tuplet-bracket::calc-direction)
2603         (edge-height . (0.7 . 0.7))
2604         (full-length-to-extent . #t)
2605         (padding . 1.1)
2606         (positions . ,ly:tuplet-bracket::calc-positions)
2607         (shorten-pair . (-0.2 . -0.2))
2608         (staff-padding . 0.25)
2609         (stencil . ,ly:tuplet-bracket::print)
2610         (thickness . 1.6)
2611         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
2612         (X-positions . ,ly:tuplet-bracket::calc-x-positions)
2613
2614         (meta . ((class . Spanner)
2615                  (interfaces . (line-interface
2616                                 outside-staff-interface
2617                                 tuplet-bracket-interface))))))
2618
2619     (TupletNumber
2620      . (
2621         (avoid-slur . inside)
2622         (cross-staff . ,ly:tuplet-number::calc-cross-staff)
2623         (direction . ,tuplet-number::calc-direction)
2624         (font-shape . italic)
2625         (font-size . -2)
2626         (knee-to-beam . #t)
2627         (stencil . ,ly:tuplet-number::print)
2628         (text . ,tuplet-number::calc-denominator-text)
2629         (X-offset . ,ly:tuplet-number::calc-x-offset)
2630         (Y-offset . ,ly:tuplet-number::calc-y-offset)
2631         (meta . ((class . Spanner)
2632                  (interfaces . (font-interface
2633                                 outside-staff-interface
2634                                 text-interface
2635                                 tuplet-number-interface))))))
2636
2637
2638     (UnaCordaPedal
2639      . (
2640         (direction . ,RIGHT)
2641         (extra-spacing-width . (+inf.0 . -inf.0))
2642         (font-shape . italic)
2643         (padding . 0.0)  ;; padding relative to UnaCordaPedalLineSpanner
2644         (parent-alignment-X . #f)
2645         (self-alignment-X . ,CENTER)
2646         (stencil . ,ly:text-interface::print)
2647         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
2648         (Y-extent . ,grob::always-Y-extent-from-stencil)
2649         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
2650         (meta . ((class . Item)
2651                  (interfaces . (font-interface
2652                                 piano-pedal-script-interface
2653                                 self-alignment-interface
2654                                 text-interface))))))
2655
2656     (UnaCordaPedalLineSpanner
2657      . (
2658         (axes . (,Y))
2659         (direction . ,DOWN)
2660         (minimum-space . 1.0)
2661         (outside-staff-priority . 1000)
2662         (padding . 1.2)
2663         (side-axis . ,Y)
2664         (staff-padding . 1.2)
2665         (vertical-skylines . ,grob::always-vertical-skylines-from-element-stencils)
2666         (X-extent . ,ly:axis-group-interface::width)
2667         (Y-extent . ,axis-group-interface::height)
2668         (Y-offset . ,side-position-interface::y-aligned-side)
2669         (meta . ((class . Spanner)
2670                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2671                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
2672                  (interfaces . (axis-group-interface
2673                                 outside-staff-interface
2674                                 piano-pedal-interface
2675                                 side-position-interface))))))
2676
2677
2678     (VaticanaLigature
2679      . (
2680         (flexa-width . 2.0)
2681         (stencil . ,ly:vaticana-ligature::print)
2682         (thickness . 0.6)
2683         (meta . ((class . Spanner)
2684                  (interfaces . (font-interface
2685                                 vaticana-ligature-interface))))))
2686
2687     (VerticalAlignment
2688      . (
2689         (axes . (,Y))
2690         (positioning-done . ,ly:align-interface::align-to-ideal-distances)
2691         (stacking-dir . -1)
2692         (vertical-skylines . ,ly:axis-group-interface::combine-skylines)
2693         (X-extent . ,ly:axis-group-interface::width)
2694         (Y-extent . ,axis-group-interface::height)
2695         (meta . ((class . Spanner)
2696                  (object-callbacks . ((Y-common . ,ly:axis-group-interface::calc-y-common)
2697                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)
2698                                       (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)))
2699                  (interfaces . (align-interface
2700                                 axis-group-interface))))))
2701
2702     (VerticalAxisGroup
2703      . (
2704         (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights)
2705         (axes . (,Y))
2706         (default-staff-staff-spacing . ((basic-distance . 9)
2707                                         (minimum-distance . 8)
2708                                         (padding . 1)))
2709         (nonstaff-unrelatedstaff-spacing . ((padding . 0.5)))
2710         (outside-staff-placement-directive . left-to-right-polite)
2711         (staff-staff-spacing . ,(ly:make-unpure-pure-container ly:axis-group-interface::calc-staff-staff-spacing ly:axis-group-interface::calc-pure-staff-staff-spacing))
2712         (stencil . ,ly:axis-group-interface::print)
2713         (skyline-horizontal-padding . 0.1)
2714         (vertical-skylines . ,ly:hara-kiri-group-spanner::calc-skylines)
2715         (X-extent . ,ly:axis-group-interface::width)
2716         (Y-extent . ,(ly:make-unpure-pure-container ly:hara-kiri-group-spanner::y-extent ly:hara-kiri-group-spanner::pure-height))
2717         (Y-offset . ,ly:hara-kiri-group-spanner::force-hara-kiri-callback)
2718         (meta . ((class . Spanner)
2719                  (object-callbacks . (
2720                                       (X-common . ,ly:axis-group-interface::calc-x-common)
2721                                       (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2722                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
2723
2724                  (interfaces . (axis-group-interface
2725                                 hara-kiri-group-spanner-interface
2726                                 outside-staff-axis-group-interface))))))
2727
2728     (VoiceFollower
2729      . (
2730         (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
2731         (bound-details . ((right . ((attach-dir .  ,CENTER)
2732                                     (padding . 1.5)
2733                                     ))
2734                           (left . ((attach-dir .  ,CENTER)
2735                                    (padding . 1.5)
2736                                    ))
2737                           ))
2738         (cross-staff . #t)
2739         (gap . 0.5)
2740         (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
2741         (non-musical . #t)
2742         (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
2743         (stencil . ,ly:line-spanner::print)
2744         (style . line)
2745         (X-extent . #f)
2746         (Y-extent . #f)
2747         (meta . ((class . Spanner)
2748                  (interfaces . (line-interface
2749                                 line-spanner-interface))))))
2750
2751     (VoltaBracket
2752      . (
2753         (baseline-skip . 1.7)
2754         (direction . ,UP)
2755         (edge-height . (2.0 . 2.0)) ;; staff-space;
2756         (font-encoding . fetaText)
2757         (font-size . -4)
2758         (shorten-pair . ,ly:volta-bracket::calc-shorten-pair)
2759         (stencil . ,ly:volta-bracket-interface::print)
2760         (thickness . 1.6) ;; line-thickness
2761         (word-space . 0.6)
2762         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
2763         (Y-extent . ,(grob::unpure-Y-extent-from-stencil volta-bracket-interface::pure-height))
2764         (meta . ((class . Spanner)
2765                  (interfaces . (font-interface
2766                                 horizontal-bracket-interface
2767                                 line-interface
2768                                 side-position-interface
2769                                 text-interface
2770                                 volta-bracket-interface
2771                                 volta-interface))))))
2772
2773     (VoltaBracketSpanner
2774      . (
2775         (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff)
2776         (axes . (,Y))
2777         (direction . ,UP)
2778         (no-alignment . #t)
2779         (outside-staff-priority . 600)
2780         (padding . 1)
2781         (side-axis . ,Y)
2782         (vertical-skylines . ,grob::always-vertical-skylines-from-element-stencils)
2783         (X-extent . ,ly:axis-group-interface::width)
2784         (Y-extent . ,axis-group-interface::height)
2785         (Y-offset . ,side-position-interface::y-aligned-side)
2786         (meta . ((class . Spanner)
2787                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2788                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
2789                  (interfaces . (axis-group-interface
2790                                 outside-staff-interface
2791                                 side-position-interface
2792                                 volta-interface))))))
2793
2794     ))
2795
2796 (define (completize-grob-entry x)
2797   "Transplant assoc key into 'name entry of 'meta of X.  Set interfaces for Item, Spanner etc.
2798 "
2799   ;;  (display (car x))
2800   ;;  (newline)
2801   (let* ((name-sym  (car x))
2802          (grob-entry (cdr x))
2803          (meta-entry (assoc-get 'meta grob-entry))
2804          (class (assoc-get 'class meta-entry))
2805          (ifaces-entry
2806           (assoc-get 'interfaces meta-entry)))
2807
2808     (cond
2809      ((eq? 'Item class)
2810       (set! ifaces-entry (cons 'item-interface ifaces-entry)))
2811      ((eq? 'Spanner class)
2812       (set! ifaces-entry (cons 'spanner-interface ifaces-entry)))
2813      ((eq? 'Paper_column class)
2814       (set! ifaces-entry (cons 'item-interface
2815                                (cons 'paper-column-interface ifaces-entry))))
2816      ((eq? 'System class)
2817       (set! ifaces-entry (cons 'system-interface
2818                                (cons 'spanner-interface ifaces-entry))))
2819      (else
2820       (ly:warning "Unknown class ~a" class)))
2821
2822     (set! ifaces-entry (uniq-list (sort ifaces-entry symbol<?)))
2823     (set! ifaces-entry (cons 'grob-interface ifaces-entry))
2824
2825     (set! meta-entry (assoc-set! meta-entry 'name name-sym))
2826     (set! meta-entry (assoc-set! meta-entry 'interfaces
2827                                  ifaces-entry))
2828     (set! grob-entry (assoc-set! grob-entry 'meta meta-entry))
2829     (cons name-sym grob-entry)))
2830
2831 (set! all-grob-descriptions (map completize-grob-entry all-grob-descriptions))
2832
2833 ;;  (display (map pair? all-grob-descriptions))
2834
2835 ;; make sure that \property Foo.Bar =\turnOff doesn't complain
2836
2837 (for-each (lambda (x)
2838             ;; (display (car x)) (newline)
2839
2840             (set-object-property! (car x) 'translation-type? ly:grob-properties?)
2841             (set-object-property! (car x) 'is-grob? #t))
2842           all-grob-descriptions)
2843
2844 (set! all-grob-descriptions (sort all-grob-descriptions alist<?))