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