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