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