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