]> git.donarmstrong.com Git - lilypond.git/blob - scm/define-grobs.scm
6d88d7820342932a8fa17a334ef1807b80fd7111
[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         (inside-slur . #t)
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     (DynamicLineSpanner
458      . (
459         (axes . (1))
460         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
461         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
462         (staff-padding . 0.1)
463         (padding . 0.6)
464         (slur-padding . 0.3)
465         (minimum-space . 1.2)
466         (direction . -1)
467
468         (meta . ((class . Spanner)
469                  (interfaces . (axis-group-interface
470                                 dynamic-interface
471                                 dynamic-line-spanner-interface
472                                 side-position-interface))))))
473
474     (DynamicText
475      . (
476         (print-function . ,Text_interface::print)
477         (before-line-breaking-callback . ,Script_interface::before_line_breaking)
478         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
479         (self-alignment-X . 0)
480         (Y-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
481         (self-alignment-Y . 0)
482         (font-series . bold)
483         (font-encoding . fetaDynamic)
484         (font-shape . italic)
485         (no-spacing-rods . #t)
486         (script-priority . 100)
487         (meta . ((class . Item)
488                  (interfaces . (font-interface
489                                 text-interface
490                                 self-alignment-interface
491                                 dynamic-interface
492                                 script-interface))))))
493
494     (DynamicTextSpanner
495      . ((print-function . ,Dynamic_text_spanner::print)
496
497         ;; rather ugh with NCSB
498         ;; (font-series . bold)
499         (font-shape . italic)
500         (style . dashed-line)
501
502         ;; need to blend with dynamic texts.
503         (font-size . 1)
504         (bound-padding . 0.75)
505         (dash-fraction . 0.2)
506         (dash-period . 3.0)
507         (meta . ((class . Spanner)
508                  (interfaces . (font-interface
509                                 text-interface
510                                 dynamic-interface
511                                 dynamic-text-spanner-interface
512                                 spanner-interface))))))
513
514     (Fingering
515      . (
516         (print-function . ,Text_interface::print)
517
518                                         ; sync with TextScript (?)
519         (padding . 0.5)
520         (slur-padding . 0.2)
521         (staff-padding . 0.5)
522         (self-alignment-X . 0)
523         (self-alignment-Y . 0)
524         (script-priority . 100)
525         (before-line-breaking-callback . ,Script_interface::before_line_breaking)
526         (font-encoding . fetaNumber)
527         (font-size . -5)                ; don't overlap when next to heads.
528         (meta . ((class . Item)
529                  (interfaces . (finger-interface
530                                 font-interface
531                                 text-script-interface
532                                 text-interface
533                                 side-position-interface
534                                 self-alignment-interface
535                                 item-interface))))))
536     (Glissando
537      . (
538         (style . line)
539         (gap . 0.5)
540         (zigzag-width . 0.75)
541         (breakable . #t)
542         (X-extent-callback . #f)
543         (Y-extent-callback . #f)
544         (after-line-breaking-callback . ,Line_spanner::after_line_breaking)
545         (print-function . ,Line_spanner::print)
546         (meta . ((class . Spanner)
547                  (interfaces . (line-interface
548                                 line-spanner-interface))))))
549
550     (GridPoint
551      . (
552         (X-extent . (0 . 0))
553         (Y-extent . (0 . 0))
554         (meta . ((class . Item)
555                  (interfaces . (grid-point-interface))))))
556
557     (GridLine
558      . (
559         (print-function . ,Grid_line_interface::print)
560         (X-extent-callback  . ,Grid_line_interface::width_callback)
561         (self-alignment-X . ,CENTER)
562         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self
563                                ,Self_alignment_interface::centered_on_parent))
564         (layer . 0)
565         (meta . ((class . Item)
566                  (interfaces . (self-alignment-interface
567                                 grid-line-interface))))))
568
569     (Hairpin
570      . (
571         (print-function . ,Hairpin::print)
572         (after-line-breaking-callback . ,Hairpin::after_line_breaking)
573         (thickness . 1.0)
574         (height . 0.6666)
575         (spacing-procedure . ,Spanner::set_spacing_rods)
576         (minimum-length . 2.0)
577         (bound-padding . 1.0)
578         (self-alignment-Y . 0)
579         (Y-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
580         (meta . ((class . Spanner)
581                  (interfaces . (hairpin-interface
582                                 line-interface
583                                 self-alignment-interface
584                                 dynamic-interface
585                                 spanner-interface))))))
586
587     (HorizontalBracket
588      . (
589         (thickness . 1.0)
590         (print-function . ,Horizontal_bracket::print)
591         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
592         (padding . 0.2)
593         (staff-padding . 0.2)
594         (direction . -1)
595         (bracket-flare . (0.5 . 0.5))
596         (meta . ((class . Spanner)
597                  (interfaces . (horizontal-bracket-interface
598                                 side-position-interface
599                                 line-interface
600                                 spanner-interface))))))
601     (InstrumentName
602      . (
603         (breakable . #t)
604         (Y-offset-callbacks . (,Self_alignment_interface::aligned_on_self
605                                ,Side_position_interface::aligned_on_support_refpoints))
606         ;; This direction is for aligned_on_support_refpoints
607         ;; (?) --hwn
608         (direction . 0)
609         (space-alist . (
610                         (left-edge . (extra-space . 1.0))))
611
612         (self-alignment-Y . 0)
613         (print-function . ,Text_interface::print)
614         (break-align-symbol . instrument-name)
615         (break-visibility . ,begin-of-line-visible)
616         (baseline-skip . 2)
617         (meta . ((class . Item)
618                  (interfaces . (font-interface
619                                 self-alignment-interface
620                                 side-position-interface
621                                 text-interface
622                                 break-aligned-interface))))))
623
624     (KeyCancellation
625      . (
626         (print-function . ,Key_signature_interface::print)
627         (space-alist . (
628                         (time-signature . (extra-space . 1.25))
629                         (staff-bar . (extra-space . 0.6))
630                         (key-signature . (extra-space . 0.5))
631                         (right-edge . (extra-space . 0.5))
632                         (first-note . (fixed-space . 2.5))))
633         (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
634         (break-align-symbol . key-cancellation)
635         (break-visibility . ,begin-of-line-invisible)
636         (breakable . #t)
637
638         (meta . ((class . Item)
639                  (interfaces . (key-signature-interface
640                                 font-interface
641                                 break-aligned-interface))))))
642     (KeySignature
643      . (
644         (print-function . ,Key_signature_interface::print)
645         (space-alist . (
646                         (time-signature . (extra-space . 1.25))
647                         (staff-bar . (extra-space . 1.1))
648                         (right-edge . (extra-space . 0.5))
649                         (first-note . (fixed-space . 2.5))))
650         (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
651         (break-align-symbol . key-signature)
652         (break-visibility . ,begin-of-line-visible)
653         (breakable . #t)
654
655         (meta . ((class . Item)
656                  (interfaces . (key-signature-interface
657                                 font-interface
658                                 break-aligned-interface))))))
659     (LedgerLineSpanner
660      . (
661         (print-function . ,Ledger_line_spanner::print)
662         (X-extent-callback . #f)
663         (Y-extent-callback . #f)
664         (minimum-length-fraction . 0.25)
665         (length-fraction . 0.25)
666         (spacing-procedure . ,Ledger_line_spanner::set_spacing_rods)
667         (print-function . ,Ledger_line_spanner::print)
668         (layer . 0)
669         (meta . ((class . Spanner)
670                  (interfaces . (ledger-line-interface))))))
671
672     (LeftEdge
673      . (
674         (break-align-symbol . left-edge)
675         (X-extent . (0 . 0))
676         (breakable . #t)
677         (break-visibility . ,center-invisible)
678         (space-alist . (
679                         (custos . (extra-space . 0.0))
680                         (ambitus . (extra-space . 2.0))
681                         (time-signature . (extra-space . 1.0))
682                         (staff-bar . (extra-space . 0.0))
683                         (breathing-sign . (minimum-space . 0.0))
684                         (clef . (extra-space . 0.8))
685                         (first-note . (fixed-space . 2.0))
686                         (right-edge . (extra-space . 0.0))
687                         (key-signature . (extra-space . 0.0))
688                         (key-cancellation . (extra-space . 0.0))
689                         ))
690         (meta . ((class . Item)
691                  (interfaces . (break-aligned-interface))))))
692
693     (LigatureBracket
694      . (
695         (ligature-primitive-callback . ,Note_head::print)
696         (direction . 1)
697         (gap . 0.0)
698         (padding . 2.0)
699         (thickness . 1.6)
700         (edge-height . (0.7 . 0.7))
701         (shorten-pair . (-0.2 . -0.2))
702         (before-line-breaking-callback . ,Tuplet_bracket::before_line_breaking)
703         (after-line-breaking-callback . ,Tuplet_bracket::after_line_breaking)
704         (print-function . ,Tuplet_bracket::print)
705         (meta . ((class . Spanner)
706                  (interfaces . (tuplet-bracket-interface
707                                 line-interface))))))
708
709     (LyricHyphen
710      . (
711         (thickness . 1.3)
712         (height . 0.42)
713         (dash-period . 10.0)
714         (length . 0.66)
715         (minimum-length . 0.3)
716         (padding . 0.07)
717                                         ;       (spacing-procedure . ,Hyphen_spanner::set_spacing_rods)
718         (print-function . ,Hyphen_spanner::print)
719         (Y-extent . (0 . 0))
720         (meta . ((class . Spanner)
721                  (interfaces . (lyric-interface
722                                 lyric-hyphen-interface
723                                 spanner-interface))))))
724
725     (LyricExtender
726      . (
727         (print-function . ,Lyric_extender::print)
728         (thickness . 0.8) ; linethickness
729         (minimum-length . 1.5)
730         (Y-extent . (0 . 0))
731         (meta . ((class . Spanner)
732                  (interfaces . (lyric-interface
733                                 lyric-extender-interface))))))
734
735     (LyricText
736      . ((print-function . ,Text_interface::print)
737         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_parent))
738         (self-alignment-X . 0)
739         (word-space . 0.6)
740         (font-series . bold-narrow)
741         (font-size . 1.0)
742         (meta . ((class . Item)
743                  (interfaces . (rhythmic-grob-interface
744                                 lyric-syllable-interface
745                                 self-alignment-interface
746                                 text-interface
747                                 font-interface))))))
748
749     (MensuralLigature
750      . (
751         (thickness . 1.4)
752         (flexa-width . 2.0)
753         (ligature-primitive-callback . ,Mensural_ligature::brew_ligature_primitive)
754         (print-function . ,Mensural_ligature::print)
755         (meta . ((class . Spanner)
756                  (interfaces . (mensural-ligature-interface
757                                 font-interface))))))
758
759     (MetronomeMark
760      . (
761         (print-function . ,Text_interface::print)
762         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
763         (direction . 1)
764         (padding . 0.8)
765         (meta . ((class . Item)
766                  (interfaces . (text-interface
767                                 side-position-interface
768                                 font-interface
769                                 metronome-mark-interface))))))
770     (MeasureGrouping
771      . (
772         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
773         (print-function . ,Measure_grouping::print)
774         (padding . 2)
775         (direction . 1)
776         (thickness . 1)
777         (height . 2.0)
778         (staff-padding . 3)
779         (meta . ((class . Spanner)
780                  (interfaces . (side-position-interface
781                                 measure-grouping-interface))))))
782     (MultiMeasureRest
783      . (
784         (spacing-procedure . ,Multi_measure_rest::set_spacing_rods)
785         (print-function . ,Multi_measure_rest::print)
786         (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
787         (staff-position . 0)
788         (expand-limit . 10)
789         (thick-thickness . 6.6)
790         (hair-thickness . 2.0)
791         (padding . 1)
792         (meta . ((class . Spanner)
793                  (interfaces . (multi-measure-rest-interface
794                                 multi-measure-interface
795                                 rest-interface
796                                 font-interface
797                                 staff-symbol-referencer-interface))))))
798
799     (MultiMeasureRestNumber
800      . (
801         (print-function . ,Text_interface::print)
802         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self
803                                ,Self_alignment_interface::centered_on_other_axis_parent))
804         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
805         (self-alignment-X . 0)
806         (direction . 1)
807         (padding . 0.4)
808         (staff-padding . 0.4)
809         (font-encoding . fetaNumber)
810         (meta . ((class . Spanner)
811                  (interfaces . (side-position-interface
812                                 multi-measure-interface
813                                 self-alignment-interface
814                                 font-interface
815                                 text-interface))))))
816     (MultiMeasureRestText
817      . (
818         (print-function . ,Text_interface::print)
819         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self
820                                ,Self_alignment_interface::centered_on_other_axis_parent))
821         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
822         (self-alignment-X . 0)
823         (direction . 1)
824         (padding . 0.2)
825         (staff-padding . 0.25)
826         (meta . ((class . Spanner)
827                  (interfaces . (side-position-interface
828                                 multi-measure-interface
829                                 self-alignment-interface
830                                 font-interface
831                                 text-interface))))))
832
833     (NoteCollision
834      . (
835         (axes . (0 1))
836         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
837         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
838         (meta . ((class . Item)
839                  (interfaces . (note-collision-interface
840                                 axis-group-interface))))))
841
842     (NoteColumn
843      . (
844         (axes . (0 1))
845         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
846         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
847         (meta . ((class . Item)
848                  (interfaces . (axis-group-interface
849                                 note-column-interface))))))
850
851     (NoteHead
852      . (
853         (print-function . ,Note_head::print)
854         (ligature-primitive-callback . ,Note_head::print)
855         (glyph-name-procedure . ,find-notehead-symbol)
856         (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
857         (stem-attachment-function . ,note-head-style->attachment-coordinates)
858         (meta . ((class . Item)
859                  (interfaces . (rhythmic-grob-interface
860                                 rhythmic-head-interface
861                                 font-interface
862                                 note-head-interface
863                                 ledgered-interface
864                                 staff-symbol-referencer-interface))))))
865
866     (NoteSpacing
867      . (
868         (stem-spacing-correction . 0.5)
869         (same-direction-correction . 0.25)
870         ;; Changed this from 0.75.
871         ;; If you ever change this back, please document! --hwn
872         (knee-spacing-correction . 1.0)
873
874         (meta . ((class . Item)
875                  (interfaces . (spacing-interface
876                                 note-spacing-interface))))))
877
878     (NoteName
879      . (
880         (print-function . ,Text_interface::print)
881         (meta . ((class . Item)
882                  (interfaces . (note-name-interface
883                                 text-interface
884                                 font-interface))))))
885
886     (OctavateEight
887      . (
888         (self-alignment-X . 0)
889         (break-visibility . ,begin-of-line-visible)
890         (X-offset-callbacks . (,Self_alignment_interface::centered_on_parent ,Self_alignment_interface::aligned_on_self))
891         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
892         (print-function . ,Text_interface::print)
893
894         ;; no Y dimensions, because of lyrics under tenor clef.
895         (Y-extent . (0 . 0))
896         (font-shape . italic)
897         (padding . 0.6)
898         (staff-padding . 0.2)
899         (font-size . -4)
900         (meta . ((class . Item)
901                  (interfaces . (text-interface
902                                 self-alignment-interface
903                                 side-position-interface
904                                 font-interface))))))
905
906     (OttavaBracket
907      . (
908         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
909         (print-function . ,Ottava_bracket::print)
910         (font-shape . italic)
911         (shorten-pair . (0.0 . -0.6))
912         (staff-padding . 1.0)
913         (padding . 0.5)
914         (minimum-length . 1.0)
915         (dash-fraction . 0.3)
916         (edge-height . (0 . 1.2))
917         (direction . 1)
918         (meta . ((class . Spanner)
919                  (interfaces . (ottava-bracket-interface
920                                 line-interface
921                                 side-position-interface
922                                 font-interface
923                                 text-interface))))))
924
925     (PaperColumn
926      . (
927         (axes . (0))
928         (before-line-breaking-callback . ,Paper_column::before_line_breaking)
929         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
930
931         ;; debugging
932         ;;              (print-function . ,Paper_column::print) (font-size . -6) (font-name . "sans") (Y-extent-callback . #f)
933         (meta . ((class . Paper_column)
934                  (interfaces . (paper-column-interface
935                                 axis-group-interface
936                                 spaceable-grob-interface))))))
937
938     (PhrasingSlur
939      . ((slur-details . ,default-slur-details)
940         (print-function . ,Slur::print)
941         (thickness . 1.1)
942         (spacing-procedure . ,Spanner::set_spacing_rods)
943         (minimum-length . 1.5)
944         (after-line-breaking-callback . ,Slur::after_line_breaking)
945         (Y-extent-callback . ,Slur::height)
946         (height-limit . 2.0)
947         (ratio . 0.333)
948         (meta . ((class . Spanner)
949                  (interfaces . (slur-interface))))))
950
951     (NonMusicalPaperColumn
952      . (
953         (axes . (0))
954         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
955         (before-line-breaking-callback . ,Paper_column::before_line_breaking)
956         (breakable . #t)
957
958         ;; debugging stuff: print column number.
959         ;;      (print-function . ,Paper_column::print) (font-size . -6) (font-name . "sans")   (Y-extent-callback . #f)
960
961         (meta . ((class . Paper_column)
962                  (interfaces . (paper-column-interface
963                                 axis-group-interface
964                                 spaceable-grob-interface))))))
965
966     (PercentRepeat
967      . (
968         (spacing-procedure . ,Multi_measure_rest::set_spacing_rods)
969         (print-function . ,Multi_measure_rest::percent)
970         (slope . 1.0)
971         (thickness . 0.48)
972         (font-encoding . fetaMusic)
973         (meta . ((class . Spanner)
974                  (interfaces . (multi-measure-rest-interface
975                                 font-interface
976                                 percent-repeat-interface))))))
977
978     ;; an example of a text spanner
979     (PianoPedalBracket
980      . (
981         (print-function . ,Piano_pedal_bracket::print)
982         (style . line)
983         (bound-padding . 1.0)
984         (direction . -1)
985         (bracket-flare . (0.5 . 0.5))
986         (edge-height . (1.0 . 1.0))
987         (shorten-pair . (0.0 . 0.0))
988         (thickness .  1.0)
989         (meta . ((class . Spanner)
990                  (interfaces . (line-interface
991                                 piano-pedal-interface
992                                 piano-pedal-bracket-interface))))))
993
994     (RehearsalMark
995      . (
996         (print-function . ,Text_interface::print)
997         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
998         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
999         (after-line-breaking-callback . ,shift-right-at-line-begin)
1000         (self-alignment-X . 0)
1001         (direction . 1)
1002         (breakable . #t)
1003         (font-size . 2)
1004         (baseline-skip . 2)
1005         (break-visibility . ,end-of-line-invisible)
1006         (padding . 0.8)
1007         (meta . ((class . Item)
1008                  (interfaces . (text-interface
1009                                 side-position-interface
1010                                 font-interface
1011                                 mark-interface
1012                                 self-alignment-interface))))))
1013
1014     (RemoveEmptyVerticalGroup
1015      . (
1016         (Y-offset-callbacks . (,Hara_kiri_group_spanner::force_hara_kiri_callback))
1017         (Y-extent-callback . ,Hara_kiri_group_spanner::y_extent)
1018         (axes . (1))
1019         (meta . ((class . Spanner)
1020                  (interfaces . (axis-group-interface
1021                                 vertically-spaceable-interface
1022                                 hara-kiri-group-interface
1023                                 spanner-interface))))))
1024
1025     (RepeatSlash
1026      . (
1027         (print-function . ,Percent_repeat_item_interface::beat_slash)
1028         (thickness . 0.48)
1029         (slope . 1.7)
1030         (meta . ((class . Item)
1031                  (interfaces . (percent-repeat-interface))))))
1032     (Rest
1033      . (
1034         (after-line-breaking-callback . ,Rest::after_line_breaking)
1035         (X-extent-callback . ,Rest::extent_callback)
1036         (Y-extent-callback . ,Rest::extent_callback)
1037         (print-function . ,Rest::print)
1038         (Y-offset-callbacks . (,Staff_symbol_referencer::callback
1039                                ,Rest::polyphonic_offset_callback))
1040         (minimum-distance . 0.25)
1041         (meta . ((class . Item)
1042                  (interfaces . (font-interface
1043                                 rhythmic-head-interface
1044                                 rhythmic-grob-interface
1045                                 staff-symbol-referencer-interface
1046                                 rest-interface))))))
1047
1048     (RestCollision
1049      . (
1050         (minimum-distance . 0.75)
1051         (meta . ((class . Item)
1052                  (interfaces . (rest-collision-interface))))))
1053
1054     (Script
1055      . (
1056         ;; don't set direction here: it breaks staccato.
1057         (print-function . ,Script_interface::print)
1058
1059         ;; This value is sensitive: if too large, staccato dots will move a
1060         ;; space a away.
1061         (padding . 0.20)
1062         (staff-padding . 0.25)
1063         (slur-padding . 0.5)
1064         ;; (script-priority . 0) priorities for scripts, see script.scm
1065         (X-offset-callbacks . (,Self_alignment_interface::centered_on_parent))
1066         (before-line-breaking-callback . ,Script_interface::before_line_breaking)
1067         (font-encoding . fetaMusic)
1068         (meta . ((class . Item)
1069                  (interfaces . (script-interface
1070                                 side-position-interface
1071                                 font-interface))))))
1072
1073     (ScriptColumn
1074      . (
1075         (before-line-breaking-callback . ,Script_column::before_line_breaking)
1076         (meta . ((class . Item)
1077                  (interfaces . (script-column-interface))))))
1078
1079     (SeparationItem
1080      . (
1081         (X-extent-callback . #f)
1082         (Y-extent-callback . #f)
1083         (meta . ((class . Item)
1084                  (interfaces . (spacing-interface
1085                                 separation-item-interface))))))
1086
1087     (SeparatingGroupSpanner
1088      . (
1089         (spacing-procedure . ,Separating_group_spanner::set_spacing_rods)
1090         (meta . ((class . Spanner)
1091                  (interfaces . (only-prebreak-interface
1092                                 spacing-interface
1093                                 separation-spanner-interface))))))
1094
1095     (Slur
1096      . ((slur-details . ,default-slur-details)
1097         (print-function . ,Slur::print)
1098         (thickness . 1.0)
1099         (spacing-procedure . ,Spanner::set_spacing_rods)
1100         (minimum-length . 1.5)
1101         (after-line-breaking-callback . ,Slur::after_line_breaking)
1102         (Y-extent-callback . ,Slur::height)
1103                                         ; Slur::height)
1104         (height-limit . 2.0)
1105         (ratio . 0.25)
1106         (meta . ((class . Spanner)
1107                  (interfaces . (slur-interface))))))
1108
1109     (SpacingSpanner
1110      . (
1111         (spacing-procedure . ,Spacing_spanner::set_springs)
1112         (grace-space-factor . 0.6)
1113         (shortest-duration-space . 2.0)
1114         (spacing-increment . 1.2)
1115         (base-shortest-duration . ,(ly:make-moment 3 16))
1116         (meta . ((class . Spanner)
1117                  (interfaces . (spacing-interface
1118                                 spacing-spanner-interface))))))
1119
1120     (SpanBar
1121      . (
1122         (break-align-symbol . staff-bar)
1123         (bar-size-procedure . ,Span_bar::get_bar_size)
1124         (print-function . ,Span_bar::print)
1125         (X-extent-callback . ,Span_bar::width_callback)
1126         (Y-extent-callback . ())
1127         (layer . 0)
1128         (breakable . #t)
1129         (before-line-breaking-callback . ,Span_bar::before_line_breaking)
1130         ;; ugh duplication!
1131
1132         ;;
1133         ;; Ross. page 151 lists other values, we opt for a leaner look
1134         ;;
1135         (kern . 3.0)
1136         (thin-kern . 3.0)
1137         (hair-thickness . 1.6)
1138         (thick-thickness . 6.0)
1139         (meta . ((class . Item)
1140                  (interfaces . (span-bar-interface
1141                                 font-interface
1142                                 bar-line-interface))))))
1143
1144     (StanzaNumber
1145      . ((print-function . ,Text_interface::print)
1146         (font-series . bold)
1147         (padding . 1.0)
1148         (X-offset-callbacks . (,Side_position_interface::aligned_side))
1149         (direction . ,LEFT)
1150         (meta . ((class . Item)
1151                  (interfaces . (side-position-interface
1152                                 stanza-number-interface
1153                                 text-interface
1154                                 font-interface))))))
1155
1156     (StringNumber
1157      . (
1158         (print-function . ,print-circled-text-callback)
1159         (padding . 0.5)
1160         (staff-padding . 0.5)
1161         (self-alignment-X . 0)
1162         (self-alignment-Y . 0)
1163         (script-priority . 100)
1164         (font-encoding . fetaNumber)
1165         (font-size . -5)                ; don't overlap when next to heads.
1166         (meta . ((class . Item)
1167                  (interfaces . (string-number-interface
1168                                 font-interface
1169                                 text-script-interface
1170                                 text-interface
1171                                 side-position-interface
1172                                 self-alignment-interface
1173                                 item-interface))))))
1174
1175     (StaffSpacing
1176      . (
1177         (breakable . #t)
1178         (stem-spacing-correction . 0.4)
1179
1180         (meta . ((class . Item)
1181                  (interfaces . (spacing-interface
1182                                 staff-spacing-interface))))))
1183
1184     (SostenutoPedal
1185      . (
1186         (print-function . ,Text_interface::print)
1187         (direction . 1)
1188         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
1189         (no-spacing-rods . #t)
1190         (padding . 0.0) ;; padding relative to SostenutoPedalLineSpanner
1191         (font-shape . italic)
1192         (self-alignment-X . 0)
1193         (meta . ((class . Item)
1194                  (interfaces . (text-interface
1195                                 self-alignment-interface
1196                                 font-interface))))))
1197
1198     (SostenutoPedalLineSpanner
1199      . (
1200         (axes . (1))
1201         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
1202         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1203
1204         (padding . 1.2)
1205         (minimum-space . 1.0)
1206         (direction . -1)
1207         (meta . ((class . Spanner)
1208                  (interfaces . (piano-pedal-interface
1209                                 axis-group-interface
1210                                 side-position-interface))))))
1211
1212     (StaffSymbol
1213      . (
1214         (print-function . ,Staff_symbol::print)
1215         (line-count . 5)
1216         (ledger-line-thickness . (1.0 . 0.1))
1217         (layer . 0)
1218         (meta . ((class . Spanner)
1219                  (interfaces . (staff-symbol-interface))))))
1220
1221     (Stem
1222      . (
1223         ;; this list is rather long. Trim --hwn
1224         (before-line-breaking-callback . ,Stem::before_line_breaking)
1225         (print-function . ,Stem::print)
1226         (thickness . 1.3)
1227
1228         ;; 3.5 (or 3 measured from note head) is standard length
1229         ;; 32nd, 64th flagged stems should be longer
1230         (lengths . (3.5 3.5 3.5 4.5 5.0))
1231
1232         ;; Stems in unnatural (forced) direction should be shortened by
1233         ;; one staff space, according to [Roush & Gourlay].
1234         ;; Flagged stems we shorten only half a staff space.
1235         (stem-shorten . (1.0 0.5))
1236
1237         ;; default stem direction for note on middle line
1238         (neutral-direction . -1)
1239
1240         ;; FIXME.  3.5 yields too long beams (according to Ross and
1241         ;; looking at Baerenreiter examples) for a number of common
1242         ;; boundary cases.  Subtracting half a beam thickness fixes
1243         ;; this, but the bug may well be somewhere else.
1244
1245         ;; FIXME this should come from 'lengths
1246
1247         (beamed-lengths . (3.26 3.5 3.6))
1248
1249         ;; We use the normal minima as minimum for the ideal lengths,
1250         ;; and the extreme minima as abolute minimum length.
1251
1252         ;; The 'normal' minima
1253         (beamed-minimum-free-lengths . (1.83 1.5 1.25))
1254                                         ;(beamed-minimum-free-lengths . (2.0 1.83 1.25))
1255
1256         ;; The 'extreme case' minima
1257         (beamed-extreme-minimum-free-lengths . (2.0 1.25))
1258
1259         (X-offset-callbacks . (,Stem::offset_callback))
1260         (X-extent-callback . ,Stem::width_callback)
1261         (Y-extent-callback . ,Stem::height)
1262         (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
1263         (meta . ((class . Item)
1264                  (interfaces . (stem-interface
1265                                 font-interface))))))
1266
1267     (StemTremolo
1268      . (
1269         (print-function . ,Stem_tremolo::print)
1270         (Y-extent-callback . ,Stem_tremolo::height)
1271         (X-extent-callback . #f)
1272
1273         (beam-width . 1.6) ; staff-space
1274         (beam-thickness . 0.48) ; staff-space
1275         (meta . ((class . Item)
1276                  (interfaces . (stem-tremolo-interface))))))
1277
1278     (SustainPedal
1279      . (
1280         (no-spacing-rods . #t)
1281         (print-function . ,Sustain_pedal::print)
1282         (self-alignment-X . 0)
1283         (direction . 1)
1284         (padding . 0.0)  ;; padding relative to SustainPedalLineSpanner
1285         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
1286         (meta . ((class . Item)
1287                  (interfaces . (piano-pedal-interface
1288                                 text-spanner-interface
1289                                 text-interface
1290                                 self-alignment-interface
1291                                 font-interface))))))
1292
1293     (SustainPedalLineSpanner
1294      . (
1295         (axes . (1))
1296         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
1297         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1298
1299         (padding . 1.2)
1300         (staff-padding . 1.2)
1301         (minimum-space . 1.0)
1302         (direction . -1)
1303         (meta . ((class . Spanner)
1304                  (interfaces . (piano-pedal-interface
1305                                 axis-group-interface
1306                                 side-position-interface))))))
1307
1308     (System
1309      . (
1310         (axes . (0 1))
1311         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
1312         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
1313         (meta . ((class . System)
1314                  (interfaces . (system-interface
1315                                 axis-group-interface))))))
1316
1317     (SystemStartBrace
1318      . (
1319         (glyph . "brace")
1320         (print-function . ,System_start_delimiter::print)
1321         (collapse-height . 5.0)
1322         (font-encoding . fetaBraces)
1323         (Y-extent-callback . #f)
1324         (meta . ((class . Spanner)
1325                  (interfaces . (system-start-delimiter-interface
1326                                 font-interface))))))
1327
1328     (SystemStartBracket
1329      . (
1330         (Y-extent-callback . #f)
1331         (X-offset-callbacks . (,(lambda (g a) -0.8)))
1332         (print-function . ,System_start_delimiter::print)
1333         (glyph . "bracket")
1334         (collapse-height . 1)
1335         (thickness . 0.45)
1336         (meta . ((class . Spanner)
1337                  (interfaces . (font-interface
1338                                 system-start-delimiter-interface))))))
1339
1340     (SystemStartBar
1341      . (
1342         (Y-extent-callback . #f)
1343         (print-function . ,System_start_delimiter::print)
1344         (glyph . "bar-line")
1345         (thickness . 1.6)
1346         (after-line-breaking-callback . ,System_start_delimiter::after_line_breaking)
1347         (meta . ((class . Spanner)
1348                  (interfaces . (system-start-delimiter-interface))))))
1349
1350     (TabNoteHead
1351      . (
1352         (print-function . ,Text_interface::print)
1353         (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
1354         (font-size . -2)
1355         (stem-attachment-function . ,tablature-stem-attachment-function)
1356         (font-series . bold)
1357         (meta . ((class . Item)
1358                  (interfaces
1359                   . (rhythmic-head-interface
1360                      font-interface
1361                      note-head-interface
1362                      staff-symbol-referencer-interface
1363                      text-interface))))))
1364
1365     (TextScript
1366      . (
1367         (print-function . ,Text_interface::print)
1368         (no-spacing-rods . #t)
1369         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
1370         (direction . -1)
1371
1372         ;; sync with Fingering ?
1373         (padding . 0.5)
1374         (staff-padding . 0.5)
1375         (before-line-breaking-callback . ,Script_interface::before_line_breaking)
1376         (slur-padding . 0.5)
1377         (script-priority . 200)
1378         ;; todo: add X self alignment?
1379         (meta . ((class . Item)
1380                  (interfaces . (text-script-interface
1381                                 text-interface
1382                                 side-position-interface
1383                                 font-interface))))))
1384
1385     (TextSpanner
1386      . (
1387         (print-function . ,Text_spanner::print)
1388         (font-shape . italic)
1389         (style . dashed-line)
1390         (staff-padding . 0.8)
1391         (dash-fraction . 0.2)
1392         (dash-period . 3.0)
1393         (direction . 1)
1394         (meta . ((class . Spanner)
1395                  (interfaces . (text-spanner-interface
1396                                 side-position-interface
1397                                 font-interface))))))
1398
1399     (Tie
1400      . (
1401         (print-function . ,Tie::print)
1402         (spacing-procedure . ,Spanner::set_spacing_rods)
1403         (staffline-clearance . 0.35)
1404         (details . ((ratio . 0.333) (height-limit . 1.0)))
1405         (thickness . 1.0)
1406         (x-gap . -0.1)
1407         (y-offset . 0.6)
1408         (minimum-length . 2.5)
1409         (meta . ((class . Spanner)
1410                  (interfaces . (tie-interface))))))
1411
1412     (TieColumn
1413      . (
1414         (after-line-breaking-callback . ,Tie_column::after_line_breaking)
1415         (before-line-breaking-callback . ,Tie_column::before_line_breaking)
1416         (X-extent-callback . #f)
1417         (Y-extent-callback . #f)
1418         (meta . ((class . Spanner)
1419                  (interfaces . (tie-column-interface))))))
1420
1421     (TimeSignature
1422      . (
1423         (print-function . ,Time_signature::print)
1424         (break-align-symbol . time-signature)
1425         (break-visibility . ,all-visible)
1426         (space-alist . (
1427                         (first-note . (fixed-space . 2.0))
1428                         (right-edge . (extra-space . 0.5))
1429                         (staff-bar . (minimum-space . 2.0))))
1430         (breakable . #t)
1431         (style . C)
1432         (meta . ((class . Item)
1433                  (interfaces . (time-signature-interface
1434                                 break-aligned-interface
1435                                 font-interface))))))
1436
1437     (TrillSpanner
1438      . (
1439         (print-function . ,Dynamic_text_spanner::print)
1440         (edge-text . ,(cons (make-musicglyph-markup "scripts.trill")
1441                             ""))
1442         (style . trill)
1443         (staff-padding . 1.0)
1444         (padding . 0.5)
1445         (direction . 1)
1446         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1447         (meta . ((class . Spanner)
1448                  (interfaces . (text-spanner-interface
1449                                 side-position-interface
1450                                 font-interface))))))
1451
1452     (TrillPitchAccidental
1453      . ((X-offset-callbacks . (,Side_position_interface::aligned_side))
1454         (padding . 0.2)
1455         (direction . ,LEFT)
1456         (font-size . -4)
1457         (print-function . ,Accidental_interface::print)
1458         (meta . ((class . Item)
1459                  (interfaces . (item-interface
1460                                 accidental-interface
1461                                 side-position-interface
1462                                 font-interface))))))
1463
1464     (TrillPitchGroup
1465      . ((X-offset-callbacks . (,Side_position_interface::aligned_side))
1466         (axes . (,X))
1467         (font-size . -4)
1468         (print-function . ,parenthesize-elements)
1469         (direction . ,RIGHT)
1470         (padding . 0.3)
1471         (meta . ((class . Item)
1472                  (interfaces . (side-position-interface
1473                                 note-head-interface
1474                                 rhythmic-head-interface
1475                                 font-interface
1476                                 accidental-interface
1477                                 axis-group-interface))))))
1478
1479     (TrillPitchHead
1480      . ((print-function . ,Note_head::print)
1481         (duration-log . 2)
1482         (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
1483         (font-size . -4)
1484         (meta . ((class . Item)
1485                  (interfaces . (item-interface
1486                                 rhythmic-head-interface
1487                                 font-interface
1488                                 pitched-trill-interface
1489                                 ledgered-interface
1490                                 staff-symbol-referencer-interface))))))
1491
1492     (TupletBracket
1493      . (
1494         (padding . 1.1)
1495         (thickness . 1.6)
1496         (edge-height . (0.7 . 0.7))
1497         (shorten-pair . (-0.2 . -0.2))
1498         (before-line-breaking-callback . ,Tuplet_bracket::before_line_breaking)
1499         (after-line-breaking-callback . ,Tuplet_bracket::after_line_breaking)
1500         (print-function . ,Tuplet_bracket::print)
1501         (font-shape . italic)
1502
1503         (font-size . -2)
1504         (meta . ((class . Spanner)
1505                  (interfaces . (text-interface
1506                                 line-interface
1507                                 tuplet-bracket-interface
1508                                 font-interface))))))
1509
1510     (UnaCordaPedal
1511      . (
1512         (print-function . ,Text_interface::print)
1513         (font-shape . italic)
1514         (no-spacing-rods . #t)
1515         (self-alignment-X . 0)
1516         (direction . 1)
1517         (padding . 0.0)  ;; padding relative to UnaCordaPedalLineSpanner
1518         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
1519         (meta . ((class . Item)
1520                  (interfaces . (text-interface
1521                                 self-alignment-interface
1522                                 font-interface))))))
1523
1524     (UnaCordaPedalLineSpanner
1525      . (
1526         (axes . (1))
1527         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
1528         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1529         (padding . 1.2)
1530         (staff-padding . 1.2)
1531         (minimum-space . 1.0)
1532         (direction . -1)
1533         (meta . ((class . Spanner)
1534                  (interfaces . (piano-pedal-interface
1535                                 axis-group-interface
1536                                 side-position-interface))))))
1537
1538     (VaticanaLigature
1539      . (
1540         (thickness . 0.6)
1541         (flexa-width . 2.0)
1542         (ligature-primitive-callback . ,Vaticana_ligature::brew_ligature_primitive)
1543         (print-function . ,Vaticana_ligature::print)
1544         (meta . ((class . Spanner)
1545                  (interfaces . (vaticana-ligature-interface
1546                                 font-interface))))))
1547
1548     (VerticalAlignment
1549      . (
1550         (axes . (1))
1551         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
1552         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
1553         (stacking-dir . -1)
1554         (meta . ((class . Spanner)
1555                  (interfaces . (align-interface
1556                                 axis-group-interface))))))
1557
1558     (VerticalAxisGroup
1559      . (
1560         (axes . (1))
1561         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
1562         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
1563
1564         (meta . ((class . Spanner)
1565                  (interfaces . (axis-group-interface
1566                                 vertically-spaceable-interface))))))
1567
1568     (VocalName
1569      . (
1570         (breakable . #t)
1571         (Y-offset-callbacks . (,Side_position_interface::aligned_on_support_refpoints))
1572         (direction . 0)
1573         (space-alist . ((left-edge . (extra-space . 1.0))))
1574         (break-align-symbol . instrument-name)
1575         (print-function . ,Text_interface::print)
1576         (break-align-symbol . clef)
1577         (break-visibility . ,begin-of-line-visible)
1578         (baseline-skip . 2)
1579         (meta . ((class . Item)
1580                  (interfaces . (font-interface
1581                                 self-alignment-interface
1582                                 side-position-interface
1583                                 text-interface
1584                                 break-aligned-interface))))))
1585
1586     (VoltaBracket
1587      . (
1588         (print-function . ,Volta_bracket_interface::print)
1589         (direction . 1)
1590         (padding . 1)
1591         (font-encoding . fetaNumber)
1592         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1593         (thickness . 1.6)  ;;  linethickness
1594         (height . 2.0) ;; staffspace;
1595         (minimum-space . 5)
1596         (font-size . -4)
1597         (meta . ((class . Spanner)
1598                  (interfaces . (volta-bracket-interface
1599                                 line-interface
1600                                 text-interface
1601                                 side-position-interface
1602                                 font-interface))))))
1603
1604     (VoiceFollower
1605      . (
1606         (style . line)
1607         (gap . 0.5)
1608         (breakable . #t)
1609         (X-extent-callback . #f)
1610         (Y-extent-callback . #f)
1611         (print-function . ,Line_spanner::print)
1612         (after-line-breaking-callback . ,Line_spanner::after_line_breaking)
1613         (meta . ((class . Spanner)
1614                  (interfaces . (line-spanner-interface
1615                                 line-interface))))))))
1616
1617 (define (completize-grob-entry x)
1618   "Transplant assoc key into 'name entry of 'meta of X.  Set interfaces for Item, Spanner etc.
1619 "
1620   ;;  (display (car x))
1621   ;;  (newline)
1622   (let* ((name-sym  (car x))
1623          (grob-entry (cdr x))
1624          (meta-entry (cdr (assoc 'meta grob-entry)))
1625          (class (cdr (assoc 'class meta-entry)))
1626          (ifaces-entry
1627           (cdr (assoc 'interfaces meta-entry))))
1628
1629     (cond
1630      ((eq? 'Item class)
1631       (set! ifaces-entry (cons 'item-interface ifaces-entry)))
1632      ((eq? 'Spanner class)
1633       (set! ifaces-entry (cons 'spanner-interface ifaces-entry)))
1634      ((eq? 'Paper_column class)
1635       (set! ifaces-entry (cons 'item-interface
1636                                (cons 'paper-column-interface ifaces-entry))))
1637      ((eq? 'System class)
1638       (set! ifaces-entry (cons 'system-interface
1639                                (cons 'spanner-interface ifaces-entry))))
1640      (else
1641       (ly:warning "Unknown class ~a" class)))
1642     (set! ifaces-entry (cons 'grob-interface ifaces-entry))
1643
1644     (set! meta-entry (assoc-set! meta-entry 'name name-sym))
1645     (set! meta-entry (assoc-set! meta-entry 'interfaces
1646                                  ifaces-entry))
1647     (set! grob-entry (assoc-set! grob-entry 'meta meta-entry))
1648     (cons name-sym grob-entry)))
1649
1650 (set! all-grob-descriptions (map completize-grob-entry all-grob-descriptions))
1651
1652 ;;  (display (map pair? all-grob-descriptions))
1653
1654 ;; make sure that \property Foo.Bar =\turnOff doesn't complain
1655
1656 (map (lambda (x)
1657        ;; (display (car x)) (newline)
1658
1659        (set-object-property! (car x) 'translation-type? list?)
1660        (set-object-property! (car x) 'is-grob? #t))
1661      all-grob-descriptions)
1662
1663 (set! all-grob-descriptions (sort all-grob-descriptions alist<?))
1664