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