+\version "2.13.52"
+
+\header {
+ lsrtags = "contexts-and-engravers"
+
+ texidoc = "
+The notation problem, creating a certain symbol, is handled by plugins.
+ Each plugin is called an Engraver. In this example, engravers are
+switched on one by one, in the following order:
+
+- note heads,
+
+
+- staff symbol,
+
+
+- clef,
+
+
+- stem,
+
+
+- beams, slurs, accents,
+
+
+- accidentals, bar lines, time signature and key signature.
+
+
+
+Engravers are grouped. For example, note heads, slurs, beams etc. form
+a @code{Voice} context. Engravers for key signature, accidentals, bar
+line, etc. form a @code{Staff} context.
+
+"
+ doctitle = "Engravers one-by-one"
+} % begin verbatim
+
+
+%% sample music
+topVoice = \relative c' {
+ \key d \major
+ es8([ g] a[ fis])
+ b4
+ b16[-. b-. b-. cis-.]
+ d4->
+}
+
+botVoice = \relative c' {
+ \key d \major
+ c8[( f] b[ a)]
+ es4
+ es16[-. es-. es-. fis-.]
+ b4->
+}
+
+hoom = \relative c {
+ \key d \major
+ \clef bass
+ g8-. r
+ r4
+ fis8-.
+ r8
+ r4
+ b'4->
+}
+
+pah = \relative c' {
+ r8 b-.
+ r4
+ r8 g8-.
+ r16 g-. r8
+ \clef treble
+ fis'4->
+}
+
+%
+% setup for Request->Element conversion. Guru-only
+%
+
+MyStaff = \context {
+ \type "Engraver_group"
+ \name Staff
+
+ \description "Handles clefs, bar lines, keys, accidentals. It can contain
+@code{Voice} contexts."
+
+ \consists "Output_property_engraver"
+
+ \consists "Font_size_engraver"
+
+ \consists "Volta_engraver"
+ \consists "Separating_line_group_engraver"
+ \consists "Dot_column_engraver"
+
+ \consists "Ottava_spanner_engraver"
+ \consists "Rest_collision_engraver"
+ \consists "Piano_pedal_engraver"
+ \consists "Piano_pedal_align_engraver"
+ \consists "Instrument_name_engraver"
+ \consists "Grob_pq_engraver"
+ \consists "Forbid_line_break_engraver"
+ \consists "Axis_group_engraver"
+
+ \consists "Pitch_squash_engraver"
+
+ localKeySignature = #'()
+
+ % explicitly set instrumentName, so we don't get
+ % weird effects when doing instrument names for
+ % piano staves
+
+ instrumentName = #'()
+ shortInstrumentName = #'()
+
+ \accepts "Voice"
+}
+
+
+MyVoice = \context {
+ \type "Engraver_group"
+ \name Voice
+
+ \description "
+ Corresponds to a voice on a staff. This context handles the
+ conversion of dynamic signs, stems, beams, super- and subscripts,
+ slurs, ties, and rests.
+
+ You have to instantiate this explicitly if you want to have
+ multiple voices on the same staff."
+
+ localKeySignature = #'()
+ \consists "Font_size_engraver"
+
+ % must come before all
+ \consists "Output_property_engraver"
+ \consists "Arpeggio_engraver"
+ \consists "Multi_measure_rest_engraver"
+ \consists "Text_spanner_engraver"
+ \consists "Grob_pq_engraver"
+ \consists "Note_head_line_engraver"
+ \consists "Glissando_engraver"
+ \consists "Ligature_bracket_engraver"
+ \consists "Breathing_sign_engraver"
+ % \consists "Rest_engraver"
+ \consists "Grace_beam_engraver"
+ \consists "New_fingering_engraver"
+ \consists "Chord_tremolo_engraver"
+ \consists "Percent_repeat_engraver"
+ \consists "Slash_repeat_engraver"
+
+ %{
+ Must come before text_engraver, but after note_column engraver.
+ %}
+ \consists "Text_engraver"
+ \consists "Dynamic_engraver"
+ \consists "Fingering_engraver"
+
+ \consists "Script_column_engraver"
+ \consists "Rhythmic_column_engraver"
+ \consists "Cluster_spanner_engraver"
+ \consists "Tie_engraver"
+ \consists "Tie_engraver"
+ \consists "Tuplet_engraver"
+ \consists "Note_heads_engraver"
+ \consists "Rest_engraver"
+}
+
+
+\score {
+ \topVoice
+ \layout {
+ \context { \MyStaff }
+ \context { \MyVoice }
+ }
+}
+
+
+MyStaff = \context {
+ \MyStaff
+ \consists "Staff_symbol_engraver"
+}
+
+\score {
+ \topVoice
+ \layout {
+ \context { \MyStaff }
+ \context { \MyVoice }
+ }
+}
+
+MyStaff = \context {
+ \MyStaff
+ \consists "Clef_engraver"
+ \remove "Pitch_squash_engraver"
+}
+
+\score {
+ \topVoice
+ \layout {
+ \context { \MyStaff }
+ \context { \MyVoice }
+ }
+}
+
+MyVoice = \context {
+ \MyVoice
+ \consists "Stem_engraver"
+}
+
+\score {
+ \topVoice
+ \layout {
+ \context { \MyStaff }
+ \context { \MyVoice }
+ }
+}
+
+MyVoice = \context {
+ \MyVoice
+ \consists "Beam_engraver"
+}
+
+\score {
+ \topVoice
+ \layout {
+ \context { \MyStaff }
+ \context { \MyVoice }
+ }
+}
+
+MyVoice = \context {
+ \MyVoice
+ \consists "Phrasing_slur_engraver"
+ \consists "Slur_engraver"
+ \consists "Script_engraver"
+}
+
+
+\score {
+ \topVoice
+ \layout {
+ \context { \MyStaff }
+ \context { \MyVoice }
+ }
+}
+
+MyStaff = \context {
+ \MyStaff
+ \consists "Bar_engraver"
+ \consists "Time_signature_engraver"
+}
+
+\score {
+ \topVoice
+ \layout {
+ \context { \MyStaff }
+ \context { \MyVoice }
+ }
+}
+
+MyStaff = \context {
+ \MyStaff
+ \consists "Accidental_engraver"
+ \consists "Key_engraver"
+}
+\score {
+ \topVoice
+ \layout {
+ \context { \MyStaff }
+ \context { \MyVoice }
+ }
+}
+