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