]> git.donarmstrong.com Git - lilypond.git/blob - scm/translator-description.scm
release: 1.3.106
[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."
249      '(BarLine)
250      (list
251       (translator-property-description 'whichBar string? "This property is read to determine what type of barline to create.
252 Example:
253 @example
254 \\property Staff.whichBar = \"|:\"
255 @end example
256 will create a start-repeat bar in this staff only 
257 ")
258       (translator-property-description 'staffsFound list? "list of all staff-symbols found.")
259       )))
260
261
262    (cons
263     'Bar_number_engraver
264     (engraver-description
265      "Bar_number_engraver"
266      "A bar number is created whenever measurePosition is zero. It is
267 put on top of all staffs, and appears only at  left side of the staff."
268      '(BarNumber)
269      (list
270       (translator-property-description 'currentBarNumber integer? "this is read to determine
271  the number to put on the bar ")
272       )))
273
274
275    (cons
276     'Beam_engraver
277     (engraver-description
278      "Beam_engraver"
279      "Handles Beam_requests by engraving Beams.    If omitted, then notes will be
280     printed with flags instead of beams."
281      '(Beam)
282      (list
283       (translator-property-description 'beamMelismaBusy boolean? "Signal if a beam is set when automaticMelismata is set")
284       )))
285
286    (cons
287     'Break_align_engraver
288     (engraver-description
289      "Break_align_engraver"
290      "Align graphic elements with corresponding break-align-symbols into groups, and order the groups according to breakAlignOrder"
291      '(BreakAlignment BreakAlignGroup LeftEdge)
292      (list
293       (translator-property-description 'breakAlignOrder list?
294                                        "Defines the order in which
295 prefatory matter (clefs, key signatures) appears, eg. this puts the
296 key signatures after the bar lines:
297
298 @example
299         \\property Score.breakAlignOrder = #'(
300           Span_bar
301           Breathing_sign
302           Clef_item
303           Staff_bar
304           Key_item
305           Time_signature
306         )
307 @end example
308 ")
309       )))
310
311
312    (cons
313     'Breathing_sign_engraver
314     (engraver-description
315      "Breathing_sign_engraver"
316      ""
317      '(BreathingSign)
318      (list
319       )))
320
321
322    (cons
323     'Chord_name_engraver
324     (engraver-description
325      "Chord_name_engraver"
326      "Catch Note_req's, Tonic_reqs, Inversion_reqs, Bass_req
327 and generate the appropriate chordname."
328      '(ChordName)
329      (list
330       (translator-property-description 'chordInversion boolean? " Determines whether LilyPond should look for chord inversions when
331     translating from notes to chord names.  Set to 1 to find
332     inversions.  The default is 0 which does not look for
333     inversions.")
334       (translator-property-description 'drarnChords boolean? "")
335       )))
336
337
338    (cons
339     'Chord_tremolo_engraver
340     (engraver-description
341      "Chord_tremolo_engraver"
342      "Generates beams for the \repeat X tremolo ... construct"
343      '(Beam)
344      (list
345       )))
346
347
348
349    (cons
350     'Collision_engraver
351     (engraver-description
352      "Collision_engraver"
353      ""
354      '(NoteCollision
355        )
356      (list
357       )))
358
359    (cons
360     'Custos_engraver
361     (engraver-description
362      "Custos_engraver"
363      ""
364      '(Custos)
365      (list
366       )))
367
368
369    (cons
370     'Dot_column_engraver
371     (engraver-description
372      "Dot_column_engraver"
373      " Engraves dots on dotted notes shifted to the right of the note.
374 If omitted, then dots appear on top of the notes.
375 "
376      '(DotColumn
377        )
378      (list
379       )))
380
381
382    (cons
383     'Dynamic_engraver
384     (engraver-description
385      "Dynamic_engraver"
386      ""
387      '(DynamicLineSpanner
388        DynamicText Crescendo
389        TextSpanner)
390      (list
391       )))
392
393
394
395
396    (cons
397     'Grace_position_engraver
398     (engraver-description
399      "Grace_position_engraver"
400      "Attach a grace note alignment to a note-column "
401      '()
402      (list
403       )))
404
405    (cons
406     'Grace_engraver_group
407     (engraver-description
408      "Grace_engraver_group"
409      "An engraver that creates a `shielded' context-tree with separate notion of time"
410      '()
411      (list
412       )))
413
414
415    (cons
416     'Instrument_name_engraver
417     (engraver-description
418      "Instrument_name_engraver"
419      " Prints the name of the instrument (specified by
420     @code{Staff.instrument} and @code{Staff.instr}) at the left of the
421     staff."
422      '(InstrumentName)
423      (list
424       (translator-property-description 'instrument string? " If @code{Instrument_name_engraver}
425 @cindex Instrument_name_engraver
426  is
427     added to the Staff translator, then the @code{instrument} property
428     is used to label the first line of the staff and the @code{instr}
429     property is used to label subsequent lines.  If the
430     @code{midiInstrument} property is not set, then @code{instrument}
431     is used to determine the instrument for MIDI output.")
432       (translator-property-description 'instr string? "see @code{instrument}")
433       )))
434
435    (cons
436     'Engraver_group_engraver
437     (engraver-description
438      "Engraver_group_engraver"
439      "A group of engravers taken together"
440      '()
441      (list
442       )))
443
444    (cons
445     'Key_engraver
446     (engraver-description
447      "Key_engraver"
448      ""
449      '(KeySignature
450        )
451      (list
452       
453       (translator-property-description 'keySignature list? "")
454       (translator-property-description 'keyOctaviation boolean? "")
455       (translator-property-description 'explicitKeySignatureVisibility procedure? "")
456       (translator-property-description 'createKeyOnClefChange boolean? "")
457       (translator-property-description 'keyAccidentalOrder list? "")
458       (translator-property-description 'keySignature list? "")
459       )))
460
461    (cons 'Lyric_engraver
462          (engraver-description
463           "Lyric_engraver"
464           ""
465           '()
466           (list
467            ;; FIXME
468            )))
469
470    (cons 'Lyric_phrasing_engraver
471          (engraver-description
472           "Lyric_phrasing_engraver"
473           ""
474           '()
475           (list
476            (translator-property-description 'automaticPhrasing boolean? "")
477            (translator-property-description 'weAreGraceContext boolean? "")
478            (translator-property-description 'melismaEngraverBusy boolean? "")
479            (translator-property-description 'associatedVoice string? "")
480            (translator-property-description 'phrasingPunctuation string? "")
481            )))
482
483    (cons
484     'Mark_engraver
485     (engraver-description
486      "Mark_engraver"
487      ""
488      '(RehearsalMark)
489      (list
490
491       (translator-property-description 'rehearsalMark number-or-string? "")
492       (translator-property-description 'staffsFound list? "")
493       )))
494
495
496    (cons
497     'Melisma_engraver
498     (engraver-description
499      "Melisma_engraver"
500      ""
501      '()
502      (list
503
504       (translator-property-description 'melismaBusy boolean? "")
505       (translator-property-description 'slurMelismaBusy boolean? "")
506       (translator-property-description 'tieMelismaBusy boolean? "")
507       (translator-property-description 'beamMelismaBusy boolean? "")
508       )))
509
510
511    (cons
512     'Multi_measure_rest_engraver
513     (engraver-description
514      "Multi_measure_rest_engraver"
515      "Engraves multi-measure rests that are produced with @code{R}.  Reads
516 measurePosition and currentBarNumber to determine what number to print over the MultiMeasureRest
517    "
518      '(MultiMeasureRest)
519      (list
520       )))
521
522
523    (cons
524     'Note_heads_engraver
525     (engraver-description
526      "Note_heads_engraver"
527      "Generate one or more noteheads from Music of type Note_req."
528      '(NoteHead Dots)
529      (list
530       )))
531
532
533    (cons
534     'Note_name_engraver
535     (engraver-description
536      "Note_name_engraver"
537      ""
538      '(NoteName)
539      (list
540       )))
541
542
543    (cons
544     'Output_property_engraver
545     (engraver-description
546      "Output_property_engraver"
547      "Interpret Music of Output_property type, and apply a function
548 to any Graphic objects that satisfies the predicate."
549      '()
550      (list
551       )))
552
553
554    (cons
555     'Piano_pedal_engraver
556     (engraver-description
557      "Piano_pedal_engraver"
558      "engrave Piano pedals symbols."
559      '(SostenutoPedal SustainPedal UnaChordaPedal)
560      (list
561       
562         (translator-property-description 'startSustain string? "")
563         (translator-property-description 'stopSustain  string? "")
564         (translator-property-description 'stopStartSustain  string? "")
565         (translator-property-description 'startUnaChorda  string? "")
566         (translator-property-description 'stopUnaChorda string? "")
567       )))
568
569    (cons 
570     'Pitch_squash_engraver
571     (engraver-description
572      "Pitch_squash_engraver"
573      "Treat all pitches as middle C.  Note that the notes move, but
574 the locations of accidentals stay the same. 
575 Set the position field of all note heads to zero. This useful for
576 making a single line staff that demonstrates the rhythm of a melody."
577      '()
578      (list
579       (translator-property-description 'squashedPosition integer? " Vertical position of
580 squashing.")
581       )))
582    
583    (cons
584     'Property_engraver
585     (engraver-description
586      "Property_engraver"
587 "This is a engraver that converts \property settings into
588 back-end element-property settings. Example: Voice.stemLength will set
589 #'length in all Stem objects.
590
591 Due to CPU and memory requirements, the use of this engraver is deprecated."
592      '()
593      (list
594       (translator-property-description 'Generic_property_list list? "description of the conversion.
595
596 Defines names and types for generic properties. These are properties
597 than can be plugged into the backend directly. See the init file
598 @file{generic-property.scm} for details.  For internal use only,
599 deprecated.
600 ")
601       )))
602
603
604    (cons
605     'Repeat_acknowledge_engraver
606     (engraver-description
607      "Repeat_acknowledge_engraver"
608      
609      "Acknowledge repeated music, and convert the contents of
610 repeatCommands ainto an appropriate setting for whichBar"
611      '()
612      (list
613       (translator-property-description 'repeatCommands list? "")
614       (translator-property-description 'whichBar string? "")
615  
616       )))
617
618
619    (cons
620     'Rest_collision_engraver
621     (engraver-description
622      "Rest_collision_engraver"
623      "Handles collisions of rests."
624      '(RestCollision)
625      (list
626       )))
627
628
629    (cons
630     'Rest_engraver
631     (engraver-description
632      "Rest_engraver"
633      ""
634       '(Rest Dots)
635    (list
636       )))
637
638
639    (cons
640     'Rhythmic_column_engraver
641     (engraver-description
642      "Rhythmic_column_engraver"
643      "Generates NoteColumn, an objects that groups stems, noteheads and rests."
644      '(NoteColumn)
645      (list
646       )))
647
648
649    (cons
650     'Script_column_engraver
651     (engraver-description
652      "Script_column_engraver"
653      ""
654      '(ScriptColumn)
655      (list
656       )))
657
658
659    (cons
660     'Script_engraver
661     (engraver-description
662      "Script_engraver"
663      "    Handles note ornaments generated by @code{\script}.  
664 "
665      '(Script)
666      (list
667       (translator-property-description 'scriptDefinitions list? "
668 Description of scripts to use.  (fixme) 
669 ")
670
671       (translator-property-description 'scriptHorizontal boolean? "    Put scripts left or right of note heads.  Support for this is
672     limited.  Accidentals will collide with scripts.
673     
674 ")
675       )))
676
677    (cons
678     'Score_engraver
679     (engraver-description
680      "Score_engraver"
681      "Top level engraver. Takes care of generating columns and the complete  system (ie. LineOfScore)"
682      '(LineOfScore PaperColumn NonMusicalPaperColumn)
683      (list
684       (translator-property-description 'currentMusicalColumn ly-element? "")
685       (translator-property-description 'currentCommandColumn ly-element? "")
686       )))
687    
688    (cons 'Skip_req_swallow_translator
689          (engraver-description
690           "Skip_req_swallow_translator"
691           ""
692           '()
693           (list
694            ;; FIXME
695            )))
696
697    (cons
698     'Slur_engraver
699     (engraver-description
700      "Slur_engraver"
701      "Build slurs from Slur_reqs"
702      '(Slur)
703
704      (list
705       (translator-property-description 'slurBeginAttachment symbol? "translates to the car of Slur.element-property 'attachment.")
706       (translator-property-description 'slurEndAttachment symbol? "translates to the cdr of Slur.element-property 'attachment.")
707       (translator-property-description 'slurMelismaBusy boolean? "Signal a slur if automaticMelismata is set")
708       )))
709
710
711    (cons
712     'Spacing_engraver
713     (engraver-description
714      "Spacing_engraver"
715      "make a SpacingSpanner and do bookkeeping of shortest starting and playing notes  "
716      '(SpacingSpanner)
717      (list
718       )))
719
720
721    (cons
722     'Span_arpeggio_engraver
723     (engraver-description
724      "Span_arpeggio_engraver"
725      ""
726      '(Arpeggio)
727      (list
728       (translator-property-description 'connectArpeggios boolean? " If
729 set, connect all arpeggios that are found.  In this way, you can make
730 arpeggios that cross staffs.
731 ")
732       )))
733
734
735    (cons
736     'Span_bar_engraver
737     (engraver-description
738      "Span_bar_engraver"
739      "This engraver makes cross-staff barlines: It catches all normal
740 bar lines, and draws a single span-bar across them."
741
742      '(SpanBar)
743      (list
744       )))
745
746
747    (cons
748     'Staff_symbol_engraver
749     (engraver-description
750      "Staff_symbol_engraver"
751      "create the constellation of five (default) staff lines."
752      '(StaffSymbol)
753      (list
754       )))
755
756
757    (cons
758     'Stanza_number_engraver
759     (engraver-description
760      "Stanza_number_engraver"
761      ""
762      '(StanzaNumber
763        )
764      (list
765       (translator-property-description 'stz string? "")
766       (translator-property-description 'stanza string? "Stanza `number' to print at start of a verse")
767       )))
768
769
770
771    (cons
772     'System_start_delimiter_engraver
773     (engraver-description
774      "System_start_delimiter_engraver"
775      "creates a SystemStartDelimiter spanner"
776      '(SystemStartDelimiter)
777      (list
778       )))
779
780
781    (cons
782     'Text_engraver
783     (engraver-description
784      "Text_engraver"
785      "Create text-scripts"
786      '(TextScript)
787      (list
788       (translator-property-description 'scriptHorizontal boolean? "    Put scripts left or right of note heads.  Support for this is
789     limited.  Accidentals will collide with scripts.
790     
791 ")
792       (translator-property-description 'textNonEmpty boolean? " If set
793 to true then text placed above or below the staff is not assumed to
794 have zero width.  @code{fatText} and @code{emptyText} are predefined
795 settings.
796 ")
797       )))
798
799
800    (cons
801     'Text_spanner_engraver
802     (engraver-description
803      "Text_spanner_engraver"
804      "Create text spanner from a  Span_req "
805      '(TextSpanner)
806      (list
807       )))
808
809
810    (cons
811     'Thread_devnull_engraver
812     (engraver-description
813      "Thread_devnull_engraver"
814      "Kill elements whenever we are Voice called `two' and
815 either unison, unisilence or soloADue is set"
816      '()
817      '()))
818
819
820    (cons
821     'Tie_engraver
822     (engraver-description
823      "Tie_engraver"
824      "Generate ties between noteheads of equal pitch."
825      '(Tie TieColumn)
826      (list
827       
828
829       (translator-property-description 'sparseTies boolean? "only create one tie per chord.")
830       (translator-property-description 'tieMelismaBusy boolean? "Signal ties when automaticMelismata is set")
831       )))
832
833
834    (cons
835     'Time_signature_engraver
836     (engraver-description
837      "Time_signature_engraver"
838      "Create a TimeSignature whenever @code{timeSignatureFraction} changes"
839      '(TimeSignature)
840      (list
841       )))
842
843
844    (cons
845     'Timing_engraver
846     (engraver-description
847      "Timing_engraver"
848      " Responsible for synchronizing timing information from staffs. 
849     Normally in @code{Score}.  In order to create polyrhythmic music,
850     this engraver should be removed from @code{Score} and placed in
851     @code{Staff}."
852      '()
853      (list
854       (translator-property-description 'timeSignatureFraction number-pair? "
855 pair of numbers,  signifying the time signature. For example #'(4 . 4) is a 4/4 time signature.")   
856       
857       (translator-property-description 'barNonAuto boolean? " If set to true then bar lines will not be printed
858     automatically; they must be explicitly created with @code{\bar}
859     keywords.  Unlike with the @code{\cadenza} keyword, measures are
860     still counted.  Bar generation will resume according to that
861     count if this property is set to zero.
862 ")
863       (translator-property-description 'whichBar string? "if not set
864 explicitly (by \property or \bar), this is set according to values of
865 defaultBarType, barAlways, barNonAuto and measurePosition.
866  ")
867       
868       (translator-property-description 'barAlways boolean? " If set to true a bar line is drawn after each note.
869 ")
870       (translator-property-description 'defaultBarType string? "Sets the default type of bar line. See Section XREF-barlines [FIXME] 
871     for a list of available bar types.
872 ")
873       (translator-property-description 'skipBars boolean? " Set to true to skip the empty bars that are produced by
874     multimeasure notes and rests.  These bars will not appear on the
875     printed output.  If not set (the default)  multimeasure
876     notes and rests expand into their full length, printing the appropriate
877     number of empty bars so that synchronization with other voices is
878     preserved.
879
880 @c my @vebatim patch would help...
881 @example
882 @@mudela[fragment,verbatim,center]
883 r1 r1*3 R1*3\property Score.skipBars=1 r1*3 R1*3
884
885 @@end mudela
886 @end example
887
888 ")
889       (translator-property-description 'timing boolean? " Keep administration of measure length, position, bar number, etc?
890 Switch off for cadenzas.")
891       (translator-property-description 'oneBeat moment? "  How long does one beat in the current time signature last?")
892       (translator-property-description 'measureLength moment? "  How long does one measure in the current time signature last?")
893       (translator-property-description 'measurePosition moment? "
894   How much of the current measure (measured in whole notes) have we had?
895 ")
896       (translator-property-description 'currentBarNumber integer? "Contains the current barnumber. This property is incremented at
897 every barline.
898 ")
899       )))
900
901
902    (cons
903     'Tuplet_engraver
904     (engraver-description
905      "Tuplet_engraver"
906      "Catch Time_scaled_music and generate appropriate bracket  "
907      '(
908        TupletBracket)
909      (list
910       (translator-property-description 'tupletSpannerDuration moment? "
911 Normally a tuplet bracket is as wide as the
912 @code{\times} expression that gave rise to it. By setting this
913 property, you can make brackets last shorter. Example
914
915 @example
916 @@mudela[verbatim,fragment]
917 \context Voice \times 2/3 @{
918   \property Voice.tupletSpannerDuration = #(make-moment 1 4)
919   [c8 c c] [c c c]
920 @}
921 @@end mudela
922 @end example
923 ")
924       (translator-property-description 'tupletInvisible boolean? "
925     If set to true, tuplet bracket creation is switched off
926 entirely. This has the same effect as setting both
927 @code{tupletNumberVisibility} and @code{tupletBracketVisibility} to
928 @code{#f}, but as this does not even create elements, this setting
929 uses less memory and time.")
930       )))
931
932
933    (cons
934     'Vertical_align_engraver
935     (engraver-description
936      "Vertical_align_engraver"
937      "Catch Vertical axis groups and stack them."
938      '(VerticalAlignment)
939      (list
940       )))
941
942
943    (cons
944     'Voice_devnull_engraver
945     (engraver-description
946      "Voice_devnull_engraver"
947      "Kill off certain items and spanners if we're Voice `two' and unison or unisilence is set."
948      '()
949      (list
950       )))
951    ))
952
953
954
955
956 (define context-description-alist
957   '(
958 (Grace . "
959     The context for handling grace notes.  It is instantiated
960     automatically when you use @code{\grace}.  Basically, it is an
961     `embedded' miniature of the Score context.  Since this context
962     needs special interaction with the rest of LilyPond, you should
963     not explicitly instantiate it.
964 ")
965 (LyricVoice . "
966     Corresponds to a voice with lyrics.  Handles the printing of a
967     single line of lyrics.
968 ")
969 (Thread . "
970     Handles note heads, and is contained in the Voice context.  You
971     have to instantiate this explicitly if you want to adjust the
972     style of individual note heads.
973 ")
974 (Voice . "
975     Corresponds to a voice on a staff.  This context handles the
976     conversion of dynamic signs, stems, beams, super- and subscripts,
977     slurs, ties, and rests.
978
979     You have to instantiate this explicitly if you want to have
980     multiple voices on the same staff.")
981
982 (ChordNamesVoice . "
983     A voice with chord names.  Handles printing of a line of chord
984     names.")
985
986 (ChordNames . "
987     Typesets chord names.  Can contain @code{ChordNamesVoice}
988     contexts.")
989
990 (Lyrics . "
991     Typesets lyrics.  It can contain @code{LyricVoice} contexts.
992 ")
993 (Staff . "
994     Handles clefs, bar lines, keys, accidentals.  It can contain
995     @code{Voice} contexts.
996 ")
997 (RhythmicStaff . "
998     A context like @code{Staff} but for printing rhythms.  Pitches are
999     ignored; the notes are printed on one line.  It can contain
1000     @code{Voice} contexts.
1001 ")
1002 (GrandStaff . "
1003     Contains @code{Staff} or @code{RhythmicStaff} contexts.  It adds a
1004     brace on the left side, grouping the staffs together.  The bar
1005     lines of the contained staffs are connected vertically.  It can
1006     contain @code{Staff} contexts.")
1007
1008 (PianoStaff . "
1009     Just like @code{GrandStaff} but with @code{minVerticalAlign} set
1010     equal to @code{maxVerticalAlign} so that interstaff beaming and
1011     slurring can be used.")
1012
1013 (StaffGroup . "
1014     Contains @code{Staff} or @code{RhythmicStaff} contexts.  Adds a
1015     bracket on the left side, grouping the staffs together.  The bar
1016     lines of the contained staffs are connected vertically.  It can
1017     contain @code{Staff}, @code{RhythmicStaff}, @code{GrandStaff}, or
1018     @code{Lyrics} contexts.
1019 ")
1020 (ChoirStaff . "
1021     Identical to @code{StaffGroup} except that the contained staffs
1022     are not connected vertically.
1023 ")
1024 (Score . "
1025     This is the top level notation context.  No other context can
1026     contain a @code{Score} context.  This context handles the
1027     administration of time signatures.  It also makes sure that items
1028     such as clefs, time signatures, and key-signatures are aligned
1029     across staffs.  It can contain @code{Lyrics}, @code{Staff},
1030     @code{RhythmicStaff}, @code{GrandStaff}, @code{StaffGroup}, and
1031     @code{ChoirStaff} contexts.
1032
1033     You cannot explicitly instantiate a Score context (since it is
1034     not contained in any other context).  It is instantiated
1035     automatically when an output definition (a @code{\score} or
1036     @code{\paper} block) is processed.
1037 ")
1038 )
1039 )