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)
6 (define (translator-property-description symbol type? description)
7 (list symbol type? description)
10 (define engraver-description-alist
16 "Create stems and single-stem tremolos"
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
25 (translator-property-description 'stemRightBeamCount integer? "idem, for the right side")
32 "Create lyric hyphens"
41 "Create lyric extenders"
48 'Separating_line_group_engraver
50 "Separating_line_group_engraver"
51 "Generates objects for computing spacing parameters."
52 '(SeparationItem SeparatingGroupSpanner)
60 "Group all objects created in this context in a VerticalAxisGroup spanner."
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.
69 \property Staff.StaffVerticalExtent = #(-5.0 . 5.0)
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]") )))
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)
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.
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.
107 Causes accidentals to be printed at every note instead of
108 remembered for the duration of a measure.
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.
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
124 (engraver-description
126 "Make volta brackets"
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.
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}.
146 (engraver-description
148 "Determine and set reference point for pitches"
149 '(Clef OctavateEight)
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")
163 (engraver-description
165 "Part combine engraver for orchestral scores."
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")
181 'Align_note_column_engraver
182 (engraver-description
183 "Align_note_column_engraver"
184 "Generate object to put grace notes from left to right."
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")
194 (engraver-description
196 "Generate an Arpeggio from a Arpeggio_req"
203 (engraver-description
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.
211 (translator-property-description 'noAutoBeaming boolean? " If set to true then beams are not generated automatically.
213 (translator-property-description 'autoBeamSettings list? "
214 Specifies when automatically generated beams should begin and end. The elements have the format:
218 function shortest-duration-in-beam time-signature
222 function = begin or end
223 shortest-duration-in-beam = numerator denominator; eg: 1 16
224 time-signature = numerator denominator, eg: 4 4
226 unspecified or wildcard entries for duration or time-signature
229 The user can override beam begin or end time by pushing a wildcard entries
230 '(begin * * * *) or '(end * * * *) resp., eg:
232 \property Voice.autoBeamSettings \push #'(end * * * *) = #(make-moment 1 4)
234 The head of the list:
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))
246 (engraver-description
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"
252 (translator-property-description 'whichBar string? "This property is read to determine what type of barline to create.
255 \\property Staff.whichBar = \"|:\"
257 will create a start-repeat bar in this staff only
259 (translator-property-description 'staffsFound list? "list of all staff-symbols found.")
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."
271 (translator-property-description 'currentBarNumber integer? "this is read to determine
272 the number to put on the bar ")
278 (engraver-description
280 "Handles Beam_requests by engraving Beams. If omitted, then notes will be
281 printed with flags instead of beams."
284 (translator-property-description 'beamMelismaBusy boolean? "Signal if a beam is set when automaticMelismata is set")
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)
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:
300 \\property Score.breakAlignOrder = #'(
314 'Breathing_sign_engraver
315 (engraver-description
316 "Breathing_sign_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."
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
335 (translator-property-description 'drarnChords boolean? "")
340 'Chord_tremolo_engraver
341 (engraver-description
342 "Chord_tremolo_engraver"
343 "Generates beams for the \repeat X tremolo ... construct"
352 (engraver-description
362 (engraver-description
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.
385 (engraver-description
389 DynamicText Crescendo
398 'Grace_position_engraver
399 (engraver-description
400 "Grace_position_engraver"
401 "Attach a grace note alignment to a note-column "
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"
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
425 (translator-property-description 'instrument string? " If @code{Instrument_name_engraver}
426 @cindex Instrument_name_engraver
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}")
437 'Engraver_group_engraver
438 (engraver-description
439 "Engraver_group_engraver"
440 "A group of engravers taken together"
447 (engraver-description
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? "")
462 (cons 'Lyric_engraver
463 (engraver-description
471 (cons 'Lyric_phrasing_engraver
472 (engraver-description
473 "Lyric_phrasing_engraver"
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? "")
486 (engraver-description
492 (translator-property-description 'rehearsalMark number-or-string? "")
493 (translator-property-description 'staffsFound list? "")
499 (engraver-description
505 (translator-property-description 'melismaBusy boolean? "")
506 (translator-property-description 'slurMelismaBusy boolean? "")
507 (translator-property-description 'tieMelismaBusy boolean? "")
508 (translator-property-description 'beamMelismaBusy boolean? "")
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
526 (engraver-description
527 "Note_heads_engraver"
528 "Generate one or more noteheads from Music of type Note_req."
536 (engraver-description
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."
556 'Piano_pedal_engraver
557 (engraver-description
558 "Piano_pedal_engraver"
559 "engrave Piano pedals symbols."
560 '(SostenutoPedal SustainPedal UnaChordaPedal)
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? "")
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."
580 (translator-property-description 'squashedPosition integer? " Vertical position of
586 (engraver-description
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.
592 Due to CPU and memory requirements, the use of this engraver is deprecated."
595 (translator-property-description 'Generic_property_list list? "description of the conversion.
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,
606 'Repeat_acknowledge_engraver
607 (engraver-description
608 "Repeat_acknowledge_engraver"
610 "Acknowledge repeated music, and convert the contents of
611 repeatCommands ainto an appropriate setting for whichBar"
614 (translator-property-description 'repeatCommands list? "")
615 (translator-property-description 'whichBar string? "")
621 'Rest_collision_engraver
622 (engraver-description
623 "Rest_collision_engraver"
624 "Handles collisions of rests."
632 (engraver-description
641 'Rhythmic_column_engraver
642 (engraver-description
643 "Rhythmic_column_engraver"
644 "Generates NoteColumn, an objects that groups stems, noteheads and rests."
651 'Script_column_engraver
652 (engraver-description
653 "Script_column_engraver"
662 (engraver-description
664 " Handles note ornaments generated by @code{\script}.
668 (translator-property-description 'scriptDefinitions list? "
669 Description of scripts to use. (fixme)
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.
680 (engraver-description
682 "Top level engraver. Takes care of generating columns and the complete system (ie. LineOfScore)
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.)
692 '(LineOfScore PaperColumn NonMusicalPaperColumn)
694 (translator-property-description 'currentMusicalColumn ly-element? "")
695 (translator-property-description 'currentCommandColumn ly-element? "")
698 (cons 'Skip_req_swallow_translator
699 (engraver-description
700 "Skip_req_swallow_translator"
709 (engraver-description
711 "Build slurs from Slur_reqs"
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")
723 (engraver-description
725 "make a SpacingSpanner and do bookkeeping of shortest starting and playing notes "
732 'Span_arpeggio_engraver
733 (engraver-description
734 "Span_arpeggio_engraver"
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.
747 (engraver-description
749 "This engraver makes cross-staff barlines: It catches all normal
750 bar lines, and draws a single span-bar across them."
758 'Staff_symbol_engraver
759 (engraver-description
760 "Staff_symbol_engraver"
761 "create the constellation of five (default) staff lines."
768 'Stanza_number_engraver
769 (engraver-description
770 "Stanza_number_engraver"
775 (translator-property-description 'stz string? "")
776 (translator-property-description 'stanza string? "Stanza `number' to print at start of a verse")
782 'System_start_delimiter_engraver
783 (engraver-description
784 "System_start_delimiter_engraver"
785 "creates a SystemStartDelimiter spanner"
786 '(SystemStartDelimiter)
793 (engraver-description
795 "Create text-scripts"
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.
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
811 'Text_spanner_engraver
812 (engraver-description
813 "Text_spanner_engraver"
814 "Create text spanner from a Span_req "
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"
832 (engraver-description
834 "Generate ties between noteheads of equal pitch."
839 (translator-property-description 'sparseTies boolean? "only create one tie per chord.")
840 (translator-property-description 'tieMelismaBusy boolean? "Signal ties when automaticMelismata is set")
845 'Time_signature_engraver
846 (engraver-description
847 "Time_signature_engraver"
848 "Create a TimeSignature whenever @code{timeSignatureFraction} changes"
856 (engraver-description
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
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.")
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.
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.
881 (translator-property-description 'barAlways boolean? " If set to true a bar line is drawn after each note.
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.
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
893 @c my @vebatim patch would help...
895 @@lilypond[fragment,verbatim,center]
896 r1 r1*3 R1*3\property Score.skipBars=1 r1*3 R1*3
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?
909 (translator-property-description 'currentBarNumber integer? "Contains the current barnumber. This property is incremented at
917 (engraver-description
919 "Catch Time_scaled_music and generate appropriate bracket "
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
929 @@lilypond[verbatim,fragment]
930 \context Voice \times 2/3 @{
931 \property Voice.tupletSpannerDuration = #(make-moment 1 4)
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.")
947 'Vertical_align_engraver
948 (engraver-description
949 "Vertical_align_engraver"
950 "Catch Vertical axis groups and stack them."
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."
969 (define context-description-alist
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.
979 Corresponds to a voice with lyrics. Handles the printing of a
980 single line of lyrics.
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.
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.
992 You have to instantiate this explicitly if you want to have
993 multiple voices on the same staff.")
996 A voice with chord names. Handles printing of a line of chord
1000 Typesets chord names. Can contain @code{ChordNamesVoice}
1004 Typesets lyrics. It can contain @code{LyricVoice} contexts.
1007 Handles clefs, bar lines, keys, accidentals. It can contain
1008 @code{Voice} contexts.
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.
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.")
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.")
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.
1034 Identical to @code{StaffGroup} except that the contained staffs
1035 are not connected vertically.
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.
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.