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