5 % setup for Request->Element conversion. Guru-only
8 StaffContext=\translator {
9 \type "Engraver_group_engraver"
12 \description "Handles clefs, bar lines, keys, accidentals. It can contain
13 @code{Voice} contexts."
16 \consists "Output_property_engraver"
18 \consists "Bar_engraver"
19 % Bar_engraver must be first so default bars aren't overwritten
21 \consists "Font_size_engraver"
23 % \consists "Repeat_engraver"
24 \consists "Volta_engraver"
25 \consists "Separating_line_group_engraver"
26 SeparatingGroupSpanner \override #'spacing-procedure
27 = #Separating_group_spanner::set_spacing_rods_and_seqs
28 \consists "Dot_column_engraver"
30 % perhaps move to Voice context?
31 \consists "Ottava_spanner_engraver"
32 \consists "Clef_engraver"
33 \consists "Key_engraver"
34 \consists "Time_signature_engraver"
35 \consists "Staff_symbol_engraver"
36 \consists "Collision_engraver"
37 \consists "Rest_collision_engraver"
38 \consists "Accidental_engraver"
39 \consists "Piano_pedal_engraver"
40 \consists "Instrument_name_engraver"
41 \consists "Grob_pq_engraver"
42 \consists "Forbid_line_break_engraver"
43 \consists "String_number_engraver"
44 \consistsend "Axis_group_engraver"
46 minimumVerticalExtent = #'(-6 . 6)
47 extraVerticalExtent = ##f
49 localKeySignature = #'()
51 % explicitly set instrument, so we don't get
52 % weird effects when doing instrument names for
62 StaffContainerContext = \translator {
63 \type Engraver_group_engraver
64 \consists "Axis_group_engraver"
65 minimumVerticalExtent = ##f
66 extraVerticalExtent = ##f
68 localKeySignature = #'()
74 InnerChoirStaffContext = \translator {
75 \type "Engraver_group_engraver"
77 \consists "System_start_delimiter_engraver"
78 systemStartDelimiter = #'SystemStartBracket
79 localKeySignature = #'()
82 \accepts "RhythmicStaff"
89 ChoirStaffContext = \translator {
90 \InnerChoirStaffContext
93 \description "Identical to @code{StaffGroup} except that the
94 contained staves are not connected vertically."
96 \accepts "InnerChoirStaff"
97 \accepts "InnerStaffGroup"
101 RhythmicStaffContext=\translator{
102 \type "Engraver_group_engraver"
104 \consists "Output_property_engraver"
107 A context like @code{Staff} but for printing rhythms. Pitches are
108 ignored; the notes are printed on one line.
110 minimumVerticalExtent = ##f
111 extraVerticalExtent = ##f
113 localKeySignature = #'()
115 \consists "Pitch_squash_engraver"
116 \consists "Separating_line_group_engraver"
120 BarLine \override #'bar-size = #4
121 VoltaBracket \override #'minimum-space = #15 % urg, in \pt
122 VoltaBracket \override #'padding = #5 % urg, in \pt
123 StaffSymbol \override #'line-count = #1
125 Stem \override #'neutral-direction = #1
126 Beam \override #'neutral-direction = #1
127 % \consists "Repeat_engraver"
128 \consists "Dot_column_engraver"
129 \consists "Volta_engraver"
130 \consists "Bar_engraver"
131 \consists "Time_signature_engraver"
132 \consists "Staff_symbol_engraver"
133 \consists "Instrument_name_engraver"
134 \consistsend "Axis_group_engraver"
139 VoiceContext = \translator {
140 \type "Engraver_group_engraver"
144 Corresponds to a voice on a staff. This context handles the
145 conversion of dynamic signs, stems, beams, super- and subscripts,
146 slurs, ties, and rests.
148 You have to instantiate this explicitly if you want to have
149 multiple voices on the same staff."
151 localKeySignature = #'()
152 \consists "Font_size_engraver"
154 % must come before all
155 \consists "Voice_devnull_engraver"
156 \consists "Output_property_engraver"
157 \consists "Arpeggio_engraver"
158 \consists "Multi_measure_rest_engraver"
159 \consists "Text_spanner_engraver"
160 \consists "Grob_pq_engraver"
162 \consists "Note_head_line_engraver"
163 \consists "Glissando_engraver"
164 \consists "Ligature_bracket_engraver"
165 \consists "Breathing_sign_engraver"
166 % \consists "Rest_engraver"
167 \consists "Stem_engraver"
168 \consists "Beam_engraver"
169 \consists "Grace_beam_engraver"
170 \consists "Auto_beam_engraver"
171 \consists "New_fingering_engraver"
172 \consists "Chord_tremolo_engraver"
173 \consists "Percent_repeat_engraver"
174 \consists "Slash_repeat_engraver"
175 \consists "Melisma_engraver"
178 Must come before text_engraver, but after note_column engraver.
181 \consists "Text_engraver"
182 \consists "Dynamic_engraver"
183 \consists "Fingering_engraver"
185 \consists "Script_engraver"
186 \consists "Script_column_engraver"
187 \consists "Rhythmic_column_engraver"
188 \consists "Phrasing_slur_engraver"
189 \consists "Cluster_spanner_engraver"
190 \consists "Slur_engraver"
191 \consists "Tie_engraver"
192 \consists "Tuplet_engraver"
193 \consists "A2_engraver"
195 \consists "Skip_event_swallow_translator"
196 \accepts Thread % bug if you leave out this!
199 ThreadContext = \translator{
200 \type Engraver_group_engraver
202 localKeySignature = #'()
204 Handles note heads, and is contained in the Voice context. You
205 have to instantiate this explicitly if you want to adjust the
206 style of individual note heads.
208 \consists "Font_size_engraver"
209 \consists "Thread_devnull_engraver"
210 \consists "Note_heads_engraver"
211 \consists "Rest_engraver"
214 \consists "Output_property_engraver"
219 GrandStaffContext=\translator{
220 \type "Engraver_group_engraver"
222 localKeySignature = #'()
224 \description " A group of staffs, with a brace on the left
225 side, grouping the staves together. The bar lines of the
226 contained staves are connected vertically. "
228 \consists "Span_bar_engraver"
229 \consists "Span_arpeggio_engraver"
230 \consists "System_start_delimiter_engraver"
231 systemStartDelimiter = #'SystemStartBrace
236 PianoStaffContext = \translator{
241 Just like @code{GrandStaff} but with @code{minVerticalAlign} set
242 equal to @code{maxVerticalAlign} so that interstaff beaming and
243 slurring can be used."
244 verticalAlignmentChildCallback = #Align_interface::fixed_distance_alignment_callback
245 VerticalAlignment \override #'forced-distance = #12
246 VerticalAlignment \override #'self-alignment-Y = #0
248 \consists "Vertical_align_engraver"
249 \consists "Instrument_name_engraver"
254 % \consistsend "Axis_group_engraver"
257 InnerStaffGroupContext= \translator {
258 \type "Engraver_group_engraver"
259 \name InnerStaffGroup
260 localKeySignature = #'()
262 \consists "Span_bar_engraver"
263 \consists "Span_arpeggio_engraver"
264 \consists "Output_property_engraver"
265 systemStartDelimiter = #'SystemStartBracket
267 \consists "System_start_delimiter_engraver"
269 \accepts "RhythmicStaff"
270 \accepts "GrandStaff"
271 \accepts "PianoStaff"
274 \accepts "ChordNames"
277 StaffGroupContext = \translator {
278 \InnerStaffGroupContext
283 " Groups staffs while adding a bracket on the left side,
284 grouping the staves together. The bar lines of the contained
285 staves are connected vertically.
288 \accepts "InnerChoirStaff"
289 \accepts "ChoirStaff"
290 \accepts "InnerStaffGroup"
291 \accepts "FiguredBass"
296 LyricsVoiceContext= \translator{
297 \type "Engraver_group_engraver"
298 \consistsend "Hara_kiri_engraver"
299 minimumVerticalExtent = #'(-1.2 . 2.4)
300 extraVerticalExtent = ##f
304 Corresponds to a voice with lyrics. Handles the printing of a
305 single line of lyrics.
309 \consists "Separating_line_group_engraver"
310 \consists "Lyric_engraver"
311 \consists "Extender_engraver"
312 \consists "Hyphen_engraver"
313 \consists "Stanza_number_engraver"
314 \consists "Skip_event_swallow_translator"
315 phrasingPunctuation = #".,:!?\""
316 SeparationItem \set #'padding = #0.5
318 NoteNamesContext = \translator {
319 \type "Engraver_group_engraver"
321 \consistsend "Axis_group_engraver"
323 minimumVerticalExtent = ##f
324 extraVerticalExtent = ##f
328 \consists "Rest_swallow_translator"
329 \consists "Skip_event_swallow_translator"
330 \consists "Tie_engraver"
331 \consists "Note_swallow_translator"
332 \consists "Note_name_engraver"
333 \consists "Separating_line_group_engraver"
336 LyricsContext = \translator {
337 \type "Engraver_group_engraver"
339 \description "Typesets lyrics."
340 %% To get folded repeats right.
341 \consists Vertical_align_engraver
343 % \consistsend "Hara_kiri_engraver"
344 minimumVerticalExtent = ##f
345 extraVerticalExtent = ##f
348 \accepts "LyricsVoice"
352 ChordNamesContext = \translator {
353 \type "Engraver_group_engraver"
355 \description "Typesets chord names."
357 \consists "Rest_swallow_translator"
358 \consists "Output_property_engraver"
359 \consists "Separating_line_group_engraver"
360 \consists "Chord_name_engraver"
361 \consists "Skip_event_swallow_translator"
362 \consistsend "Hara_kiri_engraver"
364 minimumVerticalExtent = #'(0 . 2.5)
365 extraVerticalExtent = ##f
370 RemoveEmptyStaffContext = \translator {
372 \remove "Axis_group_engraver"
373 \consistsend "Hara_kiri_engraver"
376 % hara kiri & auto knee don't work together.
377 Beam \override #'auto-knee-gap = #'()
380 RemoveEmptyStaffContext = \translator {
381 \RemoveEmptyStaffContext
382 \accepts "VaticanaVoice"
383 \accepts "GregorianTranscriptionVoice"
386 ScoreContext = \translator {
389 localKeySignature = #'()
391 \description "This is the top level notation context. No
392 other context can contain a @code{Score} context. This context
393 handles the administration of time signatures. It also makes sure
394 that items such as clefs, time signatures, and key-signatures are
395 aligned across staves.
397 You cannot explicitly instantiate a Score context (since it is
398 not contained in any other context). It is instantiated
399 automatically when an output definition (a @code{\score} or
400 @code{\paper} block) is processed."
402 \consists "Repeat_acknowledge_engraver"
403 \consists "Staff_collecting_engraver"
405 % move the alias along with the engraver.
407 %% TODO? add this alias from Timing_engraver::initialize() ?
408 \consists "Timing_engraver"
411 \consists "Output_property_engraver"
412 \consists "System_start_delimiter_engraver"
413 \consists "Mark_engraver"
414 \consists "Metronome_mark_engraver"
415 \consists "Break_align_engraver"
416 \consists "Spacing_engraver"
417 \consists "Vertical_align_engraver"
418 \consists "Lyric_phrasing_engraver"
419 \consists "Bar_number_engraver"
420 \consists "Span_arpeggio_engraver"
424 \accepts "VaticanaStaff"
425 \accepts "GregorianTranscriptionStaff"
426 \accepts "StaffContainer"
427 \accepts "StaffGroup"
428 \accepts "RhythmicStaff"
430 \accepts "ChordNames"
431 \accepts "GrandStaff"
432 \accepts "ChoirStaff"
433 \accepts "PianoStaff"
435 \accepts "FiguredBass"
438 soloIIText = #"Solo II"
441 splitInterval = #'(0 . 1)
442 changeMoment = #`(,(ly:make-moment 0 0) . ,(ly:make-moment 1 512))
443 systemStartDelimiter =#'SystemStartBar
445 melismaBusyProperties = #'(melismaBusy slurMelismaBusy tieMelismaBusy beamMelismaBusy)
447 clefGlyph = #"clefs-G"
449 centralCPosition = #-6
451 automaticPhrasing = ##t
452 automaticMelismata = ##t
454 defaultBarType = #"|"
455 barNumberVisibility = #default-bar-number-visibility
458 explicitClefVisibility = #all-visible
459 explicitKeySignatureVisibility = #all-visible
460 autoBeamSettings = #default-auto-beam-settings
462 scriptDefinitions = #default-script-alist
464 verticalAlignmentChildCallback = #Align_interface::alignment_callback
466 pedalSustainStrings = #'("Ped." "*Ped." "*")
467 pedalSustainStyle = #'text
468 pedalUnaCordaStrings = #'("una corda" "" "tre corde")
469 pedalUnaCordaStyle = #'text
471 %% These are in ordinary italic font, including the *,
472 %% but they are unlikely to be used,
473 %% as the default pedal-style for SostenutoPedal is 'mixed':
474 %% i.e. Sost. Ped_____________________
475 pedalSostenutoStrings = #'("Sost. Ped." "*Sost. Ped." "*")
476 pedalSostenutoStyle = #'mixed
478 fingeringOrientations = #'(up down)
479 tupletNumberFormatFunction = #denominator-tuplet-formatter
484 autoAccidentals = #'(Staff (same-octave . 0))
485 autoCautionaries = #'()
487 keyAccidentalOrder = #`(
488 (6 . ,FLAT) (2 . ,FLAT) (5 . ,FLAT ) (1 . ,FLAT) (4 . ,FLAT) (0 . ,FLAT) (3 . ,FLAT)
489 (3 . ,SHARP) (0 . ,SHARP) (4 . ,SHARP) (1 . ,SHARP) (5 . ,SHARP) (2 . ,SHARP) (6 . ,SHARP)
490 (6 . ,DOUBLE-FLAT) (2 . ,DOUBLE-FLAT) (5 . ,DOUBLE-FLAT ) (1 . ,DOUBLE-FLAT) (4 . ,DOUBLE-FLAT) (0 . ,DOUBLE-FLAT) (3 . ,DOUBLE-FLAT)
491 (3 . ,DOUBLE-SHARP) (0 . ,DOUBLE-SHARP) (4 . ,DOUBLE-SHARP) (2 . ,DOUBLE-SHARP) (5 . ,DOUBLE-SHARP) (2 . ,DOUBLE-SHARP) (6 . ,DOUBLE-SHARP)
493 breakAlignOrder = #'(
504 barCheckSynchronize = ##t
507 chordNameFunction = #ignatzek-chord-names
508 majorSevenSymbol = #whiteTriangleMarkup
509 chordNameSeparator = #(make-simple-markup "/")
510 chordNameExceptions = #ignatzekExceptions
511 chordNoteNamer = #'()
512 chordRootNamer = #note-name->markup
514 chordNameExceptionsFull = #fullJazzExceptions
515 chordNameExceptionsPartial = #partialJazzExceptions
518 stringOneTopmost = ##t
521 %% One may change the strings tuning as following :
522 %% The lenght of the list must be equal to the number of string
523 stringTunings = #guitar-tunings
524 tablatureFormat = #fret-number-tablature-format
527 bassFigureFormatFunction = #make-bass-figure-markup
528 metronomeMarkFormatter = #make-metronome-markup
532 (Voice Stem direction 1)
534 ;; TODO: should take from existing definition.
535 ;; c&p from define-grobs.scm
537 (Voice Stem lengths ,(map (lambda (x) (* 0.8 x)) '(3.5 3.5 3.5 4.5 5.0)))
538 (Voice Stem stem-shorten (0.4 0))
539 (Voice Stem font-relative-size -1)
540 (Voice NoteHead font-relative-size -1)
541 (Voice Dots font-relative-size -1)
542 (Voice Stem beamed-lengths
543 ,(map (lambda (x) (* 0.8 x)) '(3.26)))
544 (Voice Stem beamed-minimum-free-lengths
545 ,(map (lambda (x) (* 0.8 x)) '(2.5 2.0 1.5)))
546 (Voice Stem beamed-extreme-minimum-free-lengths
547 ,(map (lambda (x) (* 0.8 x)) '(1.83 1.5)))
549 (Voice Stem no-stem-extend #t)
550 (Voice Beam thickness 0.384)
551 (Voice Beam space-function ,(lambda (beam mult)
552 (* 0.8 (Beam::space_function
554 (Voice Beam position-callbacks (,Beam::least_squares
556 ,Beam::slope_damping))
557 (Staff Accidental font-relative-size -2)
558 (Voice Slur direction -1)
561 \grobdescriptions #all-grob-descriptions
564 OrchestralScoreContext= \translator {
568 EasyNotation = \translator {
570 NoteHead \override #'molecule-callback = #Note_head::brew_ez_molecule
575 FiguredBassContext = \translator {
576 \type "Engraver_group_engraver"
578 \consists "Figured_bass_engraver"
579 \consists "Rest_swallow_translator"
580 \consists "Note_swallow_translator"
581 \consists "Separating_line_group_engraver"
583 \consistsend "Hara_kiri_engraver"
586 TabVoiceContext = \translator {
590 \consists "Tab_note_heads_engraver"
591 \remove "Fingering_engraver"
592 \remove "New_fingering_engraver"
594 Slur \override #'font-family = #'roman
595 Slur \override #'molecule-callback = #hammer-molecule-callback
596 Slur \override #'direction = #-1
598 % Draws all stems/beams out of the staff (and not in the middle of the staff !)
599 % This feature is now disabled because most of the tab does not use it.
600 %Beam \override #'damping = #100000
601 %Stem \override #'up-to-staff = ##t
603 % No accidental in tablature !
604 \remove Accidental_engraver
607 TabStaffContext = \translator {
613 \description "Context for generating tablature. [DOCME]"
616 TODO: this context should use a special staff_symbol engraver that
617 takes the line count out of the stringTunings property.
625 StaffSymbol \override #'line-count = #6
626 StaffSymbol \override #'staff-space = #1.5
628 % Don't draw stems over the tablature figures !
629 Stem \override #'avoid-note-head = ##t
631 % No accidental in tablature !
632 \remove "Accidental_engraver"
633 \remove "Key_engraver"
634 \remove "String_number_engraver"
636 clefGlyph = #"clefs-tab"
640 % TODO: Gregorian Chant contexts should be moved to gregorian-init.ly,
641 % but this does not work (is this a bug or intended behaviour?):
643 % If I try to do so, I get "error: unknown escaped string:
644 % `\VaticanaStaffContext'" in params-init.ly. If I also move
645 % "\translator { \Vaticana*Context }" from params-init.ly to the end
646 % of gregorian-init.ly, then I get "error: parse error, unexpected
647 % TRANSLATOR: \translator { \VaticanaStaffContext }" in
648 % gregorian-init.ly. --jr
650 VaticanaVoiceContext = \translator {
652 \name "VaticanaVoice"
654 \description "Same as @code{Voice} context, except that it is accommodated for tyepsetting Gregorian Chant in the notational style of Editio Vaticana."
656 % We can not remove Slur_engraver, since \addlyrics depends on it.
657 % Instead, we make the grob transparent.
658 % Unfortunately, this gives us a lot of warnings ("Degenerate bow:
659 % infinite steepness reqd"), since in ligatures, all note heads are in
660 % the same paper column such that the (transparent) slurs eventually may
661 % start and end in the same column.
662 Slur \override #'transparent = ##t
664 % We can not remove Stem_engraver, since slurs depend on stems. If
665 % we try anyway, lily will crash in slur.scm:16:6: "Wrong type argument
666 % in position 1 (expecting grob): ()".
667 % As a workaround, we make the grob transparent.
668 Stem \set #'transparent = ##t
670 % Since we do not remove stems, but only make it transparent, we have
671 % to set the length to 0.0. Otherwise, articulation marks (such as
672 % ictus, circulus or accentus) may be vertically placed quite away from
674 Stem \set #'length = #'0.0
676 \remove "Ligature_bracket_engraver"
677 \consists "Vaticana_ligature_engraver"
679 % Set default head for notes outside of \[ \].
680 NoteHead \set #'style = #'vaticana_punctum
682 % Put some space before and after divisiones.
683 % FIXME: This does not seem to show any effect.
684 Script \set #'padding = #0.5
686 % There are no beams in Gregorian Chant notation.
689 % Prepare TextSpanner for \episem{Initium|Finis} use.
690 TextSpanner \set #'style = #'line
691 TextSpanner \set #'edge-height = #'(0 . 0)
692 TextSpanner \set #'padding = #0.5
693 TextSpanner \set #'enclose-bounds = ##t
694 TextSpanner \set #'edge-text = #'("" . "")
697 VaticanaStaffContext = \translator {
699 \name "VaticanaStaff"
702 \accepts "VaticanaVoice"
703 \description "Same as @code{Staff} context, except that it is accommodated for tyepsetting Gregorian Chant in the notational style of Editio Vaticana."
705 \remove "Time_signature_engraver"
706 \consists "Custos_engraver"
708 % We can not remove Bar_engraver; otherwise clefs and custodes will
709 % not show up any more among other line breaking issues.
710 % Instead, we make the grob transparent.
711 BarLine \set #'transparent = ##t
713 StaffSymbol \set #'line-count = #4
714 StaffSymbol \set #'thickness = #0.6
716 % FIXME: unit on StaffSymbol's width should be \linewidth.
717 % StaffSymbol \set #'width = #60.0
719 % Choose vaticana do clef on 3rd line as default.
720 clefGlyph = #"clefs-vaticana_do"
721 centralCPosition = #1
725 % Select vaticana style font.
726 KeySignature \set #'style = #'vaticana
727 Accidental \set #'style = #'vaticana
728 Custos \set #'style = #'vaticana
729 Custos \set #'neutral-position = #3
730 Custos \set #'neutral-direction = #-1
731 Custos \set #'adjust-if-on-staffline = ##t
734 % Score.barAlways = ##t
737 GregorianTranscriptionVoiceContext = \translator {
739 \name "GregorianTranscriptionVoice"
742 % Removing ligature bracket engraver without replacing it by some
743 % other ligature engraver would cause a "Junking event: `LigatureEvent'"
744 % warning for every "\[" and "\]". Therefore, we make the grob
745 % transparent instead.
746 LigatureBracket \set #'transparent = ##t
748 % We can not remove Slur_engraver, since \addlyrics depends on it.
749 % Instead, we make the grob transparent.
750 % Unfortunately, this gives us a lot of warnings ("Degenerate bow:
751 % infinite steepness reqd"), since in ligatures, all note heads are in
752 % the same paper column such that the (transparent) slurs eventually may
753 % start and end in the same column.
754 Slur \override #'transparent = ##t
756 % We can not remove Stem_engraver, since slurs depend on stems. If
757 % we try anyway, lily will crash in slur.scm:16:6: "Wrong type argument
758 % in position 1 (expecting grob): ()".
759 % As a workaround, we make the grob transparent.
760 Stem \set #'transparent = ##t
762 % Since we do not remove stems, but only make it transparent, we have
763 % to set the length to 0.0. Otherwise, articulation marks (such as
764 % ictus, circulus or accentus) may be vertically placed quite away from
766 Stem \set #'length = #'0.0
768 % Put some space before and after divisiones.
769 % FIXME: This does not seem to show any effect.
770 Script \set #'padding = #0.5
772 % There are no beams in Gregorian Chant notation.
775 % Prepare TextSpanner for \episem{Initium|Finis} use.
776 TextSpanner \set #'style = #'line
777 TextSpanner \set #'edge-height = #'(0 . 0)
778 TextSpanner \set #'padding = #0.5
779 TextSpanner \set #'enclose-bounds = ##t
780 TextSpanner \set #'edge-text = #'("" . "")
783 GregorianTranscriptionStaffContext = \translator {
785 \name "GregorianTranscriptionStaff"
788 \accepts "GregorianTranscriptionVoice"
790 % We can not remove Bar_engraver; otherwise clefs and custodes will
791 % not show up any more among other line breaking issues.
792 % Instead, we make the grob transparent.
793 BarLine \set #'transparent = ##t