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