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