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