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