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