1 #(ly:set-option 'old-relative)
6 texidoc = "The notation problem, @emph{what} symbols to create,
7 is handled by plugins. Each plugin is called Engraver. In this example,
8 we switch on engravers one by one, in the following order
15 @item Beams, slurs, accents
16 @item Accidentals, bar lines, time signature, and key signature.
19 Engravers are grouped. For example, note heads, slurs, beams etc. form
20 a Voice context. Engravers for key, accidental, bar, etc. form the
26 \paper { raggedright = ##t }
27 \include "engraver-example.ly"
31 % setup for Request->Element conversion. Guru-only
34 MyStaffContext=\translator {
35 \type "Engraver_group_engraver"
38 \description "Handles clefs, bar lines, keys, accidentals. It can contain
39 @code{Voice} contexts."
42 \consists "Output_property_engraver"
44 \consists "Font_size_engraver"
46 \consists "Volta_engraver"
47 \consists "Separating_line_group_engraver"
48 SeparatingGroupSpanner \override #'spacing-procedure
49 = #Separating_group_spanner::set_spacing_rods_and_seqs
50 \consists "Dot_column_engraver"
52 \consists "Ottava_spanner_engraver"
53 \consists "Rest_collision_engraver"
54 \consists "Piano_pedal_engraver"
55 \consists "Instrument_name_engraver"
56 \consists "Grob_pq_engraver"
57 \consists "Forbid_line_break_engraver"
58 \consistsend "Axis_group_engraver"
59 \consists "Pitch_squash_engraver"
61 minimumVerticalExtent = #'(-6 . 6)
62 extraVerticalExtent = ##f
64 localKeySignature = #'()
66 % explicitly set instrument, so we don't get
67 % weird effects when doing instrument names for
77 MyVoiceContext = \translator {
78 \type "Engraver_group_engraver"
82 Corresponds to a voice on a staff. This context handles the
83 conversion of dynamic signs, stems, beams, super- and subscripts,
84 slurs, ties, and rests.
86 You have to instantiate this explicitly if you want to have
87 multiple voices on the same staff."
89 localKeySignature = #'()
90 \consists "Font_size_engraver"
92 % must come before all
93 \consists "Voice_devnull_engraver"
94 \consists "Output_property_engraver"
95 \consists "Arpeggio_engraver"
96 \consists "Multi_measure_rest_engraver"
97 \consists "Text_spanner_engraver"
98 \consists "Grob_pq_engraver"
99 \consists "Note_head_line_engraver"
100 \consists "Glissando_engraver"
101 \consists "Ligature_bracket_engraver"
102 \consists "Breathing_sign_engraver"
103 % \consists "Rest_engraver"
104 \consists "Grace_beam_engraver"
105 \consists "New_fingering_engraver"
106 \consists "Chord_tremolo_engraver"
107 \consists "Percent_repeat_engraver"
108 \consists "Slash_repeat_engraver"
109 \consists "Melisma_engraver"
112 Must come before text_engraver, but after note_column engraver.
115 \consists "Text_engraver"
116 \consists "Dynamic_engraver"
117 \consists "Fingering_engraver"
119 \consists "Script_column_engraver"
120 \consists "Rhythmic_column_engraver"
121 \consists "Cluster_spanner_engraver"
122 \consists "Tie_engraver"
123 \consists "Tie_engraver"
124 \consists "Tuplet_engraver"
125 \consists "A2_engraver"
127 \consists "Skip_event_swallow_translator"
128 \accepts Thread % bug if you leave out this!
131 MyThreadContext = \translator{
132 \type Engraver_group_engraver
134 localKeySignature = #'()
136 Handles note heads, and is contained in the Voice context. You
137 have to instantiate this explicitly if you want to adjust the
138 style of individual note heads.
140 \consists "Font_size_engraver"
141 \consists "Thread_devnull_engraver"
142 \consists "Note_heads_engraver"
143 \consists "Rest_engraver"
146 \consists "Output_property_engraver"
156 \translator { \MyStaffContext }
157 \translator { \MyVoiceContext }
158 \translator { \MyThreadContext }
163 MyStaffContext = \translator {
165 \consists "Staff_symbol_engraver"
171 \translator { \MyStaffContext }
172 \translator { \MyVoiceContext }
173 \translator { \MyThreadContext }
177 MyStaffContext = \translator {
179 \consists "Clef_engraver"
180 \remove "Pitch_squash_engraver"
186 \translator { \MyStaffContext }
187 \translator { \MyVoiceContext }
188 \translator { \MyThreadContext }
192 MyVoiceContext = \translator {
194 \consists "Stem_engraver"
200 \translator { \MyStaffContext }
201 \translator { \MyVoiceContext }
202 \translator { \MyThreadContext }
206 MyVoiceContext = \translator {
208 \consists "Beam_engraver"
214 \translator { \MyStaffContext }
215 \translator { \MyVoiceContext }
216 \translator { \MyThreadContext }
220 MyVoiceContext= \translator {
222 \consists "Phrasing_slur_engraver"
223 \consists "Slur_engraver"
224 \consists "Script_engraver"
231 \translator { \MyStaffContext }
232 \translator { \MyVoiceContext }
233 \translator { \MyThreadContext }
237 MyStaffContext = \translator {
239 \consists "Bar_engraver"
240 \consists "Time_signature_engraver"
247 \translator { \MyStaffContext }
248 \translator { \MyVoiceContext }
249 \translator { \MyThreadContext }
253 MyStaffContext = \translator
255 \consists "Accidental_engraver"
256 \consists "Key_engraver"
261 \translator { \MyStaffContext }
262 \translator { \MyVoiceContext }
263 \translator { \MyThreadContext }