]> git.donarmstrong.com Git - lilypond.git/blob - ly/engraver.ly
release: 1.3.94
[lilypond.git] / ly / engraver.ly
1
2 \version "1.3.93"
3         %
4 % setup for Request->Element conversion. Guru-only
5 %
6
7 StaffContext=\translator {
8         \type "Engraver_group_engraver";
9         \name Staff ;
10         \consists "Output_property_engraver";   
11         Generic_property_list = #generic-staff-properties
12         \consists "Property_engraver";
13         
14         \consists "Multi_measure_rest_engraver";
15
16         \consists "Bar_engraver";
17  % Bar_engraver must be first so default bars aren't overwritten
18 % with empty ones.
19
20
21 %       \consists "Repeat_engraver";
22         \consists "Volta_engraver";
23         \consists "Separating_line_group_engraver";     
24
25
26
27         \consists "Clef_engraver";
28         \consists "Key_engraver";
29         \consists "Time_signature_engraver";
30         \consists "Staff_symbol_engraver";
31         \consists "Collision_engraver";
32         \consists "Rest_collision_engraver";
33         \consists "Local_key_engraver";
34
35         \consists "Piano_pedal_engraver";
36
37         \consistsend "Axis_group_engraver";
38
39 %{
40         The Instrument_name_engraver puts the name of the instrument
41         (\property Staff.instrument; Staff.instr for subsequent lines)
42         to the left of a staff.
43
44         This is commented out, so you don't get funny things on the
45         PianoStaff      
46         \consists "Instrument_name_engraver";
47 %}
48
49
50           
51         \accepts "Voice";
52 }
53
54 ChoirStaffContext = \translator {
55         \type "Engraver_group_engraver";
56         \name ChoirStaff;
57         alignmentReference = \center;
58         \consists "System_start_delimiter_engraver";
59         systemStartDelimiterGlyph = #'bracket
60
61         \accepts "Staff";
62         \accepts "RhythmicStaff";
63         \accepts "GrandStaff";
64         \accepts "PianoStaff";
65         \accepts "Lyrics";
66         \accepts "ChordNames";
67 }
68
69
70 RhythmicStaffContext=\translator{
71         \type "Engraver_group_engraver";
72         
73         \consists "Property_engraver";
74         \consists "Output_property_engraver";   
75
76         Generic_property_list = #generic-staff-properties
77
78         \consists "Pitch_squash_engraver";
79         \consists "Separating_line_group_engraver";     
80         \name RhythmicStaff;
81         Bar \push #'bar-size = #4
82         VoltaBracket \push #'minimum-space =  #15  % urg, in \pt
83         VoltaBracket \push #'padding =  #5  % urg, in \pt
84         StaffSymbol \push #'line-count = #1     
85
86 %       \consists "Repeat_engraver";
87         \consists "Volta_engraver";
88         \consists "Bar_engraver";
89         \consists "Time_signature_engraver";
90         \consists "Staff_symbol_engraver";
91         \consistsend "Axis_group_engraver";
92         \accepts "Voice";
93 }
94
95
96 VoiceContext = \translator {
97         \type "Engraver_group_engraver";
98         \name Voice;
99
100         Generic_property_list = #generic-voice-properties
101         
102         \consists "Output_property_engraver";   
103
104         \consists "Dynamic_engraver";   % must come before text_engraver.
105         \consists "Property_engraver";
106         
107         \consists "Breathing_sign_engraver";
108         \consists "Rest_engraver";
109         \consists "Dot_column_engraver";
110         \consists "Stem_engraver";
111         \consists "Beam_engraver";
112         \consists "Auto_beam_engraver";
113
114         \consists "Chord_tremolo_engraver";
115         \consists "Melisma_engraver";
116         \consists "Text_engraver";
117         \consists "A2_engraver";
118         \consists "Voice_devnull_engraver";
119
120         \consists "Script_engraver";
121         \consists "Script_column_engraver";
122         \consists "Rhythmic_column_engraver";
123         \consists "Slur_engraver";
124         \consists "Tie_engraver";
125         \consists "Tuplet_engraver";
126         \consists "Grace_position_engraver";
127         \consists "Skip_req_swallow_translator";
128         \accepts Thread; % bug if you leave out this!
129         \accepts Grace;
130 }
131
132 GraceContext=\translator {
133         \type "Grace_engraver_group";
134         \name "Grace";
135         \consists "Output_property_engraver";   
136
137         Generic_property_list = #generic-grace-properties
138         
139         \consists "Note_heads_engraver";
140         \consists "Local_key_engraver";
141         \consists "Stem_engraver";
142         \consists "Beam_engraver";
143         \consists "Slur_engraver";
144         
145         \consists "Auto_beam_engraver";
146         \consists "Align_note_column_engraver";
147
148         \consists "Rhythmic_column_engraver";
149
150         \consists "Dynamic_engraver";% in Grace ???
151         \consists "Text_engraver"; % in Grace ???
152
153         \consists "Property_engraver";
154
155         Stem \push  #'style = #"grace"
156         Stem \push  #'flag-style = #"grace"
157         Stem \push  #'stem-length = #6.0
158         Stem \push  #'direction = #1
159
160         NoteHead \push #'font-size = #-1
161         Stem \push #'font-size = #-1
162         Stem \push #'stem-shorten = #'(0)
163         Beam \push #'font-size = #-1
164         TextScript \push #'font-size = #-1
165         Slur \push #'font-size = #-1
166         Accidentals \push #'font-size = #-1
167         Beam \push #'beam-thickness = #0.3
168         Beam \push #'beam-space-function = #(lambda (x) 0.5)
169
170         Stem \push #'lengths = #(map (lambda (x) (* 0.8 x)) '(3.5 3.5 3.5 4.5 5.0))
171         Stem \push #'beamed-lengths =
172                 #'(0.0 2.5 2.0 1.5)
173         Stem \push #'minimum-beamed-lengths
174                  = #(map (lambda (x) (* 0.8 x)) '(0.0 2.5 2.0 1.5))
175
176         weAreGraceContext = ##t   
177         graceAccidentalSpace= 1.5 ; % in staff space
178 }
179
180 ThreadContext = \translator{
181         \type Engraver_group_engraver;
182         \consists "Thread_devnull_engraver";
183         \consists "Note_heads_engraver";
184         \consists "Output_property_engraver";   
185         Generic_property_list = #generic-thread-properties
186         \consists "Property_engraver";
187         \name Thread;
188 }
189
190 GrandStaffContext=\translator{
191         \type "Engraver_group_engraver";
192         \name GrandStaff;
193         \consists "Span_bar_engraver";
194         \consists "System_start_delimiter_engraver";
195         systemStartDelimiterGlyph = #'brace
196         
197         \consists "Property_engraver";  
198         Generic_property_list = #generic-grand-staff-properties
199         \accepts "Staff";
200 }
201
202 PianoStaffContext = \translator{\GrandStaffContext
203         alignmentReference = \center;
204
205         \consists "Vertical_align_engraver";
206
207         VerticalAlignment \push #'threshold = #'(12 . 12) 
208
209 %       \consistsend "Axis_group_engraver";
210         \name "PianoStaff";
211 }
212
213 StaffGroupContext= \translator {
214         \type "Engraver_group_engraver";
215         \consists "Span_bar_engraver";
216         \consists "Output_property_engraver";   
217         \consists "System_start_delimiter_engraver";
218        systemStartDelimiterGlyph = #'bracket
219         \name StaffGroup;
220         \accepts "Staff";
221         \accepts "RhythmicStaff";
222         \accepts "GrandStaff";
223         \accepts "PianoStaff";
224         
225         \accepts "Lyrics";
226         \accepts "ChordNames";
227 }
228
229
230 % UGH! JUNKME
231 LyricsVoiceContext= \translator{
232         \type "Engraver_group_engraver";
233         \consistsend "Axis_group_engraver";
234         LyricVoiceMinimumVerticalExtent = #(cons -1.2 1.2)
235
236         \name LyricVoice ;
237         \consists "Separating_line_group_engraver";
238         \consists "Lyric_engraver";
239         \consists "Extender_engraver";
240         \consists "Hyphen_engraver";
241         \consists "Stanza_number_engraver";
242         phrasingPunctuation = #".,;:!?\""
243         
244 }
245 NoteNamesContext = \translator {
246         \type "Engraver_group_engraver";
247         \name NoteNames;
248         \consistsend "Axis_group_engraver";
249         \consists "Note_name_engraver";
250         \consists "Separating_line_group_engraver";
251 }
252
253 LyricsContext = \translator {
254         \type "Engraver_group_engraver";
255         \name Lyrics;
256         \consists Vertical_align_engraver; %need this for getting folded repeats right.
257         Generic_property_list = #generic-lyrics-properties
258         \consists "Property_engraver";
259         \consistsend "Axis_group_engraver";
260         
261         \accepts "LyricVoice";
262 }
263
264 ChordNameVoiceContext = \translator {
265         \type "Engraver_group_engraver";
266         \name ChordNameVoice ;
267
268         \consists "Output_property_engraver";   
269         \consistsend "Axis_group_engraver";
270         \consists "Separating_line_group_engraver";
271         \consists "Chord_name_engraver";
272 }
273 ChordNameContext = \translator {
274         \type "Engraver_group_engraver";
275         \name ChordNames;
276
277         Generic_property_list = #generic-chord-staff-properties
278         \consists "Property_engraver";  
279         \consists "Output_property_engraver";   
280         \accepts "ChordNameVoice";
281         \consistsend "Axis_group_engraver";
282         }
283
284
285 ScoreWithNumbers = \translator {
286         \type "Score_engraver";
287
288         % uncomment to bar numbers on a whole system.
289         \consists "Bar_number_engraver";
290 }
291
292 StupidScore = \translator {
293         \type "Score_engraver";
294         \name Score;
295         \consists "Note_heads_engraver";
296 }
297
298
299
300 BarNumberingStaffContext = \translator {
301         \StaffContext
302         \consists "Mark_engraver";
303 }
304
305 HaraKiriStaffContext = \translator {
306         \StaffContext
307         \remove "Axis_group_engraver";
308         \consistsend "Hara_kiri_engraver";        
309         \consists "Instrument_name_engraver";
310         \accepts "Voice";
311 }
312 %{
313   The HaraKiriStaffContexts doesn't override \name,
314   so it is still named `Staff'.
315
316   %\translator { \HaraKiriStaffContext }
317 %}
318
319 OrchestralPartStaffContext = \translator {
320         \StaffContext
321         \consists "Mark_engraver";
322 }
323
324 ScoreContext = \translator {
325         \type Score_engraver;
326         \name Score;
327         
328
329         \consists "Repeat_acknowledge_engraver";
330         \consists "Timing_engraver";
331         \consists "Output_property_engraver";   
332         \consists "System_start_delimiter_engraver";
333         \consists "Mark_engraver";      
334         \consists "Break_align_engraver";
335         \consists "Spacing_engraver";
336         \consists "Vertical_align_engraver";
337
338         \consists "Lyric_phrasing_engraver";
339         \consists "Bar_number_engraver";
340
341         
342         \accepts "Staff";
343         \accepts "StaffGroup";
344         \accepts "RhythmicStaff";       
345         \accepts "Lyrics";
346         \accepts "ChordNames";
347         \accepts "GrandStaff";
348         \accepts "ChoirStaff";
349         \accepts "PianoStaff";
350         \accepts "NoteNames";
351
352         soloText = #"Solo"
353         soloIIText = #"Solo II"
354         aDueText = #"\\`a2"
355         soloADue = ##t
356         splitInterval = #'(0 . 1)
357         changeMoment = #`(,(make-moment 0 0) . ,(make-moment 1 512))
358
359         defaultClef = #"treble"
360
361         StaffMinimumVerticalExtent = #(cons -4.0 4.0)
362
363         barAuto = ##t
364         voltaVisibility = ##t
365         %  name, glyph id, c0 position
366         supportedClefTypes = #'(
367           ("treble" . ("clefs-G" -2))
368           ("violin" . ("clefs-G" -2))
369           ("G" . ("clefs-G" -2))
370           ("G2" . ("clefs-G" -2))
371           ("french" . ("clefs-G" -4 ))
372           ("soprano" . ("clefs-C" -4 ))
373           ("mezzosoprano" . ("clefs-C" -2 ))
374           ("alto" . ("clefs-C" 0 ))
375           ("tenor" . ("clefs-C" 2 ))
376           ("baritone" . ("clefs-C" 4 ))
377           ("varbaritone"  . ("clefs-F" 0))
378           ("bass" . ("clefs-F" 2 ))
379           ("F" . ( "clefs-F" 2))
380           ("subbass" . ("clefs-F" 4))
381         )
382         % where is c0 in this clef?
383         clefPitches = #'(("clefs-G" . -4)
384           ("clefs-C" . 0)
385           ("clefs-F" . 4))
386                 
387
388         automaticPhrasing = ##t;
389         alignmentReference = \down;
390         defaultClef = #"treble"
391         defaultBarType = #"|"
392         systemStartDelimiterGlyph = #'bar-line
393         explicitClefVisibility = #all-visible
394         explicitKeySignatureVisibility = #all-visible
395         
396         scriptDefinitions = #default-script-alist
397
398         startSustain = #"Ped."
399         stopSustain = #"*"
400         stopStartSustain = #"*Ped."
401         startUnaChorda = #"una chorda"
402         stopUnaChorda = #"tre chorde"
403         % should make separate lists for stopsustain and startsustain 
404
405
406        %
407        % what order to print accs.  We could compute this, 
408        % but computing is more work than putting it here.
409        %
410        % Flats come first, then sharps.
411        keyAccidentalOrder = #'(
412          (6 . -1) (2  . -1) (5 . -1 ) (1  . -1) (4  . -1) (0  . -1) (3  . -1)
413          (3  . 1) (0 . 1) (4 . 1) (1 . 1) (5 . 1) (2 . 1) (6 . 1)
414        )
415         breakAlignOrder = #'(
416           Instrument_name
417           Left_edge_item
418           Span_bar
419           Breathing_sign
420           Clef_item
421           Key_item
422           Staff_bar
423           Time_signature
424           Stanza_number
425         )
426        
427         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
428         % TODO: uniform naming.;  
429         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
430
431
432         %
433         % distances are given in stafflinethickness (thicknesses) and
434         % staffspace (distances)
435         %
436         BarLine = #`(
437                 (interfaces . (bar-interface staff-bar-interface))
438                 (break-align-symbol . Staff_bar)
439                 (glyph . "|")
440                 (break-glyph-function . ,default-break-barline)
441                 (barsize-procedure . ,Bar::get_staff_bar_size)
442                 (molecule-callback . ,Bar::brew_molecule)          
443                 (visibility-lambda . ,all-visible)
444                 (breakable . #t)
445                 (before-line-breaking-callback . ,Bar::before_line_breaking)
446                 ;;
447                 ;; Ross. page 151 lists other values, we opt for a leaner look
448                 ;; 
449                 (kern . 3.0)
450                 (thin-kern . 3.0)
451                 (hair-thickness . 1.6)
452                 (thick-thickness . 6.0)
453                 (name . "BarLine")
454         )
455
456         BarNumber = #`(
457                 (molecule-callback . ,Text_item::brew_molecule)
458                 (breakable . #t)
459                 (visibility-lambda . ,begin-of-line-visible)
460                 (name . "BarNumber")
461                 (padding . 1.0)
462                 (direction . 1)
463         )
464
465         Beam = #basic-beam-properties
466
467         BreakAlignment = #`(
468                 (breakable . #t)
469                 (interfaces . (break-align-interface))
470                 (stacking-dir . 1)
471                 (axes 0)
472                 (X-offset-callbacks . (,Break_align_interface::self_align_callback))
473                 (space-alist . ,default-break-align-space-alist) 
474                 (name . "BreakAlignment")               
475         )
476
477         BreakAlignGroup = #`(
478                 (interfaces . (axis-group-interface))
479                 (axes  . (0))
480                 (X-offset-callbacks . (,Break_align_interface::alignment_callback))
481                 
482                 (name . "BreakAlignGroup")
483         )
484
485         BreathingSign = #`(
486                 (interfaces . (breathing-sign-interface))
487                 (break-align-symbol . Breathing_sign)
488                 (breakable . #t )
489                 (molecule-callback . ,Breathing_sign::brew_molecule)
490                 (Y-offset-callbacks . (,Breathing_sign::offset_callback))
491                 (visibility-lambda . ,begin-of-line-invisible)
492                 (name . "BreathingSign")
493         )
494
495         Clef = #`(
496            (interfaces .  (clef-interface))
497            (molecule-callback . ,Score_element::brew_molecule)
498            (before-line-breaking-callback . ,Clef::before_line_breaking)
499            (breakable . #t)
500            (break-align-symbol . Clef_item)
501            (visibility-lambda . ,begin-of-line-visible)
502            (Y-offset-callbacks  . (,Staff_symbol_referencer::callback)) 
503            (name . "Clef")
504         )
505
506         ChordName = #`(
507                 (molecule-callback . ,Chord_name::brew_molecule)
508                 (interfaces . (chord-name-interface))
509                 (after-line-breaking-callback . ,Chord_name::after_line_breaking)
510                 (chord-name-function . ,default-chord-name-function)
511                 (name . "ChordName")  
512         )
513
514         NoteCollision = #`(
515                 (axes 0 1)
516                 (interfaces . (collision-interface))
517                 (note-width . 1.65)
518                 (name . "NoteCollision")
519         )
520
521         Crescendo = #`(
522                 (molecule-callback . ,Crescendo::brew_molecule)
523                 (interfaces . (crescendo-interface dynamic-interface))
524                 (thickness . 1.0)
525                 (shorten-for-letter  .  4.0)
526                 (height . 0.6666)
527                 (dash-thickness . 1.2)
528                 (dash-length . 4.0)
529                 (name . "Crescendo")
530                 (self-alignment-Y . 0)
531                 (Y-offset-callbacks . (,Side_position::aligned_on_self))
532         )
533
534         DotColumn = #`(
535                 (interfaces . (dot-column-interface axis-group-interface ))
536                 (axes 0 )
537                 (name . "DotColumn")
538         )
539
540         Dots = #`(
541                 (interfaces . (dot-interface))
542                 (molecule-callback . ,Dots::brew_molecule)
543                 (dot-count . 1)
544                 (position . 0.0)
545                 (Y-offset-callbacks  . (,Dots::quantised_position_callback ,Staff_symbol_referencer::callback))
546
547                 (name . "Dots")         
548         )
549         
550         DynamicText = #`(
551                 (style . "dynamic")
552                 (interfaces . (dynamic-interface))
553                 (Y-offset-callbacks . (,Side_position::aligned_on_self))
554
555                 (molecule-callback . ,Text_item::brew_molecule)
556                 (script-priority . 100)
557                 (self-alignment-Y . 0)
558                 (name . "DynamicText")
559         )
560         
561         DynamicLineSpanner = #`(
562                 (interfaces . (dynamic-interface axis-group-interface side-position-interface))
563                 (axes . ( 1))
564                 (padding . 3)
565                 (minimum-space . 6)
566                 (name . "dynamic alignment")
567         )
568         
569         LeftEdge = #`(
570                 (break-align-symbol . Left_edge_item)
571                 (breakable . #t)
572                 (name . "LeftEdge")
573         )
574         
575         Fingering = #`(
576                 (interfaces . (finger-interface text-script-interface text-item-interface side-position-interface))
577                 (molecule-callback . ,Text_item::brew_molecule)
578                 (padding .      3.0)
579                 (self-alignment-X . 0)
580                 (name . "Fingering") 
581         )
582
583         GraceAlignment = #`(
584                 (interfaces . (axis-group-interface align-interface))
585                 (axes . (0))
586                 (horizontal-space . 1.2)
587                 (padding . 1.0)
588                 (before-line-breaking-callback . ,Grace_align_item::before_line_breaking)
589                 (name . "GraceAlignment")
590         )
591         
592         HaraKiriVerticalGroup = #`(
593                 (Y-offset-callbacks . (,Hara_kiri_group_spanner::force_hara_kiri_callback))
594                 (Y-extent-callback . ,Hara_kiri_group_spanner::y_extent)
595                 (interfaces . (hara-kiri-group-interface))
596                 (axes 1)
597                 (name . "HaraKiriVerticalGroup")
598         )
599
600         LyricHyphen = #`(
601                 (interfaces  . (lyric-hyphen-interface))        
602                 (thickness . 1.0)
603                 (height . 0.4)
604                 (minimum-length .  0.5) 
605                 (molecule-callback . ,Hyphen_spanner::brew_molecule)
606                 (Y-extent-callback . ,Score_element::point_dimension_callback)
607                 (name . "LyricHyphen")
608         )
609         
610         InstrumentName = #`(
611                 (interfaces . (instrument-name-interface))
612                 (breakable . #t)
613                 (Y-offset-callbacks . (,Side_position::centered_on_parent))
614                 (molecule-callback . ,Text_item::brew_molecule)         
615                 (break-align-symbol . Instrument_name)
616                 (visibility-lambda . ,begin-of-line-visible)
617                 (name . "InstrumentName")
618         )
619         
620         KeySignature = #`(
621           (interfaces . (key-item-interface))
622           (molecule-callback . ,Key_item::brew_molecule)
623           (break-align-symbol . Key_item)
624           (visibility-lambda . ,begin-of-line-visible)
625           (breakable . #t)
626           (name . "KeySignature")
627         )
628         
629         Accidentals = #`(
630                 (molecule-callback . ,Local_key_item::brew_molecule)
631                 (left-padding . 0.2)
632                 (right-padding . 0.4)
633                 (interfaces . (accidentals-interface))
634                 (name .  "Accidentals")
635         )
636         
637         LineOfScore = #`(
638                 (axes . (0 1))
639                 (interfaces . (axis-group-interface))
640                 (name .  "LineOfScore")
641         )
642         
643         LyricExtender = #`(
644                 (interfaces . (lyric-extender-interface))
645                 (molecule-callback . ,Lyric_extender::brew_molecule)
646                 (height . 0.8) ; stafflinethickness;
647                 (right-trim-amount . 0.5)
648                 (Y-extent-callback . ,Score_element::point_dimension_callback)
649                 (name . "LyricExtender")
650         )
651         
652         LyricText = #`(
653                 (interfaces .  (lyric-syllable-interface text-item-interface))
654                 (molecule-callback . ,Text_item::brew_molecule)
655                 (X-offset-callbacks . (,Side_position::aligned_on_self))
656                 (self-alignment-X . 0)
657                 (non-rhythmic . #t)
658                 (word-space . 0.6)
659                 (name . "LyricText") 
660         )
661         
662         RehearsalMark = #`(
663           (interfaces . (mark-interface side-position-interface))
664           (molecule-callback . ,Text_item::brew_molecule)       
665           (breakable . #t)
666           (visibility-lambda . ,end-of-line-invisible)
667           (padding . 4.0)
668           (name . "RehearsalMark")
669         )
670         
671         MultiMeasureRest = #`(
672                 (interfaces . (multi-measure-rest-interface))
673                 (spacing-procedure . ,Multi_measure_rest::set_spacing_rods)
674                 (molecule-callback . ,Multi_measure_rest::brew_molecule)
675                 (staff-position . 0)
676                 (expand-limit . 10)
677                 (padding . 2.0) ; staffspace
678                 (minimum-width . 12.5) ; staffspace
679                 (name . "MultiMeasureRest")
680         )
681         
682         NoteColumn = #`(
683                 (interfaces . (axis-group-interface note-column-interface))
684                 (axes 0 1)
685                 (name . "NoteColumn")
686         )
687         
688         NoteHead = #`(
689                 (interfaces . (note-head-interface rhythmic-head-interface))
690                 (style . default)
691                 (molecule-callback . ,Note_head::brew_molecule)
692                 (Y-offset-callbacks  . (,Staff_symbol_referencer::callback)) 
693                 (name . "NoteHead")
694         )
695
696         NoteName = #`(
697                 (molecule-callback . ,Text_item::brew_molecule)
698                 (name . "NoteName")
699         )
700
701         OctavateEight  = #`(
702                 (self-alignment-X . 0)
703                 (text . "8")
704                 (visibility-lambda . ,begin-of-line-visible)
705                 (X-offset-callbacks .
706                  (,Side_position::centered_on_parent
707                   ,Side_position::aligned_on_self
708                   ,Side_position::aligned_side
709                   )) 
710                 (molecule-callback . ,Text_item::brew_molecule)
711                 (style . "italic")
712                 (name . "OctavateEight")
713         )
714         
715         PaperColumn = #`(
716                 (interfaces . (paper-column-interface axis-group-interface))
717                 (axes 0)
718                 (rank . -1)
719                 (name . "PaperColumn")
720         )
721
722         Rest = #`(
723                 (interfaces . (rest-interface rhythmic-head-interface))
724                 (after-line-breaking-callback . ,Rest::after_line_breaking)
725                 (molecule-callback . ,Rest::brew_molecule)
726                 (minimum-beam-collision-distance . 1.5)
727                 (name . "Rest")
728         )
729         
730         RestCollision = #`(
731                 (interfaces . (rest-collision-interface))
732                 (minimum-distance . 0.75)
733                 (name . "RestCollision")                
734         )
735
736         Script = #`(
737                 (molecule-callback . ,Script::brew_molecule)
738                 (interfaces . (script-interface side-position-interface))
739                 (X-offset-callbacks . (,Side_position::centered_on_parent))
740                 (name . "Script")
741         )
742         
743         ScriptColumn = #`(
744                 (before-line-breaking-callback . ,Script_column::before_line_breaking)
745                 (name . "ScriptColumn")
746         )
747         
748         Slur = #default-basic-slur-properties
749
750         SpacingSpanner =#`(
751                 (spacing-procedure . ,Spacing_spanner::set_springs)
752
753                 ;; assume that notes at least this long are present.
754                 (maximum-duration-for-spacing . ,(make-moment 1 8))
755                 (name . "SpacingSpanner")
756         )
757
758         SpanBar = #`(
759                 (interfaces . (bar-interface span-bar-interface))
760                 (break-align-symbol . Staff_bar)
761                 (barsize-procedure . ,Span_bar::get_bar_size) 
762                 (molecule-callback . ,Bar::brew_molecule)
763                 (visibility-lambda . ,begin-of-line-invisible)
764                 (X-extent-callback . ,Span_bar::width_callback)
765                 (Y-offset-callbacks . (,Span_bar::center_on_spanned_callback))
766                 
767                 (breakable . #t)
768                 (glyph . "|")
769                 (before-line-breaking-callback . ,Span_bar::before_line_breaking)
770                 ;; ugh duplication! 
771                 
772                 ;;
773                 ;; Ross. page 151 lists other values, we opt for a leaner look
774                 ;; 
775                 (kern . 3.0)
776                 (thin-kern . 3.0)
777                 (hair-thickness . 1.6)
778                 (thick-thickness . 6.0)
779                 (name . "SpanBar")
780         )
781
782         StanzaNumber = #`(
783                 (breakable . #t)
784                 (molecule-callback . ,Text_item::brew_molecule)         
785                 (break-align-symbol . Clef_item)
786                 (visibility-lambda . ,begin-of-line-visible)
787                 (name . "StanzaNumber")
788         )
789
790         StaffSymbol = #`(
791                 (interfaces . (staff-symbol-interface ))
792                 (molecule-callback . ,Staff_symbol::brew_molecule)
793                 (staff-space . 1.0)
794                 (line-count . 5 )
795                 (name . "StaffSymbol")
796         )
797
798         SystemStartDelimiter = #`(
799                 (molecule-callback . ,System_start_delimiter::brew_molecule)
800                 (after-line-breaking-callback . ,System_start_delimiter::after_line_breaking)
801                 (collapse-height . 1.0)
802                 (thickness . 1.6)
803                 (arch-height . 1.5)
804                 (arch-angle . 50.0)
805                 (arch-thick . 0.25)
806                 (arch-width . 1.5)
807                 (bracket-thick . 0.25)
808                 (bracket-width . 2.0)
809                 (name . "SystemStartDelimiter")
810         )
811
812         TextScript = #`(
813                 (molecule-callback . ,Text_item::brew_molecule)
814                 (no-spacing-rods . #t)
815                 (interfaces . (text-script-interface text-item-interface side-position-interface))
816                 (padding .      3.0)
817                 (name . "TextScript") 
818         )
819
820         Tie = #`(
821                 (interfaces . (tie-interface))
822                 (molecule-callback . ,Tie::brew_molecule)
823                 (spacing-procedure . ,Tie::set_spacing_rods)
824                 (staffline-clearance . 0.24)
825                 (details . ((ratio . 0.333) (height-limit . 1.0)))
826                 (thickness . 1.2)
827                 (x-gap . 0.2)
828                 (minimum-length  . 2.5)
829                 (name . "Tie")
830         )
831
832         TieColumn = #`(
833                 (after-line-breaking-callback . ,Tie_column::after_line_breaking)
834                 (interfaces . (tie-column-interface))
835                 (name . "TieColumn")            
836         )
837
838         TimeSignature = #`(
839                 (interfaces . (time-signature-interface))
840                 (molecule-callback . ,Time_signature::brew_molecule)
841                 (break-align-symbol . Time_signature)
842                 (visibility-lambda . ,all-visible)
843                 (breakable . #t)
844                 (name . "TimeSignature")
845         )
846
847         TupletBracket = #`(
848                 (number-gap . 2.0)   
849                 (delta-y . 0)
850                 (thick . 1.0)
851                 (after-line-breaking-callback . ,Tuplet_spanner::after_line_breaking)
852                 (molecule-callback . ,Tuplet_spanner::brew_molecule)
853                 (interfaces . (tuplet-spanner-interface))
854                 (name "TupletBracket")
855         )       
856
857         SostenutoPedal = #`(
858                 (molecule-callback . ,Text_item::brew_molecule)
859                 (X-offset-callbacks . (,Side_position::aligned_on_self))
860                 (Y-offset-callbacks .
861                  (,Side_position::aligned_side
862                   ,Side_position::centered_on_parent))
863
864                 (style . "italic")
865                 (no-spacing-rods . #t)
866                 (self-alignment-X . 0)
867                 (name  . "SostenutoPedal")
868                                 
869         )
870
871         Stem = #`(
872                 (interfaces . (stem-interface))
873                 (before-line-breaking-callback . ,Stem::before_line_breaking)
874                 (molecule-callback . ,Stem::brew_molecule)
875                 (thickness . 0.8)
876                 (beamed-lengths . (0.0 2.5 2.0 1.5))
877                 (beamed-minimum-lengths . (0.0 1.5 1.25 1.0))
878                 
879 ;;  Stems in unnatural (forced) direction should be shortened,
880 ;;  according to [Roush & Gourlay].  Their suggestion to knock off
881 ;;  a whole staffspace seems a bit drastical: we'll do half.
882
883                 (lengths . (3.5 3.5 3.5 4.5 5.0))
884                 (stem-shorten . (0.5))
885                 ; if stem is on middle line, choose this direction.
886                 (default-neutral-direction . 1)
887                 (X-offset-callbacks . (,Stem::off_callback))            
888                 (name . "Stem")
889         )
890
891         StemTremolo = #`(
892                 (molecule-callback . ,Stem_tremolo::brew_molecule)
893                 (beam-width . 2.0) ; staff-space
894                 (beam-thickness . 0.42) ; staff-space
895                 (beam-space-function . ,default-beam-space-function)
896                 (name . "StemTremolo")
897         )
898
899         SeparationItem = #`(
900                 (interfaces . (separation-item-interface))
901                 (name . "SeparationItem")
902         )
903
904         SeparatingGroupSpanner = #`(
905                 (interfaces . (separation-spanner-interface))
906                 (spacing-procedure . ,Separating_group_spanner::set_spacing_rods)
907                 (name . "SeparatingGroupSpanner")
908         )
909
910         SustainPedal = #`(
911                 (interfaces . (sustain-pedal-interface  side-position-interface))
912                 (no-spacing-rods . #t)
913                 (molecule-callback . ,Sustain_pedal::brew_molecule)
914                 (self-alignment-X . 0)
915                 (X-offset-callbacks . (,Side_position::aligned_on_self))
916                 (Y-offset-callbacks .
917                  (,Side_position::aligned_side
918                   ,Side_position::centered_on_parent))
919
920                 (name . "SustainPedal")         
921         )       
922
923         UnaChordaPdeal = #`(
924                 (molecule-callback . ,Text_item::brew_molecule)
925                 (style . "italic")
926                 (no-spacing-rods . #t)
927                 (self-alignment-X . 0)
928                 (X-offset-callbacks . (,Side_position::aligned_on_self))
929                 (Y-offset-callbacks .
930                  (,Side_position::aligned_side
931                   ,Side_position::centered_on_parent))
932
933                 (name . "UnaChordaPedal")
934         )
935
936         VoltaBracket = #`(
937                 (molecule-callback . ,Volta_spanner::brew_molecule)
938                 (interfaces . (volta-spanner-interface side-position-interface))
939                 (direction . 1)
940                 (padding . 5)
941                 (thickness . 1.6)  ;  stafflinethickness
942                 (height . 2.0) ; staffspace;
943                 (minimum-space . 25)
944                 (name . "VoltaBracket")
945         )       
946
947         VerticalAlignment = #`(
948                 (axes 1)
949                 (interfaces . (align-interface axis-group-interface))
950                 (Y-extent-callback . ,Axis_group_interface::group_extent_callback)
951                 (X-extent-callback . #f)
952                 (stacking-dir . -1)
953                 (name . "VerticalAlignment")
954         )
955
956         VerticalAxisGroup = #`(
957                 (axes 1)
958                 (interfaces . (axis-group-interface))
959                 (name . "VerticalAxisGroup")
960         )
961
962
963         \include "auto-beam-settings.ly";
964
965 }
966
967 OrchestralScoreContext= \translator {
968         \ScoreContext
969 }
970