]> git.donarmstrong.com Git - lilypond.git/blob - input/test/engraver-one-by-one.ly
* lily/completion-note-heads-engraver.cc: rewrite engraver:
[lilypond.git] / input / test / engraver-one-by-one.ly
1 #(ly:set-option 'old-relative)
2
3 \version "1.9.6"
4 \header {
5     
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
9
10 @itemize
11 @item Note heads
12 @item Staff symbol
13 @item Clef
14 @item Stem
15 @item Beams, slurs, accents
16 @item Accidentals, bar lines, time signature, and key signature.
17 @end itemize
18
19 Engravers are grouped. For example, note heads, slurs, beams etc. form
20 a Voice context. Engravers for key, accidental, bar, etc. form the
21 Staff context.
22
23 "
24
25     }
26 \paper { raggedright = ##t }
27 \include "engraver-example.ly"
28
29
30 %
31 % setup for Request->Element conversion. Guru-only
32 %
33
34 MyStaffContext=\translator {
35         \type "Engraver_group_engraver"
36         \name Staff
37
38         \description "Handles clefs, bar lines, keys, accidentals.  It can contain
39 @code{Voice} contexts."
40
41         
42         \consists "Output_property_engraver"    
43         
44         \consists "Font_size_engraver"
45
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"
51
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"
60
61         minimumVerticalExtent = #'(-6 . 6)
62         extraVerticalExtent = ##f
63         verticalExtent = ##f 
64         localKeySignature = #'()
65
66         % explicitly set instrument, so we don't get 
67         % weird effects when doing instrument names for
68         % piano staves
69
70         instrument = #'()
71         instr = #'()
72           
73         \accepts "Voice"
74 }
75
76
77 MyVoiceContext = \translator {
78         \type "Engraver_group_engraver"
79         \name Voice
80
81 \description "
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.
85
86     You have to instantiate this explicitly if you want to have
87     multiple voices on the same staff."
88
89         localKeySignature = #'()
90         \consists "Font_size_engraver"
91         
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"
110
111 %{
112  Must come before text_engraver, but after note_column engraver.
113
114 %}
115         \consists "Text_engraver"
116         \consists "Dynamic_engraver"
117         \consists "Fingering_engraver"
118
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"
126
127         \consists "Skip_event_swallow_translator"
128         \accepts Thread % bug if you leave out this!
129 }
130
131 MyThreadContext = \translator{
132         \type Engraver_group_engraver
133         \name Thread
134         localKeySignature = #'()
135 \description "
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.
139 "
140         \consists "Font_size_engraver"  
141         \consists "Thread_devnull_engraver"
142         \consists "Note_heads_engraver"
143         \consists "Rest_engraver"
144
145         % why here ? 
146         \consists "Output_property_engraver"    
147
148 }
149
150
151
152
153 \score {
154   \topVoice
155   \paper {
156       \translator { \MyStaffContext }
157       \translator { \MyVoiceContext }
158       \translator { \MyThreadContext }
159       }
160 }
161
162
163 MyStaffContext = \translator {
164     \MyStaffContext
165     \consists "Staff_symbol_engraver"
166 }
167
168 \score {
169   \topVoice
170   \paper {
171       \translator { \MyStaffContext }
172       \translator { \MyVoiceContext }
173       \translator { \MyThreadContext }
174       }
175 }
176
177 MyStaffContext = \translator {
178     \MyStaffContext
179       \consists "Clef_engraver"
180     \remove "Pitch_squash_engraver"
181 }
182
183 \score {
184   \topVoice
185   \paper {
186       \translator { \MyStaffContext }
187       \translator { \MyVoiceContext }
188       \translator { \MyThreadContext }
189       }
190 }
191
192 MyVoiceContext = \translator {
193     \MyVoiceContext
194     \consists "Stem_engraver"
195     }
196
197 \score {
198   \topVoice
199   \paper {
200       \translator { \MyStaffContext }
201       \translator { \MyVoiceContext }
202       \translator { \MyThreadContext }
203       }
204 }
205
206 MyVoiceContext = \translator {
207     \MyVoiceContext
208         \consists "Beam_engraver"
209 }
210
211 \score {
212   \topVoice
213   \paper {
214       \translator { \MyStaffContext }
215       \translator { \MyVoiceContext }
216       \translator { \MyThreadContext }
217       }
218 }
219
220 MyVoiceContext= \translator {
221     \MyVoiceContext
222     \consists "Phrasing_slur_engraver"
223     \consists "Slur_engraver"
224     \consists "Script_engraver"
225 }
226
227
228 \score {
229   \topVoice
230   \paper {
231       \translator { \MyStaffContext }
232       \translator { \MyVoiceContext }
233       \translator { \MyThreadContext }
234       }
235 }
236
237 MyStaffContext = \translator {
238     \MyStaffContext
239  \consists "Bar_engraver"
240     \consists "Time_signature_engraver"
241       
242 }
243
244 \score {
245   \topVoice
246   \paper {
247       \translator { \MyStaffContext }
248       \translator { \MyVoiceContext }
249       \translator { \MyThreadContext }
250       }
251 }
252
253 MyStaffContext = \translator
254  { \MyStaffContext
255  \consists "Accidental_engraver"    
256      \consists "Key_engraver"
257 }
258 \score {
259   \topVoice
260   \paper {
261       \translator { \MyStaffContext }
262       \translator { \MyVoiceContext }
263       \translator { \MyThreadContext }
264       }
265 }