]> git.donarmstrong.com Git - lilypond.git/blob - scm/define-grobs.scm
*** empty log message ***
[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         (spacing-procedure . ,Multi_measure_rest::set_spacing_rods)
805         (print-function . ,Multi_measure_rest::print)
806         (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
807         (staff-position . 0)
808         (expand-limit . 10)
809         (thick-thickness . 6.6)
810         (hair-thickness . 2.0)
811         (padding . 1)
812         (meta . ((class . Spanner)
813                  (interfaces . (multi-measure-rest-interface
814                                 multi-measure-interface
815                                 rest-interface
816                                 font-interface
817                                 staff-symbol-referencer-interface))))))
818
819     (MultiMeasureRestNumber
820      . (
821         (print-function . ,Text_interface::print)
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     (MultiMeasureRestText
837      . (
838         (print-function . ,Text_interface::print)
839         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self
840                                ,Self_alignment_interface::centered_on_other_axis_parent))
841         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
842         (self-alignment-X . 0)
843         (direction . 1)
844         (padding . 0.2)
845         (staff-padding . 0.25)
846         (meta . ((class . Spanner)
847                  (interfaces . (side-position-interface
848                                 multi-measure-interface
849                                 self-alignment-interface
850                                 font-interface
851                                 text-interface))))))
852
853     (NoteCollision
854      . (
855         (axes . (0 1))
856         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
857         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
858         (meta . ((class . Item)
859                  (interfaces . (note-collision-interface
860                                 axis-group-interface))))))
861
862     (NoteColumn
863      . (
864         (axes . (0 1))
865         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
866         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
867         (meta . ((class . Item)
868                  (interfaces . (axis-group-interface
869                                 note-column-interface))))))
870
871     (NoteHead
872      . (
873         (print-function . ,Note_head::print)
874         (ligature-primitive-callback . ,Note_head::print)
875         (glyph-name-procedure . ,find-notehead-symbol)
876         (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
877         (stem-attachment-function . ,note-head-style->attachment-coordinates)
878         (meta . ((class . Item)
879                  (interfaces . (rhythmic-grob-interface
880                                 rhythmic-head-interface
881                                 font-interface
882                                 note-head-interface
883                                 ledgered-interface
884                                 staff-symbol-referencer-interface))))))
885
886     (NoteSpacing
887      . (
888         (stem-spacing-correction . 0.5)
889         (same-direction-correction . 0.25)
890         ;; Changed this from 0.75.
891         ;; If you ever change this back, please document! --hwn
892         (knee-spacing-correction . 1.0)
893
894         (meta . ((class . Item)
895                  (interfaces . (spacing-interface
896                                 note-spacing-interface))))))
897
898     (NoteName
899      . (
900         (print-function . ,Text_interface::print)
901         (meta . ((class . Item)
902                  (interfaces . (note-name-interface
903                                 text-interface
904                                 font-interface))))))
905
906     (OctavateEight
907      . (
908         (self-alignment-X . 0)
909         (break-visibility . ,begin-of-line-visible)
910         (X-offset-callbacks . (,Self_alignment_interface::centered_on_parent ,Self_alignment_interface::aligned_on_self))
911         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
912         (print-function . ,Text_interface::print)
913
914         ;; no Y dimensions, because of lyrics under tenor clef.
915         (Y-extent . (0 . 0))
916         (font-shape . italic)
917         (padding . 0.6)
918         (staff-padding . 0.2)
919         (font-size . -4)
920         (meta . ((class . Item)
921                  (interfaces . (text-interface
922                                 self-alignment-interface
923                                 side-position-interface
924                                 font-interface))))))
925
926     (OttavaBracket
927      . (
928         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
929         (print-function . ,Ottava_bracket::print)
930         (font-shape . italic)
931         (shorten-pair . (0.0 . -0.6))
932         (staff-padding . 1.0)
933         (padding . 0.5)
934         (minimum-length . 1.0)
935         (dash-fraction . 0.3)
936         (edge-height . (0 . 1.2))
937         (direction . 1)
938         (meta . ((class . Spanner)
939                  (interfaces . (ottava-bracket-interface
940                                 line-interface
941                                 side-position-interface
942                                 font-interface
943                                 text-interface))))))
944
945     (PaperColumn
946      . (
947         (axes . (0))
948         (before-line-breaking-callback . ,Paper_column::before_line_breaking)
949         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
950
951         ;; debugging
952 ;;                      (print-function . ,Paper_column::print) (font-size . -6) (font-name . "sans") (Y-extent-callback . #f)
953         (meta . ((class . Paper_column)
954                  (interfaces . (paper-column-interface
955                                 axis-group-interface
956                                 spaceable-grob-interface))))))
957
958     (PhrasingSlur
959      . ((slur-details . ,default-slur-details)
960         (print-function . ,Slur::print)
961         (thickness . 1.1)
962         (spacing-procedure . ,Spanner::set_spacing_rods)
963         (minimum-length . 1.5)
964         (after-line-breaking-callback . ,Slur::after_line_breaking)
965         (Y-extent-callback . ,Slur::height)
966         (height-limit . 2.0)
967         (ratio . 0.333)
968         (meta . ((class . Spanner)
969                  (interfaces . (slur-interface))))))
970
971     (NonMusicalPaperColumn
972      . (
973         (axes . (0))
974         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
975         (before-line-breaking-callback . ,Paper_column::before_line_breaking)
976         (breakable . #t)
977
978         ;; debugging stuff: print column number.
979 ;;              (print-function . ,Paper_column::print) (font-size . -6) (font-name . "sans")   (Y-extent-callback . #f)
980
981         (meta . ((class . Paper_column)
982                  (interfaces . (paper-column-interface
983                                 axis-group-interface
984                                 spaceable-grob-interface))))))
985
986     (PercentRepeat
987      . (
988         (spacing-procedure . ,Multi_measure_rest::set_spacing_rods)
989         (print-function . ,Multi_measure_rest::percent)
990         (slope . 1.0)
991         (thickness . 0.48)
992         (font-encoding . fetaMusic)
993         (meta . ((class . Spanner)
994                  (interfaces . (multi-measure-rest-interface
995                                 font-interface
996                                 percent-repeat-interface))))))
997     (PercentRepeatCounter
998      . ((print-function . ,Text_interface::print)
999         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self
1000                                ,Self_alignment_interface::centered_on_other_axis_parent))
1001         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1002         (self-alignment-X . 0)
1003         (direction . 1)
1004         (padding . 0.2)
1005         (staff-padding . 0.25)
1006         (font-size . -2) 
1007         (font-encoding . fetaNumber)
1008         (meta . ((class . Spanner)
1009                  (interfaces . (side-position-interface
1010                                 self-alignment-interface
1011                                 percent-repeat-interface
1012                                 font-interface
1013                                 text-interface))))))
1014
1015     ;; an example of a text spanner
1016     (PianoPedalBracket
1017      . (
1018         (print-function . ,Piano_pedal_bracket::print)
1019         (style . line)
1020         (bound-padding . 1.0)
1021         (direction . -1)
1022         (bracket-flare . (0.5 . 0.5))
1023         (edge-height . (1.0 . 1.0))
1024         (shorten-pair . (0.0 . 0.0))
1025         (thickness .  1.0)
1026         (meta . ((class . Spanner)
1027                  (interfaces . (line-interface
1028                                 piano-pedal-interface
1029                                 piano-pedal-bracket-interface))))))
1030
1031     (RehearsalMark
1032      . (
1033         (print-function . ,Text_interface::print)
1034         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
1035         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1036         (after-line-breaking-callback . ,shift-right-at-line-begin)
1037         (self-alignment-X . 0)
1038         (direction . 1)
1039         (breakable . #t)
1040         (font-size . 2)
1041         (baseline-skip . 2)
1042         (break-visibility . ,end-of-line-invisible)
1043         (padding . 0.8)
1044         (meta . ((class . Item)
1045                  (interfaces . (text-interface
1046                                 side-position-interface
1047                                 font-interface
1048                                 mark-interface
1049                                 self-alignment-interface))))))
1050
1051     (RemoveEmptyVerticalGroup
1052      . (
1053         (Y-offset-callbacks . (,Hara_kiri_group_spanner::force_hara_kiri_callback))
1054         (Y-extent-callback . ,Hara_kiri_group_spanner::y_extent)
1055         (axes . (1))
1056         (meta . ((class . Spanner)
1057                  (interfaces . (axis-group-interface
1058                                 vertically-spaceable-interface
1059                                 hara-kiri-group-interface
1060                                 spanner-interface))))))
1061
1062     (RepeatSlash
1063      . (
1064         (print-function . ,Percent_repeat_item_interface::beat_slash)
1065         (thickness . 0.48)
1066         (slope . 1.7)
1067         (meta . ((class . Item)
1068                  (interfaces . (percent-repeat-interface))))))
1069     (Rest
1070      . (
1071         (after-line-breaking-callback . ,Rest::after_line_breaking)
1072         (X-extent-callback . ,Rest::extent_callback)
1073         (Y-extent-callback . ,Rest::extent_callback)
1074         (print-function . ,Rest::print)
1075         (Y-offset-callbacks . (,Staff_symbol_referencer::callback
1076                                ,Rest::polyphonic_offset_callback))
1077         (minimum-distance . 0.25)
1078         (meta . ((class . Item)
1079                  (interfaces . (font-interface
1080                                 rhythmic-head-interface
1081                                 rhythmic-grob-interface
1082                                 staff-symbol-referencer-interface
1083                                 rest-interface))))))
1084
1085     (RestCollision
1086      . (
1087         (minimum-distance . 0.75)
1088         (meta . ((class . Item)
1089                  (interfaces . (rest-collision-interface))))))
1090
1091     (Script
1092      . (
1093         ;; don't set direction here: it breaks staccato.
1094         (print-function . ,Script_interface::print)
1095
1096         ;; This value is sensitive: if too large, staccato dots will move a
1097         ;; space a away.
1098         (padding . 0.20)
1099         (staff-padding . 0.25)
1100         ;; (script-priority . 0) priorities for scripts, see script.scm
1101         (X-offset-callbacks . (,Self_alignment_interface::centered_on_parent))
1102         (before-line-breaking-callback . ,Script_interface::before_line_breaking)
1103         (font-encoding . fetaMusic)
1104         (meta . ((class . Item)
1105                  (interfaces . (script-interface
1106                                 side-position-interface
1107                                 font-interface))))))
1108
1109     (ScriptColumn
1110      . (
1111         (before-line-breaking-callback . ,Script_column::before_line_breaking)
1112         (meta . ((class . Item)
1113                  (interfaces . (script-column-interface))))))
1114
1115     (SeparationItem
1116      . (
1117         (X-extent-callback . #f)
1118         (Y-extent-callback . #f)
1119         (meta . ((class . Item)
1120                  (interfaces . (spacing-interface
1121                                 separation-item-interface))))))
1122
1123     (SeparatingGroupSpanner
1124      . (
1125         (spacing-procedure . ,Separating_group_spanner::set_spacing_rods)
1126         (meta . ((class . Spanner)
1127                  (interfaces . (only-prebreak-interface
1128                                 spacing-interface
1129                                 separation-spanner-interface))))))
1130
1131     (Slur
1132      . ((slur-details . ,default-slur-details)
1133         (print-function . ,Slur::print)
1134         (thickness . 1.0)
1135         (spacing-procedure . ,Spanner::set_spacing_rods)
1136         (minimum-length . 1.5)
1137         (after-line-breaking-callback . ,Slur::after_line_breaking)
1138         (Y-extent-callback . ,Slur::height)
1139                                         ; Slur::height)
1140         (height-limit . 2.0)
1141         (ratio . 0.25)
1142         (meta . ((class . Spanner)
1143                  (interfaces . (slur-interface))))))
1144
1145     (SpacingSpanner
1146      . (
1147         (spacing-procedure . ,Spacing_spanner::set_springs)
1148         (grace-space-factor . 0.6)
1149         (shortest-duration-space . 2.0)
1150         (spacing-increment . 1.2)
1151         (base-shortest-duration . ,(ly:make-moment 3 16))
1152         (meta . ((class . Spanner)
1153                  (interfaces . (spacing-interface
1154                                 spacing-spanner-interface))))))
1155
1156     (SpanBar
1157      . (
1158         (break-align-symbol . staff-bar)
1159         (bar-size-procedure . ,Span_bar::get_bar_size)
1160         (print-function . ,Span_bar::print)
1161         (X-extent-callback . ,Span_bar::width_callback)
1162         (Y-extent-callback . ())
1163         (layer . 0)
1164         (breakable . #t)
1165         (before-line-breaking-callback . ,Span_bar::before_line_breaking)
1166         ;; ugh duplication!
1167
1168         ;;
1169         ;; Ross. page 151 lists other values, we opt for a leaner look
1170         ;;
1171         (kern . 3.0)
1172         (thin-kern . 3.0)
1173         (hair-thickness . 1.6)
1174         (thick-thickness . 6.0)
1175         (meta . ((class . Item)
1176                  (interfaces . (span-bar-interface
1177                                 font-interface
1178                                 bar-line-interface))))))
1179
1180     (StanzaNumber
1181      . ((print-function . ,Text_interface::print)
1182         (font-series . bold)
1183         (padding . 1.0)
1184         (X-offset-callbacks . (,Side_position_interface::aligned_side))
1185         (direction . ,LEFT)
1186         (meta . ((class . Item)
1187                  (interfaces . (side-position-interface
1188                                 stanza-number-interface
1189                                 text-interface
1190                                 font-interface))))))
1191
1192     (StringNumber
1193      . (
1194         (print-function . ,print-circled-text-callback)
1195         (padding . 0.5)
1196         (staff-padding . 0.5)
1197         (self-alignment-X . 0)
1198         (self-alignment-Y . 0)
1199         (script-priority . 100)
1200         (font-encoding . fetaNumber)
1201         (font-size . -5)                ; don't overlap when next to heads.
1202         (meta . ((class . Item)
1203                  (interfaces . (string-number-interface
1204                                 font-interface
1205                                 text-script-interface
1206                                 text-interface
1207                                 side-position-interface
1208                                 self-alignment-interface
1209                                 item-interface))))))
1210
1211     (StaffSpacing
1212      . (
1213         (breakable . #t)
1214         (stem-spacing-correction . 0.4)
1215
1216         (meta . ((class . Item)
1217                  (interfaces . (spacing-interface
1218                                 staff-spacing-interface))))))
1219
1220     (SostenutoPedal
1221      . (
1222         (print-function . ,Text_interface::print)
1223         (direction . 1)
1224         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
1225         (no-spacing-rods . #t)
1226         (padding . 0.0) ;; padding relative to SostenutoPedalLineSpanner
1227         (font-shape . italic)
1228         (self-alignment-X . 0)
1229         (meta . ((class . Item)
1230                  (interfaces . (text-interface
1231                                 self-alignment-interface
1232                                 font-interface))))))
1233
1234     (SostenutoPedalLineSpanner
1235      . (
1236         (axes . (1))
1237         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
1238         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1239
1240         (padding . 1.2)
1241         (minimum-space . 1.0)
1242         (direction . -1)
1243         (meta . ((class . Spanner)
1244                  (interfaces . (piano-pedal-interface
1245                                 axis-group-interface
1246                                 side-position-interface))))))
1247
1248     (StaffSymbol
1249      . (
1250         (print-function . ,Staff_symbol::print)
1251         (line-count . 5)
1252         (ledger-line-thickness . (1.0 . 0.1))
1253         (layer . 0)
1254         (meta . ((class . Spanner)
1255                  (interfaces . (staff-symbol-interface))))))
1256
1257     (Stem
1258      . (
1259         ;; this list is rather long. Trim --hwn
1260         (before-line-breaking-callback . ,Stem::before_line_breaking)
1261         (print-function . ,Stem::print)
1262         (thickness . 1.3)
1263
1264         ;; 3.5 (or 3 measured from note head) is standard length
1265         ;; 32nd, 64th flagged stems should be longer
1266         (lengths . (3.5 3.5 3.5 4.5 5.0))
1267
1268         ;; Stems in unnatural (forced) direction should be shortened by
1269         ;; one staff space, according to [Roush & Gourlay].
1270         ;; Flagged stems we shorten only half a staff space.
1271         (stem-shorten . (1.0 0.5))
1272
1273         ;; default stem direction for note on middle line
1274         (neutral-direction . -1)
1275
1276         ;; FIXME.  3.5 yields too long beams (according to Ross and
1277         ;; looking at Baerenreiter examples) for a number of common
1278         ;; boundary cases.  Subtracting half a beam thickness fixes
1279         ;; this, but the bug may well be somewhere else.
1280
1281         ;; FIXME this should come from 'lengths
1282
1283         (beamed-lengths . (3.26 3.5 3.6))
1284
1285         ;; We use the normal minima as minimum for the ideal lengths,
1286         ;; and the extreme minima as abolute minimum length.
1287
1288         ;; The 'normal' minima
1289         (beamed-minimum-free-lengths . (1.83 1.5 1.25))
1290                                         ;(beamed-minimum-free-lengths . (2.0 1.83 1.25))
1291
1292         ;; The 'extreme case' minima
1293         (beamed-extreme-minimum-free-lengths . (2.0 1.25))
1294
1295         (X-offset-callbacks . (,Stem::offset_callback))
1296         (X-extent-callback . ,Stem::width_callback)
1297         (Y-extent-callback . ,Stem::height)
1298         (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
1299         (meta . ((class . Item)
1300                  (interfaces . (stem-interface
1301                                 font-interface))))))
1302
1303     (StemTremolo
1304      . (
1305         (print-function . ,Stem_tremolo::print)
1306         (Y-extent-callback . ,Stem_tremolo::height)
1307         (X-extent-callback . #f)
1308
1309         (beam-width . 1.6) ; staff-space
1310         (beam-thickness . 0.48) ; staff-space
1311         (meta . ((class . Item)
1312                  (interfaces . (stem-tremolo-interface))))))
1313
1314     (SustainPedal
1315      . (
1316         (no-spacing-rods . #t)
1317         (print-function . ,Sustain_pedal::print)
1318         (self-alignment-X . 0)
1319         (direction . 1)
1320         (padding . 0.0)  ;; padding relative to SustainPedalLineSpanner
1321         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
1322         (meta . ((class . Item)
1323                  (interfaces . (piano-pedal-interface
1324                                 text-spanner-interface
1325                                 text-interface
1326                                 self-alignment-interface
1327                                 font-interface))))))
1328
1329     (SustainPedalLineSpanner
1330      . (
1331         (axes . (1))
1332         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
1333         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1334
1335         (padding . 1.2)
1336         (staff-padding . 1.2)
1337         (minimum-space . 1.0)
1338         (direction . -1)
1339         (meta . ((class . Spanner)
1340                  (interfaces . (piano-pedal-interface
1341                                 axis-group-interface
1342                                 side-position-interface))))))
1343
1344     (System
1345      . (
1346         (axes . (0 1))
1347         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
1348         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
1349         (meta . ((class . System)
1350                  (interfaces . (system-interface
1351                                 axis-group-interface))))))
1352
1353     (SystemStartBrace
1354      . (
1355         (glyph . "brace")
1356         (print-function . ,System_start_delimiter::print)
1357         (collapse-height . 5.0)
1358         (font-encoding . fetaBraces)
1359         (Y-extent-callback . #f)
1360         (meta . ((class . Spanner)
1361                  (interfaces . (system-start-delimiter-interface
1362                                 font-interface))))))
1363
1364     (SystemStartBracket
1365      . (
1366         (Y-extent-callback . #f)
1367         (X-offset-callbacks . (,(lambda (g a) -0.8)))
1368         (print-function . ,System_start_delimiter::print)
1369         (glyph . "bracket")
1370         (collapse-height . 1)
1371         (thickness . 0.45)
1372         (meta . ((class . Spanner)
1373                  (interfaces . (font-interface
1374                                 system-start-delimiter-interface))))))
1375
1376     (SystemStartBar
1377      . (
1378         (Y-extent-callback . #f)
1379         (print-function . ,System_start_delimiter::print)
1380         (glyph . "bar-line")
1381         (thickness . 1.6)
1382         (after-line-breaking-callback . ,System_start_delimiter::after_line_breaking)
1383         (meta . ((class . Spanner)
1384                  (interfaces . (system-start-delimiter-interface))))))
1385
1386     (TabNoteHead
1387      . (
1388         (print-function . ,Text_interface::print)
1389         (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
1390         (font-size . -2)
1391         (stem-attachment-function . ,tablature-stem-attachment-function)
1392         (font-series . bold)
1393         (meta . ((class . Item)
1394                  (interfaces
1395                   . (rhythmic-head-interface
1396                      font-interface
1397                      note-head-interface
1398                      staff-symbol-referencer-interface
1399                      text-interface))))))
1400
1401     (TextScript
1402      . (
1403         (print-function . ,Text_interface::print)
1404         (no-spacing-rods . #t)
1405         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
1406         (direction . -1)
1407
1408         ;; sync with Fingering ?
1409         (padding . 0.5)
1410         (staff-padding . 0.5)
1411         (before-line-breaking-callback . ,Script_interface::before_line_breaking)
1412         (avoid-slur . around)
1413         (slur-padding . 0.5)
1414         (script-priority . 200)
1415         ;; todo: add X self alignment?
1416         (meta . ((class . Item)
1417                  (interfaces . (text-script-interface
1418                                 text-interface
1419                                 side-position-interface
1420                                 font-interface))))))
1421
1422     (TextSpanner
1423      . (
1424         (print-function . ,Text_spanner::print)
1425         (font-shape . italic)
1426         (style . dashed-line)
1427         (staff-padding . 0.8)
1428         (dash-fraction . 0.2)
1429         (dash-period . 3.0)
1430         (direction . 1)
1431         (meta . ((class . Spanner)
1432                  (interfaces . (text-spanner-interface
1433                                 side-position-interface
1434                                 font-interface))))))
1435
1436     (Tie
1437      . (
1438         (print-function . ,Tie::print)
1439         (spacing-procedure . ,Spanner::set_spacing_rods)
1440         (staffline-clearance . 0.35)
1441         (details . ((ratio . 0.333) (height-limit . 1.0)))
1442         (thickness . 1.0)
1443 ;       (x-gap . -0.1)
1444         (y-offset . 0.6)
1445         (minimum-length . 2.5)
1446         (meta . ((class . Spanner)
1447                  (interfaces . (tie-interface))))))
1448
1449     (TieColumn
1450      . (
1451         (after-line-breaking-callback . ,Tie_column::after_line_breaking)
1452         (before-line-breaking-callback . ,Tie_column::before_line_breaking)
1453         (X-extent-callback . #f)
1454         (Y-extent-callback . #f)
1455         (meta . ((class . Spanner)
1456                  (interfaces . (tie-column-interface))))))
1457
1458     (TimeSignature
1459      . (
1460         (print-function . ,Time_signature::print)
1461         (break-align-symbol . time-signature)
1462         (break-visibility . ,all-visible)
1463         (space-alist . (
1464                         (first-note . (fixed-space . 2.0))
1465                         (right-edge . (extra-space . 0.5))
1466                         (staff-bar . (minimum-space . 2.0))))
1467         (breakable . #t)
1468         (style . C)
1469         (meta . ((class . Item)
1470                  (interfaces . (time-signature-interface
1471                                 break-aligned-interface
1472                                 font-interface))))))
1473
1474     (TrillSpanner
1475      . (
1476         (print-function . ,Dynamic_text_spanner::print)
1477         (edge-text . ,(cons (make-musicglyph-markup "scripts.trill")
1478                             ""))
1479         (style . trill)
1480         (staff-padding . 1.0)
1481         (padding . 0.5)
1482         (direction . 1)
1483         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1484         (meta . ((class . Spanner)
1485                  (interfaces . (text-spanner-interface
1486                                 side-position-interface
1487                                 font-interface))))))
1488
1489     (TrillPitchAccidental
1490      . ((X-offset-callbacks . (,Side_position_interface::aligned_side))
1491         (padding . 0.2)
1492         (direction . ,LEFT)
1493         (font-size . -4)
1494         (print-function . ,Accidental_interface::print)
1495         (meta . ((class . Item)
1496                  (interfaces . (item-interface
1497                                 accidental-interface
1498                                 side-position-interface
1499                                 font-interface))))))
1500
1501     (TrillPitchGroup
1502      . ((X-offset-callbacks . (,Side_position_interface::aligned_side))
1503         (axes . (,X))
1504         (font-size . -4)
1505         (print-function . ,parenthesize-elements)
1506         (direction . ,RIGHT)
1507         (padding . 0.3)
1508         (meta . ((class . Item)
1509                  (interfaces . (side-position-interface
1510                                 note-head-interface
1511                                 rhythmic-head-interface
1512                                 font-interface
1513                                 accidental-interface
1514                                 axis-group-interface))))))
1515
1516     (TrillPitchHead
1517      . ((print-function . ,Note_head::print)
1518         (duration-log . 2)
1519         (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
1520         (font-size . -4)
1521         (meta . ((class . Item)
1522                  (interfaces . (item-interface
1523                                 rhythmic-head-interface
1524                                 font-interface
1525                                 pitched-trill-interface
1526                                 ledgered-interface
1527                                 staff-symbol-referencer-interface))))))
1528
1529     (TupletBracket
1530      . (
1531         (padding . 1.1)
1532         (thickness . 1.6)
1533         (edge-height . (0.7 . 0.7))
1534         (shorten-pair . (-0.2 . -0.2))
1535         (before-line-breaking-callback . ,Tuplet_bracket::before_line_breaking)
1536         (after-line-breaking-callback . ,Tuplet_bracket::after_line_breaking)
1537         (print-function . ,Tuplet_bracket::print)
1538         (font-shape . italic)
1539
1540         (font-size . -2)
1541         (meta . ((class . Spanner)
1542                  (interfaces . (text-interface
1543                                 line-interface
1544                                 tuplet-bracket-interface
1545                                 font-interface))))))
1546
1547     (UnaCordaPedal
1548      . (
1549         (print-function . ,Text_interface::print)
1550         (font-shape . italic)
1551         (no-spacing-rods . #t)
1552         (self-alignment-X . 0)
1553         (direction . 1)
1554         (padding . 0.0)  ;; padding relative to UnaCordaPedalLineSpanner
1555         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
1556         (meta . ((class . Item)
1557                  (interfaces . (text-interface
1558                                 self-alignment-interface
1559                                 font-interface))))))
1560
1561     (UnaCordaPedalLineSpanner
1562      . (
1563         (axes . (1))
1564         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
1565         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1566         (padding . 1.2)
1567         (staff-padding . 1.2)
1568         (minimum-space . 1.0)
1569         (direction . -1)
1570         (meta . ((class . Spanner)
1571                  (interfaces . (piano-pedal-interface
1572                                 axis-group-interface
1573                                 side-position-interface))))))
1574
1575     (VaticanaLigature
1576      . (
1577         (thickness . 0.6)
1578         (flexa-width . 2.0)
1579         (ligature-primitive-callback . ,Vaticana_ligature::brew_ligature_primitive)
1580         (print-function . ,Vaticana_ligature::print)
1581         (meta . ((class . Spanner)
1582                  (interfaces . (vaticana-ligature-interface
1583                                 font-interface))))))
1584
1585     (VerticalAlignment
1586      . (
1587         (axes . (1))
1588         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
1589         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
1590         (stacking-dir . -1)
1591         (meta . ((class . Spanner)
1592                  (interfaces . (align-interface
1593                                 axis-group-interface))))))
1594
1595     (VerticalAxisGroup
1596      . (
1597         (axes . (1))
1598         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
1599         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
1600
1601         (meta . ((class . Spanner)
1602                  (interfaces . (axis-group-interface
1603                                 vertically-spaceable-interface))))))
1604
1605     (VocalName
1606      . (
1607         (breakable . #t)
1608         (Y-offset-callbacks . (,Side_position_interface::aligned_on_support_refpoints))
1609         (direction . 0)
1610         (space-alist . ((left-edge . (extra-space . 1.0))))
1611         (break-align-symbol . instrument-name)
1612         (print-function . ,Text_interface::print)
1613         (break-align-symbol . clef)
1614         (break-visibility . ,begin-of-line-visible)
1615         (baseline-skip . 2)
1616         (meta . ((class . Item)
1617                  (interfaces . (font-interface
1618                                 self-alignment-interface
1619                                 side-position-interface
1620                                 text-interface
1621                                 break-aligned-interface))))))
1622
1623     (VoltaBracket
1624      . (
1625         (print-function . ,Volta_bracket_interface::print)
1626         (direction . 1)
1627         (padding . 1)
1628         (font-encoding . fetaNumber)
1629         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1630         (thickness . 1.6)  ;;  linethickness
1631         (height . 2.0) ;; staffspace;
1632         (minimum-space . 5)
1633         (font-size . -4)
1634         (meta . ((class . Spanner)
1635                  (interfaces . (volta-bracket-interface
1636                                 line-interface
1637                                 text-interface
1638                                 side-position-interface
1639                                 font-interface))))))
1640
1641     (VoiceFollower
1642      . (
1643         (style . line)
1644         (gap . 0.5)
1645         (breakable . #t)
1646         (X-extent-callback . #f)
1647         (Y-extent-callback . #f)
1648         (print-function . ,Line_spanner::print)
1649         (after-line-breaking-callback . ,Line_spanner::after_line_breaking)
1650         (meta . ((class . Spanner)
1651                  (interfaces . (line-spanner-interface
1652                                 line-interface))))))))
1653
1654 (define (completize-grob-entry x)
1655   "Transplant assoc key into 'name entry of 'meta of X.  Set interfaces for Item, Spanner etc.
1656 "
1657   ;;  (display (car x))
1658   ;;  (newline)
1659   (let* ((name-sym  (car x))
1660          (grob-entry (cdr x))
1661          (meta-entry (cdr (assoc 'meta grob-entry)))
1662          (class (cdr (assoc 'class meta-entry)))
1663          (ifaces-entry
1664           (cdr (assoc 'interfaces meta-entry))))
1665
1666     (cond
1667      ((eq? 'Item class)
1668       (set! ifaces-entry (cons 'item-interface ifaces-entry)))
1669      ((eq? 'Spanner class)
1670       (set! ifaces-entry (cons 'spanner-interface ifaces-entry)))
1671      ((eq? 'Paper_column class)
1672       (set! ifaces-entry (cons 'item-interface
1673                                (cons 'paper-column-interface ifaces-entry))))
1674      ((eq? 'System class)
1675       (set! ifaces-entry (cons 'system-interface
1676                                (cons 'spanner-interface ifaces-entry))))
1677      (else
1678       (ly:warning "Unknown class ~a" class)))
1679     (set! ifaces-entry (cons 'grob-interface ifaces-entry))
1680
1681     (set! meta-entry (assoc-set! meta-entry 'name name-sym))
1682     (set! meta-entry (assoc-set! meta-entry 'interfaces
1683                                  ifaces-entry))
1684     (set! grob-entry (assoc-set! grob-entry 'meta meta-entry))
1685     (cons name-sym grob-entry)))
1686
1687 (set! all-grob-descriptions (map completize-grob-entry all-grob-descriptions))
1688
1689 ;;  (display (map pair? all-grob-descriptions))
1690
1691 ;; make sure that \property Foo.Bar =\turnOff doesn't complain
1692
1693 (map (lambda (x)
1694        ;; (display (car x)) (newline)
1695
1696        (set-object-property! (car x) 'translation-type? list?)
1697        (set-object-property! (car x) 'is-grob? #t))
1698      all-grob-descriptions)
1699
1700 (set! all-grob-descriptions (sort all-grob-descriptions alist<?))
1701