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