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