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