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