2 % setup for Request->Element conversion. Guru-only
5 StaffContext=\translator {
6 \type "Engraver_group_engraver";
8 \consists "Output_property_engraver";
9 Generic_property_list = #generic-staff-properties
10 \consists "Property_engraver";
12 \consists "Multi_measure_rest_engraver";
14 \consists "Bar_engraver";
15 % Bar_engraver must be first so default bars aren't overwritten
19 \consists "Repeat_engraver";
20 \consists "Separating_line_group_engraver";
24 \consists "Clef_engraver";
25 \consists "Key_engraver";
26 \consists "Time_signature_engraver";
27 \consists "Staff_symbol_engraver";
28 \consists "Collision_engraver";
29 \consists "Rest_collision_engraver";
30 \consists "Local_key_engraver";
32 \consistsend "Axis_group_engraver";
35 The Instrument_name_engraver puts the name of the instrument
36 (\property Staff.instrument; Staff.instr for subsequent lines)
37 to the left of a staff.
39 This is commented out, so you don't get funny things on the
41 \consists "Instrument_name_engraver";
49 ChoirStaffContext = \translator {
50 \type "Engraver_group_engraver";
52 alignmentReference = \center;
53 \consists "System_start_delimiter_engraver";
54 systemStartDelimiterGlyph = #'bracket
57 \accepts "RhythmicStaff";
58 \accepts "GrandStaff";
59 \accepts "PianoStaff";
61 \accepts "ChordNames";
65 RhythmicStaffContext=\translator{
66 \type "Engraver_group_engraver";
68 \consists "Property_engraver";
69 \consists "Output_property_engraver";
71 Generic_property_list = #generic-staff-properties
73 \consists "Pitch_squash_engraver";
74 \consists "Separating_line_group_engraver";
76 basicBarProperties \push #'bar-size = #4
77 basicVoltaSpannerProperties \push #'minimum-space = #15 % urg, in \pt
78 basicVoltaSpannerProperties \push #'padding = #5 % urg, in \pt
79 basicStaffSymbolProperties \push #'line-count = #1
81 \consists "Repeat_engraver";
82 \consists "Bar_engraver";
83 \consists "Time_signature_engraver";
84 \consists "Staff_symbol_engraver";
85 \consistsend "Axis_group_engraver";
90 VoiceContext = \translator {
91 \type "Engraver_group_engraver";
94 Generic_property_list = #generic-voice-properties
96 \consists "Output_property_engraver";
98 \consists "Dynamic_engraver"; % must come before text_engraver.
99 \consists "Property_engraver";
101 \consists "Breathing_sign_engraver";
102 \consists "Rest_engraver";
103 \consists "Dot_column_engraver";
104 \consists "Stem_engraver";
105 \consists "Beam_engraver";
106 \consists "Auto_beam_engraver";
107 \include "auto-beam-settings.ly";
109 \consists "Chord_tremolo_engraver";
110 \consists "Melisma_engraver";
111 \consists "Text_engraver";
112 \consists "A2_engraver";
113 \consists "Voice_devnull_engraver";
116 startSustain = #"Ped."
118 stopStartSustain = #"*Ped."
119 startUnaChorda = #"una chorda"
120 stopUnaChorda = #"tre chorde"
121 % should make separate lists for stopsustain and startsustain
123 \consists "Piano_pedal_engraver";
124 \consists "Script_engraver";
125 \consists "Script_column_engraver";
126 \consists "Rhythmic_column_engraver";
127 \consists "Slur_engraver";
128 \consists "Tie_engraver";
129 \consists "Tuplet_engraver";
130 \consists "Grace_position_engraver";
131 \consists "Skip_req_swallow_translator";
132 \accepts Thread; % bug if you leave out this!
136 GraceContext=\translator {
137 \type "Grace_engraver_group";
139 \consists "Output_property_engraver";
141 Generic_property_list = #generic-grace-properties
143 \consists "Note_heads_engraver";
144 \consists "Local_key_engraver";
145 \consists "Stem_engraver";
146 \consists "Beam_engraver";
147 \consists "Slur_engraver";
149 \consists "Auto_beam_engraver";
150 \include "auto-beam-settings.ly";
151 \consists "Align_note_column_engraver";
153 \consists "Rhythmic_column_engraver";
155 \consists "Dynamic_engraver";% in Grace ???
156 \consists "Text_engraver"; % in Grace ???
158 \consists "Property_engraver";
160 basicStemProperties \push #'style = #"grace"
161 basicStemProperties \push #'flag-style = #"grace"
162 basicStemProperties \push #'stem-length = #6.0
163 basicStemProperties \push #'direction = #1
165 basicNoteHeadProperties \push #'font-size = #-1
166 basicStemProperties \push #'font-size = #-1
167 basicStemProperties \push #'stem-shorten = #'(0)
168 basicBeamProperties \push #'font-size = #-1
169 basicTextScriptProperties \push #'font-size = #-1
170 basicSlurProperties \push #'font-size = #-1
171 basicLocalKeyProperties \push #'font-size = #-1
172 basicBeamProperties \push #'beam-thickness = #0.3
173 basicBeamProperties \push #'beam-space-function = #(lambda (x) 0.5)
175 basicStemProperties \push #'lengths = #(map (lambda (x) (* 0.8 x)) '(3.5 3.5 3.5 4.5 5.0))
176 basicStemProperties \push #'beamed-lengths =
178 basicStemProperties \push #'minimum-beamed-lengths
179 = #(map (lambda (x) (* 0.8 x)) '(0.0 2.5 2.0 1.5))
181 weAreGraceContext = ##t
182 graceAccidentalSpace= 1.5 ; % in staff space
185 ThreadContext = \translator{
186 \type Engraver_group_engraver;
187 \consists "Thread_devnull_engraver";
188 \consists "Note_heads_engraver";
189 \consists "Output_property_engraver";
190 Generic_property_list = #generic-thread-properties
191 \consists "Property_engraver";
195 GrandStaffContext=\translator{
196 \type "Engraver_group_engraver";
198 \consists "Span_bar_engraver";
199 \consists "System_start_delimiter_engraver";
200 systemStartDelimiterGlyph = #'brace
202 \consists "Property_engraver";
203 Generic_property_list = #generic-grand-staff-properties
207 PianoStaffContext = \translator{\GrandStaffContext
208 alignmentReference = \center;
210 \consists "Vertical_align_engraver";
212 basicVerticalAlignmentProperties \push #'threshold = #'(12 . 12)
214 % \consistsend "Axis_group_engraver";
218 StaffGroupContext= \translator {
219 \type "Engraver_group_engraver";
220 \consists "Span_bar_engraver";
221 \consists "Output_property_engraver";
222 \consists "System_start_delimiter_engraver";
223 systemStartDelimiterGlyph = #'bracket
226 \accepts "RhythmicStaff";
227 \accepts "GrandStaff";
228 \accepts "PianoStaff";
231 \accepts "ChordNames";
236 LyricsVoiceContext= \translator{
237 \type "Engraver_group_engraver";
238 \consistsend "Axis_group_engraver";
239 LyricVoiceMinimumVerticalExtent = #(cons -1.2 1.2)
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 = #".,;:!?\""
250 NoteNamesContext = \translator {
251 \type "Engraver_group_engraver";
253 \consistsend "Axis_group_engraver";
254 \consists "Note_name_engraver";
255 \consists "Separating_line_group_engraver";
258 LyricsContext = \translator {
259 \type "Engraver_group_engraver";
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";
266 \accepts "LyricVoice";
269 ChordNameVoiceContext = \translator {
270 \type "Engraver_group_engraver";
271 \name ChordNameVoice ;
273 \consists "Output_property_engraver";
274 \consistsend "Axis_group_engraver";
275 \consists "Separating_line_group_engraver";
276 \consists "Chord_name_engraver";
278 ChordNameContext = \translator {
279 \type "Engraver_group_engraver";
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";
290 ScoreWithNumbers = \translator {
291 \type "Score_engraver";
293 % uncomment to bar numbers on a whole system.
294 \consists "Bar_number_engraver";
297 StupidScore = \translator {
298 \type "Score_engraver";
300 \consists "Note_heads_engraver";
305 BarNumberingStaffContext = \translator {
307 \consists "Mark_engraver";
310 HaraKiriStaffContext = \translator {
312 \remove "Axis_group_engraver";
313 \consistsend "Hara_kiri_engraver";
314 \consists "Instrument_name_engraver";
318 The HaraKiriStaffContexts doesn't override \name,
319 so it is still named `Staff'.
321 %\translator { \HaraKiriStaffContext }
324 OrchestralPartStaffContext = \translator {
326 \consists "Mark_engraver";
329 ScoreContext = \translator {
330 \type Score_engraver;
334 \consists "Timing_engraver";
335 \consists "Output_property_engraver";
336 \consists "System_start_delimiter_engraver";
337 \consists "Mark_engraver";
338 \consists "Break_align_engraver";
339 \consists "Spacing_engraver";
341 \consists "Vertical_align_engraver";
343 \consists "Lyric_phrasing_engraver";
344 \consists "Bar_number_engraver";
348 \accepts "StaffGroup";
349 \accepts "RhythmicStaff";
351 \accepts "ChordNames";
352 \accepts "GrandStaff";
353 \accepts "ChoirStaff";
354 \accepts "PianoStaff";
355 \accepts "NoteNames";
358 soloIIText = #"Solo II"
361 splitInterval = #'(0 . 1)
362 changeMoment = #`(,(make-moment 0 0) . ,(make-moment 1 512))
364 defaultClef = #"treble"
366 StaffMinimumVerticalExtent = #(cons -4.0 4.0)
369 voltaVisibility = ##t
370 % name, glyph id, c0 position
371 supportedClefTypes = #'(
372 ("treble" . ("clefs-G" -2))
373 ("violin" . ("clefs-G" -2))
374 ("G" . ("clefs-G" -2))
375 ("G2" . ("clefs-G" -2))
376 ("french" . ("clefs-G" -4 ))
377 ("soprano" . ("clefs-C" -4 ))
378 ("mezzosoprano" . ("clefs-C" -2 ))
379 ("alto" . ("clefs-C" 0 ))
380 ("tenor" . ("clefs-C" 2 ))
381 ("baritone" . ("clefs-C" 4 ))
382 ("varbaritone" . ("clefs-F" 0))
383 ("bass" . ("clefs-F" 2 ))
384 ("F" . ( "clefs-F" 2))
385 ("subbass" . ("clefs-F" 4))
387 % where is c0 in this clef?
388 clefPitches = #'(("clefs-G" . -4)
393 automaticPhrasing = ##t;
394 alignmentReference = \down;
395 defaultClef = #"treble"
396 defaultBarType = #"|"
397 systemStartDelimiterGlyph = #'bar-line
400 % what order to print accs. We could compute this,
401 % but computing is more work than putting it here.
403 % Flats come first, then sharps.
404 keyAccidentalOrder = #'(
405 (6 . -1) (2 . -1) (5 . -1 ) (1 . -1) (4 . -1) (0 . -1) (3 . -1)
406 (3 . 1) (0 . 1) (4 . 1) (1 . 1) (5 . 1) (2 . 1) (6 . 1)
408 breakAlignOrder = #'(
420 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
421 % TODO: uniform naming.;
422 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
426 % distances are given in stafflinethickness (thicknesses) and
427 % staffspace (distances)
429 basicBarProperties = #`(
430 (interfaces . (bar-interface staff-bar-interface))
431 (break-align-symbol . Staff_bar)
433 (barsize-procedure . ,Bar::get_staff_bar_size)
434 (molecule-callback . ,Bar::brew_molecule)
435 (visibility-lambda . ,all-visible)
437 (before-line-breaking-callback . ,Bar::before_line_breaking)
439 ;; Ross. page 151 lists other values, we opt for a leaner look
443 (hair-thickness . 1.6)
444 (thick-thickness . 6.0)
448 basicBarNumberProperties = #`(
449 (molecule-callback . ,Text_item::brew_molecule)
451 (visibility-lambda . ,begin-of-line-visible)
457 basicBeamProperties = #basic-beam-properties
458 basicBreakAlignProperties = #`(
460 (interfaces . (break-align-interface))
463 (name . "break alignment")
465 basicBreakAlignGroupProperties = #`(
466 (interfaces . (axis-group-interface))
468 (name . "break alignment group")
470 basicBreathingSignProperties = #`(
471 (interfaces . (breathing-sign-interface))
472 (break-align-symbol . Breathing_sign)
474 (molecule-callback . ,Breathing_sign::brew_molecule)
475 (visibility-lambda . ,begin-of-line-invisible)
476 (name . "breathing sign")
478 basicClefItemProperties = #`(
479 (interfaces . (clef-interface))
480 (molecule-callback . ,Score_element::brew_molecule)
481 (before-line-breaking-callback . ,Clef::before_line_breaking)
483 (break-align-symbol . Clef_item)
484 (visibility-lambda . ,begin-of-line-visible)
487 basicChordNameProperties = #`(
488 (molecule-callback . ,Chord_name::brew_molecule)
489 (interfaces . (chord-name-interface))
490 (after-line-breaking-callback . ,Chord_name::after_line_breaking)
491 (name . "chord name")
493 basicCollisionProperties = #`(
495 (interfaces . (collision-interface))
497 (name . "note collision")
499 basicCrescendoProperties = #`(
500 (molecule-callback . ,Crescendo::brew_molecule)
501 (interfaces . (crescendo-interface dynamic-interface))
503 (shorten-for-letter . 4.0)
505 (dash-thickness . 1.2)
509 basicDotColumnProperties = #`(
510 (interfaces . (dot-column-interface axis-group-interface ))
512 (name . "dot column")
514 basicDotsProperties = #`(
515 (interfaces . (dot-interface))
516 (molecule-callback . ,Dots::brew_molecule)
518 (name . "augmentation dot")
520 basicDynamicTextProperties = #`(
522 (interfaces . (dynamic-interface))
523 (molecule-callback . ,Text_item::brew_molecule)
524 (script-priority . 100)
525 (self-alignment-Y . 0)
526 (name . "dynamic text")
529 basicDynamicLineSpannerProperties = #`(
530 (interfaces . (dynamic-interface axis-group-interface side-position-interface))
534 (name . "dynamic alignment")
537 leftEdgeBasicProperties = #`(
538 (break-align-symbol . Left_edge_item)
542 basicGraceAlignItemProperties = #`(
543 (interfaces . (axis-group-interface align-interface))
545 (horizontal-space . 1.2)
547 (before-line-breaking-callback . ,Grace_align_item::before_line_breaking)
548 (name . "grace alignment")
550 basicHaraKiriVerticalGroupspannerProperties = #`(
551 (interfaces . (hara-kiri-interface))
555 basicHyphenSpannerProperties = #`(
558 (minimum-length . 0.5)
559 (molecule-callback . ,Hyphen_spanner::brew_molecule)
563 basicInstrumentNameProperties = #`(
565 (molecule-callback . ,Text_item::brew_molecule)
566 (break-align-symbol . Instrument_name)
567 (visibility-lambda . ,begin-of-line-visible)
568 (name . "instrument name")
570 basicKeyProperties = #`(
571 (molecule-callback . ,Key_item::brew_molecule)
572 (interfaces . (key-item-interface))
573 (break-align-symbol . Key_item)
574 (visibility-lambda . ,begin-of-line-visible)
576 (name . "key signature")
578 basicLocalKeyProperties = #`(
579 (molecule-callback . ,Local_key_item::brew_molecule)
581 (right-padding . 0.4)
582 (interfaces . (accidentals-interface))
583 (name . "accidentals")
585 basicLineOfScoreProperties = #`(
587 (interfaces . (axis-group-interface))
590 basicLyricExtenderProperties = #`(
591 (interfaces . (lyric-extender-interface))
592 (molecule-callback . ,Lyric_extender::brew_molecule)
593 (height . 0.8) ; stafflinethickness;
594 (right-trim-amount . 0.5)
595 (name . "extender line")
597 basicLyricTextProperties = #`(
598 (interfaces . (lyric-syllable-interface text-item-interface))
599 (molecule-callback . ,Text_item::brew_molecule)
600 (self-alignment-X . 0)
603 (name . "lyric syllable")
605 basicMarkProperties = #`(
606 (interfaces . (mark-interface side-position-interface))
607 (molecule-callback . ,Text_item::brew_molecule)
609 (visibility-lambda . ,end-of-line-invisible)
611 (name . "rehearsal mark")
613 basicMultiMeasureRestProperties = #`(
614 (interfaces . (multi-measure-rest-interface))
615 (spacing-procedure . ,Multi_measure_rest::set_spacing_rods)
616 (molecule-callback . ,Multi_measure_rest::brew_molecule)
619 (padding . 2.0) ; staffspace
620 (minimum-width . 12.5) ; staffspace
621 (name . "multi-measure rest")
623 basicNoteColumnProperties = #`(
624 (interfaces . (axis-group-interface note-column-interface))
626 (name . "note column")
628 basicNoteHeadProperties = #`(
629 (interfaces . (note-head-interface rhythmic-head-interface))
631 (molecule-callback . ,Note_head::brew_molecule)
634 basicNoteNameProperties = #`(
635 (molecule-callback . ,Text_item::brew_molecule)
638 basicOctavateEightProperties = #`(
639 (self-alignment-X . 0)
641 (visibility-lambda . ,begin-of-line-visible)
642 (molecule-callback . ,Text_item::brew_molecule)
645 basicPaperColumnProperties = #`(
646 (interfaces . (paper-column-interface axis-group-interface))
651 %% These text props are only used by line-number-engraver...
652 basicTextProperties = #`( )
654 basicRestProperties = #`(
655 (interfaces . (rest-interface rhythmic-head-interface))
656 (after-line-breaking-callback . ,Rest::after_line_breaking)
657 (molecule-callback . ,Rest::brew_molecule)
658 (minimum-beam-collision-distance . 1.5)
662 basicRestCollisionProperties = #`(
663 (interfaces . (rest-collision-interface))
664 (minimum-distance . 0.75)
665 (name . "rest collision")
667 basicScriptProperties = #`(
668 (molecule-callback . ,Script::brew_molecule)
669 (interfaces . (script-interface side-position-interface))
672 basicScriptColumnProperties = #`(
673 (before-line-breaking-callback . ,Script_column::before_line_breaking)
674 (name . "script column")
676 basicSlurProperties = #default-basic-slur-properties
677 basicSpacingSpannerProperties =#`(
678 (spacing-procedure . ,Spacing_spanner::set_springs)
680 ;; assume that notes at least this long are present.
681 (maximum-duration-for-spacing . ,(make-moment 1 8))
682 (name . "spacing spanner")
684 basicSpanBarProperties = #`(
685 (interfaces . (bar-interface span-bar-interface))
686 (break-align-symbol . Staff_bar)
687 (barsize-procedure . ,Span_bar::get_bar_size)
688 (molecule-callback . ,Bar::brew_molecule)
689 (visibility-lambda . ,begin-of-line-invisible)
692 (before-line-breaking-callback . ,Span_bar::before_line_breaking)
696 ;; Ross. page 151 lists other values, we opt for a leaner look
700 (hair-thickness . 1.6)
701 (thick-thickness . 6.0)
702 (name . "cross staff bar-line")
704 basicStanzaNumberProperties = #`(
706 (molecule-callback . ,Text_item::brew_molecule)
707 (break-align-symbol . Clef_item)
708 (visibility-lambda . ,begin-of-line-visible)
709 (name . "stanza number")
711 basicStaffSymbolProperties = #`(
712 (interfaces . (staff-symbol-interface ))
713 (molecule-callback . ,Staff_symbol::brew_molecule)
716 (name . "staff symbol")
718 basicSystemStartDelimiterProperties = #`(
719 (molecule-callback . ,System_start_delimiter::brew_molecule)
720 (after-line-breaking-callback . ,System_start_delimiter::after_line_breaking)
721 (collapse-height . 1.0)
727 (bracket-thick . 0.25)
728 (bracket-width . 2.0)
729 (name . "system start bracket")
731 basicTextScriptProperties = #`(
732 (molecule-callback . ,Text_item::brew_molecule)
733 (no-spacing-rods . #t)
734 (interfaces . (text-script-interface text-item-interface side-position-interface))
736 (name . "text script")
738 basicTieProperties = #`(
739 (interfaces . (tie-interface))
740 (molecule-callback . ,Tie::brew_molecule)
741 (spacing-procedure . ,Tie::set_spacing_rods)
742 (staffline-clearance . 0.24)
743 (details . ((ratio . 0.333) (height-limit . 1.0)))
746 (minimum-length . 2.5)
749 basicTieColumnProperties = #`(
750 (after-line-breaking-callback . ,Tie_column::after_line_breaking)
751 (interfaces . (tie-column-interface))
752 (name . "tie column")
754 basicTimeSignatureProperties = #`(
755 (interfaces . (time-signature-interface))
756 (molecule-callback . ,Time_signature::brew_molecule)
757 (break-align-symbol . Time_signature)
758 (visibility-lambda . ,all-visible)
760 (name . "time signature")
762 basicTupletSpannerProperties = #`(
766 (after-line-breaking-callback . ,Tuplet_spanner::after_line_breaking)
767 (molecule-callback . ,Tuplet_spanner::brew_molecule)
768 (interfaces . (tuplet-spanner-interface))
770 basicSostenutoPedalProperties = #`(
771 (molecule-callback . ,Text_item::brew_molecule)
773 (no-spacing-rods . #t)
774 (self-alignment-X . 0)
775 (name . "sostenuto pedal")
778 basicStemTremoloProperties = #`(
779 (molecule-callback . ,Stem_tremolo::brew_molecule)
780 (beam-width . 2.0) ; staff-space
781 (beam-thickness . 0.42) ; staff-space
782 (beam-space-function . ,default-beam-space-function)
783 (name . "stem tremolo")
785 basicStemProperties = #`(
786 (interfaces . (stem-interface))
787 (before-line-breaking-callback . ,Stem::before_line_breaking)
788 (molecule-callback . ,Stem::brew_molecule)
790 (beamed-lengths . (0.0 2.5 2.0 1.5))
791 (beamed-minimum-lengths . (0.0 1.5 1.25 1.0))
793 ;; Stems in unnatural (forced) direction should be shortened,
794 ;; according to [Roush & Gourlay]. Their suggestion to knock off
795 ;; a whole staffspace seems a bit drastical: we'll do half.
797 (lengths . (3.5 3.5 3.5 4.5 5.0))
798 (stem-shorten . (0.5))
799 ; if stem is on middle line, choose this direction.
800 (default-neutral-direction . 1)
803 basicSeparationItemProperties = #`(
804 (interfaces . (separation-item-interface))
805 (name . "separation item")
807 basicSeparatingGroupSpannerProperties = #`(
808 (interfaces . (separation-spanner-interface))
809 (spacing-procedure . ,Separating_group_spanner::set_spacing_rods)
810 (name . "separation spanner")
812 basicSustainPedalProperties = #`(
813 (interfaces . (sustain-pedal-interface side-position-interface))
814 (no-spacing-rods . #t)
815 (molecule-callback . ,Sustain_pedal::brew_molecule)
816 (self-alignment-X . 0)
817 (name . "sustain pedal")
819 basicUnaChordaPdealProperties = #`(
820 (molecule-callback . ,Text_item::brew_molecule)
822 (no-spacing-rods . #t)
823 (self-alignment-X . 0)
824 (name . "una chorda pedal")
827 basicVoltaSpannerProperties = #`(
828 (molecule-callback . ,Volta_spanner::brew_molecule)
829 (interfaces . (volta-spanner-interface side-position-interface))
832 (thickness . 1.6) ; stafflinethickness
833 (height . 2.0) ; staffspace;
835 (name . "volta brace")
837 basicVerticalAlignmentProperties = #`(
839 (interfaces . (align-interface axis-group-interface))
840 (name . "vertical alignment")
842 basicVerticalAxisGroupProperties = #`(
844 (interfaces . (axis-group-interface))
845 (name . "Y-axis group")
849 OrchestralScoreContext= \translator {