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