]> git.donarmstrong.com Git - lilypond.git/blob - scm/define-grobs.scm
Adds outside-staff-interface and outside-staff-axis-group-interface
[lilypond.git] / scm / define-grobs.scm
1 ;;;; This file is part of LilyPond, the GNU music typesetter.
2 ;;;;
3 ;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
4 ;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
5 ;;;;
6 ;;;; LilyPond is free software: you can redistribute it and/or modify
7 ;;;; it under the terms of the GNU General Public License as published by
8 ;;;; the Free Software Foundation, either version 3 of the License, or
9 ;;;; (at your option) any later version.
10 ;;;;
11 ;;;; LilyPond is distributed in the hope that it will be useful,
12 ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 ;;;; GNU General Public License for more details.
15 ;;;;
16 ;;;; You should have received a copy of the GNU General Public License
17 ;;;; along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
18
19 ;;;; distances are given in line-thickness (thicknesses) and
20 ;;;; staff-space (distances)
21
22 ;;;; WARNING: the meta field should be the last one.
23 ;;;; WARNING: don't use anonymous functions for initialization.
24
25 ;; TODO: junk the meta field in favor of something more compact?
26
27
28 (define-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         (collision-bias . -2.0)
850         (collision-padding . 0.5)
851         (direction . ,ly:script-interface::calc-direction)
852         (extra-spacing-width . (+inf.0 . -inf.0))
853         (font-encoding . fetaText)
854         (font-series . bold)
855         (font-shape . italic)
856         (positioning-done . ,ly:script-interface::calc-positioning-done)
857         (right-padding . 0.5)
858         (self-alignment-X . ,CENTER)
859         (stencil . ,ly:text-interface::print)
860         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
861         (Y-extent . ,grob::always-Y-extent-from-stencil)
862         (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
863         (Y-offset . ,(scale-by-font-size -0.6)) ; center on an 'm'
864         (meta . ((class . Item)
865                  (interfaces . (dynamic-interface
866                                 dynamic-text-interface
867                                 font-interface
868                                 outside-staff-interface
869                                 script-interface
870                                 self-alignment-interface
871                                 text-interface))))))
872
873     (DynamicTextSpanner
874      . (
875         (before-line-breaking . ,dynamic-text-spanner::before-line-breaking)
876         (bound-details . ((right . ((attach-dir .  ,LEFT)
877                                     (Y . 0)
878                                     (padding . 0.75)
879                                     ))
880                           (right-broken . ((attach-dir .  ,RIGHT)
881                                            (padding . 0.0)
882                                            ))
883
884                           (left . ((attach-dir .  ,LEFT)
885                                    (Y . 0)
886                                    (stencil-offset . (-0.75 . -0.5))
887                                    (padding . 0.75)
888                                    ))
889                           (left-broken . ((attach-dir .  ,RIGHT)
890                                           ))
891                           ))
892         (dash-fraction . 0.2)
893         (dash-period . 3.0)
894
895         ;; rather ugh with NCSB
896         ;; (font-series . bold)
897         (font-shape . italic)
898
899         ;; need to blend with dynamic texts.
900         (font-size . 1)
901
902         (left-bound-info . ,ly:line-spanner::calc-left-bound-info-and-text)
903
904         (minimum-length . 2.0)
905         ;; make sure the spanner doesn't get too close to notes
906         (minimum-Y-extent . (-1 . 1))
907
908         (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
909         (skyline-horizontal-padding . 0.2)
910         (springs-and-rods . ,ly:spanner::set-spacing-rods)
911         (stencil . ,ly:line-spanner::print)
912         (style . dashed-line)
913         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
914         (meta . ((class . Spanner)
915                  (interfaces . (dynamic-interface
916                                 dynamic-text-spanner-interface
917                                 font-interface
918                                 line-interface
919                                 line-spanner-interface
920                                 ;for now, LilyPond never will typeset
921                                 ;these without a DynamicLineSpanner
922                                 ;as their controlling element
923                                 ;so, they do not need the
924                                 ;outside-staff-interface
925                                 spanner-interface
926                                 text-interface))))))
927
928
929     (Episema
930      . (
931         (bound-details . ((left . ((Y . 0)
932                                    (padding . 0)
933                                    (attach-dir . ,LEFT)
934                                    ))
935                           (right . ((Y . 0)
936                                     (padding . 0)
937                                     (attach-dir . ,RIGHT)
938                                     ))
939                           ))
940         (direction . ,UP)
941         (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
942         (quantize-position . #t)
943         (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
944         (side-axis . ,Y)
945         (stencil . ,ly:line-spanner::print)
946         (style . line)
947         (Y-offset . ,side-position-interface::y-aligned-side)
948         (meta . ((class . Spanner)
949                  (interfaces . (episema-interface
950                                 font-interface
951                                 line-interface
952                                 line-spanner-interface
953                                 side-position-interface))))))
954
955
956     (Fingering
957      . (
958
959         ;; sync with TextScript (?)
960         (add-stem-support . ,only-if-beamed)
961         (avoid-slur . around)
962         (cross-staff . ,script-or-side-position-cross-staff)
963         (direction . ,ly:script-interface::calc-direction)
964         (font-encoding . fetaText)
965         (font-size . -5)                ; don't overlap when next to heads.
966         (padding . 0.5)
967         (positioning-done . ,ly:script-interface::calc-positioning-done)
968         (script-priority . 100)
969         (self-alignment-X . ,CENTER)
970         (self-alignment-Y . ,CENTER)
971         (slur-padding . 0.2)
972         (staff-padding . 0.5)
973         (stencil . ,ly:text-interface::print)
974         (text . ,fingering::calc-text)
975         (Y-extent . ,grob::always-Y-extent-from-stencil)
976         (meta . ((class . Item)
977                  (interfaces . (finger-interface
978                                 font-interface
979                                 outside-staff-interface
980                                 self-alignment-interface
981                                 side-position-interface
982                                 text-interface
983                                 text-script-interface))))))
984
985     (FingeringColumn
986      . (
987         (padding . 0.2)
988         (positioning-done . ,ly:fingering-column::calc-positioning-done)
989         (snap-radius . 0.3)
990         (meta . ((class . Item)
991                  (interfaces . (fingering-column-interface))))))
992
993     (Flag
994      . (
995         (glyph-name . ,ly:flag::glyph-name)
996         (stencil . ,ly:flag::print)
997         (transparent . ,(grob::inherit-parent-property
998                          X 'transparent))
999         (color . ,(grob::inherit-parent-property
1000                    X 'color))
1001         (X-extent . ,ly:flag::width)
1002         (X-offset . ,ly:flag::calc-x-offset)
1003         (Y-offset . ,(ly:make-unpure-pure-container ly:flag::calc-y-offset ly:flag::pure-calc-y-offset))
1004         (Y-extent . ,grob::always-Y-extent-from-stencil)
1005         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1006         (meta . ((class . Item)
1007                  (interfaces . (flag-interface
1008                                 font-interface))))))
1009
1010     (FootnoteItem
1011      . (
1012         (annotation-balloon . #f)
1013         (annotation-line . #t)
1014         (automatically-numbered . ,(grob::calc-property-by-copy 'automatically-numbered))
1015         (break-visibility . ,(grob::inherit-parent-property
1016                               X 'break-visibility))
1017         (footnote . #t)
1018         (footnote-text . ,(grob::calc-property-by-copy 'footnote-text))
1019         (stencil . ,ly:balloon-interface::print)
1020         (text . ,(grob::calc-property-by-copy 'text))
1021         (X-extent . #f)
1022         (Y-extent . #f)
1023         (X-offset . ,(grob::calc-property-by-copy 'X-offset))
1024         (Y-offset . ,(grob::calc-property-by-copy 'Y-offset))
1025         (meta . ((class . Item)
1026                  (interfaces . (balloon-interface
1027                                 footnote-interface
1028                                 font-interface
1029                                 text-interface))))))
1030
1031     (FootnoteSpanner
1032      . (
1033         (annotation-balloon . #f)
1034         (annotation-line . #t)
1035         (automatically-numbered . ,(grob::calc-property-by-copy 'automatically-numbered))
1036         (footnote . #t)
1037         (footnote-text . ,(grob::calc-property-by-copy 'footnote-text))
1038         (spanner-placement . ,LEFT)
1039         (stencil . ,ly:balloon-interface::print-spanner)
1040         (text . ,(grob::calc-property-by-copy 'text))
1041         (X-extent . #f)
1042         (Y-extent . #f)
1043         (X-offset . ,(grob::calc-property-by-copy 'X-offset))
1044         (Y-offset . ,(grob::calc-property-by-copy 'Y-offset))
1045         (meta . ((class . Spanner)
1046                  (interfaces . (balloon-interface
1047                                 footnote-interface
1048                                 footnote-spanner-interface
1049                                 font-interface
1050                                 text-interface))))))
1051
1052     (FretBoard
1053      . (
1054         (after-line-breaking . ,ly:chord-name::after-line-breaking)
1055         (fret-diagram-details . ((finger-code . below-string)))
1056         (stencil . ,fret-board::calc-stencil)
1057         (extra-spacing-height . (0.2 . -0.2))
1058         (extra-spacing-width . (-0.5 . 0.5))
1059         (Y-extent . ,grob::always-Y-extent-from-stencil)
1060         (meta . ((class . Item)
1061                  (interfaces . (chord-name-interface
1062                                 font-interface
1063                                 fret-diagram-interface
1064                                 outside-staff-interface
1065                                 rhythmic-grob-interface))))))
1066
1067
1068     (Glissando
1069      . (
1070         (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
1071         (bound-details . ((right . ((attach-dir .  ,LEFT)
1072                                     (end-on-accidental . #t)
1073                                     (padding . 0.5)
1074                                     ))
1075                           (left . ((attach-dir .  ,RIGHT)
1076                                    (padding . 0.5)
1077                                    ))
1078                           ))
1079         (cross-staff . ,ly:line-spanner::calc-cross-staff)
1080         (gap . 0.5)
1081         (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
1082         (normalized-endpoints . ,ly:spanner::calc-normalized-endpoints)
1083         (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
1084         (simple-Y . #t)
1085         (stencil . ,ly:line-spanner::print)
1086         (style . line)
1087         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1088         (X-extent . #f)
1089         (Y-extent . #f)
1090         (zigzag-width . 0.75)
1091         (meta . ((class . Spanner)
1092                  (interfaces . (glissando-interface
1093                                 line-interface
1094                                 line-spanner-interface
1095                                 unbreakable-spanner-interface))))))
1096
1097     (GraceSpacing
1098      . (
1099         (common-shortest-duration . ,grace-spacing::calc-shortest-duration)
1100         (shortest-duration-space . 1.6)
1101         (spacing-increment . 0.8)
1102         (meta . ((class . Spanner)
1103                  (interfaces . (grace-spacing-interface
1104                                 spacing-options-interface
1105                                 spanner-interface))))))
1106
1107     (GridLine
1108      . (
1109         (layer . 0)
1110         (self-alignment-X . ,CENTER)
1111         (stencil . ,ly:grid-line-interface::print)
1112         (X-extent  . ,ly:grid-line-interface::width)
1113         (X-offset . ,(ly:make-simple-closure
1114                       `(,+
1115                         ,(ly:make-simple-closure
1116                           (list ly:self-alignment-interface::centered-on-x-parent))
1117                         ,(ly:make-simple-closure
1118                           (list ly:self-alignment-interface::x-aligned-on-self)))))
1119         (meta . ((class . Item)
1120                  (interfaces . (grid-line-interface
1121                                 self-alignment-interface))))))
1122
1123     (GridPoint
1124      . (
1125         (X-extent . (0 . 0))
1126         (Y-extent . (0 . 0))
1127         (meta . ((class . Item)
1128                  (interfaces . (grid-point-interface))))))
1129
1130
1131     (Hairpin
1132      . (
1133         (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
1134         (bound-padding . 1.0)
1135         (broken-bound-padding . ,ly:hairpin::broken-bound-padding)
1136         (circled-tip . #f)
1137         (grow-direction . ,hairpin::calc-grow-direction)
1138         (height . 0.6666)
1139         (minimum-length . 2.0)
1140         (self-alignment-Y . ,CENTER)
1141         (springs-and-rods . ,ly:spanner::set-spacing-rods)
1142         (stencil . ,ly:hairpin::print)
1143         (thickness . 1.0)
1144         (to-barline . #t)
1145         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1146         (Y-extent . ,(grob::unpure-Y-extent-from-stencil ly:hairpin::pure-height))
1147         (Y-offset . ,self-alignment-interface::y-aligned-on-self)
1148         (meta . ((class . Spanner)
1149                  (interfaces . (dynamic-interface
1150                                 hairpin-interface
1151                                 line-interface
1152                                 outside-staff-interface
1153                                 self-alignment-interface
1154                                 spanner-interface))))))
1155
1156     (HorizontalBracket
1157      . (
1158         (bracket-flare . (0.5 . 0.5))
1159         (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors)
1160         (direction . ,DOWN)
1161         (padding . 0.2)
1162         (side-axis . ,Y)
1163         (staff-padding . 0.2)
1164         (stencil . ,ly:horizontal-bracket::print)
1165         (thickness . 1.0)
1166         (Y-offset . ,side-position-interface::y-aligned-side)
1167         (meta . ((class . Spanner)
1168                  (interfaces . (horizontal-bracket-interface
1169                                 line-interface
1170                                 outside-staff-interface
1171                                 side-position-interface
1172                                 spanner-interface))))))
1173
1174
1175     (InstrumentName
1176      . (
1177         (direction . ,LEFT)
1178         (padding . 0.3)
1179         (self-alignment-X . ,CENTER)
1180         (self-alignment-Y . ,CENTER)
1181         (stencil . ,system-start-text::print)
1182         (X-offset . ,system-start-text::calc-x-offset)
1183         (Y-offset . ,system-start-text::calc-y-offset)
1184         (meta . ((class . Spanner)
1185                  (interfaces . (font-interface
1186                                 self-alignment-interface
1187                                 side-position-interface
1188                                 system-start-text-interface))))))
1189
1190     (InstrumentSwitch
1191      . (
1192         (direction . ,UP)
1193         (extra-spacing-width . (+inf.0 . -inf.0))
1194         (outside-staff-priority . 500)
1195         (padding . 0.5)
1196         (self-alignment-X . ,LEFT)
1197         (side-axis . ,Y)
1198         (staff-padding . 0.5)
1199         (stencil . ,ly:text-interface::print)
1200         (Y-extent . ,grob::always-Y-extent-from-stencil)
1201         (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
1202         (Y-offset . ,side-position-interface::y-aligned-side)
1203         (meta . ((class . Item)
1204                  (interfaces . (font-interface
1205                                 outside-staff-interface
1206                                 self-alignment-interface
1207                                 side-position-interface
1208                                 text-interface))))))
1209
1210
1211     (KeyCancellation
1212      . (
1213         (break-align-symbol . key-cancellation)
1214         (break-visibility . ,begin-of-line-invisible)
1215         (glyph-name-alist . ,cancellation-glyph-name-alist)
1216         (non-musical . #t)
1217         (flat-positions . (2 3 4 2 1 2 1))
1218         (sharp-positions . (4 5 4 2 3 2 3))
1219         (space-alist . (
1220                         (time-signature . (extra-space . 1.25))
1221                         (staff-bar . (extra-space . 0.6))
1222                         (key-signature . (extra-space . 0.5))
1223                         (cue-clef . (extra-space . 0.5))
1224                         (right-edge . (extra-space . 0.5))
1225                         (first-note . (fixed-space . 2.5))))
1226         (stencil . ,ly:key-signature-interface::print)
1227         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1228         (Y-extent . ,grob::always-Y-extent-from-stencil)
1229         (extra-spacing-width . (0.0 . 1.0))
1230         (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-including-staff)
1231         (Y-offset . ,staff-symbol-referencer::callback)
1232         (meta . ((class . Item)
1233                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
1234                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
1235                  (interfaces . (break-aligned-interface
1236                                 font-interface
1237                                 key-cancellation-interface
1238                                 key-signature-interface
1239                                 pure-from-neighbor-interface
1240                                 staff-symbol-referencer-interface))))))
1241
1242     (KeySignature
1243      . (
1244         (avoid-slur . inside)
1245         (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
1246         (break-align-anchor-alignment . ,RIGHT)
1247         (break-align-symbol . key-signature)
1248         (break-visibility . ,begin-of-line-visible)
1249         (glyph-name-alist . ,standard-alteration-glyph-name-alist)
1250         (non-musical . #t)
1251         (flat-positions . (2 3 4 2 1 2 1))
1252         (sharp-positions . (4 5 4 2 3 2 3))
1253         (space-alist . (
1254                         (time-signature . (extra-space . 1.15))
1255                         (staff-bar . (extra-space . 1.1))
1256                         (cue-clef . (extra-space . 0.5))
1257                         (right-edge . (extra-space . 0.5))
1258                         (first-note . (fixed-space . 2.5))))
1259         (stencil . ,ly:key-signature-interface::print)
1260         (Y-extent . ,grob::always-Y-extent-from-stencil)
1261         (extra-spacing-width . (0.0 . 1.0))
1262         (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-including-staff)
1263         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1264         (Y-offset . ,staff-symbol-referencer::callback)
1265         (meta . ((class . Item)
1266                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
1267                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
1268                  (interfaces . (break-aligned-interface
1269                                 font-interface
1270                                 key-signature-interface
1271                                 pure-from-neighbor-interface
1272                                 staff-symbol-referencer-interface))))))
1273
1274     (KievanLigature
1275      . (
1276         (springs-and-rods . ,ly:spanner::set-spacing-rods)
1277         (stencil . ,ly:kievan-ligature::print)
1278         (padding . 0.5)
1279         (meta . ((class . Spanner)
1280                  (interfaces . (font-interface
1281                                 kievan-ligature-interface))))))
1282
1283     (LaissezVibrerTie
1284      . (
1285         (control-points . ,ly:semi-tie::calc-control-points)
1286         (cross-staff . ,semi-tie::calc-cross-staff)
1287         (details . ((ratio . 0.333)
1288                     (height-limit . 1.0)))
1289         (direction . ,ly:tie::calc-direction)
1290         (head-direction . ,LEFT)
1291         (stencil  . ,laissez-vibrer::print)
1292         (thickness . 1.0)
1293         (extra-spacing-height . (-0.5 . 0.5))
1294         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1295         (Y-extent . ,grob::always-Y-extent-from-stencil)
1296         (meta . ((class . Item)
1297                  (interfaces . (semi-tie-interface))))))
1298
1299     (LaissezVibrerTieColumn
1300      . (
1301         (head-direction . ,ly:semi-tie-column::calc-head-direction)
1302         (positioning-done . ,ly:semi-tie-column::calc-positioning-done)
1303         (X-extent . #f)
1304         (Y-extent . #f)
1305         (meta . ((class . Item)
1306                  (interfaces . (semi-tie-column-interface))))))
1307
1308     (LedgerLineSpanner
1309      . (
1310         (layer . 0)
1311         (length-fraction . 0.25)
1312         (minimum-length-fraction . 0.25)
1313         (springs-and-rods . ,ly:ledger-line-spanner::set-spacing-rods)
1314         (stencil . ,ly:ledger-line-spanner::print)
1315         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1316         (X-extent . #f)
1317         (Y-extent . #f)
1318         (meta . ((class . Spanner)
1319                  (interfaces . (ledger-line-spanner-interface))))))
1320
1321     (LeftEdge
1322      . (
1323         (break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
1324         (break-align-symbol . left-edge)
1325         (break-visibility . ,center-invisible)
1326         (non-musical . #t)
1327         (extra-spacing-height . (+inf.0 . -inf.0))
1328         (space-alist . (
1329                         (ambitus . (extra-space . 2.0))
1330                         (breathing-sign . (minimum-space . 0.0))
1331                         (cue-end-clef . (extra-space . 0.8))
1332                         (clef . (extra-space . 0.8))
1333                         (cue-clef . (extra-space . 0.8))
1334                         (staff-bar . (extra-space . 0.0))
1335                         (key-cancellation . (extra-space . 0.0))
1336                         (key-signature . (extra-space . 0.8))
1337                         (time-signature . (extra-space . 1.0))
1338                         (custos . (extra-space . 0.0))
1339                         (first-note . (fixed-space . 2.0))
1340                         (right-edge . (extra-space . 0.0))
1341                         ))
1342         (X-extent . (0 . 0))
1343         (meta . ((class . Item)
1344                  (interfaces . (break-aligned-interface))))))
1345
1346     (LigatureBracket
1347      . (
1348         ;; ugh.  A ligature bracket is totally different from
1349         ;; a tuplet bracket.
1350
1351         (bracket-visibility . #t)
1352         (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors)
1353         (direction . ,UP)
1354         (edge-height . (0.7 . 0.7))
1355         (padding . 2.0)
1356         (positions . ,ly:tuplet-bracket::calc-positions)
1357         (shorten-pair . (-0.2 . -0.2))
1358         (staff-padding . 0.25)
1359         (stencil . ,ly:tuplet-bracket::print)
1360         (thickness . 1.6)
1361         (X-positions . ,ly:tuplet-bracket::calc-x-positions)
1362         (meta . ((class . Spanner)
1363                  (interfaces . (line-interface
1364                                 tuplet-bracket-interface))))))
1365
1366     (LyricExtender
1367      . (
1368         (minimum-length . 1.5)
1369         (stencil . ,ly:lyric-extender::print)
1370         (thickness . 0.8) ; line-thickness
1371         (Y-extent . (0 . 0))
1372         (meta . ((class . Spanner)
1373                  (interfaces . (lyric-extender-interface
1374                                 lyric-interface))))))
1375
1376     (LyricHyphen
1377      . (
1378         (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
1379         (dash-period . 10.0)
1380         (height . 0.42)
1381         (length . 0.66)
1382         (minimum-distance . 0.1)
1383         (minimum-length . 0.3)
1384         (padding . 0.07)
1385         (springs-and-rods . ,ly:lyric-hyphen::set-spacing-rods)
1386         (stencil . ,ly:lyric-hyphen::print)
1387         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1388         (thickness . 1.3)
1389         (Y-extent . (0 . 0))
1390         (meta . ((class . Spanner)
1391                  (interfaces . (font-interface
1392                                 lyric-hyphen-interface
1393                                 lyric-interface
1394                                 spanner-interface))))))
1395
1396     (LyricSpace
1397      . (
1398         (minimum-distance . 0.45)
1399         (padding . 0.0)
1400         (springs-and-rods . ,ly:lyric-hyphen::set-spacing-rods)
1401         (X-extent . #f)
1402         (Y-extent . #f)
1403         (meta . ((class . Spanner)
1404                  (interfaces . (lyric-hyphen-interface
1405                                 spanner-interface))))))
1406
1407     (LyricText
1408      . (
1409         (extra-spacing-width . (0.0 . 0.0))
1410         ;; Recede in height for purposes of note spacing,
1411         ;; so notes in melismata can be freely spaced above lyrics
1412         (extra-spacing-height . (0.2 . -0.2))
1413         (font-series . medium)
1414         (font-size . 1.0)
1415         (self-alignment-X . ,CENTER)
1416         (stencil . ,lyric-text::print)
1417         (text . ,(grob::calc-property-by-copy 'text))
1418         (word-space . 0.6)
1419         (skyline-horizontal-padding . 0.1)
1420         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1421         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
1422         (Y-extent . ,grob::always-Y-extent-from-stencil)
1423         (meta . ((class . Item)
1424                  (interfaces . (font-interface
1425                                 lyric-syllable-interface
1426                                 rhythmic-grob-interface
1427                                 self-alignment-interface
1428                                 text-interface))))))
1429
1430     (MeasureCounter
1431      . (
1432         (count-from . 1)
1433         (direction . ,UP)
1434         (font-encoding . fetaText)
1435         (font-size . -2)
1436         (outside-staff-horizontal-padding . 0.5)
1437         (outside-staff-priority . 750)
1438         (self-alignment-X . ,CENTER)
1439         (side-axis . ,Y)
1440         (staff-padding . 0.5)
1441         (stencil . ,measure-counter-stencil)
1442         (meta . ((class . Spanner)
1443                  (interfaces . (font-interface
1444                                 measure-counter-interface
1445                                 outside-staff-interface
1446                                 self-alignment-interface
1447                                 side-position-interface
1448                                 text-interface))))))
1449
1450     (MeasureGrouping
1451      . (
1452         (direction . ,UP)
1453         (height . 2.0)
1454         (padding . 2)
1455         (side-axis . ,Y)
1456         (staff-padding . 3)
1457         (stencil . ,ly:measure-grouping::print)
1458         (thickness . 1)
1459         (Y-offset . ,side-position-interface::y-aligned-side)
1460         (meta . ((class . Spanner)
1461                  (interfaces . (measure-grouping-interface
1462                                 outside-staff-interface
1463                                 side-position-interface))))))
1464
1465     (MelodyItem
1466      . (
1467         (neutral-direction . ,DOWN)
1468         (meta . ((class . Item)
1469                  (interfaces . (melody-spanner-interface))))))
1470
1471     (MensuralLigature
1472      . (
1473         (springs-and-rods . ,ly:spanner::set-spacing-rods)
1474         (stencil . ,ly:mensural-ligature::print)
1475         (thickness . 1.3)
1476         (meta . ((class . Spanner)
1477                  (interfaces . (font-interface
1478                                 mensural-ligature-interface))))))
1479
1480     (MetronomeMark
1481      . (
1482         (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff)
1483         (break-visibility . ,end-of-line-invisible)
1484         (direction . ,UP)
1485         (extra-spacing-width . (+inf.0 . -inf.0))
1486         (flag-style . default)
1487         (outside-staff-horizontal-padding . 0.2)
1488         (outside-staff-priority . 1000)
1489         (padding . 0.8)
1490         (side-axis . ,Y)
1491         (stencil . ,ly:text-interface::print)
1492         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1493         (Y-offset . ,side-position-interface::y-aligned-side)
1494         (X-offset . ,(ly:make-simple-closure
1495                       `(,+
1496                         ,(ly:make-simple-closure
1497                           (list ly:break-alignable-interface::self-align-callback))
1498                         ,(ly:make-simple-closure
1499                           (list ly:self-alignment-interface::x-aligned-on-self)))))
1500         (self-alignment-X . ,LEFT)
1501         (break-align-symbols . (time-signature))
1502         (non-break-align-symbols . (paper-column-interface))
1503         (Y-extent . ,grob::always-Y-extent-from-stencil)
1504         (meta . ((class . Item)
1505                  (interfaces . (break-alignable-interface
1506                                 font-interface
1507                                 metronome-mark-interface
1508                                 outside-staff-interface
1509                                 self-alignment-interface
1510                                 side-position-interface
1511                                 text-interface))))))
1512
1513     (MultiMeasureRest
1514      . (
1515         (expand-limit . 10)
1516         (hair-thickness . 2.0)
1517         (round-up-exceptions . ())
1518         (padding . 1)
1519         (spacing-pair . (break-alignment . break-alignment))
1520         (springs-and-rods . ,ly:multi-measure-rest::set-spacing-rods)
1521         (stencil . ,ly:multi-measure-rest::print)
1522         (thick-thickness . 6.6)
1523         ;; See Wanske pp. 125
1524         (usable-duration-logs . ,(iota 4 -3))
1525         (Y-extent . ,(ly:make-unpure-pure-container ly:multi-measure-rest::height))
1526         (Y-offset . ,staff-symbol-referencer::callback)
1527         (meta . ((class . Spanner)
1528                  (interfaces . (font-interface
1529                                 multi-measure-interface
1530                                 outside-staff-interface
1531                                 multi-measure-rest-interface
1532                                 rest-interface
1533                                 staff-symbol-referencer-interface))))))
1534
1535     (MultiMeasureRestNumber
1536      . (
1537         (bound-padding  . 2.0)
1538         (direction . ,UP)
1539         (font-encoding . fetaText)
1540         (padding . 0.4)
1541         (self-alignment-X . ,CENTER)
1542         (side-axis . ,Y)
1543         (springs-and-rods . ,ly:multi-measure-rest::set-text-rods)
1544         (staff-padding . 0.4)
1545         (stencil . ,ly:text-interface::print)
1546         (X-offset . ,(ly:make-simple-closure
1547                       `(,+
1548                         ,(ly:make-simple-closure
1549                           (list ly:self-alignment-interface::x-aligned-on-self))
1550                         ,(ly:make-simple-closure
1551                           (list ly:self-alignment-interface::x-centered-on-y-parent)))))
1552         (Y-offset . ,side-position-interface::y-aligned-side)
1553         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1554         (Y-extent . ,grob::always-Y-extent-from-stencil)
1555         (meta . ((class . Spanner)
1556                  (interfaces . (font-interface
1557                                 multi-measure-interface
1558                                 outside-staff-interface
1559                                 self-alignment-interface
1560                                 side-position-interface
1561                                 text-interface))))))
1562
1563     (MultiMeasureRestText
1564      . (
1565         (direction . ,UP)
1566         (outside-staff-priority . 450)
1567         (padding . 0.2)
1568         (self-alignment-X . ,CENTER)
1569         (skyline-horizontal-padding . 0.2)
1570         (staff-padding . 0.25)
1571         (stencil . ,ly:text-interface::print)
1572         (X-offset . ,(ly:make-simple-closure
1573                       `(,+
1574                         ,(ly:make-simple-closure
1575                           (list ly:self-alignment-interface::x-centered-on-y-parent))
1576                         ,(ly:make-simple-closure
1577                           (list ly:self-alignment-interface::x-aligned-on-self)))))
1578         (Y-offset . ,side-position-interface::y-aligned-side)
1579         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1580         (Y-extent . ,grob::always-Y-extent-from-stencil)
1581         (meta . ((class . Spanner)
1582                  (interfaces . (font-interface
1583                                 multi-measure-interface
1584                                 outside-staff-interface
1585                                 self-alignment-interface
1586                                 side-position-interface
1587                                 text-interface))))))
1588
1589
1590     (NonMusicalPaperColumn
1591      . (
1592         (allow-loose-spacing . #t)
1593         (axes . (,X))
1594         (before-line-breaking . ,ly:paper-column::before-line-breaking)
1595         (bound-alignment-interfaces . (break-alignment-interface))
1596         ;; used by Paper_column::print when debugging columns:
1597         (font-size . -7.5)
1598         (full-measure-extra-space . 1.0)
1599         (horizontal-skylines . ,ly:separation-item::calc-skylines)
1600         ;;                    (stencil . ,ly:paper-column::print)
1601
1602         (keep-inside-line . #t)
1603         ;; used by Paper_column::print when debugging columns:
1604         (layer . 1000)
1605         (line-break-permission . allow)
1606         (non-musical . #t)
1607         (page-break-permission . allow)
1608         (X-extent . ,ly:axis-group-interface::width)
1609         (meta . ((class . Paper_column)
1610                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
1611                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
1612                  (interfaces . (axis-group-interface
1613                                 font-interface
1614                                 paper-column-interface
1615                                 separation-item-interface
1616                                 spaceable-grob-interface))))))
1617
1618     (NoteCollision
1619      . (
1620         (axes . (,X ,Y))
1621         (positioning-done . ,ly:note-collision-interface::calc-positioning-done)
1622         (prefer-dotted-right . #t)
1623         (X-extent . ,ly:axis-group-interface::width)
1624         (Y-extent . ,axis-group-interface::height)
1625         (meta . ((class . Item)
1626                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
1627                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
1628                  (interfaces . (axis-group-interface
1629                                 note-collision-interface))))))
1630
1631     (NoteColumn
1632      . (
1633         (axes . (,X ,Y))
1634         (bound-alignment-interfaces . (rhythmic-head-interface stem-interface))
1635         (horizontal-skylines . ,ly:separation-item::calc-skylines)
1636         (skyline-vertical-padding . 0.15)
1637         (X-extent . ,ly:axis-group-interface::width)
1638         (Y-extent . ,axis-group-interface::height)
1639         (meta . ((class . Item)
1640                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
1641                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
1642                  (interfaces . (axis-group-interface
1643                                 note-column-interface
1644                                 separation-item-interface))))))
1645
1646     (NoteHead
1647      . (
1648         (flexa-width . 2.0)
1649         (duration-log . ,note-head::calc-duration-log)
1650         (extra-spacing-height . ,ly:note-head::include-ledger-line-height)
1651         (glyph-name . ,note-head::calc-glyph-name)
1652         (ligature-flexa . #f)
1653         (stem-attachment . ,ly:note-head::calc-stem-attachment)
1654         (stencil . ,ly:note-head::print)
1655         (X-offset . ,ly:note-head::stem-x-shift)
1656         (Y-offset . ,staff-symbol-referencer::callback)
1657         (Y-extent . ,grob::always-Y-extent-from-stencil)
1658         (meta . ((class . Item)
1659                  (interfaces . (font-interface
1660                                 gregorian-ligature-interface
1661                                 ledgered-interface
1662                                 ligature-head-interface
1663                                 mensural-ligature-interface
1664                                 note-head-interface
1665                                 rhythmic-grob-interface
1666                                 rhythmic-head-interface
1667                                 staff-symbol-referencer-interface
1668                                 vaticana-ligature-interface))))))
1669
1670     (NoteName
1671      . (
1672         (stencil . ,ly:text-interface::print)
1673         (Y-extent . ,grob::always-Y-extent-from-stencil)
1674         (meta . ((class . Item)
1675                  (interfaces . (font-interface
1676                                 note-name-interface
1677                                 text-interface))))))
1678
1679     (NoteSpacing
1680      . (
1681         ;; Changed this from 0.75.
1682         ;; If you ever change this back, please document! --hwn
1683         (knee-spacing-correction . 1.0)
1684         (same-direction-correction . 0.25)
1685         (space-to-barline . #t)
1686         (stem-spacing-correction . 0.5)
1687         (meta . ((class . Item)
1688                  (interfaces . (note-spacing-interface
1689                                 spacing-interface))))))
1690
1691     (OttavaBracket
1692      . (
1693         (dash-fraction . 0.3)
1694         (direction . ,UP)
1695         (edge-height . (0 . 1.2))
1696         (font-shape . italic)
1697         (minimum-length . 1.0)
1698         (outside-staff-priority . 400)
1699         (padding . 0.5)
1700         (shorten-pair . (0.0 . -0.6))
1701         (staff-padding . 2.0)
1702         (stencil . ,ly:ottava-bracket::print)
1703         (style . dashed-line)
1704         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1705         (Y-offset . ,side-position-interface::y-aligned-side)
1706         (meta . ((class . Spanner)
1707                  (interfaces . (font-interface
1708                                 horizontal-bracket-interface
1709                                 line-interface
1710                                 outside-staff-interface
1711                                 ottava-bracket-interface
1712                                 side-position-interface
1713                                 text-interface))))))
1714
1715
1716     (PaperColumn
1717      . (
1718         (allow-loose-spacing . #t)
1719         (axes . (,X))
1720         (before-line-breaking . ,ly:paper-column::before-line-breaking)
1721         (bound-alignment-interfaces . (note-column-interface))
1722         ;; used by Paper_column::print when debugging columns:
1723         (font-size . -7.5)
1724         (horizontal-skylines . ,ly:separation-item::calc-skylines)
1725         (keep-inside-line . #t)
1726         ;; used by Paper_column::print when debugging columns:
1727         (layer . 1000)
1728         ;; 0.08 comes from spacing-horizontal-skyline.ly
1729         ;; allows double flat of F to be nestled over dots of C
1730         (skyline-vertical-padding . 0.08)
1731         ;; (stencil . ,ly:paper-column::print)
1732         (X-extent . ,ly:axis-group-interface::width)
1733         (meta . ((class . Paper_column)
1734                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
1735                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
1736                  (interfaces . (axis-group-interface
1737                                 font-interface
1738                                 paper-column-interface
1739                                 separation-item-interface
1740                                 spaceable-grob-interface))))))
1741
1742     (ParenthesesItem
1743      . (
1744         (font-size . -6)
1745         (padding . 0.2)
1746         (stencil . ,parentheses-item::print)
1747         (stencils . ,parentheses-item::calc-parenthesis-stencils)
1748         ;; X-extent needs to be non-empty in order to allow proper
1749         ;; horizontal attachment.  ParenthesesItem does not reserve
1750         ;; space of its own, however.
1751         (X-extent . (0 . 0))
1752         (meta . ((class . Item)
1753                  (interfaces . (font-interface
1754                                 parentheses-interface))))))
1755
1756     (PercentRepeat
1757      . (
1758         (dot-negative-kern . 0.75)
1759         (font-encoding . fetaMusic)
1760         (slope . 1.0)
1761         (spacing-pair . (break-alignment . staff-bar))
1762         (springs-and-rods . ,ly:multi-measure-rest::set-spacing-rods)
1763         (stencil . ,ly:multi-measure-rest::percent)
1764         (thickness . 0.48)
1765         (meta . ((class . Spanner)
1766                  (interfaces . (font-interface
1767                                 multi-measure-rest-interface
1768                                 percent-repeat-interface))))))
1769
1770     (PercentRepeatCounter
1771      . (
1772         (direction . ,UP)
1773         (font-encoding . fetaText)
1774         (font-size . -2)
1775         (padding . 0.2)
1776         (self-alignment-X . ,CENTER)
1777         (staff-padding . 0.25)
1778         (stencil . ,ly:text-interface::print)
1779         (X-offset . ,(ly:make-simple-closure
1780                       `(,+
1781                         ,(ly:make-simple-closure
1782                           (list ly:self-alignment-interface::x-centered-on-y-parent))
1783                         ,(ly:make-simple-closure
1784                           (list ly:self-alignment-interface::x-aligned-on-self)))))
1785         (Y-offset . ,side-position-interface::y-aligned-side)
1786         (Y-extent . ,grob::always-Y-extent-from-stencil)
1787         (meta . ((class . Spanner)
1788                  (interfaces . (font-interface
1789                                 percent-repeat-interface
1790                                 outside-staff-interface
1791                                 self-alignment-interface
1792                                 side-position-interface
1793                                 text-interface))))))
1794
1795     (PhrasingSlur
1796      . (
1797         (control-points . ,ly:slur::calc-control-points)
1798         (cross-staff . ,ly:slur::calc-cross-staff)
1799         (details . ,default-slur-details)
1800         (direction . ,ly:slur::calc-direction)
1801         (height-limit . 2.0)
1802         (minimum-length . 1.5)
1803         (ratio . 0.333)
1804         (spanner-id . "")
1805         (springs-and-rods . ,ly:spanner::set-spacing-rods)
1806         (stencil . ,ly:slur::print)
1807         (thickness . 1.1)
1808         (vertical-skylines . ,(ly:make-unpure-pure-container ly:slur::vertical-skylines ly:grob::pure-simple-vertical-skylines-from-extents))
1809         (Y-extent . ,slur::height)
1810         (meta . ((class . Spanner)
1811                  (interfaces . (outside-staff-interface
1812                                 slur-interface))))))
1813
1814     ;; an example of a text spanner
1815     (PianoPedalBracket
1816      . (
1817         (bound-padding . 1.0)
1818         (bracket-flare . (0.5 . 0.5))
1819         (direction . ,DOWN)
1820         (edge-height . (1.0 . 1.0))
1821         (shorten-pair . (0.0 . 0.0))
1822         (stencil . ,ly:piano-pedal-bracket::print)
1823         (style . line)
1824         (thickness .  1.0)
1825         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1826         (meta . ((class . Spanner)
1827                  (interfaces . (line-interface
1828                                 piano-pedal-bracket-interface
1829                                 piano-pedal-interface))))))
1830
1831
1832     (RehearsalMark
1833      . (
1834         (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff)
1835         (baseline-skip . 2)
1836         (break-align-symbols . (staff-bar key-signature clef))
1837         (break-visibility . ,end-of-line-invisible)
1838         (direction . ,UP)
1839         (extra-spacing-width . (+inf.0 . -inf.0))
1840         (font-size . 2)
1841         (non-musical . #t)
1842         (outside-staff-horizontal-padding . 0.2)
1843         (outside-staff-priority . 1500)
1844         (padding . 0.8)
1845         (self-alignment-X . ,CENTER)
1846         (stencil . ,ly:text-interface::print)
1847         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1848         (X-offset . ,(ly:make-simple-closure
1849                       `(,+
1850                         ,(ly:make-simple-closure
1851                           (list ly:break-alignable-interface::self-align-callback))
1852                         ,(ly:make-simple-closure
1853                           (list ly:self-alignment-interface::x-aligned-on-self)))))
1854         (Y-offset . ,side-position-interface::y-aligned-side)
1855         (Y-extent . ,grob::always-Y-extent-from-stencil)
1856         (meta . ((class . Item)
1857                  (interfaces . (break-alignable-interface
1858                                 font-interface
1859                                 mark-interface
1860                                 outside-staff-interface
1861                                 self-alignment-interface
1862                                 side-position-interface
1863                                 text-interface))))))
1864
1865     (RepeatSlash
1866      . (
1867         (slash-negative-kern . 0.85)
1868         (slope . 1.7)
1869         (stencil . ,ly:percent-repeat-item-interface::beat-slash)
1870         (Y-extent . ,grob::always-Y-extent-from-stencil)
1871         (thickness . 0.48)
1872         (meta . ((class . Item)
1873                  (interfaces . (percent-repeat-interface
1874                                 percent-repeat-item-interface
1875                                 rhythmic-grob-interface))))))
1876
1877     (RepeatTie
1878      . (
1879         (cross-staff . ,semi-tie::calc-cross-staff)
1880         (control-points . ,ly:semi-tie::calc-control-points)
1881         (details . ((ratio . 0.333)
1882                     (height-limit . 1.0)))
1883         (direction . ,ly:tie::calc-direction)
1884         (head-direction . ,RIGHT)
1885         (stencil  . ,ly:tie::print)
1886         (thickness . 1.0)
1887         (extra-spacing-height . (-0.5 . 0.5))
1888         (Y-extent . ,grob::always-Y-extent-from-stencil)
1889         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1890         (meta . ((class . Item)
1891                  (interfaces . (semi-tie-interface))))))
1892
1893     (RepeatTieColumn
1894      . (
1895         (direction . ,ly:tie::calc-direction)
1896         (head-direction . ,ly:semi-tie-column::calc-head-direction)
1897         (positioning-done . ,ly:semi-tie-column::calc-positioning-done)
1898         (X-extent . #f)
1899         (Y-extent . #f)
1900         (meta . ((class . Item)
1901                  (interfaces . (semi-tie-column-interface))))))
1902
1903     (Rest
1904      . (
1905         (cross-staff . ,ly:rest::calc-cross-staff)
1906         (duration-log . ,stem::calc-duration-log)
1907         (minimum-distance . 0.25)
1908         (stencil . ,ly:rest::print)
1909         (X-extent . ,ly:rest::width)
1910         (Y-extent . ,(ly:make-unpure-pure-container ly:rest::height ly:rest::pure-height))
1911         (Y-offset . ,(ly:make-unpure-pure-container ly:rest::y-offset-callback))
1912         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
1913         (meta . ((class . Item)
1914                  (interfaces . (font-interface
1915                                 rest-interface
1916                                 rhythmic-grob-interface
1917                                 rhythmic-head-interface
1918                                 staff-symbol-referencer-interface))))))
1919
1920     (RestCollision
1921      . (
1922         (minimum-distance . 0.75)
1923         (positioning-done . ,ly:rest-collision::calc-positioning-done)
1924         (meta . ((class . Item)
1925                  (interfaces . (rest-collision-interface))))))
1926
1927
1928     (Script
1929      . (
1930         (add-stem-support . #t)
1931         (cross-staff . ,ly:script-interface::calc-cross-staff)
1932         (direction . ,ly:script-interface::calc-direction)
1933         (font-encoding . fetaMusic)
1934         (horizon-padding . 0.1) ; to avoid interleaving with accidentals
1935         (positioning-done . ,ly:script-interface::calc-positioning-done)
1936         (side-axis . ,Y)
1937
1938         ;; padding set in script definitions.
1939         (slur-padding . 0.2)
1940         (staff-padding . 0.25)
1941
1942         (stencil . ,ly:script-interface::print)
1943         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1944         (Y-extent . ,grob::always-Y-extent-from-stencil)
1945         (X-offset . ,script-interface::calc-x-offset)
1946         (Y-offset . ,side-position-interface::y-aligned-side)
1947         (meta . ((class . Item)
1948                  (interfaces . (font-interface
1949                                 outside-staff-interface
1950                                 script-interface
1951                                 side-position-interface))))))
1952
1953     (ScriptColumn
1954      . (
1955         (before-line-breaking . ,ly:script-column::before-line-breaking)
1956         (meta . ((class . Item)
1957                  (interfaces . (script-column-interface))))))
1958
1959     (ScriptRow
1960      . (
1961         (before-line-breaking . ,ly:script-column::row-before-line-breaking)
1962         (meta . ((class . Item)
1963                  (interfaces . (script-column-interface))))))
1964
1965     (Slur
1966      . (
1967         (avoid-slur . inside)
1968         (control-points . ,ly:slur::calc-control-points)
1969         (cross-staff . ,ly:slur::calc-cross-staff)
1970         (details . ,default-slur-details)
1971         (direction . ,ly:slur::calc-direction)
1972         (height-limit . 2.0)
1973         (line-thickness . 0.8)
1974         (minimum-length . 1.5)
1975         (ratio . 0.25)
1976         (spanner-id . "")
1977         (springs-and-rods . ,ly:spanner::set-spacing-rods)
1978         (stencil . ,ly:slur::print)
1979         (thickness . 1.2)
1980         (vertical-skylines . ,(ly:make-unpure-pure-container ly:slur::vertical-skylines ly:grob::pure-simple-vertical-skylines-from-extents))
1981         (Y-extent . ,slur::height)
1982         (meta . ((class . Spanner)
1983                  (interfaces . (outside-staff-interface
1984                                 slur-interface))))))
1985
1986     (SostenutoPedal
1987      . (
1988         (direction . ,RIGHT)
1989         (extra-spacing-width . (+inf.0 . -inf.0))
1990         (font-shape . italic)
1991         (padding . 0.0) ;; padding relative to SostenutoPedalLineSpanner
1992         (self-alignment-X . ,CENTER)
1993         (stencil . ,ly:text-interface::print)
1994         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
1995         (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
1996         (Y-extent . ,grob::always-Y-extent-from-stencil)
1997         (meta . ((class . Item)
1998                  (interfaces . (font-interface
1999                                 piano-pedal-script-interface
2000                                 self-alignment-interface
2001                                 text-interface))))))
2002
2003     (SostenutoPedalLineSpanner
2004      . (
2005         (axes . (,Y))
2006         (direction . ,DOWN)
2007         (minimum-space . 1.0)
2008         (outside-staff-priority . 1000)
2009         (padding . 1.2)
2010         (side-axis . ,Y)
2011         (staff-padding . 1.0)
2012         (vertical-skylines . ,grob::always-vertical-skylines-from-element-stencils)
2013         (X-extent . ,ly:axis-group-interface::width)
2014         (Y-extent . ,axis-group-interface::height)
2015         (Y-offset . ,side-position-interface::y-aligned-side)
2016         (meta . ((class . Spanner)
2017                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2018                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
2019                  (interfaces . (axis-group-interface
2020                                 outside-staff-interface
2021                                 piano-pedal-interface
2022                                 side-position-interface))))))
2023
2024     (SpacingSpanner
2025      . (
2026         (average-spacing-wishes . #t)
2027         (base-shortest-duration . ,(ly:make-moment 3 16))
2028         (common-shortest-duration . ,ly:spacing-spanner::calc-common-shortest-duration)
2029         (shortest-duration-space . 2.0)
2030         (spacing-increment . 1.2)
2031         (springs-and-rods . ,ly:spacing-spanner::set-springs)
2032         (meta . ((class . Spanner)
2033                  (interfaces . (spacing-options-interface
2034                                 spacing-spanner-interface))))))
2035
2036     (SpanBar
2037      . (
2038         (allow-span-bar . #t)
2039         (bar-extent . ,axis-group-interface::height)
2040         (before-line-breaking . ,ly:span-bar::before-line-breaking)
2041         (break-align-symbol . staff-bar)
2042         (cross-staff . #t)
2043         (glyph-name . ,ly:span-bar::calc-glyph-name)
2044         (layer . 0)
2045         (non-musical . #t)
2046         (stencil . ,ly:span-bar::print)
2047         (X-extent . ,ly:span-bar::width)
2048         (Y-extent . (+inf.0 . -inf.0))
2049         (meta . ((class . Item)
2050                  (interfaces . (bar-line-interface
2051                                 font-interface
2052                                 span-bar-interface))))))
2053
2054     (SpanBarStub
2055      . (
2056         (X-extent . ,(grob::inherit-parent-property
2057                       X 'X-extent))
2058         (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height)
2059         ;; we want this to be ignored, so empty, but the extra spacing height
2060         ;; should preserve the span bar's presence for horizontal spacing
2061         (Y-extent . ,pure-from-neighbor-interface::height-if-pure)
2062         (meta . ((class . Item)
2063                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2064                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
2065                  (interfaces . (pure-from-neighbor-interface))))))
2066
2067     (StaffGrouper
2068      . (
2069         (staff-staff-spacing . ((basic-distance . 9)
2070                                 (minimum-distance . 7)
2071                                 (padding . 1)
2072                                 (stretchability . 5)))
2073         (staffgroup-staff-spacing . ((basic-distance . 10.5)
2074                                      (minimum-distance . 8)
2075                                      (padding . 1)
2076                                      (stretchability . 9)))
2077         (meta . ((class . Spanner)
2078                  (interfaces . (staff-grouper-interface))))))
2079
2080     (StaffSpacing
2081      . (
2082         (non-musical . #t)
2083         (stem-spacing-correction . 0.4)
2084         (meta . ((class . Item)
2085                  (interfaces . (spacing-interface
2086                                 staff-spacing-interface))))))
2087
2088     (StaffSymbol
2089      . (
2090         (layer . 0)
2091         (ledger-line-thickness . (1.0 . 0.1))
2092         (line-count . 5)
2093         (stencil . ,ly:staff-symbol::print)
2094         (Y-extent . ,(ly:make-unpure-pure-container ly:staff-symbol::height))
2095         (meta . ((class . Spanner)
2096                  (interfaces . (staff-symbol-interface))))))
2097
2098     (StanzaNumber
2099      . (
2100         (direction . ,LEFT)
2101         (font-series . bold)
2102         (padding . 1.0)
2103         (side-axis . ,X)
2104         (stencil . ,ly:text-interface::print)
2105         (X-offset . ,ly:side-position-interface::x-aligned-side)
2106         (Y-extent . ,grob::always-Y-extent-from-stencil)
2107         (meta . ((class . Item)
2108                  (interfaces . (font-interface
2109                                 side-position-interface
2110                                 stanza-number-interface
2111                                 text-interface))))))
2112
2113     (Stem
2114      . (
2115         (beamlet-default-length . (1.1 . 1.1))
2116         (beamlet-max-length-proportion . (0.75 . 0.75))
2117         (cross-staff . ,ly:stem::calc-cross-staff)
2118         (default-direction . ,ly:stem::calc-default-direction)
2119         (details
2120          . (
2121             ;; 3.5 (or 3 measured from note head) is standard length
2122             ;; 32nd, 64th, 128th flagged stems should be longer
2123             (lengths . (3.5 3.5 3.5 4.25 5.0 6.0))
2124
2125             ;; FIXME.  3.5 yields too long beams (according to Ross and
2126             ;; looking at Baerenreiter examples) for a number of common
2127             ;; boundary cases.  Subtracting half a beam thickness fixes
2128             ;; this, but the bug may well be somewhere else.
2129
2130             ;; FIXME this should come from 'lengths
2131             (beamed-lengths . (3.26 3.5 3.6))
2132
2133             ;; The 'normal' minima
2134             (beamed-minimum-free-lengths . (1.83 1.5 1.25))
2135             ;;(beamed-minimum-free-lengths . (2.0 1.83 1.25))
2136
2137             ;; The 'extreme case' minima
2138             (beamed-extreme-minimum-free-lengths . (2.0 1.25))
2139
2140             ;; Stems in unnatural (forced) direction should be shortened by
2141             ;; one staff space, according to [Roush & Gourlay].
2142             ;; Flagged stems we shorten only half a staff space.
2143             (stem-shorten . (1.0 0.5))
2144
2145             ))
2146
2147         ;; We use the normal minima as minimum for the ideal lengths,
2148         ;; and the extreme minima as abolute minimum length.
2149
2150         (direction . ,ly:stem::calc-direction)
2151         (duration-log . ,stem::calc-duration-log)
2152         (length . ,(ly:make-unpure-pure-container ly:stem::calc-length ly:stem::pure-calc-length))
2153         (neutral-direction . ,DOWN)
2154         (positioning-done . ,ly:stem::calc-positioning-done)
2155         (stem-info . ,ly:stem::calc-stem-info)
2156         (stem-begin-position . ,(ly:make-unpure-pure-container ly:stem::calc-stem-begin-position ly:stem::pure-calc-stem-begin-position))
2157         (stencil . ,ly:stem::print)
2158         (thickness . 1.3)
2159         (X-extent . ,ly:stem::width)
2160         (X-offset . ,ly:stem::offset-callback)
2161         (Y-extent . ,(ly:make-unpure-pure-container ly:stem::height ly:stem::pure-height))
2162         (Y-offset . ,staff-symbol-referencer::callback)
2163         (meta . ((class . Item)
2164                  (interfaces . (stem-interface))))))
2165
2166     (StemStub
2167      . (
2168         (X-extent . ,stem-stub::width)
2169         (extra-spacing-height . ,stem-stub::extra-spacing-height)
2170         (Y-extent . ,(ly:make-unpure-pure-container #f stem-stub::pure-height))
2171         (meta . ((class . Item)
2172                  (interfaces . ())))))
2173
2174     (StemTremolo
2175      . (
2176         (beam-thickness . 0.48) ; staff-space
2177         (beam-width . ,ly:stem-tremolo::calc-width) ; staff-space
2178         (direction . ,ly:stem-tremolo::calc-direction)
2179         (slope . ,ly:stem-tremolo::calc-slope)
2180         (stencil . ,ly:stem-tremolo::print)
2181         (style . ,ly:stem-tremolo::calc-style)
2182         (X-extent . ,ly:stem-tremolo::width)
2183         (Y-extent . ,(grob::unpure-Y-extent-from-stencil ly:stem-tremolo::pure-height))
2184         (X-offset . ,(ly:make-simple-closure
2185                       `(,+
2186                         ,(ly:make-simple-closure
2187                           (list ly:self-alignment-interface::centered-on-x-parent))
2188                         ,(ly:make-simple-closure
2189                           (list ly:self-alignment-interface::x-aligned-on-self)))))
2190         (Y-offset . ,(ly:make-unpure-pure-container ly:stem-tremolo::calc-y-offset ly:stem-tremolo::pure-calc-y-offset))
2191         (meta . ((class . Item)
2192                  (interfaces . (self-alignment-interface
2193                                 stem-tremolo-interface))))))
2194
2195     (StringNumber
2196      . (
2197         (avoid-slur . around)
2198         (cross-staff . ,script-or-side-position-cross-staff)
2199         (font-encoding . fetaText)
2200         (font-size . -5)                ; don't overlap when next to heads.
2201         (padding . 0.5)
2202         (script-priority . 100)
2203         (self-alignment-X . ,CENTER)
2204         (self-alignment-Y . ,CENTER)
2205         (staff-padding . 0.5)
2206         (stencil . ,print-circled-text-callback)
2207         (text . ,string-number::calc-text)
2208         (Y-extent . ,grob::always-Y-extent-from-stencil)
2209         (meta . ((class . Item)
2210                  (interfaces . (font-interface
2211                                 self-alignment-interface
2212                                 outside-staff-interface
2213                                 side-position-interface
2214                                 string-number-interface
2215                                 text-interface
2216                                 text-script-interface))))))
2217
2218     (StrokeFinger
2219      . (
2220         (digit-names . #("p" "i" "m" "a" "x"))
2221         (font-shape . italic)
2222         (font-size . -4)                ; don't overlap when next to heads.
2223         (padding . 0.5)
2224         (script-priority . 100)
2225         (self-alignment-X . ,CENTER)
2226         (self-alignment-Y . ,CENTER)
2227         (staff-padding . 0.5)
2228         (stencil . ,ly:text-interface::print)
2229         (text . ,stroke-finger::calc-text)
2230         (Y-extent . ,grob::always-Y-extent-from-stencil)
2231         (meta . ((class . Item)
2232                  (interfaces . (font-interface
2233                                 outside-staff-interface
2234                                 self-alignment-interface
2235                                 side-position-interface
2236                                 stroke-finger-interface
2237                                 text-interface
2238                                 text-script-interface))))))
2239
2240     (SustainPedal
2241      . (
2242         (extra-spacing-width . (+inf.0 . -inf.0))
2243         (padding . 0.0)  ;; padding relative to SustainPedalLineSpanner
2244         (self-alignment-X . ,CENTER)
2245         (stencil . ,ly:sustain-pedal::print)
2246         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
2247         (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
2248         (Y-extent . ,grob::always-Y-extent-from-stencil)
2249         (meta . ((class . Item)
2250                  (interfaces . (font-interface
2251                                 piano-pedal-interface
2252                                 piano-pedal-script-interface
2253                                 self-alignment-interface
2254                                 text-interface))))))
2255
2256     (SustainPedalLineSpanner
2257      . (
2258         (axes . (,Y))
2259         (direction . ,DOWN)
2260         (minimum-space . 1.0)
2261         (outside-staff-priority . 1000)
2262         (padding . 1.2)
2263         (side-axis . ,Y)
2264         (staff-padding . 1.2)
2265         (vertical-skylines . ,grob::always-vertical-skylines-from-element-stencils)
2266         (X-extent . ,ly:axis-group-interface::width)
2267         (Y-extent . ,axis-group-interface::height)
2268         (Y-offset . ,side-position-interface::y-aligned-side)
2269         (meta . ((class . Spanner)
2270                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2271                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
2272                  (interfaces . (axis-group-interface
2273                                 outside-staff-interface
2274                                 piano-pedal-interface
2275                                 side-position-interface))))))
2276
2277     (System
2278      . (
2279         (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights)
2280         (axes . (,X ,Y))
2281         (outside-staff-placement-directive . left-to-right-polite)
2282         (skyline-horizontal-padding . 1.0)
2283         (vertical-skylines . ,ly:axis-group-interface::calc-skylines)
2284         (X-extent . ,ly:axis-group-interface::width)
2285         (Y-extent . ,(ly:make-unpure-pure-container ly:system::height ly:system::calc-pure-height))
2286         (meta . ((class . System)
2287                  (object-callbacks . ((footnotes-before-line-breaking . ,ly:system::footnotes-before-line-breaking)
2288                                       (footnotes-after-line-breaking . ,ly:system::footnotes-after-line-breaking)
2289                                       (pure-relevant-grobs . ,ly:system::calc-pure-relevant-grobs)
2290                                       (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2291                                       (vertical-skyline-elements . ,ly:system::vertical-skyline-elements)
2292                                       (vertical-alignment . ,ly:system::get-vertical-alignment)))
2293                  (interfaces . (axis-group-interface
2294                                 system-interface
2295                                 outside-staff-axis-group-interface))))))
2296
2297     (SystemStartBar
2298      . (
2299         (collapse-height . 5.0)
2300         (direction . ,LEFT)
2301
2302         ;; ugh--hardcoded.
2303         (padding . -0.1)  ;; bar must cover rounded ending of staff line.
2304         (stencil . ,ly:system-start-delimiter::print)
2305         (style . bar-line)
2306         (thickness . 1.6)
2307         (X-offset . ,ly:side-position-interface::x-aligned-side)
2308         (meta . ((class . Spanner)
2309                  (interfaces . (side-position-interface
2310                                 system-start-delimiter-interface))))))
2311
2312     (SystemStartBrace
2313      . (
2314         (collapse-height . 5.0)
2315         (direction . ,LEFT)
2316         (font-encoding . fetaBraces)
2317         (padding . 0.3)
2318         (stencil . ,ly:system-start-delimiter::print)
2319         (style . brace)
2320         (X-offset . ,ly:side-position-interface::x-aligned-side)
2321         (meta . ((class . Spanner)
2322                  (interfaces . (font-interface
2323                                 side-position-interface
2324                                 system-start-delimiter-interface))))))
2325
2326     (SystemStartBracket
2327      . (
2328         (collapse-height . 5.0)
2329         (direction . ,LEFT)
2330         (padding . 0.8)
2331         (stencil . ,ly:system-start-delimiter::print)
2332         (style . bracket)
2333         (thickness . 0.45)
2334         (X-offset . ,ly:side-position-interface::x-aligned-side)
2335         (meta . ((class . Spanner)
2336                  (interfaces . (font-interface
2337                                 side-position-interface
2338                                 system-start-delimiter-interface))))))
2339
2340     (SystemStartSquare
2341      . (
2342         (direction . ,LEFT)
2343         (stencil . ,ly:system-start-delimiter::print)
2344         (style . line-bracket)
2345         (thickness . 1.0)
2346         (X-offset . ,ly:side-position-interface::x-aligned-side)
2347         (meta . ((class . Spanner)
2348                  (interfaces . (font-interface
2349                                 side-position-interface
2350                                 system-start-delimiter-interface))))))
2351
2352
2353     (TabNoteHead
2354      . (
2355         (details . ((cautionary-properties . ((angularity . 0.4)
2356                                               (half-thickness . 0.075)
2357                                               (padding . 0)
2358                                               (procedure . ,parenthesize-stencil)
2359                                               (width . 0.25)))
2360                     (head-offset . 3/5)
2361                     (harmonic-properties . ((angularity . 2)
2362                                             (half-thickness . 0.075)
2363                                             (padding . 0)
2364                                             (procedure . ,parenthesize-stencil)
2365                                             (width . 0.25)))
2366                     (repeat-tied-properties . ((note-head-visible . #t)
2367                                                (parenthesize . #t)))
2368                     (tied-properties . ((break-visibility . ,begin-of-line-visible)
2369                                         (parenthesize . #t)))))
2370
2371         (direction . ,CENTER)
2372         (duration-log . ,note-head::calc-duration-log)
2373         (font-series . bold)
2374         (font-size . -2)
2375         (stem-attachment . (0.0 . 1.35))
2376         (stencil . ,tab-note-head::print)
2377         (whiteout . #t)
2378         (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
2379         (Y-offset . ,staff-symbol-referencer::callback)
2380         (Y-extent . ,grob::always-Y-extent-from-stencil)
2381         (meta . ((class . Item)
2382                  (interfaces  . (font-interface
2383                                  note-head-interface
2384                                  rhythmic-grob-interface
2385                                  rhythmic-head-interface
2386                                  staff-symbol-referencer-interface
2387                                  tab-note-head-interface
2388                                  text-interface))))))
2389
2390     (TextScript
2391      . (
2392         (avoid-slur . around)
2393         (cross-staff . ,script-or-side-position-cross-staff)
2394         (direction . ,DOWN)
2395         (extra-spacing-width . (+inf.0 . -inf.0))
2396         (outside-staff-horizontal-padding . 0.2)
2397         (outside-staff-priority . 450)
2398
2399         ;; sync with Fingering ?
2400         (padding . 0.3)
2401
2402         (script-priority . 200)
2403         (side-axis . ,Y)
2404         (slur-padding . 0.5)
2405         (staff-padding . 0.5)
2406         (stencil . ,ly:text-interface::print)
2407         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
2408         ;; todo: add X self alignment?
2409         (Y-extent . ,grob::always-Y-extent-from-stencil)
2410         (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
2411         (Y-offset . ,side-position-interface::y-aligned-side)
2412         (meta . ((class . Item)
2413                  (interfaces . (font-interface
2414                                 instrument-specific-markup-interface
2415                                 outside-staff-interface
2416                                 self-alignment-interface
2417                                 side-position-interface
2418                                 text-interface
2419                                 text-script-interface))))))
2420
2421     (TextSpanner
2422      . (
2423         (bound-details . ((left . ((Y . 0)
2424                                    (padding . 0.25)
2425                                    (attach-dir . ,LEFT)
2426                                    ))
2427                           (left-broken . ((attach-dir . ,RIGHT)))
2428                           (right . ((Y . 0)
2429                                     (padding . 0.25)
2430                                     ))
2431                           ))
2432         (dash-fraction . 0.2)
2433         (dash-period . 3.0)
2434         (direction . ,UP)
2435         (font-shape . italic)
2436         (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
2437         (outside-staff-priority . 350)
2438         (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
2439         (side-axis . ,Y)
2440         (staff-padding . 0.8)
2441         (stencil . ,ly:line-spanner::print)
2442         (style . dashed-line)
2443         (Y-offset . ,side-position-interface::y-aligned-side)
2444
2445         (meta . ((class . Spanner)
2446                  (interfaces . (font-interface
2447                                 line-interface
2448                                 line-spanner-interface
2449                                 outside-staff-interface
2450                                 side-position-interface))))))
2451
2452     (Tie
2453      . (
2454         (avoid-slur . inside)
2455         (control-points . ,ly:tie::calc-control-points)
2456         (details . (
2457                     ;; for a full list, see tie-details.cc
2458                     (ratio . 0.333)
2459                     (center-staff-line-clearance . 0.6)
2460                     (tip-staff-line-clearance . 0.45)
2461                     (note-head-gap . 0.2)
2462                     (stem-gap . 0.35)
2463                     (height-limit . 1.0)
2464                     (horizontal-distance-penalty-factor . 10)
2465                     (same-dir-as-stem-penalty . 8)
2466                     (min-length-penalty-factor . 26)
2467                     (tie-tie-collision-distance . 0.45)
2468                     (tie-tie-collision-penalty . 25.0)
2469                     (intra-space-threshold . 1.25)
2470                     (outer-tie-vertical-distance-symmetry-penalty-factor . 10)
2471                     (outer-tie-length-symmetry-penalty-factor . 10)
2472                     (vertical-distance-penalty-factor . 7)
2473                     (outer-tie-vertical-gap . 0.25)
2474                     (multi-tie-region-size . 3)
2475                     (single-tie-region-size . 4)
2476                     (between-length-limit . 1.0)))
2477
2478         (direction . ,ly:tie::calc-direction)
2479         (font-size . -6)
2480         (line-thickness . 0.8)
2481         (neutral-direction . ,UP)
2482         (springs-and-rods . ,ly:spanner::set-spacing-rods)
2483         (stencil . ,ly:tie::print)
2484         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
2485         (thickness . 1.2)
2486         (meta . ((class . Spanner)
2487                  (interfaces . (tie-interface))))))
2488
2489     (TieColumn
2490      . (
2491         (before-line-breaking . ,ly:tie-column::before-line-breaking)
2492         (positioning-done . ,ly:tie-column::calc-positioning-done)
2493         (X-extent . #f)
2494         (Y-extent . #f)
2495         (meta . ((class . Spanner)
2496                  (interfaces . (tie-column-interface))))))
2497
2498     (TimeSignature
2499      . (
2500         (avoid-slur . inside)
2501         (break-align-anchor
2502          . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
2503         (break-align-symbol . time-signature)
2504         (break-align-anchor-alignment . ,LEFT)
2505         (break-visibility . ,all-visible)
2506         (extra-spacing-height . ,pure-from-neighbor-interface::extra-spacing-height-including-staff)
2507         (extra-spacing-width . (0.0 . 0.8))
2508         (non-musical . #t)
2509         (space-alist . (
2510                         (cue-clef . (extra-space . 1.5))
2511                         (first-note . (fixed-space . 2.0))
2512                         (right-edge . (extra-space . 0.5))
2513                         (staff-bar . (extra-space . 1.0))))
2514         (stencil . ,ly:time-signature::print)
2515         (Y-extent . ,grob::always-Y-extent-from-stencil)
2516         (style . C)
2517         (meta . ((class . Item)
2518                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2519                                       (pure-relevant-grobs . ,ly:pure-from-neighbor-interface::calc-pure-relevant-grobs)))
2520                  (interfaces . (break-aligned-interface
2521                                 font-interface
2522                                 pure-from-neighbor-interface
2523                                 time-signature-interface))))))
2524
2525     (TrillPitchAccidental
2526      . (
2527         (direction . ,LEFT)
2528         (font-size . -4)
2529         (glyph-name-alist . ,standard-alteration-glyph-name-alist)
2530         (padding . 0.2)
2531         (side-axis . ,X)
2532         (stencil . ,ly:accidental-interface::print)
2533         (X-offset . ,ly:side-position-interface::x-aligned-side)
2534         (Y-extent . ,accidental-interface::height)
2535         (meta . ((class . Item)
2536                  (interfaces . (accidental-interface
2537                                 font-interface
2538                                 inline-accidental-interface
2539                                 side-position-interface
2540                                 trill-pitch-accidental-interface))))))
2541
2542     (TrillPitchGroup
2543      . (
2544         (axes . (,X))
2545         (direction . ,RIGHT)
2546         (font-size . -4)
2547         ;; minimum shift to the right, in case the parent note has no stem
2548         (minimum-space . 2.5)
2549         (horizon-padding . 0.1) ; to avoid interleaving with augmentation dots
2550         (padding . 0.3)
2551         (side-axis . ,X)
2552         (stencil . ,parenthesize-elements)
2553         (stencils . ,parentheses-item::calc-parenthesis-stencils)
2554         (X-offset . ,ly:side-position-interface::x-aligned-side)
2555         (Y-extent . ,grob::always-Y-extent-from-stencil)
2556         (meta . ((class . Item)
2557                  (interfaces . (axis-group-interface
2558                                 font-interface
2559                                 note-head-interface
2560                                 parentheses-interface
2561                                 side-position-interface))))))
2562
2563     (TrillPitchHead
2564      . (
2565         (duration-log . 2)
2566         (font-size . -4)
2567         (stencil . ,ly:note-head::print)
2568         (Y-offset . ,staff-symbol-referencer::callback)
2569         (Y-extent . ,grob::always-Y-extent-from-stencil)
2570         (meta . ((class . Item)
2571                  (interfaces . (font-interface
2572                                 ledgered-interface
2573                                 pitched-trill-interface
2574                                 rhythmic-head-interface
2575                                 staff-symbol-referencer-interface))))))
2576
2577     (TrillSpanner
2578      . (
2579         (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
2580         (bound-details . ((left . ((text . ,(make-musicglyph-markup "scripts.trill"))
2581                                    (Y . 0)
2582                                    (stencil-offset . (-0.5 . -1))
2583                                    (padding . 0.5)
2584                                    (attach-dir . ,CENTER)
2585                                    ))
2586                           (left-broken . ((end-on-note . #t)))
2587                           (right . ((Y . 0)))
2588                           ))
2589         (direction . ,UP)
2590         (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
2591         (outside-staff-priority . 50)
2592         (padding . 0.5)
2593         (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
2594         (side-axis . ,Y)
2595         (staff-padding . 1.0)
2596         (stencil . ,ly:line-spanner::print)
2597         (style . trill)
2598         (Y-offset . ,side-position-interface::y-aligned-side)
2599         (meta . ((class . Spanner)
2600                  (interfaces . (font-interface
2601                                 line-interface
2602                                 line-spanner-interface
2603                                 outside-staff-interface
2604                                 side-position-interface
2605                                 trill-spanner-interface))))))
2606
2607     (TupletBracket
2608      . (
2609         (avoid-scripts . #t)
2610         (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors)
2611         (cross-staff . ,ly:tuplet-bracket::calc-cross-staff)
2612         (direction  . ,ly:tuplet-bracket::calc-direction)
2613         (edge-height . (0.7 . 0.7))
2614         (full-length-to-extent . #t)
2615         (padding . 1.1)
2616         (positions . ,ly:tuplet-bracket::calc-positions)
2617         (shorten-pair . (-0.2 . -0.2))
2618         (staff-padding . 0.25)
2619         (stencil . ,ly:tuplet-bracket::print)
2620         (thickness . 1.6)
2621         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
2622         (X-positions . ,ly:tuplet-bracket::calc-x-positions)
2623
2624         (meta . ((class . Spanner)
2625                  (interfaces . (line-interface
2626                                 outside-staff-interface
2627                                 tuplet-bracket-interface))))))
2628
2629     (TupletNumber
2630      . (
2631         (avoid-slur . inside)
2632         (cross-staff . ,ly:tuplet-number::calc-cross-staff)
2633         (direction . ,tuplet-number::calc-direction)
2634         (font-shape . italic)
2635         (font-size . -2)
2636         (stencil . ,ly:tuplet-number::print)
2637         (text . ,tuplet-number::calc-denominator-text)
2638         (X-offset . ,ly:tuplet-number::calc-x-offset)
2639         (Y-offset . ,ly:tuplet-number::calc-y-offset)
2640         (meta . ((class . Spanner)
2641                  (interfaces . (font-interface
2642                                 outside-staff-interface
2643                                 text-interface
2644                                 tuplet-number-interface))))))
2645
2646
2647     (UnaCordaPedal
2648      . (
2649         (direction . ,RIGHT)
2650         (extra-spacing-width . (+inf.0 . -inf.0))
2651         (font-shape . italic)
2652         (padding . 0.0)  ;; padding relative to UnaCordaPedalLineSpanner
2653         (self-alignment-X . ,CENTER)
2654         (stencil . ,ly:text-interface::print)
2655         (vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
2656         (Y-extent . ,grob::always-Y-extent-from-stencil)
2657         (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
2658         (meta . ((class . Item)
2659                  (interfaces . (font-interface
2660                                 piano-pedal-script-interface
2661                                 self-alignment-interface
2662                                 text-interface))))))
2663
2664     (UnaCordaPedalLineSpanner
2665      . (
2666         (axes . (,Y))
2667         (direction . ,DOWN)
2668         (minimum-space . 1.0)
2669         (outside-staff-priority . 1000)
2670         (padding . 1.2)
2671         (side-axis . ,Y)
2672         (staff-padding . 1.2)
2673         (vertical-skylines . ,grob::always-vertical-skylines-from-element-stencils)
2674         (X-extent . ,ly:axis-group-interface::width)
2675         (Y-extent . ,axis-group-interface::height)
2676         (Y-offset . ,side-position-interface::y-aligned-side)
2677         (meta . ((class . Spanner)
2678                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2679                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
2680                  (interfaces . (axis-group-interface
2681                                 outside-staff-interface
2682                                 piano-pedal-interface
2683                                 side-position-interface))))))
2684
2685
2686     (VaticanaLigature
2687      . (
2688         (flexa-width . 2.0)
2689         (stencil . ,ly:vaticana-ligature::print)
2690         (thickness . 0.6)
2691         (meta . ((class . Spanner)
2692                  (interfaces . (font-interface
2693                                 vaticana-ligature-interface))))))
2694
2695     (VerticalAlignment
2696      . (
2697         (axes . (,Y))
2698         (positioning-done . ,ly:align-interface::align-to-ideal-distances)
2699         (stacking-dir . -1)
2700         (vertical-skylines . ,ly:axis-group-interface::combine-skylines)
2701         (X-extent . ,ly:axis-group-interface::width)
2702         (Y-extent . ,axis-group-interface::height)
2703         (meta . ((class . Spanner)
2704                  (object-callbacks . ((Y-common . ,ly:axis-group-interface::calc-y-common)
2705                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)
2706                                       (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)))
2707                  (interfaces . (align-interface
2708                                 axis-group-interface))))))
2709
2710     (VerticalAxisGroup
2711      . (
2712         (adjacent-pure-heights . ,ly:axis-group-interface::adjacent-pure-heights)
2713         (axes . (,Y))
2714         (default-staff-staff-spacing . ((basic-distance . 9)
2715                                         (minimum-distance . 8)
2716                                         (padding . 1)))
2717         (nonstaff-unrelatedstaff-spacing . ((padding . 0.5)))
2718         (outside-staff-placement-directive . left-to-right-polite)
2719         (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))
2720         (stencil . ,ly:axis-group-interface::print)
2721         (skyline-horizontal-padding . 0.1)
2722         (vertical-skylines . ,ly:hara-kiri-group-spanner::calc-skylines)
2723         (X-extent . ,ly:axis-group-interface::width)
2724         (Y-extent . ,(ly:make-unpure-pure-container ly:hara-kiri-group-spanner::y-extent ly:hara-kiri-group-spanner::pure-height))
2725         (Y-offset . ,ly:hara-kiri-group-spanner::force-hara-kiri-callback)
2726         (meta . ((class . Spanner)
2727                  (object-callbacks . (
2728                                       (X-common . ,ly:axis-group-interface::calc-x-common)
2729                                       (pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2730                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
2731
2732                  (interfaces . (axis-group-interface
2733                                 hara-kiri-group-spanner-interface
2734                                 outside-staff-axis-group-interface))))))
2735
2736     (VoiceFollower
2737      . (
2738         (after-line-breaking . ,ly:spanner::kill-zero-spanned-time)
2739         (bound-details . ((right . ((attach-dir .  ,CENTER)
2740                                     (padding . 1.5)
2741                                     ))
2742                           (left . ((attach-dir .  ,CENTER)
2743                                    (padding . 1.5)
2744                                    ))
2745                           ))
2746         (cross-staff . #t)
2747         (gap . 0.5)
2748         (left-bound-info . ,ly:line-spanner::calc-left-bound-info)
2749         (non-musical . #t)
2750         (right-bound-info . ,ly:line-spanner::calc-right-bound-info)
2751         (stencil . ,ly:line-spanner::print)
2752         (style . line)
2753         (X-extent . #f)
2754         (Y-extent . #f)
2755         (meta . ((class . Spanner)
2756                  (interfaces . (line-interface
2757                                 line-spanner-interface))))))
2758
2759     (VoltaBracket
2760      . (
2761         (baseline-skip . 1.7)
2762         (direction . ,UP)
2763         (edge-height . (2.0 . 2.0)) ;; staff-space;
2764         (font-encoding . fetaText)
2765         (font-size . -4)
2766         (shorten-pair . ,ly:volta-bracket::calc-shorten-pair)
2767         (stencil . ,ly:volta-bracket-interface::print)
2768         (thickness . 1.6) ;; line-thickness
2769         (word-space . 0.6)
2770         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
2771         (Y-extent . ,(grob::unpure-Y-extent-from-stencil volta-bracket-interface::pure-height))
2772         (meta . ((class . Spanner)
2773                  (interfaces . (font-interface
2774                                 horizontal-bracket-interface
2775                                 line-interface
2776                                 side-position-interface
2777                                 text-interface
2778                                 volta-bracket-interface
2779                                 volta-interface))))))
2780
2781     (VoltaBracketSpanner
2782      . (
2783         (after-line-breaking . ,ly:side-position-interface::move-to-extremal-staff)
2784         (axes . (,Y))
2785         (direction . ,UP)
2786         (no-alignment . #t)
2787         (outside-staff-priority . 600)
2788         (padding . 1)
2789         (side-axis . ,Y)
2790         (vertical-skylines . ,grob::always-vertical-skylines-from-element-stencils)
2791         (X-extent . ,ly:axis-group-interface::width)
2792         (Y-extent . ,axis-group-interface::height)
2793         (Y-offset . ,side-position-interface::y-aligned-side)
2794         (meta . ((class . Spanner)
2795                  (object-callbacks . ((pure-Y-common . ,ly:axis-group-interface::calc-pure-y-common)
2796                                       (pure-relevant-grobs . ,ly:axis-group-interface::calc-pure-relevant-grobs)))
2797                  (interfaces . (axis-group-interface
2798                                 outside-staff-interface
2799                                 side-position-interface
2800                                 volta-interface))))))
2801
2802     ))
2803
2804 (define (completize-grob-entry x)
2805   "Transplant assoc key into 'name entry of 'meta of X.  Set interfaces for Item, Spanner etc.
2806 "
2807   ;;  (display (car x))
2808   ;;  (newline)
2809   (let* ((name-sym  (car x))
2810          (grob-entry (cdr x))
2811          (meta-entry (assoc-get 'meta grob-entry))
2812          (class (assoc-get 'class meta-entry))
2813          (ifaces-entry
2814           (assoc-get 'interfaces meta-entry)))
2815
2816     (cond
2817      ((eq? 'Item class)
2818       (set! ifaces-entry (cons 'item-interface ifaces-entry)))
2819      ((eq? 'Spanner class)
2820       (set! ifaces-entry (cons 'spanner-interface ifaces-entry)))
2821      ((eq? 'Paper_column class)
2822       (set! ifaces-entry (cons 'item-interface
2823                                (cons 'paper-column-interface ifaces-entry))))
2824      ((eq? 'System class)
2825       (set! ifaces-entry (cons 'system-interface
2826                                (cons 'spanner-interface ifaces-entry))))
2827      (else
2828       (ly:warning "Unknown class ~a" class)))
2829
2830     (set! ifaces-entry (uniq-list (sort ifaces-entry symbol<?)))
2831     (set! ifaces-entry (cons 'grob-interface ifaces-entry))
2832
2833     (set! meta-entry (assoc-set! meta-entry 'name name-sym))
2834     (set! meta-entry (assoc-set! meta-entry 'interfaces
2835                                  ifaces-entry))
2836     (set! grob-entry (assoc-set! grob-entry 'meta meta-entry))
2837     (cons name-sym grob-entry)))
2838
2839 (set! all-grob-descriptions (map completize-grob-entry all-grob-descriptions))
2840
2841 ;;  (display (map pair? all-grob-descriptions))
2842
2843 ;; make sure that \property Foo.Bar =\turnOff doesn't complain
2844
2845 (for-each (lambda (x)
2846             ;; (display (car x)) (newline)
2847
2848             (set-object-property! (car x) 'translation-type? list?)
2849             (set-object-property! (car x) 'is-grob? #t))
2850           all-grob-descriptions)
2851
2852 (set! all-grob-descriptions (sort all-grob-descriptions alist<?))