5 % setup for Request->Element conversion. Guru-only
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
63 \type Engraver_group_engraver
64 \consists "Axis_group_engraver"
65 minimumVerticalExtent = ##f
66 extraVerticalExtent = ##f
68 localKeySignature = #'()
75 \type "Engraver_group_engraver"
77 \consists "System_start_delimiter_engraver"
78 systemStartDelimiter = #'SystemStartBracket
79 localKeySignature = #'()
82 \accepts "RhythmicStaff"
90 \InnerChoirStaffContext
93 \description "Identical to @code{StaffGroup} except that the
94 contained staves are not connected vertically."
96 \accepts "InnerChoirStaff"
97 \accepts "InnerStaffGroup"
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"
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!
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 \type "Engraver_group_engraver"
221 localKeySignature = #'()
223 \description " A group of staffs, with a brace on the left
224 side, grouping the staves together. The bar lines of the
225 contained staves are connected vertically. "
227 \consists "Span_bar_engraver"
228 \consists "Span_arpeggio_engraver"
229 \consists "System_start_delimiter_engraver"
230 systemStartDelimiter = #'SystemStartBrace
240 Just like @code{GrandStaff} but with @code{minVerticalAlign} set
241 equal to @code{maxVerticalAlign} so that interstaff beaming and
242 slurring can be used."
243 verticalAlignmentChildCallback = #Align_interface::fixed_distance_alignment_callback
244 VerticalAlignment \override #'forced-distance = #12
245 VerticalAlignment \override #'self-alignment-Y = #0
247 \consists "Vertical_align_engraver"
248 \consists "Instrument_name_engraver"
253 % \consistsend "Axis_group_engraver"
257 \type "Engraver_group_engraver"
258 \name InnerStaffGroup
259 localKeySignature = #'()
261 \consists "Span_bar_engraver"
262 \consists "Span_arpeggio_engraver"
263 \consists "Output_property_engraver"
264 systemStartDelimiter = #'SystemStartBracket
266 \consists "System_start_delimiter_engraver"
268 \accepts "RhythmicStaff"
269 \accepts "GrandStaff"
270 \accepts "PianoStaff"
273 \accepts "ChordNames"
277 \InnerStaffGroupContext
282 " Groups staffs while adding a bracket on the left side,
283 grouping the staves together. The bar lines of the contained
284 staves are connected vertically.
287 \accepts "InnerChoirStaff"
288 \accepts "ChoirStaff"
289 \accepts "InnerStaffGroup"
290 \accepts "FiguredBass"
296 \type "Engraver_group_engraver"
297 \consistsend "Hara_kiri_engraver"
298 minimumVerticalExtent = #'(-1.2 . 2.4)
299 extraVerticalExtent = ##f
303 Corresponds to a voice with lyrics. Handles the printing of a
304 single line of lyrics.
308 \consists "Separating_line_group_engraver"
309 \consists "Lyric_engraver"
310 \consists "Extender_engraver"
311 \consists "Hyphen_engraver"
312 \consists "Stanza_number_engraver"
313 \consists "Instrument_name_engraver"
314 \consists "Skip_event_swallow_translator"
315 SeparationItem \set #'padding = #0.5
318 \type "Engraver_group_engraver"
320 \consistsend "Axis_group_engraver"
322 minimumVerticalExtent = ##f
323 extraVerticalExtent = ##f
327 \consists "Rest_swallow_translator"
328 \consists "Skip_event_swallow_translator"
329 \consists "Tie_engraver"
330 \consists "Note_swallow_translator"
331 \consists "Note_name_engraver"
332 \consists "Separating_line_group_engraver"
336 \type "Engraver_group_engraver"
338 \description "Typesets lyrics."
340 %% To get folded repeats right.
341 \consists Vertical_align_engraver
343 minimumVerticalExtent = ##f
344 extraVerticalExtent = ##f
347 \accepts "LyricsVoice"
352 \type "Engraver_group_engraver"
354 \description "Typesets chord names."
356 \consists "Rest_swallow_translator"
357 \consists "Output_property_engraver"
358 \consists "Separating_line_group_engraver"
359 \consists "Chord_name_engraver"
360 \consists "Skip_event_swallow_translator"
361 \consistsend "Hara_kiri_engraver"
363 minimumVerticalExtent = #'(0 . 2.5)
364 extraVerticalExtent = ##f
365 SeparatingGroupSpanner \override #'padding = #0.8
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 AncientRemoveEmptyStaffContext = \translator {
381 %% why not add by default?
383 \RemoveEmptyStaffContext
384 \accepts "VaticanaVoice"
385 \accepts "GregorianTranscriptionVoice"
391 localKeySignature = #'()
393 \description "This is the top level notation context. No
394 other context can contain a @code{Score} context. This context
395 handles the administration of time signatures. It also makes sure
396 that items such as clefs, time signatures, and key-signatures are
397 aligned across staves.
399 You cannot explicitly instantiate a Score context (since it is
400 not contained in any other context). It is instantiated
401 automatically when an output definition (a @code{\score} or
402 @code{\paper} block) is processed."
404 \consists "Repeat_acknowledge_engraver"
405 \consists "Staff_collecting_engraver"
407 % move the alias along with the engraver.
409 %% TODO? add this alias from Timing_engraver::initialize() ?
410 \consists "Timing_engraver"
413 \consists "Output_property_engraver"
414 \consists "System_start_delimiter_engraver"
415 \consists "Mark_engraver"
416 \consists "Metronome_mark_engraver"
417 \consists "Break_align_engraver"
418 \consists "Spacing_engraver"
419 \consists "Vertical_align_engraver"
420 \consists "Lyric_phrasing_engraver"
421 \consists "Bar_number_engraver"
422 \consists "Span_arpeggio_engraver"
426 \accepts "VaticanaStaff"
427 \accepts "GregorianTranscriptionStaff"
428 \accepts "StaffContainer"
429 \accepts "StaffGroup"
430 \accepts "RhythmicStaff"
432 \accepts "ChordNames"
433 \accepts "GrandStaff"
434 \accepts "ChoirStaff"
435 \accepts "PianoStaff"
437 \accepts "FiguredBass"
440 soloIIText = #"Solo II"
443 splitInterval = #'(0 . 1)
444 changeMoment = #`(,(ly:make-moment 0 0) . ,(ly:make-moment 1 512))
445 systemStartDelimiter =#'SystemStartBar
447 melismaBusyProperties = #default-melisma-properties
449 clefGlyph = #"clefs-G"
451 centralCPosition = #-6
453 defaultBarType = #"|"
454 barNumberVisibility = #default-bar-number-visibility
457 explicitClefVisibility = #all-visible
458 explicitKeySignatureVisibility = #all-visible
459 autoBeamSettings = #default-auto-beam-settings
461 scriptDefinitions = #default-script-alist
463 verticalAlignmentChildCallback = #Align_interface::alignment_callback
465 pedalSustainStrings = #'("Ped." "*Ped." "*")
466 pedalSustainStyle = #'text
467 pedalUnaCordaStrings = #'("una corda" "" "tre corde")
468 pedalUnaCordaStyle = #'text
470 %% These are in ordinary italic font, including the *,
471 %% but they are unlikely to be used,
472 %% as the default pedal-style for SostenutoPedal is 'mixed':
473 %% i.e. Sost. Ped_____________________
474 pedalSostenutoStrings = #'("Sost. Ped." "*Sost. Ped." "*")
475 pedalSostenutoStyle = #'mixed
477 fingeringOrientations = #'(up down)
478 tupletNumberFormatFunction = #denominator-tuplet-formatter
479 markFormatter = #format-mark-letters
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 = #'(
505 barCheckSynchronize = ##f
508 chordNameFunction = #ignatzek-chord-names
509 majorSevenSymbol = #whiteTriangleMarkup
510 chordNameSeparator = #(make-simple-markup "/")
511 chordNameExceptions = #ignatzekExceptions
512 chordNoteNamer = #'()
513 chordRootNamer = #note-name->markup
515 chordNameExceptionsFull = #fullJazzExceptions
516 chordNameExceptionsPartial = #partialJazzExceptions
519 stringOneTopmost = ##t
522 %% One may change the strings tuning as following :
523 %% The lenght of the list must be equal to the number of string
524 stringTunings = #guitar-tunings
525 tablatureFormat = #fret-number-tablature-format
528 bassFigureFormatFunction = #make-bass-figure-markup
529 metronomeMarkFormatter = #format-metronome-markup
531 (Voice Stem direction 1)
533 ;; TODO: should take from existing definition.
534 ;; c&p from define-grobs.scm
536 (Voice Stem lengths ,(map (lambda (x) (* 0.8 x)) '(3.5 3.5 3.5 4.5 5.0)))
537 (Voice Stem stem-shorten (0.4 0))
538 (Voice Stem font-size -3)
539 (Voice NoteHead font-size -3)
540 (Voice Dots font-size -3)
541 (Voice Stem beamed-lengths
542 ,(map (lambda (x) (* 0.8 x)) '(3.26)))
543 (Voice Stem beamed-minimum-free-lengths
544 ,(map (lambda (x) (* 0.8 x)) '(2.5 2.0 1.5)))
545 (Voice Stem beamed-extreme-minimum-free-lengths
546 ,(map (lambda (x) (* 0.8 x)) '(1.83 1.5)))
548 (Voice Stem no-stem-extend #t)
549 (Voice Beam thickness 0.384)
550 (Voice Beam space-function ,(lambda (beam mult)
551 (* 0.8 (Beam::space_function
553 (Voice Beam position-callbacks (,Beam::least_squares
555 ,Beam::slope_damping))
556 (Staff Accidental font-size -4)
557 (Voice Slur direction -1)
560 \grobdescriptions #all-grob-descriptions
563 OrchestralScoreContext = \translator {
567 EasyNotation = \translator {
569 NoteHead \override #'molecule-callback = #Note_head::brew_ez_molecule
570 NoteHead \override #'Y-extent-callback = #'()
571 NoteHead \override #'X-extent-callback = #'()
577 \type "Engraver_group_engraver"
579 \consists "Figured_bass_engraver"
580 \consists "Rest_swallow_translator"
581 \consists "Note_swallow_translator"
582 \consists "Separating_line_group_engraver"
584 \consistsend "Hara_kiri_engraver"
591 \consists "Tab_note_heads_engraver"
592 \remove "Fingering_engraver"
593 \remove "New_fingering_engraver"
595 Slur \override #'font-family = #'roman
596 Slur \override #'molecule-callback = #hammer-molecule-callback
597 Slur \override #'direction = #-1
599 % Draws all stems/beams out of the staff (and not in the middle of the staff !)
600 % This feature is now disabled because most of the tab does not use it.
601 %Beam \override #'damping = #100000
602 %Stem \override #'up-to-staff = ##t
604 % No accidental in tablature !
605 \remove Accidental_engraver
614 \description "Context for generating tablature. [DOCME]"
617 TODO: this context should use a special staff_symbol engraver that
618 takes the line count out of the stringTunings property.
626 StaffSymbol \override #'line-count = #6
627 StaffSymbol \override #'staff-space = #1.5
629 % Don't draw stems over the tablature figures !
630 Stem \override #'avoid-note-head = ##t
632 % No accidental in tablature !
633 \remove "Accidental_engraver"
634 \remove "Key_engraver"
635 \remove "String_number_engraver"
637 clefGlyph = #"clefs-tab"
641 % TODO: Gregorian Chant contexts should be moved to gregorian-init.ly,
642 % but this does not work (is this a bug or intended behaviour?):
644 % If I try to do so, I get "error: unknown escaped string:
645 % `\VaticanaStaffContext'" in params-init.ly. If I also move
646 % "\translator { \Vaticana*Context }" from params-init.ly to the end
647 % of gregorian-init.ly, then I get "error: parse error, unexpected
648 % TRANSLATOR: \translator { \VaticanaStaffContext }" in
649 % gregorian-init.ly. --jr
653 \name "VaticanaVoice"
655 \description "Same as @code{Voice} context, except that it is accommodated for tyepsetting Gregorian Chant in the notational style of Editio Vaticana."
657 % We can not remove Slur_engraver, since \addlyrics depends on it.
658 % Instead, we make the grob transparent.
659 % Unfortunately, this gives us a lot of warnings ("Degenerate bow:
660 % infinite steepness reqd"), since in ligatures, all note heads are in
661 % the same paper column such that the (transparent) slurs eventually may
662 % start and end in the same column.
663 Slur \override #'transparent = ##t
665 % We can not remove Stem_engraver, since slurs depend on stems. If
666 % we try anyway, lily will crash in slur.scm:16:6: "Wrong type argument
667 % in position 1 (expecting grob): ()".
668 % As a workaround, we make the grob transparent.
669 Stem \set #'transparent = ##t
671 % Since we do not remove stems, but only make it transparent, we have
672 % to set the length to 0.0. Otherwise, articulation marks (such as
673 % ictus, circulus or accentus) may be vertically placed quite away from
675 Stem \set #'length = #'0.0
677 \remove "Ligature_bracket_engraver"
678 \consists "Vaticana_ligature_engraver"
680 % Set default head for notes outside of \[ \].
681 NoteHead \set #'style = #'vaticana_punctum
683 % Put some space before and after divisiones.
684 % FIXME: This does not seem to show any effect.
685 Script \set #'padding = #0.5
687 % There are no beams in Gregorian Chant notation.
690 % Prepare TextSpanner for \episem{Initium|Finis} use.
691 TextSpanner \set #'style = #'line
692 TextSpanner \set #'edge-height = #'(0 . 0)
693 TextSpanner \set #'padding = #0.5
694 TextSpanner \set #'enclose-bounds = ##t
695 TextSpanner \set #'edge-text = #'("" . "")
700 \name "VaticanaStaff"
703 \accepts "VaticanaVoice"
704 \description "Same as @code{Staff} context, except that it is accommodated for tyepsetting Gregorian Chant in the notational style of Editio Vaticana."
706 \remove "Time_signature_engraver"
707 \consists "Custos_engraver"
709 % We can not remove Bar_engraver; otherwise clefs and custodes will
710 % not show up any more among other line breaking issues.
711 % Instead, we make the grob transparent.
712 BarLine \set #'transparent = ##t
714 StaffSymbol \set #'line-count = #4
715 StaffSymbol \set #'thickness = #0.6
717 % FIXME: unit on StaffSymbol's width should be \linewidth.
718 % StaffSymbol \set #'width = #60.0
720 % Choose vaticana do clef on 3rd line as default.
721 clefGlyph = #"clefs-vaticana_do"
722 centralCPosition = #1
726 % Select vaticana style font.
727 KeySignature \set #'style = #'vaticana
728 Accidental \set #'style = #'vaticana
729 Custos \set #'style = #'vaticana
730 Custos \set #'neutral-position = #3
731 Custos \set #'neutral-direction = #-1
732 Custos \set #'adjust-if-on-staffline = ##t
735 % Score.barAlways = ##t
740 \name "GregorianTranscriptionVoice"
743 % Removing ligature bracket engraver without replacing it by some
744 % other ligature engraver would cause a "Junking event: `LigatureEvent'"
745 % warning for every "\[" and "\]". Therefore, we make the grob
746 % transparent instead.
747 LigatureBracket \set #'transparent = ##t
749 % We can not remove Slur_engraver, since \addlyrics depends on it.
750 % Instead, we make the grob transparent.
751 % Unfortunately, this gives us a lot of warnings ("Degenerate bow:
752 % infinite steepness reqd"), since in ligatures, all note heads are in
753 % the same paper column such that the (transparent) slurs eventually may
754 % start and end in the same column.
755 Slur \override #'transparent = ##t
757 % We can not remove Stem_engraver, since slurs depend on stems. If
758 % we try anyway, lily will crash in slur.scm:16:6: "Wrong type argument
759 % in position 1 (expecting grob): ()".
760 % As a workaround, we make the grob transparent.
761 Stem \set #'transparent = ##t
763 % Since we do not remove stems, but only make it transparent, we have
764 % to set the length to 0.0. Otherwise, articulation marks (such as
765 % ictus, circulus or accentus) may be vertically placed quite away from
767 Stem \set #'length = #'0.0
769 % Put some space before and after divisiones.
770 % FIXME: This does not seem to show any effect.
771 Script \set #'padding = #0.5
773 % There are no beams in Gregorian Chant notation.
776 % Prepare TextSpanner for \episem{Initium|Finis} use.
777 TextSpanner \set #'style = #'line
778 TextSpanner \set #'edge-height = #'(0 . 0)
779 TextSpanner \set #'padding = #0.5
780 TextSpanner \set #'enclose-bounds = ##t
781 TextSpanner \set #'edge-text = #'("" . "")
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