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