]> git.donarmstrong.com Git - lilypond.git/blob - scm/grob-description.scm
use breve rests for measure lengths
[lilypond.git] / scm / grob-description.scm
1 ;;;; grob-description.scm -- part of generated backend documentation
2 ;;;;
3 ;;;;  source file of the GNU LilyPond music typesetter
4 ;;;; 
5 ;;;; (c) 1998--2002  Han-Wen Nienhuys <hanwen@cs.uu.nl>
6 ;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
7
8 ;;;; distances are given in stafflinethickness (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 (define-public all-grob-descriptions
16   `(
17     (Accidental
18      . (
19         (molecule-callback . ,Accidental_interface::brew_molecule)
20         (font-family . music)
21         (cautionary-style . parentheses)
22         (after-line-breaking-callback . ,Accidental_interface::after_line_breaking)             (meta . ((interfaces . (item-interface accidental-interface font-interface))))
23         ))
24     (AccidentalPlacement
25      . (
26         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
27         (left-padding . 0.3)
28
29         ;; this is quite small, but it is very ugly to have
30         ;; accs closer to the previous note than to the next one.
31         (right-padding . 0.15)
32         (meta . ((interfaces . (item-interface accidental-placement-interface))))
33         ))
34
35     (Ambitus
36      . (
37        (breakable . #t)
38        (break-align-symbol . ambitus)
39        (molecule-callback . ,Ambitus::brew_molecule)
40        (font-family . music)
41        (note-head-style . "noteheads-2")
42        (visibility-lambda . ,begin-of-line-visible)
43        (join-heads . #t)
44        (space-alist . (
45                        (clef . (extra-space . 0.0))
46                        (key-signature . (extra-space . 0.0))
47                        (staff-bar . (extra-space . 0.0))
48                        (time-signature . (extra-space . 0.0)) 
49                        (first-note . (extra-space . 0.0))
50                        ))
51        (meta . ((interfaces . (ambitus-interface staff-symbol-referencer-interface break-aligned-interface item-interface  font-interface))))
52        ))
53
54     (Arpeggio
55      . (
56         (X-extent-callback . ,Arpeggio::width_callback)
57         (Y-extent-callback . #f)               
58         (molecule-callback . ,Arpeggio::brew_molecule)
59         (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
60         (X-offset-callbacks . (,Side_position_interface::aligned_side))
61         (direction . -1)
62         (staff-position . 0.0)
63         (meta . ((interfaces . (arpeggio-interface staff-symbol-referencer-interface side-position-interface item-interface font-interface))))
64         ))
65
66     (BarLine
67      . (
68         (break-align-symbol . staff-bar)
69         (glyph . "|")
70         (break-glyph-function . ,default-break-barline)
71         (bar-size-procedure . ,Bar_line::get_staff_bar_size)
72         (molecule-callback . ,Bar_line::brew_molecule)     
73         (break-visibility . ,all-visible)
74         (breakable . #t)
75         (before-line-breaking-callback . ,Bar_line::before_line_breaking)
76         (space-alist . (
77                         (time-signature . (extra-space . 0.75)) 
78                         (custos . (minimum-space . 2.0))
79                         (clef .   (minimum-space . 1.0))
80                         (first-note . (extra-space . 1.3))
81                         ))
82
83         ;;
84         ;; Ross. page 151 lists other values, we opt for a leaner look
85         ;; 
86         (kern . 3.0)
87         (thin-kern . 3.0)
88         (hair-thickness . 1.6)
89         (thick-thickness . 6.0)
90         (meta . ((interfaces . (bar-line-interface item-interface   break-aligned-interface font-interface))))
91         ))
92
93     
94     (BarNumber
95      . (
96         (molecule-callback . ,Text_item::brew_molecule)
97         (breakable . #t)
98         (break-visibility . ,begin-of-line-visible)
99         (padding . 1.0)
100         (direction . 1)
101         (font-family . roman)
102         (font-relative-size . -1)
103         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
104         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
105         (self-alignment-X . 1)
106         (extra-offset . (1.3 . 0))
107         (meta .
108               ((interfaces . (side-position-interface
109                               text-interface
110                               self-alignment-interface
111                               font-interface item-interface  break-aligned-interface))))
112
113              ))
114
115     (BassFigure
116      . (
117         (molecule-callback . ,brew-bass-figure)
118         (Y-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
119         (direction . 0)
120         (font-family . number)
121         (font-relative-size . -1)
122         (padding . 0.1)
123         (kern . 0.2)
124         (thickness . 1.0)
125         (meta . ((interfaces . (text-interface bass-figure-interface item-interface self-alignment-interface font-interface))))
126         ))
127     (Beam
128      . (
129         ;; todo: clean this up a bit: the list is getting
130         ;; rather long.
131         (molecule-callback . ,Beam::brew_molecule)
132         (concaveness-gap . 2.0)
133         (concaveness-threshold . 0.08)
134         (positions . (#f . #f))
135         (position-callbacks . (,Beam::least_squares
136                                ,Beam::check_concave
137                                ,Beam::slope_damping
138                                ,Beam::shift_region_to_valid
139                                ,Beam::quanting
140                               ))
141
142         ;; TODO: should be in SLT.
143         (thickness . 0.48) ; in staff-space
144         (before-line-breaking-callback . ,Beam::before_line_breaking)
145         (after-line-breaking-callback . ,Beam::after_line_breaking)
146         (neutral-direction . -1)
147         (dir-function . ,beam-dir-majority-median)
148         
149         ;; Whe have some unreferenced problems here.
150         ;;
151         ;; If we shorten beamed stems less than normal stems (1 staffspace),
152         ;; or high order less than 8th beams, patterns like
153         ;;     c''4 [c''8 c''] c''4 [c''16 c]
154         ;; are ugly (different stem lengths).
155         ;;
156         ;; But if we shorten 16th beams as much as 8th beams, a single
157         ;; forced 16th beam looks *very* short.
158
159         ;; We choose to shorten 8th beams the same as single stems,
160         ;; and high order beams less than 8th beams, so that all
161         ;; isolated shortened beams look nice and a bit shortened,
162         ;; sadly possibly breaking patterns with high order beams.
163         (beamed-stem-shorten . (1.0 0.5 0.25))
164         
165         (outer-stem-length-limit . 0.2)
166         (slope-limit . 0.2)
167         (flag-width-function . ,beam-flag-width-function)
168         (damping . 1)
169         (auto-knee-gap . 5.5)
170         (font-name . "cmr10")
171         (space-function . ,Beam::space_function)
172         (meta . ((interfaces . (staff-symbol-referencer-interface beam-interface spanner-interface))))
173         ))
174
175     (BreakAlignment
176      . (
177         (breakable . #t)
178         (stacking-dir . 1)
179         (axes . (0))
180         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
181         (meta . ((interfaces . (break-alignment-interface item-interface axis-group-interface)))))
182         )
183
184     (BreakAlignGroup
185      . (
186         (axes  . (0))
187         (X-offset-callbacks . (,Break_align_interface::alignment_callback))
188         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
189         (meta . ((interfaces . (break-aligned-interface item-interface axis-group-interface item-interface ))))
190         ))
191
192     (BreathingSign
193      . (
194         (break-align-symbol . breathing-sign)
195         (breakable . #t)
196         (space-alist . (
197                         (ambitus . (extra-space . 2.0))
198                         (key-signature . (minimum-space . 1.5))
199                         (staff-bar . (minimum-space . 1.5))
200                         (clef . (minimum-space . 2.0))
201                         (first-note . (minimum-space . 1.0))
202                         ))
203         (molecule-callback . ,Text_item::brew_molecule)
204         (lookup . name)
205         (font-family . music)
206         (text . "scripts-rcomma")
207         (Y-offset-callbacks . (,Breathing_sign::offset_callback))
208         (break-visibility . ,begin-of-line-invisible)
209         (meta . ((interfaces . (break-aligned-interface breathing-sign-interface text-interface font-interface item-interface ))))
210         ))
211
212     (Clef
213      . (
214         (molecule-callback . ,Clef::brew_molecule)
215         (before-line-breaking-callback . ,Clef::before_line_breaking)
216         (breakable . #t)
217         (font-family . music)      
218         (break-align-symbol . clef)
219         (break-visibility . ,begin-of-line-visible)
220         (space-alist . (
221                         (ambitus . (extra-space . 2.0))
222                         (staff-bar . (minimum-space .  3.7))
223                         (key-signature . (minimum-space . 4.0))
224                         (time-signature . (minimum-space . 4.2))
225                         (first-note . (minimum-space . 5.0))
226                         (next-note . (extra-space . 0.5))                       
227                         ))
228         (Y-offset-callbacks  . (,Staff_symbol_referencer::callback)) 
229         (meta . ((interfaces . (clef-interface staff-symbol-referencer-interface font-interface break-aligned-interface item-interface ))))
230         ))
231
232     (ChordName
233      . (
234         (molecule-callback . ,Chord_name::brew_molecule)
235         (after-line-breaking-callback . ,Chord_name::after_line_breaking)
236         (chord-name-function . ,default-chord-name-function)
237         (font-family . roman)
238         (meta . ((interfaces . (font-interface text-interface chord-name-interface item-interface ))))
239         ))
240
241     (Custos
242      . (
243         (break-align-symbol . custos)
244         (breakable . #t)
245         (molecule-callback . ,Custos::brew_molecule)
246         (break-visibility . ,end-of-line-visible)
247         (style . vaticana)
248         (neutral-position . 0)
249         (neutral-direction . -1)
250         (adjust-if-on-staffline . #t)
251         (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
252         (font-family . ancient)
253         (space-alist . (
254                         (first-note . (minimum-space . 0.0))
255                         ))
256         (meta . ((interfaces
257                   . (custos-interface staff-symbol-referencer-interface
258                                       font-interface
259                                       break-aligned-interface item-interface ))))
260         ))
261
262
263     (DotColumn
264      . (
265         (axes . (0))
266         (direction . 1)
267         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
268         (X-offset-callbacks . (,Dot_column::side_position))
269         (meta . ((interfaces . (dot-column-interface axis-group-interface item-interface ))))
270         ))
271
272     (Dots
273      . (
274         (molecule-callback . ,Dots::brew_molecule)
275         (dot-count . 1)
276         (Y-offset-callbacks  . (,Dots::quantised_position_callback ,Staff_symbol_referencer::callback))
277         (meta . ((interfaces . (font-interface staff-symbol-referencer-interface dots-interface item-interface ))))
278         ))
279
280     (DoublePercentRepeat .
281                          (
282                           (molecule-callback . ,Percent_repeat_item_interface::double_percent)
283                           (breakable . #t)
284                           (slope . 1.0)
285                           (font-family . music)
286                           (width . 2.0)
287                           (thickness . 0.48)
288                           (break-align-symbol . staff-bar)
289                           (break-visibility . ,begin-of-line-invisible)
290                           (meta . ((interfaces . (font-interface
291                                                   break-aligned-interface
292                                                   percent-repeat-interface item-interface ))))
293                          ))
294
295     (DynamicText
296      . (
297         (Y-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
298         (molecule-callback . ,Text_item::brew_molecule)
299         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self
300                                ,Self_alignment_interface::centered_on_parent))
301         (self-alignment-X . 0)
302         (no-spacing-rods . #t)
303         (script-priority . 100)
304         (font-series . bold)
305         (font-family . dynamic)
306         (font-shape . italic)
307         (self-alignment-Y . 0)
308         (meta . ((interfaces . (font-interface text-interface self-alignment-interface  dynamic-interface script-interface item-interface ))))
309         ))
310
311     (DynamicLineSpanner
312      . (
313         (axes . (1))
314         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)      
315         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
316         (padding . 0.6)
317         (minimum-space . 1.2)
318         (direction . -1)
319         (meta . ((interfaces . (dynamic-interface axis-group-interface side-position-interface spanner-interface))))
320         ))
321
322     (LeftEdge
323      . (
324         (break-align-symbol . left-edge)
325         (X-extent-callback . ,Grob::point_dimension_callback)
326         (breakable . #t)
327         (space-alist . (
328                         (custos . (extra-space . 0.0))
329                         (ambitus . (extra-space . 2.0))
330                         (time-signature . (extra-space . 0.0)) 
331                         (staff-bar . (extra-space . 0.0))
332                         (breathing-sign . (minimum-space  . 0.0))
333                         (clef . (extra-space . 1.0))
334                         (first-note . (extra-space . 1.0))
335                         (key-signature . (extra-space . 0.0))
336                         ))
337         (meta . ((interfaces . (break-aligned-interface item-interface ))))
338         ))
339
340     (Fingering
341      . (
342         (molecule-callback . ,Text_item::brew_molecule)
343         (X-offset-callbacks . (,Self_alignment_interface::centered_on_parent
344                                ,Self_alignment_interface::aligned_on_self))
345         (padding . 0.6)
346         ;;              (direction . -1)
347         (self-alignment-X . 0)
348         (self-alignment-Y . 0)
349         (script-priority . 100)
350         (font-family . number)
351         (font-relative-size . -3)
352         (font-shape . upright)
353         (meta . ((interfaces . (finger-interface font-interface text-script-interface text-interface side-position-interface self-alignment-interface item-interface ))))
354         ))
355
356
357     (HaraKiriVerticalGroup
358      . (
359         (Y-offset-callbacks . (,Hara_kiri_group_spanner::force_hara_kiri_callback))
360         (Y-extent-callback . ,Hara_kiri_group_spanner::y_extent)
361         (axes . (1))
362         (meta . ((interfaces . (axis-group-interface hara-kiri-group-interface item-interface  spanner-interface))))
363         ))
364
365     (Hairpin
366      . (
367         (molecule-callback . ,Hairpin::brew_molecule)
368         (thickness . 1.0)
369         (height . 0.6666)
370         (spacing-procedure . ,Spanner::set_spacing_rods)
371         (minimum-length . 2.0)
372         (if-text-padding . 1.0)
373         (width-correct . -1.0)
374
375         (dash-thickness . 1.2)
376         (dash-length . 4.0)
377         (self-alignment-Y . 0)
378         (Y-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
379         (meta . ((interfaces . (hairpin-interface self-alignment-interface dynamic-interface spanner-interface))))
380         ))
381
382     (HorizontalBracket
383      . (
384         (thickness . 1.0)
385         (molecule-callback . ,Horizontal_bracket::brew_molecule)
386         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
387         (padding . 0.2)
388         (direction . -1)
389         (meta . ((interfaces . (horizontal-bracket-interface spanner-interface))))
390         ))
391     (InstrumentName
392      . (
393         (breakable . #t)
394         (Y-offset-callbacks . (,Self_alignment_interface::aligned_on_self
395                                ,Side_position_interface::aligned_on_support_refpoints))
396         ;; huh? what's this for?
397         (direction . 0)
398         (space-alist . (
399                         (left-edge . (extra-space . 1.0))
400                         ))
401
402         (self-alignment-Y . 0)
403         (molecule-callback . ,Text_item::brew_molecule)         
404         (break-align-symbol . instrument-name)
405         (break-visibility . ,begin-of-line-visible)
406         (baseline-skip . 2)
407         (font-family . roman)
408         (meta . ((interfaces . (font-interface self-alignment-interface side-position-interface text-interface break-aligned-interface item-interface ))))
409         ))
410
411     (KeySignature
412      . (
413         (molecule-callback . ,Key_signature_interface::brew_molecule)
414         (space-alist . (
415                         (time-signature . (extra-space . 1.25))
416                         (staff-bar .  (extra-space . 1.1))
417                         (first-note . (extra-space . 2.5))
418                         ))
419         (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
420         (break-align-symbol . key-signature)
421         (break-visibility . ,begin-of-line-visible)
422         (breakable . #t)
423         (meta . ((interfaces . (key-signature-interface  font-interface  break-aligned-interface item-interface ))))
424         ))
425
426     (Ligature
427      . (
428         (molecule-callback . ,Ligature_bracket::brew_molecule)
429         (meta . ((interfaces . (ligature-interface))))
430         ))
431
432     (LigatureBracket
433      . (
434         (width . 0.75)
435         (height . 0.5)
436         (ligature-primitive-callback . ,Note_head::brew_molecule)
437         (molecule-callback . ,Ligature_bracket::brew_molecule)
438         (meta . ((interfaces . (ligature-bracket-interface spanner-interface))))
439         ))
440
441     (LigatureHead
442      . (
443         (ligature-primitive-callback . ,Note_head::brew_molecule)
444         (molecule-callback . ,Ligature_head::brew_molecule)
445         (Y-offset-callbacks  . (,Staff_symbol_referencer::callback))
446         (stem-attachment-function . ,note-head-style->attachment-coordinates)
447         (font-family . ancient)
448         (style . mensural)
449         (glyph-name-procedure . ,find-notehead-symbol)
450         (meta . ((interfaces . (ligature-head-interface rhythmic-head-interface
451                                                         font-interface
452                                                         note-head-interface staff-symbol-referencer-interface))))
453         ))
454
455     (LyricHyphen
456      . (
457         (thickness . 1.0)
458         (height . 0.4)
459         (minimum-length .  0.5) 
460         (maximum-length .  100)
461         (molecule-callback . ,Hyphen_spanner::brew_molecule)
462         (Y-extent-callback . ,Grob::point_dimension_callback)
463         (meta . ((interfaces . (lyric-hyphen-interface spanner-interface))))
464         ))
465
466     (LyricExtender
467      . (
468         (molecule-callback . ,Lyric_extender::brew_molecule)
469         (height . 0.8) ; stafflinethickness;
470         (right-trim-amount . 0.5)
471         (Y-extent-callback . ,Grob::point_dimension_callback)
472         (meta . ((interfaces . (lyric-extender-interface spanner-interface))))
473         ))
474
475     (LyricText
476      . (
477         (molecule-callback . ,Text_item::brew_molecule)
478         (X-offset-callbacks . (,Self_alignment_interface::centered_on_parent
479                                ,Self_alignment_interface::aligned_on_self))
480         (self-alignment-X . 0)
481         (word-space . 0.6)
482         (ignore-length-mismatch . #f)
483         (begin-alignment . 4)
484         (end-alignment . 2)
485         (font-family . roman)
486         (font-shape . upright)
487         
488         ;; duh, side-position-interface?
489         (meta . ((interfaces . (lyric-syllable-interface self-alignment-interface text-interface font-interface item-interface ))))
490         ))
491
492     (MensuralLigature
493      . (
494         (thickness . 1.4)
495         (flexa-width . 2.0)
496         (ligature-primitive-callback . ,Mensural_ligature::brew_ligature_primitive)
497         (molecule-callback . ,Mensural_ligature::brew_molecule)
498         (font-family . ancient)
499         (meta . ((interfaces . (mensural-ligature-interface font-interface))))
500         ))
501
502     (Porrectus
503      . (
504         (style . mensural)
505         (auto-properties . #f)
506         (solid . #f)
507         (width . 2.4)
508         (thickness . 1.0)
509         (add-stem . #t)
510         (direction . 1)
511         (molecule-callback . ,Porrectus::brew_molecule)
512         (meta . ((interfaces . (porrectus-interface))))
513         ))
514
515     (RehearsalMark
516      . (
517         (molecule-callback . ,Text_item::brew_molecule)
518         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
519         (Y-offset-callbacks . (,Side_position_interface::aligned_side)) 
520         (self-alignment-X . 0)
521
522         (direction . 1)
523         (breakable . #t)
524         (font-family . roman)
525         (baseline-skip . 2)
526         (break-visibility . ,end-of-line-invisible)
527         (padding . 0.8)
528         (meta . ((interfaces . (text-interface side-position-interface font-interface mark-interface self-alignment-interface item-interface ))))
529         ))
530
531     (MultiMeasureRest
532      . (
533         (spacing-procedure . ,Multi_measure_rest::set_spacing_rods)
534         (molecule-callback . ,Multi_measure_rest::brew_molecule)
535         (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
536         (staff-position . 0)
537         (expand-limit . 10)
538         (number-threshold . 1)
539         (padding . 1)
540         (thickness . 6.6)
541         (use-breve-rest . #f)
542         (font-family . number)
543         (padding . 1)
544         (meta . ((interfaces . (multi-measure-rest-interface rest-interface font-interface staff-symbol-referencer-interface spanner-interface))))
545         ))
546
547     (NoteCollision
548      . (
549         (axes . (0 1))
550         ;; Ugh, should not be hard-coded. 
551         (note-width . 1.321)
552         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
553         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)      
554         (meta . ((interfaces . (note-collision-interface axis-group-interface item-interface ))))
555         ))
556
557     (NoteColumn
558      . (
559         (axes . (0 1))
560         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
561         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)      
562         (meta . ((interfaces . (axis-group-interface note-column-interface item-interface ))))
563         ))
564
565     (NoteHead
566      . (
567         (style . default)
568         (molecule-callback . ,Note_head::brew_molecule)
569         (glyph-name-procedure . ,find-notehead-symbol)
570         (Y-offset-callbacks  . (,Staff_symbol_referencer::callback))
571         (stem-attachment-function . ,note-head-style->attachment-coordinates)
572         (meta . ((interfaces . (rhythmic-head-interface font-interface note-head-interface staff-symbol-referencer-interface item-interface ))))
573         ))
574
575     (Glissando
576      . (
577         (type . line)
578         (gap . 0.5)
579         (breakable . #t)
580         (X-extent-callback . #f)
581         (Y-extent-callback . #f)                         
582         (molecule-callback . ,Line_spanner::brew_molecule)
583         (meta . ((interfaces . (line-spanner-interface spanner-interface))))
584         ))
585
586     (VoiceFollower
587      . (
588         (type . line)
589         (gap . 0.5)
590         (breakable . #t)
591         (X-extent-callback . #f)
592         (Y-extent-callback . #f)                         
593         (molecule-callback . ,Line_spanner::brew_molecule)
594         (meta . ((interfaces . (line-spanner-interface spanner-interface))))
595         ))
596
597     (NoteName
598      . (
599         (molecule-callback . ,Text_item::brew_molecule)
600         (font-family . roman)
601         (meta . ((interfaces . (note-name-interface text-interface font-interface item-interface ))))
602         ))
603
604     (OctavateEight
605      . (
606         (self-alignment-X . 0)
607         (text . "8")
608         (break-visibility . ,begin-of-line-visible)
609         (X-offset-callbacks . (,Self_alignment_interface::centered_on_parent ,Self_alignment_interface::aligned_on_self))
610         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
611         (molecule-callback . ,Text_item::brew_molecule)
612         (font-shape . italic)
613         (padding . 0.4)
614         (font-relative-size . -2)
615         (font-family . roman)
616         (meta . ((interfaces . (text-interface self-alignment-interface side-position-interface font-interface item-interface ))))
617         ))
618
619     (PaperColumn
620      . (
621         (axes . (0))
622         (before-line-breaking-callback . ,Paper_column::before_line_breaking)
623         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
624
625 ;               (molecule-callback . ,Paper_column::brew_molecule) (font-name . "cmr8") (Y-extent-callback . #f)
626         (meta . ((interfaces . (paper-column-interface axis-group-interface spaceable-grob-interface item-interface ))))
627         ))
628
629     (PhrasingSlur
630      . (
631         (molecule-callback . ,Slur::brew_molecule)
632         (thickness . 1.2)               
633         (spacing-procedure . ,Spanner::set_spacing_rods)                
634         (minimum-length . 1.5)
635         (after-line-breaking-callback . ,Slur::after_line_breaking)
636         (extremity-rules . ,default-slur-extremity-rules)
637         (extremity-offset-alist . ,default-phrasing-slur-extremity-offset-alist)
638         (de-uglify-parameters . (1.5  0.8  -2.0))
639         (Y-extent-callback . ,Slur::height)
640         (height-limit . 2.0)
641         (ratio . 0.333)
642         (beautiful . 0.5)
643         (y-free . 0.75)
644         (attachment . (#f . #f))
645         (attachment-offset . ((0 . 0) . (0 . 0)))
646         (slope-limit . 0.8)
647         (details . ((force-blowfit . 0.5)
648                     (bezier-pct-c0 . -0.2) (bezier-pct-c3 . 0.000006)
649                     (bezier-pct-out-max . 0.8) (bezier-pct-in-max . 1.2)
650                     (bezier-area-steps . 1.0)))
651         (meta . ((interfaces . (slur-interface spanner-interface))))
652         ))
653
654     (NonMusicalPaperColumn
655      . (
656         (axes . (0))
657         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
658         (before-line-breaking-callback . ,Paper_column::before_line_breaking)
659         ;; debugging stuff: print column number.
660 ;       (molecule-callback . ,Paper_column::brew_molecule) (font-name . "cmr8") (Y-extent-callback . #f)
661
662
663         (meta .  ((interfaces . (paper-column-interface axis-group-interface spaceable-grob-interface item-interface ))))
664         ))
665
666     (PercentRepeat
667      . (
668         (spacing-procedure . ,Multi_measure_rest::set_spacing_rods)
669         (molecule-callback . ,Multi_measure_rest::percent)
670         (slope . 1.0)
671         (thickness . 0.48)
672         (minimum-width . 12.5) ; staffspace
673         (font-family . music)
674         (meta . ((interfaces . (multi-measure-rest-interface  spanner-interface font-interface percent-repeat-interface))))
675         ))
676
677     (PianoPedalBracket   ;; an example of a text spanner
678      . (
679         (molecule-callback . ,Text_spanner::brew_molecule)
680         (font-family . roman)
681         (type . line)
682         (if-text-padding . 1.0)
683         (width-correct . 0)
684         (outer . #t)
685         (direction . -1)
686         (edge-widen . (0.5 . 0.5))
687         (edge-height . (1.0 . 1.0))
688         (shorten-pair . (0.0 . 0.0))
689         (thickness .  1.0)
690         (meta . ((interfaces . (text-spanner-interface piano-pedal-interface spanner-interface))))
691         ))
692
693     (RepeatSlash
694      . (
695         (molecule-callback . , Percent_repeat_item_interface::beat_slash)
696         (thickness . 0.48)
697         (slope . 1.7)
698         (meta . ((interfaces . (percent-repeat-interface item-interface ))))
699         ))
700     (Rest
701      . (
702         (after-line-breaking-callback . ,Rest::after_line_breaking)
703         (X-extent-callback . ,Rest::extent_callback)
704         (Y-extent-callback . ,Rest::extent_callback)            
705         (molecule-callback . ,Rest::brew_molecule)
706         (Y-offset-callbacks . (,Staff_symbol_referencer::callback)) 
707         (minimum-beam-collision-distance . 0.75)
708         (meta . (
709                  (interfaces . (font-interface
710                                 rhythmic-head-interface
711                                 staff-symbol-referencer-interface
712                                 rest-interface item-interface ))
713                 ))))
714
715     (RestCollision
716      . (
717         (minimum-distance . 0.75)
718         (meta . ((interfaces . (rest-collision-interface item-interface ))))
719         ))
720
721     (Script
722      . (
723         ;; don't set direction here: it breaks staccato.
724         (molecule-callback . ,Script_interface::brew_molecule)
725
726         ;; This value is sensitive: if too large, staccato dots will move a
727         ;; space a away.
728         (padding . 0.25)
729         ;; (script-priority . 0) priorities for scripts, see script.scm
730         (X-offset-callbacks . (,Self_alignment_interface::centered_on_parent))
731         (before-line-breaking-callback . ,Script_interface::before_line_breaking)
732         (font-family . music)
733         (meta . ((interfaces . (script-interface side-position-interface font-interface item-interface ))))
734         ))
735
736     (ScriptColumn
737      . (
738         (before-line-breaking-callback . ,Script_column::before_line_breaking)
739         (meta . ((interfaces . (script-column-interface item-interface ))))
740         ))
741
742     (Slur
743      . (
744         (molecule-callback . ,Slur::brew_molecule)
745         (thickness . 1.2)               
746         (spacing-procedure . ,Spanner::set_spacing_rods)                
747         (minimum-length . 1.5)
748         (after-line-breaking-callback . ,Slur::after_line_breaking)
749         (extremity-rules . ,default-slur-extremity-rules)
750         (extremity-offset-alist . ,default-slur-extremity-offset-alist)
751         (de-uglify-parameters . (1.5  0.8  -2.0))
752         (Y-extent-callback . ,Slur::height)
753         (height-limit . 2.0)
754         (ratio . 0.333)
755         (beautiful . 0.5)
756         (y-free . 0.75)
757         (attachment . (#f . #f))
758         (attachment-offset . ((0 . 0) . (0 . 0)))
759         (slope-limit . 0.8)
760         (details . ((force-blowfit . 0.5)
761                     (bezier-pct-c0 . -0.2) (bezier-pct-c3 . 0.000006)
762                     (bezier-pct-out-max . 0.8) (bezier-pct-in-max . 1.2)
763                     (bezier-area-steps . 1.0)))
764         (meta . ((interfaces . (slur-interface spanner-interface))))
765         ))
766
767     (SpacingSpanner
768      . (
769         (spacing-procedure .  ,Spacing_spanner::set_springs)
770         (grace-space-factor . 0.6)
771         (shortest-duration-space . 2.0)
772         (spacing-increment . 1.2)
773         (base-shortest-duration . ,(make-moment 1 8))
774         (meta . ((interfaces . (spacing-interface spacing-spanner-interface spanner-interface))))
775         ))
776
777     (SpanBar
778      . (
779         (break-align-symbol . staff-bar)
780         (bar-size-procedure . ,Span_bar::get_bar_size) 
781         (molecule-callback . ,Span_bar::brew_molecule)
782         (break-visibility . ,begin-of-line-invisible)
783         (X-extent-callback . ,Span_bar::width_callback)
784         (Y-extent-callback . ())
785         (breakable . #t)
786         (glyph . "|")
787         (before-line-breaking-callback . ,Span_bar::before_line_breaking)
788         ;; ugh duplication! 
789
790         ;;
791         ;; Ross. page 151 lists other values, we opt for a leaner look
792         ;; 
793         (kern . 3.0)
794         (thin-kern . 3.0)
795         (hair-thickness . 1.6)
796         (thick-thickness . 6.0)
797         (meta . ((interfaces . (span-bar-interface font-interface
798                                                    bar-line-interface item-interface ))))
799         ))
800
801     (StanzaNumber
802      . (
803         (breakable . #t)
804         (molecule-callback . ,Text_item::brew_molecule)         
805         (break-align-symbol . clef)
806         (break-visibility . ,begin-of-line-visible)
807         (font-family . roman)
808         (meta . ((interfaces . (break-aligned-interface text-interface font-interface item-interface ))))               
809         ))
810
811     (StaffSpacing
812      . (
813         (breakable . #t)
814         (stem-spacing-correction . 0.4)
815         (knee-spacing-correction . 0.75)
816         (meta . ((interfaces . (spacing-interface staff-spacing-interface item-interface ))))
817         ))
818     (NoteSpacing
819      . (
820         (stem-spacing-correction . 0.5)
821         (knee-spacing-correction . 0.75)
822         (meta . ((interfaces . (spacing-interface note-spacing-interface item-interface ))))
823         ))
824
825     (StaffSymbol
826      . (
827         (molecule-callback . ,Staff_symbol::brew_molecule)
828         (line-count . 5)
829         (layer . 0)
830         (meta . ((interfaces . (staff-symbol-interface spanner-interface))))
831         ))
832
833     (SostenutoPedal
834      . (
835         (molecule-callback . ,Text_item::brew_molecule)
836         (direction . 1)
837         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
838         (no-spacing-rods . #t)
839         (padding . 0.0) ;; padding relative to SostenutoPedalLineSpanner
840         (pedal-type . mixed)
841         (font-family . roman)
842         (font-shape . italic)
843         (self-alignment-X . 0)
844         (meta . ((interfaces . (text-interface  self-alignment-interface font-interface item-interface))))
845         ))
846
847     (SostenutoPedalLineSpanner 
848      . (
849         (axes . (1))
850         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)      
851         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
852         
853
854         (padding . 1.2)
855         (minimum-space . 1.0)
856         (direction . -1)
857         (meta . ((interfaces . (piano-pedal-interface axis-group-interface side-position-interface  spanner-interface))))
858         ))
859         
860     (Stem
861      . (
862         (before-line-breaking-callback . ,Stem::before_line_breaking)
863         (molecule-callback . ,Stem::brew_molecule)
864         (thickness . 1.3)
865
866         ;; 3.5 (or 3 measured from note head) is standar length
867         ;; 32nd, 64th flagged stems should be longer
868         (lengths . (3.5 3.5 3.5 4.5 5.0))
869         
870         ;; Stems in unnatural (forced) direction should be shortened by
871         ;; one staff space, according to [Roush & Gourlay].
872         ;; Flagged stems we shorten only half a staff space.
873         (stem-shorten . (1.0 0.5))
874
875         ;; default stem direction for note on middle line
876         (neutral-direction . -1)
877         
878         ;; [Wanske]: standard length (but no shorter than minimum).
879         ;; (beamed-lengths . (3.5))
880         
881         ;; FIXME.  3.5 yields too long beams (according to Ross and
882         ;; looking at Baerenreiter examples) for a number of common
883         ;; boundary cases.  Subtracting half a beam thickness fixes
884         ;; this, but the bug may well be somewhere else.
885         (beamed-lengths . (3.26))
886
887         ;; [Wanske] lists three sets of minimum lengths.  One
888         ;; set for the nomal case, and one set for beams with `der
889         ;; Balkenendpunkt weiter "uber bzw. unter die Systemgrenze
890         ;; hinaus (bei Gruppen mit grossem Tonumfang)' and the extreme
891         ;; case.
892
893         ;; Note that Wanske lists numbers lengths starting from top of
894         ;; head, so we must add half a staff space.
895         
896         ;; We use the normal minima as minimum for the ideal lengths,
897         ;; and the extreme minima as abolute minimum length.
898         
899         ;; The 'normal' minima
900         (beamed-minimum-free-lengths . (2.5 2.0 1.5))
901         
902         ;; The 'far outside staff' minima, not used
903         ;(beamed-far-minimum-free-lengths . (1.83))
904         
905         ;; The 'extreme case' minima
906         (beamed-extreme-minimum-free-lengths . (1.83 1.5))
907
908         (X-offset-callbacks . (,Stem::off_callback))
909         (X-extent-callback . ,Stem::dim_callback)       
910         (Y-extent-callback . ,Stem::height)
911         (Y-offset-callbacks . (,Staff_symbol_referencer::callback))
912         (adjust-if-on-staffline . #t)
913         (font-family . music)      
914         (avoid-note-head . #f)
915         (up-to-staff . #f)
916         (meta . ((interfaces . (stem-interface  font-interface item-interface ))))
917         ))
918
919     (StemTremolo
920      . (
921         (molecule-callback . ,Stem_tremolo::brew_molecule)
922         (Y-extent-callback . ,Stem_tremolo::height)
923         (X-extent-callback . #f)
924
925         (beam-width . 1.6) ; staff-space
926         (beam-thickness . 0.48) ; staff-space
927         (meta . ((interfaces . (stem-tremolo-interface item-interface ))))
928         ))
929
930     (SeparationItem
931      . (
932         (meta . ((interfaces . (spacing-interface separation-item-interface item-interface ))))
933         ))
934
935     (SeparatingGroupSpanner
936      . (
937         (spacing-procedure . ,Separating_group_spanner::set_spacing_rods)
938         (meta . ((interfaces . (spacing-interface separation-spanner-interface spanner-interface))))
939         ))
940
941     (SustainPedal
942      . (
943         (no-spacing-rods . #t)
944         (molecule-callback . ,Sustain_pedal::brew_molecule)
945         (self-alignment-X . 0)
946         (direction . 1)
947         (padding . 0.0)  ;; padding relative to SustainPedalLineSpanner
948         (pedal-type . text)
949         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
950         (meta . ((interfaces . (piano-pedal-interface text-spanner-interface text-interface self-alignment-interface font-interface item-interface))))
951         ))
952
953     (SustainPedalLineSpanner 
954      . (
955         (axes . (1))
956         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
957         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
958         
959         (padding . 1.2)
960         (minimum-space . 1.0)
961         (direction . -1)
962         (meta . ((interfaces . (piano-pedal-interface axis-group-interface side-position-interface spanner-interface))))
963         ))
964
965     (System
966      . (
967         (axes . (0 1))
968         (X-extent-callback . ,Axis_group_interface::group_extent_callback)
969         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)      
970         (meta . ((interfaces . (system-interface axis-group-interface spanner-interface))))
971         ))
972
973     (SystemStartBrace
974      . (
975         (glyph . "brace")
976         (molecule-callback . ,System_start_delimiter::brew_molecule)
977         (collapse-height . 5.0)
978         (font-family . braces)
979         (Y-extent-callback . #f)
980         (meta . ((interfaces . (system-start-delimiter-interface font-interface))))
981         ))
982
983     (SystemStartBracket
984      . (
985         (Y-extent-callback . #f)
986         (molecule-callback . ,System_start_delimiter::brew_molecule)
987         (glyph . "bracket")
988         (arch-height . 1.5)
989         (arch-angle . 50.0)
990         (arch-thick . 0.25)
991         (arch-width . 1.5)
992         (bracket-collapse-height . 1)
993         (thickness . 0.25)
994         (meta . ((interfaces . (system-start-delimiter-interface spanner-interface))))
995         ))
996
997     (SystemStartBar
998      . (
999         (Y-extent-callback . #f)
1000         (molecule-callback . ,System_start_delimiter::brew_molecule)
1001         (glyph . "bar-line")
1002         (thickness . 1.6)
1003         (after-line-breaking-callback . ,System_start_delimiter::after_line_breaking)
1004         (meta . ((interfaces . (system-start-delimiter-interface spanner-interface))))
1005         ))
1006
1007     (TextScript
1008      . (
1009         (molecule-callback . ,Text_item::brew_molecule)
1010         (no-spacing-rods . #t)
1011         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
1012         (direction . -1)
1013         (padding . 0.5)
1014         (script-priority . 200)
1015         ;; todo: add X self alignment?
1016         (baseline-skip . 2)
1017         (font-family . roman)
1018         (meta . ((interfaces . (text-script-interface text-interface side-position-interface font-interface item-interface ))))
1019         ))
1020
1021     (TextSpanner
1022      . (
1023         (molecule-callback . ,Text_spanner::brew_molecule)
1024         (font-family . roman)
1025         (type . line)
1026
1027         ;; urg, only for (de)cresc. text spanners
1028         (if-text-padding . 1.0)
1029         (width-correct . -1)
1030
1031         (direction . 1)
1032         (meta . ((interfaces . (text-spanner-interface side-position-interface font-interface spanner-interface))))             
1033         ))
1034     
1035     (TabNoteHead
1036      . (
1037         (font-family . roman)
1038         (style . default)
1039         (molecule-callback . ,tablature-molecule-callback)
1040         (Y-offset-callbacks  . (,Staff_symbol_referencer::callback))
1041         (extra-offset . (0 . -0.65)) ;; UGH! TODO: Clean this up!
1042         (stem-attachment-function . ,tablature-stem-attachment-function)
1043         (meta . ((interfaces
1044                   . (rhythmic-head-interface
1045                      font-interface
1046                      note-head-interface staff-symbol-referencer-interface
1047                      text-interface item-interface ))))
1048         ))
1049
1050
1051     (Tie
1052      . (
1053         (molecule-callback . ,Tie::brew_molecule)
1054         (spacing-procedure . ,Spanner::set_spacing_rods)
1055         (staffline-clearance . 0.35)
1056         (details . ((ratio . 0.333) (height-limit . 1.0)))
1057         (thickness . 1.2)
1058         (x-gap . -0.1)
1059         (y-offset . 0.6)
1060         (minimum-length  . 2.5)
1061         (meta . ((interfaces . (tie-interface spanner-interface))))
1062         ))
1063
1064     (TieColumn
1065      . (
1066         (after-line-breaking-callback . ,Tie_column::after_line_breaking)
1067         (X-extent-callback . ())
1068         (Yoo-extent-callback . ())      
1069         (meta . ((interfaces . (tie-column-interface spanner-interface))))
1070         ))
1071
1072     (TimeSignature
1073      . (
1074         (molecule-callback . ,Time_signature::brew_molecule)
1075         (break-align-symbol . time-signature)
1076         (break-visibility . ,all-visible)
1077         (space-alist . (
1078                         (first-note . (extra-space . 2.0))
1079                         (staff-bar .  (minimum-space . 2.0))
1080                         ))
1081         (breakable . #t)
1082         (style . C)
1083         (font-family . number)
1084         (meta . ((interfaces . (time-signature-interface break-aligned-interface font-interface item-interface ))))
1085         ))
1086
1087     (TupletBracket
1088      . (
1089         (gap . 2.0)
1090         (padding . 0.9)
1091         (thickness . 1.6)
1092         (edge-widen . (0.0 . 0.0))
1093         (edge-height . (0.7 . 0.7))
1094         (shorten-pair . (-0.2 . -0.2))
1095         (before-line-breaking-callback . ,Tuplet_bracket::before_line_breaking)
1096         (after-line-breaking-callback . ,Tuplet_bracket::after_line_breaking)
1097         (molecule-callback . ,Tuplet_bracket::brew_molecule)
1098         (font-family . roman)
1099         (font-shape . italic)
1100
1101         (font-relative-size . -1)
1102         (meta .  ((interfaces . (text-interface tuplet-bracket-interface font-interface spanner-interface))))
1103         ))
1104
1105     (UnaCordaPedal
1106      . (
1107         (molecule-callback . ,Text_item::brew_molecule)
1108         (font-family . roman)
1109         (font-shape . italic)
1110         (no-spacing-rods . #t)
1111         (self-alignment-X . 0)
1112         (direction . 1)
1113         (pedal-type . text)
1114         (padding . 0.0)  ;; padding relative to UnaCordaPedalLineSpanner
1115         (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
1116         (meta . ((interfaces . (text-interface self-alignment-interface font-interface item-interface ))))
1117         ))
1118
1119     (UnaCordaPedalLineSpanner 
1120      . (
1121         (axes . (1))
1122         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)      
1123         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1124         
1125         (padding . 1.2)
1126         (minimum-space . 1.0)
1127         (direction . -1)
1128         (meta . ((interfaces . (piano-pedal-interface axis-group-interface side-position-interface spanner-interface))))
1129         ))
1130
1131     (VoltaBracket
1132      . (
1133         (molecule-callback . ,Volta_bracket_interface::brew_molecule)
1134         (direction . 1)
1135         (padding . 1)
1136         (font-style . volta)
1137         (Y-offset-callbacks . (,Side_position_interface::aligned_side))
1138         (thickness . 1.6)  ;  stafflinethickness
1139         (height . 2.0) ; staffspace;
1140         (minimum-space . 5)
1141         (font-family . number)
1142         (font-relative-size . -2)
1143         (meta . ((interfaces . (volta-bracket-interface text-interface side-position-interface font-interface spanner-interface))))
1144         ))
1145     
1146     (VerticalAlignment
1147      . (
1148         (axes . (1))
1149         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
1150         (stacking-dir . -1)
1151         (meta . ((interfaces . (align-interface axis-group-interface spanner-interface))))
1152         ))
1153
1154     (VerticalAxisGroup
1155      . (
1156         (axes . (1))
1157         (Y-extent-callback . ,Axis_group_interface::group_extent_callback)      
1158         
1159         (meta . ((interfaces . (axis-group-interface spanner-interface))))
1160         ))
1161    )
1162  )
1163
1164
1165
1166
1167 (define (completize-grob-entry x)
1168   "transplant assoc key into 'name entry of 'meta of X
1169 "
1170   (let* ((name-sym  (car x))
1171          (grob-entry (cdr x))
1172          (metaentry (cdr (assoc 'meta grob-entry)))
1173          (ifaces-entry
1174           (cdr (assoc 'interfaces metaentry)))
1175
1176         )
1177     (set! metaentry (assoc-set! metaentry 'name name-sym))
1178     (set! metaentry (assoc-set! metaentry 'interfaces
1179                                 (cons 'grob-interface ifaces-entry)))
1180     (set! grob-entry (assoc-set! grob-entry 'meta metaentry))
1181     (cons name-sym grob-entry)))
1182
1183 (set! all-grob-descriptions (map completize-grob-entry all-grob-descriptions))
1184
1185
1186
1187                                         ;  (display  (map pair? all-grob-descriptions))
1188
1189
1190 ;; make sure that \property Foo.Bar =\turnOff doesn't complain
1191
1192 (map (lambda (x)
1193                                         ; (display (car x)) (newline)
1194
1195        (set-object-property! (car x) 'translation-type? list?)
1196        (set-object-property! (car x) 'is-grob? #t))
1197      all-grob-descriptions)
1198
1199
1200 (set! all-grob-descriptions (sort all-grob-descriptions alist<?))