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