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