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