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
122 VoltaBracket \override #'padding = #5
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 \consists "Output_property_engraver"
155 \consists "Arpeggio_engraver"
156 \consists "Multi_measure_rest_engraver"
157 \consists "Text_spanner_engraver"
158 \consists "Grob_pq_engraver"
160 \consists "Note_head_line_engraver"
161 \consists "Glissando_engraver"
162 \consists "Ligature_bracket_engraver"
163 \consists "Breathing_sign_engraver"
164 % \consists "Rest_engraver"
165 \consists "Stem_engraver"
166 \consists "Beam_engraver"
167 \consists "Grace_beam_engraver"
168 \consists "Auto_beam_engraver"
169 \consists "New_fingering_engraver"
170 \consists "Chord_tremolo_engraver"
171 \consists "Percent_repeat_engraver"
172 \consists "Slash_repeat_engraver"
173 \consists "Melisma_engraver"
174 \consists "Part_combine_engraver"
177 Must come before text_engraver, but after note_column engraver.
180 \consists "Text_engraver"
181 \consists "Dynamic_engraver"
182 \consists "Fingering_engraver"
184 \consists "Script_engraver"
185 \consists "Script_column_engraver"
186 \consists "Rhythmic_column_engraver"
187 \consists "Phrasing_slur_engraver"
188 \consists "Cluster_spanner_engraver"
189 \consists "Slur_engraver"
190 \consists "Tie_engraver"
191 \consists "Tuplet_engraver"
193 \consists "Skip_event_swallow_translator"
194 \accepts Thread % bug if you leave out this!
198 \type Engraver_group_engraver
200 localKeySignature = #'()
202 Handles note heads, and is contained in the Voice context. You
203 have to instantiate this explicitly if you want to adjust the
204 style of individual note heads.
206 \consists "Font_size_engraver"
207 \consists "Note_heads_engraver"
208 \consists "Rest_engraver"
211 \consists "Output_property_engraver"
216 \type "Engraver_group_engraver"
218 localKeySignature = #'()
220 \description " A group of staffs, with a brace on the left
221 side, grouping the staves together. The bar lines of the
222 contained staves are connected vertically. "
224 \consists "Span_bar_engraver"
225 \consists "Span_arpeggio_engraver"
226 \consists "System_start_delimiter_engraver"
227 systemStartDelimiter = #'SystemStartBrace
237 Just like @code{GrandStaff} but with @code{minVerticalAlign} set
238 equal to @code{maxVerticalAlign} so that interstaff beaming and
239 slurring can be used."
240 verticalAlignmentChildCallback = #Align_interface::fixed_distance_alignment_callback
241 VerticalAlignment \override #'forced-distance = #12
242 VerticalAlignment \override #'self-alignment-Y = #0
244 \consists "Vertical_align_engraver"
245 \consists "Instrument_name_engraver"
250 % \consistsend "Axis_group_engraver"
254 \type "Engraver_group_engraver"
255 \name InnerStaffGroup
256 localKeySignature = #'()
258 \consists "Span_bar_engraver"
259 \consists "Span_arpeggio_engraver"
260 \consists "Output_property_engraver"
261 systemStartDelimiter = #'SystemStartBracket
263 \consists "System_start_delimiter_engraver"
265 \accepts "RhythmicStaff"
266 \accepts "GrandStaff"
267 \accepts "PianoStaff"
270 \accepts "ChordNames"
274 \InnerStaffGroupContext
279 " Groups staffs while adding a bracket on the left side,
280 grouping the staves together. The bar lines of the contained
281 staves are connected vertically.
284 \accepts "InnerChoirStaff"
285 \accepts "ChoirStaff"
286 \accepts "InnerStaffGroup"
287 \accepts "FiguredBass"
293 \type "Engraver_group_engraver"
294 \consistsend "Hara_kiri_engraver"
295 minimumVerticalExtent = #'(-1.2 . 2.4)
296 extraVerticalExtent = ##f
300 Corresponds to a voice with lyrics. Handles the printing of a
301 single line of lyrics.
305 \consists "Separating_line_group_engraver"
306 \consists "Lyric_engraver"
307 \consists "Extender_engraver"
308 \consists "Hyphen_engraver"
309 \consists "Stanza_number_engraver"
310 \consists "Vocal_name_engraver"
311 \consists "Skip_event_swallow_translator"
312 SeparationItem \set #'padding = #0.5
315 \type "Engraver_group_engraver"
317 \consistsend "Axis_group_engraver"
319 minimumVerticalExtent = ##f
320 extraVerticalExtent = ##f
324 \consists "Rest_swallow_translator"
325 \consists "Skip_event_swallow_translator"
326 \consists "Tie_engraver"
327 \consists "Note_swallow_translator"
328 \consists "Note_name_engraver"
329 \consists "Separating_line_group_engraver"
333 \type "Engraver_group_engraver"
335 \description "Typesets lyrics."
337 %% To get folded repeats right.
338 \consists Vertical_align_engraver
340 minimumVerticalExtent = ##f
341 extraVerticalExtent = ##f
344 \accepts "LyricsVoice"
349 \type "Engraver_group_engraver"
351 \description "Typesets chord names."
353 \consists "Rest_swallow_translator"
354 \consists "Output_property_engraver"
355 \consists "Separating_line_group_engraver"
356 \consists "Chord_name_engraver"
357 \consists "Skip_event_swallow_translator"
358 \consistsend "Hara_kiri_engraver"
360 minimumVerticalExtent = #'(0 . 2.5)
361 extraVerticalExtent = ##f
362 SeparatingGroupSpanner \override #'padding = #0.8
367 RemoveEmptyStaffContext= \translator {
369 \remove "Axis_group_engraver"
370 \consistsend "Hara_kiri_engraver"
373 % hara kiri & auto knee don't work together.
374 Beam \override #'auto-knee-gap = #'()
377 AncientRemoveEmptyStaffContext = \translator {
378 %% why not add by default?
380 \RemoveEmptyStaffContext
381 \accepts "VaticanaVoice"
382 \accepts "GregorianTranscriptionVoice"
388 localKeySignature = #'()
390 \description "This is the top level notation context. No
391 other context can contain a @code{Score} context. This context
392 handles the administration of time signatures. It also makes sure
393 that items such as clefs, time signatures, and key-signatures are
394 aligned across staves.
396 You cannot explicitly instantiate a Score context (since it is
397 not contained in any other context). It is instantiated
398 automatically when an output definition (a @code{\score} or
399 @code{\paper} block) is processed."
401 \consists "Repeat_acknowledge_engraver"
402 \consists "Staff_collecting_engraver"
404 % move the alias along with the engraver.
406 %% TODO? add this alias from Timing_engraver::initialize() ?
407 \consists "Timing_engraver"
410 \consists "Output_property_engraver"
411 \consists "System_start_delimiter_engraver"
412 \consists "Mark_engraver"
413 \consists "Metronome_mark_engraver"
414 \consists "Break_align_engraver"
415 \consists "Spacing_engraver"
416 \consists "Vertical_align_engraver"
417 \consists "Lyric_phrasing_engraver"
418 \consists "Bar_number_engraver"
419 \consists "Span_arpeggio_engraver"
423 \accepts "VaticanaStaff"
424 \accepts "GregorianTranscriptionStaff"
425 \accepts "StaffContainer"
426 \accepts "StaffGroup"
427 \accepts "RhythmicStaff"
429 \accepts "ChordNames"
430 \accepts "GrandStaff"
431 \accepts "ChoirStaff"
432 \accepts "PianoStaff"
435 \accepts "FiguredBass"
438 soloIIText = #"Solo II"
441 systemStartDelimiter =#'SystemStartBar
443 melismaBusyProperties = #default-melisma-properties
445 clefGlyph = #"clefs-G"
447 centralCPosition = #-6
449 defaultBarType = #"|"
450 barNumberVisibility = #default-bar-number-visibility
453 explicitClefVisibility = #all-visible
454 explicitKeySignatureVisibility = #all-visible
455 autoBeamSettings = #default-auto-beam-settings
457 scriptDefinitions = #default-script-alist
459 verticalAlignmentChildCallback = #Align_interface::alignment_callback
461 pedalSustainStrings = #'("Ped." "*Ped." "*")
462 pedalSustainStyle = #'text
463 pedalUnaCordaStrings = #'("una corda" "" "tre corde")
464 pedalUnaCordaStyle = #'text
466 %% These are in ordinary italic font, including the *,
467 %% but they are unlikely to be used,
468 %% as the default pedal-style for SostenutoPedal is 'mixed':
469 %% i.e. Sost. Ped_____________________
470 pedalSostenutoStrings = #'("Sost. Ped." "*Sost. Ped." "*")
471 pedalSostenutoStyle = #'mixed
473 fingeringOrientations = #'(up down)
474 tupletNumberFormatFunction = #denominator-tuplet-formatter
475 markFormatter = #format-mark-letters
480 autoAccidentals = #'(Staff (same-octave . 0))
481 autoCautionaries = #'()
483 keyAccidentalOrder = #`(
484 (6 . ,FLAT) (2 . ,FLAT) (5 . ,FLAT ) (1 . ,FLAT) (4 . ,FLAT) (0 . ,FLAT) (3 . ,FLAT)
485 (3 . ,SHARP) (0 . ,SHARP) (4 . ,SHARP) (1 . ,SHARP) (5 . ,SHARP) (2 . ,SHARP) (6 . ,SHARP)
486 (6 . ,DOUBLE-FLAT) (2 . ,DOUBLE-FLAT) (5 . ,DOUBLE-FLAT ) (1 . ,DOUBLE-FLAT) (4 . ,DOUBLE-FLAT) (0 . ,DOUBLE-FLAT) (3 . ,DOUBLE-FLAT)
487 (3 . ,DOUBLE-SHARP) (0 . ,DOUBLE-SHARP) (4 . ,DOUBLE-SHARP) (2 . ,DOUBLE-SHARP) (5 . ,DOUBLE-SHARP) (2 . ,DOUBLE-SHARP) (6 . ,DOUBLE-SHARP)
489 breakAlignOrder = #'(
501 barCheckSynchronize = ##f
504 chordNameFunction = #ignatzek-chord-names
505 majorSevenSymbol = #whiteTriangleMarkup
506 chordNameSeparator = #(make-simple-markup "/")
507 chordNameExceptions = #ignatzekExceptions
508 chordNoteNamer = #'()
509 chordRootNamer = #note-name->markup
511 chordNameExceptionsFull = #fullJazzExceptions
512 chordNameExceptionsPartial = #partialJazzExceptions
515 stringOneTopmost = ##t
518 %% One may change the strings tuning as following :
519 %% The lenght of the list must be equal to the number of string
520 stringTunings = #guitar-tunings
521 tablatureFormat = #fret-number-tablature-format
524 bassFigureFormatFunction = #make-bass-figure-markup
525 metronomeMarkFormatter = #format-metronome-markup
527 (Voice Stem direction 1)
529 ;; TODO: should take from existing definition.
530 ;; c&p from define-grobs.scm
532 (Voice Stem lengths ,(map (lambda (x) (* 0.8 x)) '(3.5 3.5 3.5 4.5 5.0)))
533 (Voice Stem stem-shorten (0.4 0))
534 (Voice Stem font-size -3)
535 (Voice NoteHead font-size -3)
536 (Voice Dots font-size -3)
537 (Voice Stem beamed-lengths
538 ,(map (lambda (x) (* 0.8 x)) '(3.26)))
539 (Voice Stem beamed-minimum-free-lengths
540 ,(map (lambda (x) (* 0.8 x)) '(2.5 2.0 1.5)))
541 (Voice Stem beamed-extreme-minimum-free-lengths
542 ,(map (lambda (x) (* 0.8 x)) '(1.83 1.5)))
544 (Voice Stem no-stem-extend #t)
545 (Voice Beam thickness 0.384)
546 (Voice Beam space-function ,(lambda (beam mult)
547 (* 0.8 (Beam::space_function
549 (Voice Beam position-callbacks (,Beam::least_squares
551 ,Beam::slope_damping))
552 (Staff Accidental font-size -4)
553 (Voice Slur direction -1)
556 \grobdescriptions #all-grob-descriptions
559 OrchestralScoreContext = \translator {
563 EasyNotation = \translator {
565 NoteHead \override #'molecule-callback = #Note_head::brew_ez_molecule
566 NoteHead \override #'Y-extent-callback = #'()
567 NoteHead \override #'X-extent-callback = #'()
573 \type "Engraver_group_engraver"
575 \consists "Figured_bass_engraver"
576 \consists "Rest_swallow_translator"
577 \consists "Note_swallow_translator"
578 \consists "Separating_line_group_engraver"
580 \consistsend "Hara_kiri_engraver"
585 \type "Engraver_group_engraver"
587 %% don't want to route anything out of here:
591 \consists "Swallow_engraver"
592 \description "Silently discards all musical information given to this context. "
599 \consists "Tab_note_heads_engraver"
600 \remove "Fingering_engraver"
601 \remove "New_fingering_engraver"
603 \description "Context for drawing notes in a Tab staff. "
604 Slur \override #'font-family = #'roman
605 Slur \override #'molecule-callback = #hammer-molecule-callback
606 Slur \override #'direction = #-1
608 % Draws all stems/beams out of the staff (and not in the middle of the staff !)
609 % This feature is now disabled because most of the tab does not use it.
610 %Beam \override #'damping = #100000
611 %Stem \override #'up-to-staff = ##t
613 % No accidental in tablature !
614 \remove Accidental_engraver
623 \description "Context for generating tablature. [DOCME]"
626 TODO: this context should use a special staff_symbol engraver that
627 takes the line count out of the stringTunings property.
635 StaffSymbol \override #'line-count = #6
636 StaffSymbol \override #'staff-space = #1.5
638 % Don't draw stems over the tablature figures !
639 Stem \override #'avoid-note-head = ##t
641 % No accidental in tablature !
642 \remove "Accidental_engraver"
643 \remove "Key_engraver"
644 \remove "String_number_engraver"
646 clefGlyph = #"clefs-tab"
650 % TODO: Gregorian Chant contexts should be moved to gregorian-init.ly,
651 % but this does not work (is this a bug or intended behaviour?):
653 % If I try to do so, I get "error: unknown escaped string:
654 % `\VaticanaStaffContext'" in params-init.ly. If I also move
655 % "\translator { \Vaticana*Context }" from params-init.ly to the end
656 % of gregorian-init.ly, then I get "error: parse error, unexpected
657 % TRANSLATOR: \translator { \VaticanaStaffContext }" in
658 % gregorian-init.ly. --jr
662 \name "VaticanaVoice"
664 \description "Same as @code{Voice} context, except that it is accommodated for tyepsetting Gregorian Chant in the notational style of Editio Vaticana."
666 % We can not remove Slur_engraver, since \addlyrics depends on it.
667 % Instead, we make the grob transparent.
668 % Unfortunately, this gives us a lot of warnings ("Degenerate bow:
669 % infinite steepness reqd"), since in ligatures, all note heads are in
670 % the same paper column such that the (transparent) slurs eventually may
671 % start and end in the same column.
672 Slur \override #'transparent = ##t
674 % We can not remove Stem_engraver, since slurs depend on stems. If
675 % we try anyway, lily will crash in slur.scm:16:6: "Wrong type argument
676 % in position 1 (expecting grob): ()".
677 % As a workaround, we make the grob transparent.
678 Stem \set #'transparent = ##t
680 % Since we do not remove stems, but only make it transparent, we have
681 % to set the length to 0.0. Otherwise, articulation marks (such as
682 % ictus, circulus or accentus) may be vertically placed quite away from
684 Stem \set #'length = #'0.0
686 \remove "Ligature_bracket_engraver"
687 \consists "Vaticana_ligature_engraver"
689 % Set default head for notes outside of \[ \].
690 NoteHead \set #'style = #'vaticana_punctum
692 % Put some space before and after divisiones.
693 % FIXME: This does not seem to show any effect.
694 Script \set #'padding = #0.5
696 % There are no beams in Gregorian Chant notation.
699 % Prepare TextSpanner for \episem{Initium|Finis} use.
700 TextSpanner \set #'style = #'line
701 TextSpanner \set #'edge-height = #'(0 . 0)
702 TextSpanner \set #'padding = #0.5
703 TextSpanner \set #'enclose-bounds = #1
704 TextSpanner \set #'edge-text = #'("" . "")
709 \name "VaticanaStaff"
712 \accepts "VaticanaVoice"
713 \description "Same as @code{Staff} context, except that it is accommodated for tyepsetting Gregorian Chant in the notational style of Editio Vaticana."
715 \remove "Time_signature_engraver"
716 \consists "Custos_engraver"
718 % We can not remove Bar_engraver; otherwise clefs and custodes will
719 % not show up any more among other line breaking issues.
720 % Instead, we make the grob transparent.
721 BarLine \set #'transparent = ##t
723 StaffSymbol \set #'line-count = #4
724 StaffSymbol \set #'thickness = #0.6
726 % FIXME: unit on StaffSymbol's width should be \linewidth.
727 % StaffSymbol \set #'width = #60.0
729 % Choose vaticana do clef on 3rd line as default.
730 clefGlyph = #"clefs-vaticana_do"
731 centralCPosition = #1
735 % Select vaticana style font.
736 KeySignature \set #'style = #'vaticana
737 Accidental \set #'style = #'vaticana
738 Custos \set #'style = #'vaticana
739 Custos \set #'neutral-position = #3
740 Custos \set #'neutral-direction = #-1
741 Custos \set #'adjust-if-on-staffline = ##t
744 % Score.barAlways = ##t
749 \name "GregorianTranscriptionVoice"
752 % Removing ligature bracket engraver without replacing it by some
753 % other ligature engraver would cause a "Junking event: `LigatureEvent'"
754 % warning for every "\[" and "\]". Therefore, we make the grob
755 % transparent instead.
756 LigatureBracket \set #'transparent = ##t
758 % We can not remove Slur_engraver, since \addlyrics depends on it.
759 % Instead, we make the grob transparent.
760 % Unfortunately, this gives us a lot of warnings ("Degenerate bow:
761 % infinite steepness reqd"), since in ligatures, all note heads are in
762 % the same paper column such that the (transparent) slurs eventually may
763 % start and end in the same column.
764 Slur \override #'transparent = ##t
766 % We can not remove Stem_engraver, since slurs depend on stems. If
767 % we try anyway, lily will crash in slur.scm:16:6: "Wrong type argument
768 % in position 1 (expecting grob): ()".
769 % As a workaround, we make the grob transparent.
770 Stem \set #'transparent = ##t
772 % Since we do not remove stems, but only make it transparent, we have
773 % to set the length to 0.0. Otherwise, articulation marks (such as
774 % ictus, circulus or accentus) may be vertically placed quite away from
776 Stem \set #'length = #'0.0
778 % Put some space before and after divisiones.
779 % FIXME: This does not seem to show any effect.
780 Script \set #'padding = #0.5
782 % There are no beams in Gregorian Chant notation.
785 % Prepare TextSpanner for \episem{Initium|Finis} use.
786 TextSpanner \set #'style = #'line
787 TextSpanner \set #'edge-height = #'(0 . 0)
788 TextSpanner \set #'padding = #0.5
789 TextSpanner \set #'enclose-bounds = #1
790 TextSpanner \set #'edge-text = #'("" . "")
794 \name "GregorianTranscriptionStaff"
797 \accepts "GregorianTranscriptionVoice"
799 % We can not remove Bar_engraver; otherwise clefs and custodes will
800 % not show up any more among other line breaking issues.
801 % Instead, we make the grob transparent.
802 BarLine \set #'transparent = ##t