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