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