]> git.donarmstrong.com Git - lilypond.git/blob - scm/define-grobs.scm
More flexibility for tremolo slashes
[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         (stem-attachment . ,ly:note-head::calc-stem-attachment)
1639         (stencil . ,ly:note-head::print)
1640         (X-offset . ,ly:note-head::stem-x-shift)
1641         (Y-offset . ,staff-symbol-referencer::callback)
1642         (Y-extent . ,grob::always-Y-extent-from-stencil)
1643         (meta . ((class . Item)
1644                  (interfaces . (font-interface
1645                                 gregorian-ligature-interface
1646                                 ledgered-interface
1647                                 ligature-head-interface
1648                                 mensural-ligature-interface
1649                                 note-head-interface
1650                                 rhythmic-grob-interface
1651                                 rhythmic-head-interface
1652                                 staff-symbol-referencer-interface
1653                                 vaticana-ligature-interface))))))
1654
1655     (NoteName
1656      . (
1657         (stencil . ,ly:text-interface::print)
1658         (Y-extent . ,grob::always-Y-extent-from-stencil)
1659         (meta . ((class . Item)
1660                  (interfaces . (font-interface
1661                                 note-name-interface
1662                                 text-interface))))))
1663
1664     (NoteSpacing
1665      . (
1666         ;; Changed this from 0.75.
1667         ;; If you ever change this back, please document! --hwn
1668         (knee-spacing-correction . 1.0)
1669         (same-direction-correction . 0.25)
1670         (space-to-barline . #t)
1671         (stem-spacing-correction . 0.5)
1672         (meta . ((class . Item)
1673                  (interfaces . (note-spacing-interface
1674                                 spacing-interface))))))
1675
1676     (OttavaBracket
1677      . (
1678         (dash-fraction . 0.3)
1679         (direction . ,UP)
1680         (edge-height . (0 . 0.8))
1681         (font-shape . italic)
1682         (minimum-length . 0.3)
1683         (outside-staff-priority . 400)
1684         (padding . 0.5)
1685         (shorten-pair . (-0.8 . -0.6))
1686         (staff-padding . 2.0)
1687         (stencil . ,ly:ottava-bracket::print)
1688         (style . dashed-line)
1689         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1690         (Y-offset . ,side-position-interface::y-aligned-side)
1691         (meta . ((class . Spanner)
1692                  (interfaces . (font-interface
1693                                 horizontal-bracket-interface
1694                                 line-interface
1695                                 outside-staff-interface
1696                                 ottava-bracket-interface
1697                                 side-position-interface
1698                                 text-interface))))))
1699
1700
1701     (PaperColumn
1702      . (
1703         (allow-loose-spacing . #t)
1704         (axes . (,X))
1705         (before-line-breaking . ,ly:paper-column::before-line-breaking)
1706         (bound-alignment-interfaces . (note-column-interface))
1707         ;; used by Paper_column::print when debugging columns:
1708         (font-size . -7.5)
1709         (horizontal-skylines . ,ly:separation-item::calc-skylines)
1710         (keep-inside-line . #t)
1711         ;; used by Paper_column::print when debugging columns:
1712         (layer . 1000)
1713         ;; 0.08 comes from spacing-horizontal-skyline.ly
1714         ;; allows double flat of F to be nestled over dots of C
1715         (skyline-vertical-padding . 0.08)
1716         ;; (stencil . ,ly:paper-column::print)
1717         (X-extent . ,ly:axis-group-interface::width)
1718         (meta . ((class . Paper_column)
1719                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
1720                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
1721                  (interfaces . (axis-group-interface
1722                                 font-interface
1723                                 paper-column-interface
1724                                 separation-item-interface
1725                                 spaceable-grob-interface))))))
1726
1727     (ParenthesesItem
1728      . (
1729         (font-size . -6)
1730         (padding . 0.2)
1731         (stencil . ,parentheses-item::print)
1732         (stencils . ,parentheses-item::calc-parenthesis-stencils)
1733         ;; X-extent needs to be non-empty in order to allow proper
1734         ;; horizontal attachment.  ParenthesesItem does not reserve
1735         ;; space of its own, however.
1736         (X-extent . (0 . 0))
1737         (meta . ((class . Item)
1738                  (interfaces . (font-interface
1739                                 parentheses-interface))))))
1740
1741     (PercentRepeat
1742      . (
1743         (dot-negative-kern . 0.75)
1744         (font-encoding . fetaMusic)
1745         (slope . 1.0)
1746         (spacing-pair . (break-alignment . staff-bar))
1747         (springs-and-rods . ,ly:multi-measure-rest::set-spacing-rods)
1748         (stencil . ,ly:multi-measure-rest::percent)
1749         (thickness . 0.48)
1750         (meta . ((class . Spanner)
1751                  (interfaces . (font-interface
1752                                 multi-measure-rest-interface
1753                                 percent-repeat-interface))))))
1754
1755     (PercentRepeatCounter
1756      . (
1757         (direction . ,UP)
1758         (font-encoding . fetaText)
1759         (font-size . -2)
1760         (padding . 0.2)
1761         (parent-alignment-X . ,CENTER)
1762         (self-alignment-X . ,CENTER)
1763         (staff-padding . 0.25)
1764         (stencil . ,ly:text-interface::print)
1765         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
1766         (Y-extent . ,grob::always-Y-extent-from-stencil)
1767         (Y-offset . ,side-position-interface::y-aligned-side)
1768         (meta . ((class . Spanner)
1769                  (interfaces . (font-interface
1770                                 percent-repeat-interface
1771                                 outside-staff-interface
1772                                 self-alignment-interface
1773                                 side-position-interface
1774                                 text-interface))))))
1775
1776     (PhrasingSlur
1777      . (
1778         (control-points . ,ly:slur::calc-control-points)
1779         (cross-staff . ,ly:slur::calc-cross-staff)
1780         (details . ,default-slur-details)
1781         (direction . ,ly:slur::calc-direction)
1782         (height-limit . 2.0)
1783         (minimum-length . 1.5)
1784         (ratio . 0.333)
1785         (spanner-id . "")
1786         (springs-and-rods . ,ly:spanner::set-spacing-rods)
1787         (stencil . ,ly:slur::print)
1788         (thickness . 1.1)
1789         (vertical-skylines . ,(ly:make-unpure-pure-container ly:slur::vertical-skylines ly:grob::pure-simple-vertical-skylines-from-extents))
1790         (Y-extent . ,slur::height)
1791         (meta . ((class . Spanner)
1792                  (interfaces . (outside-staff-interface
1793                                 slur-interface))))))
1794
1795     ;; an example of a text spanner
1796     (PianoPedalBracket
1797      . (
1798         (bound-padding . 1.0)
1799         (bracket-flare . (0.5 . 0.5))
1800         (direction . ,DOWN)
1801         (edge-height . (1.0 . 1.0))
1802         (shorten-pair . (0.0 . 0.0))
1803         (stencil . ,ly:piano-pedal-bracket::print)
1804         (style . line)
1805         (thickness .  1.0)
1806         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1807         (meta . ((class . Spanner)
1808                  (interfaces . (line-interface
1809                                 piano-pedal-bracket-interface
1810                                 piano-pedal-interface))))))
1811
1812
1813     (RehearsalMark
1814      . (
1815         (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff)
1816         (baseline-skip . 2)
1817         (break-align-symbols . (staff-bar key-signature clef))
1818         (break-visibility . ,end-of-line-invisible)
1819         (direction . ,UP)
1820         (extra-spacing-width . (+inf.0 . -inf.0))
1821         (font-size . 2)
1822         (non-musical . #t)
1823         (outside-staff-horizontal-padding . 0.2)
1824         (outside-staff-priority . 1500)
1825         (padding . 0.8)
1826         (self-alignment-X . ,CENTER)
1827         (stencil . ,ly:text-interface::print)
1828         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1829         (X-offset . ,self-alignment-interface::self-aligned-on-breakable)
1830         (Y-offset . ,side-position-interface::y-aligned-side)
1831         (Y-extent . ,grob::always-Y-extent-from-stencil)
1832         (meta . ((class . Item)
1833                  (interfaces . (break-alignable-interface
1834                                 font-interface
1835                                 mark-interface
1836                                 outside-staff-interface
1837                                 self-alignment-interface
1838                                 side-position-interface
1839                                 text-interface))))))
1840
1841     (RepeatSlash
1842      . (
1843         (slash-negative-kern . 0.85)
1844         (slope . 1.7)
1845         (stencil . ,ly:percent-repeat-item-interface::beat-slash)
1846         (Y-extent . ,grob::always-Y-extent-from-stencil)
1847         (thickness . 0.48)
1848         (meta . ((class . Item)
1849                  (interfaces . (percent-repeat-interface
1850                                 percent-repeat-item-interface
1851                                 rhythmic-grob-interface))))))
1852
1853     (RepeatTie
1854      . (
1855         (cross-staff . ,semi-tie::calc-cross-staff)
1856         (control-points . ,ly:semi-tie::calc-control-points)
1857         (details . ((ratio . 0.333)
1858                     (height-limit . 1.0)))
1859         (direction . ,ly:tie::calc-direction)
1860         (head-direction . ,RIGHT)
1861         (stencil  . ,ly:tie::print)
1862         (thickness . 1.0)
1863         (extra-spacing-height . (-0.5 . 0.5))
1864         (Y-extent . ,grob::always-Y-extent-from-stencil)
1865         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1866         (meta . ((class . Item)
1867                  (interfaces . (semi-tie-interface))))))
1868
1869     (RepeatTieColumn
1870      . (
1871         (direction . ,ly:tie::calc-direction)
1872         (head-direction . ,ly:semi-tie-column::calc-head-direction)
1873         (positioning-done . ,ly:semi-tie-column::calc-positioning-done)
1874         (X-extent . #f)
1875         (Y-extent . #f)
1876         (meta . ((class . Item)
1877                  (interfaces . (semi-tie-column-interface))))))
1878
1879     (Rest
1880      . (
1881         (cross-staff . ,ly:rest::calc-cross-staff)
1882         (duration-log . ,stem::calc-duration-log)
1883         (minimum-distance . 0.25)
1884         (stencil . ,ly:rest::print)
1885         (voiced-position . 4)
1886         (X-extent . ,ly:rest::width)
1887         (Y-extent . ,(ly:make-unpure-pure-container ly:rest::height ly:rest::pure-height))
1888         (Y-offset . ,(ly:make-unpure-pure-container ly:rest::y-offset-callback))
1889         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1890         (meta . ((class . Item)
1891                  (interfaces . (font-interface
1892                                 rest-interface
1893                                 rhythmic-grob-interface
1894                                 rhythmic-head-interface
1895                                 staff-symbol-referencer-interface))))))
1896
1897     (RestCollision
1898      . (
1899         (minimum-distance . 0.75)
1900         (positioning-done . ,ly:rest-collision::calc-positioning-done)
1901         (meta . ((class . Item)
1902                  (interfaces . (rest-collision-interface))))))
1903
1904
1905     (Script
1906      . (
1907         (add-stem-support . #t)
1908         (cross-staff . ,ly:script-interface::calc-cross-staff)
1909         (direction . ,ly:script-interface::calc-direction)
1910         (font-encoding . fetaMusic)
1911         (horizon-padding . 0.1) ; to avoid interleaving with accidentals
1912         (positioning-done . ,ly:script-interface::calc-positioning-done)
1913         (self-alignment-X . ,CENTER)
1914         (side-axis . ,Y)
1915
1916         ;; padding set in script definitions.
1917         (slur-padding . 0.2)
1918         (staff-padding . 0.25)
1919
1920         (stencil . ,ly:script-interface::print)
1921         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1922         (Y-extent . ,grob::always-Y-extent-from-stencil)
1923         (X-offset . ,script-interface::calc-x-offset)
1924         (Y-offset . ,side-position-interface::y-aligned-side)
1925         (meta . ((class . Item)
1926                  (interfaces . (font-interface
1927                                 outside-staff-interface
1928                                 script-interface
1929                                 self-alignment-interface
1930                                 side-position-interface))))))
1931
1932     (ScriptColumn
1933      . (
1934         (before-line-breaking . ,ly:script-column::before-line-breaking)
1935         (meta . ((class . Item)
1936                  (interfaces . (script-column-interface))))))
1937
1938     (ScriptRow
1939      . (
1940         (before-line-breaking . ,ly:script-column::row-before-line-breaking)
1941         (meta . ((class . Item)
1942                  (interfaces . (script-column-interface))))))
1943
1944     (Slur
1945      . (
1946         (avoid-slur . inside)
1947         (control-points . ,ly:slur::calc-control-points)
1948         (cross-staff . ,ly:slur::calc-cross-staff)
1949         (details . ,default-slur-details)
1950         (direction . ,ly:slur::calc-direction)
1951         (height-limit . 2.0)
1952         (line-thickness . 0.8)
1953         (minimum-length . 1.5)
1954         (ratio . 0.25)
1955         (spanner-id . "")
1956         (springs-and-rods . ,ly:spanner::set-spacing-rods)
1957         (stencil . ,ly:slur::print)
1958         (thickness . 1.2)
1959         (vertical-skylines . ,(ly:make-unpure-pure-container ly:slur::vertical-skylines ly:grob::pure-simple-vertical-skylines-from-extents))
1960         (Y-extent . ,slur::height)
1961         (meta . ((class . Spanner)
1962                  (interfaces . (outside-staff-interface
1963                                 slur-interface))))))
1964
1965     (SostenutoPedal
1966      . (
1967         (direction . ,RIGHT)
1968         (extra-spacing-width . (+inf.0 . -inf.0))
1969         (font-shape . italic)
1970         (padding . 0.0) ;; padding relative to SostenutoPedalLineSpanner
1971         (parent-alignment-X . #f)
1972         (self-alignment-X . ,CENTER)
1973         (stencil . ,ly:text-interface::print)
1974         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1975         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
1976         (Y-extent . ,grob::always-Y-extent-from-stencil)
1977         (meta . ((class . Item)
1978                  (interfaces . (font-interface
1979                                 piano-pedal-script-interface
1980                                 self-alignment-interface
1981                                 text-interface))))))
1982
1983     (SostenutoPedalLineSpanner
1984      . (
1985         (axes . (,Y))
1986         (direction . ,DOWN)
1987         (minimum-space . 1.0)
1988         (outside-staff-priority . 1000)
1989         (padding . 1.2)
1990         (side-axis . ,Y)
1991         (staff-padding . 1.0)
1992         (vertical-skylines . ,grob::always-vertical-skylines-from-element-stencils)
1993         (X-extent . ,ly:axis-group-interface::width)
1994         (Y-extent . ,axis-group-interface::height)
1995         (Y-offset . ,side-position-interface::y-aligned-side)
1996         (meta . ((class . Spanner)
1997                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
1998                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
1999                  (interfaces . (axis-group-interface
2000                                 outside-staff-interface
2001                                 piano-pedal-interface
2002                                 side-position-interface))))))
2003
2004     (SpacingSpanner
2005      . (
2006         (average-spacing-wishes . #t)
2007         (base-shortest-duration . ,(ly:make-moment 3 16))
2008         (common-shortest-duration . ,ly:spacing-spanner::calc-common-shortest-duration)
2009         (shortest-duration-space . 2.0)
2010         (spacing-increment . 1.2)
2011         (springs-and-rods . ,ly:spacing-spanner::set-springs)
2012         (meta . ((class . Spanner)
2013                  (interfaces . (spacing-options-interface
2014                                 spacing-spanner-interface))))))
2015
2016     (SpanBar
2017      . (
2018         (allow-span-bar . #t)
2019         (bar-extent . ,axis-group-interface::height)
2020         (before-line-breaking . ,ly:span-bar::before-line-breaking)
2021         (break-align-symbol . staff-bar)
2022         (cross-staff . #t)
2023         (glyph-name . ,ly:span-bar::calc-glyph-name)
2024         (layer . 0)
2025         (non-musical . #t)
2026         (stencil . ,ly:span-bar::print)
2027         (X-extent . ,ly:span-bar::width)
2028         (Y-extent . (+inf.0 . -inf.0))
2029         (meta . ((class . Item)
2030                  (interfaces . (bar-line-interface
2031                                 font-interface
2032                                 span-bar-interface))))))
2033
2034     (SpanBarStub
2035      . (
2036         (X-extent . ,(grob::inherit-parent-property
2037                       X 'X-extent))
2038         (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height)
2039         ;; we want this to be ignored, so empty, but the extra spacing height
2040         ;; should preserve the span bar's presence for horizontal spacing
2041         (Y-extent . ,pure-from-neighbor-interface::height-if-pure)
2042         (meta . ((class . Item)
2043                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2044                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
2045                  (interfaces . (pure-from-neighbor-interface))))))
2046
2047     (StaffGrouper
2048      . (
2049         (staff-staff-spacing . ((basic-distance . 9)
2050                                 (minimum-distance . 7)
2051                                 (padding . 1)
2052                                 (stretchability . 5)))
2053         (staffgroup-staff-spacing . ((basic-distance . 10.5)
2054                                      (minimum-distance . 8)
2055                                      (padding . 1)
2056                                      (stretchability . 9)))
2057         (meta . ((class . Spanner)
2058                  (interfaces . (staff-grouper-interface))))))
2059
2060     (StaffSpacing
2061      . (
2062         (non-musical . #t)
2063         (stem-spacing-correction . 0.4)
2064         (meta . ((class . Item)
2065                  (interfaces . (spacing-interface
2066                                 staff-spacing-interface))))))
2067
2068     (StaffSymbol
2069      . (
2070         (break-align-symbols . (staff-bar break-alignment))
2071         (layer . 0)
2072         (ledger-line-thickness . (1.0 . 0.1))
2073         (line-count . 5)
2074         (stencil . ,ly:staff-symbol::print)
2075         (Y-extent . ,(ly:make-unpure-pure-container ly:staff-symbol::height))
2076         (meta . ((class . Spanner)
2077                  (interfaces . (staff-symbol-interface))))))
2078
2079     (StanzaNumber
2080      . (
2081         (direction . ,LEFT)
2082         (font-series . bold)
2083         (padding . 1.0)
2084         (side-axis . ,X)
2085         (stencil . ,ly:text-interface::print)
2086         (X-offset . ,ly:side-position-interface::x-aligned-side)
2087         (Y-extent . ,grob::always-Y-extent-from-stencil)
2088         (meta . ((class . Item)
2089                  (interfaces . (font-interface
2090                                 side-position-interface
2091                                 stanza-number-interface
2092                                 text-interface))))))
2093
2094     (Stem
2095      . (
2096         (beamlet-default-length . (1.1 . 1.1))
2097         (beamlet-max-length-proportion . (0.75 . 0.75))
2098         (cross-staff . ,ly:stem::calc-cross-staff)
2099         (default-direction . ,ly:stem::calc-default-direction)
2100         (details
2101          . (
2102             ;; 3.5 (or 3 measured from note head) is standard length
2103             ;; 32nd, 64th, 128th flagged stems should be longer
2104             (lengths . (3.5 3.5 3.5 4.25 5.0 6.0))
2105
2106             ;; FIXME.  3.5 yields too long beams (according to Ross and
2107             ;; looking at Baerenreiter examples) for a number of common
2108             ;; boundary cases.  Subtracting half a beam thickness fixes
2109             ;; this, but the bug may well be somewhere else.
2110
2111             ;; FIXME this should come from 'lengths
2112             (beamed-lengths . (3.26 3.5 3.6))
2113
2114             ;; The 'normal' minima
2115             (beamed-minimum-free-lengths . (1.83 1.5 1.25))
2116             ;;(beamed-minimum-free-lengths . (2.0 1.83 1.25))
2117
2118             ;; The 'extreme case' minima
2119             (beamed-extreme-minimum-free-lengths . (2.0 1.25))
2120
2121             ;; Stems in unnatural (forced) direction should be shortened by
2122             ;; one staff space, according to [Roush & Gourlay].
2123             ;; Flagged stems we shorten only half a staff space.
2124             (stem-shorten . (1.0 0.5 0.25))
2125
2126             ))
2127
2128         ;; We use the normal minima as minimum for the ideal lengths,
2129         ;; and the extreme minima as abolute minimum length.
2130
2131         (direction . ,ly:stem::calc-direction)
2132         (double-stem-separation . 0.5)
2133         (duration-log . ,stem::calc-duration-log)
2134         (length . ,(ly:make-unpure-pure-container ly:stem::calc-length ly:stem::pure-calc-length))
2135         (neutral-direction . ,DOWN)
2136         (positioning-done . ,ly:stem::calc-positioning-done)
2137         (stem-info . ,ly:stem::calc-stem-info)
2138         (stem-begin-position . ,(ly:make-unpure-pure-container ly:stem::calc-stem-begin-position ly:stem::pure-calc-stem-begin-position))
2139         (stencil . ,ly:stem::print)
2140         (thickness . 1.3)
2141         (X-extent . ,ly:stem::width)
2142         (X-offset . ,ly:stem::offset-callback)
2143         (Y-extent . ,(ly:make-unpure-pure-container ly:stem::height ly:stem::pure-height))
2144         (Y-offset . ,staff-symbol-referencer::callback)
2145         (meta . ((class . Item)
2146                  (interfaces . (stem-interface))))))
2147
2148     (StemStub
2149      . (
2150         (X-extent . ,stem-stub::width)
2151         (extra-spacing-height . ,stem-stub::extra-spacing-height)
2152         (Y-extent . ,(ly:make-unpure-pure-container #f stem-stub::pure-height))
2153         (meta . ((class . Item)
2154                  (interfaces . ())))))
2155
2156     (StemTremolo
2157      . (
2158         (beam-thickness . 0.48) ; staff-space
2159         (beam-width . ,ly:stem-tremolo::calc-width) ; staff-space
2160         (direction . ,ly:stem-tremolo::calc-direction)
2161         (parent-alignment-X . ,CENTER)
2162         (slope . ,ly:stem-tremolo::calc-slope)
2163         (stencil . ,ly:stem-tremolo::print)
2164         (shape . ,ly:stem-tremolo::calc-shape)
2165         (X-extent . ,ly:stem-tremolo::width)
2166         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
2167         (Y-extent . ,(grob::unpure-Y-extent-from-stencil ly:stem-tremolo::pure-height))
2168         (Y-offset . ,(ly:make-unpure-pure-container ly:stem-tremolo::calc-y-offset ly:stem-tremolo::pure-calc-y-offset))
2169         (meta . ((class . Item)
2170                  (interfaces . (self-alignment-interface
2171                                 stem-tremolo-interface))))))
2172
2173     (StringNumber
2174      . (
2175         (avoid-slur . around)
2176         (cross-staff . ,script-or-side-position-cross-staff)
2177         (font-encoding . fetaText)
2178         (font-size . -5)                ; don't overlap when next to heads.
2179         (number-type . arabic)
2180         (padding . 0.5)
2181         (parent-alignment-X . ,CENTER)
2182         (script-priority . 100)
2183         (self-alignment-X . ,CENTER)
2184         (self-alignment-Y . ,CENTER)
2185         (staff-padding . 0.5)
2186         (stencil . ,print-circled-text-callback)
2187         (text . ,string-number::calc-text)
2188         (Y-extent . ,grob::always-Y-extent-from-stencil)
2189         (meta . ((class . Item)
2190                  (interfaces . (font-interface
2191                                 self-alignment-interface
2192                                 outside-staff-interface
2193                                 side-position-interface
2194                                 number-interface
2195                                 string-number-interface
2196                                 text-interface
2197                                 text-script-interface))))))
2198
2199     (StrokeFinger
2200      . (
2201         (digit-names . #("p" "i" "m" "a" "x"))
2202         (font-shape . italic)
2203         (font-size . -4)                ; don't overlap when next to heads.
2204         (padding . 0.5)
2205         (parent-alignment-X . ,CENTER)
2206         (script-priority . 100)
2207         (self-alignment-X . ,CENTER)
2208         (self-alignment-Y . ,CENTER)
2209         (staff-padding . 0.5)
2210         (stencil . ,ly:text-interface::print)
2211         (text . ,stroke-finger::calc-text)
2212         (Y-extent . ,grob::always-Y-extent-from-stencil)
2213         (meta . ((class . Item)
2214                  (interfaces . (font-interface
2215                                 outside-staff-interface
2216                                 self-alignment-interface
2217                                 side-position-interface
2218                                 stroke-finger-interface
2219                                 text-interface
2220                                 text-script-interface))))))
2221
2222     (SustainPedal
2223      . (
2224         (extra-spacing-width . (+inf.0 . -inf.0))
2225         (padding . 0.0)  ;; padding relative to SustainPedalLineSpanner
2226         (parent-alignment-X . #f)
2227         (self-alignment-X . ,CENTER)
2228         (stencil . ,ly:sustain-pedal::print)
2229         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
2230         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
2231         (Y-extent . ,grob::always-Y-extent-from-stencil)
2232         (meta . ((class . Item)
2233                  (interfaces . (font-interface
2234                                 piano-pedal-interface
2235                                 piano-pedal-script-interface
2236                                 self-alignment-interface
2237                                 text-interface))))))
2238
2239     (SustainPedalLineSpanner
2240      . (
2241         (axes . (,Y))
2242         (direction . ,DOWN)
2243         (minimum-space . 1.0)
2244         (outside-staff-priority . 1000)
2245         (padding . 1.2)
2246         (side-axis . ,Y)
2247         (staff-padding . 1.2)
2248         (vertical-skylines . ,grob::always-vertical-skylines-from-element-stencils)
2249         (X-extent . ,ly:axis-group-interface::width)
2250         (Y-extent . ,axis-group-interface::height)
2251         (Y-offset . ,side-position-interface::y-aligned-side)
2252         (meta . ((class . Spanner)
2253                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2254                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
2255                  (interfaces . (axis-group-interface
2256                                 outside-staff-interface
2257                                 piano-pedal-interface
2258                                 side-position-interface))))))
2259
2260     (System
2261      . (
2262         (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights)
2263         (axes . (,X ,Y))
2264         (outside-staff-placement-directive . left-to-right-polite)
2265         (skyline-horizontal-padding . 1.0)
2266         (vertical-skylines . ,ly:axis-group-interface::calc-skylines)
2267         (X-extent . ,ly:axis-group-interface::width)
2268         (Y-extent . ,(ly:make-unpure-pure-container ly:system::height ly:system::calc-pure-height))
2269         (meta . ((class . System)
2270                  (object-callbacks . ((footnotes-before-line-breaking . ,ly:system::footnotes-before-line-breaking)
2271                                       (footnotes-after-line-breaking . ,ly:system::footnotes-after-line-breaking)
2272                                       (pure-relevant-grobs . ,ly:system::calc-pure-relevant-grobs)
2273                                       (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2274                                       (vertical-skyline-elements . ,ly:system::vertical-skyline-elements)
2275                                       (vertical-alignment . ,ly:system::get-vertical-alignment)))
2276                  (interfaces . (axis-group-interface
2277                                 system-interface
2278                                 outside-staff-axis-group-interface))))))
2279
2280     (SystemStartBar
2281      . (
2282         (collapse-height . 5.0)
2283         (direction . ,LEFT)
2284
2285         ;; ugh--hardcoded.
2286         (padding . -0.1)  ;; bar must cover rounded ending of staff line.
2287         (stencil . ,ly:system-start-delimiter::print)
2288         (style . bar-line)
2289         (thickness . 1.6)
2290         (X-offset . ,ly:side-position-interface::x-aligned-side)
2291         (meta . ((class . Spanner)
2292                  (interfaces . (side-position-interface
2293                                 system-start-delimiter-interface))))))
2294
2295     (SystemStartBrace
2296      . (
2297         (collapse-height . 5.0)
2298         (direction . ,LEFT)
2299         (font-encoding . fetaBraces)
2300         (padding . 0.3)
2301         (stencil . ,ly:system-start-delimiter::print)
2302         (style . brace)
2303         (X-offset . ,ly:side-position-interface::x-aligned-side)
2304         (meta . ((class . Spanner)
2305                  (interfaces . (font-interface
2306                                 side-position-interface
2307                                 system-start-delimiter-interface))))))
2308
2309     (SystemStartBracket
2310      . (
2311         (collapse-height . 5.0)
2312         (direction . ,LEFT)
2313         (padding . 0.8)
2314         (stencil . ,ly:system-start-delimiter::print)
2315         (style . bracket)
2316         (thickness . 0.45)
2317         (X-offset . ,ly:side-position-interface::x-aligned-side)
2318         (meta . ((class . Spanner)
2319                  (interfaces . (font-interface
2320                                 side-position-interface
2321                                 system-start-delimiter-interface))))))
2322
2323     (SystemStartSquare
2324      . (
2325         (direction . ,LEFT)
2326         (stencil . ,ly:system-start-delimiter::print)
2327         (style . line-bracket)
2328         (thickness . 1.0)
2329         (X-offset . ,ly:side-position-interface::x-aligned-side)
2330         (meta . ((class . Spanner)
2331                  (interfaces . (font-interface
2332                                 side-position-interface
2333                                 system-start-delimiter-interface))))))
2334
2335
2336     (TabNoteHead
2337      . (
2338         (details . ((cautionary-properties . ((angularity . 0.4)
2339                                               (half-thickness . 0.075)
2340                                               (padding . 0)
2341                                               (procedure . ,parenthesize-stencil)
2342                                               (width . 0.25)))
2343                     (head-offset . 3/5)
2344                     (harmonic-properties . ((angularity . 2)
2345                                             (half-thickness . 0.075)
2346                                             (padding . 0)
2347                                             (procedure . ,parenthesize-stencil)
2348                                             (width . 0.25)))
2349                     (repeat-tied-properties . ((note-head-visible . #t)
2350                                                (parenthesize . #t)))
2351                     (tied-properties . ((break-visibility . ,begin-of-line-visible)
2352                                         (parenthesize . #t)))))
2353
2354         (direction . ,CENTER)
2355         (duration-log . ,note-head::calc-duration-log)
2356         (font-series . bold)
2357         (font-size . -2)
2358         (stem-attachment . (0.0 . 1.35))
2359         (stencil . ,tab-note-head::print)
2360         (whiteout . #t)
2361         (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
2362         (Y-offset . ,staff-symbol-referencer::callback)
2363         (Y-extent . ,grob::always-Y-extent-from-stencil)
2364         (meta . ((class . Item)
2365                  (interfaces  . (font-interface
2366                                  note-head-interface
2367                                  rhythmic-grob-interface
2368                                  rhythmic-head-interface
2369                                  staff-symbol-referencer-interface
2370                                  tab-note-head-interface
2371                                  text-interface))))))
2372
2373     (TextScript
2374      . (
2375         (avoid-slur . around)
2376         (cross-staff . #f)
2377         (direction . ,DOWN)
2378         (extra-spacing-width . (+inf.0 . -inf.0))
2379         (outside-staff-horizontal-padding . 0.2)
2380         (outside-staff-priority . 450)
2381
2382         ;; sync with Fingering ?
2383         (padding . 0.3)
2384
2385         (parent-alignment-X . #f)
2386         (script-priority . 200)
2387         ;; self-alignment cannot be LEFT because of fingering diagrams.
2388         (self-alignment-X . #f)
2389         (side-axis . ,Y)
2390         (slur-padding . 0.5)
2391         (staff-padding . 0.5)
2392         (stencil . ,ly:text-interface::print)
2393         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
2394         (Y-extent . ,grob::always-Y-extent-from-stencil)
2395         (X-align-on-main-noteheads . #t)
2396         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
2397         (Y-offset . ,side-position-interface::y-aligned-side)
2398         (meta . ((class . Item)
2399                  (interfaces . (font-interface
2400                                 instrument-specific-markup-interface
2401                                 outside-staff-interface
2402                                 self-alignment-interface
2403                                 side-position-interface
2404                                 text-interface
2405                                 text-script-interface))))))
2406
2407     (TextSpanner
2408      . (
2409         (bound-details . ((left . ((Y . 0)
2410                                    (padding . 0.25)
2411                                    (attach-dir . ,LEFT)
2412                                    ))
2413                           (left-broken . ((attach-dir . ,RIGHT)))
2414                           (right . ((Y . 0)
2415                                     (padding . 0.25)
2416                                     ))
2417                           ))
2418         (dash-fraction . 0.2)
2419         (dash-period . 3.0)
2420         (direction . ,UP)
2421         (font-shape . italic)
2422         (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
2423         (outside-staff-priority . 350)
2424         (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
2425         (side-axis . ,Y)
2426         (staff-padding . 0.8)
2427         (stencil . ,ly:line-spanner::print)
2428         (style . dashed-line)
2429         (Y-offset . ,side-position-interface::y-aligned-side)
2430
2431         (meta . ((class . Spanner)
2432                  (interfaces . (font-interface
2433                                 line-interface
2434                                 line-spanner-interface
2435                                 outside-staff-interface
2436                                 side-position-interface))))))
2437
2438     (Tie
2439      . (
2440         (avoid-slur . inside)
2441         (control-points . ,ly:tie::calc-control-points)
2442         (details . (
2443                     ;; for a full list, see tie-details.cc
2444                     (ratio . 0.333)
2445                     (center-staff-line-clearance . 0.6)
2446                     (tip-staff-line-clearance . 0.45)
2447                     (note-head-gap . 0.2)
2448                     (stem-gap . 0.35)
2449                     (height-limit . 1.0)
2450                     (horizontal-distance-penalty-factor . 10)
2451                     (same-dir-as-stem-penalty . 8)
2452                     (min-length-penalty-factor . 26)
2453                     (tie-tie-collision-distance . 0.45)
2454                     (tie-tie-collision-penalty . 25.0)
2455                     (intra-space-threshold . 1.25)
2456                     (outer-tie-vertical-distance-symmetry-penalty-factor . 10)
2457                     (outer-tie-length-symmetry-penalty-factor . 10)
2458                     (vertical-distance-penalty-factor . 7)
2459                     (outer-tie-vertical-gap . 0.25)
2460                     (multi-tie-region-size . 3)
2461                     (single-tie-region-size . 4)
2462                     (between-length-limit . 1.0)))
2463
2464         (direction . ,ly:tie::calc-direction)
2465         (font-size . -6)
2466         (line-thickness . 0.8)
2467         (neutral-direction . ,UP)
2468         (springs-and-rods . ,ly:spanner::set-spacing-rods)
2469         (stencil . ,ly:tie::print)
2470         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
2471         (thickness . 1.2)
2472         (meta . ((class . Spanner)
2473                  (interfaces . (tie-interface))))))
2474
2475     (TieColumn
2476      . (
2477         (before-line-breaking . ,ly:tie-column::before-line-breaking)
2478         (positioning-done . ,ly:tie-column::calc-positioning-done)
2479         (X-extent . #f)
2480         (Y-extent . #f)
2481         (meta . ((class . Spanner)
2482                  (interfaces . (tie-column-interface))))))
2483
2484     (TimeSignature
2485      . (
2486         (avoid-slur . inside)
2487         (break-align-anchor
2488          . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
2489         (break-align-symbol . time-signature)
2490         (break-align-anchor-alignment . ,LEFT)
2491         (break-visibility . ,all-visible)
2492         (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-including-staff)
2493         (extra-spacing-width . (0.0 . 0.8))
2494         (non-musical . #t)
2495         (space-alist . (
2496                         (cue-clef . (extra-space . 1.5))
2497                         (first-note . (fixed-space . 2.0))
2498                         (right-edge . (extra-space . 0.5))
2499                         (staff-bar . (extra-space . 1.0))))
2500         (stencil . ,ly:time-signature::print)
2501         (Y-extent . ,grob::always-Y-extent-from-stencil)
2502         (style . C)
2503         (meta . ((class . Item)
2504                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2505                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
2506                  (interfaces . (break-aligned-interface
2507                                 font-interface
2508                                 pure-from-neighbor-interface
2509                                 time-signature-interface))))))
2510
2511     (TrillPitchAccidental
2512      . (
2513         (direction . ,LEFT)
2514         (font-size . -4)
2515         (glyph-name-alist . ,standard-alteration-glyph-name-alist)
2516         (padding . 0.2)
2517         (side-axis . ,X)
2518         (stencil . ,ly:accidental-interface::print)
2519         (X-offset . ,ly:side-position-interface::x-aligned-side)
2520         (Y-extent . ,accidental-interface::height)
2521         (meta . ((class . Item)
2522                  (interfaces . (accidental-interface
2523                                 font-interface
2524                                 inline-accidental-interface
2525                                 side-position-interface
2526                                 trill-pitch-accidental-interface))))))
2527
2528     (TrillPitchGroup
2529      . (
2530         (axes . (,X))
2531         (direction . ,RIGHT)
2532         (font-size . -4)
2533         ;; minimum shift to the right, in case the parent note has no stem
2534         (minimum-space . 2.5)
2535         (horizon-padding . 0.1) ; to avoid interleaving with augmentation dots
2536         (padding . 0.3)
2537         (side-axis . ,X)
2538         (stencil . ,parenthesize-elements)
2539         (stencils . ,parentheses-item::calc-parenthesis-stencils)
2540         (X-offset . ,ly:side-position-interface::x-aligned-side)
2541         (Y-extent . ,grob::always-Y-extent-from-stencil)
2542         (meta . ((class . Item)
2543                  (interfaces . (axis-group-interface
2544                                 font-interface
2545                                 note-head-interface
2546                                 parentheses-interface
2547                                 side-position-interface))))))
2548
2549     (TrillPitchHead
2550      . (
2551         (duration-log . 2)
2552         (font-size . -4)
2553         (stencil . ,ly:note-head::print)
2554         (Y-offset . ,staff-symbol-referencer::callback)
2555         (Y-extent . ,grob::always-Y-extent-from-stencil)
2556         (meta . ((class . Item)
2557                  (interfaces . (font-interface
2558                                 ledgered-interface
2559                                 pitched-trill-interface
2560                                 rhythmic-head-interface
2561                                 staff-symbol-referencer-interface))))))
2562
2563     (TrillSpanner
2564      . (
2565         (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
2566         (bound-details . ((left . ((text . ,(make-musicglyph-markup "scripts.trill"))
2567                                    (Y . 0)
2568                                    (stencil-offset . (-0.5 . -1))
2569                                    (padding . 0.5)
2570                                    (attach-dir . ,CENTER)
2571                                    ))
2572                           (left-broken . ((end-on-note . #t)))
2573                           (right . ((Y . 0)))
2574                           ))
2575         (direction . ,UP)
2576         (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
2577         (outside-staff-priority . 50)
2578         (padding . 0.5)
2579         (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
2580         (side-axis . ,Y)
2581         (staff-padding . 1.0)
2582         (stencil . ,ly:line-spanner::print)
2583         (style . trill)
2584         (Y-offset . ,side-position-interface::y-aligned-side)
2585         (meta . ((class . Spanner)
2586                  (interfaces . (font-interface
2587                                 line-interface
2588                                 line-spanner-interface
2589                                 outside-staff-interface
2590                                 side-position-interface
2591                                 trill-spanner-interface))))))
2592
2593     (TupletBracket
2594      . (
2595         (avoid-scripts . #t)
2596         (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors)
2597         (cross-staff . ,ly:tuplet-bracket::calc-cross-staff)
2598         (direction  . ,ly:tuplet-bracket::calc-direction)
2599         (edge-height . (0.7 . 0.7))
2600         (full-length-to-extent . #t)
2601         (padding . 1.1)
2602         (positions . ,ly:tuplet-bracket::calc-positions)
2603         (shorten-pair . (-0.2 . -0.2))
2604         (staff-padding . 0.25)
2605         (stencil . ,ly:tuplet-bracket::print)
2606         (thickness . 1.6)
2607         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
2608         (X-positions . ,ly:tuplet-bracket::calc-x-positions)
2609
2610         (meta . ((class . Spanner)
2611                  (interfaces . (line-interface
2612                                 outside-staff-interface
2613                                 tuplet-bracket-interface))))))
2614
2615     (TupletNumber
2616      . (
2617         (avoid-slur . inside)
2618         (cross-staff . ,ly:tuplet-number::calc-cross-staff)
2619         (direction . ,tuplet-number::calc-direction)
2620         (font-shape . italic)
2621         (font-size . -2)
2622         (knee-to-beam . #t)
2623         (stencil . ,ly:tuplet-number::print)
2624         (text . ,tuplet-number::calc-denominator-text)
2625         (X-offset . ,ly:tuplet-number::calc-x-offset)
2626         (Y-offset . ,ly:tuplet-number::calc-y-offset)
2627         (meta . ((class . Spanner)
2628                  (interfaces . (font-interface
2629                                 outside-staff-interface
2630                                 text-interface
2631                                 tuplet-number-interface))))))
2632
2633
2634     (UnaCordaPedal
2635      . (
2636         (direction . ,RIGHT)
2637         (extra-spacing-width . (+inf.0 . -inf.0))
2638         (font-shape . italic)
2639         (padding . 0.0)  ;; padding relative to UnaCordaPedalLineSpanner
2640         (parent-alignment-X . #f)
2641         (self-alignment-X . ,CENTER)
2642         (stencil . ,ly:text-interface::print)
2643         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
2644         (Y-extent . ,grob::always-Y-extent-from-stencil)
2645         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
2646         (meta . ((class . Item)
2647                  (interfaces . (font-interface
2648                                 piano-pedal-script-interface
2649                                 self-alignment-interface
2650                                 text-interface))))))
2651
2652     (UnaCordaPedalLineSpanner
2653      . (
2654         (axes . (,Y))
2655         (direction . ,DOWN)
2656         (minimum-space . 1.0)
2657         (outside-staff-priority . 1000)
2658         (padding . 1.2)
2659         (side-axis . ,Y)
2660         (staff-padding . 1.2)
2661         (vertical-skylines . ,grob::always-vertical-skylines-from-element-stencils)
2662         (X-extent . ,ly:axis-group-interface::width)
2663         (Y-extent . ,axis-group-interface::height)
2664         (Y-offset . ,side-position-interface::y-aligned-side)
2665         (meta . ((class . Spanner)
2666                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2667                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
2668                  (interfaces . (axis-group-interface
2669                                 outside-staff-interface
2670                                 piano-pedal-interface
2671                                 side-position-interface))))))
2672
2673
2674     (VaticanaLigature
2675      . (
2676         (flexa-width . 2.0)
2677         (stencil . ,ly:vaticana-ligature::print)
2678         (thickness . 0.6)
2679         (meta . ((class . Spanner)
2680                  (interfaces . (font-interface
2681                                 vaticana-ligature-interface))))))
2682
2683     (VerticalAlignment
2684      . (
2685         (axes . (,Y))
2686         (positioning-done . ,ly:align-interface::align-to-ideal-distances)
2687         (stacking-dir . -1)
2688         (vertical-skylines . ,ly:axis-group-interface::combine-skylines)
2689         (X-extent . ,ly:axis-group-interface::width)
2690         (Y-extent . ,axis-group-interface::height)
2691         (meta . ((class . Spanner)
2692                  (object-callbacks . ((Y-common . ,ly:axis-group-interface::calc-y-common)
2693                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)
2694                                       (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)))
2695                  (interfaces . (align-interface
2696                                 axis-group-interface))))))
2697
2698     (VerticalAxisGroup
2699      . (
2700         (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights)
2701         (axes . (,Y))
2702         (default-staff-staff-spacing . ((basic-distance . 9)
2703                                         (minimum-distance . 8)
2704                                         (padding . 1)))
2705         (nonstaff-unrelatedstaff-spacing . ((padding . 0.5)))
2706         (outside-staff-placement-directive . left-to-right-polite)
2707         (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))
2708         (stencil . ,ly:axis-group-interface::print)
2709         (skyline-horizontal-padding . 0.1)
2710         (vertical-skylines . ,ly:hara-kiri-group-spanner::calc-skylines)
2711         (X-extent . ,ly:axis-group-interface::width)
2712         (Y-extent . ,(ly:make-unpure-pure-container ly:hara-kiri-group-spanner::y-extent ly:hara-kiri-group-spanner::pure-height))
2713         (Y-offset . ,ly:hara-kiri-group-spanner::force-hara-kiri-callback)
2714         (meta . ((class . Spanner)
2715                  (object-callbacks . (
2716                                       (X-common . ,ly:axis-group-interface::calc-x-common)
2717                                       (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2718                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
2719
2720                  (interfaces . (axis-group-interface
2721                                 hara-kiri-group-spanner-interface
2722                                 outside-staff-axis-group-interface))))))
2723
2724     (VoiceFollower
2725      . (
2726         (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
2727         (bound-details . ((right . ((attach-dir .  ,CENTER)
2728                                     (padding . 1.5)
2729                                     ))
2730                           (left . ((attach-dir .  ,CENTER)
2731                                    (padding . 1.5)
2732                                    ))
2733                           ))
2734         (cross-staff . #t)
2735         (gap . 0.5)
2736         (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
2737         (non-musical . #t)
2738         (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
2739         (stencil . ,ly:line-spanner::print)
2740         (style . line)
2741         (X-extent . #f)
2742         (Y-extent . #f)
2743         (meta . ((class . Spanner)
2744                  (interfaces . (line-interface
2745                                 line-spanner-interface))))))
2746
2747     (VoltaBracket
2748      . (
2749         (baseline-skip . 1.7)
2750         (direction . ,UP)
2751         (edge-height . (2.0 . 2.0)) ;; staff-space;
2752         (font-encoding . fetaText)
2753         (font-size . -4)
2754         (shorten-pair . ,ly:volta-bracket::calc-shorten-pair)
2755         (stencil . ,ly:volta-bracket-interface::print)
2756         (thickness . 1.6) ;; line-thickness
2757         (word-space . 0.6)
2758         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
2759         (Y-extent . ,(grob::unpure-Y-extent-from-stencil volta-bracket-interface::pure-height))
2760         (meta . ((class . Spanner)
2761                  (interfaces . (font-interface
2762                                 horizontal-bracket-interface
2763                                 line-interface
2764                                 side-position-interface
2765                                 text-interface
2766                                 volta-bracket-interface
2767                                 volta-interface))))))
2768
2769     (VoltaBracketSpanner
2770      . (
2771         (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff)
2772         (axes . (,Y))
2773         (direction . ,UP)
2774         (no-alignment . #t)
2775         (outside-staff-priority . 600)
2776         (padding . 1)
2777         (side-axis . ,Y)
2778         (vertical-skylines . ,grob::always-vertical-skylines-from-element-stencils)
2779         (X-extent . ,ly:axis-group-interface::width)
2780         (Y-extent . ,axis-group-interface::height)
2781         (Y-offset . ,side-position-interface::y-aligned-side)
2782         (meta . ((class . Spanner)
2783                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2784                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
2785                  (interfaces . (axis-group-interface
2786                                 outside-staff-interface
2787                                 side-position-interface
2788                                 volta-interface))))))
2789
2790     ))
2791
2792 (define (completize-grob-entry x)
2793   "Transplant assoc key into 'name entry of 'meta of X.  Set interfaces for Item, Spanner etc.
2794 "
2795   ;;  (display (car x))
2796   ;;  (newline)
2797   (let* ((name-sym  (car x))
2798          (grob-entry (cdr x))
2799          (meta-entry (assoc-get 'meta grob-entry))
2800          (class (assoc-get 'class meta-entry))
2801          (ifaces-entry
2802           (assoc-get 'interfaces meta-entry)))
2803
2804     (cond
2805      ((eq? 'Item class)
2806       (set! ifaces-entry (cons 'item-interface ifaces-entry)))
2807      ((eq? 'Spanner class)
2808       (set! ifaces-entry (cons 'spanner-interface ifaces-entry)))
2809      ((eq? 'Paper_column class)
2810       (set! ifaces-entry (cons 'item-interface
2811                                (cons 'paper-column-interface ifaces-entry))))
2812      ((eq? 'System class)
2813       (set! ifaces-entry (cons 'system-interface
2814                                (cons 'spanner-interface ifaces-entry))))
2815      (else
2816       (ly:warning "Unknown class ~a" class)))
2817
2818     (set! ifaces-entry (uniq-list (sort ifaces-entry symbol<?)))
2819     (set! ifaces-entry (cons 'grob-interface ifaces-entry))
2820
2821     (set! meta-entry (assoc-set! meta-entry 'name name-sym))
2822     (set! meta-entry (assoc-set! meta-entry 'interfaces
2823                                  ifaces-entry))
2824     (set! grob-entry (assoc-set! grob-entry 'meta meta-entry))
2825     (cons name-sym grob-entry)))
2826
2827 (set! all-grob-descriptions (map completize-grob-entry all-grob-descriptions))
2828
2829 ;;  (display (map pair? all-grob-descriptions))
2830
2831 ;; make sure that \property Foo.Bar =\turnOff doesn't complain
2832
2833 (for-each (lambda (x)
2834             ;; (display (car x)) (newline)
2835
2836             (set-object-property! (car x) 'translation-type? ly:grob-properties?)
2837             (set-object-property! (car x) 'is-grob? #t))
2838           all-grob-descriptions)
2839
2840 (set! all-grob-descriptions (sort all-grob-descriptions alist<?))