]> git.donarmstrong.com Git - lilypond.git/blob - scm/translator-description.scm
release: 1.3.107
[lilypond.git] / scm / translator-description.scm
1 (define (number-or-string? x) (or (number? x) (string? x)))
2 (define (engraver-description name description created-elts properties)
3   (list name description created-elts properties)
4   )
5
6 (define (translator-property-description symbol type? description)
7   (list symbol type? description)
8   )
9
10 (define engraver-description-alist
11   (list
12    (cons
13     'Stem_engraver
14     (engraver-description
15      "Stem_engraver"
16      "Create stems and single-stem tremolos"
17      '(Stem StemTremolo)
18      (list
19       (translator-property-description 'tremoloFlags integer? "")
20       (translator-property-description 'stemLeftBeamCount integer? "
21 Specify the number of beams to draw on the left side of the next note.
22 Overrides automatic beaming.  The value is only used once, and then it
23 is erased.
24 ")
25       (translator-property-description 'stemRightBeamCount integer? "idem, for the right side")    
26       )))
27    
28    (cons
29     'Hyphen_engraver
30     (engraver-description
31      "Hyphen_engraver"
32      "Create lyric hyphens"
33      '(LyricHyphen)
34      (list
35       )))
36
37    (cons
38     'Extender_engraver
39     (engraver-description
40      "Extender_engraver"
41      "Create lyric extenders"
42      '(LyricExtender)
43      (list
44       )))
45
46    
47    (cons
48     'Separating_line_group_engraver
49     (engraver-description
50      "Separating_line_group_engraver"
51      "Generates objects for computing spacing parameters."
52      '(SeparationItem SeparatingGroupSpanner)
53      (list
54       )))
55
56    (cons
57     'Axis_group_engraver
58     (engraver-description
59      "Axis_group_engraver"
60      "Group all objects created in this context in a VerticalAxisGroup spanner."
61      '(VerticalAxisGroup)
62      (list
63       (translator-property-description
64        'CONTEXTNAMEVerticalExtent number-pair? "hard coded vertical extent.
65 The format is a pair of dimensions, for example, this sets the sizes
66 of a staff to 10 (5+5) staffspaces high.
67
68 @example
69 \property Staff.StaffVerticalExtent = #(-5.0 . 5.0)
70 @end example
71
72  [fixme, naming]")
73       (translator-property-description
74        'CONTEXTNAMEMinimumVerticalExtent number-pair?
75        "minimum vertical extent, same format as CONTEXTNAMEVerticalExtent [fixme, naming]")
76       (translator-property-description
77        'CONTEXTNAMExtraVerticalExtent number-pair?
78        "extra vertical extent, same format
79 CONTEXTNAMEMinimumVerticalExtent [fixme, naming]") )))
80
81    (cons
82     'Hara_kiri_engraver
83     (engraver-description
84      "Hara_kiri_engraver"
85      "Like Axis_group_engraver, but make a hara kiri spanner, and add
86 interesting items (ie. note heads, lyric syllables and normal rests)"
87      '(HaraKiriVerticalGroup)
88      '()
89      ))
90
91    
92    (cons
93     'Local_key_engraver
94     (engraver-description
95      "Local_key_engraver"
96      "Make accidentals.  Catches note heads, ties and notices key-change
97    events.  Due to interaction with ties (which don't come together
98    with note heads), this needs to be in a context higher than Tie_engraver.
99    (FIXME)."
100      '(Accidentals)
101      (list
102       (translator-property-description 'localKeySignature list? "the key signature at this point  in the measure")
103       (translator-property-description 'forgetAccidentals boolean? "do
104 not set localKeySignature when a note alterated differently from
105 localKeySignature is found.
106
107 Causes accidentals to be printed at every note instead of
108 remembered for the duration of a measure.
109 ")
110       (translator-property-description 'noResetKey boolean? "Do not
111 reset local key to the value of keySignature at the start of a measure,
112 as determined by measurePosition.
113
114 Do not reset the key at the start of a measure.  Accidentals will be
115 printed only once and are in effect until overridden, possibly many
116 measures later.
117 ")
118       
119       )))
120
121    
122    (cons
123     'Volta_engraver
124     (engraver-description
125      "Volta_engraver"
126      "Make volta brackets"
127      '(VoltaBracket)
128      (list
129       (translator-property-description 'repeatCommands list?
130                                        "This property is read to find any command of the form (volta . X), where X is a string or #f")
131       (translator-property-description 'voltaSpannerDuration moment?
132                                        "maximum duration of the volta bracket.
133
134     Set to a duration to control the size of the brackets printed by
135 @code{\alternative}.  It specifies the number of whole notes duration
136 to use for the brackets.  This can be used to shrink the length of
137 brackets in the situation where one alternative is very large.  It may
138 have odd effects if the specified duration is longer than the music
139 given in an @code{\alternative}.
140 ")
141       )
142      ))
143
144    (cons
145     'Clef_engraver
146     (engraver-description
147      "Clef_engraver"
148      "Determine and set reference point for pitches"
149      '(Clef OctavateEight)
150      (list
151       (translator-property-description 'clefPosition number? "Where should the center of the symbol go?")
152       (translator-property-description 'clefGlyph string? "Name of the symbol within the music font")
153       (translator-property-description 'centralCPosition number? "Place of the central C. Usually determined by looking at clefPosition and clefGlyph.")
154       (translator-property-description 'clefOctavation integer? "Add
155 this much extra octavation. Values of 7 and -7 are common.")
156       (translator-property-description 'explicitClefVisibility procedure? "visibility-lambda function for clef changes.")
157       (translator-property-description 'clefPitches list? "an alist mapping GLYPHNAME to the position of the central C for that symbol")
158
159       )))
160    
161    (cons
162     'A2_engraver
163     (engraver-description
164      "A2_engraver"
165      "Part combine engraver for orchestral scores."
166      '(TextScript)
167      (list
168       (translator-property-description 'combineParts boolean? "try to combine parts?")
169       (translator-property-description 'soloADue  boolean? "set Solo/A due texts?")
170       (translator-property-description 'soloText  string? "text for begin of solo")
171       (translator-property-description 'soloIIText  string? "text for begin of solo for voice ``two''")
172       (translator-property-description 'aDueText string? "text for begin of a due")
173       (translator-property-description 'split-interval number-pair? "always split into two voices for contained intervals")
174       (translator-property-description 'unison  boolean? "set if unisono is detected  ")
175       (translator-property-description 'solo  boolean? "set if solo is detected")
176       (translator-property-description 'unisilence  boolean? "set if unisilence is detected")
177       (translator-property-description 'unirhythm  boolean? "set if unirhythm is detected")
178       )))
179
180    (cons
181     'Align_note_column_engraver
182     (engraver-description
183      "Align_note_column_engraver"
184      "Generate object to put grace notes from left to right."
185      '(GraceAlignment)
186      (list
187       
188       (translator-property-description 'graceAlignPosition dir? "put the grace note before or after the main note?")
189       (translator-property-description 'graceAccidentalSpace number? "amount space to alot for an accidental")
190       )))
191    
192    (cons
193     'Arpeggio_engraver
194     (engraver-description
195      "Arpeggio_engraver"
196      "Generate an Arpeggio from a Arpeggio_req"
197      '(Arpeggio)
198      (list
199       )))
200
201    (cons
202     'Auto_beam_engraver
203     (engraver-description
204      "Auto_beam_engraver"
205      "Generate beams based on measure characteristics and observed Stems.
206 Uses beatLength, measureLength and measurePosition to decide when to start and stop a beam.
207 "
208      '(
209        Beam)
210      (list
211       (translator-property-description 'noAutoBeaming boolean? "  If set to true then beams are not generated automatically.
212 ")
213       (translator-property-description 'autoBeamSettings list? "
214 Specifies when automatically generated beams should begin and end.  The elements have the format:
215
216 @example
217
218    function shortest-duration-in-beam time-signature
219
220 where
221
222     function = begin or end
223     shortest-duration-in-beam = numerator denominator; eg: 1 16
224     time-signature = numerator denominator, eg: 4 4
225
226 unspecified or wildcard entries for duration or time-signature
227 are given by * *
228
229 The user can override beam begin or end time by pushing a wildcard entries
230 '(begin * * * *) or '(end * * * *) resp., eg:
231
232     \property Voice.autoBeamSettings \push #'(end * * * *) = #(make-moment 1 4)
233
234 The head of the list:
235     '(
236      ((end * * 3 2) . ,(make-moment 1 2))
237      ((end 1 16 3 2) . ,(make-moment 1 4))
238      ((end 1 32 3 2) . ,(make-moment 1 8))
239      ...
240     )
241
242 @end example"))))
243
244    (cons
245     'Bar_engraver
246     (engraver-description
247      "Bar_engraver"
248      "Create barlines. This engraver is controlled through the
249 @code{whichBar} property. If it has no bar line to create, it will forbid a linebreak at this point"
250      '(BarLine)
251      (list
252       (translator-property-description 'whichBar string? "This property is read to determine what type of barline to create.
253 Example:
254 @example
255 \\property Staff.whichBar = \"|:\"
256 @end example
257 will create a start-repeat bar in this staff only 
258 ")
259       (translator-property-description 'staffsFound list? "list of all staff-symbols found.")
260       )))
261
262
263    (cons
264     'Bar_number_engraver
265     (engraver-description
266      "Bar_number_engraver"
267      "A bar number is created whenever measurePosition is zero. It is
268 put on top of all staffs, and appears only at  left side of the staff."
269      '(BarNumber)
270      (list
271       (translator-property-description 'currentBarNumber integer? "this is read to determine
272  the number to put on the bar ")
273       )))
274
275
276    (cons
277     'Beam_engraver
278     (engraver-description
279      "Beam_engraver"
280      "Handles Beam_requests by engraving Beams.    If omitted, then notes will be
281     printed with flags instead of beams."
282      '(Beam)
283      (list
284       (translator-property-description 'beamMelismaBusy boolean? "Signal if a beam is set when automaticMelismata is set")
285       )))
286
287    (cons
288     'Break_align_engraver
289     (engraver-description
290      "Break_align_engraver"
291      "Align graphic elements with corresponding break-align-symbols into groups, and order the groups according to breakAlignOrder"
292      '(BreakAlignment BreakAlignGroup LeftEdge)
293      (list
294       (translator-property-description 'breakAlignOrder list?
295                                        "Defines the order in which
296 prefatory matter (clefs, key signatures) appears, eg. this puts the
297 key signatures after the bar lines:
298
299 @example
300         \\property Score.breakAlignOrder = #'(
301           Span_bar
302           Breathing_sign
303           Clef_item
304           Staff_bar
305           Key_item
306           Time_signature
307         )
308 @end example
309 ")
310       )))
311
312
313    (cons
314     'Breathing_sign_engraver
315     (engraver-description
316      "Breathing_sign_engraver"
317      ""
318      '(BreathingSign)
319      (list
320       )))
321
322
323    (cons
324     'Chord_name_engraver
325     (engraver-description
326      "Chord_name_engraver"
327      "Catch Note_req's, Tonic_reqs, Inversion_reqs, Bass_req
328 and generate the appropriate chordname."
329      '(ChordName)
330      (list
331       (translator-property-description 'chordInversion boolean? " Determines whether LilyPond should look for chord inversions when
332     translating from notes to chord names.  Set to 1 to find
333     inversions.  The default is 0 which does not look for
334     inversions.")
335       (translator-property-description 'drarnChords boolean? "")
336       )))
337
338
339    (cons
340     'Chord_tremolo_engraver
341     (engraver-description
342      "Chord_tremolo_engraver"
343      "Generates beams for the \repeat X tremolo ... construct"
344      '(Beam)
345      (list
346       )))
347
348
349
350    (cons
351     'Collision_engraver
352     (engraver-description
353      "Collision_engraver"
354      ""
355      '(NoteCollision
356        )
357      (list
358       )))
359
360    (cons
361     'Custos_engraver
362     (engraver-description
363      "Custos_engraver"
364      ""
365      '(Custos)
366      (list
367       )))
368
369
370    (cons
371     'Dot_column_engraver
372     (engraver-description
373      "Dot_column_engraver"
374      " Engraves dots on dotted notes shifted to the right of the note.
375 If omitted, then dots appear on top of the notes.
376 "
377      '(DotColumn
378        )
379      (list
380       )))
381
382
383    (cons
384     'Dynamic_engraver
385     (engraver-description
386      "Dynamic_engraver"
387      ""
388      '(DynamicLineSpanner
389        DynamicText Crescendo
390        TextSpanner)
391      (list
392       )))
393
394
395
396
397    (cons
398     'Grace_position_engraver
399     (engraver-description
400      "Grace_position_engraver"
401      "Attach a grace note alignment to a note-column "
402      '()
403      (list
404       )))
405
406    (cons
407     'Grace_engraver_group
408     (engraver-description
409      "Grace_engraver_group"
410      "An engraver that creates a `shielded' context-tree with separate notion of time"
411      '()
412      (list
413       )))
414
415
416    (cons
417     'Instrument_name_engraver
418     (engraver-description
419      "Instrument_name_engraver"
420      " Prints the name of the instrument (specified by
421     @code{Staff.instrument} and @code{Staff.instr}) at the left of the
422     staff."
423      '(InstrumentName)
424      (list
425       (translator-property-description 'instrument string? " If @code{Instrument_name_engraver}
426 @cindex Instrument_name_engraver
427  is
428     added to the Staff translator, then the @code{instrument} property
429     is used to label the first line of the staff and the @code{instr}
430     property is used to label subsequent lines.  If the
431     @code{midiInstrument} property is not set, then @code{instrument}
432     is used to determine the instrument for MIDI output.")
433       (translator-property-description 'instr string? "see @code{instrument}")
434       )))
435
436    (cons
437     'Engraver_group_engraver
438     (engraver-description
439      "Engraver_group_engraver"
440      "A group of engravers taken together"
441      '()
442      (list
443       )))
444
445    (cons
446     'Key_engraver
447     (engraver-description
448      "Key_engraver"
449      ""
450      '(KeySignature
451        )
452      (list
453       
454       (translator-property-description 'keySignature list? "")
455       (translator-property-description 'keyOctaviation boolean? "")
456       (translator-property-description 'explicitKeySignatureVisibility procedure? "")
457       (translator-property-description 'createKeyOnClefChange boolean? "")
458       (translator-property-description 'keyAccidentalOrder list? "")
459       (translator-property-description 'keySignature list? "")
460       )))
461
462    (cons 'Lyric_engraver
463          (engraver-description
464           "Lyric_engraver"
465           ""
466           '()
467           (list
468            ;; FIXME
469            )))
470
471    (cons 'Lyric_phrasing_engraver
472          (engraver-description
473           "Lyric_phrasing_engraver"
474           ""
475           '()
476           (list
477            (translator-property-description 'automaticPhrasing boolean? "")
478            (translator-property-description 'weAreGraceContext boolean? "")
479            (translator-property-description 'melismaEngraverBusy boolean? "")
480            (translator-property-description 'associatedVoice string? "")
481            (translator-property-description 'phrasingPunctuation string? "")
482            )))
483
484    (cons
485     'Mark_engraver
486     (engraver-description
487      "Mark_engraver"
488      ""
489      '(RehearsalMark)
490      (list
491
492       (translator-property-description 'rehearsalMark number-or-string? "")
493       (translator-property-description 'staffsFound list? "")
494       )))
495
496
497    (cons
498     'Melisma_engraver
499     (engraver-description
500      "Melisma_engraver"
501      ""
502      '()
503      (list
504
505       (translator-property-description 'melismaBusy boolean? "")
506       (translator-property-description 'slurMelismaBusy boolean? "")
507       (translator-property-description 'tieMelismaBusy boolean? "")
508       (translator-property-description 'beamMelismaBusy boolean? "")
509       )))
510
511
512    (cons
513     'Multi_measure_rest_engraver
514     (engraver-description
515      "Multi_measure_rest_engraver"
516      "Engraves multi-measure rests that are produced with @code{R}.  Reads
517 measurePosition and currentBarNumber to determine what number to print over the MultiMeasureRest
518    "
519      '(MultiMeasureRest)
520      (list
521       )))
522
523
524    (cons
525     'Note_heads_engraver
526     (engraver-description
527      "Note_heads_engraver"
528      "Generate one or more noteheads from Music of type Note_req."
529      '(NoteHead Dots)
530      (list
531       )))
532
533
534    (cons
535     'Note_name_engraver
536     (engraver-description
537      "Note_name_engraver"
538      ""
539      '(NoteName)
540      (list
541       )))
542
543
544    (cons
545     'Output_property_engraver
546     (engraver-description
547      "Output_property_engraver"
548      "Interpret Music of Output_property type, and apply a function
549 to any Graphic objects that satisfies the predicate."
550      '()
551      (list
552       )))
553
554
555    (cons
556     'Piano_pedal_engraver
557     (engraver-description
558      "Piano_pedal_engraver"
559      "engrave Piano pedals symbols."
560      '(SostenutoPedal SustainPedal UnaChordaPedal)
561      (list
562       
563         (translator-property-description 'startSustain string? "")
564         (translator-property-description 'stopSustain  string? "")
565         (translator-property-description 'stopStartSustain  string? "")
566         (translator-property-description 'startUnaChorda  string? "")
567         (translator-property-description 'stopUnaChorda string? "")
568       )))
569
570    (cons 
571     'Pitch_squash_engraver
572     (engraver-description
573      "Pitch_squash_engraver"
574      "Treat all pitches as middle C.  Note that the notes move, but
575 the locations of accidentals stay the same. 
576 Set the position field of all note heads to zero. This useful for
577 making a single line staff that demonstrates the rhythm of a melody."
578      '()
579      (list
580       (translator-property-description 'squashedPosition integer? " Vertical position of
581 squashing.")
582       )))
583    
584    (cons
585     'Property_engraver
586     (engraver-description
587      "Property_engraver"
588 "This is a engraver that converts \property settings into
589 back-end element-property settings. Example: Voice.stemLength will set
590 #'length in all Stem objects.
591
592 Due to CPU and memory requirements, the use of this engraver is deprecated."
593      '()
594      (list
595       (translator-property-description 'Generic_property_list list? "description of the conversion.
596
597 Defines names and types for generic properties. These are properties
598 than can be plugged into the backend directly. See the init file
599 @file{generic-property.scm} for details.  For internal use only,
600 deprecated.
601 ")
602       )))
603
604
605    (cons
606     'Repeat_acknowledge_engraver
607     (engraver-description
608      "Repeat_acknowledge_engraver"
609      
610      "Acknowledge repeated music, and convert the contents of
611 repeatCommands ainto an appropriate setting for whichBar"
612      '()
613      (list
614       (translator-property-description 'repeatCommands list? "")
615       (translator-property-description 'whichBar string? "")
616  
617       )))
618
619
620    (cons
621     'Rest_collision_engraver
622     (engraver-description
623      "Rest_collision_engraver"
624      "Handles collisions of rests."
625      '(RestCollision)
626      (list
627       )))
628
629
630    (cons
631     'Rest_engraver
632     (engraver-description
633      "Rest_engraver"
634      ""
635       '(Rest Dots)
636    (list
637       )))
638
639
640    (cons
641     'Rhythmic_column_engraver
642     (engraver-description
643      "Rhythmic_column_engraver"
644      "Generates NoteColumn, an objects that groups stems, noteheads and rests."
645      '(NoteColumn)
646      (list
647       )))
648
649
650    (cons
651     'Script_column_engraver
652     (engraver-description
653      "Script_column_engraver"
654      ""
655      '(ScriptColumn)
656      (list
657       )))
658
659
660    (cons
661     'Script_engraver
662     (engraver-description
663      "Script_engraver"
664      "    Handles note ornaments generated by @code{\script}.  
665 "
666      '(Script)
667      (list
668       (translator-property-description 'scriptDefinitions list? "
669 Description of scripts to use.  (fixme) 
670 ")
671
672       (translator-property-description 'scriptHorizontal boolean? "    Put scripts left or right of note heads.  Support for this is
673     limited.  Accidentals will collide with scripts.
674     
675 ")
676       )))
677
678    (cons
679     'Score_engraver
680     (engraver-description
681      "Score_engraver"
682      "Top level engraver. Takes care of generating columns and the complete  system (ie. LineOfScore)
683
684 This engraver decides whether a column is breakable. The default is
685 that a column is always breakable. However, when every Bar_engraver
686 that does not have a barline at a certain point will call
687 Score_engraver::forbid_breaks to stop linebreaks.  In practice, this
688 means that you can make a breakpoint by creating a barline (assuming
689 that there are no beams or notes that prevent a breakpoint.)
690
691 "
692      '(LineOfScore PaperColumn NonMusicalPaperColumn)
693      (list
694       (translator-property-description 'currentMusicalColumn ly-element? "")
695       (translator-property-description 'currentCommandColumn ly-element? "")
696       )))
697    
698    (cons 'Skip_req_swallow_translator
699          (engraver-description
700           "Skip_req_swallow_translator"
701           ""
702           '()
703           (list
704            ;; FIXME
705            )))
706
707    (cons
708     'Slur_engraver
709     (engraver-description
710      "Slur_engraver"
711      "Build slurs from Slur_reqs"
712      '(Slur)
713
714      (list
715       (translator-property-description 'slurBeginAttachment symbol? "translates to the car of Slur.element-property 'attachment.")
716       (translator-property-description 'slurEndAttachment symbol? "translates to the cdr of Slur.element-property 'attachment.")
717       (translator-property-description 'slurMelismaBusy boolean? "Signal a slur if automaticMelismata is set")
718       )))
719
720
721    (cons
722     'Spacing_engraver
723     (engraver-description
724      "Spacing_engraver"
725      "make a SpacingSpanner and do bookkeeping of shortest starting and playing notes  "
726      '(SpacingSpanner)
727      (list
728       )))
729
730
731    (cons
732     'Span_arpeggio_engraver
733     (engraver-description
734      "Span_arpeggio_engraver"
735      ""
736      '(Arpeggio)
737      (list
738       (translator-property-description 'connectArpeggios boolean? " If
739 set, connect all arpeggios that are found.  In this way, you can make
740 arpeggios that cross staffs.
741 ")
742       )))
743
744
745    (cons
746     'Span_bar_engraver
747     (engraver-description
748      "Span_bar_engraver"
749      "This engraver makes cross-staff barlines: It catches all normal
750 bar lines, and draws a single span-bar across them."
751
752      '(SpanBar)
753      (list
754       )))
755
756
757    (cons
758     'Staff_symbol_engraver
759     (engraver-description
760      "Staff_symbol_engraver"
761      "create the constellation of five (default) staff lines."
762      '(StaffSymbol)
763      (list
764       )))
765
766
767    (cons
768     'Stanza_number_engraver
769     (engraver-description
770      "Stanza_number_engraver"
771      ""
772      '(StanzaNumber
773        )
774      (list
775       (translator-property-description 'stz string? "")
776       (translator-property-description 'stanza string? "Stanza `number' to print at start of a verse")
777       )))
778
779
780
781    (cons
782     'System_start_delimiter_engraver
783     (engraver-description
784      "System_start_delimiter_engraver"
785      "creates a SystemStartDelimiter spanner"
786      '(SystemStartDelimiter)
787      (list
788       )))
789
790
791    (cons
792     'Text_engraver
793     (engraver-description
794      "Text_engraver"
795      "Create text-scripts"
796      '(TextScript)
797      (list
798       (translator-property-description 'scriptHorizontal boolean? "    Put scripts left or right of note heads.  Support for this is
799     limited.  Accidentals will collide with scripts.
800     
801 ")
802       (translator-property-description 'textNonEmpty boolean? " If set
803 to true then text placed above or below the staff is not assumed to
804 have zero width.  @code{fatText} and @code{emptyText} are predefined
805 settings.
806 ")
807       )))
808
809
810    (cons
811     'Text_spanner_engraver
812     (engraver-description
813      "Text_spanner_engraver"
814      "Create text spanner from a  Span_req "
815      '(TextSpanner)
816      (list
817       )))
818
819
820    (cons
821     'Thread_devnull_engraver
822     (engraver-description
823      "Thread_devnull_engraver"
824      "Kill elements whenever we are Voice called `two' and
825 either unison, unisilence or soloADue is set"
826      '()
827      '()))
828
829
830    (cons
831     'Tie_engraver
832     (engraver-description
833      "Tie_engraver"
834      "Generate ties between noteheads of equal pitch."
835      '(Tie TieColumn)
836      (list
837       
838
839       (translator-property-description 'sparseTies boolean? "only create one tie per chord.")
840       (translator-property-description 'tieMelismaBusy boolean? "Signal ties when automaticMelismata is set")
841       )))
842
843
844    (cons
845     'Time_signature_engraver
846     (engraver-description
847      "Time_signature_engraver"
848      "Create a TimeSignature whenever @code{timeSignatureFraction} changes"
849      '(TimeSignature)
850      (list
851       )))
852
853
854    (cons
855     'Timing_engraver
856     (engraver-description
857      "Timing_engraver"
858      " Responsible for synchronizing timing information from staffs. 
859     Normally in @code{Score}.  In order to create polyrhythmic music,
860     this engraver should be removed from @code{Score} and placed in
861     @code{Staff}."
862      '()
863      (list
864       (translator-property-description 'timeSignatureFraction number-pair? "
865 pair of numbers,  signifying the time signature. For example #'(4 . 4) is a 4/4time signature.")   
866       (translator-property-description 'barCheckNoSynchronize boolean?
867 "If set, don't reset measurePosition when finding a bbarcheck. This
868 makes bar-checks for polyphonic music easier.")
869
870       (translator-property-description 'barNonAuto boolean? " If set to true then bar lines will not be printed
871     automatically; they must be explicitly created with @code{\bar}
872     keywords.  Unlike with the @code{\cadenza} keyword, measures are
873     still counted.  Bar generation will resume according to that
874     count if this property is set to zero.
875 ")
876       (translator-property-description 'whichBar string? "if not set
877 explicitly (by \property or \bar), this is set according to values of
878 defaultBarType, barAlways, barNonAuto and measurePosition.
879  ")
880       
881       (translator-property-description 'barAlways boolean? " If set to true a bar line is drawn after each note.
882 ")
883       (translator-property-description 'defaultBarType string? "Sets the default type of bar line. See Section XREF-barlines [FIXME] 
884     for a list of available bar types.
885 ")
886       (translator-property-description 'skipBars boolean? " Set to true to skip the empty bars that are produced by
887     multimeasure notes and rests.  These bars will not appear on the
888     printed output.  If not set (the default)  multimeasure
889     notes and rests expand into their full length, printing the appropriate
890     number of empty bars so that synchronization with other voices is
891     preserved.
892
893 @c my @vebatim patch would help...
894 @example
895 @@lilypond[fragment,verbatim,center]
896 r1 r1*3 R1*3\property Score.skipBars=1 r1*3 R1*3
897
898 @@end lilypond
899 @end example
900
901 ")
902       (translator-property-description 'timing boolean? " Keep administration of measure length, position, bar number, etc?
903 Switch off for cadenzas.")
904       (translator-property-description 'oneBeat moment? "  How long does one beat in the current time signature last?")
905       (translator-property-description 'measureLength moment? "  How long does one measure in the current time signature last?")
906       (translator-property-description 'measurePosition moment? "
907   How much of the current measure (measured in whole notes) have we had?
908 ")
909       (translator-property-description 'currentBarNumber integer? "Contains the current barnumber. This property is incremented at
910 every barline.
911 ")
912       )))
913
914
915    (cons
916     'Tuplet_engraver
917     (engraver-description
918      "Tuplet_engraver"
919      "Catch Time_scaled_music and generate appropriate bracket  "
920      '(
921        TupletBracket)
922      (list
923       (translator-property-description 'tupletSpannerDuration moment? "
924 Normally a tuplet bracket is as wide as the
925 @code{\times} expression that gave rise to it. By setting this
926 property, you can make brackets last shorter. Example
927
928 @example
929 @@lilypond[verbatim,fragment]
930 \context Voice \times 2/3 @{
931   \property Voice.tupletSpannerDuration = #(make-moment 1 4)
932   [c8 c c] [c c c]
933 @}
934 @@end lilypond
935 @end example
936 ")
937       (translator-property-description 'tupletInvisible boolean? "
938     If set to true, tuplet bracket creation is switched off
939 entirely. This has the same effect as setting both
940 @code{tupletNumberVisibility} and @code{tupletBracketVisibility} to
941 @code{#f}, but as this does not even create elements, this setting
942 uses less memory and time.")
943       )))
944
945
946    (cons
947     'Vertical_align_engraver
948     (engraver-description
949      "Vertical_align_engraver"
950      "Catch Vertical axis groups and stack them."
951      '(VerticalAlignment)
952      (list
953       )))
954
955
956    (cons
957     'Voice_devnull_engraver
958     (engraver-description
959      "Voice_devnull_engraver"
960      "Kill off certain items and spanners if we're Voice `two' and unison or unisilence is set."
961      '()
962      (list
963       )))
964    ))
965
966
967
968
969 (define context-description-alist
970   '(
971 (Grace . "
972     The context for handling grace notes.  It is instantiated
973     automatically when you use @code{\grace}.  Basically, it is an
974     `embedded' miniature of the Score context.  Since this context
975     needs special interaction with the rest of LilyPond, you should
976     not explicitly instantiate it.
977 ")
978 (LyricVoice . "
979     Corresponds to a voice with lyrics.  Handles the printing of a
980     single line of lyrics.
981 ")
982 (Thread . "
983     Handles note heads, and is contained in the Voice context.  You
984     have to instantiate this explicitly if you want to adjust the
985     style of individual note heads.
986 ")
987 (Voice . "
988     Corresponds to a voice on a staff.  This context handles the
989     conversion of dynamic signs, stems, beams, super- and subscripts,
990     slurs, ties, and rests.
991
992     You have to instantiate this explicitly if you want to have
993     multiple voices on the same staff.")
994
995 (ChordNamesVoice . "
996     A voice with chord names.  Handles printing of a line of chord
997     names.")
998
999 (ChordNames . "
1000     Typesets chord names.  Can contain @code{ChordNamesVoice}
1001     contexts.")
1002
1003 (Lyrics . "
1004     Typesets lyrics.  It can contain @code{LyricVoice} contexts.
1005 ")
1006 (Staff . "
1007     Handles clefs, bar lines, keys, accidentals.  It can contain
1008     @code{Voice} contexts.
1009 ")
1010 (RhythmicStaff . "
1011     A context like @code{Staff} but for printing rhythms.  Pitches are
1012     ignored; the notes are printed on one line.  It can contain
1013     @code{Voice} contexts.
1014 ")
1015 (GrandStaff . "
1016     Contains @code{Staff} or @code{RhythmicStaff} contexts.  It adds a
1017     brace on the left side, grouping the staffs together.  The bar
1018     lines of the contained staffs are connected vertically.  It can
1019     contain @code{Staff} contexts.")
1020
1021 (PianoStaff . "
1022     Just like @code{GrandStaff} but with @code{minVerticalAlign} set
1023     equal to @code{maxVerticalAlign} so that interstaff beaming and
1024     slurring can be used.")
1025
1026 (StaffGroup . "
1027     Contains @code{Staff} or @code{RhythmicStaff} contexts.  Adds a
1028     bracket on the left side, grouping the staffs together.  The bar
1029     lines of the contained staffs are connected vertically.  It can
1030     contain @code{Staff}, @code{RhythmicStaff}, @code{GrandStaff}, or
1031     @code{Lyrics} contexts.
1032 ")
1033 (ChoirStaff . "
1034     Identical to @code{StaffGroup} except that the contained staffs
1035     are not connected vertically.
1036 ")
1037 (Score . "
1038     This is the top level notation context.  No other context can
1039     contain a @code{Score} context.  This context handles the
1040     administration of time signatures.  It also makes sure that items
1041     such as clefs, time signatures, and key-signatures are aligned
1042     across staffs.  It can contain @code{Lyrics}, @code{Staff},
1043     @code{RhythmicStaff}, @code{GrandStaff}, @code{StaffGroup}, and
1044     @code{ChoirStaff} contexts.
1045
1046     You cannot explicitly instantiate a Score context (since it is
1047     not contained in any other context).  It is instantiated
1048     automatically when an output definition (a @code{\score} or
1049     @code{\paper} block) is processed.
1050 ")
1051 )
1052 )