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